Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Патчи (http://mangos.ytdb.ru/forumdisplay.php?f=55)
-   -   [QUEST=10769] Удар исподтишка (http://mangos.ytdb.ru/showthread.php?t=3072)

KiriX 30.11.2010 17:28

[QUEST=10769] Удар исподтишка
 
Реализация работы квестов:
http://ru.wowhead.com/quest=10769
http://ru.wowhead.com/quest=10776
Реализует правильную работу данных квестов. Убийство НПС засчитывается лишь в том случае, если игрок убиват мобов одев выдаваемую накидку.
Патч:
PHP код:

Indexscripts/outland/shadowmoon_valley.cpp
===================================================================
--- 
scripts/outland/shadowmoon_valley.cpp    (revision 1892)
+++ 
scripts/outland/shadowmoon_valley.cpp    (working copy)
@@ -
17,+17,@@
 
/* ScriptData
 SDName: Shadowmoon_Valley
 SD%Complete: 100
-SDComment: Quest support: 10519, 10583, 10601, 10781, 10814, 10804, 10854, 11082, 10458, 10480, 10481. Vendor Drake Dealer Hurlunk.
+SDComment: Quest support: 10519, 10583, 10601, 10769, 10776, 10781, 10814, 10804, 10854, 11082, 10458, 10480, 10481. Vendor Drake Dealer Hurlunk.
 SDCategory: Shadowmoon Valley
 EndScriptData */
 
@@ -36,+36,@@
 
event_spell_soul_captured_credit
 npc_lord_illidan_stormrage
 go_crystal_prison
+mob_crazed_colossus
 EndContentData 
*/
 
 
#include "precompiled.h"
@@ -1440,+1441,34 @@
     return 
true;
 }
 
+
/*###
+# mob_crazed_colossus
+####*/
+enum
+{
+    
SPELL_ILLIDARI_DISGUISE_M        38225,
+    
SPELL_ILLIDARI_DISGUISE_F        38227,
+
+    
NPC_CRAZED_COLOSSUS_KILL_CREDIT 22051
+};
+
struct MANGOS_DLL_DECL mob_crazed_colossusAI : public ScriptedAI
+{
+    
mob_crazed_colossusAI(CreaturepCreature) : ScriptedAI(pCreature){Reset();}
+
+    
void Reset() {}
+
+    
void JustDied(UnitpKiller)
+    {
+        
PlayerpPlayer pKiller->GetCharmerOrOwnerPlayerOrPlayerItself();
+        if (
pKiller->GetTypeId() == TYPEID_PLAYER && (pKiller->HasAura(SPELL_ILLIDARI_DISGUISE_M) || pKiller->HasAura(SPELL_ILLIDARI_DISGUISE_F)))
+                
pPlayer->KilledMonsterCredit(NPC_CRAZED_COLOSSUS_KILL_CREDITm_creature->GetGUID());
+    }
+};
+
CreatureAIGetAI_mob_crazed_colossus(Creature* (pCreature))
+{
+    return new 
mob_crazed_colossusAI(pCreature);
+}
+
 
void AddSC_shadowmoon_valley()
 {
     
Script *newscript;
@@ -
1521,+1550,@@
     
newscript->Name "go_crystal_prison";
     
newscript->pGOQuestAccept = &GOQuestAccept_GO_crystal_prison;
     
newscript->RegisterSelf();
+    
+    
newscript = new Script;
+    
newscript->Name "mob_crazed_colossus";
+    
newscript->GetAI = &GetAI_mob_crazed_colossus;
+    
newscript->RegisterSelf();
 } 

PHP код:

UPDATE `creature_templateSET `KillCredit2`='0', `ScriptName`='mob_crazed_colossus' WHERE `entry`='19823'

virusav, оформи, пожалуйста, на форуме SD2...

virusav 30.11.2010 17:56

Код:

Player* Unit::GetCharmerOrOwnerPlayerOrPlayerItself()
...
return GetTypeId()==TYPEID_PLAYER ? (Player*)this : NULL;

Мне кажется, что не нужно
Код:

pKiller->GetTypeId() == TYPEID_PLAYER

KiriX 30.11.2010 18:01

Цитата:

Сообщение от virusav (Сообщение 16712)
Код:

Player* Unit::GetCharmerOrOwnerPlayerOrPlayerItself()
...
return GetTypeId()==TYPEID_PLAYER ? (Player*)this : NULL;

Мне кажется, что не нужно
Код:

pKiller->GetTypeId() == TYPEID_PLAYER

Ну в общем-то да, хотя там проверка иная, моба может убить другой моб, но на нём врядли будет аура с нужного итема. А вообще первая строка никак не влияет на то, что попадёт в if, поэтому перестраховался.
Можно убирать - я сам тестил без этой строки - эту проверку только для патча добавил.
Хотя скорее эту проверку следовало бы вынести самой первой...

virusav 30.11.2010 18:09

Теоретически можно в момент смерти нпц на АИ переводить его во вторую фазу, где через EVENT_T_MISSING_BUFF, EVENT_T_BUFFED или EVENT_T_TARGET_BUFFED проверять ауру на игроке.

Если прокатит, то подобные квесты можно будет реализовывать средствами АИ.

KiriX 30.11.2010 19:09

Цитата:

Сообщение от virusav (Сообщение 16714)
Теоретически можно в момент смерти нпц на АИ переводить его во вторую фазу, где через EVENT_T_MISSING_BUFF, EVENT_T_BUFFED или EVENT_T_TARGET_BUFFED проверять ауру на игроке.

Если прокатит, то подобные квесты можно будет реализовывать средствами АИ.

Ага, хорошая идея, попробую. Но как это будет работать для группы?
А если в момент смерти НПС будет пробегать другой игрок, не в пати, но с аурой?
После смерти разве у НПС будет таргет?
Попробовал наоборот. Если есть аура - переводим во вторую фазу. Во второй фазе при смерти киллкредит.
Но опять таки, а если группа и второй член группы не имеет ауры?
PHP код:

UPDATE `creature_templateSET `AIName` = 'EventAI' WHERE `entry` = '19823';
DELETE FROM `creature_ai_scriptsWHERE (`id`='19823050');
INSERT INTO `creature_ai_scriptsVALUES ('19823050''19823''24''0''100''0''38225''0''0''0''22''1''0''0''0''0''0''0''0''0''0''0''ytdb');
DELETE FROM `creature_ai_scriptsWHERE (`id`='19823051');
INSERT INTO `creature_ai_scriptsVALUES ('19823051''19823''24''0''100''0''38227''0''0''0''22''1''0''0''0''0''0''0''0''0''0''0''ytdb');
DELETE FROM `creature_ai_scriptsWHERE (`id`='19823052');
INSERT INTO `creature_ai_scriptsVALUES ('19823052''19823''6''1''100''0''0''0''0''0''33''22051''6''0''22''0''0''0''0''0''0''0''ytdb'); 

Но у ми не работает, может что-то не так сделал...

virusav 06.12.2010 19:48

В дбц нашел спелл 38223 Quest Credit: Crazed Colossus, у которого
Код:

Effect 0: Id 77 (SPELL_EFFECT_SCRIPT_EFFECT)
BasePoints = 38224
Targets (25, 37) (TARGET_DUELVSPLAYER, TARGET_AREAEFFECT_PARTY)

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

Если бы в таблицах _scripts были кондиции, то многое можно было реализовать через них.


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

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