Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Pensez à voter pour le serveur.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

Le Deal du moment : -39%
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
Voir le deal
399 €

Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

[En cours] Image Miroir (Mage)

4 participants

Aller en bas  Message [Page 1 sur 1]

1En cours [En cours] Image Miroir (Mage) Ven 10 Déc - 9:24

Saphiria

Saphiria
Admin
Admin

Le sort Image Miroir du mage bug : à l'heure actuelle le fait d'activer le sort ne produit aucune action...

J'ai résolu une grande partie du bug dans le core (les images pop, envoient des sorts, ...) mais j'ai un problème gênant : lorsque j'utilise le sort en ville à proximité de PNJ amicaux, ceux ci ont leur DisplayId changés en celui du caster sans textures, perdent leurs capacités (plus de dialogues par exemple) et suivent indéfiniment le caster... (c'est plutôt marrant mais bon).

Donc pour le moment, encore en cours de debug pour cette partie.



Dernière édition par Saphiria le Mer 22 Juin - 11:56, édité 1 fois

http://opusdei-serveur.net

Lux

Lux
Admin
Admin

bravo pour le gros debug du sort qui a été effectué

http://www.opusdei-forum.net

Saphiria

Saphiria
Admin
Admin

Merci Smile

Mais bon le bug qui reste est encore assez bloquant, je me vois pas permettre l'utilisation de ce sort tant qu'il sera présent.

http://opusdei-serveur.net

pomdeterre

pomdeterre
MJ
MJ

j'avoue :X

Root


Petit dernier
Petit dernier

Clone l'armure du joueurs et cast les spells

Code C++

Code:

enum MirrorImageSpells
{
    SPELL_CLONE_CASTER    = 45204,
    SPELL_CLONE_CASTER_1  = 69837,
    SPELL_CLONE_THREAT    = 58838,
    SPELL_FIREBLAST      = 59637,
    SPELL_FROSTBOLT      = 59638,
    SPELL_FROSTSHIELD    = 43008,
    SPELL_FIRESHIELD      = 43046,
    SPELL_ICEBLOCK        = 65802,
    SPELL_ICERING        = 42917,
};


struct MANGOS_DLL_DECL npc_mirror_imageAI : public ScriptedAI
{
    npc_mirror_imageAI(Creature* pCreature) : ScriptedAI(pCreature) {Reset();}


    uint32 m_uiFrostboltTimer;
    uint32 m_uiFrostringTimer;
    uint32 m_uiFireblastTimer;
    bool inCombat;
    Unit *owner;
    float angle;
    bool blocked;
    bool movement;


    void Reset()
    {
        owner = m_creature->GetOwner();
        if (!owner)
            return;


        m_creature->SetUInt32Value(UNIT_FIELD_BYTES_0, 2048);
        m_creature->SetUInt32Value(UNIT_FIELD_BYTES_2,owner->GetUInt32Value(UNIT_FIELD_BYTES_2));
        m_creature->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
        m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
        m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 1.5f);


