Jump to content

Mirror Image


Recommended Posts

I'm using this

Mirror image patch for 9589+ http://filebeam.com/f378031a38fd9d7f553ae3dadd19a5a3

based off of the patch by przemratajczak

and

It should only Mangos and everything is working?

Does not require present in Scriptdev2 ???

missing...

diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp

index 58384f4..371a634 100644

--- a/src/game/SpellEffects.cpp

+++ b/src/game/SpellEffects.cpp

-2068,6 +2068,15 @@ void Spell::EffectTriggerSpell(uint32 effIndex)

// special cases

switch(triggered_spell_id)

{

+ // Mirror Image

+ case 58832:

+ {

+ // Glyph of Mirror Image

+ if (m_caster->HasAura(63093))

+ m_caster->CastSpell(m_caster, 65047, true); // Mirror Image

+

+ break;

+ }

// Vanish (not exist)

case 18461:

{

with the AI provided by przemratajczak.

Link to comment
Share on other sites

  • Replies 106
  • Created
  • Last Reply

Top Posters In This Topic

../../../src/game/SkillHandler.cpp: In member function âvoid WorldSession::HandleMirrorImageDataRequest(WorldPa cket&)â:

../../../src/game/SkillHandler.cpp:100: error: âObjectAccessorâ has not been declared

../../../src/game/SkillHandler.cpp:105: error: âObjectAccessorâ has not been declared

Why SkillHandler.cpp ? The patch not affect SkillHandler.cpp but rather SpellHandler.cpp, has you patch manualy ?

Link to comment
Share on other sites

No, I just added sp bonus to Mirrors spells, set them faction 35 in db and make them cast mirror image aura at Reset() in SD2 script, cause in patch is aura handler and all things needed, but mirror image does not cast that aura on himself :)

Link to comment
Share on other sites

Compile error in the SD2 AI part...

1>..\\scripts\\world\\npcs_special.cpp(2193) : error C2027: use of undefined type 'Spell'
1>        c:\\sources\\hellscreamcore - kopie\\src\\game\\Unit.h(295) : see declaration of 'Spell'

which also causes

1>..\\scripts\\world\\npcs_special.cpp(2193) : error C2227: left of '->m_targets' must point to class/struct/union/generic type
1>..\\scripts\\world\\npcs_special.cpp(2193) : error C2228: left of '.getUnitTargetGUID' must have class/struct/union

the piece of code in which this occurs is

       if (Spell* pSpell = pOwner->GetCurrentSpell(CURRENT_GENERIC_SPELL))
           targetGUID = pSpell->m_targets.getUnitTargetGUID();

MaNGOS rev = 9788

Anyone an idea on how to solve this?

NVM, have to include spell.h

sorry to bother you guys! :cool:

Link to comment
Share on other sites

  • 4 weeks later...
  • 2 weeks later...
any fix to make Images work 100% ? I mean their attack even in duel on the same faction?

perhaps something like

if (creator->duel)
   pImmage->AI()->AttackStart(victim);

in SpellAuras.cpp ( void Aura::HandleAuraInitializeImages(bool Apply, bool Real) ) ??

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...
  • 3 weeks later...
  • 1 month later...
  • 2 weeks later...
  • 2 weeks later...

I managed to get it working on [10598]

diff --git a/sql/CUSTOM SQL PATCH/mangos_mirror_image.sql b/sql/CUSTOM SQL PATCH/mangos_mirror_image.sql
new file mode 100644
index 0000000..308c94a
--- /dev/null
+++ b/sql/CUSTOM SQL PATCH/mangos_mirror_image.sql    
@@ -0,0 +1,15 @@
+-- Mirror Immage stats
+UPDATE creature_template SET
+speed_walk = 2.5, modelid_1 = 11686, modelid_2 = 11686, minlevel = 80, maxlevel = 80, AIName = 'EventAI', ScriptName = 'mob_mirror_image' WHERE entry = 31216; 
+
+-- Mirror Image AI scripts
+DELETE FROM creature_ai_scripts WHERE creature_id = 31216; 
+INSERT INTO creature_ai_scripts VALUES 
+(3121601,31216,4,0,100,6, 0,0,0,0, 29,10,0,0, 20,0,0,0, 0,0,0,0, 'Mirror Immage - ranged movement when in combat'), 
+(3121602,31216,0,0,100,7, 1000,2000,4000,5000, 11,59638,1,0, 0,0,0,0, 0,0,0,0, 'Mirror Immage - frostbolt'),
+(3121603,31216,0,0,100,7, 1000,2000,4000,5000, 11,42802,1,0, 0,0,0,0, 0,0,0,0, 'Mirror Immage - fireball');  
+
+DELETE FROM spell_bonus_data WHERE entry IN (59637,59638);
+INSERT INTO spell_bonus_data VALUES
+(59637, 0.10, 0, 0, 'Mirror Image - Fire Blast'),
+(59638, 0.05, 0, 0, 'Mirror Image - Frostbolt');
\\ No newline at end of file
diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp
index 4f0fbe0..d6c3e4c 100644
--- a/src/game/Opcodes.cpp
+++ b/src/game/Opcodes.cpp
@@ -1051,8 +1051,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
    /*0x3FE*/ { "MSG_GUILD_BANK_MONEY_WITHDRAWN",               STATUS_LOGGEDIN, &WorldSession::HandleGuildBankMoneyWithdrawn   },
    /*0x3FF*/ { "MSG_GUILD_EVENT_LOG_QUERY",                    STATUS_LOGGEDIN, &WorldSession::HandleGuildEventLogQueryOpcode  },
    /*0x400*/ { "CMSG_MAELSTROM_RENAME_GUILD",                  STATUS_NEVER,    &WorldSession::Handle_NULL                     },
-    /*0x401*/ { "CMSG_GET_MIRRORIMAGE_DATA",                    STATUS_NEVER,    &WorldSession::Handle_NULL                     },
-    /*0x402*/ { "SMSG_MIRRORIMAGE_DATA",                        STATUS_NEVER,    &WorldSession::Handle_ServerSide               },
+    /*0x401*/ { "CMSG_GET_MIRRORIMAGE_DATA",                    STATUS_LOGGEDIN, &WorldSession::HandleMirrorImageDataRequest    },
+    /*0x402*/ { "SMSG_MIRRORIMAGE_DATA",                        STATUS_LOGGEDIN, &WorldSession::Handle_ServerSide               },
    /*0x403*/ { "SMSG_FORCE_DISPLAY_UPDATE",                    STATUS_NEVER,    &WorldSession::Handle_ServerSide               },
    /*0x404*/ { "SMSG_SPELL_CHANCE_RESIST_PUSHBACK",            STATUS_NEVER,    &WorldSession::Handle_ServerSide               },
    /*0x405*/ { "CMSG_IGNORE_DIMINISHING_RETURNS_CHEAT",        STATUS_NEVER,    &WorldSession::Handle_NULL                     },
diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h
index 8524a73..50479e2 100644
--- a/src/game/SpellAuraDefines.h
+++ b/src/game/SpellAuraDefines.h
@@ -282,7 +282,7 @@ enum AuraType
    SPELL_AURA_COMPREHEND_LANGUAGE = 244,
    SPELL_AURA_MOD_DURATION_OF_MAGIC_EFFECTS = 245,
    SPELL_AURA_MOD_DURATION_OF_EFFECTS_BY_DISPEL = 246,
-    SPELL_AURA_247 = 247,
+    SPELL_AURA_CLONE_CASTER = 247,
    SPELL_AURA_MOD_COMBAT_RESULT_CHANCE = 248,
    SPELL_AURA_CONVERT_RUNE = 249,
    SPELL_AURA_MOD_INCREASE_HEALTH_2 = 250,
@@ -314,7 +314,7 @@ enum AuraType
    SPELL_AURA_276 = 276,                                   // Only "Test Mod Damage % Mechanic" spell, possible mod damage done
    SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277,
    SPELL_AURA_MOD_DISARM_RANGED = 278,
-    SPELL_AURA_279 = 279,
+    SPELL_AURA_INITIALIZE_IMAGES = 279,
    SPELL_AURA_MOD_TARGET_ARMOR_PCT = 280,
    SPELL_AURA_MOD_HONOR_GAIN = 281,
    SPELL_AURA_MOD_BASE_HEALTH_PCT = 282,
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 29edbc9..356931f 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -297,7 +297,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
    &Aura::HandleComprehendLanguage,                        //244 SPELL_AURA_COMPREHEND_LANGUAGE
    &Aura::HandleNoImmediateEffect,                         //245 SPELL_AURA_MOD_DURATION_OF_MAGIC_EFFECTS     implemented in Unit::CalculateSpellDuration
    &Aura::HandleNoImmediateEffect,                         //246 SPELL_AURA_MOD_DURATION_OF_EFFECTS_BY_DISPEL implemented in Unit::CalculateSpellDuration
-    &Aura::HandleNULL,                                      //247 target to become a clone of the caster
+    &Aura::HandleAuraCloneCaster,                           //247 SPELL_AURA_CLONE_CASTER
    &Aura::HandleNoImmediateEffect,                         //248 SPELL_AURA_MOD_COMBAT_RESULT_CHANCE         implemented in Unit::RollMeleeOutcomeAgainst
    &Aura::HandleAuraConvertRune,                           //249 SPELL_AURA_CONVERT_RUNE
    &Aura::HandleAuraModIncreaseHealth,                     //250 SPELL_AURA_MOD_INCREASE_HEALTH_2
@@ -329,7 +329,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
    &Aura::HandleNULL,                                      //276 mod damage % mechanic?
    &Aura::HandleNoImmediateEffect,                         //277 SPELL_AURA_MOD_MAX_AFFECTED_TARGETS Use SpellClassMask for spell select
    &Aura::HandleNULL,                                      //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon
-    &Aura::HandleNULL,                                      //279 visual effects? 58836 and 57507
+    &Aura::HandleAuraInitializeImages,                      //279 SPELL_AURA_INITIALIZE_IMAGES
    &Aura::HandleModTargetArmorPct,                         //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT
    &Aura::HandleNoImmediateEffect,                         //281 SPELL_AURA_MOD_HONOR_GAIN             implemented in Player::RewardHonor
    &Aura::HandleAuraIncreaseBaseHealthPercent,             //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT
@@ -4364,6 +4364,7 @@ void Aura::HandleAuraModDecreaseSpeed(bool apply, bool Real)
        }
    }

