diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index b1fcd4e6b..157a92eaa 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -3460,7 +3460,7 @@ namespace Game cellguids.creatures.Remove(guid); } } - public ulong AddCreatureData(uint entry, uint team, uint mapId, float x, float y, float z, float o, uint spawntimedelay) + public ulong AddCreatureData(uint entry, uint mapId, Position pos, uint spawntimedelay) { CreatureTemplate cInfo = GetCreatureTemplate(entry); if (cInfo == null) @@ -3480,10 +3480,7 @@ namespace Game data.mapid = (ushort)mapId; data.displayid = 0; data.equipmentId = 0; - data.posX = x; - data.posY = y; - data.posZ = z; - data.orientation = o; + pos.GetPosition(out data.posX, out data.posY, out data.posZ, out data.orientation); data.spawntimesecs = spawntimedelay; data.spawndist = 0; data.currentwaypoint = 0; @@ -3499,7 +3496,7 @@ namespace Game AddCreatureToGrid(guid, data); // We use spawn coords to spawn - if (!map.Instanceable() && !map.IsRemovalGrid(x, y)) + if (!map.Instanceable() && !map.IsRemovalGrid(data.posX, data.posY)) { Creature creature = Creature.CreateCreatureFromDB(guid, map); if (!creature) @@ -4332,7 +4329,7 @@ namespace Game cellguids.gameobjects.Remove(guid); } } - public ulong AddGOData(uint entry, uint mapId, float x, float y, float z, float o, uint spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3) + public ulong AddGOData(uint entry, uint mapId, Position pos, Quaternion rot, uint spawntimedelay) { GameObjectTemplate goinfo = GetGameObjectTemplate(entry); if (goinfo == null) @@ -4346,14 +4343,8 @@ namespace Game GameObjectData data = new GameObjectData(); data.id = entry; data.mapid = (ushort)mapId; - data.posX = x; - data.posY = y; - data.posZ = z; - data.orientation = o; - data.rotation.X = rotation0; - data.rotation.Y = rotation1; - data.rotation.Z = rotation2; - data.rotation.W = rotation3; + pos.GetPosition(out data.posX, out data.posY, out data.posZ, out data.orientation); + data.rotation = rot; data.spawntimesecs = (int)spawntimedelay; data.animprogress = 100; data.spawnDifficulties.Add(Difficulty.None); @@ -4366,7 +4357,7 @@ namespace Game // Spawn if necessary (loaded grids only) // We use spawn coords to spawn - if (!map.Instanceable() && map.IsGridLoaded(x, y)) + if (!map.Instanceable() && map.IsGridLoaded(data.posX, data.posY)) { GameObject go = GameObject.CreateGameObjectFromDB(guid, map); if (!go) @@ -4376,7 +4367,7 @@ namespace Game } } - Log.outDebug(LogFilter.Maps, "AddGOData: dbguid:{0} entry:{1} map:{2} x:{3} y:{4} z:{5} o:{6}", guid, entry, mapId, x, y, z, o); + Log.outDebug(LogFilter.Maps, "AddGOData: dbguid:{0} entry:{1} map:{2} x:{3} y:{4} z:{5} o:{6}", guid, entry, mapId, data.posX, data.posY, data.posZ, data.orientation); return guid; } diff --git a/Source/Game/OutdoorPVP/OutdoorPvP.cs b/Source/Game/OutdoorPVP/OutdoorPvP.cs index 8be54f995..17864e575 100644 --- a/Source/Game/OutdoorPVP/OutdoorPvP.cs +++ b/Source/Game/OutdoorPVP/OutdoorPvP.cs @@ -17,6 +17,7 @@ using Framework.Constants; using Framework.Database; +using Framework.GameMath; using Game.Chat; using Game.DataStorage; using Game.Entities; @@ -375,9 +376,9 @@ namespace Game.PvP m_CreatureTypes[guid] = type; } - public bool AddObject(uint type, uint entry, uint map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3) + public bool AddObject(uint type, uint entry, uint map, Position pos, Quaternion rot) { - ulong guid = Global.ObjectMgr.AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3); + ulong guid = Global.ObjectMgr.AddGOData(entry, map, pos, rot, 0); if (guid != 0) { AddGO(type, guid); @@ -387,9 +388,9 @@ namespace Game.PvP return false; } - public bool AddCreature(uint type, uint entry, uint team, uint map, float x, float y, float z, float o, uint spawntimedelay) + public bool AddCreature(uint type, uint entry, uint map, Position pos, uint team, uint spawntimedelay) { - ulong guid = Global.ObjectMgr.AddCreatureData(entry, team, map, x, y, z, o, spawntimedelay); + ulong guid = Global.ObjectMgr.AddCreatureData(entry, map, pos, spawntimedelay); if (guid != 0) { AddCre(type, guid); @@ -399,7 +400,7 @@ namespace Game.PvP return false; } - public bool SetCapturePointData(uint entry, uint map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3) + public bool SetCapturePointData(uint entry, uint map, Position pos, Quaternion rot) { Log.outDebug(LogFilter.Outdoorpvp, "Creating capture point {0}", entry); @@ -411,7 +412,7 @@ namespace Game.PvP return false; } - m_capturePointSpawnId = Global.ObjectMgr.AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3); + m_capturePointSpawnId = Global.ObjectMgr.AddGOData(entry, map, pos, rot, 0); if (m_capturePointSpawnId == 0) return false; @@ -755,26 +756,14 @@ namespace Game.PvP { entry = _entry; map = _map; - x = _x; - y = _y; - z = _z; - o = _o; - rot0 = _rot0; - rot1 = _rot1; - rot2 = _rot2; - rot3 = _rot3; + pos = new Position(_x, _y, _z, _o); + rot = new Quaternion(_rot0, _rot1, _rot2, _rot3); } public uint entry; public uint map; - public float x; - public float y; - public float z; - public float o; - public float rot0; - public float rot1; - public float rot2; - public float rot3; + public Position pos; + public Quaternion rot; } class creature_type @@ -783,17 +772,11 @@ namespace Game.PvP { entry = _entry; map = _map; - x = _x; - y = _y; - z = _z; - o = _o; + pos = new Position(_x, _y, _z, _o); } public uint entry; public uint map; - public float x; - public float y; - public float z; - public float o; + Position pos; } } diff --git a/Source/Game/OutdoorPVP/OutdoorPvPManager.cs b/Source/Game/OutdoorPVP/OutdoorPvPManager.cs index cb0e4ba25..2754245e6 100644 --- a/Source/Game/OutdoorPVP/OutdoorPvPManager.cs +++ b/Source/Game/OutdoorPVP/OutdoorPvPManager.cs @@ -43,11 +43,10 @@ namespace Game.PvP } uint count = 0; - uint typeId = 0; do { - typeId = result.Read(0); + uint typeId = result.Read(0); if (Global.DisableMgr.IsDisabledFor(DisableType.OutdoorPVP, typeId, null)) continue; @@ -58,36 +57,32 @@ namespace Game.PvP continue; } - OutdoorPvPData data = new OutdoorPvPData(); OutdoorPvPTypes realTypeId = (OutdoorPvPTypes)typeId; - data.TypeId = realTypeId; - data.ScriptId = Global.ObjectMgr.GetScriptId(result.Read(1)); - m_OutdoorPvPDatas[realTypeId] = data; + OutdoorPvPScriptIds[realTypeId] = Global.ObjectMgr.GetScriptId(result.Read(1)); ++count; } while (result.NextRow()); OutdoorPvP pvp; - for (byte i = 1; i < (int)OutdoorPvPTypes.Max; ++i) + for (OutdoorPvPTypes outdoorPvpType = OutdoorPvPTypes.HellfirePeninsula; outdoorPvpType < OutdoorPvPTypes.Max; ++outdoorPvpType) { - var outdoor = m_OutdoorPvPDatas.LookupByKey((OutdoorPvPTypes)i); - if (outdoor == null) + if (!OutdoorPvPScriptIds.ContainsKey(outdoorPvpType)) { - Log.outError(LogFilter.Sql, "Could not initialize OutdoorPvP object for type ID {0}; no entry in database.", i); + Log.outError(LogFilter.Sql, "Could not initialize OutdoorPvP object for type ID {0}; no entry in database.", outdoorPvpType); continue; } - pvp = Global.ScriptMgr.CreateOutdoorPvP(outdoor); + pvp = Global.ScriptMgr.CreateOutdoorPvP(OutdoorPvPScriptIds[outdoorPvpType]); if (pvp == null) { - Log.outError(LogFilter.Outdoorpvp, "Could not initialize OutdoorPvP object for type ID {0}; got NULL pointer from script.", i); + Log.outError(LogFilter.Outdoorpvp, "Could not initialize OutdoorPvP object for type ID {0}; got NULL pointer from script.", outdoorPvpType); continue; } if (!pvp.SetupOutdoorPvP()) { - Log.outError(LogFilter.Outdoorpvp, "Could not initialize OutdoorPvP object for type ID {0}; SetupOutdoorPvP failed.", i); + Log.outError(LogFilter.Outdoorpvp, "Could not initialize OutdoorPvP object for type ID {0}; SetupOutdoorPvP failed.", outdoorPvpType); continue; } @@ -237,15 +232,9 @@ namespace Game.PvP Dictionary m_OutdoorPvPMap = new Dictionary(); // Holds the outdoor PvP templates - Dictionary m_OutdoorPvPDatas = new Dictionary(); + Dictionary OutdoorPvPScriptIds = new Dictionary(); // update interval uint m_UpdateTimer; } - - public class OutdoorPvPData - { - public OutdoorPvPTypes TypeId; - public uint ScriptId; - } } diff --git a/Source/Game/OutdoorPVP/Zones/HellfirePeninsulaPvP.cs b/Source/Game/OutdoorPVP/Zones/HellfirePeninsulaPvP.cs index 1425801d1..50c927f2d 100644 --- a/Source/Game/OutdoorPVP/Zones/HellfirePeninsulaPvP.cs +++ b/Source/Game/OutdoorPVP/Zones/HellfirePeninsulaPvP.cs @@ -166,13 +166,8 @@ namespace Game.PvP { m_TowerType = (uint)type; - var capturepoint = HPConst.CapturePoints[m_TowerType]; - var towerflag = HPConst.TowerFlags[m_TowerType]; - - SetCapturePointData(capturepoint.entry, capturepoint.map, capturepoint.x, capturepoint.y, capturepoint.z, capturepoint.o, capturepoint.rot0, - capturepoint.rot1, capturepoint.rot2, capturepoint.rot3); - - AddObject((uint)type, towerflag.entry, towerflag.map, towerflag.x, towerflag.y, towerflag.z, towerflag.o, towerflag.rot0, towerflag.rot1, towerflag.rot2, towerflag.rot3); + SetCapturePointData(HPConst.CapturePoints[m_TowerType].entry, HPConst.CapturePoints[m_TowerType].map, HPConst.CapturePoints[m_TowerType].pos, HPConst.CapturePoints[m_TowerType].rot); + AddObject(m_TowerType, HPConst.TowerFlags[m_TowerType].entry, HPConst.TowerFlags[m_TowerType].map, HPConst.TowerFlags[m_TowerType].pos, HPConst.TowerFlags[m_TowerType].rot); } public override void ChangeState() diff --git a/Source/Game/Scripting/ScriptManager.cs b/Source/Game/Scripting/ScriptManager.cs index ea2aaa9bb..9a04807b4 100644 --- a/Source/Game/Scripting/ScriptManager.cs +++ b/Source/Game/Scripting/ScriptManager.cs @@ -729,10 +729,9 @@ namespace Game.Scripting } // OutdoorPvPScript - public OutdoorPvP CreateOutdoorPvP(OutdoorPvPData data) + public OutdoorPvP CreateOutdoorPvP(uint scriptId) { - Cypher.Assert(data != null); - return RunScriptRet(p => p.GetOutdoorPvP(), data.ScriptId, null); + return RunScriptRet(p => p.GetOutdoorPvP(), scriptId, null); } // WeatherScript