Faire pop des mob en c++
Salut salut Hihi

j'ai un petit problème, j'avais suivie le tuto de mash6 pour savoir comment scripter un boss 'jusque la pas de soucis) et j'avais poster une demande d'aide ou je demander comment faire pour faire apparaitre des mob a un endroit précis et les faire bouger vers une position de la maps. On m'avais répondu mais hélas le forum c'est mis a jours et je ne retrouve plus le topic, il a du être delete ... si quelqu'un pourrait me redonner la méthode pour faire pop des mob sa serait gentil



Merci d'avance
[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 ?
oui mais dedans il n'y a pas la fonction pour faire pop un mob Hihi
[code=cpp]
bool Summon2;

Summon2 = false;


if ((m_creature->GetHealth() * 100 / m_creature->GetMaxHealth() <= 50) && !Summon2)
{
Creature* pSummon2 =
m_creature->SummonCreature(57199, 2326.541992, 1503.049927, 127.834236, 4.483571, TEMPSUMMON_CORPSE_DESPAWN, 5000);
pSummon2->GetMotionMaster()->MovePoint(2, 2298.482422, 1484.880127, 128.362396);
Summon2 = true;
}
[/code]
Aahh cache google...<3
Il y à fort longtemps j'avais utilisé ceci (pour avoir commencé un morpion ig Hihi):
"pCreature->SummonCreature(6000256, 1882.91, -1261.36, 94.5628, 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,180000); "
Je ne sais pas si cela fonctionne encore ...
Merci bien ! je vais tester et je vous tiens au courant !
Édition :
Merci a vous, Cependant encore un petit problème !!! enfaite la position de la map est négative ... et quand je met un "-" dans le code cela me fait des erreurs ;s

une petite idée ?
Les variables de cette fonctions sont des float donc il suffit simplement de mettre un f a la fin de tes coordonée comme ça :

Code :
-0.454f
le "-" devant définie la position moins ou c'est le f
C'est le -, le f c'est pour dire que c'est un float et non un double

Retourner en haut Accueil