По квесту 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