Многопользовательская онлайн игра

Spear

почемучка
Многопользовательская онлайн игра

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

Уже готова регистрация, авторизация.
Почти сделан чат (яваскрипт + рнр)

Дальше - самое важное - игровой процесс.
А я даже не знаю с чего начать.

Хочу чтобы игра была похожа на Территорию - по моему это гораздо интереснее того же БК.

Вообщем я честно - даже не знаю что делать сейчас.
Сделать систему передвижения по местностям? а как именно это лучше реализовать?
Перемещаться можно будет: между городами, между районами городов, по улицам. Сделать три таблицы - gorod, rayon, ulica? И потом их заполнять примерно такими данными:

айди / название / описание / айди городов (районов, улиц) в которые можно перейти отсюда /
Правильна ли будет такая реализация? Не хотелось бы с самого начала делать что-либо неверно.

Дальше - параметры персонажа. Хранить все данные в таблице пользователей (там же, где и название логина и пароль..) Чтобы сразу все в одном месте? От даты регистрации до максимального НР, опыта и прочего? Как лучше?

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

Честно, я буду очень благодаренлюбым ответам по теме, которые смогут мне помочь при написании наиболее ответственных моментом в игре. Все, что вы считаете, что может мне помочь. Любые идеи / замечания / поправки / факты.
Я не прошу какого-либо готового РНР кода.

С уважением, Сергей.
 

Нечто

Психолог РНРClub
Придумал бы чего-нибудь оригинальное, а то опять Территоррия, БК... Героев нам!.. и мяса!.. и пива!
 

Spear

почемучка
Нечто
чтобы придумывать оригинальный компоненты -нужно же основу сделать, правильно? Этим и хочу заняться :)
 

jrip

Новичок
Spear
Как-то пытался писать что-то подобное... Даже несколько идей было неплохих. Но скажу я тебе - написать скрипты это совсем не проблема по сравнению со всем остальным. Самое главное баланс, с тем же тестингом боя я парился где-то с месяц, притом что параметров-то было всего три. В общем стукнись ко мне как-нить вечерком в асю 320-854-761, может смогу чем помочь...
 

Кром

Новичок
Spear
Я бы посоветовал тебе пока остановиться и не писать пока код. Продумая сначала, что это будет за игра. Какие цели правила и т.д. Т.е.
Потом продумай все детали.
И уже потом начинай разговор о структуре базы данных. :)
 

Spear

почемучка
если хочешь пообщатся пиши в тамошний форум
а тут запинают
оки, если что - то напишу.

Хотя не думаю что запинают. Сколько я на этом форуме ни постил - мне всегда помогали.

-~{}~ 31.08.05 06:06:

По теме - начал проектировать БД.
оказалось гораздо интересее чем я думал.
По ходу проектировки вспомнил о некоторых важных функциях в игре, о коорых забыл сначала.. например - нужно же вести учет получения опыта. (айди польз., исходный опыт, полученный, айди боя, дата). Особенно полезно это будет на ранних этапах..ведь наверняка будут упреки, мол "че за фигня? победил игрока сильнее меня а получил ХХ опыта".
Тогда сразу легко будет проверить в чем ошибка (логи боев тоже будут вестись).


Правда, возник такой вопрос - как вообще организовывать бои?
 

Кром

Новичок
>По теме - начал проектировать БД.
>Правда, возник такой вопрос - как вообще организовывать бои?

Spear, я тебе говорю, а ты похоже не понимаешь. Не надо проектировать БД, не зная, как у тебя будет организована игра.
Объясняю на пальцах. Есть различные настольные игры, типа Монополии и т.д. Попробуй сначала сделать настольную игру со всеми правилами и т.д. Сразу поймешь, что важно, а что нет.
Потом, переложить ее в код, будет просто делом времени. :)
 

EugeneVC

Новичок
рекомендую сделать сначала что то одно

например зоны
передвижение по ним
редактор для зон

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

потоим только бои начнутся
 

Spear

почемучка
Spear, я тебе говорю, а ты похоже не понимаешь. Не надо проектировать БД, не зная, как у тебя будет организована игра.
дык дело в том что как организована игра (схематически) я уже знаю (несколько листов А4).
то есть описано что можно делать, как это можно делать и когда.
Например бои:
сначала юзер идет на страницу ХХХХ (в игровом фрейме)
в это время проверяется, разрешены ли бои там, где он находится (улица, здание).
Потом - может ли драться он (вдруг ему модераторы запретили в знак наказания, или продолжается эффект какого-лиюо предмета).
Если все окей - он выбирает тип боя.
Опять же - типов боев несколько, и поэтому поверяется - хватает ли ему его уровня для проведения выбранного типа боя.
Далее - послек выбора типа боя ему показываются заявки по этому типу. Заявки только с того же города, где и он находится.
Также при показе заявок участвуют парочка фильтров (например, показывать ли юзеру все заявки или только его уровня).
Тут же - показывается меню подачи заявки на бой.

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

Но вот уже сам бой.. Как организовать запись каждого хода боя в БД, чтобы они не перепутывались.
То есть чтобы в этом ходу если я поставил блок 1 а удар 3, и противник поставил блок 2 а удар 4... как это все записывать, чтобы небыло ошибок?

