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


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

[En cours] Cercle Démoniaque: invocation (Démoniste)

4 participants

Aller en bas  Message [Page 1 sur 1]

epaulet


Petit dernier
Petit dernier

le fait de caster ce sort ne fait rien, suelement descendre le mana ^^

Root


Petit dernier
Petit dernier

Lux

Lux
Admin
Admin

Merci, Saphi en sera ravi Wink (même si le temps lui manque un peu)

http://www.opusdei-forum.net

Saphiria

Saphiria
Admin
Admin

Lien mort.

Patch en cours de test.

Code:

diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 5e1e430..b8d6b45 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2413,6 +2413,11 @@ void Spell::SetTargetMap(SpellEffectIndex effIndex, uint32 targetMode, UnitList&
        {
            // add here custom effects that need default target.
            // FOR EVERY TARGET TYPE THERE IS A DIFFERENT FILL!!
+            if (m_spellInfo->SpellFamilyFlags2 & UI64LIT (0x00000020) && m_spellInfo->SpellIconID == 3217)
+            {
+                targetUnitMap.push_back(m_caster);
+                break;
+            }
            switch(m_spellInfo->Effect[effIndex])
            {
                case SPELL_EFFECT_DUMMY:
@@ -4259,8 +4264,11 @@ SpellCastResult Spell::CheckCast(bool strict)
        return SPELL_FAILED_CASTER_AURASTATE;
 
    // Caster aura req check if need
-    if(m_spellInfo->casterAuraSpell && !m_caster->HasAura(m_spellInfo->casterAuraSpell))
-        return SPELL_FAILED_CASTER_AURASTATE;
+    if(m_spellInfo->casterAuraSpell
+      && sSpellStore.LookupEntry(m_spellInfo->casterAuraSpell)
+      && !m_caster->HasAura(m_spellInfo->casterAuraSpell))
+          return SPELL_FAILED_CASTER_AURASTATE;
+
    if(m_spellInfo->excludeCasterAuraSpell)
    {
        // Special cases of non existing auras handling
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index a6dceb9..81296c7 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -4338,6 +4338,19 @@ void Aura::HandleModMechanicImmunity(bool apply, bool /*Real*/)
 
    target->ApplySpellImmune(GetId(),IMMUNITY_MECHANIC,misc,apply);
 
+    // Demonic Circle
+    if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && GetSpellProto()->SpellIconID == 3221)
+    {
+        if (target->GetTypeId() != TYPEID_PLAYER)
+            return;
+        if (apply)
+        {
+            GameObject* obj = target->GetGameObject(48018);
+            if (obj)
+                if (target->IsWithinDist(obj,GetSpellMaxRange(sSpellRangeStore.LookupEntry(GetSpellProto()->rangeIndex))))
+                    ((Player*)target)->TeleportTo(obj->GetMapId(),obj->GetPositionX(),obj->GetPositionY(),obj->GetPositionZ(),obj->GetOrientation());
+        }
+    }
    // Bestial Wrath
    if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_HUNTER && GetSpellProto()->SpellIconID == 1680)
    {
@@ -4619,7 +4632,17 @@ void Aura::HandleAuraPeriodicDummy(bool apply, bool Real)
        case SPELLFAMILY_HUNTER:
        {
            Unit* caster = GetCaster();
-
+            switch (spell->Id)
+            {
+                case 48018:
+                    if (apply)
+                        GetHolder()->SendFakeAuraUpdate(62388,false);
+                    else
+                    {
+                        target->RemoveGameObject(spell->Id,true);
+                        GetHolder()->SendFakeAuraUpdate(62388,true);
+                    }
+            }
            // Explosive Shot
            if (apply && !loading && caster)
                m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 14 / 100);
@@ -7262,6 +7285,20 @@ void Aura::PeriodicDummyTick()
            }
            break;
        }
+        case SPELLFAMILY_WARLOCK:
+            switch (spell->Id)
+            {
+                case 48018:
+                    GameObject* obj = target->GetGameObject(spell->Id);
+                    if (!obj) return;
+                    // We must take a range of teleport spell, not summon.
+                    const SpellEntry* goToCircleSpell = sSpellStore.LookupEntry(48020);
+                    if (target->IsWithinDist(obj,GetSpellMaxRange(sSpellRangeStore.LookupEntry(goToCircleSpell->rangeIndex))))
+                        GetHolder()->SendFakeAuraUpdate(62388,false);
+                    else
+                        GetHolder()->SendFakeAuraUpdate(62388,true);
+            }
+            break;
        case SPELLFAMILY_ROGUE:
        {
            switch (spell->Id)
@@ -8145,6 +8182,52 @@ bool SpellAuraHolder::IsNeedVisibleSlot(Unit const* caster) const
    return !m_isPassive || totemAura || HasAreaAuraEffect(m_spellProto);
 }
 
+void SpellAuraHolder::SendFakeAuraUpdate(uint32 auraId, bool remove)
+{
+    WorldPacket data(SMSG_AURA_UPDATE);
+    data << m_target->GetPackGUID();
+    data << uint8(64);
+    data << uint32(remove ? 0 : auraId);
+
+    if(remove)
+    {
+        m_target->SendMessageToSet(&data, true);
+        return;
+    }
+
+    uint8 auraFlags = GetAuraFlags();
+    data << uint8(auraFlags);
+    data << uint8(GetAuraLevel());
+    data << uint8(m_procCharges ? m_procCharges : m_stackAmount);
+
+    if(!(auraFlags & AFLAG_NOT_CASTER))
+    {
+        data << uint8(0);                                  // pguid
+    }
+
+    if(auraFlags & AFLAG_DURATION)
+    {
+        uint32 max_duration = 0;
+        uint32 duration = 0;
+        for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i)
+        {
+            if (Aura *aura = m_auras[i])
+            {
+                if (uint32(aura->GetAuraMaxDuration()) > max_duration)
+                {
+                    max_duration = aura->GetAuraMaxDuration();
+                    duration = aura->GetAuraDuration();
+                }
+            }
+        }
+
+        data << uint32(max_duration);
+        data << uint32(duration);
+    }
+
+    m_target->SendMessageToSet(&data, true);
+}
+
 void SpellAuraHolder::SendAuraUpdate(bool remove)
 {
    WorldPacket data(SMSG_AURA_UPDATE);
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h
index 4288a34..a689665 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -54,6 +54,7 @@ class MANGOS_DLL_SPEC SpellAuraHolder
        void SendAuraUpdate(bool remove);
        void HandleSpellSpecificBoosts(bool apply);
        void CleanupTriggeredSpells();
+    void SendFakeAuraUpdate(uint32 auraId, bool remove);
 
        void setDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; }
        DiminishingGroup getDiminishGroup() const { return m_AuraDRGroup; }
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 3ad5b93..31a50f3 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -7039,7 +7039,16 @@ void Spell::EffectSummonObject(SpellEffectIndex eff_idx)
    }
    // Summon in random point all other units if location present
    else
-        m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
+    {
+        if(m_spellInfo->Id == 48018)
+        {
+            x = m_caster->GetPositionX();
+            y = m_caster->GetPositionY();
+            z = m_caster->GetPositionZ();
+        }
+        else
+            m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
+    }
 
    Map *map = m_caster->GetMap();
    if(!pGameObj->Create(sObjectMgr.GenerateLowGuid(HIGHGUID_GAMEOBJECT), go_id, map,

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