diff options
| author | joschiwald <joschiwald.trinity@gmail.com> | 2018-01-27 21:47:37 +0100 |
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-01-27 23:02:46 +0100 |
| commit | 6226189a1687e1a2b4fb5a490031c22b5f334dc6 (patch) | |
| tree | d48fbc4a586203c0c4ae3721697d3428773e9e00 /src/server/scripts | |
| parent | f963b8a225a70e7007536d5d4787483a2cade978 (diff) | |
Core/Entities: Created factory methods to create new areatriggers, creatures and gameobjects
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 11 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_gobject.cpp | 15 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_npc.cpp | 19 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_wp.cpp | 79 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp | 9 | ||||
| -rw-r--r-- | src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | 67 |
6 files changed, 76 insertions, 124 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index a04ad5630f0..6e824b72288 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -938,19 +938,16 @@ public: if (!ve) return false; - Creature* v = new Creature(); - Map* map = handler->GetSession()->GetPlayer()->GetMap(); + Position pos = { x, y, z, o }; - if (!v->Create(map->GenerateLowGuid<HighGuid::Vehicle>(), map, entry, x, y, z, o, nullptr, id)) - { - delete v; + Creature* v = Creature::CreateCreature(entry, map, pos, id); + if (!v) return false; - } v->CopyPhaseFrom(handler->GetSession()->GetPlayer()); - map->AddToMap(v->ToCreature()); + map->AddToMap(v); return true; } diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index bc77d56e8a9..3f57f2c0fbc 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -142,13 +142,9 @@ public: Player* player = handler->GetSession()->GetPlayer(); Map* map = player->GetMap(); - GameObject* object = new GameObject(); - - if (!object->Create(objectInfo->entry, map, *player, QuaternionData::fromEulerAnglesZYX(player->GetOrientation(), 0.0f, 0.0f), 255, GO_STATE_READY)) - { - delete object; + GameObject* object = GameObject::CreateGameObject(objectInfo->entry, map, *player, QuaternionData::fromEulerAnglesZYX(player->GetOrientation(), 0.0f, 0.0f), 255, GO_STATE_READY); + if (!object) return false; - } object->CopyPhaseFrom(player); @@ -166,13 +162,10 @@ public: // this is required to avoid weird behavior and memory leaks delete object; - object = new GameObject(); // this will generate a new guid if the object is in an instance - if (!object->LoadGameObjectFromDB(spawnId, map)) - { - delete object; + object = GameObject::CreateGameObjectFromDB(spawnId, map); + if (!object) return false; - } /// @todo is it really necessary to add both the real and DB table guid here ? sObjectMgr->AddGameobjectToGrid(spawnId, ASSERT_NOTNULL(sObjectMgr->GetGOData(spawnId))); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 9cf62049b0d..2ecdd51b230 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -285,10 +285,6 @@ public: return false; Player* chr = handler->GetSession()->GetPlayer(); - float x = chr->GetPositionX(); - float y = chr->GetPositionY(); - float z = chr->GetPositionZ(); - float o = chr->GetOrientation(); Map* map = chr->GetMap(); if (Transport* trans = chr->GetTransport()) @@ -310,12 +306,9 @@ public: return true; } - Creature* creature = new Creature(); - if (!creature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, id, x, y, z, o)) - { - delete creature; + Creature* creature = Creature::CreateCreature(id, map, chr->GetPosition()); + if (!creature) return false; - } creature->CopyPhaseFrom(chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); @@ -326,12 +319,10 @@ public: // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior creature->CleanupsBeforeDelete(); delete creature; - creature = new Creature(); - if (!creature->LoadCreatureFromDB(db_guid, map)) - { - delete creature; + + creature = Creature::CreateCreatureFromDB(db_guid, map); + if (!creature) return false; - } sObjectMgr->AddCreatureToGrid(db_guid, sObjectMgr->GetCreatureData(db_guid)); return true; diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 4e4fa0289ce..2fa3a081435 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -665,22 +665,27 @@ public: target->AddObjectToRemoveList(); // re-create - Creature* wpCreature = new Creature(); - if (!wpCreature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) + Creature* wpCreature = Creature::CreateCreature(VISUAL_WAYPOINT, map, chr->GetPosition()); + if (!wpCreature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); - delete wpCreature; return false; } wpCreature->CopyPhaseFrom(chr); wpCreature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); + + ObjectGuid::LowType dbGuid = wpCreature->GetSpawnId(); + + // current "wpCreature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior + wpCreature->CleanupsBeforeDelete(); + delete wpCreature; + // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); - /// @todo Should we first use "Create" then use "LoadFromDB"? - if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map)) + wpCreature = Creature::CreateCreatureFromDB(dbGuid, map); + if (!wpCreature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); - delete wpCreature; return false; } @@ -876,31 +881,29 @@ public: Player* chr = handler->GetSession()->GetPlayer(); Map* map = chr->GetMap(); - float o = chr->GetOrientation(); + Position pos = { x, y, z, chr->GetOrientation() }; - Creature* wpCreature = new Creature(); - if (!wpCreature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, id, x, y, z, o)) + Creature* wpCreature = Creature::CreateCreature(id, map, pos); + if (!wpCreature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); - delete wpCreature; return false; } wpCreature->CopyPhaseFrom(chr); wpCreature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); - // Set "wpguid" column to the visual waypoint - stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); - stmt->setUInt64(0, wpCreature->GetSpawnId()); - stmt->setUInt32(1, pathid); - stmt->setUInt32(2, point); - WorldDatabase.Execute(stmt); + ObjectGuid::LowType dbGuid = wpCreature->GetSpawnId(); + + // current "wpCreature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior + wpCreature->CleanupsBeforeDelete(); + delete wpCreature; // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); - if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map)) + wpCreature = Creature::CreateCreatureFromDB(dbGuid, map); + if (!wpCreature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); - delete wpCreature; return false; } @@ -910,6 +913,13 @@ public: wpCreature->SetObjectScale(0.5f); wpCreature->SetLevel(std::min<uint32>(point, STRONG_MAX_LEVEL)); } + + // Set "wpguid" column to the visual waypoint + stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); + stmt->setUInt64(0, wpCreature->GetSpawnId()); + stmt->setUInt32(1, pathid); + stmt->setUInt32(2, point); + WorldDatabase.Execute(stmt); } while (result->NextRow()); @@ -939,24 +949,29 @@ public: uint32 id = VISUAL_WAYPOINT; Player* chr = handler->GetSession()->GetPlayer(); - float o = chr->GetOrientation(); Map* map = chr->GetMap(); + Position pos = { x, y, z, chr->GetOrientation() }; - Creature* creature = new Creature(); - if (!creature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, id, x, y, z, o)) + Creature* creature = Creature::CreateCreature(id, map, pos); + if (!creature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); - delete creature; return false; } creature->CopyPhaseFrom(chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); - if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map)) + ObjectGuid::LowType dbGuid = creature->GetSpawnId(); + + // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior + creature->CleanupsBeforeDelete(); + delete creature; + + creature = Creature::CreateCreatureFromDB(dbGuid, map); + if (!creature) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); - delete creature; return false; } @@ -992,22 +1007,28 @@ public: Player* chr = handler->GetSession()->GetPlayer(); Map* map = chr->GetMap(); + Position pos = { x, y, z, o }; - Creature* creature = new Creature(); - if (!creature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, id, x, y, z, o)) + Creature* creature = Creature::CreateCreature(id, map, pos); + if (!creature) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); - delete creature; return false; } creature->CopyPhaseFrom(chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); - if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map)) + ObjectGuid::LowType dbGuid = creature->GetSpawnId(); + + // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior + creature->CleanupsBeforeDelete(); + delete creature; + + creature = Creature::CreateCreatureFromDB(dbGuid, map); + if (!creature) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); - delete creature; return false; } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 7771e0b2781..9980c0d34db 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -89,13 +89,8 @@ public: // There is no other way afaik... void SpawnGameObject(uint32 entry, Position const& pos) { - GameObject* go = new GameObject(); - if (!go->Create(entry, instance, pos, QuaternionData(), 255, GO_STATE_READY)) - { - delete go; - return; - } - instance->AddToMap(go); + if (GameObject* go = GameObject::CreateGameObject(entry, instance, pos, QuaternionData(), 255, GO_STATE_READY)) + instance->AddToMap(go); } void OnGameObjectCreate(GameObject* go) override diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index ef24b8a5af1..d259e8585c6 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -149,70 +149,25 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) if (spellId == SI_SILITHYST_FLAG) { // if it was dropped away from the player's turn-in point, then create a silithyst mound, if it was dropped near the areatrigger, then it was dispelled by the outdoorpvp, so do nothing - switch (player->GetTeam()) + if (AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(player->GetTeam() == ALLIANCE ? SI_AREATRIGGER_A : SI_AREATRIGGER_H)) { - case ALLIANCE: + // 5.0f is safe-distance + if (player->GetDistance(atEntry->Pos.X, atEntry->Pos.Y, atEntry->Pos.Z) > 5.0f + atEntry->Radius) { - AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(SI_AREATRIGGER_A); - if (atEntry) + // he dropped it further, summon mound + Map* map = player->GetMap(); + if (GameObject* go = GameObject::CreateGameObject(SI_SILITHYST_MOUND, map, *player, QuaternionData(), 255, GO_STATE_READY)) { - // 5.0f is safe-distance - if (player->GetDistance(atEntry->Pos.X, atEntry->Pos.Y, atEntry->Pos.Z) > 5.0f + atEntry->Radius) - { - // he dropped it further, summon mound - GameObject* go = new GameObject(); - Map* map = player->GetMap(); - - if (!go->Create(SI_SILITHYST_MOUND, map, *player, QuaternionData(), 255, GO_STATE_READY)) - { - delete go; - return true; - } - - go->CopyPhaseFrom(player); - - go->SetRespawnTime(0); + go->CopyPhaseFrom(player); + go->SetRespawnTime(0); - if (!map->AddToMap(go)) - { - delete go; - return true; - } - } - } - } - break; - case HORDE: - { - AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(SI_AREATRIGGER_H); - if (atEntry) - { - // 5.0f is safe-distance - if (player->GetDistance(atEntry->Pos.X, atEntry->Pos.Y, atEntry->Pos.Z) > 5.0f + atEntry->Radius) + if (!map->AddToMap(go)) { - // he dropped it further, summon mound - GameObject* go = new GameObject(); - Map* map = player->GetMap(); - - if (!go->Create(SI_SILITHYST_MOUND, map, *player, QuaternionData(), 255, GO_STATE_READY)) - { - delete go; - return true; - } - - go->CopyPhaseFrom(player); - - go->SetRespawnTime(0); - - if (!map->AddToMap(go)) - { - delete go; - return true; - } + delete go; + return true; } } } - break; } return true; } |
