|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Флудильня Разговоры на любые темы. Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.08.2011, 11:57 | #1 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Spawn system [нужен совет]
вот мои спаун-поинты умеют спавнить разные объекты по шаблонам. умеют спавнить несколько шаблонов одновременно - так называемый stack объектов. например спаунится отряд гуардов. или два мурлока, один из которых воин, второй маг. суть стековых мобов в том, что они работают в группе. нападаешь на одного, вся толпа агрится. ну вы знаете...
у меня возникла дилема. как спаун-поинт должен отслеживать свои объекты. пока все попередохнут и тогда он перейдет в режим corpse-period и затем в prespawn-period и затем спаунятся опять всей толпой; или умер один - пошло время трупа и респавна, умер второй - у него тоже все свое. и респаунятся они независимо. вопрос. |
12.08.2011, 12:08 | #2 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
(мечтательно) ну уж совсем качественно - сделать курсор с подсчетом ссылок на объект "спаунпойнт", к нему линковать все заспавненные объекты и считать когда на них ссылки пропадут... методика - Джефф Элджер, C++ for Real Programmers. но это малореально...
|
12.08.2011, 12:34 | #3 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Так что думаю есть смысл реализовать оба варианта. |
|
12.08.2011, 12:56 | #4 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
вопрос не в этом. если ждать пока весь пак сдохнет, то вышесказанная реализация достаточна. если каждый из объектов должен доспавниваться до полного пака, то следовательно нужно в этом списке TSpawn.SpawnedObjects[] нужно хранить не только ссылки на объекты, а какие то миниобъекты, которые содержат в себе не только ссылки, но и таймеры. как минимум. счетчики может какие нить прикрутить, хз. как то так. просто делать так, что бы объект сам следил за своим респауном - это неправильно. и смысла фичи "stack of spawn objects" пропадает. правильно что бы спаун-поинт за этим всем следил. там еще проблема будет с ГО, как их чекать. вот спавнятся у меня сейчас гуард, три волка и сундук со сказками. мобы то умерли, с ними понятно все. сказки я прочитал, сундук удалился из мира... наверное нужно тоже удалять из списка... ну ладно, получается вроде... |
|
12.08.2011, 13:44 | #5 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
А я помню канонический пример QuelDanas'а. Один раз с одного спауна я подряд убил 3-х проклятых эльфов. Т.е. тот эльф, которого я убил первым, жил настолько долго, что время респауна у спауна успело натикать на 2 раза. Поэтому после убийства первого эльфа, моментально появился второй, причем труп первого не пропал. А после убийства второго моментально заспаунился третий.
Такая петрушка. Кроме того в инстах паки мобов спаунятся не просто так. Близзы могут задавать правила, например, что в паке 8-ми мобов не может быть более чем 2 мага и 1 лекарь и т.д. |
12.08.2011, 13:59 | #6 |
Ученый
|
Делая дейлик на офе в хиджале на 4.2.0, убивал големов огненных, которые спавнелись друг за другом, и таких было 3 штуки подряд с периодичностью в 1-3 сек потом перестали... видимо таймер пашел, в одном и том же месте, наверно один спавн.
|
12.08.2011, 15:14 | #7 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
|
|
12.08.2011, 15:24 | #8 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
спасибо за мнения.
мне интересны всевозможные сценарии. систему я спроектирую, это не проблема. проблема будет потом что то докручивать, поэтому интересуюсь этим сейчас. вспоминаем, не стесняемся |
12.08.2011, 15:44 | #9 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
А ты посмотри в это время вокруг себя, в этот момент в небольшом радиусе несколько человек их-же бьет/за ними охотится. Я выполняя квест на пауков набил 8 штук по квесту всего на двух точках спавна (те которые по змле бегают, а не на скалах сидят), добивая одного ресался второй, за ним первый и т.д, я даже не сошел с места и не отвернулся в сторону, обе точки были почти рядом, в среднем мне на кил этого паука нужно 3-6 секунд, вот считай частоту их реса (а бывает бегаешь по всей платформе и ищеш живых, вокруг одни труппы и ресаются редко ... и народу в тот момент выполняющих этот квест единицы, но за живыми пауками в драку))).
|
12.08.2011, 16:31 | #10 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
в общем пока нет устойчивости в классах, решил попробовать сделать один главный TMultiSpawn, который порождает список TSingleSpawn. синг рождает объект и следит за его жизнью, сообщает обо всем мульти. на мульти работают сценарии, которые управляют синглами: ну типа в отряд всех собрать, сагриться толпой или нет, проверки на
Цитата:
вообще я вот пишу все это и сам вспоминаю квесты, когда нужно пойти прибить какого нить гоблина. а он там стоит в лагере возле костра. а вместе с ним еще 2-3 его другана-соратника. тронешь кого - агрится вся толпа. но с этим понятно всё. бывают, они тебя забивают, но и ты грохнуть успеваешь. так набегами с кладбища и добиваешь их. но то, что они там каждый респавнится сам по себе - вспоминаю, да. |
|
13.08.2011, 12:50 | #11 | ||||
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
за вчерашний вечер и за ночь сделал HLD наброски для своей новой SmartSpawn (с) (r) (tm) системы. вот что получается:
Вводные понятия. Спаун - абстрактный объект, который управляет созданием и уничтожением игрового объекта. Спавн - процесс создания игрового объекта. Общая механика. Спаун-точка характеризуется позицией на карте, списком указателей на отспавненные объекты и списком спаун-шаблонов. Спаун-точка может иметь один или несколько спаун-шаблонов. Спаун-шаблон содержит в себе информацию, активный ли данный спаун-шаблон и список указателей (ID) на объектные шаблоны. Только активные спаун-шаблоны учавствуют в ротации шаблонов спаун-точки. неактивные могут быть вызваны дополнительно по требованию активных. Шаблон объекта содержит в себе информацию непосредственно по типу объекта (юнит, го) и его апдейтполям. Может быть принудительно задана позиция спавна. Если не задана, то спавн производится в позиции спаун-точки. Содержит время респавна и продолжительность нахождения трупа. Так же содержит максимальное расстояние, на которое может отстраниться объект от позиции спавна (эта позиция может не совпадать с позицией спаун-точки). Содержит идентификатор группы, в которую может входить объект и выполнять групповые действия. Содержит указатели на шаблоны других объектов, которые могут быть вызваны при изменении уровня здоровья данного объекта. рассматриваются значения 75%, 50%, 25%, 10% и 0. Подобно этому содержит указатели на другие идентификаторы групп, объекты которых могут быть призваны на помощь и т.п. Так же содержит счетчик, по завершению которого данный объектный шаблон перестает спавнится и помечается как законченный. Содержит указатель на шаблон команд. После того как все указатели на объектные шаблоны будут помечены как законченные, спаун-точка производит ротацию спаун-шаблонов и и создание объектов согласно новому спаун-шаблону. Все объекты респавнятся независимо и согласно правилам, заданным в объектном шаблоне. Это продолжительность существования трупа, продолжительность респавна (пауза перед спавном), счетчик респавна. --- Блок-схема взаимодействий и связей классов. --- Транзакции. --- Тестовые сценарии и способы их реализации: 1. Установить вендора. Нужно создать спаун-точку, в ней один активный спаун-шаблон, в котором указать на объектный шаблон вендора. В шаблоне вендора счетчик респавна сделать 0 - это означает, что респавн будет повторяться бесконечно и спаун-шаблон никогда не закончит свой жизненный цикл. В таком случае спаун-точка никогда не сможет переключиться на следующий спаун-шаблон. Но по условию он у нас один и этого достаточно по условию поставленной задачи. 2. Поставить два мурлока, одного воина, другого мага. Если один из мобов получает урон, то второй аггрится вместе с первым одновременно. Создать спаун, создать активный спаун-шаблон, в нем указать два шаблона мурлоков (для воина и для мага). Вписать обоим объектным шаблонам TeamID например 1, не важно, главное что бы одинаково. Счетчик респавна в 0. 3. Сделать так, что бы один и тот же моб мог появляться в одной из трех локаций и только в одной из них в один момент времени. Создать спаун в любой из локаций. Создать три активных спаун-шаблона, в каждом их них указать шаблон этого моба. Таких объектных шаблонов понадобится тоже три, т.к. в каждом из них нужно указать позицию спавна - по одной на каждую локацию. Счетчик респавна всем трем шаблонам выставить в 1. Убив одного моба в одной локации спаун-точка выберет новый спаун-шаблон, т.к. счетчик респавна установлен в 1. Это значит что нужно убить данный объект только 1 раз. Далее, новый спаун-шаблон с другим объектным шаблоном, объект которого будет отспавнен уже в другой локации. 4. Во время сражения с боссом время от времени приходили ему на помощь его братья меньшие. Создать необходимые шаблоны для босса, в объектном шаблоне босса в полях OnHealth75_Spawn, OnHealth50_Spawn и OnHealth25_Spawn указать спаун-шаблоны, в которых может быть указано несколько шаблонов объектов тех самых братьев меньших в каждом. Например на 75% от жизни ониксии спавнятся 3 маленьких птички-дракончика, на 50% спавнятся еще 4 птички-дракончика, а на 25% спавнится еще один какой нибудь мини-босс. 5. Что бы после убийства босса спавнился его дух. Создать необходимые шаблоны для босса, в объектном шаблоне босса в поле OnHealth0_Spawn указать спаун-шаблон, в котором указать объектный шаблон его духа. 6. Кобольд, праздношатающийся вокруг своего спауна. Создать необходимые шаблоны. В объектном шаблоне указать счетчик респавна в 0. Указать командный шаблон, в котором две команды: 1 - идти на рандомную точку; 2 - пауза в рандомном диапазоне; далее команды повторяются. 7. Вендор, ходящий из одной локации в другую. Создать все необходимые шаблоны. Указать командный шаблон, в котором нагеренить команды walkTo(x,y) 8. Аниматор любого типа, например дровосек. Создать все необходимые шаблоны. Указать командный шаблон, в котором указан список необходимых команд. 9. Спаун объектов по касту какого либо спелла. Не придумал как... вероятно нужно в объектном шаблоне держать информацию RequiredSpellID. И в спеллэффекте этого спелла делать скан области на предмет спаун-точек и стартовать ее, если она будет найдена. 10. Спаун объектов по вхождению в зону. Не придумал как... сканировать спаун-точки как сканируются объекты по ячейкам Unit.OnSetPosition не очень хочется, т.к. это двойная и почти бесполезная работа. Точнее неэффективная - трудозатраты большие, а эффективная цель всего лишь найти спаун с зональным триггером. сценарии больше не лезут в голову в 4 утра. какие еще могут быть? в дополнение попробую описать вышеобозначенные вами сценарии: Цитата:
вайп рейда - это AI, логика DungeonServer, там своя специфика. если в кратце, то каждому рейду своя копия Мира. вайп рейда - это reset этой копии, что приводит к респавну всего и вся. т.е. это логика сервера, а не спаунсистемы. Цитата:
Цитата:
Цитата:
нужно создать спаун-шаблон, в котором один объектный шаблон - огненный голем. в этом объектном шаблоне нужно указать на триггер OnHealth0_Spawn другой спаун шаблон с другим големом с малым временем респавна. у второго тоже самое на третий. у третьего ничего не указывать. тогда достигается вышеописанный эффект: нужно убить трех големов подряд, что бы пошло длительное время респавна. после третьего убитого голема жизненный цикл спаун-шаблона закончится и будет запущен следующий. или тот же, если спаун-шаблон всего один. Последний раз редактировалось RomanRom2; 13.08.2011 в 13:16. |
||||
14.08.2011, 00:57 | #12 |
Гость
Сообщений: n/a
|
не нравится шаблон команд...точнее не понятно - то ли это FSM( AI ), то ли мувгенератор...как бы одно другому не мешало и что будет управлять состояниями?
|
14.08.2011, 04:08 | #13 |
Гость
Сообщений: n/a
|
|
14.08.2011, 12:07 | #14 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
не знаю что такое мувгенератор...
FSM однозначно. мне не нравились квестовые скрипты в wowemu. я спросил однажды вада, вад, зачем все это. это же можно сделать легко и просто. на что он мне ответил, что это все не просто так. да, скрипты это тормоза и не нужно это. но посмотри, сказал он, как заняты люди написанием скриптов. это же лемминги! это же чудесно всю квестовую систему я легко реализовал на FSM. никаких дополнительных табличных данных не требует, только квестовые респонсы. что касается командного шаблона - это просто набор команд. не важно каких: идти/бежать на точку; начать рубить лес; положить в руку дрова; что то сказать или проявить эмоцию; кастануть спелл. каждое действие имеет время исполнения. командный процессор запускает команду из списка и ждет ее выполнения. затем запускает следующую. и так далее. команда, кстати, может и не выполниться - моба могли прервать или он сам решил саггриться. после того, как прерывание закончилось, моб завершит команду. но это делает уже сам моб с его АИ. командный процессор только лишь запускает команды и ждет когда они исполнятся. команд может быть много да, но это сильно развязывает руки |
14.08.2011, 13:40 | #15 |
Гость
Сообщений: n/a
|
|
14.08.2011, 18:29 | #16 | |
Ученый
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
|
Цитата:
Чего стоил только его выбор языка к скриптовочке. Тикл и по ныне наряду с тем-же ObjC или М4 до сих пор считается языком для небыдла)
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011 |
|
14.08.2011, 21:41 | #17 | |||
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
Цитата:
Цитата:
друзья, все же прошу по теме. я понимаю, быть может не просто переварить то что я наговорил, но это и не обязательно. я лишь прошу нестандартных сценариев спавна, которые вы видели. |
|||
15.08.2011, 09:02 | #18 | |||
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
RomanRom2,
Цитата:
Цитата:
Перечитайте сообщение Юрия: http://ru-mangos.ru/showpost.php?p=24679&postcount=9 |
|||
15.08.2011, 09:27 | #19 |
Ученый
Регистрация: 03.03.2010
Адрес: Сибирь, 58°14′00″ с. ш. 92°29′00″ в. д.
Сообщений: 288
Сказал(а) спасибо: 79
Поблагодарили 37 раз(а) в 14 сообщениях
Записей в дневнике: 18
|
не, всё так понял я подтвержаю сей факт ибо часто дела дейлики в норде на 85 (а таких людей на пальцах посчитать можно) спокойно валишь и респятся почти сразу же после кила 2-3 моба, потом запускается тайм( так что халявы как таковой мало бывает но всё таки бывает...
|
15.08.2011, 12:07 | #20 | ||
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
сейчас система по сути немного доработана на событийные эффекты. наверное мы двигаемся в правильном направлении Цитата:
ЗЫ. SmartSpawn реализована. я еще немного доработал списки спаун-шаблонов и убрал ограничение количества объектов в одном шаблоне - потребовалось завести еще одну таблицу. попробую снять видео с клиента, показать визуализацию спаун объектов. они есть, такие же как у вада, если кто помнит - стоит маленьких мальчик Во ЗЗЫ. поскольку тесткейзов что-то не особо поступает, полагаю данной реализации должно хватить на абсолютное большинство сценариев. я постарался построить классы так, что бы без особого труда можно было добавлять новые сценарии. двигаемся дальше, всем спасибо. еще я хотел показать как важно планирование и документирование. благодаря хорошему и понятному документу реализация заняла полтора дня, ну хорошо, два. провожу массовые тесты |
||
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Маленьки совет... | origammi | Новичкам | 1 | 28.07.2011 20:18 |
[11161] Implement Map copy local grid spawn data support. | newsbot | CMaNGOS Commits | 0 | 14.02.2011 10:10 |
[11045] Rewrite internals of DB layer. Simplify code and use less locking. Spawn and use separate co | newsbot | CMaNGOS Commits | 22 | 22.01.2011 10:02 |
[10832] Spawn pool at aura 63471 dispel in water. | newsbot | CMaNGOS Commits | 0 | 07.12.2010 04:51 |
[10089] Change in event system work with pool system. | newsbot | CMaNGOS Commits | 0 | 21.06.2010 05:22 |