|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Исправление квеста через ядро? (Ядро под катаклизм 4.3.4) |
Исправление квеста через ядро? |
Всем привет, Форумчане!
Прошу вас помочь мне в решении задачи. Скачал я значит последнюю базу TrinityCore с их GitHub. Все скомпилировал запустил сервер, зашел в игру за жреца. Взял квест, где нужно проверить свои способности а именно отхилить рядом тренеров. Так вот в чем вопрос то у меня возникает, не засчитывается счетчик, сколько я отхилил персонажей. Подскажите пожалуйста, куда мне дальше смотреть, чтобы задание в итоге засчитали. Скажу прямо с SQL более менее в таблицах начал понимать. С исходниками сложнее самого ядра, незнаю как правильно работать с ними. Я не прошу за меня что-либо делать. Просто подскажите в какую сторону нужно смотреть, чтобы понимать процесс. Я понимаю что нужно сделать когда я использую заклинание на выделенного нпс, у меня срабатывал счетчик. После достижения условия. мне засчитывали его. и я мог сдать задание. Если у кого-то есть желание и время, можно пообщаться в дискорде, вотсапе например, и там объяснить. Я хочу научиться. С Уважением, Владимир!
Сообщение # 1 написано 05.02.2019 в 12:17
|
Владимир, большинство сложных квестов, содержащих несколько элементов и событий реализуются через SAI скрипты (SmartAI - страницу найдете на вики тринитикора).
По поводу конкретного задания для жрецов - если я вас правильно понял, вы используете не те заклинания, вчитайтесь в задание подробнее, исцеление 1 ранга и баф на стамину 1 ранга.
Сообщение # 2 написано 05.02.2019 в 13:00
|
Спасибо огромное за скорый ответ.
Квест этот 26919 у жреца. Изучение слов ! У меня в базе скачанной с Trinity там нужно отхилить персонажей. на Wowhead там нужно изучить другой навык вообще. В SmartAI Tutorial есть вот это. SET @ENTRY := 30051; SET @GOSSIP := 9626; SET @OPTION := 0; Что значит в данном запросе @, скажите пожалуйста. |
Спасибо Вам!
Так все таки так и непонятно, исправление квестов происходит в основном через базу и SmartAI, только вот почему то я не могу найти условие, при котором бы мне засчитывали. Например мне нужно отхилить пять нпс. Я написал скрипт через SmartAI Constructor, потому как пока учусь только. Буду с труисе разбираться. В данном скрипте при получении исцеления, должны засчитывать убийство нпс. Но ведь это неправильно же. Как быть в таком случае. Или же нужно еще таблицу conditions подключать. Я честно хочу понять как правильно действовать, какие таблицы мне нужны для исправления квеста через базу. И по какому принципу если это в ядре мне искать нужный файл для редактирования. INSERT INTO `smart_scripts` VALUES (44564, 0, 0, 0, 53, 0, 0, 0, 0, 0, 1000, 1000, 33, 44564, 0, 0, 0, 0, 0, 10, 0, 44564, 0, 0, 0, 0, 0, "Smart Script"); |
В данном скрипте при получении исцеления, должны засчитывать убийство нпс. Но ведь это неправильно же. Почему Вы так решили? Именно так подобные задания и реализуются: требуемое действие на самом деле засчитывает убийство того или иного НИПа прозрачно для игрока. Я честно хочу понять как правильно действовать, какие таблицы мне нужны для исправления квеста через базу. Зачастую алгоритм исправления напрямую зависит от конкретной задачи, универсального подхода не существует. Для начала рекомендую ознакомиться с функционалом каждой таблицы, как в теории, так и на практике, чтобы получить целостное представление об этой части инфраструктуры. Большинство подобных вопросов в результате отпадет. И по какому принципу если это в ядре мне искать нужный файл для редактирования. В ядре такой подход неприменим. Если хотите разрабатывать его - познакомьтесь хотя бы с основами программирования на современном C++.
Сообщение # 6 написано 05.02.2019 в 22:23
|
Спасибо за ответ! Буду разбираться. Потому что вопросов больше чем ответов.
Вчера весь вечер пробовал запустить SmartAI через нпс хоть что-то, сказал или сделал. Так ничего не получилось. Добавлено (06.02.2019, 12:17) --------------------------------------------- p620, Вот смотрите. Я значит в смарт скрипте прописал следующее: При получении исцеления нпс, засчитывается убийство(не die), цель сам же нпс. Нпс при этом дружественный, и может принимать исцеление. Соответственно я это все применил, сервер перезагрузил. И значит пробую. Вот только ничего не получается. Не засчитывается. Если цель сделать не дружественной и просто убить, все засчитывается. Где происходит проверка, когда нпс убит счетчик прибавляется на 1 =) Подскажите пожалуйста. Добавлено (06.02.2019, 14:11) --------------------------------------------- p620, прошу прощения за такое оформление заранее. Вот SmartScript такой entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_param4, target_x, target_y, target_z, target_o, comment '44564', '0', '1', '2', '25', '0', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1) Не происходит никаких событий '44564', '0', '2', '1', '61', '0', '100', '512', '0', '0', '0', '0', '0', '82', '32768', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '2) Добавляем флаг Spirit Guide' '44564', '0', '3', '4', '8', '0', '100', '513', '2061', '0', '0', '0', '0', '83', '32768', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3) При произнесении заклинания убираем флаг Spirit Guide' '44564', '0', '4', '0', '61', '0', '100', '512', '0', '0', '0', '0', '0', '33', '44564', '0', '0', '0', '0', '0', '23', '0', '0', '0', '0', '0', '0', '0', '0', '4) Засчитываем убийство NPC и отдаем награду' Вот creature_template entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_class, trainer_race, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName, VerifiedBuild '44564', '0', '0', '0', '0', '0', '33967', '33968', '33969', '33970', 'Wounded Trainee', '', '', '', '0', '3', '3', '1', '0', '12', '0', '1', '1.14286', '1', '0', '0', '2000', '2000', '1', '1', '1', '16777216', '0', '0', '0', '0', '0', '0', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'SmartAI', '0', '3', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '', '15595' И все равно не хочет засчитывать мне. Где я мог допустить ошибку? В общем Wounded Trainee когда они ко мне дружественны, да видимо и все NPC при получении исцеления не происходит никакой проверки, и получается SmartScript не срабатывает. |
'44564', '0', '1', '2', '25', '0', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1) Не происходит никаких событий Это вообще что и зачем? '44564', '0', '2', '1', '61', '0', '100', '512', '0', '0', '0', '0', '0', '82', '32768', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '2) Добавляем флаг Spirit Guide' Здесь link не нужно устанавливать. Кроме того, Ваша цепь соответствует примерно такому сценарию: "на ресете добавить себе флаг Spirit Guide'а". Почему не оформить это в виде одной записи, вместо такой нелепой связи двух? Почему вообще это нужно делать через SAI, если флаг устанавливается на ресете, а скриптуется шаблон (а не отдельно взятый НИП)? Не проще ли сразу добавить этот флаг прямо в `world.creature_template`? '44564', '0', '3', '4', '8', '0', '100', '513', '2061', '0', '0', '0', '0', '83', '32768', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3) При произнесении заклинания убираем флаг Spirit Guide' Насколько я помню, в данном случае необходимо заполнить все event_param'ы, а не только первый (School, CooldownMin, CooldownMax). '44564', '0', '4', '0', '61', '0', '100', '512', '0', '0', '0', '0', '0', '33', '44564', '0', '0', '0', '0', '0', '23', '0', '0', '0', '0', '0', '0', '0', '0', '4) Засчитываем убийство NPC и отдаем награду' Почему здесь тип цели 'SMART_TARGET_OWNER_OR_SUMMONER'? Как минимум следует поставить 'SMART_TARGET_ACTION_INVOKER'. |
На самом деле сначала все было вот так.
'44564', '0', '0', '0', 'здесь входящее исцеление на нпс', '0', '100', '512', 'минимально полученное исцеление 1', ' максимально полученное исцеление 0', ' 0', '0', '0', 'действие убить', 'айди нпс', '0', '0', '0', '0', '0', 'Сам нпс цель', '0', '0', '0', '0', '0', '0', '0', '0', '4) Засчитываем убийство NPC и отдаем награду' И результат был тем же самым, т.е. входящее исцеление получал нпс, а счетчик не засчитывал ничего. а то что Вы видели выше, я попробовал сделать как это было сделано с другим нпс, на котором правда был spell_click. |
Вы неправильно понимаете действие и цель. Действие 'SMART_ACTION_CALL_KILLEDMONSTER' (33) не убивает НИПа, а засчитывает его убийство. Целью для этого действия, соответственно, должен стать не сам НИП, а игрок, который его исцелял, то-есть вызвавший событие, то-есть 'SMART_TARGET_ACTION_INVOKER' (7).
Сообщение # 10 написано 07.02.2019 в 00:02
|
Сделал ровно как Вы и сказали. Результат тот же. не засчитывают.
'44564', '0', '0', '0', '53', '0', '100', '512', '1', '0', '0', '0', '0', '33', '44564', '0', '0', '0', '0', '0', '7', '0', '0', '0', '0', '0', '0', '0', '0', 'trying'
Сообщение # 11 написано 07.02.2019 в 01:25
|
Спасибо Вам =) попробую сегодня вечером.
Просто вчера столкнулся с тем, что в западном крае NPC были невидимые обычному игроку. В режиме GM я их видел. Вот и разбирался почему. Оказывается на них аура была невидимости или фазы. Есть может какие инструменты, помогающие по ID понимать что это за предмет или аура, как в данном случае. Добавлено (08.02.2019, 14:18)
Сообщение # 13 написано 07.02.2019 в 11:55
|
INSERT INTO `smart_scripts` VALUES (44564, 0, 0, 0, 1, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "NPC 44564 - переход на 1 фазу вне боя"); Здесь лучше использовать 'SMART_EVENT_RESET' (25) в качестве события, он полностью Вам подходит и не требует дополнительной настройки (и не повторяется без необходимости). Я так понимаю, что исцеление должно срабатывать только если НИП вне боя находится? Если так, то все верно, за исключением донастройки параметров события во втором сценарии: не могу гарантировать, что сработает без указания школы магии. Добавлено (08.02.2019, 20:48) --------------------------------------------- Есть может какие инструменты, помогающие по ID понимать что это за предмет или аура, как в данном случае. Внутриигровые мне неизвестны, хотя создать их можно. Вы можете использовать команду `.li au` для получения списка всех аур, воздействующих на юнита. Дальше только перебором, увы. |
| |||
| |||