From d84fe44a814e07f49f5d37f4961f3fe89718c1a7 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 6 May 2018 15:29:39 -0400 Subject: [PATCH] Core/Misc: Misc fixes --- .../Game/DataStorage/ClientReader/DBReader.cs | 3 +-- Source/Game/Entities/Creature/Creature.cs | 2 +- Source/Game/Entities/Transport.cs | 25 ++++++++++--------- Source/Game/Handlers/MovementHandler.cs | 9 ++++--- .../Game/Network/Packets/MovementPackets.cs | 12 +++++---- Source/Game/OutdoorPVP/OutdoorPvP.cs | 17 ++++++------- Source/Game/Server/WorldManager.cs | 4 +-- 7 files changed, 38 insertions(+), 34 deletions(-) diff --git a/Source/Game/DataStorage/ClientReader/DBReader.cs b/Source/Game/DataStorage/ClientReader/DBReader.cs index dc4e98901..44fb0d994 100644 --- a/Source/Game/DataStorage/ClientReader/DBReader.cs +++ b/Source/Game/DataStorage/ClientReader/DBReader.cs @@ -55,8 +55,7 @@ namespace Game.DataStorage var records = ReadData(fileReader); foreach (var pair in records) { - using (MemoryStream ms = new MemoryStream(pair.Value)) - using (BinaryReader dataReader = new BinaryReader(ms, System.Text.Encoding.UTF8)) + using (BinaryReader dataReader = new BinaryReader(new MemoryStream(pair.Value), System.Text.Encoding.UTF8)) { var obj = new T(); diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 2ff76aaf9..cf566c573 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -1111,7 +1111,7 @@ namespace Game.Entities byte level = (byte)(minlevel == maxlevel ? minlevel : RandomHelper.URand(minlevel, maxlevel)); SetLevel(level); - if (!HasScalableLevels()) + if (HasScalableLevels()) { SetUInt32Value(UnitFields.ScalingLevelMin, cInfo.levelScaling.Value.MinLevel); SetUInt32Value(UnitFields.ScalingLevelMax, cInfo.levelScaling.Value.MaxLevel); diff --git a/Source/Game/Entities/Transport.cs b/Source/Game/Entities/Transport.cs index 171b50cb1..aff39f5be 100644 --- a/Source/Game/Entities/Transport.cs +++ b/Source/Game/Entities/Transport.cs @@ -283,12 +283,15 @@ namespace Game.Entities if (!IsInWorld) return; - _passengers.Add(passenger); - passenger.SetTransport(this); - passenger.m_movementInfo.transport.guid = GetGUID(); + if (_passengers.Add(passenger)) + { + passenger.SetTransport(this); + passenger.m_movementInfo.transport.guid = GetGUID(); - if (passenger.IsTypeId(TypeId.Player)) - Global.ScriptMgr.OnAddPassenger(this, passenger.ToPlayer()); + Player player = passenger.ToPlayer(); + if (player) + Global.ScriptMgr.OnAddPassenger(this, player); + } } public void RemovePassenger(WorldObject passenger) @@ -665,10 +668,8 @@ namespace Game.Entities z = nextFrame.Node.Loc.Z, o = nextFrame.InitialOrientation; - for (var i =0; i < _passengers.Count; ++i) + foreach(WorldObject obj in _passengers.ToList()) { - WorldObject obj = _passengers[i]; - float destX, destY, destZ, destO; obj.m_movementInfo.transport.pos.GetPosition(out destX, out destY, out destZ, out destO); TransportPosHelper.CalculatePassengerPosition(ref destX, ref destY, ref destZ, ref destO, x, y, z, o); @@ -693,7 +694,7 @@ namespace Game.Entities GetMap().AddToMap(this); } - void UpdatePassengerPositions(List passengers) + void UpdatePassengerPositions(HashSet passengers) { foreach (var passenger in passengers) { @@ -774,7 +775,7 @@ namespace Game.Entities ClearUpdateMask(true); } - public List GetPassengers() { return _passengers; } + public HashSet GetPassengers() { return _passengers; } public override uint GetTransportPeriod() { return GetUInt32Value(GameObjectFields.Level); } public void SetPeriod(uint period) { SetUInt32Value(GameObjectFields.Level, period); } @@ -799,8 +800,8 @@ namespace Game.Entities bool _triggeredArrivalEvent; bool _triggeredDepartureEvent; - List _passengers = new List(); - List _staticPassengers = new List(); + HashSet _passengers = new HashSet(); + HashSet _staticPassengers = new HashSet(); bool _delayedAddModel; bool _delayedTeleport; diff --git a/Source/Game/Handlers/MovementHandler.cs b/Source/Game/Handlers/MovementHandler.cs index d99afc5e7..f9e27abf2 100644 --- a/Source/Game/Handlers/MovementHandler.cs +++ b/Source/Game/Handlers/MovementHandler.cs @@ -32,12 +32,16 @@ namespace Game public partial class WorldSession { [WorldPacketHandler(ClientOpcodes.MoveChangeTransport, Processing = PacketProcessing.ThreadSafe)] - [WorldPacketHandler(ClientOpcodes.MoveFallReset, Processing = PacketProcessing.ThreadSafe)] + [WorldPacketHandler(ClientOpcodes.MoveDoubleJump, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveFallLand, Processing = PacketProcessing.ThreadSafe)] + [WorldPacketHandler(ClientOpcodes.MoveFallReset, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveHeartbeat, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveJump, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveSetFacing, Processing = PacketProcessing.ThreadSafe)] + [WorldPacketHandler(ClientOpcodes.MoveSetFly, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveSetPitch, Processing = PacketProcessing.ThreadSafe)] + [WorldPacketHandler(ClientOpcodes.MoveSetRunMode, Processing = PacketProcessing.ThreadSafe)] + [WorldPacketHandler(ClientOpcodes.MoveSetWalkMode, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveStartAscend, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveStartBackward, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveStartDescend, Processing = PacketProcessing.ThreadSafe)] @@ -55,7 +59,6 @@ namespace Game [WorldPacketHandler(ClientOpcodes.MoveStopStrafe, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveStopSwim, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveStopTurn, Processing = PacketProcessing.ThreadSafe)] - [WorldPacketHandler(ClientOpcodes.MoveDoubleJump, Processing = PacketProcessing.ThreadSafe)] void HandleMovement(ClientPlayerMovement packet) { HandleMovementOpcode(packet.GetOpcode(), packet.Status); @@ -566,6 +569,7 @@ namespace Game GetPlayer().SendMessageToSet(updateKnockBack, false); } + [WorldPacketHandler(ClientOpcodes.MoveEnableDoubleJumpAck, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveEnableSwimToFlyTransAck, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveFeatherFallAck, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveForceRootAck, Processing = PacketProcessing.ThreadSafe)] @@ -577,7 +581,6 @@ namespace Game [WorldPacketHandler(ClientOpcodes.MoveSetCanTurnWhileFallingAck, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveSetIgnoreMovementForcesAck, Processing = PacketProcessing.ThreadSafe)] [WorldPacketHandler(ClientOpcodes.MoveWaterWalkAck, Processing = PacketProcessing.ThreadSafe)] - [WorldPacketHandler(ClientOpcodes.MoveEnableDoubleJumpAck, Processing = PacketProcessing.ThreadSafe)] void HandleMovementAckMessage(MovementAckMessage movementAck) { GetPlayer().ValidateMovementInfo(movementAck.Ack.Status); diff --git a/Source/Game/Network/Packets/MovementPackets.cs b/Source/Game/Network/Packets/MovementPackets.cs index 82e686f6b..997ee7edd 100644 --- a/Source/Game/Network/Packets/MovementPackets.cs +++ b/Source/Game/Network/Packets/MovementPackets.cs @@ -76,10 +76,12 @@ namespace Game.Network.Packets var movementInfo = new MovementInfo(); movementInfo.Guid = data.ReadPackedGuid(); movementInfo.Time = data.ReadUInt32(); - movementInfo.Pos.posX = data.ReadFloat(); - movementInfo.Pos.posY = data.ReadFloat(); - movementInfo.Pos.posZ = data.ReadFloat(); - movementInfo.Pos.Orientation = data.ReadFloat(); + float x = data.ReadFloat(); + float y = data.ReadFloat(); + float z = data.ReadFloat(); + float o = data.ReadFloat(); + + movementInfo.Pos.Relocate(x, y, z, o); movementInfo.Pitch = data.ReadFloat(); movementInfo.SplineElevation = data.ReadFloat(); @@ -175,8 +177,8 @@ namespace Game.Network.Packets data.FlushBits(); if (hasFallDirection) { - data.WriteFloat(movementInfo.jump.cosAngle); data.WriteFloat(movementInfo.jump.sinAngle); + data.WriteFloat(movementInfo.jump.cosAngle); data.WriteFloat(movementInfo.jump.xyspeed); } } diff --git a/Source/Game/OutdoorPVP/OutdoorPvP.cs b/Source/Game/OutdoorPVP/OutdoorPvP.cs index dff5674fa..586215b67 100644 --- a/Source/Game/OutdoorPVP/OutdoorPvP.cs +++ b/Source/Game/OutdoorPVP/OutdoorPvP.cs @@ -321,8 +321,8 @@ namespace Game.PvP m_State = ObjectiveStates.Neutral; m_PvP = pvp; - m_activePlayers[0] = new List(); - m_activePlayers[1] = new List(); + m_activePlayers[0] = new HashSet(); + m_activePlayers[1] = new HashSet(); } public virtual bool HandlePlayerEnter(Player player) @@ -333,8 +333,7 @@ namespace Game.PvP player.SendUpdateWorldState(m_capturePoint.GetGoInfo().ControlZone.worldstate2, (uint)Math.Ceiling((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f)); player.SendUpdateWorldState(m_capturePoint.GetGoInfo().ControlZone.worldstate3, m_neutralValuePct); } - m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); - return true; + return m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); } public virtual void HandlePlayerLeave(Player player) @@ -531,8 +530,8 @@ namespace Game.PvP { if (player.IsOutdoorPvPActive()) { - m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); - HandlePlayerEnter(player); + if (m_activePlayers[player.GetTeamId()].Add(player.GetGUID())) + HandlePlayerEnter(player); } } @@ -652,9 +651,9 @@ namespace Game.PvP } // send to all players present in the area - foreach (var _guid in m_activePlayers[team]) + foreach (var playerGuid in m_activePlayers[team]) { - Player player = Global.ObjAccessor.FindPlayer(_guid); + Player player = Global.ObjAccessor.FindPlayer(playerGuid); if (player) player.KilledMonsterCredit(id, guid); } @@ -706,7 +705,7 @@ namespace Game.PvP public ulong m_capturePointSpawnId; public GameObject m_capturePoint; // active players in the area of the objective, 0 - alliance, 1 - horde - public List[] m_activePlayers = new List[2]; + public HashSet[] m_activePlayers = new HashSet[2]; // total shift needed to capture the objective public float m_maxValue; float m_minValue; diff --git a/Source/Game/Server/WorldManager.cs b/Source/Game/Server/WorldManager.cs index 05954dab9..66c728c5a 100644 --- a/Source/Game/Server/WorldManager.cs +++ b/Source/Game/Server/WorldManager.cs @@ -313,7 +313,7 @@ namespace Game Global.ObjectMgr.SetHighestGuids(); - /*if (!Global.MapMgr.ExistMapAndVMap(0, -6240.32f, 331.033f) || !Global.MapMgr.ExistMapAndVMap(0, -8949.95f, -132.493f) + if (!Global.MapMgr.ExistMapAndVMap(0, -6240.32f, 331.033f) || !Global.MapMgr.ExistMapAndVMap(0, -8949.95f, -132.493f) || !Global.MapMgr.ExistMapAndVMap(1, -618.518f, -4251.67f) || !Global.MapMgr.ExistMapAndVMap(0, 1676.35f, 1677.45f) || !Global.MapMgr.ExistMapAndVMap(1, 10311.3f, 832.463f) || !Global.MapMgr.ExistMapAndVMap(1, -2917.58f, -257.98f) || (WorldConfig.GetIntValue(WorldCfg.Expansion) != 0 && (!Global.MapMgr.ExistMapAndVMap(530, 10349.6f, -6357.29f) || !Global.MapMgr.ExistMapAndVMap(530, -3961.64f, -13931.2f)))) @@ -321,7 +321,7 @@ namespace Game Log.outError(LogFilter.ServerLoading, "Unable to load critical files - server shutting down !!!"); ShutdownServ(0, 0, ShutdownExitCode.Error); return; - }*/ + } // Initialize pool manager Global.PoolMgr.Initialize();