diff options
| -rw-r--r-- | src/bindings/scripts/docs/EventAI.txt | 1 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/creature/mob_event_ai.cpp | 14 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/creature/mob_event_ai.h | 1 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp | 14 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp | 12 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp | 11 | ||||
| -rw-r--r-- | src/game/Creature.cpp | 20 | ||||
| -rw-r--r-- | src/game/Creature.h | 8 | ||||
| -rw-r--r-- | src/game/Object.cpp | 8 | ||||
| -rw-r--r-- | src/game/ObjectMgr.cpp | 24 | ||||
| -rw-r--r-- | src/game/QueryHandler.cpp | 9 | ||||
| -rw-r--r-- | src/game/Totem.cpp | 16 | 
12 files changed, 91 insertions, 47 deletions
diff --git a/src/bindings/scripts/docs/EventAI.txt b/src/bindings/scripts/docs/EventAI.txt index ade6ec7fe1e..3dac5c271e8 100644 --- a/src/bindings/scripts/docs/EventAI.txt +++ b/src/bindings/scripts/docs/EventAI.txt @@ -122,6 +122,7 @@ Params are always read from Param1, then Param2, then Param3.  36   ACTION_T_UPDATE_TEMPLATE          TemplateId, Team                Changes the creature to a new creature template of (param1) with team = Alliance if (param2) = false or Horde if (param2) = true  37   ACTION_T_DIE                      No Params                       Kills the creature  38   ACTION_T_ZONE_COMBAT_PULSE        No Params                       Places all players within the instance into combat with the creature. Only works in combat and only works inside of instances. +39   ACTION_T_SUMMON_GO                GameObjectID, DespawnTime       Summons object (param1). Despawns after param2. Spawns on top of current creature. DespawnTime is in ms.  * = Use -1 to specify that if this param is picked to do nothing. Random is constant between actions within an event. So if you have a random Yell and a random Sound they will match up (ex: param2 with param2) diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp index 5f656a45da8..dc88ed98679 100644 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp +++ b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp @@ -1 +1,15 @@  #include "precompiled.h" +            case ACTION_T_SUMMON_GO: +            { +                GameObject* pObject = NULL; + +                float x,y,z; +                m_creature->GetPosition(x,y,z); +                pObject = m_creature->SummonGameObject(param1, x, y, z, 0, 0, 0, 0, 0, param2); +                if (!pObject) +                { +                    if (EAI_ErrorLevel > 0) +                        error_db_log( "SD2: EventAI failed to spawn object %u. Spawn event %d is on creature %d", param1, EventId, m_creature->GetEntry()); +                } +            } +            break; diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.h b/src/bindings/scripts/scripts/creature/mob_event_ai.h index f6c9b663ce0..9dc89f8cad3 100644 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.h +++ b/src/bindings/scripts/scripts/creature/mob_event_ai.h @@ -1,4 +1,5 @@  #ifndef SC_EVENTAI_H  #define SC_EVENTAI_H +    ACTION_T_SUMMON_GO                  = 39,   //GameObjectID, DespawnTime in ms  #endif diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp index 28edd163ac2..e6e0caca2e8 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp @@ -112,6 +112,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI      uint32 ShieldTimer;      uint32 SWPainTimer;      uint32 DispelTimer; +    uint32 ResetTimer;      uint32 CombatPulseTimer;                                // Periodically puts all players in the instance in combat @@ -127,6 +128,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI          ShieldTimer = 2000;          SWPainTimer = 5000;          DispelTimer = 7500; +        ResetTimer = 5000;          CombatPulseTimer  = 5000; @@ -246,6 +248,18 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI          if (!UpdateVictim())              return; +        if(ResetTimer < diff) +        { +            float x, y, z, o; +            m_creature->GetHomePosition(x, y, z, o); +            if(m_creature->GetPositionZ() >= z+10) +            { +                EnterEvadeMode(); +                return; +            } +            ResetTimer = 5000; +        }else ResetTimer -= diff; +          if (HealTimer < diff)          {              uint32 health = m_creature->GetHealth(); diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp index 56741452c66..95db93e71fb 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp @@ -217,6 +217,7 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI      uint32 SiphonSoul_Timer;      uint32 PlayerAbility_Timer;      uint32 CheckAddState_Timer; +    uint32 ResetTimer;      uint32 PlayerClass; @@ -232,6 +233,7 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI          SiphonSoul_Timer = 100000;          PlayerAbility_Timer = 99999;          CheckAddState_Timer = 5000; +        ResetTimer = 5000;          SpawnAdds(); @@ -332,6 +334,16 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI          if(!UpdateVictim() )              return; +        if(ResetTimer < diff) +        { +            if(m_creature->GetDistance(119.223,1035.45,29.4481) <= 10) +            { +                EnterEvadeMode(); +                return; +            } +            ResetTimer = 5000; +        }else ResetTimer -= diff; +          if(CheckAddState_Timer < diff)          {              for(uint8 i = 0; i < 4; ++i) diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp index 6556672dfdf..5c1d9177d6b 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp @@ -419,10 +419,13 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI          if(ResetTimer < diff)          { -            /*float x, y, z; -            m_creature->GetPosition(x, y, z); -            if(x < -70 || x > 0 || y > 1176 || y < 1121 || z < 18) -                EnterEvadeMode();*/ +            float x, y, z, o; +            m_creature->GetHomePosition(x, y, z, o); +            if(m_creature->GetPositionZ() <= z-7) +            { +                EnterEvadeMode(); +                return; +            }              ResetTimer = 5000;          }else ResetTimer -= diff; diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 9650c537751..0de19314ab6 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -92,20 +92,20 @@ uint32 CreatureInfo::GetRandomValidModelId() const      uint32 c = 0;      uint32 modelIDs[4]; -    if (Modelid1) modelIDs[c++] = Modelid1; -    if (Modelid2) modelIDs[c++] = Modelid2; -    if (Modelid3) modelIDs[c++] = Modelid3; -    if (Modelid4) modelIDs[c++] = Modelid4; +    if (Modelid_A1) modelIDs[c++] = Modelid_A1; +    if (Modelid_A2) modelIDs[c++] = Modelid_A2; +    if (Modelid_H1) modelIDs[c++] = Modelid_H1; +    if (Modelid_H2) modelIDs[c++] = Modelid_H2;      return ((c>0) ? modelIDs[urand(0,c-1)] : 0);  }  uint32 CreatureInfo::GetFirstValidModelId() const  { -    if(Modelid1) return Modelid1; -    if(Modelid2) return Modelid2; -    if(Modelid3) return Modelid3; -    if(Modelid4) return Modelid4; +    if(Modelid_A1) return Modelid_A1; +    if(Modelid_A2) return Modelid_A2; +    if(Modelid_H1) return Modelid_H1; +    if(Modelid_H2) return Modelid_H2;      return 0;  } @@ -1198,8 +1198,8 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)      CreatureInfo const *cinfo = GetCreatureInfo();      if(cinfo)      { -        if(displayId == cinfo->Modelid1 || displayId == cinfo->Modelid2 || -            displayId == cinfo->Modelid3 || displayId == cinfo->Modelid4) displayId = 0; +        if(displayId == cinfo->Modelid_A1 || displayId == cinfo->Modelid_A2 || +            displayId == cinfo->Modelid_H1 || displayId == cinfo->Modelid_H2) displayId = 0;      }      // data->guid = guid don't must be update at save diff --git a/src/game/Creature.h b/src/game/Creature.h index 07bed9af13c..c1c1acb524c 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -159,10 +159,10 @@ struct CreatureInfo  {      uint32  Entry;      uint32  HeroicEntry; -    uint32  Modelid1; -    uint32  Modelid2; -    uint32  Modelid3; -    uint32  Modelid4; +    uint32  Modelid_A1; +    uint32  Modelid_A2; +    uint32  Modelid_H1; +    uint32  Modelid_H2;      char*   Name;      char*   SubName;      char*   IconName; diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 3c776b6fdfa..015bb6d3479 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -637,15 +637,15 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask                      {                          if(target->isGameMaster())                          { -                            if(cinfo->Modelid2) -                                *data << cinfo->Modelid1; +                            if(cinfo->Modelid_A2) +                                *data << cinfo->Modelid_A1;                              else                                  *data << 17519; // world invisible trigger's model                          }                          else                          { -                            if(cinfo->Modelid2) -                                *data << cinfo->Modelid2; +                            if(cinfo->Modelid_A2) +                                *data << cinfo->Modelid_A2;                              else                                  *data << 11686; // world invisible trigger's model                          } diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index d3a9fe23395..3351b001e5b 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -616,25 +616,25 @@ void ObjectMgr::LoadCreatureTemplates()              sLog.outErrorDb("Creature (Entry: %u) has non-existing faction_H template (%u)", cInfo->Entry, cInfo->faction_H);          // check model ids, supplying and sending non-existent ids to the client might crash them -        if(cInfo->Modelid1 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid1)) +        if(cInfo->Modelid_A1 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid_A1))          { -            sLog.outErrorDb("Creature (Entry: %u) has non-existing modelId_A (%u), setting it to 0", cInfo->Entry, cInfo->Modelid1); -            const_cast<CreatureInfo*>(cInfo)->Modelid1 = 0; +            sLog.outErrorDb("Creature (Entry: %u) has non-existing Modelid_A1 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid_A1); +            const_cast<CreatureInfo*>(cInfo)->Modelid_A1 = 0;          } -        if(cInfo->Modelid2 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid2)) +        if(cInfo->Modelid_A2 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid_A2))          { -            sLog.outErrorDb("Creature (Entry: %u) has non-existing modelId_A2 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid2); -            const_cast<CreatureInfo*>(cInfo)->Modelid2 = 0; +            sLog.outErrorDb("Creature (Entry: %u) has non-existing Modelid_A2 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid_A2); +            const_cast<CreatureInfo*>(cInfo)->Modelid_A2 = 0;          } -        if(cInfo->Modelid3 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid3)) +        if(cInfo->Modelid_H1 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid_H1))          { -            sLog.outErrorDb("Creature (Entry: %u) has non-existing modelId_H (%u), setting it to 0", cInfo->Entry, cInfo->Modelid3); -            const_cast<CreatureInfo*>(cInfo)->Modelid3 = 0; +            sLog.outErrorDb("Creature (Entry: %u) has non-existing Modelid_H1 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid_H1); +            const_cast<CreatureInfo*>(cInfo)->Modelid_H1 = 0;          } -        if(cInfo->Modelid4 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid4)) +        if(cInfo->Modelid_H2 && !sCreatureModelStorage.LookupEntry<CreatureModelInfo>(cInfo->Modelid_H2))          { -            sLog.outErrorDb("Creature (Entry: %u) has non-existing modelId_H2 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid4); -            const_cast<CreatureInfo*>(cInfo)->Modelid4 = 0; +            sLog.outErrorDb("Creature (Entry: %u) has non-existing Modelid_H2 (%u), setting it to 0", cInfo->Entry, cInfo->Modelid_H2); +            const_cast<CreatureInfo*>(cInfo)->Modelid_H2 = 0;          }          if(cInfo->dmgschool >= MAX_SPELL_SCHOOL) diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index b27620e7857..2a4e08cf0d9 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -186,11 +186,10 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data )          data << uint32(ci->family);                         // family         wdbFeild9          data << uint32(ci->rank);                           // rank           wdbFeild10          data << uint32(ci->PetSpellDataId);                 // Id from CreatureSpellData.dbc    wdbField12 -        data << uint32(ci->Modelid1);                       // modelid_male1 -        data << uint32(ci->Modelid2);                       // modelid_female1 ? -        data << uint32(ci->Modelid3);                       // modelid_male2 ? -        data << uint32(ci->Modelid4);                       // modelid_femmale2 ? -        data << float(ci->unk16);                           // unk +        data << (uint32)ci->Modelid_A1;                     // Modelid_A1 +        data << (uint32)ci->Modelid_A2;                     // Modelid_A2 +        data << (uint32)ci->Modelid_H1;                     // Modelid_H1 +        data << (uint32)ci->Modelid_H2;                     // Modelid_H2          data << float(ci->unk17);                           // unk          data << uint8(ci->RacialLeader);          SendPacket( &data ); diff --git a/src/game/Totem.cpp b/src/game/Totem.cpp index 3b1879feca7..6969960e7ea 100644 --- a/src/game/Totem.cpp +++ b/src/game/Totem.cpp @@ -61,17 +61,17 @@ void Totem::Summon(Unit* owner)          uint32 modelid = 0;          if(((Player*)owner)->GetTeam() == HORDE)          { -            if(cinfo->Modelid3) -                modelid = cinfo->Modelid3; -            else if(cinfo->Modelid4) -                modelid = cinfo->Modelid4; +            if(cinfo->Modelid_H1) +                modelid = cinfo->Modelid_H1; +            else if(cinfo->Modelid_H2) +                modelid = cinfo->Modelid_H2;          }          else          { -            if(cinfo->Modelid1) -                modelid = cinfo->Modelid1; -            else if(cinfo->Modelid2) -                modelid = cinfo->Modelid2; +            if(cinfo->Modelid_A1) +                modelid = cinfo->Modelid_A1; +            else if(cinfo->Modelid_A2) +                modelid = cinfo->Modelid_A2;          }          if (modelid)              SetDisplayId(modelid);  | 