И ещё важный вопрос - как весли лог боев (имею ввиду текстовое описание.. все эти шутки про "удар копчиком затылок")? Полностью записываь текстовый вариант боя в бд в поле longtext?
Вообщем немогу продумать этот момент.
То же и про групповые бои - как вычислять и правильно писать в бд, что пользователь ответил на удар именно персонажа такого-то из команды противника. если всего их там 5.
Вот именно этот момент никак не продумаю.
ПОдскажите, пожалуйста, как лучше.


пс
"монстров" в игре не будет - только бой игрока против игрока.

-~{}~ 01.09.05 02:24:

_______________________________________

ещё один важный вопрос - по поводу организации базы вещей (предметов) в игре..
Примерная сехма бд:
айди, название, описание, картинка, тип, цена, макс. износ и так далее..
НО НЕЗНАЮ как хранить информацию о эффектах вещей
Наприер эффекты:
+\- n-пунктов у параметра такого-то
и так далее.
Как посоветуете записывать эффекты?

-~{}~ 01.09.05 02:51:

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

id | name | type | max_uron | min_uron | pict | weight | max_life | repair | price | gender | descr |
r_str | r_dex | r_int | r_sta | r_wil | r_chr | r_wis | r_lvl | r_clan | r_travm |
e_hp | e_str | e_dex | e_int | e_sta | e_wil | e_chr | e_wis | krit | antikrit | uvorot | antiuvorot |
1prot | 2prot | 3prot | 4prot |


r_*** - это требования по навыку, уровню или клану (клановые вещи и т.п.)

e_*** - эффект от вещи

1прот (2,3,4) - эффект защиты.

наверное нужно что-то другое придумать?
 

Кром

Новичок
Но вот уже сам бой.. Как организовать запись каждого хода боя в БД, чтобы они не перепутывались.
То есть чтобы в этом ходу если я поставил блок 1 а удар 3, и противник поставил блок 2 а удар 4... как это все записывать, чтобы небыло ошибок?
Завести две таблицы. Одна - бой (id,время начала и т.д.). Вторая - сами удары, куда писать удары/блоки противников.
Там - id боя, id пользователя, id противника, шаг боя (1 - n), время удара/блока, удар, блок и т.д.
Все очень просто.

И ещё важный вопрос - как весли лог боев (имею ввиду текстовое описание.. все эти шутки про "удар копчиком затылок")? Полностью записываь текстовый вариант боя в бд в поле longtext?
Вообщем немогу продумать этот момент.
Лог нужно генерить на лету, по id ударов и блоков и кидать в кэш таблицу в виде текстового блока.
Таблицу чистить через неделю, потому что потом эти логи нах никому не нужны. Если обратятся снова, опять сгенерить на лету и кинуть в кэш таблицу.

То же и про групповые бои - как вычислять и правильно писать в бд, что пользователь ответил на удар именно персонажа такого-то из команды противника. если всего их там 5.
Вот именно этот момент никак не продумаю.
ПОдскажите, пожалуйста, как лучше.
Выше я написал.

Как посоветуете записывать эффекты?
Много вещей - много эффектов, значит связь многие ко многим. Три таблицы, это очевидно.

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

наверное нужно что-то другое придумать?
Выше я написал.
 

EugeneVC

Новичок
ещё один важный вопрос - по поводу организации базы вещей (предметов) в игре..
Примерная сехма бд:
айди, название, описание, картинка, тип, цена, макс. износ и так далее..
НО НЕЗНАЮ как хранить информацию о эффектах вещей
Наприер эффекты:
+\- n-пунктов у параметра такого-то
и так далее.
Как посоветуете записывать эффекты?
насчет вещей я сделал так

первое надо решить будут ли у тебя вещи уникальные
тоесть например будут ли они иметь износ

если износа нет то все просто

если есть то тут надо будет крепко думать

у меня сделано 2 таблицы

базовая в вещами

таблица вещей у игроков - вот тут и найдет разгул твоя фантазия - сразу не берись за все, сделай хотя бы износ

PS: найдика лучше себе программиста на php - у тебя я как вижу только из game design знания есть
 

Spear

почемучка
Кром
насчет боя - спасибо.
Особенно понравилась идея с логом боев. (про кеш таблицу, удаление через неделю и, в случае необходимости, повторную генерацию)

По поводу базы вещей вот что я надумал:
недавно сообразил новые возможности и логику использования вещей вообще.

Будет всего три таблицы, относящиеся к вещам.
Первая - общая база вещей. В ней будет:
айди вещи \ имя \ тип \ модификация \ макс_урон \ мин_урон \ картинка \ вес \ макс. прочность \ можно ли её чинить (1\0) \ цена \ пол \ описание \

вторая - эффекты вещей. Для каждой вещи (не для вещи пользователя а для каждой вещи из общей базы) будет новая запись:

айди \ айди_вещи \ эффект (например, сила, защита, уворот, крит, ловкость) \ значение.

