void Creature::SetPosition(float x, float y, float z, float o) { // Prevent crash when a bad coord is sent by the client. if (!SkyMistCore::IsValidMapCoord(x, y, z, o)) { sLog->outDebug(LOG_FILTER_UNITS, "Creature::SetPosition(%f, %f, %f) .. bad coordinates!", x, y, z); return; } GetMap()->CreatureRelocation(ToCreature(), x, y, z, o); if (IsVehicle()) GetVehicleKit(); // ->RelocatePassengers(); }
void Totem::Summon(Unit* owner) { CreatureInfo const *cinfo = GetCreatureInfo(); if (owner->GetTypeId() == TYPEID_PLAYER && cinfo) { uint32 modelid = 0; if (owner->ToPlayer()->GetTeam() == HORDE) { if (cinfo->Modelid_H1) modelid = cinfo->Modelid_H1; else if (cinfo->Modelid_H2) modelid = cinfo->Modelid_H2; } else { if (cinfo->Modelid_A1) modelid = cinfo->Modelid_A1; else if (cinfo->Modelid_A2) modelid = cinfo->Modelid_A2; } if (modelid) SetDisplayId(modelid); else sLog.outErrorDb("Totem::Summon: Missing modelid information for entry %u, team %u, totem will use default values.",GetEntry(),owner->ToPlayer()->GetTeam()); } // Only add if a display exists. //SetInstanceId(owner->GetInstanceId()); owner->GetMap()->Add(ToCreature()); WorldPacket data(SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE, 8); data << GetGUID(); SendMessageToSet(&data,true); switch(m_type) { case TOTEM_PASSIVE: CastSpell(this, GetSpell(), true); break; case TOTEM_STATUE: CastSpell(GetOwner(), GetSpell(), true); break; default: break; } if (GetEntry() == SENTRY_TOTEM_ENTRY) SetReactState(REACT_AGGRESSIVE); }