        m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID,  owner->GetUInt32Value(PLAYER_VISIBLE_ITEM_16_ENTRYID));
        m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, owner->GetUInt32Value(PLAYER_VISIBLE_ITEM_17_ENTRYID));
        m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+2, owner->GetUInt32Value(PLAYER_VISIBLE_ITEM_18_ENTRYID));
        m_creature->SetSpeedRate(MOVE_RUN, owner->GetSpeedRate(MOVE_RUN), true);


        m_uiFrostboltTimer = urand(0,3000);
        m_uiFrostringTimer = urand(2000,6000);
        m_uiFireblastTimer = urand(0,3000);
        inCombat = false;
        blocked = false;
        movement = false;




        if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW))
        {
            angle = m_creature->GetAngle(owner);
            m_creature->GetMotionMaster()->Clear(false);
            m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST + 3.0f, angle);
        }


        if(owner->IsPvP())
            m_creature->SetPvP(true);
        if(owner->IsFFAPvP())
            m_creature->SetFFAPvP(true);
    }


    void AttackStart(Unit* pWho)
    {
      if (!pWho) return;


      if (m_creature->Attack(pWho, true))
        {
            if (owner)
                m_creature->CastSpell(m_creature, SPELL_CLONE_THREAT, true, NULL, NULL, owner->GetGUID());
            m_creature->clearUnitState(UNIT_STAT_FOLLOW);
            m_creature->SetInCombatWith(pWho);
            pWho->SetInCombatWith(m_creature);
            m_creature->AddThreat(pWho, 100.0f);
            DoStartMovement(pWho, 30.0f);
            SetCombatMovement(true);
            inCombat = true;
        }
    }


    void EnterEvadeMode()
    {
    if (m_creature->IsInEvadeMode() || !m_creature->isAlive())
          return;


        inCombat = false;


        m_creature->AttackStop();
        m_creature->CombatStop(true);
        if (owner && !m_creature->hasUnitState(UNIT_STAT_FOLLOW))
        {
            angle = m_creature->GetAngle(owner);
            m_creature->GetMotionMaster()->Clear(false);
            m_creature->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST + 3.0f,angle);
        }
    }


    void UpdateAI(const uint32 diff)
    {
        if (!owner || !owner->isAlive())
            m_creature->ForcedDespawn();


        if (owner && !m_creature->HasAura(SPELL_CLONE_CASTER))
            m_creature->CastSpell(m_creature, SPELL_CLONE_CASTER, true, NULL, NULL, owner->GetGUID());


        if (owner && !m_creature->HasAura(SPELL_CLONE_CASTER_1))
            m_creature->CastSpell(m_creature, SPELL_CLONE_CASTER_1, true, NULL, NULL, owner->GetGUID());


        if (owner && owner->HasAura(SPELL_FROSTSHIELD) && !m_creature->HasAura(SPELL_FROSTSHIELD))
            m_creature->CastSpell(m_creature, SPELL_FROSTSHIELD, false);


        if (owner && owner->HasAura(SPELL_FIRESHIELD) && !m_creature->HasAura(SPELL_FIRESHIELD))
            m_creature->CastSpell(m_creature, SPELL_FIRESHIELD, false);


        if (!m_creature->getVictim())
            if (owner && owner->getVictim())
                AttackStart(owner->getVictim());


        if (m_creature->getVictim() && m_creature->getVictim() != owner->getVictim())
            AttackStart(owner->getVictim());


        if (inCombat && !m_creature->getVictim())
        {
            EnterEvadeMode();
            return;
        }


        if (!inCombat)
            return;


        if (m_creature->IsWithinDistInMap(m_creature->getVictim(),30.0f))
        {
            movement = false;
            if (m_uiFrostboltTimer <= diff)
            {
                DoCastSpellIfCan(m_creature->getVictim(),SPELL_FROSTBOLT);
                m_uiFrostboltTimer = urand(1000,6000);
            } else m_uiFrostboltTimer -= diff;


            if (m_uiFireblastTimer <= diff)
            {
                DoCastSpellIfCan(m_creature->getVictim(),SPELL_FIREBLAST);
                m_uiFireblastTimer = urand(1000,6000);
            } else m_uiFireblastTimer -= diff;


            if (m_uiFrostringTimer <= diff && m_creature->IsWithinDistInMap(m_creature->getVictim(),5.0f))
            {
                DoCastSpellIfCan(m_creature->getVictim(),SPELL_ICERING);
                m_uiFrostringTimer = urand(4000,8000);
            } else m_uiFrostringTimer -= diff;


            if (!blocked && m_creature->GetHealthPercent() < 10.0f)
            {
                DoCastSpellIfCan(m_creature,SPELL_ICEBLOCK);
                blocked = true;
            }
        }
        else
            if (!movement)
            {
                DoStartMovement(m_creature->getVictim(), 20.0f);
                movement = true;
            }


    }
};
;

Saphiria

Saphiria
Admin
Admin

http://opusdei-serveur.net

Contenu sponsorisé



Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum