aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2018-01-27 21:47:37 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2018-01-27 23:02:46 +0100
commit6226189a1687e1a2b4fb5a490031c22b5f334dc6 (patch)
treed48fbc4a586203c0c4ae3721697d3428773e9e00 /src/server/scripts/Commands
parentf963b8a225a70e7007536d5d4787483a2cade978 (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.cpp11
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp15
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp19
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp79
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;
}