И третья таблица (вот оно!) - это ДЕЙСВТИЯ, которые разрешено выполнять с вещами, и под каждое действие - новое поле.
айди \ айди вещи \ код_дейсвия (PUTON, PUTOFF, и т.д.) \ необходимый параметр \ значение.

Примерно как это будет выглядеть:
Есть вещь:
Деритовый шланг
Цена = 15.0
Прочность = 100\100
Урон: +2...+12
Вес: 0.3
Пол: унисекс
Описание:
бла-бла-бла

Требования:
Уровень: 2
Сила: 10


Записи в таблицах: (в тех двух дополнительных. Пример записи в основнйо таблице не пишу - там все ясно)

1. Таблица с описанием эффектов:
items_effects:
id | item_id | param | value |
1 | 123 | max_uron | +12
2 | 123 | min_uron | +2


1. Таблица с описанием требований по вещам (требований модет быть очень много, иногда даже - присутствие в определенной локации). Описывается кажддое требование, которое должно соблюдаться при таком-то действии (одеть, снять, ловить рыбу, лечить, и так далее. Игровой процесс очень разнообразный.)

item_requirements:

id | item_id | action | param | value
1 | 123 | PUTON | STR | 10
2 | 123 | PUTON | LVL | 2
3 | 123 | PUTON | GENDER | 0

Тоесть описываю что нужно иметь 10 силы, 2 левел и любой пол, чтобы выполнить действие PUTON с оьектом номер 123 (тот самый шланг)

Конечно, такой вариант очень сильно будет заполнять базу (так как на среднестатистическую вещт будет использоваться 1 поле в общей таблице, около 3-5 в таблицу эффектов и столько же в таблицу действий и требований к ним.

Как можно улучшить страктуру? Единственное требование - возможность задавать неограниченное кол-во требований к действиям над обьектами и эффектов (ведь это я описал случай только для оружия.. может быть ещё броян - тогда появляется эффект защиты.. может быть ещё что-нибудь совершенно отличающееся... например доза озверина, повышающая кол-во жизни на пару часов.
Такая вот у меня проблема. А казалось бы - всего-то и нужно что базу вещей спроектировать :(

-------------------------


найдика лучше себе программиста на php
такая игра стоит (по расценкам компании которая делала территоию) от 80 до 150 тыс. долларов.
Лучше сам напишу.
Ведь если подумать - ничего сложного нету. Никаких сверх-естевственных или супер сложных операций выполняться не будет.
Просто писать код аккауратно, проверять.

да и в этом топике я как бы в основном не про РНР говорю а о организации структуры БД ;)

да и вообще - мне это очень интересно, серьезно.

-~{}~ 01.09.05 19:36:

_____________________

Много вещей - много эффектов, значит связь многие ко многим. Три таблицы, это очевидно.
немного непонял.. всмысле - три таблицы?
одна - вещи
Вторая - эффекты этих вещей.
какая - третья?
 

Кром

Новичок
>немного непонял.. всмысле - три таблицы?
>какая - третья?

Третья - id вещи, id эффекта. То же самое относится к вопросу:

>Как можно улучшить страктуру?

Во всех случаях, когда у тебя группы объектов (оружие, защита, одежда и т.д.) обладают варьирующимся набором характеристик, тебе необходимо использовать связующую таблицу.
 

Spear

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

Наверное все-таки что-то я не так понимаю. Ведь с тремя таблицами и запрос поболее будет.
 

EugeneVC

Новичок
насчет сам напишу - я уже 2 год 3 раз начинаю - правда php skill себе поднял

Урон: +2...+12 - можно записать как 1d11+1 в d20 системе
 

Goodwin

Новичок
я вот тоже как-то пытался... давно уже... в общем-то неплохо выходило. Только я сначала большую часть всего продумал.

А потом плюнул на всё -- надоело -- Shift+Delete и вперёд на марс.
 

Кром

Новичок
я может быть неправильно понял, но зачем делать связывающую таблицу, если айди вещи указывается сразу в айди эффекта? а потом когда нужно получить инфу о таком-то обьекте, делается выборка из таблицы эффектов, где item_id(вещи)= item_id(в эффектах)
Допустим у тебя есть эффект "мега удар". И так как этот эффект может быть и у меча и у дубины, значит писать id вещи в таблице с эффектами уже нельзя. Правильно? Ведь нам понадобиться записать уже два id. Значит нужна связующая таблица.

Что касается больших и сложных запросов. От никуда не уйти. Тем более тебе еще рано говорить об оптимизации и т.д.
 

jrip

Новичок
Spear
Кстати, а ты продумал экономическую модель? т.е. откуда собсно будут браться деньги на шмотки? Тем более, если будет параметр "износ", то должна быть и возможность заработка.

Как у теб будет выглядеть бой? Имхо стандартное - выбор удара голова, торс,ноги - уже не прокатит, нужно что-то новое придумать. Лично у меня была такая идея. За один ход, игрок выбирает не место нанесения удара, а противника и тип удара. т.е. сильный - большой урон, малый шанс попасть. слабый - малый урон, почти точно попадаешь. Чем выше уровень(или разница в параметрах) - тем большее количество противников сможешь ударить за ход.

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