• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Исправление квеста через ядро?
zzzzzz_1983
Скаут
Всем привет, Форумчане!
Прошу вас помочь мне в решении задачи.
Скачал я значит последнюю базу TrinityCore с их GitHub.
Все скомпилировал запустил сервер, зашел в игру за жреца.
Взял квест, где нужно проверить свои способности а именно отхилить рядом тренеров.
Так вот в чем вопрос то у меня возникает, не засчитывается счетчик, сколько я отхилил персонажей.
Подскажите пожалуйста, куда мне дальше смотреть, чтобы задание в итоге засчитали.
Скажу прямо с SQL более менее в таблицах начал понимать.
С исходниками сложнее самого ядра, незнаю как правильно работать с ними.
Я не прошу за меня что-либо делать. Просто подскажите в какую сторону нужно смотреть, чтобы понимать процесс.
Я понимаю что нужно сделать когда я использую заклинание на выделенного нпс, у меня срабатывал счетчик.
После достижения условия. мне засчитывали его. и я мог сдать задание.

Если у кого-то есть желание и время, можно пообщаться в дискорде, вотсапе например, и там объяснить.
Я хочу научиться.

С Уважением, Владимир!
Сообщение # 1 написано 05.02.2019 в 12:17
kvipka
Сержант
Владимир, большинство сложных квестов, содержащих несколько элементов и событий реализуются через SAI скрипты (SmartAI - страницу найдете на вики тринитикора).
По поводу конкретного задания для жрецов - если я вас правильно понял, вы используете не те заклинания, вчитайтесь в задание подробнее, исцеление 1 ранга и баф на стамину 1 ранга.
Сообщение # 2 написано 05.02.2019 в 13:00
zzzzzz_1983
Скаут
Спасибо огромное за скорый ответ.
Квест этот 26919 у жреца.
Изучение слов !
У меня в базе скачанной с Trinity там нужно отхилить персонажей. на Wowhead там нужно изучить другой навык вообще.

В SmartAI  Tutorial есть вот это.
SET @ENTRY := 30051;
SET @GOSSIP := 9626;
SET @OPTION := 0;

Что значит в данном запросе @, скажите пожалуйста.
Сообщение # 3 отредактировано zzzzzz_1983 - Вторник, 05.02.2019, 14:51
p620
Маршал
Цитата zzzzzz_1983 ()
Что значит в данном запросе @, скажите пожалуйста.


Обозначение сессионной переменной.
Сообщение # 4 написано 05.02.2019 в 15:44
zzzzzz_1983
Скаут
Спасибо Вам!
Так все таки так и непонятно, исправление квестов происходит в основном через базу и 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");
Сообщение # 5 отредактировано zzzzzz_1983 - Вторник, 05.02.2019, 16:49
p620
Маршал
Цитата zzzzzz_1983 ()
В данном скрипте при получении исцеления, должны засчитывать убийство нпс. Но ведь это неправильно же.


Почему Вы так решили? Именно так подобные задания и реализуются: требуемое действие на самом деле засчитывает убийство того или иного НИПа прозрачно для игрока.
Цитата zzzzzz_1983 ()
Я честно хочу понять как правильно действовать, какие таблицы мне нужны для исправления квеста через базу.


Зачастую алгоритм исправления напрямую зависит от конкретной задачи, универсального подхода не существует. Для начала рекомендую ознакомиться с функционалом каждой таблицы, как в теории, так и на практике, чтобы получить целостное представление об этой части инфраструктуры. Большинство подобных вопросов в результате отпадет.
Цитата zzzzzz_1983 ()
И по какому принципу если это в ядре мне искать нужный файл для редактирования.


В ядре такой подход неприменим. Если хотите разрабатывать его - познакомьтесь хотя бы с основами программирования на современном C++.
Сообщение # 6 написано 05.02.2019 в 22:23
zzzzzz_1983
Скаут
Спасибо за ответ!  Буду разбираться. Потому что вопросов больше чем ответов.
Вчера весь вечер пробовал запустить 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 не срабатывает.
Сообщение # 7 отредактировано zzzzzz_1983 - Среда, 06.02.2019, 14:47
p620
Маршал
Цитата zzzzzz_1983 ()
'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)  Не происходит никаких событий


Это вообще что и зачем?
Цитата zzzzzz_1983 ()
'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`?
Цитата zzzzzz_1983 ()
'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).
Цитата zzzzzz_1983 ()
'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'.
Сообщение # 8 отредактировано p620 - Среда, 06.02.2019, 18:04
zzzzzz_1983
Скаут
На самом деле сначала все было вот так.

'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.
Сообщение # 9 отредактировано zzzzzz_1983 - Среда, 06.02.2019, 22:38
p620
Маршал
Вы неправильно понимаете действие и цель. Действие 'SMART_ACTION_CALL_KILLEDMONSTER' (33) не убивает НИПа, а засчитывает его убийство. Целью для этого действия, соответственно, должен стать не сам НИП, а игрок, который его исцелял, то-есть вызвавший событие, то-есть 'SMART_TARGET_ACTION_INVOKER' (7).
Сообщение # 10 написано 07.02.2019 в 00:02
zzzzzz_1983
Скаут
Сделал ровно как Вы и сказали. Результат тот же. не засчитывают.

'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
p620
Маршал
Цитата zzzzzz_1983 ()
1', '0', '0', '0', '0',


Вы не заполнили еще три параметра у события.
Цитата p620 ()
Насколько я помню, в данном случае необходимо заполнить все event_param'ы, а не только первый
Сообщение # 12 написано 07.02.2019 в 02:43
zzzzzz_1983
Скаут
Спасибо Вам =) попробую сегодня вечером.
Просто вчера столкнулся с тем, что в западном крае NPC были невидимые обычному игроку.
В режиме GM я их видел. Вот и разбирался почему. Оказывается на них аура была невидимости или фазы.
Есть может какие инструменты, помогающие по ID понимать что это за предмет или аура, как в данном случае.

Добавлено (08.02.2019, 14:18)
---------------------------------------------
Как Вы считаете такой скрипт рабочий для того, чтобы когда я произношу заклинание 2061 быстрое исцеление на НПС 44564. мне засчитывают убийство.
Еще не совсем понятен пункт killcredit1 в таблице creature_template

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 фазу вне боя");

INSERT INTO `smart_scripts` VALUES (44564, 0, 1, 2, 8, 1, 100, 0, 2061, 0, 0, 0, 33, 44175, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, "NPC 44564 - засчитать убийство NPC 44175 игроку");

INSERT INTO `smart_scripts` VALUES (44564, 0, 2, 0, 61, 1, 100, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "NPC 44564 -Ожидание события и дальнейший сброс скрипта");

Сообщение # 13 написано 07.02.2019 в 11:55
p620
Маршал
Цитата zzzzzz_1983 ()
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)
---------------------------------------------
Цитата zzzzzz_1983 ()
Есть может какие инструменты, помогающие по ID понимать что это за предмет или аура, как в данном случае.


Внутриигровые мне неизвестны, хотя создать их можно. Вы можете использовать команду `.li au` для получения списка всех аур, воздействующих на юнита. Дальше только перебором, увы.
Сообщение # 14 отредактировано p620 - Пятница, 08.02.2019, 20:49
  • Страница 1 из 1
  • 1
Поиск: