mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-17 21:50:50 -04:00
Merge branch 'master' of git://github.com/TrinityCore/TrinityCore into mmaps
This commit is contained in:
@@ -1459,9 +1459,8 @@ void Battleground::DoorClose(uint32 type)
|
||||
// If doors are open, close it
|
||||
if (obj->getLootState() == GO_ACTIVATED && obj->GetGoState() != GO_STATE_READY)
|
||||
{
|
||||
// Change state to allow door to be closed
|
||||
obj->SetLootState(GO_READY);
|
||||
obj->UseDoorOrButton(RESPAWN_ONE_DAY);
|
||||
obj->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1473,9 +1472,8 @@ void Battleground::DoorOpen(uint32 type)
|
||||
{
|
||||
if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]))
|
||||
{
|
||||
// Change state to be sure they will be opened
|
||||
obj->SetLootState(GO_READY);
|
||||
obj->UseDoorOrButton(RESPAWN_ONE_DAY);
|
||||
obj->SetLootState(GO_ACTIVATED);
|
||||
obj->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
else
|
||||
sLog->outError("Battleground::DoorOpen: door gameobject (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!",
|
||||
|
||||
@@ -179,16 +179,11 @@ void BattlegroundWS::StartingEventCloseDoors()
|
||||
|
||||
void BattlegroundWS::StartingEventOpenDoors()
|
||||
{
|
||||
for (uint32 i = BG_WS_OBJECT_DOOR_A_1; i <= BG_WS_OBJECT_DOOR_A_4; ++i)
|
||||
for (uint32 i = BG_WS_OBJECT_DOOR_A_1; i <= BG_WS_OBJECT_DOOR_A_6; ++i)
|
||||
DoorOpen(i);
|
||||
for (uint32 i = BG_WS_OBJECT_DOOR_H_1; i <= BG_WS_OBJECT_DOOR_H_2; ++i)
|
||||
for (uint32 i = BG_WS_OBJECT_DOOR_H_1; i <= BG_WS_OBJECT_DOOR_H_4; ++i)
|
||||
DoorOpen(i);
|
||||
|
||||
SpawnBGObject(BG_WS_OBJECT_DOOR_A_5, RESPAWN_ONE_DAY);
|
||||
SpawnBGObject(BG_WS_OBJECT_DOOR_A_6, RESPAWN_ONE_DAY);
|
||||
SpawnBGObject(BG_WS_OBJECT_DOOR_H_3, RESPAWN_ONE_DAY);
|
||||
SpawnBGObject(BG_WS_OBJECT_DOOR_H_4, RESPAWN_ONE_DAY);
|
||||
|
||||
for (uint32 i = BG_WS_OBJECT_A_FLAG; i <= BG_WS_OBJECT_BERSERKBUFF_2; ++i)
|
||||
SpawnBGObject(i, RESPAWN_IMMEDIATELY);
|
||||
|
||||
|
||||
@@ -135,10 +135,10 @@ void GameObject::AddToWorld()
|
||||
sObjectAccessor->AddObject(this);
|
||||
bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
|
||||
// The state can be changed after GameObject::Create but before GameObject::AddToWorld
|
||||
bool toggledState = GetGoState() == GO_STATE_READY;
|
||||
bool toggledState = GetGOData() ? GetGOData()->go_state == GO_STATE_READY : false;
|
||||
if (m_model)
|
||||
GetMap()->Insert(*m_model);
|
||||
if ((startOpen && !toggledState) || (!startOpen && toggledState))
|
||||
if (startOpen ^ toggledState)
|
||||
EnableCollision(false);
|
||||
|
||||
WorldObject::AddToWorld();
|
||||
|
||||
@@ -2741,6 +2741,14 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float
|
||||
pos.m_positionZ += 2.0f;
|
||||
destx = pos.m_positionX + dist * cos(angle);
|
||||
desty = pos.m_positionY + dist * sin(angle);
|
||||
|
||||
// Prevent invalid coordinates here, position is unchanged
|
||||
if (!Trinity::IsValidMapCoord(destx, desty))
|
||||
{
|
||||
sLog->outCrash("WorldObject::MovePositionToFirstCollision invalid coordinates X: %f and Y: %f were passed!", destx, desty);
|
||||
return;
|
||||
}
|
||||
|
||||
ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true);
|
||||
floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true);
|
||||
destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor;
|
||||
|
||||
@@ -932,7 +932,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(createInfo->Race, createInfo->Class);
|
||||
if (!info)
|
||||
{
|
||||
sLog->outError("Player (Name %s) has incorrect race/class pair. Can't be loaded.", m_name.c_str());
|
||||
sLog->outError("Player::Create: Possible hacking-attempt: Account %u tried creating a character named '%s' with an invalid race/class pair (%u/%u) - refusing to do so.",
|
||||
GetSession()->GetAccountId(), m_name.c_str(), createInfo->Race, createInfo->Class);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -944,7 +945,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
||||
ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(createInfo->Class);
|
||||
if (!cEntry)
|
||||
{
|
||||
sLog->outError("Class %u not found in DBC (Wrong DBC files?)", createInfo->Class);
|
||||
sLog->outError("Player::Create: Possible hacking-attempt: Account %u tried creating a character named '%s' with an invalid character class (%u) - refusing to do so (wrong DBC-files?)",
|
||||
GetSession()->GetAccountId(), m_name.c_str(), createInfo->Class);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -959,7 +961,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
||||
|
||||
if (!IsValidGender(createInfo->Gender))
|
||||
{
|
||||
sLog->outError("Player has invalid gender (%hu), can't be loaded.", createInfo->Gender);
|
||||
sLog->outError("Player::Create: Possible hacking-attempt: Account %u tried creating a character named '%s' with an invalid gender (%hu) - refusing to do so",
|
||||
GetSession()->GetAccountId(), m_name.c_str(), createInfo->Gender);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ public:
|
||||
continue;
|
||||
}
|
||||
|
||||
CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(entry);
|
||||
CreatureTemplate* cInfo = const_cast<CreatureTemplate*>(sObjectMgr->GetCreatureTemplate(entry));
|
||||
if (!cInfo)
|
||||
{
|
||||
handler->PSendSysMessage(LANG_COMMAND_CREATURESTORAGE_NOTFOUND, entry);
|
||||
@@ -435,90 +435,88 @@ public:
|
||||
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
const_cast<CreatureTemplate*>(cInfo)->DifficultyEntry[0] = fields[0].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->DifficultyEntry[1] = fields[1].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->DifficultyEntry[2] = fields[2].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->KillCredit[0] = fields[3].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->KillCredit[1] = fields[4].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->Modelid1 = fields[5].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->Modelid2 = fields[6].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->Modelid3 = fields[7].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->Modelid4 = fields[8].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->Name = fields[9].GetString();
|
||||
const_cast<CreatureTemplate*>(cInfo)->SubName = fields[10].GetString();
|
||||
const_cast<CreatureTemplate*>(cInfo)->IconName = fields[11].GetString();
|
||||
const_cast<CreatureTemplate*>(cInfo)->GossipMenuId = fields[12].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->minlevel = fields[13].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->maxlevel = fields[14].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->expansion = fields[15].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->faction_A = fields[16].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->faction_H = fields[17].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->npcflag = fields[18].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->speed_walk = fields[19].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->speed_run = fields[20].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->scale = fields[21].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->rank = fields[22].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->mindmg = fields[23].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->maxdmg = fields[24].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->dmgschool = fields[25].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->attackpower = fields[26].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->dmg_multiplier = fields[27].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->baseattacktime = fields[28].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->rangeattacktime = fields[29].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->unit_class = fields[30].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->unit_flags = fields[31].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->dynamicflags = fields[32].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->family = fields[33].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->trainer_type = fields[34].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->trainer_spell = fields[35].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->trainer_class = fields[36].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->trainer_race = fields[37].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->minrangedmg = fields[38].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->maxrangedmg = fields[39].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->rangedattackpower = fields[40].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->type = fields[41].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->type_flags = fields[42].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->lootid = fields[43].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->pickpocketLootId = fields[44].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->SkinLootId = fields[45].GetUInt32();
|
||||
cInfo->DifficultyEntry[0] = fields[0].GetUInt32();
|
||||
cInfo->DifficultyEntry[1] = fields[1].GetUInt32();
|
||||
cInfo->DifficultyEntry[2] = fields[2].GetUInt32();
|
||||
cInfo->KillCredit[0] = fields[3].GetUInt32();
|
||||
cInfo->KillCredit[1] = fields[4].GetUInt32();
|
||||
cInfo->Modelid1 = fields[5].GetUInt32();
|
||||
cInfo->Modelid2 = fields[6].GetUInt32();
|
||||
cInfo->Modelid3 = fields[7].GetUInt32();
|
||||
cInfo->Modelid4 = fields[8].GetUInt32();
|
||||
cInfo->Name = fields[9].GetString();
|
||||
cInfo->SubName = fields[10].GetString();
|
||||
cInfo->IconName = fields[11].GetString();
|
||||
cInfo->GossipMenuId = fields[12].GetUInt32();
|
||||
cInfo->minlevel = fields[13].GetUInt8();
|
||||
cInfo->maxlevel = fields[14].GetUInt8();
|
||||
cInfo->expansion = fields[15].GetUInt16();
|
||||
cInfo->faction_A = fields[16].GetUInt16();
|
||||
cInfo->faction_H = fields[17].GetUInt16();
|
||||
cInfo->npcflag = fields[18].GetUInt32();
|
||||
cInfo->speed_walk = fields[19].GetFloat();
|
||||
cInfo->speed_run = fields[20].GetFloat();
|
||||
cInfo->scale = fields[21].GetFloat();
|
||||
cInfo->rank = fields[22].GetUInt8();
|
||||
cInfo->mindmg = fields[23].GetFloat();
|
||||
cInfo->maxdmg = fields[24].GetFloat();
|
||||
cInfo->dmgschool = fields[25].GetUInt8();
|
||||
cInfo->attackpower = fields[26].GetUInt32();
|
||||
cInfo->dmg_multiplier = fields[27].GetFloat();
|
||||
cInfo->baseattacktime = fields[28].GetUInt32();
|
||||
cInfo->rangeattacktime = fields[29].GetUInt32();
|
||||
cInfo->unit_class = fields[30].GetUInt8();
|
||||
cInfo->unit_flags = fields[31].GetUInt32();
|
||||
cInfo->dynamicflags = fields[32].GetUInt32();
|
||||
cInfo->family = fields[33].GetUInt8();
|
||||
cInfo->trainer_type = fields[34].GetUInt8();
|
||||
cInfo->trainer_spell = fields[35].GetUInt32();
|
||||
cInfo->trainer_class = fields[36].GetUInt8();
|
||||
cInfo->trainer_race = fields[37].GetUInt8();
|
||||
cInfo->minrangedmg = fields[38].GetFloat();
|
||||
cInfo->maxrangedmg = fields[39].GetFloat();
|
||||
cInfo->rangedattackpower = fields[40].GetUInt16();
|
||||
cInfo->type = fields[41].GetUInt8();
|
||||
cInfo->type_flags = fields[42].GetUInt32();
|
||||
cInfo->lootid = fields[43].GetUInt32();
|
||||
cInfo->pickpocketLootId = fields[44].GetUInt32();
|
||||
cInfo->SkinLootId = fields[45].GetUInt32();
|
||||
|
||||
for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
|
||||
{
|
||||
const_cast<CreatureTemplate*>(cInfo)->resistance[i] = fields[46 + i -1].GetUInt32();
|
||||
}
|
||||
cInfo->resistance[i] = fields[46 + i -1].GetUInt16();
|
||||
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[0] = fields[52].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[1] = fields[53].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[2] = fields[54].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[3] = fields[55].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[4] = fields[56].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[5] = fields[57].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[6] = fields[58].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->spells[7] = fields[59].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->PetSpellDataId = fields[60].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->VehicleId = fields[61].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->mingold = fields[62].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->maxgold = fields[63].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->AIName = fields[64].GetString();
|
||||
const_cast<CreatureTemplate*>(cInfo)->MovementType = fields[65].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->InhabitType = fields[66].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->HoverHeight = fields[67].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->ModHealth = fields[68].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->ModMana = fields[69].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->ModArmor = fields[70].GetFloat();
|
||||
const_cast<CreatureTemplate*>(cInfo)->RacialLeader = fields[71].GetBool();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[0] = fields[72].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[1] = fields[73].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[2] = fields[74].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[3] = fields[75].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[4] = fields[76].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->questItems[5] = fields[77].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->movementId = fields[78].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->RegenHealth = fields[79].GetBool();
|
||||
const_cast<CreatureTemplate*>(cInfo)->equipmentId = fields[80].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->MechanicImmuneMask = fields[81].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->flags_extra = fields[82].GetUInt32();
|
||||
const_cast<CreatureTemplate*>(cInfo)->ScriptID = sObjectMgr->GetScriptId(fields[83].GetCString());
|
||||
cInfo->spells[0] = fields[52].GetUInt32();
|
||||
cInfo->spells[1] = fields[53].GetUInt32();
|
||||
cInfo->spells[2] = fields[54].GetUInt32();
|
||||
cInfo->spells[3] = fields[55].GetUInt32();
|
||||
cInfo->spells[4] = fields[56].GetUInt32();
|
||||
cInfo->spells[5] = fields[57].GetUInt32();
|
||||
cInfo->spells[6] = fields[58].GetUInt32();
|
||||
cInfo->spells[7] = fields[59].GetUInt32();
|
||||
cInfo->PetSpellDataId = fields[60].GetUInt32();
|
||||
cInfo->VehicleId = fields[61].GetUInt32();
|
||||
cInfo->mingold = fields[62].GetUInt32();
|
||||
cInfo->maxgold = fields[63].GetUInt32();
|
||||
cInfo->AIName = fields[64].GetString();
|
||||
cInfo->MovementType = fields[65].GetUInt8();
|
||||
cInfo->InhabitType = fields[66].GetUInt8();
|
||||
cInfo->HoverHeight = fields[67].GetFloat();
|
||||
cInfo->ModHealth = fields[68].GetFloat();
|
||||
cInfo->ModMana = fields[69].GetFloat();
|
||||
cInfo->ModArmor = fields[70].GetFloat();
|
||||
cInfo->RacialLeader = fields[71].GetBool();
|
||||
cInfo->questItems[0] = fields[72].GetUInt32();
|
||||
cInfo->questItems[1] = fields[73].GetUInt32();
|
||||
cInfo->questItems[2] = fields[74].GetUInt32();
|
||||
cInfo->questItems[3] = fields[75].GetUInt32();
|
||||
cInfo->questItems[4] = fields[76].GetUInt32();
|
||||
cInfo->questItems[5] = fields[77].GetUInt32();
|
||||
cInfo->movementId = fields[78].GetUInt32();
|
||||
cInfo->RegenHealth = fields[79].GetBool();
|
||||
cInfo->equipmentId = fields[80].GetUInt32();
|
||||
cInfo->MechanicImmuneMask = fields[81].GetUInt32();
|
||||
cInfo->flags_extra = fields[82].GetUInt32();
|
||||
cInfo->ScriptID = sObjectMgr->GetScriptId(fields[83].GetCString());
|
||||
|
||||
sObjectMgr->CheckCreatureTemplate(cInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user