+    target->UpdateSpeed(MOVE_WALK, true);
    target->UpdateSpeed(MOVE_RUN, true);
    target->UpdateSpeed(MOVE_SWIM, true);
    target->UpdateSpeed(MOVE_FLIGHT, true);
@@ -4377,6 +4378,7 @@ void Aura::HandleAuraModUseNormalSpeed(bool /*apply*/, bool Real)

    Unit *target = GetTarget();

+    target->UpdateSpeed(MOVE_WALK, true);
    target->UpdateSpeed(MOVE_RUN, true);
    target->UpdateSpeed(MOVE_SWIM, true);
    target->UpdateSpeed(MOVE_FLIGHT, true);
@@ -7329,8 +7331,13 @@ void Aura::PeriodicDummyTick()
        case SPELLFAMILY_MAGE:
        {
            // Mirror Image
-//            if (spell->Id == 55342)
-//                return;
+            if (spell->Id == 55342)
+            {
+                // Set name of summons to name of caster
+                //target->CastSpell(target, m_spellProto->EffectTriggerSpell[m_effIndex], true);
+                target->CastSpell(target, GetSpellProto()->EffectTriggerSpell[m_effIndex], true);
+                m_isPeriodic = false;
+            }
            break;
        }
        case SPELLFAMILY_DRUID:
@@ -8980,3 +8987,72 @@ void SpellAuraHolder::UnregisterSingleCastHolder()
        m_isSingleTarget = false;
    }
}
+
+void Aura::HandleAuraInitializeImages(bool Apply, bool Real)
+{
+    Unit* target = GetTarget();
+
+    if (!Real || !Apply || !target || target->GetTypeId() != TYPEID_UNIT)
+        return;
+    Unit* caster = GetCaster();
+    if (!caster)
+        return;
+    //Unit* creator = Unit::GetUnit(*target,target->GetCreatorGUID());
+    //hackfix Unit* creator = GetCaster();
+    Unit *creator = ObjectAccessor::GetUnit(*target, target->GetCreatorGUID());
+    if (!creator)
+        creator = caster;
+    Creature* pImmage = (Creature*)target;
+    if (creator != caster || pImmage->isPet())
+        return;
+
+    // set stats and visual
+    pImmage->SetDisplayId(creator->GetDisplayId());
+    pImmage->SetLevel(creator->getLevel());
+    pImmage->SetMaxHealth(creator->GetMaxHealth()/5);
+    pImmage->SetHealth(creator->GetHealth()/2);
+    pImmage->SetDisplayId(creator->GetDisplayId());
+    pImmage->SetMaxPower(POWER_MANA, creator->GetMaxPower(POWER_MANA));
+    pImmage->SetPower(POWER_MANA, creator->GetPower(POWER_MANA));
+    pImmage->SetPvP(true);
+    pImmage->setFaction(creator->getFaction());
+    pImmage->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+    pImmage->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+    pImmage->SetUInt32Value(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK2 | UNIT_FLAG2_REGENERATE_POWER);
+    if (creator->IsPvP())
+    {
+      pImmage->SetPvP(true);
+    }
+    if (creator->isInCombat() && pImmage->isAlive())
+    {
+    pImmage->CastSpell(pImmage, 58838, true);
+    }
+      else
+   {
+       pImmage->GetMotionMaster()->Clear();
+       pImmage->GetMotionMaster()->MoveFollow(creator, pImmage->GetDistance(creator), pImmage->GetAngle(creator));
+   }
+}
+
+void Aura::HandleAuraCloneCaster(bool Apply, bool Real)
+{
+    error_log("HandleAuraCloneCaster");
+    if (!Real || !Apply)
+        return;
+
+    Unit* target = GetTarget();
+    if (!target)
+        return;
+
+    Unit* creator = GetCaster();
+    if (!creator)
+        return;
+
+    Unit * caster = GetCaster();
+    if (!caster)
+        return;
+
+    // Set item visual
+    target->SetDisplayId(caster->GetDisplayId());
+    target->SetUInt32Value(UNIT_FIELD_FLAGS_2, 2064);
+}
\\ No newline at end of file
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h
index eea9f72..67fc35d 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -362,6 +362,8 @@ class MANGOS_DLL_SPEC Aura
        void HandleModTargetArmorPct(bool Apply, bool Real);
        void HandleAuraModAllCritChance(bool Apply, bool Real);
        void HandleAuraOpenStable(bool apply, bool Real);
