• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Форум » Корзина форума » Корзина » Зеркальное Изображение
Зеркальное Изображение
Tomogavk
Сержант
Code

diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index eab30ba..f20a287 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -7362,8 +7362,12 @@ 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
+                m_target->CastSpell((Unit *)NULL, m_spellProto->EffectTriggerSpell[m_effIndex], true);
+                m_isPeriodic = false;
+            }
               break;
           }
           case SPELLFAMILY_DRUID:
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:
           {
@@ -3852,6 +3861,16 @@ void Spell::EffectSummonWild(uint32 i, uint32 forceFaction)
               summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
               summon->SetCreatorGUID(m_caster->GetGUID());
     
+            //Mirror image
+            if(creature_entry == 31216)
+            {
+                summon->SetLevel(m_caster->getLevel());
+                summon->SetHealth(28 + 30*m_caster->getLevel());
+                summon->setPowerType(POWER_MANA);
+                summon->SetPower(POWER_MANA, 28 + 30*m_caster->getLevel());
+                summon->SetPvP(true);
+            }
+
               if(forceFaction)
                   summon->setFaction(forceFaction);
           }diff --git a/sql/evo-X Update/Spells/evo_X_Spell1_mangos.sql b/sql/evo-X Update/Spells/evo_X_Spell1_mangos.sql
