Четверг, 28 Марта 2024, 16:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Записи участника » 1nferno [21]
Результаты поиска
1nfernoДата: Среда, 22 Июня 2011, 02:06 | Сообщение # 1 | Тема: Браузерная Игра
был не раз
Сейчас нет на сайте
up
1nfernoДата: Воскресенье, 02 Января 2011, 19:46 | Сообщение # 2 | Тема: Карта для браузерной стратегии
был не раз
Сейчас нет на сайте
А что если загружать карту большими частями?
Например разбить весь игровой мир на куски 50х50 и подгружать их, а отображать теже поля 7х7.
Тоесть понадобится загружать карту редко, но очень тяжелыми частями (прикинул - поле 50х50 порядка 100-200 кбайт в JSON, в XML соответственно тяжелее будет)
Базу данных по идее в итоге будет грузить меньше, ведь мы это можем извлеч одним запросом.


Сообщение отредактировал 1nferno - Воскресенье, 02 Января 2011, 19:46
1nfernoДата: Воскресенье, 26 Декабря 2010, 21:55 | Сообщение # 3 | Тема: Помогите с игрой
был не раз
Сейчас нет на сайте
Quote
Запомни, Сеня! Чужое брать - нехорошо! Статья 158-я!

Goblin

1nfernoДата: Понедельник, 13 Декабря 2010, 10:52 | Сообщение # 4 | Тема: Структура данных чата.
был не раз
Сейчас нет на сайте
Dizelist,

Видимо придется делать так:

Таблица chat(тут храняться все сообщения):

idchat - id сообщения
timestamp - время сообщения
type1 - к какому виду чата относится сообщение, значения могут быть location, group, clan, private
type2 - в зависимости от type1: id локации, имя группы, имя клана, имя игрока (владельца приватного чата)
type3 - id приватного чата, это поле нужно только для private чата.
who - автор сообщения
message - текст сообщения

Таблица privatechats(тут храняца данные о приватных чатах, кто в каких чатах находится):

idchar - владелец приватного чата
idprivatechat - id приватного чата , число от 0 до 10 например
idchar2 - имя кто состоит в чате
entered - равно 0 или 1, поле нужно для приглашения кого то в чат.
(тут получается примари кей состоит из первых трех столбцов)

Ну и примерно вот так будет выглядеть JSON для AJAX:

Code
{  
last_id:"id",
type1_location:[{who:"user1", message:"bla bla bla"},  
                        {who:"user7", message:"bla bla bla"},  
                        {who:"user3", message:"bla bla bla"}  
],  
type1_group:[аналогично],  
type1_clan:[аналогично],
type1_private[
     {
      who:"владелец чата",
      idchat:"1",
      who:"автор сообщения"
      message:"bla bla bla"
      },
      ....
      ....
      ....
]  
}

Вот вроде все.

1nfernoДата: Среда, 08 Декабря 2010, 18:00 | Сообщение # 5 | Тема: Структура данных чата.
был не раз
Сейчас нет на сайте
Ну по количеству это понятно. Например каждый пользователь может создать до 10 групповых чатов. Идентифицировать их можно будет по пользователю и номеру.
Ну а насчет поля users поконкретней можно... как все это будет происходить тогда?
1nfernoДата: Среда, 08 Декабря 2010, 17:44 | Сообщение # 6 | Тема: Структура данных чата.
был не раз
Сейчас нет на сайте
cougraAcc,
По поводу первого вопроса: нам не нужно обрабатывать сообщение и выдирать из него имя игрока(кому послано это сообщение), это не приватное сообщение и оно видно всем.

по поводу всторого вопроса:
так вроде не прокатит:
нам нужно как то идентифицоровать чаты, ведь у каждого пользователя может быть больше одного приватного группового чата.

вот например мы убираем одного пользователя из нашего чата , какая тогда должна быть запись об этом в БД?

1nfernoДата: Среда, 08 Декабря 2010, 17:06 | Сообщение # 7 | Тема: Структура данных чата.
был не раз
Сейчас нет на сайте
Спасибо за ответы. Вроде немного разобрался. Просто тупил чутка.
Значит приватные сообщения будут определяться значением поля type1 = private (в базе данных).
Столбец to нам впринципе не нужен, так как значение кому мы отправляем будет частью самого сообщения - message.

Теперь остался еще один вопрос. Как сделать групповые приватные чаты:
Например я нажимаю на какого нибудь пользователя и создается чат, потом могу добавить ещё сколько угодно игроков, и могу удалять их из чата.
И такие чаты может создавать каждый игрок. И каждому игроку можно создавать несколько таких (групповых приватных) чатов.

тоесть нужно гдето хранить информацию о этих чатах и кто в них входит.

Есть идеи ?