+        void HandleAuraInitializeImages(bool Apply, bool Real);
+        void HandleAuraCloneCaster(bool Apply, bool Real);

        virtual ~Aura();

diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 43d9be9..4738b18 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -2666,6 +2666,14 @@ void Spell::EffectTriggerSpell(SpellEffectIndex effIndex)
    // special cases
    switch(triggered_spell_id)
    {
+        // Mirror Image
+    case 58832:
+        {
+            // Glyph of Mirror Image
+            if (m_caster->HasAura(63093))
+                m_caster->CastSpell(m_caster, 65047, true); // Mirror Image
+            break;
+        }
        // Vanish (not exist)
        case 18461:
        {
diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp
index 73ea871..c15ee75 100644
--- a/src/game/SpellHandler.cpp
+++ b/src/game/SpellHandler.cpp
@@ -598,3 +598,89 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data )
        }
    }
}
+
+void WorldSession::HandleMirrorImageDataRequest( WorldPacket& recv_data )
+{
+    sLog.outDebug("WORLD: CMSG_GET_MIRRORIMAGE_DATA");
+    uint64 guid;
+    recv_data >> guid;
+
+    // Get unit for which data is needed by client
+    Unit *unit = ObjectAccessor::GetUnit(*_player, guid);
+    if (!unit)
+        return;
+
+    // Get creator of the unit
+    Unit *creator = ObjectAccessor::GetUnit(*_player, unit->GetCreatorGUID());
+    if (!creator)
+        creator = unit;
+
+    if (!creator)
+        return;
+
+    WorldPacket data(SMSG_MIRRORIMAGE_DATA, 68);
+    data << (uint64)guid;
+    data << (uint32)creator->GetDisplayId();
+    if (creator->GetTypeId() == TYPEID_PLAYER)
+    {
+        Player* pCreator = (Player *)creator;
+        data << (uint8)pCreator->getRace();                         // race
+        data << (uint8)pCreator->getGender();                       // gender
+        data << (uint8)pCreator->getClass();                        // class
+        data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 0);     // skin
+        data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 1);     // face
+        data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 2);     // hair
+        data << (uint8)pCreator->GetByteValue(PLAYER_BYTES, 3);     // haircolor
+        data << (uint8)pCreator->GetByteValue(PLAYER_BYTES_2, 0);   // facialhair
+
+        data << (uint32)0;                                          // unknown
+
+        static const EquipmentSlots ItemSlots[] =
+        {
+            EQUIPMENT_SLOT_HEAD,
+            EQUIPMENT_SLOT_SHOULDERS,
+            EQUIPMENT_SLOT_BODY,
+            EQUIPMENT_SLOT_CHEST,
+            EQUIPMENT_SLOT_WAIST,
+            EQUIPMENT_SLOT_LEGS,
+            EQUIPMENT_SLOT_FEET,
+            EQUIPMENT_SLOT_WRISTS,
+            EQUIPMENT_SLOT_HANDS,
+            EQUIPMENT_SLOT_BACK,
+            EQUIPMENT_SLOT_TABARD,
+            EQUIPMENT_SLOT_END
+        };
+
+        // Display items in visible slots
+        for (EquipmentSlots const* itr = &ItemSlots[0]; *itr != EQUIPMENT_SLOT_END; ++itr)
+            if (Item const* item =  pCreator->GetItemByPos(INVENTORY_SLOT_BAG_0, *itr))
+                data << (uint32)item->GetProto()->DisplayInfoID;    // display id
+            else
+                data << (uint32)0;                                  // no item found, so no id
+
+        if (Item const* item = pCreator->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
+            unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, item->GetProto()->ItemId);
+        if (Item const* item = pCreator->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND))
+            unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, item->GetProto()->ItemId);
+    }
+    else
+    {
+        // Skip player data for creatures
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+        data << (uint32)0;
+    }
+
+    SendPacket( &data );
+}
\\ No newline at end of file
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index 79a2438..22bc32c 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -701,6 +701,7 @@ bool IsPositiveEffect(uint32 spellId, SpellEffectIndex effIndex)
                        return true;                        // some expected positive spells have SPELL_ATTR_EX_NEGATIVE or unclear target modes
                    break;
                case SPELL_AURA_ADD_TARGET_TRIGGER:
