aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
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
parentf963b8a225a70e7007536d5d4787483a2cade978 (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.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
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp9
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp67
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;
}