1nfernoДата: Понедельник, 06 Декабря 2010, 03:53 | Сообщение # 8 | Тема: Структура данных чата.
был не раз
Сейчас нет на сайте
Доброго времени суток.
Частенько просматриваю этот форум, но к сожалению мало вижу толковых тем =((. Ну да ладно... давайте попробуем

Собственно хотелось бы послушать мнения людей по данному вопросу.
Нужно придумать структуру сообщения в котором будут передаваться сообщения чата(а скорее чатов).
Имеем: обычная браузерная ММОРПГ. У игрока в игре общение происходит посредством нескольких чатов, а именно:
чат локации
(соответственно общение с игроками, которые находятся в текущей локации, можно адресовать сообщения кому либо, приватных сообщений нет)
Чат группы
(отправляются сообщения группе , в которой состоит игрок, можно адресовать сообщения, приватных нет)
Чат клана
(аналогично)
Приватные чаты

Считаю так будет лучше - отделить приватные сообщения от простых. Незнаю как реализовать приватные чаты - их же количество не определенное , и они должны появляться, когда я например захотел с кем то поговорить и их можно закрывать. Также было бы неплохо сделать динамические групповые чаты.
С первыми тремя чатами(локация, группа, клан) вроде все просто, проблема с приватными.
Чаты сделаны с помошью AJAX. Передается JSON в нем все сообщения для всех чатов. Клиентская сторона - только javascript, флэша нет.
Структура таблицы чата думаю должна быть примерно такая:
Chat table

id (id сообщения)
timestamp (Временная метка , когда было послано сообщение)
type1 (тип сообщения, к какому чату оно относится, принимает четыре значения: location, group, clan, private)
type2 (в зависимости от поля type1 принимает значения: location - id локации, group - id или имя группы, clan - название или id клана, private - id или имя игрока с кем идет приватная переписка)
who (кто отсылает сообщения)
to (кому адресовано сообщение)
message (текст сообщения)

Так у не получится отсылать сообщение нескольким игрокам(например в какойнить локации сказать одним сообщением васе и пети).
Думаю JSON должен выглядеть примерно так:
{
type1_location:[{who:"user1", to:"user5", message:"bla bla bla"},
{who:"user7", to:"user5", message:"bla bla bla"},
{who:"user3", to:"", message:"bla bla bla"}
]
type1_group:[
аналогично
]
type1_clan:[
аналогично
]
type1_private[
А вот тут хз как
]
type1_privategroup[
было бы неплохо и такую штуку сделать
]
}

Вот как то так. Может это конечно и полная бредятина, может есть какое то решение попроще, или правильнее.
Буду благодарен за любые подсказки.

1nfernoДата: Вторник, 31 Августа 2010, 19:40 | Сообщение # 9 | Тема: Выполнение скрипта на сервере
был не раз
Сейчас нет на сайте
Bydlocoder,
Quote
Можно сделать кнопочку

да, и посадить китайца , чтобы нажимал эту кнопочку =)))
какой аякс скрипт.... компьютеры игроков выключены, запускать скрипты некому и нечему...
1nfernoДата: Понедельник, 23 Августа 2010, 18:52 | Сообщение # 10 | Тема: Выполнение скрипта на сервере
был не раз
Сейчас нет на сайте
Всем привет.
этот вопрос уже обсуждался

http://gcup.ru/forum/51-1972-6

В итоге похоже, что есть только два варианта:
1.запускать скрипт по крону, чтобы он проверял есть ли не завершенные бои или нет, и заверщал бы их
2.написать приложение (демон), которому бы передовалось сообщение о том что такой то бой начался, и он бы следил за этим боем и в случае оффлайна обоих игроков дописывал окончание боя.

1nfernoДата: Воскресенье, 06 Июня 2010, 20:43 | Сообщение # 11 | Тема: Урок по созданию браузерной игры № 7
был не раз
Сейчас нет на сайте
Спасибо за ответ...
а какое у тебя в игре, в этой таблице количество вещей на данный момент?
Видимо так и придётся делать....
Я так понимаю индексирование по полю владелец(игрок), так как по нему будет делаться выборка?
1nfernoДата: Воскресенье, 06 Июня 2010, 13:48 | Сообщение # 12 | Тема: Урок по созданию браузерной игры № 7
был не раз
Сейчас нет на сайте
Всем привет.

Помучив первую тему теперь приступим к инвентарю... =)))
Данное решение инвентаря подходит только для ситуации когда у нас в инвентаре ограниченное количество слотов для вещей (может я ошибаюсь, но это не так важно, так как все равно нельзя будет реализовать ещё несколько штук см. ниже).