new file mode 100644
index 0000000..d908b77
--- /dev/null
+++ b/sql/evo-X Update/Spells/evo_X_Spell1_mangos.sql   
@@ -0,0 +1,5 @@
+DELETE FROM `spell_script_target` WHERE `entry` IN (58836);
+INSERT INTO `spell_script_target` VALUES (58836, 1, 31216);
+
+UPDATE `creature_template` SET `ScriptName`='npc_mirror_image' WHERE `entry`=31216;
+UPDATE `creature_template` SET `spell1`=59638, `spell2` = 59637 WHERE `entry`=31216;
\ No newline at end of file
diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp
index 04f7317..2b29f71 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::HandleMirrrorImageDataRequest   },
+    /*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 a784d2f..e5c2513 100644
--- a/src/game/SpellAuraDefines.h
+++ b/src/game/SpellAuraDefines.h
@@ -289,7 +289,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,
@@ -321,7 +321,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 f20a287..7ca4371 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
@@ -7844,3 +7844,42 @@ void Aura::HandleAllowOnlyAbility(bool apply, bool Real)
       m_target->UpdateDamagePhysical(RANGED_ATTACK);
       m_target->UpdateDamagePhysical(OFF_ATTACK);
   }
+
+void Aura::HandleAuraInitializeImages(bool Apply, bool Real)
+{
+    if (!Real || !Apply)
+        return;
+
+    Unit* caster = GetCaster();
+    if (!caster)
+        return;
+
+    // Set item visual
+    if (caster->GetTypeId()== TYPEID_PLAYER)
+    {
+        if (Item const* item = ((Player *)caster)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
+            m_target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, item->GetProto()->ItemId);
+        if (Item const* item = ((Player *)caster)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND))
+            m_target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, item->GetProto()->ItemId);
+    }
+    else
+    {
+        m_target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID));
+        m_target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1));
+        m_target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2));
+    }
+}
+
+void Aura::HandleAuraCloneCaster(bool Apply, bool Real)
+{
+    if (!Real || !Apply)
+        return;
+
+    Unit * caster = GetCaster();
+    if (!caster)
+        return;
+
+    // Set item visual
+    m_target->SetDisplayId(caster->GetDisplayId());
+    m_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 5698f36..731fbd0 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -215,6 +215,8 @@ class MANGOS_DLL_SPEC Aura
           void HandleModTargetArmorPct(bool Apply, bool Real);
           void HandleAuraModAllCritChance(bool Apply, bool Real);
           void HandleAllowOnlyAbility(bool Apply, bool Real);
+        void HandleAuraInitializeImages(bool Apply, bool Real);
+        void HandleAuraCloneCaster(bool Apply, bool Real);
     
           virtual ~Aura();
     
diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp
index 433f266..f6318c5 100644
--- a/src/game/SpellHandler.cpp
+++ b/src/game/SpellHandler.cpp
@@ -575,3 +575,83 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data )
           }
       }
   }
+void WorldSession::HandleMirrrorImageDataRequest( 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,
+            E QUIPMENT_SLOT_CHEST,
+            EQUIPMENT_SLOT_WAIST,
+            EQUIPMENT_SLOT_LEGS,
+            EQUIPMENT_SLOT_FEET,
+            E QUIPMENT_SLOT_WRISTS,
+            EQUIPMENT_SLOT_HANDS,
+            EQUIPMENT_SLOT_BACK,
+            EQUIPMENT_SLOT_TABARD,
+            E QUIPMENT_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
+    }
+    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/WorldSession.h b/src/game/WorldSession.h
index aa69a84..90c98c8 100644
--- a/src/game/WorldSession.h
+++ b/src/game/WoЗrldSession.h
@@ -730,6 +730,7 @@ class MANGOS_DLL_SPEC WorldSession
           void HandleCalendarGetNumPending(WorldPacket& recv_data);
     
           void HandleSpellClick(WorldPacket& recv_data);
+        void HandleMirrrorImageDataRequest(WorldPacket & recv_data);
           void HandleAlterAppearance(WorldPacket& recv_data);
           void HandleRemoveGlyph(WorldPacket& recv_data);
           void HandleCharCustomize(WorldPacket& recv_data);

выдрано и переписано из одного форка тринити smile

Добавлено (27.12.2009, 14:49)
---------------------------------------------
переместите в фиксы, ошибся разделом.

Сообщение # 1 отредактировано Tomogavk - Воскресенье, 27.12.2009, 04:08
AT[o]M
Рыцарь
Tomogavk, эт ты сам сделал?

Сообщение # 2 написано 01.01.2010 в 03:48
kamelot
Рыцарь
Вот жесть! А что это за патч и о каком зеркальном отображении идет речь? А то я что-то не понял.

Добавлено (01.01.2010, 13:49)
---------------------------------------------
Вот жесть! А что это за патч и о каком зеркальном отображении идет речь? А то я что-то не понял.

Сообщение # 3 написано 01.01.2010 в 13:49
madalex
Скаут
Кто-нибудь был первопроходцем? Юзали патч? ))) Отпишитесь пожалст
И тот кто демона в себе цепями связывал внутри,
Пытался Ангела из тьмы освободить.
Его глаза во тьме сияют, посмотри
Он черно-белое крыло сумеет распрямить...
Сообщение # 4 написано 26.01.2010 в 11:12
Dlink_lip
Чемпион
Видел на подобе патч. Не хотел работать. Ну посмотрим этот.

Добавлено (26.01.2010, 12:02)
---------------------------------------------
Не ставится. Или у меня руки кривые. biggrin

Сообщение # 5 написано 26.01.2010 в 12:02
Tomogavk
Сержант
руками поставь а не командой smile
Сообщение # 6 написано 28.01.2010 в 05:03
Dr1v3r
Скаут
Tomogavk, именноо так последнее время и приходится. Ток у меня ни чего не получаетсяю. Расскажи пожалуйса как. Можно в аське.
Сообщение # 7 отредактировано Dr1v3r - Четверг, 28.01.2010, 14:25
Valercheg
Скаут
подскажите как руками )))) а то я знаю тока как через GIT )) сенкс заранее )
Сообщение # 8 написано 30.01.2010 в 12:27
Nichers
Маршал
Давно уже везде исправленный спел.Возьму просто так
Сообщение # 9 написано 30.01.2010 в 12:36
lew
Скаут
Tomogavk, а куда заливать ? В базу ??
Сообщение # 10 написано 31.01.2010 в 13:49
Taumer
root@localhost
раздел называется "Патчи в ядро Mangos", а теперь думай куда это заливается
Сообщение # 11 написано 31.01.2010 в 16:32
ZetGet
Рыцарь
имхо работать не будет... нет скрипта на моба
Code
Index: scripts/npc/npcs_special.cpp
===================================================================
--- scripts/npc/npcs_special.cpp    (revision 1262)
+++ scripts/npc/npcs_special.cpp    (working copy)
@@ -1288,7 +1288,33 @@
      }
      return true;
  }
+/* Need more Review!
+struct MANGOS_DLL_DECL npc_mirror_image : public ScriptedAI
+{
+    npc_mirror_image(Creature* pCreature) : ScriptedAI(pCreature) {}
+    Unit * owner;
+    void Reset()
+    {
+        if (m_creature->isSummon())
+            owner = ((Summon*)m_creature)->GetOwner();
+        if (!owner)
+            return;
+        m_creature->SetDisplayId(owner->GetDisplayId());
+        owner->SetLevel(owner->getLevel());
+        // Inherit Master's Threat List (not yet implemented)
+        owner->CastSpell((Unit*)NULL, 58838, true);
+        // here mirror image casts on summoner spell (not present in client dbc) 49866
+        // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?)
+        // Clone Me!
+        owner->CastSpell(m_creature, 45204, false);
+    }
+};
   
+CreatureAI* GetAI_npc_mirror_image(Creature* pCreature)
+{
+    return new npc_mirror_image(pCreature);
+}
+*/
  void AddSC_npcs_special()
  {
      Script *newscript;
@@ -1354,4 +1380,9 @@
      newscript->pGossipHello = &GossipHello_npc_sayge;
      newscript->pGossipSelect = &GossipSelect_npc_sayge;
      newscript->RegisterSelf();
+
+    /*newscript = new Script;
+    newscript->Name = "npc_mirror_image";
+    newscript->GetAI = &GetAI_npc_mirror_image;
+    newscript->RegisterSelf();*/
  }

