Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Отвергнутые (http://mangos.ytdb.ru/forumdisplay.php?f=59)
-   -   [QUEST=11379]Очень горячая похлебка (http://mangos.ytdb.ru/showthread.php?t=2879)

virusav 09.11.2010 15:30

[QUEST=11379]Очень горячая похлебка
 
http://ru.wowhead.com/quest=11379
Тема на форуме СД2:
http://www.scriptdev2.com/project.php?issueid=1157
Код:

Index: scripts/world/item_scripts.cpp
===================================================================
--- scripts/world/item_scripts.cpp        (revision 1863)
+++ scripts/world/item_scripts.cpp        (working copy)
@@ -25,6 +25,8 @@
 item_arcane_charges                Prevent use if player is not flying (cannot cast while on ground)
 item_flying_machine(i34060,i34061)  Engineering crafted flying machines
 item_gor_dreks_ointment(i30175)    Protecting Our Own(q10488)
+item_petrov_cluster_bombs
+item_cooking_pot                    Quest Super Hot Stew[11379]
 EndContentData */
 
 #include "precompiled.h"
@@ -127,6 +129,32 @@
    return false;
 }
 
+/*#####
+# item_cooking_pot
+#####*/
+
+enum
+{
+    SPELL_DEMON_BROILED_SURPRISE    = 43723,
+    NPC_ABYSSAL_FLAMEBRINGER        = 19973
+};
+
+bool ItemUse_item_cooking_pot(Player* pPlayer, Item* pItem, const SpellCastTargets &pTargets)
+{
+    std::list<Creature*> lAbyssalFlamebringerList;
+    GetCreatureListWithEntryInGrid(lAbyssalFlamebringerList, pPlayer, NPC_ABYSSAL_FLAMEBRINGER, 10.0f);
+    for (std::list<Creature*>::iterator itr = lAbyssalFlamebringerList.begin(); itr != lAbyssalFlamebringerList.end(); ++itr)
+    {
+        if ((*itr)->IsCorpse())
+            if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(SPELL_DEMON_BROILED_SURPRISE))
+            {
+                pPlayer->CastSpell(pPlayer, pSpellInfo->CalculateSimpleValue(EFFECT_INDEX_0), false);
+                return true;
+            }
+    }
+    return false;
+}
+
 void AddSC_item_scripts()
 {
    Script *newscript;
@@ -150,4 +178,9 @@
    newscript->Name = "item_petrov_cluster_bombs";
    newscript->pItemUse = &ItemUse_item_petrov_cluster_bombs;
    newscript->RegisterSelf();
+
+    newscript = new Script;
+    newscript->Name = "item_cooking_pot";
+    newscript->pItemUse = &ItemUse_item_cooking_pot;
+    newscript->RegisterSelf();
 }

Есть один визуальный недочет: если у игрока нет ингредиентов, то он будет делать вид, что кастует спелл, хотя на самом деле ничего происходить не будет.

Для устранения этого недочета нужно проверять, может ли игрок кастовать спелл, но решения пока не нашел.
Как я понимаю, нельзя проверить возможность каста спелла игроком.

zergtmn 09.11.2010 15:37

После починки таргета (22, 7) скрипт будет не нужен. В ядре уже есть обработчик нужного спелла в закомментированом виде.

virusav 10.11.2010 20:50

Это я знаю, но код-то закомментирован.

Что понимается под починкой таргета?

PSZ 11.11.2010 08:20

Target7 должен быть типа SPELL_SCRIPT_TARGET - действовать только на определенных мобов, номера которых берутся из таблицы.

virusav 11.11.2010 11:28

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

zergtmn 11.11.2010 13:30

Имеет, но зачем скриптдеву временные скрипты?

virusav 11.11.2010 14:11

Потому что не факт, что данная цель будет определяться в базе.
Если кто-то решил, что это надо, то это не означает, что ядерщики так и сделают.

zergtmn 11.11.2010 14:32

Хорошо. Что вы предлагаете делать со спеллами с единственным эффектом Force Cast, который не скриптуется?
Пример: на мобе висит аура Periodic Trigger, которая триггерит спелл с эффектом Force Cast и таргетами (22, 7). Триггерный спелл заставляет живых мобов определенного типа кастануть на себя бафф.

virusav 11.11.2010 14:40

Если ядерщики сделают таргет, я только за.
Но не известно, сделают они это или нет.

В СД2 всегда есть временные скрипты, пока патчи находятся на рассмотрении или отсутствуют.

virusav 15.01.2011 19:34

После 10908 патч не нужен.


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

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