Сначала опишем каким образом это должно быть в самой игре.
Во первых мы заранее не знаем какое количество(ограничение на слоты) вещей у нас будет в инвентаре, тоесть у нас должен быть приличный запас на количество.
Во вторых должна быть возможность улучшать (изменять) параметры вещей, заточка оружия например. Возможность времменных модификаторов - наприммер улучшена атака меча на сутки. Важно , чтобы эти изменения были привязаны именно к оружию, тоесть если я его выкину , а потом ктото подберёт , то эти модификаторы остались на оружии.
вроде пока все...

Теперь как это будет у нас реализовано в MySQL.
Как все это унас будет отображаться в интерфейсе пользователя я считаю не так важно и кто как хочет может реализовывать, это не будет влиять на архитектуру хранения в MySQL.
1.Самый примитивный способ, я думаю, это все вещи зогнать в одну таблицу например item_list (я имею ввиду не види вещей а ВСЕ вещи). Тоесть будут столбцы item_id (уникальный номер вещи по всей игре) item_name, характеристики вещи(которые мы сможем потом менять - делать всякие заточки , улучшения ), другие параметры вещи и столбец - какому игроку принадлежит вещь.
В этой ситуации наверно придётся раскидывать разные виды вещей по разным таблицам (мечи в одной таблице щиты в другой и т.д.) ввиду разных характеристик предмета, у меча нет параметра брони , у шлема - параметра атаки. Но представьте сколько времени будет занимать формирование инвентаря, нужно будет сделать запросы ко всем таблицам и выбрать по параметру - принадлежность предмета. А таблицы то будут огромные...
Думаю этот вариант не подходит - ресурсоёмкое решение (хотя если таблици сортировать по принадлежности предметов.... ??? ).

2. У нас есть таблица Inventar, есть таблицы с видами вещей item_list (id вещи и её характеристики ). В ней храняться инвентари всех игроков, тоесть по количеству записей она будет соответствовать таблице users. Первый столбец - user_id. А потом содержимое инвентаря, ктоторое придётся хранить в текстовом виде : перечисление всех вещей и за каждой вещью её модификаторы
(id_123 min_attack=+7 max_attack=+4 mf_crit=-12, id_156 def=+50 mf_crit=+15, ...... - в данном случае мы имеем в инвентаре меч id_123 у которого есть свои параметры атаки и модификаторов, кот мы берём из таблицы item_list и к этим параметрам прибавляем индивидуальные модификаторы характерные именно для этой вещи - увеличиваем минимальную аттаку на 7 , максимальную аттаку на 4 и модификатор крита уменьшаем на 12 и так делаем со всеми перечисленными вещами).
Минус всего этого , в том что нам придётся каждый раз работатьс этой гигантской строчкой....
а также у нас нет уникального id вещи, с помощью которого мы могли бы просто выкинуть вещь или подобрать, нам придётся прикаждом действии с вещью передавать её параметры.

Нус... жду обсуждения всего этого....

1nfernoДата: Вторник, 01 Июня 2010, 14:23 | Сообщение # 13 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Опять же...
Задача kio_home, решается программой(демоном) =)))
1nfernoДата: Суббота, 29 Мая 2010, 01:34 | Сообщение # 14 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Lucasito, ты про крон ???
дак мы его уже обсудили =)))
1nfernoДата: Пятница, 28 Мая 2010, 21:41 | Сообщение # 15 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Хмм а на чём это можно сделать?
JavaScript?
1nfernoДата: Пятница, 28 Мая 2010, 19:13 | Сообщение # 16 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Хммм...
Си(Си++) помоему тоже вполне серьёзно... =))) (вообщем не важно на чём написан будет демон)
Повторяю : для решения проблем с боем - проще cron , но для всего остального ( ну например Движение NPC по локациям (конечно если прикинуть на кроне+ PHP тоже это можно будет сделать ) да малоли чего ещё в игре придётся наворотить) лучше вариант с демоном.

Quote
Подход мне нравится) правда есть одно НО
Quote
Недавно нашёл неплохую альтернативу - cgi.

Ну подскажите тогда .... чем плох этот CGI (FastCGI) и как можно по другому реализовать взаимодействие PHP скриптов и Демона.

Добавлено (28.05.2010, 17:20)
---------------------------------------------
Сам нашёл....

Quote
PHP поддерживает одну операцию выполнения: обратные апострофы (``). Обратите внимание, что это не одинарные кавычки! PHP пытается выполнить содержимое внутри обратных апострофов как команду оболочки; возвращается вывод (т.е. он не просто выдаётся на выходе; он может быть присвоен переменной).

Code
$output = `ls -al`;
echo "<pre>$output</pre>";

Примечание: операция (``) не работает, если включён безопасный режим/safe mode или если shell_exec() отключена.

Вот так будет значительно проще..... biggrin

