|
Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.
Если кто-то хочет задать вопрос по патчу - велкам. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
24.07.2010, 01:09 | #41 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
LordJZ, так мороки больше.
Мы храним ВСЕ квесты и все Евенты мы их не вообще базу game_event и базу квестов принадлежащих евенту. А вот евентманаджер выбирает рандом и заносит этот рандомный квест в mCreatureQuestRelations. Хотя тут тоже есть проблема. А если свервер упадет или его надо перезапустить. Тоесть придется сохранять Id выбранного квеста. UPD: Во можно посто под -(минус) использовать id текущего выбранного квеста. тоесть как только евентманаджер выбрал для текущего евента квест то он в holiday пишет -randomQuestID и если сервер падает то когда его поднимают он оттуда берет выбранный квест. Последний раз редактировалось alien; 24.07.2010 в 01:17. |
24.07.2010, 01:31 | #42 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
game_event делает все эти операции за вас
|
24.07.2010, 01:39 | #43 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Какие именно? выбор рандомного квеста?
или сохранение рандомного квеста? а вот добавлять/удялять записи в game_event и в game_event_creature_quest вовремя работы сервера это както хаково притом сильно хаково. так-как сервер по умолчанию не перезагружает эти таблици во время своей работы. И тогда надо будет добавлять перезагрузку этих таблиц. Или что тоже как-то хаково править переменные в которых хрянится загруженная инфа из бызы. |
24.07.2010, 02:25 | #44 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Чем вам мешает сохранение данных в game_event таблицы, тем более что они не перезагружаемые? В вашем случае реализовать половину функций рандом дейликов вообще не получится — те же Image-ы, к примеру.
|
24.07.2010, 02:36 | #45 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Это почему еще?
Спокойно реализуется все. Просто нужно гдето хранить соответствие QuestId-CreatureID для отобржения. Можно даже в коде прямо хранить Просто масивом из структуры. Благо там не более 10 записей. -- Ну хорошо давайте над вашим способом подумаем в game_event мы записали некоторый делик а в game_event_creature_quest записали ID нового эвента и квест который должен быть. Дальше то что? как мы заставим сервер подхватить их Он же уже давно это таблицу прогрузил. |
24.07.2010, 03:14 | #46 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
И вы опять будете писать костыли, спавнить НПС, давать им анимации, еще что-то... Ради чего, скажите мне? Это все можно сделать через game_event.
И почему вы считаете что в рантайме нельзя изменить данные эвента? Очень даже можно. П.С. Спор бессмысленный, я смотрю, вы так и будете стоять на своем — создание новых таблиц, новых решений и прочего. Больше я вас призывать к использованию существующих возможностей не буду — кодьте, на здоровье! Последний раз редактировалось LordJZ; 24.07.2010 в 03:16. |
24.07.2010, 03:39 | #47 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Ну я как-бы и использую существующие возможности.
У гейм_евент есть такая таблица game_event_creature в которую помещаются записи критчеров которые надо показать в мире при запуске евента. притом GameEventMgr сам их заспавнит и сам уберет. Мне чтобы заработало все как нужно надо только дописать в GameEventMgr пару строчек чтобы он выбирал рандомно квест(ну и критчера к этому рандом квесту если надо). ВСЕ остальное делает сам GameEventMgr код добавления в sObjectMgr.mCreatureQuestRelations уже в нем есть его надо только под рандомность подогнать удаление из sObjectMgr.mCreatureQuestRelations можно вообще оставить. В итоге что у нас получается. 1)Заполняем таблицу game_event всеми нужными дейликами/викликами ставя holiday = -1 2) Удаляем из creature_questrelation все записи о тех квестах которые реализуем через game_event 3) Добавляем в game_event_creature_quest наш список квестов и связываем с нужными записями в таблицы game_event. 4) Тоже самое если нужно делаем с game_event_creature 5) Правим GameEventMgr так чтобы он если holiday <0 и время обновить евент выбирал рандомный квест из текущего евента(и получал по этому квестИД если нужно соответствующего критчер) также записываем на место holiday -(CurQuestId)чтобы если сервер упал или перезагрузили то был тот-же квест. ВСЕ Больще нам делать нечего, все остальное уже есть в GameEventMgr |
24.07.2010, 05:51 | #48 |
Пользователь
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
|
А почему бы не сделать вот так?
1) добавляем в таблицу game_event колонку (например ExclusiveGroup по аналогии с quest_template). В ней для всех эвентов, которые должны исключать друг друга, будет стоять идшник первого из них 2) создаем обычные эвенты с обычным ид, но, допустим с -1 HolidayID для викликов и -2 HolydayID для дейликов. start_time, end_time и occurrence по нулям. 3) в коде мы случайным образом выбираем новый эвент с HolydayID -1 и -2 и запускаем его, там где происходит резет дейликов и викликов соответственно. 4) дальше всю работу сделает для нас система эвентов. Мы можем отспавнить другую модельку рядом с квестгивером, или напялить на квестгивера другой DisplayID, либо вообще все что угодно Собственно вопрос. При текущей реализации системы эвентов, квесты перестают сдаваться после окончания эвента, или просто перестают выдаваться? Например, если человек взял и сделал дейлик сегодня, а сдать он его решит, например, завтра(когда фактически уже будет активен другой эвент). у него это получится? Можно так же доработать саму систему эвентов, и полноценно реализовать поддержку эксклюзивных эвентов. Например так: есть эвент с данными о начале, продолжительности, и т. д. у него допустим ид 3000. в поле ExclusiveGroup тоже 3000. есть еще эвенты с 3001 по 3010, у которых пропущены данные о продолжительности, но в поле ExclusiveGroup тоже стоит число 3000. Когда приходит время старта эвента с номером 3000, выбирается случайным образом один из эвентов с полем ExclusiveGroup 3000, и запускается. С помощью эксклюзивных эвентов так же можно будет реализовать живность в городах, вроде гуляющих именных мобов в Даларане. Правда для корректной работы данной фишки нужно реализовать так же и возможность сохранения таких данных, как то, какой из вручную (т.е. при резете квестов) запущенных эвентов был активен на момент последнего сейва сервера. И вообще помнится был патч на систему эвентов, позволяющий сохранять ворлдстейты, и реализовывать многоступенчатые эвенты вроде открытия санвелла или AQ War Effort Последний раз редактировалось Energy; 24.07.2010 в 06:06. |
24.07.2010, 11:53 | #49 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
так-как за прием квеста отвечает другая таблица которая в гем_евент не участвует. |
|
24.07.2010, 12:21 | #50 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
сдать неполучиться только если с event окончанием удаляется и сам npc.
Но в данном случае речь об этом не идет.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
20.09.2010, 18:06 | #51 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Возвращаемся к нашим баранам...
1) Самым проблемным для реализации через game_event является виклики у http://ru.wowhead.com/npc=20735 Тут либо надо хардкодить связь Creature которые находятся сзади с выбираемым квестом, либо создавать еще одну таблицу в которой хранить эту связь. Но и тут не так все просто так-как вначале надо выбирать не квест а Creature так-как вначале отрабатываются то какие Creature будут заспавнены, а только потом квесты. Да и если в void GameEventMgr::UpdateEventQuests(uint16 event_id, bool Activate) легко добавить выбор рандомного квеста и пропуск остальных. то вот в void GameEventMgr::GameEventSpawn(int16 event_id) и void GameEventMgr::GameEventUnspawn(int16 event_id) не так то и просто добавить спавн одного и унспавн других NPC. Кто нибудь, что нибудь подскажет по этому поводу? 2) Дальше следующая проблема. Как организовать перезапуск евента? а) например можно сделать вот так. Длительность эвента 1339 минут а стартует каждые 1440. В итоге у нас будет минута в течении которой квесты будет недоступен. б) Добавить в гайм_евент функцию void GameEventMgr::ResetEvent(uint16 event_id) { StopEvent(event_id); StartEvent(event_id); } И соответственно в void World::ResetDailyQuests() вызывать эту функцию с нужными ID Мне кажется что так правильнее. Или просто в void World::ResetDailyQuests() вызыв последовательность StopEvent(event_id); StartEvent(event_id); Тут есть огромный + мы можем очистить в game_event поле(СМ п 3.б) и все довольно удобно. 3) Как хранить(и где) состояние выбранного рандомного виклика дейлика? а) Добавить еще одну таблицу в которой хранится креатуре которому принадлежит квест и квест id. б) В game_event добавить еще одно поле которое будет просто хранить рандомный номер(тоесть номер записи в mGameEventQuests[event_id]) Выбор квеста например сейчас выглядит так mGameEvent[event_id].RandQuest=mGameEventQuests[event_id][urand(0,mGameEventQuests[event_id].size()-1)]; В базу можно например сохранять просто результат urand(0,mGameEventQuests[event_id].size()-1). Если бы не надобность выбирать для http://ru.wowhead.com/npc=20735 то все делалось довольно тривиально, а так приходится извращаться немного ============================= В общем у кого какие идеи? |
20.09.2010, 18:13 | #52 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
На тринити это уже сделали, нужные данные хранят в базе чарактерс, там только квест Иды вроде. Попробую откопать коммит
|
20.09.2010, 18:53 | #53 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Хмм... что-то просмотрев код тринити по диагонали не заметил куда они это запихнули. в Гейм_евенте нету.
UPD: Может ты про обычные виклики и дейлик? Там да просто сохраняется ID выполненного квеста. Последний раз редактировалось alien; 20.09.2010 в 19:42. |