[code=cpp]
/* Ce boss est un boss d'explication pour Zone-Emu créé par Mash6
* Vous pouvez le partager ou vous le souhaitez, inutil de me demander mon accord
* Tous les commentaires sont en français.
* Tout ceci est a but éducatif, ce boss sans modifications
* ne fait presque rien, il est inutil sur un serveur en le laissant brut.
* Pensez bien a modifier tout les "votreboss" par le nom de votre boss
* Aucun impact en jeu, mais bien plus propre.
*/
#include "precompiled.h"
enum // Enumération des définitions de spells et de textes
{
#define SAY_AGGRO "Je dit ça pour mon aggro"
#define SAY_DEATH "Je dit ça a ma mort"
#define SAY_1 "Je dit ça quand j'ai 50% de vie"
SPELL_01 = 42914, // ID que j'ai choisis, a modif si besoin est.
SPELL_02 = 0, // A remplacer par un id de spell, j'ai pas d'idée la.
};
struct MANGOS_DLL_DECL votrebossAI : public ScriptedAI
{
votrebossAI(Creature* pCreature) : ScriptedAI(pCreature)
{
Reset();
}
//Définition des Timers et bools
uint32 Random_Timer;
uint32 Spell1_Timer;
uint32 Spell2_Timer;
bool SPELL1;
void Reset() // Appelé a la création du boss (A l'entrée dans l'instance par le player si instance)
{
// Timers au départ (Temps en millisecondes)
Random_Timer = 15*1000;
Spell1_Timer = 10*1000;
Spell2_Timer = 5*1000;
// Booleans
SPELL1 = false;
}
void Aggro(Unit *who) // Fait des qu'on aggro
{
m_creature->MonsterSay(SAY_AGGRO, LANG_UNIVERSAL, NULL); // Dit la phrase "Say_Aggro"
}
void JustDied(Unit *victim) // Appelé a la mort du boss
{
m_creature->MonsterYell(SAY_DEATH, LANG_UNIVERSAL, NULL); // Dit le texte "SAY_DEATH"
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) // Fonction pour dire de ne pas lancer le combat (tout ce qui ce passe après l'aggro)
return; // sans avoir de cible. NE RIEN METTRE AVANT !!!
if ((m_creature->GetHealth() * 100 / m_creature->GetMaxHealth() <= 50) && !SPELL1) // Si la créature a 50% ou mons de vie. (ne rien changer sauf le chiffre 50 et le SPELL1 qui correspond
{ // Au boolean qui est dans cette fontion. (Mis a true 3 lignes en dessous)
m_creature->MonsterYell(SAY_1, LANG_UNIVERSAL, NULL); // Dit "SAY_1"
DoCast(m_creature, SPELL_01); // Cast le sort 1
SPELL1 = true; // Défini le fait qu'on ne le castera pas en continue. (Uniquement quand on utilise les % de vie pour eviter qu'il se cast en chaine du fait qu'on dit
} // qu'on cast ce sort si la créature a 50% ou moins, du coup, il continuerais jusqu'a ce que le player meurt ou bien que le boss meurt.)
if (Random_Timer < diff)
{
switch(urand(0, 1)) // Le chiffre 0 correspond au N° de la 1ere case,le 1 au N° de la derniere
{
case 0: DoCastSpellIfCan(m_creature->getVictim(), SPELL_01); break; // Cast 1 si 1 est choisis aléatoirement
case 1: DoCastSpellIfCan(m_creature->getVictim(), SPELL_02); break; // Cast 2 si 2 est choisis aléatoirement
}
Random_Timer = 15*1000; // Remet le timer random a 15sec
}else Random_Timer -= diff;
if (Spell1_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_01); // Cast Spell1
Spell1_Timer = 10*1000; // Remet le timer Spell1 a 10sec
}else Spell1_Timer -= diff;
if (Spell2_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_02); // Cast Spell2
Spell2_Timer = 5*1000; // Remet le timer Spell1 a 5sec
}else Spell2_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_votreboss(Creature* pCreature)
{
return new votrebossAI(pCreature);
}
void AddSC_votreboss()
{
Script *newscript;
newscript = new Script;
newscript->Name = "votreboss";
newscript->GetAI = &GetAI_votreboss;
newscript->RegisterSelf();
}[/code]
tu parle de ça ?