© getmangos.com
Сообщение # 12 написано 07.02.2010 в 00:33
yohonda
Старший Маршал
ZetGet,
Quote
имхо работать не будет... нет скрипта на моба

это все тебе и есть скрипт... если ты имел ввиду заливку в базу, то он туда вообще не зальется
Сообщение # 13 написано 07.02.2010 в 12:35
ZetGet
Рыцарь
yohonda, ты меня за кого принимаешь?! иди сам его заливай в базу! я вообще-то про то, что нехватает помимо этого патча еще скриптовки в SD2.
тыкни пальцем где фрагмент в 1 посте отвечает за каст суммон-мобами, если не веришь? тотоже.... если не веришь иди почитай #21-#23 посты тут
если не знаешь о чём говорят молчи лучше, либо тихо спроси в ЛС cool

PS: без скрипта в SD2... запрос наполовину бесполезен который создается патчем (тк скрипта у вас в SD2 такого нет):

Code
UPDATE `creature_template` SET `ScriptName`='npc_mirror_image' WHERE `entry`=31216;
Сообщение # 14 отредактировано ZetGet - Воскресенье, 07.02.2010, 13:47
lew
Скаут
Объясните как заливать в ядро патч ?????
Сообщение # 15 написано 10.02.2010 в 19:36
XfearprojectX
Капрал
работает?
Сообщение # 16 написано 12.02.2010 в 19:31
lexa777729
Рыцарь
ПОЦАНЫ Я КОНЕЧНО ДИКО ИЗВЕНЯЮСЬ НО ЕПАТЬ ГДЕ НАХОДИТСЯ ПАПКА /src/

Сообщение # 17 написано 16.06.2010 в 14:24
Игроман
Хомячок
lexa777729, в исходниках ядра.
Сообщение # 18 написано 16.06.2010 в 15:40
ph3n
Developer
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело

Переместил: ph3n.
Сообщение # 19 написано 14.10.2012 в 13:31
Форум » Корзина форума » Корзина » Зеркальное Изображение
  • Страница 1 из 1
  • 1
Поиск: