aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp83
-rw-r--r--src/server/game/Entities/Unit/Unit.h9
-rw-r--r--src/server/game/Spells/SpellEffects.cpp5
3 files changed, 97 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 604bb2830d5..10e6905ec8a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -16102,6 +16102,89 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form)
return 0;
}
+uint32 Unit::GetModelForTotem(PlayerTotemType totemType)
+{
+ switch(getRace())
+ {
+ case RACE_ORC:
+ {
+ switch(totemType)
+ {
+ case SUMMON_TYPE_TOTEM_FIRE: //fire
+ return 30758;
+ case SUMMON_TYPE_TOTEM_EARTH: //earth
+ return 30757;
+ case SUMMON_TYPE_TOTEM_WATER: //water
+ return 30759;
+ case SUMMON_TYPE_TOTEM_AIR: //air
+ return 30756;
+ }
+ break;
+ }
+ case RACE_DWARF:
+ {
+ switch(totemType)
+ {
+ case SUMMON_TYPE_TOTEM_FIRE: //fire
+ return 30754;
+ case SUMMON_TYPE_TOTEM_EARTH: //earth
+ return 30753;
+ case SUMMON_TYPE_TOTEM_WATER: //water
+ return 30755;
+ case SUMMON_TYPE_TOTEM_AIR: //air
+ return 30736;
+ }
+ break;
+ }
+ case RACE_TROLL:
+ {
+ switch(totemType)
+ {
+ case SUMMON_TYPE_TOTEM_FIRE: //fire
+ return 30762;
+ case SUMMON_TYPE_TOTEM_EARTH: //earth
+ return 30761;
+ case SUMMON_TYPE_TOTEM_WATER: //water
+ return 30763;
+ case SUMMON_TYPE_TOTEM_AIR: //air
+ return 30760;
+ }
+ break;
+ }
+ case RACE_TAUREN:
+ {
+ switch(totemType)
+ {
+ case SUMMON_TYPE_TOTEM_FIRE: //fire
+ return 4589;
+ case SUMMON_TYPE_TOTEM_EARTH: //earth
+ return 4588;
+ case SUMMON_TYPE_TOTEM_WATER: //water
+ return 4587;
+ case SUMMON_TYPE_TOTEM_AIR: //air
+ return 4590;
+ }
+ break;
+ }
+ case RACE_DRAENEI:
+ {
+ switch(totemType)
+ {
+ case SUMMON_TYPE_TOTEM_FIRE: //fire
+ return 19074;
+ case SUMMON_TYPE_TOTEM_EARTH: //earth
+ return 19073;
+ case SUMMON_TYPE_TOTEM_WATER: //water
+ return 19075;
+ case SUMMON_TYPE_TOTEM_AIR: //air
+ return 19071;
+ }
+ break;
+ }
+ }
+ return 0;
+}
+
void Unit::JumpTo(float speedXY, float speedZ, bool forward)
{
float angle = forward ? 0 : M_PI;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 63b0ca91771..5ef7918f11d 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1074,6 +1074,14 @@ enum ReactiveType
#define SUMMON_SLOT_QUEST 6
#define MAX_SUMMON_SLOT 7
+enum PlayerTotemType
+{
+ SUMMON_TYPE_TOTEM_FIRE = 63,
+ SUMMON_TYPE_TOTEM_EARTH = 81,
+ SUMMON_TYPE_TOTEM_WATER = 82,
+ SUMMON_TYPE_TOTEM_AIR = 83,
+};
+
// delay time next attack to prevent client attack animation problems
#define ATTACK_DISPLAY_DELAY 200
#define MAX_PLAYER_STEALTH_DETECT_RANGE 45.0f // max distance for detection targets by player
@@ -1917,6 +1925,7 @@ class Unit : public WorldObject
void RemovePetAura(PetAura const* petSpell);
uint32 GetModelForForm(ShapeshiftForm form);
+ uint32 GetModelForTotem(PlayerTotemType totemType);
void SetReducedThreatPercent(uint32 pct, uint64 guid)
{
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 4d6bd7b5fe5..f2e1beed478 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3757,6 +3757,11 @@ void Spell::EffectSummonType(uint32 i)
&& properties->Slot >= SUMMON_SLOT_TOTEM
&& properties->Slot < MAX_TOTEM_SLOT)
{
+ // set display id depending on race
+ uint32 displayId = m_originalCaster->GetModelForTotem(PlayerTotemType(properties->Id));
+ summon->SetNativeDisplayId(displayId);
+ summon->SetDisplayId(displayId);
+
//summon->SendUpdateToPlayerm_originalCaster->ToPlayer();
WorldPacket data(SMSG_TOTEM_CREATED, 1+8+4+4);
data << uint8(properties->Slot-1);