Jump to content
Sign in to follow this  
cyberpro98

Creature Dropping Object on death

Recommended Posts

Hello! 
Can anyone tell me how to make 1 script with : 


First players must to kill mobs and after mobs the boss will be attackable.

After it when is the boss dead, to spawn object (like berserking ) and to be spawned there for 5 or 10seconds ? 

How to make ? ( let's say i want to add it to this script -> ) 

 

Quote
  1. #include "ScriptPCH.h"
  2.  
  3. #define SAY_TAUNT               -1543000
  4. #define SAY_HEAL                -1543001
  5. #define SAY_SURGE               -1543002
  6. #define SAY_AGGRO_1             -1543003
  7. #define SAY_AGGRO_2             -1543004
  8. #define SAY_AGGRO_3             -1543005
  9. #define SAY_KILL_1              -1543006
  10. #define SAY_KILL_2              -1543007
  11. #define SAY_DIE                 -1543008
  12.  
  13. #define SPELL_MORTAL_WOUND      30641
  14. #define H_SPELL_MORTAL_WOUND    36814
  15. #define SPELL_SURGE             34645
  16. #define SPELL_RETALIATION       22857
  17. #define SPELL_HOLY_LIGHT        43451
  18. #define SPELL_LAY_OF_HANDS      17233
  19.  
  20. struct boss_betrayer_AI : public ScriptedAI
  21. {
  22.     boss_betrayer_AI(Creature *c) : ScriptedAI(c)
  23.     {
  24.         pInstance = c->GetInstanceData();
  25.         HeroicMode = me->GetMap()->IsHeroic();
  26.     }
  27.  
  28.     ScriptedInstance* pInstance;
  29.     bool HeroicMode;
  30.  
  31.     uint32 Surge_Timer;
  32.     uint32 MortalWound_Timer;
  33.     uint32 Retaliation_Timer;
  34.     uint32 Holy_Light_Timer;
  35.     uint32 Lay_of_Hands_Timer;
  36.  
  37.     bool HasTaunted;
  38.     bool YelledForHeal;
  39.  
  40.     void Reset()
  41.     {
  42.         Surge_Timer = 5000;
  43.         MortalWound_Timer = 4000;
  44.         Retaliation_Timer = 0;
  45.         Holy_Light_Timer = 30000;
  46.         Lay_of_Hands_Timer = 900000;
  47.  
  48.         HasTaunted = false;
  49.         YelledForHeal = false;
  50.  
  51.         if (pInstance)
  52.             pInstance->SetData(NULL, NOT_STARTED);
  53.     }
  54.  
  55.     void EnterCombat(Unit *who)
  56.     {
  57.         switch(rand()%3)
  58.         {
  59.             case 0: DoScriptText(SAY_AGGRO_1, me); break;
  60.             case 1: DoScriptText(SAY_AGGRO_2, me); break;
  61.             case 2: DoScriptText(SAY_AGGRO_3, me); break;
  62.         }
  63.  
  64.         if (pInstance)
  65.             pInstance->SetData(NULL, IN_PROGRESS);
  66.     }
  67.  
  68.     void MoveInLineOfSight(Unit* who)
  69.     {
  70.         if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor (me))
  71.         {
  72.             if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
  73.                 return;
  74.  
  75.             float attackRadius = me->GetAttackDistance(who);
  76.             if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
  77.             {
  78.                 //who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
  79.                 AttackStart(who);
  80.             }
  81.             else if (!HasTaunted && me->IsWithinDistInMap(who, 60.0f))
  82.             {
  83.                 DoScriptText(SAY_TAUNT, me);
  84.                 HasTaunted = true;
  85.             }
  86.         }
  87.     }
  88.  
  89.     void KilledUnit(Unit* victim)
  90.     {
  91.         switch(rand()%2)
  92.         {
  93.             case 0: DoScriptText(SAY_KILL_1, me); break;
  94.             case 1: DoScriptText(SAY_KILL_2, me); break;
  95.         }
  96.     }
  97.  
  98.     void JustDied(Unit* Killer)
  99.     {
  100.         DoScriptText(SAY_DIE, me);
  101.  
  102.         if (pInstance)
  103.             pInstance->SetData(NULL, DONE);
  104.     }
  105.  
  106.     void UpdateAI(const uint32 diff)
  107.     {
  108.         if (!UpdateVictim())
  109.             return;
  110.  
  111.         if (MortalWound_Timer <= diff)
  112.         {
  113.             DoCast(me->getVictim(),HeroicMode ? H_SPELL_MORTAL_WOUND : SPELL_MORTAL_WOUND);
  114.             MortalWound_Timer = 5000+rand()%8000;
  115.         } else MortalWound_Timer -= diff;
  116.  
  117.         if (Surge_Timer <= diff)
  118.         {
  119.             DoScriptText(SAY_SURGE, me);
  120.  
  121.             if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
  122.                 DoCast(pTarget,SPELL_SURGE);
  123.  
  124.             Surge_Timer = 5000+rand()%8000;
  125.         } else Surge_Timer -= diff;
  126.  
  127.         if ((me->GetHealth()*100) / me->GetMaxHealth() < 20)
  128.         {
  129.             if (Retaliation_Timer <= diff)
  130.             {
  131.                 DoCast(me,SPELL_RETALIATION);
  132.                 Retaliation_Timer = 30000;
  133.             } else Retaliation_Timer -= diff;
  134.         }
  135.  
  136.  
  137.         if ((me->GetHealth() * 100) / me->GetMaxHealth() < 10)
  138.         {
  139.             if (Holy_Light_Timer <= diff)
  140.             {
  141.                 DoCast(me, SPELL_HOLY_LIGHT);
  142.                 Holy_Light_Timer = 30000;
  143.             }
  144.             else Holy_Light_Timer -= diff;
  145.         }
  146.  
  147.         if ((me->GetHealth() * 100) / me->GetMaxHealth() < 90)
  148.         {
  149.             if (Lay_of_Hands_Timer <= diff)
  150.             {
  151.                 DoCast(me, SPELL_LAY_OF_HANDS);
  152.                 Lay_of_Hands_Timer = 600000;
  153.             }
  154.             else Lay_of_Hands_Timer -= diff;
  155.         }
  156.  
  157.  
  158.  
  159.         if (!YelledForHeal)
  160.         {
  161.             if ((me->GetHealth()*100) / me->GetMaxHealth() < 40)
  162.             {
  163.                 DoScriptText(SAY_HEAL, me);
  164.                 YelledForHeal = true;
  165.             }
  166.         }
  167.  
  168.         DoMeleeAttackIfReady();
  169.     }
  170. };
  171.  
  172. CreatureAI* GetAI_boss_betrayer_AI(Creature* pCreature)
  173. {
  174.     return new boss_betrayer_AI (pCreature);
  175. }
  176.  
  177. void AddSC_boss_betrayer()
  178. {
  179.     Script *newscript;
  180.     newscript = new Script;
  181.     newscript->Name = "betrayer_boss";
  182.     newscript->GetAI = &GetAI_boss_betrayer_AI;
  183.     newscript->RegisterSelf();
  184. }

 

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...