+                case SPELL_AURA_INITIALIZE_IMAGES:
                    return true;
                case SPELL_AURA_PERIODIC_TRIGGER_SPELL:
                    if (spellId != spellproto->EffectTriggerSpell[effIndex])
diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp
index f1fdd64..8563e4b 100644
--- a/src/game/TemporarySummon.cpp
+++ b/src/game/TemporarySummon.cpp
@@ -104,18 +104,13 @@ void TemporarySummon::Update( uint32 diff )
                return;
            }

-            if (!isInCombat())
+            if (m_timer <= diff)
            {
-                if (m_timer <= diff)
-                {
-                    UnSummon();
-                    return;
-                }
-                else
-                    m_timer -= diff;
+                UnSummon();
+                return;
            }
-            else if (m_timer != m_lifetime)
-                m_timer = m_lifetime;
+            else
+                m_timer -= diff;
            break;
        }
        case TEMPSUMMON_TIMED_OR_DEAD_DESPAWN:
@@ -127,18 +122,13 @@ void TemporarySummon::Update( uint32 diff )
                return;
            }

-            if (!isInCombat() && isAlive() )
+            if (m_timer <= diff)
            {
-                if (m_timer <= diff)
-                {
-                    UnSummon();
-                    return;
-                }
-                else
-                    m_timer -= diff;
+                UnSummon();
+                return;
            }
-            else if (m_timer != m_lifetime)
-                m_timer = m_lifetime;
+            else
+                m_timer -= diff;
            break;
        }
        default:
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 25cca37..0fb1e7f 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -580,6 +580,8 @@ enum UnitFlags2
    UNIT_FLAG2_FEIGN_DEATH          = 0x00000001,
    UNIT_FLAG2_UNK1                 = 0x00000002,           // Hides unit model (show only player equip)
    UNIT_FLAG2_COMPREHEND_LANG      = 0x00000008,
+    UNIT_FLAG2_UNK2                 = 0x00000010,
+    //UNIT_FLAG2_MIRROR_IMAGE         = 0x00000010,
    UNIT_FLAG2_FORCE_MOVE           = 0x00000040,
    UNIT_FLAG2_DISARM               = 0x00000400,           // disarm or something
    UNIT_FLAG2_REGENERATE_POWER     = 0x00000800,
diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h
index 8af868e..d0f6ec9 100644
--- a/src/game/WorldSession.h
+++ b/src/game/WorldSession.h
@@ -762,6 +762,7 @@ class MANGOS_DLL_SPEC WorldSession
        void HandleCalendarGetNumPending(WorldPacket& recv_data);

        void HandleSpellClick(WorldPacket& recv_data);
+        void HandleMirrorImageDataRequest(WorldPacket& recv_data);
        void HandleAlterAppearanceOpcode(WorldPacket& recv_data);
        void HandleRemoveGlyphOpcode(WorldPacket& recv_data);
        void HandleCharCustomizeOpcode(WorldPacket& recv_data);
-- 
1.7.0.2

Link to comment
Share on other sites

(...)

+    pImmage->SetMaxPower(POWER_MANA, creator->GetMaxPower(POWER_MANA));
+    pImmage->SetPower(POWER_MANA, creator->GetPower(POWER_MANA));
+    pImmage->SetPvP(true);
(...)
+    if (creator->IsPvP())
+    {
+      pImmage->SetPvP(true);
+    }
(...)

maybe you should initialize with SetPvP(creator->isPvP()) otherwise mirror image will always be PvP enabled :P

Link to comment
Share on other sites

  • 1 month later...
I'm the only one with the problem that using  mirror image while in raid will make everyone appear with the caster name?

No. Actually this may happen even if you are not in a raid. I tried to go in SW and cast Mirror Image (without the patch applied) and everybody near me appeared with my name for as long the spell lasted.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use