Condition C++ "Si la cible est en train de caster"
Bonjour,

Je souhaiterais dans un script C++ faire en sorte que mon mob cast un coup de pied si le joueur est en train de caster un spell, seulement, je ne trouve pas cette fameuse condition Pinch

Je précise que je sais faire caster mon mob, je bute juste sur la condition "si le joueurs est en train de caster un spell"

Quelqu'un saurait me dire comment s'exprime cette condition svp?

Merci d'avance =)
Bonjour,

Je n'utilise pas MaNGOS, mais regarde peut-être du côté de :
[code=cpp]
if(pPlayer->HasUnitState(UNIT_STAT_CASTING))
// Le joueur est en train de caster un spell
[/code]

Bonne journée,

EDIT: Oups, la ligne que je donne est pour Trinity, je regarde s'il y a un truc similaire pour MaNGOS Clin
Tout d'abord, merci pour cette réponse rapide (et un +1) Smile

J'ai fait quelques recherches d'après ce que vous m'avez dit et je crois avoir trouvé ma solution : le UNIT_STAT_CASTING n'existe pas chez mangos (du moins dans le mienHihi) et est visiblement remplacé par IsNonMeleeSpellCasted qui prend pour valeur true ou false.

Ce qui doit donner
Code :
if(pPlayer->IsNonMeleeSpellCasted(true))
ou
if(!pPlayer->IsNonMeleeSpellCasted(false))
    // Le joueur est en train de caster un spell
Code :
if(pPlayer->IsNonMeleeSpellCasted(false))
    // Le joueur ne cast pas de spell

Je test ça et je confirme / infirme.
(25-05-2011 15:12)elihos a écrit :  Tout d'abord, merci pour cette réponse rapide (et un +1) Smile

Merci !

J'ai regardé un peu cette fonction IsNonMeleeSpellCasted et le paramètre qu'elle prends (true ou false) est "withDelayed".
Par contre je ne comprends pas bien la notion de délai dans ce cas, est-ce qu'il faudrait savoir si c'est un sort avec délai ou pas ?

Essaie une fois avec true et une fois avec false pour voir ce que cela donne Clin

Pour les personnes que ça intéresse, voici la fonction complète :
[code=cpp]
bool Unit::IsNonMeleeSpellCasted(bool withDelayed, bool skipChanneled, bool skipAutorepeat) const
{
// We don't do loop here to explicitly show that melee spell is excluded.
// Maybe later some special spells will be excluded too.

// generic spells are casted when they are not finished and not delayed
if ( m_currentSpells[CURRENT_GENERIC_SPELL] &&
(m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_FINISHED) &&
(withDelayed || m_currentSpells[CURRENT_GENERIC_SPELL]->getState() != SPELL_STATE_DELAYED) )
return(true);

// channeled spells may be delayed, but they are still considered casted
else if ( !skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] &&
(m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED) )
return(true);

// autorepeat spells may be finished or delayed, but they are still considered casted
else if ( !skipAutorepeat && m_currentSpells[CURRENT_AUTOREPEAT_SPELL] )
return(true);

return(false);
}
[/code]
Attention tout de même à cette fonction qui vaut pour TOUS les sorts qui ne sont pas des sorts de mêlée. (genre quand tu fabrique une popo tu as des spells canalisés )(ChannelledSpells) et je ne sais pas si dans ce cas là le test marchera !
Oui, je n'ai aucune idée comme cela va réagir. Autrement la deuxième solution est d’implémenter "UNIT_STAT_CASTING" (ou alors il existe un autre équivalent sous MaNGOS).
Après test, utilisé comme ça :
Code :
if (m_creature->getVictim()->IsNonMeleeSpellCasted(false))
    {
        DoCastSpellIfCan(m_creature->getVictim(), SPELL_KICK);
    }

ça marche nickel Smile

Merci à vous pour vos indications Smile

Retourner en haut Accueil