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/Commands | |
| parent | f963b8a225a70e7007536d5d4787483a2cade978 (diff) | |
Core/Entities: Created factory methods to create new areatriggers, creatures and gameobjects
Diffstat (limited to 'src/server/scripts/Commands')
| -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 |
4 files changed, 63 insertions, 61 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; } |
