aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-04-17 15:29:55 -0500
committermegamage <none@none>2009-04-17 15:29:55 -0500
commitf0cbed1ad8376200bb450768d7b77198e6754113 (patch)
tree55cc52add932df8ce9740824a09916deb2e95ba6 /src
parentca5894b34800782b98ee9c47d82081cf0a0c1555 (diff)
parent6a53bada669c58393ec13c9bacd199c154fe023a (diff)
*Merge.
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/docs/EventAI.txt1
-rw-r--r--src/bindings/scripts/scripts/creature/mob_event_ai.cpp14
-rw-r--r--src/bindings/scripts/scripts/creature/mob_event_ai.h1
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp14
-rw-r--r--src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp12
-rw-r--r--src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp11
-rw-r--r--src/game/Creature.cpp20
-rw-r--r--src/game/Creature.h8
-rw-r--r--src/game/Object.cpp8
-rw-r--r--src/game/ObjectMgr.cpp24
-rw-r--r--src/game/QueryHandler.cpp9
-rw-r--r--src/game/Totem.cpp16
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);