public static void PlayerJump(MsgAction action, GameState client) { if (client.Player.Dead || client.Player.ContainsFlag(((ulong)MsgUpdate.Flags.Dead)) || client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ghost)) { return; } if (client.ProgressBar != null) client.ProgressBar.End(client); client.Player.KillCount2 = 0; client.Player.SpiritFocus = false; ushort oldX = client.Player.X; ushort oldY = client.Player.Y; client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Intensify); client.Player.IntensifyPercent = 0; if (client.Player.OnCheckGuard) { client.Player.OnCheckGuard = false; client.MessageBox("Unable~to~check!", null, null, 0); DialyQuestsEffect.CheckCancelGuard(client); client.Player.CheckGuardSec = 0; } if (client.Team == null) { if (client.Player.SpookMap != null && client.Player.MapID == client.Player.SpookMap.ID && Kernel.GetDistance(client.Player.X, client.Player.Y, 36, 24) < 25) { ((INpc)new NpcSpawn { UID = 8798, Mesh = 7610, Type = Enums.NpcType.Talker, X = 36, Y = 24, MapID = client.Player.MapID }).SendSpawn(client); ((INpc)new NpcSpawn { UID = 8308, Mesh = 2507, Type = Enums.NpcType.Talker, X = 25, Y = 30, MapID = client.Player.MapID }).SendSpawn(client); } } else { if (client.Team.SpookMap != null && client.Player.MapID == client.Team.SpookMap.ID && Kernel.GetDistance(client.Player.X, client.Player.Y, 36, 24) < 25) { ((INpc)new NpcSpawn { UID = 8798, Mesh = 7610, Type = Enums.NpcType.Talker, X = 36, Y = 24, MapID = client.Player.MapID }).SendSpawn(client); ((INpc)new NpcSpawn { UID = 8308, Mesh = 2507, Type = Enums.NpcType.Talker, X = 25, Y = 30, MapID = client.Player.MapID }).SendSpawn(client); } } if (client.Player.MapID == 4000 && client.Player.X == 40 && client.Player.Y == 66) { client.MessageBox("Do you want to leave the Tower of Mystery?", (p) => { client.Player.Teleport(4020, 86, 74); client.Player.Update(MsgName.Mode.Effect, "zf2-e300", true); }); } if (client.Player.MapID == 3846||client.Player.MapID == 10137 && Kernel.SpawnNemesis2) { foreach (INpc Npc in client.Map.Npcs.Values) { if (Npc.MapID == 10137 && (Npc.UID == 3080) && Kernel.GetDistance(client.Player.X, client.Player.Y, Npc.X, Npc.Y) < 17) { Npc.SendSpawn(client); } } } if (client.Player.MapID == 10137 && Kernel.SpawnBanshee2) { foreach (INpc Npc in client.Map.Npcs.Values) { if (Npc.MapID == 1927 && (Npc.UID == 2999) && Kernel.GetDistance(client.Player.X, client.Player.Y, Npc.X, Npc.Y) < 17) { Npc.SendSpawn(client); } } } client.Player.Action = Enums.ConquerAction.None; client.Mining = false; if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.CastPray)) { client.Player.RemoveFlag((ulong)MsgUpdate.Flags.CastPray); foreach (var Client in client.Prayers) { if (Client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Praying)) { Client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Praying); } } client.Prayers.Clear(); } if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Praying)) { client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Praying); client.PrayLead = null; } Time32 Now = Time32.Now; client.Attackable = true; if (client.Player.AttackPacket != null) { client.Player.AttackPacket = null; } if (client.Player.Dead) { if (Now > client.Player.DeathStamp.AddSeconds(4)) { client.Disconnect(); return; } } ushort new_X = BitConverter.ToUInt16(action.ToArray(), 12); ushort new_Y = BitConverter.ToUInt16(action.ToArray(), 14); if (client.Player.MapID == 1700 && client.Player.X == 595 && client.Player.Y == 640) { client.Player.Teleport(1036, 215, 215); } #region Jump Failed MapID 1038 / Twin /* if (client.Player.MapID == 1038) { if (!(client.Player.X < 224 && client.Player.X > 3 && client.Player.Y < 211 && client.Player.Y > 3)) { if (new_X < 224 && new_Y < 211) { if (Kernel.GetDistance(client.Player.X, client.Player.Y, Game.GuildWar.LeftGate.X, Game.GuildWar.LeftGate.Y) < Kernel.GetDistance(client.Player.X, client.Player.Y, Game.GuildWar.RightGate.X, Game.GuildWar.RightGate.Y) || Kernel.GetDistance(client.Player.X, client.Player.Y, Game.SuperGuildWar.LeftGate.X, Game.SuperGuildWar.LeftGate.Y) < Kernel.GetDistance(client.Player.X, client.Player.Y, Game.SuperGuildWar.RightGate.X, Game.SuperGuildWar.RightGate.Y)) { if (Game.GuildWar.LeftGate.Mesh == (ushort)(240 + Game.GuildWar.LeftGate.Mesh % 10) || Game.SuperGuildWar.LeftGate.Mesh == (ushort)(240 + Game.SuperGuildWar.LeftGate.Mesh % 10)) { client.Player.Teleport(client.Player.X, client.Player.Y); client.Send(new MsgTalk("Invalid Jump!", Color.Red, MsgTalk.Talk)); return; } } else { if (Game.GuildWar.RightGate.Mesh == (ushort)(270 + Game.GuildWar.RightGate.Mesh % 10) || Game.SuperGuildWar.RightGate.Mesh == (ushort)(270 + Game.SuperGuildWar.RightGate.Mesh % 10)) { client.Player.Teleport(client.Player.X, client.Player.Y); client.Send(new MsgTalk("Invalid Jump!", Color.Red, MsgTalk.Talk)); return; } } } } } */ /*if (client.Player.MapID == 1002) { if (new_X == 310 && new_Y == 277) { if (client.Player.EntityFlag == Game.EntityFlag.Player) { _String str = new _String(true); str.UID = client.Player.UID; str.TextsCount = 1; str.Type = _String.Effect; str.Texts.Add("firemagic"); client.SendScreen(str, true); } } } */ #endregion if (client.lastJumpDistance == 0) goto Jump; if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride)) { int distance = Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y); ushort take = (ushort)(1.5F * (distance / 2)); if (client.Vigor >= take) { client.Vigor -= take; Vigor vigor = new Vigor(true); vigor.Amount = client.Vigor; vigor.Send(client); } else { } } #region Cheak Speed Hack client.LastJumpTime = (int)Kernel.maxJumpTime(client.lastJumpDistance); var serverstamp = Now.GetHashCode() - client.lastJumpTime.GetHashCode(); var clientstamp = action.TimeStamp.GetHashCode() - client.lastClientJumpTime.GetHashCode(); var speed = clientstamp - serverstamp; if (speed > 100) { client.speedHackSuspiction++; if (!client.Player.OnCyclone() && !client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride) && !client.Player.OnOblivion() && !client.Player.OnSuperman() && !client.Player.ContainsFlag3((ulong)MsgUpdate.Flags3.DragonCyclone) && !client.Player.OnSuperCyclone() && !client.Player.Transformed && client.speedHackSuspiction >= 3) { client.Disconnect(); } } else { client.speedHackSuspiction = Math.Max(0, client.speedHackSuspiction - 1); } #endregion if (Now < client.lastJumpTime.AddMilliseconds(client.LastJumpTime)) { bool doDisconnect = false; if (client.Player.Transformed) if (client.Player.TransformationID != 207 && client.Player.TransformationID != 267) doDisconnect = true; if (client.Player.Transformed && doDisconnect) { } if (client.Player.Transformed && !doDisconnect) { goto Jump; } if (!client.Player.OnCyclone() && !client.Player.ContainsFlag3((ulong)MsgUpdate.Flags3.DragonCyclone) && !client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride) && client.speedHackSuspiction >= 2) { // client.Disconnect(); } else if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride)) { int time = (int)Kernel.maxJumpTime(client.lastJumpDistance); int speedprc = Database.DataHolder.SteedSpeed(client.Equipment.TryGetItem(MsgItemInfo.Steed).Plus); if (speedprc != 0) { if (Now < client.lastJumpTime.AddMilliseconds(time - (time * speedprc / 100))) { //client.Player.Shift(client.Player.X, client.Player.Y); //return; } } else { //client.Player.Shift(client.Player.X, client.Player.Y); //return; } } } Jump: client.lastJumpDistance = Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y); client.lastClientJumpTime = action.TimeStamp; client.lastJumpTime = Now; Game.Map Map = client.Map; if (Map != null) { if (Map.Floor[new_X, new_Y, Game.MapObjectType.Player, null]) { if (Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y) <= 20) { client.Player.Action = Game.Enums.ConquerAction.Jump; client.Player.Facing = Kernel.GetAngle(action.X, action.Y, new_X, new_Y); client.Player.PX = client.Player.X; client.Player.PY = client.Player.Y; client.Player.X = new_X; client.Player.Y = new_Y; if (client.Player.MapID == MsgWarFlag.MapID) CheckForFlag(client); client.SendScreen(action, true); client.Screen.Reload(action); if (client.Player.InteractionInProgress && client.Player.InteractionSet) { if (client.Player.Body == 1003 || client.Player.Body == 1004) { if (Kernel.GamePool.ContainsKey(client.Player.InteractionWith)) { GameState ch = Kernel.GamePool[client.Player.InteractionWith]; Network.GamePackets.MsgAction general = new Network.GamePackets.MsgAction(true); general.UID = ch.Player.UID; general.X = new_X; general.Y = new_Y; general.ID = (MsgAction.Mode)156; ch.Send(general.ToArray()); ch.Player.Action = Game.Enums.ConquerAction.Jump; ch.Player.X = new_X; ch.Player.Y = new_Y; ch.Player.Facing = Kernel.GetAngle(ch.Player.X, ch.Player.Y, new_X, new_Y); ch.SendScreen(action, true); ch.Screen.Reload(general); client.SendScreen(action, true); client.Screen.Reload(general); } } } } else { client.Disconnect(); } } else { if (client.Player.Mode == Game.Enums.Mode.None) { client.Player.Teleport(client.Map.ID, client.Player.X, client.Player.Y); } } } else { if (Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y) <= 20) { client.Player.Action = Game.Enums.ConquerAction.Jump; client.Player.Facing = Kernel.GetAngle(action.X, action.Y, new_X, new_Y); client.Player.X = new_X; client.Player.Y = new_Y; client.SendScreen(action, true); client.Screen.Reload(action); } else { client.Disconnect(); } } #region DragonIsland /*if (client.Player.MapID == 10137) { var floor = Database.FloorItemTable.FloorItems.Where(i => i.ItemID == 1675 && i.MapID == 10137).FirstOrDefault(); if (oldX <= floor.X && client.Player.X > floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16) { client.Player.DragonIslandAttackable = true; } if (oldX >= floor.X && client.Player.X < floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16) { client.Player.DragonIslandAttackable = false; } floor = Database.FloorItemTable.FloorItems.Where(i => i.ItemID == 1674 && i.MapID == 10137).FirstOrDefault(); if (oldX <= floor.X && client.Player.X > floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16) { client.Player.DragonIslandAttackable = true; } if (oldX >= floor.X && client.Player.X < floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16) { client.Player.DragonIslandAttackable = false; } } */ #endregion if (client.Map.BaseID == 1038 && Game.GuildWar.IsWar || client.Player.MapID == 1234 && Game.SuperGuildWar.IsWar) { Game.Calculations.IsBreaking(client, oldX, oldY); } if (!client.Player.HasMagicDefender) { if (client.Team != null) { var owners = client.Team.Teammates.Where(x => x.Player.MagicDefenderOwner); if (owners != null) { foreach (var owner in owners) { if (Kernel.GetDistance(client.Player.X, client.Player.Y, owner.Player.X, owner.Player.Y) <= 4) { client.Player.HasMagicDefender = true; client.Player.MagicDefenderStamp = Time32.Now; client.Player.MagicDefenderSecs = (byte)(owner.Player.MagicDefenderStamp.AddSeconds(owner.Player.MagicDefenderSecs) - owner.Player.MagicDefenderStamp).AllSeconds(); client.Player.AddFlag3((ulong)MsgUpdate.Flags3.MagicDefender); MsgUpdate upgrade = new MsgUpdate(true); upgrade.UID = client.Player.UID; upgrade.Append((byte)MsgUpdate.DataType.AzureShield, 128, client.Player.MagicDefenderSecs, 0, 0); client.Send(upgrade.ToArray()); break; } } } } } else { client.Player.RemoveMagicDefender(); } }