|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Принятые Патчи, принятые разработчиками ScripDev2 |
|
Опции темы | Поиск в этой теме | Опции просмотра |
14.03.2010, 10:32 | #1 |
Администратор
|
[QUEST=5097,5098]Сторожевые башни
Скрипт на указанные квесты, которые на моей памяти никогда не работали.
В репозитарий приняли мой патч, но измененный другим человеком. На текущий момент квесты не работают, т.к. патч поправили на неправильный вариант. Для базы после СД2 1815: Код:
UPDATE `gameobject_template` SET `scriptname`='' WHERE `entry`=176093; UPDATE `gameobject_template` SET `scriptname`='go_andorhal_tower' WHERE `entry` IN (176094,176095,176096,176097); http://ytdb.ru/showthread.php?p=26236 |
7 пользователя(ей) сказали cпасибо: | Gerald (16.03.2010), KiriX (14.03.2010), Neggod (15.03.2010), partizanes (16.09.2010), YuruY (14.03.2010) |
14.03.2010, 12:14 | #2 |
Администратор
|
Тема на форуме СД2:
http://www.scriptdev2.com/project.php?issueid=892 Решил создать на всякий случай, т.к. это долгая контора. |
16.03.2010, 13:16 | #3 |
Новичок
Регистрация: 07.03.2010
Сообщений: 21
Сказал(а) спасибо: 99
Поблагодарили 35 раз(а) в 6 сообщениях
|
Собрал mangoszero с этим патчем.
Всплыли ошибки в игре: Код:
2010-03-16 11:58:52 ERROR:Spell (ID: 17016) has effect EffectImplicitTargetA/EffectImplicitTargetB = TARGET_SCRIPT or TARGET_SCRIPT_COORDINATES, but does not have record in `spell_script_target` Проставил в таблице нужных НПС: Код:
DELETE FROM `spell_script_target` WHERE `entry`=17016; INSERT INTO `spell_script_target` SET `entry`=17016, `type`=1, `targetentry`=10902; INSERT INTO `spell_script_target` SET `entry`=17016, `type`=1, `targetentry`=10903; INSERT INTO `spell_script_target` SET `entry`=17016, `type`=1, `targetentry`=10904; INSERT INTO `spell_script_target` SET `entry`=17016, `type`=1, `targetentry`=10905; Подскажите куда копать дальше? P.S. Только что глянул сам спелhttp://www.wowhead.com/?spell=17016, видать что-то не правильно, так как: Effect 0: (50) Summon Object (176093) Effect 1: (86) Activate Object (5) Последний раз редактировалось Gerald; 16.03.2010 в 13:26. |
16.03.2010, 20:57 | #4 |
Администратор
|
Как уже написал в конференции, есть такие варианты:
1. В `spell_script_target` прописать цель го. 2. В `spell_script_target` поставить целью 4 нпц, в условиях квеста проставить каст на 4 нпц, убрать скрипт из ядра. 3. В `spell_script_target`прописать го, в условиях квеста проставить каст на го, убрать скрипт из ядра. Возможно, в МангосЗеро прокатят варианты 2 или 3, но в кеше стоит условие убийства 4 нпц. |
16.03.2010, 22:52 | #5 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Я думаю, все-таки есть еще какой-то спелл. Когда нажимаешь на факел, он создает и активирует гейм-объект, при активации гейм-объекта скриптом из базы должен кастоваться этот какой-то спелл, и условием выполнения квеста должен выступать каст этого спелла на требуемых кричеров. Но тут опять же - каст ГО...
P.S. В кеше не хранится ReqSpellCast. |
17.03.2010, 09:31 | #6 |
Администратор
|
Спеллов с киллкредитами по 4-м нпц не нашел.
Точка должна засчитываться при установке факела, а не при нажатии на факел, если не ошибаюсь. |
17.03.2010, 10:01 | #7 | |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Цитата:
Килл-кредит не нужен. В базе поставить какой-то ReqSpellCast нужно. Ну, это рассуждения теоретические, как оно должно быть оффлайк. У нас такого не сделаешь, т.к. не заставишь кастовать ГО. |
|
17.03.2010, 11:38 | #8 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 36 раз(а) в 25 сообщениях
|
Одно но, в мангосе до сих пор не работает activate, так что приходится выкручиваться
Последний раз редактировалось timmit; 17.03.2010 в 13:04. |
17.03.2010, 14:07 | #9 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
|
17.03.2010, 17:29 | #10 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
17.03.2010, 19:48 | #11 |
Администратор
|
Видео у кого-нибудь есть для данного квеста + кеш?
|
17.03.2010, 20:57 | #12 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Это клиентом реализуется.
Пример: Спелл 46201. Там SPELL_EFFECT_ACTIVATE_OBJECT. .go object 47123 .cast 46201 Смотрим, что получится. (GUID объекта - из вашей базы. Нужная запись в spell_script_target в вашей базе есть.) Видео и кеш тут не поможет... Нужен снифф. |
17.03.2010, 21:37 | #13 | |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
Цитата:
|
|
17.03.2010, 21:58 | #14 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Нет, именно GUID из таблицы creature.
|
18.03.2010, 08:59 | #15 | |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
Цитата:
С Константином не говорил? Или может есть еще желающие - сбегать по квесту со сниффером? |
|
18.03.2010, 09:00 | #16 |
Администратор
|
Не говорил, со снифферами не работал.
|
18.03.2010, 09:03 | #17 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
|
18.03.2010, 09:43 | #18 |
Администратор
|
Как появится достоверная инфа, так можно будет уже править скрипт.
|
27.04.2010, 21:57 | #19 |
Администратор
|
Решил переделать скрипт через активацию го, как указано в спелле:
Код:
bool GOHello_go_andorhal_tower(Player* pPlayer, GameObject* pGo) { if (pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_ALLIANCE) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_HORDE) == QUEST_STATUS_INCOMPLETE) { Если отойти подальше - не работает, хотя каст срабатывает на большом расстоянии. 1. Как заставить го активироваться в радиусе, указанном в базе? 2. Есть 4 кода нпц, проверка на них идет одинаково: если один из нужных кодов нпц, то засчитать киллкредит(код нпц). Как лучше и покомпактнее сделать проверку (массив и т.д.)? |
Пользователь сказал cпасибо: | KiriX (27.04.2010) |
27.04.2010, 23:22 | #20 |
Администратор
|
Вот, что получилось:
Код:
bool GOHello_go_andorhal_tower(Player* pPlayer, GameObject* pGo) { if (pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_ALLIANCE) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_HORDE) == QUEST_STATUS_INCOMPLETE) { std::list<Unit*> targets; MaNGOS::AnyUnitInObjectRangeCheck u_check(pPlayer, 1.0f); MaNGOS::UnitListSearcher<MaNGOS::AnyUnitInObjectRangeCheck> searcher(pPlayer, targets, u_check); Cell::VisitAllObjects(pPlayer, searcher, 1.0f); uint32 aEntry[] = {NPC_ANDORHAL_TOWER_ONE, NPC_ANDORHAL_TOWER_TWO, NPC_ANDORHAL_TOWER_THREE, NPC_ANDORHAL_TOWER_FOUR}; int i; for(std::list<Unit *>::iterator tIter = targets.begin(); tIter != targets.end(); tIter++) { for(i = 0; i < 4; i++) { if((*tIter)->GetEntry() == aEntry[i]) { pPlayer->KilledMonsterCredit((*tIter)->GetEntry(), 0); } } } } return false; } Если поставить радиус 25, то проблем не будет, но кастовать надо в проходе. Самый простой вариант - переставить го в точки к нпц, тогда должно работать без проблем. 1. Почему не отрабатывает активация го на расстоянии, а только в упор? 2. Как и где в ядре править ошибки при выходе игрока из игры: Код:
ERROR:Delete Gameobject (Entry: 176093 Guid: 200005) with SpellId 17016 LinkedGO 0 that lost references to owner Player (Guid: 3176) GO list. Crash possible later. |
29.04.2010, 07:47 | #21 |
Гость
Сообщений: n/a
|
Я бы мог побегать по этому квесту и поснифать его
только скиньте снифер и расскажите как запустить ))) |
29.04.2010, 08:10 | #22 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Ты бы мог почитать форум, найти снифер, и научиться его запускать. Если ты этого не можешь - то смысла в твоем беганьи немного.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
29.04.2010, 10:24 | #23 |
Модератор
|
Как я понимаю по коду работу эффекта 86 - Activate Object.
Работа фактически аналогична команде 13 в БД скриптах ГО Пошагово как идет Берем наш спелл - 17016 Код:
Effect: (086) SPELL_EFFECT_ACTIVATE_OBJECT Base point = 0 Target A (TARGET_40), Target B (No target) EffectMiscValue = 5 Код:
if(!gameObjTarget) return; static ScriptInfo activateCommand = generateActivateCommand(); int32 delay_secs = m_spellInfo->CalculateSimpleValue(eff_idx); gameObjTarget->GetMap()->ScriptCommandStart(activateCommand, delay_secs, m_caster, gameObjTarget); delay_secs = 0, с нашего спелла(Base point = 0) передаем дальше в ScriptCommandStart 2. там вычисляются гуиды таргета и кастера, добавляется в лист скриптов, и если задержка(delay_secs) равна 0, то передается дальше в ScriptsProcess(); 3. Эта функция ищет нужный скрипт, и в зависимости от команды(она у нас всегда 13), делает проверки на кастера и таргет, на их типы - юнит или ГО, там много Если все проверки пройдены, активируется функция ГО на кастера go->Use(caster); 4. а это уже интересней, именно в этой функции ГО кастует на кастера некий спелл(спеллы) НО если есть скрипт GOHello - то return; Код:
// by default spell caster is user Unit* spellCaster = user; uint32 spellId = 0; bool triggered = false; if (user->GetTypeId() == TYPEID_PLAYER && Script->GOHello((Player*)user, this)) return; switch(GetGoType()) Код:
Spell *spell = new Spell(spellCaster, spellInfo, triggered,GetGUID()); // spell target is user of GO SpellCastTargets targets; targets.setUnitTarget( user ); spell->prepare(&targets); ГО факел - принадлежит к 5 типу, обработки которого нет в Use(), мб стоит добавить? И в этой функции можно не только кастовать спеллы, но и другие действия выполнять(см. весь код функции) Код:
default: sLog.outError("GameObject::Use unhandled GameObject type %u (entry %u).", GetGoType(), GetEntry()); break; ПС : кстати, EffectMiscValue не используется в эффекте 86, но между тем, оно явно важно, т.к во всех спеллах оно разное, понять бы что это Ответы на вопросы(по моему мнению) 1. GOHello активируется только вблизи обьекта(0 - 2 метра радиус) 2. Ошибка возникает здесь Код:
ObjectGuid owner_guid = GetOwnerGUID(); if (!owner_guid.IsEmpty()) { if (Unit* owner = ObjectAccessor::GetUnit(*this,owner_guid)) owner->RemoveGameObject(this,false); else { sLog.outError("Delete %s with SpellId %u LinkedGO %u that lost references to owner %s GO list. Crash possible later.", GetObjectGuid().GetString().c_str(), m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), owner_guid.GetString().c_str()); } } 3. Оптимизировать тут врятли что-то можно, только мб написать отдельный универсальный поисковичок, с подачей любого листа ентри или гуидов(он сам их переберет - найдет нужный и вернет обьект) Последний раз редактировалось MaS0n; 29.04.2010 в 10:27. |
23.08.2010, 20:49 | #24 |
Администратор
|
Патч принят в СД2 1797 с изменениями.
|
4 пользователя(ей) сказали cпасибо: |
02.09.2010, 19:31 | #25 |
Администратор
|
Патч с пояснениями обновлен в первом посте.
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[QUEST=5097,5098]Сторожевые башни | Йоха | Запросы | 32 | 05.09.2010 14:39 |