Добавлено (28.05.2010, 19:13)
---------------------------------------------
Но вот назрел новый вопрос...
Нам нужно какимто образом принудительно перезагрузить страницу пользователя(например на него ктото напал).
Каким образом это можно сделать ??? (допустим перезагрузить страницу при изменении значения в БД).

1nfernoДата: Понедельник, 24 Мая 2010, 16:16 | Сообщение # 17 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Вот только не надо тут язвить, B1zDelKin, .
Я не утверждаю ,что все что я говорю это факт. Просто хочу разобраться.

Quote
Quote (1nferno)
я веду к тому что все скрипты выполняются после какого либо нажатия на ссылку пользователем, соответственно если оба пользователя будут в оффлайне - кем будет вестись запись боя(завершение его например)

С чего Вы вообще это взяли?

если это не так, тогда не могли бы кратко объяснить ка работают PHP скрипты.
По моему представлению пользователь запрашивает страницу (index.php например) интерпретатор на сервере обрабатывает этот скрипт , выполняет его код и выводит пользователю страницу.

Про

Quote
Quote
и в итоге окончание боя у нас запишет в базу тот, кто запросит любую информацию прямо или косвенно касающуюся боя (кроме рузультата боя это может быть инфа о самом игроке учавствовавшем в бою , так как текущее значение его жизней будет зависеть от результата боя)

А можно так, чтобы я просто подумал о ком нить из них и оно в базу записалось?

я имею ввиду, что когда два игрока в бою уходят в оффлайн бой остаётся незавершенным. Допустим третий игрок хочет посмотреть информацию об одном из этих игроков. Так как эта инфа зависит от результата боя (уровень жизни например) то нам нужно чтобы этот бой был закончен. Тоесть в скрипт , который показывает инфу надо встроить скрипт проверки находится ли игрок в бою, и если да , и если бой незавершен и все ушли в оффлайн, тогда просто записываем окончание боя.

Да... это будет сложновато , так как надо предусмотреть все места куда воткнуть этот скрипт на проверку окончания боя.
Я думал о cron'е но считаю что это не правильно...

Опять же напоминаю, что такие заморочки могут быть не только с боем.

Недавно нашёл неплохую альтернативу - cgi.
Тоесть можно написать простенькую "Си" программу демон, в которую при начале каждого боя будет поступать информация о нём(что такой бой начался). И это программа будет проверять через заданное время статус боя , и если нужно будет его завершать.

Да - с помощью крона это сделать намного проще, но с демоном это решение будет гибким и в дальнейшем можно расширить. Ну а если игра будет иметь успех, то мы сталкнёмся с проблемой производительности , и основную часть игры можно будет перенести в "Си" прграмму(в разы будет производительнее).

smile

1nfernoДата: Четверг, 13 Мая 2010, 18:03 | Сообщение # 18 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Мне логика понятно по какому алгоритму что должно делаться
Все равно ..... кто(какая программа) будет определять что пользователь не в сети ?, хотя нет, это не важно( это я так понимаю можно определить по последнему запросу пользователя, например если он был больше 10 минут назад [запись в базе времени последнего запроса пользователя]) - соответственно пользователь не в сети )
я веду к тому что все скрипты выполняются после какого либо нажатия на ссылку пользователем, соответственно если оба пользователя будут в оффлайне - кем будет вестись запись боя(завершение его например)
???

Добавлено (13.05.2010, 18:03)
---------------------------------------------
ну чтож...
побеседовав с Lucasito, выяснил что пока известен только один нормальный метод:
данные о бое у нас записываются в БД. потом допустим оба игрока уходят в оффлайн....
и в итоге окончание боя у нас запишет в базу тот, кто запросит любую информацию прямо или косвенно касающуюся боя (кроме рузультата боя это может быть инфа о самом игроке учавствовавшем в бою , так как текущее значение его жизней будет зависеть от результата боя)
в итоге в базу будет занесена информация задним числом(временем).

Впринципе обдумав... решение не такое уж плохое и не должно загружать сервер.

Что скажете товарищи ???

1nfernoДата: Четверг, 13 Мая 2010, 16:09 | Сообщение # 19 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
Хммм... все равно не понимаю...
скорее всего изза незнания PHP
когда и кем запускается скрипт, который будет выкидывать игрока и завершать бой ??
1nfernoДата: Четверг, 13 Мая 2010, 14:29 | Сообщение # 20 | Тема: Уроки по созданию браузерной игры
был не раз
Сейчас нет на сайте
каким образим будут запускаться скрипты на сервере ???

Есть много таких серверов (некоторые заточены специально под браузерные игры).

Подскажите что вы имеете ввиду.... что за сервера ???
Допустим можно запускать скрипты по cron(в linux), но я думаю это както неправильно будет....

Форум игроделов » Записи участника » 1nferno [21]
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг