Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Отвергнутые (http://mangos.ytdb.ru/forumdisplay.php?f=59)
-   -   [QUEST=11541]Зачистить залив Зеленожабрых! (http://mangos.ytdb.ru/showthread.php?t=771)

virusav 19.04.2010 23:19

[QUEST=11541]Зачистить залив Зеленожабрых!
 
По квесту 11541 выбиваем из 25073 итем 34483, при использовании которого кастуется спелл 45109.
В радиусе 5 метров от указанной точки нпц 25084 становятся 25085, засчитывается +1 за каждого нпц (спелл 45110).
НПЦ кастуют спеллы 45111, 45112 на себя и нападают на ближайшего нпц 25073.

Примитивный начальный скрипт:
Код:

/*######
## item_orb_of_murloc_control
######*/

enum
{
    QUEST_DISRUPT_THE_GREENGILL_COAST = 11541,
    NPC_DARKSPINE_SIREN              = 25073,
    NPC_GREENGILL_SLAVE              = 25084,
    NPC_FREED_GREENGILL_SLAVE        = 25085,
    SPELL_ORB_OF_MURLOC_CONTROL      = 45109,
    SPELL_GREENGILL_SLAVE_FREED      = 45110,
    SPELL_ENRAGE                      = 45111,
    SPELL_MIND_CONTROL                = 45112
};

bool ItemUse_item_orb_of_murloc_control(Player* pPlayer, Item* pItem, const SpellCastTargets &pTargets)
{
    if (pPlayer->GetQuestStatus(QUEST_DISRUPT_THE_GREENGILL_COAST) == QUEST_STATUS_INCOMPLETE)
    {
        std::list<Creature* > lCreatureList;
        GetCreatureListWithEntryInGrid(lCreatureList, pPlayer, NPC_GREENGILL_SLAVE, 5.0f);
        std::list<Creature* > lCreatureTargetList;
        if (!lCreatureList.empty())
            for(std::list<Creature*>::iterator itr = lCreatureList.begin(); itr != lCreatureList.end(); ++itr)
            {
                (*itr)->CastSpell(pPlayer, SPELL_GREENGILL_SLAVE_FREED, true);
                (*itr)->UpdateEntry(NPC_FREED_GREENGILL_SLAVE);
                (*itr)->CastSpell((*itr), SPELL_ENRAGE, true);
                (*itr)->CastSpell((*itr), SPELL_MIND_CONTROL, true);
                Creature* pTarget = GetClosestCreatureWithEntry((*itr), NPC_DARKSPINE_SIREN, 10.0f);
                if(pTarget)
                    (*itr)->Attack(pTarget, true);
            }
    }
    return false;
}

Проблемы:
1. Необходимо искать нпц от точки курсора, где использовался итем (в примере берется точка игрока). Возможно, есть какой-нибудь объект "курсор" или что-то подобное.
2. Спеллы в примере просто кастуются. Возможно, они должны применяться как-нибудь по-другому.
3. Скрипт начинает выполняться сразу при нажатии на итем,не обращая внимания на задержку в 1 секунду, которая требуется для каста спелла.
4. Освобожденные нпц выделяют в качестве цели нужного нпц, но не атакуют его.

Ссылка на видео: http://www.youtube.com/watch?v=exQ0PyEC7Zc

MaS0n 20.04.2010 13:20

2. Думаю, что думми эффект разбивания сферы как раз и должен исполнять действия, которые сейчас в итем-скрипте

3. Любой скрипт итема выполняется раньше, чем каст с этого же итема

4. Атака не срабатывает, потому что ф-ция Attack - это базовая инициация атаки, пакеты, стойки, state, снятие аур при боевом состоянии и т.д
И к тому же, это еще и переход от рейнж/магич. атак к мили

Чтоб они именно бежали атаковать - думаю написать им простенький скрипт(все равно попадание спеллом сферы наверное делать придется) и использовать AttackStart

Ну а чтоб просто бежали
(*itr)->GetMotionMaster()->MoveChase(pTarget);

Пс : а можно ссылочку на видео добавить в первый пост

virusav 20.04.2010 13:25

На видео над освобожденным мурлоком появляется эффект, как при касте контроля на него.
Возможно, они изначально ходят под аурой, но на видео этого не увидел.

Если можно, пишите по пунктам, так проще будет разбирать.

virusav 05.05.2010 00:03

Вложений: 1
Переписал скрипт и опубликовал на форуме СД2:
http://www.scriptdev2.com/project.php?issueid=941

virusav 06.05.2010 23:01

Вложений: 1
Внес изменения: добавлен нпц в список допустимых целей, увеличен радиус поиска целей.
Причина изменений: видео прохождения квеста.

virusav 11.11.2010 22:54

В репозитарий СД2 принят другой скрипт.


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

ru-mangos.ru - Русское сообщество MaNGOS