YTDB  

Вернуться   YTDB > Баг-репорты (Патчи) / Bug reports (Patches) 4.3.4 > Необходима поддержка скриптов / Needs script support

Необходима поддержка скриптов / Needs script support Все сделать через базу невозможно.

Данный раздел специально выделен для скриптов, реализующих действия, которые невозможно реализовать через базу.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.03.2014, 00:28   #1
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию Нужно что-то ещё.

Добрый вечер. Имеется вот такая дверь(то что она закрыта по дефолту - это правильно), также есть и нпц перед ней. Скриншот:
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 если что-то забыл добавить, пишите.
Для файла instance_icecrown_citadel.cpp
Код:
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;
Постараюсь потом добавить ещё что-нибудь. Одно знаю точно - эти мобы не уникальны, поэтому нужен check Guid.
Вообщем от скрипта требуется одно - сделать проверку на этих нпц и если они убиты(те что перед дверью, а не за ней и перед Ланателью) то открывать дверь.
Миниатюры
Нажмите на изображение для увеличения
Название: WoWScrnShot_030414_012622.jpg
Просмотров: 366
Размер:	311.1 Кб
ID:	2722  

Последний раз редактировалось Ulduar; 04.03.2014 в 23:08. Причина: 0f добавлять нужно обязательно, я смотрел похожие примеры в ядре. Для спеллов с 226 аурой.
Ulduar вне форума   Ответить с цитированием
Старый 06.03.2014, 02:24   #2
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Тут нужно ещё дополнять, но я запутался. Смотрел вон в Тёмном Лабиринте реализацию(убиваешь всех мобов и Посол Гиблочрев снимает с себя баниш и стартует хождение по точкам), а тут надо с GO работать. Составить бы скрипт и разрабам отправить. На форум СД2 писать не стоит, там затишье.

Последний раз редактировалось Ulduar; 06.03.2014 в 13:44.
Ulduar вне форума   Ответить с цитированием
Старый 07.04.2014, 03:36   #3
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Нет необходимости в 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.');
Каждому мобу создал. Будет прерывать скрипт открывания двери, если 3 ближних существа(id указаны) живы.
Мне вот интересно SCRIPT_COMMAND_TERMINATE_CONDITION работает только для квестов? Было бы неплохо иметь возможность работать с кондициями.
Ulduar вне форума   Ответить с цитированием
Старый 07.04.2014, 12:49   #4
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Только мобов друг от друга не отводите далеко.

Что скажете по поводу скрипта? Не хак?

Последний раз редактировалось NeatElves; 10.04.2014 в 22:41.
Ulduar вне форума   Ответить с цитированием
Старый 10.04.2014, 22:37   #5
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

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;
            }
Раз имеют continue(переводя по простому значит продолжать)
То я думаю, что может работать не только для квестов.
Что самое интересное, TERMINATE_SCRIPT и TERMINATE_CONDITION могут работать вместе(хотя Xfurry собирает добавить новую кондицию)
http://ytdb.ru/showthread.php?t=14148
Я внимательно просмотрел работу NeatElves и могу смело утверждать, что квест необязателен для использования этой команды.
Можно добавить несколько кондиций сразу для прерывания скрипта и если хотя бы одно из них(условий) не выполняется, то будет прерывать скрипт.

Осталось только добавить возможность для свободного взаимодействия EAI и db_script и дело в шляпе!

Последний раз редактировалось NeatElves; 10.04.2014 в 22:41.
Ulduar вне форума   Ответить с цитированием
Старый 11.04.2014, 09:14   #6
YuruY
YTDB dev
 
Аватар для YuruY
 
Регистрация: 05.11.2009
Адрес: Thunder Bluff
Сообщений: 3,570
Сказал(а) спасибо: 7,641
Поблагодарили 3,218 раз(а) в 483 сообщениях
YuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспорима
По умолчанию

Цитата:
(хотя Xfurry собирает добавить новую кондицию
Когда это будет? Вет ка 434 мертвая.
__________________
Правила написания баг-репортов.
Общие правила поведения - рекомендуемые исключительно всем для прочтения.
YuruY вне форума   Ответить с цитированием
Старый 11.04.2014, 11:37   #7
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Не будем торопить события раньше времени. Я например благодаря Мангосу понял разницу между return true(возврат, если условие выполняется) и return false(возврат, если условие не выполняется). Раньше и в этом путался. Это лучше учебника по С++.
Вы пожалуйста лучше скажите, всё ли правильно по поводу TERMINATE_CONDITION сказал?
Ulduar вне форума   Ответить с цитированием
Старый 26.04.2014, 22:38   #8
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

А вот и кондиция собственно плюс новая команда плюс улучшение для AI Event.
https://github.com/cmangos/issues/is...issue-32130701
__________________
Ты кто? Зёбра! Ктооооооо?!
Ulduar вне форума   Ответить с цитированием
Старый 04.05.2014, 20:31   #9
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 68
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Заимплементили и AI Event и кондицию, и power type. Осталось дождаться пуша в Катаклизм ветку.
Также Radu хочет заимплементить db_script_on_areatrigger. Источником и таргетом будет игрок. Суммон Рагны можно реализовать будет в ОП! Не хакая и оффлайк!
Скриптуй не хочу как говориться! Вроде ещё собирался добавить SCRIPT_COMMAND_SEND_AIEVENT. Для взаимодействия EAI, SD2 и db_script. Но к сожалению не добавлял.
__________________
Ты кто? Зёбра! Ктооооооо?!
Ulduar вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c2950] Fix Keeper spawn locations in Ulduar central hall newsbot ScriptDev2-4.3.4 Commits 0 23.01.2014 02:40
[2949] Fix Keeper spawn locations in Ulduar central hall newsbot ScriptDev2 Commits 0 29.09.2013 01:51


Текущее время: 05:07. Часовой пояс GMT +4.


YTDB - MaNGOS DataBase

Русский форум Мангос - официальный форум RMDC

Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума YTDB будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot