|
---|
|
Необходима поддержка скриптов / Needs script support Все сделать через базу невозможно. Данный раздел специально выделен для скриптов, реализующих действия, которые невозможно реализовать через базу. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
04.03.2014, 00:28 | #1 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Нужно что-то ещё.
Добрый вечер. Имеется вот такая дверь(то что она закрыта по дефолту - это правильно), также есть и нпц перед ней. Скриншот:
http://ytdb.ru/attachment.php?attach...1&d=1393878412 На оффе после убийства мобов должна открываться эта самая дверь. Код:
DATA_CRIMSONHALL_EVENT = 1, Pre Blood Prince mini event. NPC_DARKFALLEN_NOBLE = 37663, Pre Blood Prince Door mini event. NPC_DARKFALLEN_BLOOD_KNIGHT = 37595, NPC_DARKFALLEN_ADVISOR = 37571, NPC_DARKFALLEN_ARCMAGE = 37664, void SetData64(uint32 uiType, uint64 uiGuid) override; GuidSet m_sPreCrimsonHallMobsAliveGUIDSet; это для файла icecrown_citadel.h если что-то забыл добавить, пишите. Код:
void instance_icecrown_citadel::OnCreatureCreate(Creature* pCreature) case NPC_DARKFALLEN_NOBLE case NPC_DARKFALLEN_BLOOD_KNIGHT case NPC_DARKFALLEN_ARCMAGE case NPC_DARKFALLEN_ARCMAGE // Filter only the mobs spawned on Pre Crimson Hall Door. if (pCreature->GetPositionZ() < 361.0f) m_sPreCrimsonHallMobsGUIDSet.insert(pCreature->GetObjectGuid()); break; } } void instance_icecrown_citadel:SetData64(uint32 uiData, uint64 uiGuid) { // If Blood Prince Council already completed, just ignore if (GetData(TYPE_BLOOD_PRINCE_COUNCIL) == DONE) return; // Note: this is handled in Acid. The purpose is check which Pre Crimson Hall mobs is alive, in case of server reset // The function is triggered by eventAI on generic timer if (uiData == DATA_CRIMSONHALL_EVENT) m_sPreCrimsonHallMobsGUIDSet.insert(pCreature->GetObjectGuid()); } Код:
void instance_icecrown_citadel::OnCreatureDeath(Creature* pCreature) case NPC_DARKFALLEN_NOBLE case NPC_DARKFALLEN_BLOOD_KNIGHT case NPC_DARKFALLEN_ARCMAGE case NPC_DARKFALLEN_ARCMAGE break; Вообщем от скрипта требуется одно - сделать проверку на этих нпц и если они убиты(те что перед дверью, а не за ней и перед Ланателью) то открывать дверь. Последний раз редактировалось Ulduar; 04.03.2014 в 23:08. Причина: 0f добавлять нужно обязательно, я смотрел похожие примеры в ядре. Для спеллов с 226 аурой. |
06.03.2014, 02:24 | #2 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Тут нужно ещё дополнять, но я запутался. Смотрел вон в Тёмном Лабиринте реализацию(убиваешь всех мобов и Посол Гиблочрев снимает с себя баниш и стартует хождение по точкам), а тут надо с GO работать. Составить бы скрипт и разрабам отправить. На форум СД2 писать не стоит, там затишье.
Последний раз редактировалось Ulduar; 06.03.2014 в 13:44. |
07.04.2014, 03:36 | #3 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Нет необходимости в SD2 скрипте. SCRIPT_COMMAND_TERMINATE_SCRIPT нам поможет!
Код:
-- Script id: 37664 DELETE FROM dbscripts_on_creature_death WHERE id=37664; INSERT INTO dbscripts_on_creature_death VALUES (37664,0,31,37595,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37664,0,31,37663,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37664,0,31,37571,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37664,1,11,0,0,201376,100,0,0,0,0,0,0,0,0,0,'Open Door Crimson Hall at condition what all friendly radius dead.'); -- Script id: 37595 DELETE FROM dbscripts_on_creature_death WHERE id=37595; INSERT INTO dbscripts_on_creature_death VALUES (37595,0,31,37664,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37595,0,31,37663,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37595,0,31,37571,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37595,1,11,0,0,201376,100,0,0,0,0,0,0,0,0,0,'Open Door Crimson Hall at condition what all friendly radius dead.'); -- Script id: 37663 DELETE FROM dbscripts_on_creature_death WHERE id=37663; INSERT INTO dbscripts_on_creature_death VALUES (37663,0,31,37664,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37663,0,31,37595,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37663,0,31,37571,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37663,1,11,0,0,201376,100,0,0,0,0,0,0,0,0,0,'Open Door Crimson Hall at condition what all friendly radius dead.'); -- Script id: 37571 DELETE FROM dbscripts_on_creature_death WHERE id=37571; INSERT INTO dbscripts_on_creature_death VALUES (37571,0,31,37664,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37571,0,31,37663,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37571,0,31,37595,30,0,0,8,0,0,0,0,0,0,0,0,'Terminate script Open Crimson Hall Door'), (37571,1,11,0,0,201376,100,0,0,0,0,0,0,0,0,0,'Open Door Crimson Hall at condition what all friendly radius dead.'); Мне вот интересно SCRIPT_COMMAND_TERMINATE_CONDITION работает только для квестов? Было бы неплохо иметь возможность работать с кондициями. |
07.04.2014, 12:49 | #4 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Только мобов друг от друга не отводите далеко.
Что скажете по поводу скрипта? Не хак? Последний раз редактировалось NeatElves; 10.04.2014 в 22:41. |
10.04.2014, 22:37 | #5 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
SCRIPT_COMMAND_TERMINATE_CONDITION:
Код:
case SCRIPT_COMMAND_TERMINATE_COND: // 34 { if (!sConditionStorage.LookupEntry<PlayerCondition>(tmp.terminateCond.conditionId)) { sLog.outErrorDb("Table `%s` has datalong = %u in SCRIPT_COMMAND_TERMINATE_COND for script id %u, but this condition_id does not exist.", tablename, tmp.terminateCond.conditionId, tmp.id); continue; } if (tmp.terminateCond.failQuest && !sObjectMgr.GetQuestTemplate(tmp.terminateCond.failQuest)) { sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_TERMINATE_COND for script id %u, but this questId does not exist.", tablename, tmp.terminateCond.failQuest, tmp.id); continue; } break; } То я думаю, что может работать не только для квестов. Что самое интересное, TERMINATE_SCRIPT и TERMINATE_CONDITION могут работать вместе(хотя Xfurry собирает добавить новую кондицию) http://ytdb.ru/showthread.php?t=14148 Я внимательно просмотрел работу NeatElves и могу смело утверждать, что квест необязателен для использования этой команды. Можно добавить несколько кондиций сразу для прерывания скрипта и если хотя бы одно из них(условий) не выполняется, то будет прерывать скрипт. Осталось только добавить возможность для свободного взаимодействия EAI и db_script и дело в шляпе! Последний раз редактировалось NeatElves; 10.04.2014 в 22:41. |
11.04.2014, 09:14 | #6 | |
YTDB dev
Регистрация: 05.11.2009
Адрес: Thunder Bluff
Сообщений: 3,625
Сказал(а) спасибо: 7,839
Поблагодарили 3,255 раз(а) в 498 сообщениях
|
Цитата:
|
|
11.04.2014, 11:37 | #7 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Не будем торопить события раньше времени. Я например благодаря Мангосу понял разницу между return true(возврат, если условие выполняется) и return false(возврат, если условие не выполняется). Раньше и в этом путался. Это лучше учебника по С++.
Вы пожалуйста лучше скажите, всё ли правильно по поводу TERMINATE_CONDITION сказал? |
26.04.2014, 22:38 | #8 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
А вот и кондиция собственно плюс новая команда плюс улучшение для AI Event.
https://github.com/cmangos/issues/is...issue-32130701
__________________
Ты кто? Зёбра! Ктооооооо?! |
04.05.2014, 20:31 | #9 |
Ученый
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
|
Заимплементили и AI Event и кондицию, и power type. Осталось дождаться пуша в Катаклизм ветку.
Также Radu хочет заимплементить db_script_on_areatrigger. Источником и таргетом будет игрок. Суммон Рагны можно реализовать будет в ОП! Не хакая и оффлайк! Скриптуй не хочу как говориться! Вроде ещё собирался добавить SCRIPT_COMMAND_SEND_AIEVENT. Для взаимодействия EAI, SD2 и db_script. Но к сожалению не добавлял.
__________________
Ты кто? Зёбра! Ктооооооо?! |