Untitled


SUBMITTED BY: Guest

DATE: Aug. 19, 2017, 11:38 p.m.

FORMAT: Text only

SIZE: 19.2 kB

HITS: 233

  1. public static void PlayerJump(MsgAction action, GameState client)
  2. {
  3. if (client.Player.Dead || client.Player.ContainsFlag(((ulong)MsgUpdate.Flags.Dead)) || client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ghost))
  4. {
  5. return;
  6. }
  7. if (client.ProgressBar != null)
  8. client.ProgressBar.End(client);
  9. client.Player.KillCount2 = 0;
  10. client.Player.SpiritFocus = false;
  11. ushort oldX = client.Player.X;
  12. ushort oldY = client.Player.Y;
  13. client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Intensify);
  14. client.Player.IntensifyPercent = 0;
  15. if (client.Player.OnCheckGuard)
  16. {
  17. client.Player.OnCheckGuard = false;
  18. client.MessageBox("Unable~to~check!", null, null, 0);
  19. DialyQuestsEffect.CheckCancelGuard(client);
  20. client.Player.CheckGuardSec = 0;
  21. }
  22. if (client.Team == null)
  23. {
  24. if (client.Player.SpookMap != null && client.Player.MapID == client.Player.SpookMap.ID && Kernel.GetDistance(client.Player.X, client.Player.Y, 36, 24) < 25)
  25. {
  26. ((INpc)new NpcSpawn
  27. {
  28. UID = 8798,
  29. Mesh = 7610,
  30. Type = Enums.NpcType.Talker,
  31. X = 36,
  32. Y = 24,
  33. MapID = client.Player.MapID
  34. }).SendSpawn(client);
  35. ((INpc)new NpcSpawn
  36. {
  37. UID = 8308,
  38. Mesh = 2507,
  39. Type = Enums.NpcType.Talker,
  40. X = 25,
  41. Y = 30,
  42. MapID = client.Player.MapID
  43. }).SendSpawn(client);
  44. }
  45. }
  46. else
  47. {
  48. if (client.Team.SpookMap != null && client.Player.MapID == client.Team.SpookMap.ID && Kernel.GetDistance(client.Player.X, client.Player.Y, 36, 24) < 25)
  49. {
  50. ((INpc)new NpcSpawn
  51. {
  52. UID = 8798,
  53. Mesh = 7610,
  54. Type = Enums.NpcType.Talker,
  55. X = 36,
  56. Y = 24,
  57. MapID = client.Player.MapID
  58. }).SendSpawn(client);
  59. ((INpc)new NpcSpawn
  60. {
  61. UID = 8308,
  62. Mesh = 2507,
  63. Type = Enums.NpcType.Talker,
  64. X = 25,
  65. Y = 30,
  66. MapID = client.Player.MapID
  67. }).SendSpawn(client);
  68. }
  69. }
  70. if (client.Player.MapID == 4000 && client.Player.X == 40 && client.Player.Y == 66)
  71. {
  72. client.MessageBox("Do you want to leave the Tower of Mystery?",
  73. (p) =>
  74. {
  75. client.Player.Teleport(4020, 86, 74);
  76. client.Player.Update(MsgName.Mode.Effect, "zf2-e300", true);
  77. });
  78. }
  79. if (client.Player.MapID == 3846||client.Player.MapID == 10137 && Kernel.SpawnNemesis2)
  80. {
  81. foreach (INpc Npc in client.Map.Npcs.Values)
  82. {
  83. if (Npc.MapID == 10137 && (Npc.UID == 3080) && Kernel.GetDistance(client.Player.X, client.Player.Y, Npc.X, Npc.Y) < 17)
  84. {
  85. Npc.SendSpawn(client);
  86. }
  87. }
  88. }
  89. if (client.Player.MapID == 10137 && Kernel.SpawnBanshee2)
  90. {
  91. foreach (INpc Npc in client.Map.Npcs.Values)
  92. {
  93. if (Npc.MapID == 1927 && (Npc.UID == 2999) && Kernel.GetDistance(client.Player.X, client.Player.Y, Npc.X, Npc.Y) < 17)
  94. {
  95. Npc.SendSpawn(client);
  96. }
  97. }
  98. }
  99. client.Player.Action = Enums.ConquerAction.None;
  100. client.Mining = false;
  101. if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.CastPray))
  102. {
  103. client.Player.RemoveFlag((ulong)MsgUpdate.Flags.CastPray);
  104. foreach (var Client in client.Prayers)
  105. {
  106. if (Client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Praying))
  107. {
  108. Client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Praying);
  109. }
  110. }
  111. client.Prayers.Clear();
  112. }
  113. if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Praying))
  114. {
  115. client.Player.RemoveFlag((ulong)MsgUpdate.Flags.Praying);
  116. client.PrayLead = null;
  117. }
  118. Time32 Now = Time32.Now;
  119. client.Attackable = true;
  120. if (client.Player.AttackPacket != null)
  121. {
  122. client.Player.AttackPacket = null;
  123. }
  124. if (client.Player.Dead)
  125. {
  126. if (Now > client.Player.DeathStamp.AddSeconds(4))
  127. {
  128. client.Disconnect();
  129. return;
  130. }
  131. }
  132. ushort new_X = BitConverter.ToUInt16(action.ToArray(), 12);
  133. ushort new_Y = BitConverter.ToUInt16(action.ToArray(), 14);
  134. if (client.Player.MapID == 1700 && client.Player.X == 595 && client.Player.Y == 640)
  135. {
  136. client.Player.Teleport(1036, 215, 215);
  137. }
  138. #region Jump Failed MapID 1038 / Twin
  139. /* if (client.Player.MapID == 1038)
  140. {
  141. if (!(client.Player.X < 224 && client.Player.X > 3 && client.Player.Y < 211 && client.Player.Y > 3))
  142. {
  143. if (new_X < 224 && new_Y < 211)
  144. {
  145. 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) ||
  146. 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))
  147. {
  148. if (Game.GuildWar.LeftGate.Mesh == (ushort)(240 + Game.GuildWar.LeftGate.Mesh % 10) ||
  149. Game.SuperGuildWar.LeftGate.Mesh == (ushort)(240 + Game.SuperGuildWar.LeftGate.Mesh % 10))
  150. {
  151. client.Player.Teleport(client.Player.X, client.Player.Y);
  152. client.Send(new MsgTalk("Invalid Jump!", Color.Red, MsgTalk.Talk));
  153. return;
  154. }
  155. }
  156. else
  157. {
  158. if (Game.GuildWar.RightGate.Mesh == (ushort)(270 + Game.GuildWar.RightGate.Mesh % 10) ||
  159. Game.SuperGuildWar.RightGate.Mesh == (ushort)(270 + Game.SuperGuildWar.RightGate.Mesh % 10))
  160. {
  161. client.Player.Teleport(client.Player.X, client.Player.Y);
  162. client.Send(new MsgTalk("Invalid Jump!", Color.Red, MsgTalk.Talk));
  163. return;
  164. }
  165. }
  166. }
  167. }
  168. } */
  169. /*if (client.Player.MapID == 1002)
  170. {
  171. if (new_X == 310 && new_Y == 277)
  172. {
  173. if (client.Player.EntityFlag == Game.EntityFlag.Player)
  174. {
  175. _String str = new _String(true);
  176. str.UID = client.Player.UID;
  177. str.TextsCount = 1;
  178. str.Type = _String.Effect;
  179. str.Texts.Add("firemagic");
  180. client.SendScreen(str, true);
  181. }
  182. }
  183. } */
  184. #endregion
  185. if (client.lastJumpDistance == 0) goto Jump;
  186. if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride))
  187. {
  188. int distance = Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y);
  189. ushort take = (ushort)(1.5F * (distance / 2));
  190. if (client.Vigor >= take)
  191. {
  192. client.Vigor -= take;
  193. Vigor vigor = new Vigor(true);
  194. vigor.Amount = client.Vigor;
  195. vigor.Send(client);
  196. }
  197. else
  198. {
  199. }
  200. }
  201. #region Cheak Speed Hack
  202. client.LastJumpTime = (int)Kernel.maxJumpTime(client.lastJumpDistance);
  203. var serverstamp = Now.GetHashCode() - client.lastJumpTime.GetHashCode();
  204. var clientstamp = action.TimeStamp.GetHashCode() - client.lastClientJumpTime.GetHashCode();
  205. var speed = clientstamp - serverstamp;
  206. if (speed > 100)
  207. {
  208. client.speedHackSuspiction++;
  209. 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)
  210. {
  211. client.Disconnect();
  212. }
  213. }
  214. else
  215. {
  216. client.speedHackSuspiction = Math.Max(0, client.speedHackSuspiction - 1);
  217. }
  218. #endregion
  219. if (Now < client.lastJumpTime.AddMilliseconds(client.LastJumpTime))
  220. {
  221. bool doDisconnect = false;
  222. if (client.Player.Transformed)
  223. if (client.Player.TransformationID != 207 && client.Player.TransformationID != 267)
  224. doDisconnect = true;
  225. if (client.Player.Transformed && doDisconnect)
  226. {
  227. }
  228. if (client.Player.Transformed && !doDisconnect)
  229. {
  230. goto Jump;
  231. }
  232. if (!client.Player.OnCyclone() && !client.Player.ContainsFlag3((ulong)MsgUpdate.Flags3.DragonCyclone) && !client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride) && client.speedHackSuspiction >= 2)
  233. {
  234. // client.Disconnect();
  235. }
  236. else if (client.Player.ContainsFlag((ulong)MsgUpdate.Flags.Ride))
  237. {
  238. int time = (int)Kernel.maxJumpTime(client.lastJumpDistance);
  239. int speedprc = Database.DataHolder.SteedSpeed(client.Equipment.TryGetItem(MsgItemInfo.Steed).Plus);
  240. if (speedprc != 0)
  241. {
  242. if (Now < client.lastJumpTime.AddMilliseconds(time - (time * speedprc / 100)))
  243. {
  244. //client.Player.Shift(client.Player.X, client.Player.Y);
  245. //return;
  246. }
  247. }
  248. else
  249. {
  250. //client.Player.Shift(client.Player.X, client.Player.Y);
  251. //return;
  252. }
  253. }
  254. }
  255. Jump:
  256. client.lastJumpDistance = Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y);
  257. client.lastClientJumpTime = action.TimeStamp;
  258. client.lastJumpTime = Now;
  259. Game.Map Map = client.Map;
  260. if (Map != null)
  261. {
  262. if (Map.Floor[new_X, new_Y, Game.MapObjectType.Player, null])
  263. {
  264. if (Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y) <= 20)
  265. {
  266. client.Player.Action = Game.Enums.ConquerAction.Jump;
  267. client.Player.Facing = Kernel.GetAngle(action.X, action.Y, new_X, new_Y);
  268. client.Player.PX = client.Player.X;
  269. client.Player.PY = client.Player.Y;
  270. client.Player.X = new_X;
  271. client.Player.Y = new_Y;
  272. if (client.Player.MapID == MsgWarFlag.MapID)
  273. CheckForFlag(client);
  274. client.SendScreen(action, true);
  275. client.Screen.Reload(action);
  276. if (client.Player.InteractionInProgress && client.Player.InteractionSet)
  277. {
  278. if (client.Player.Body == 1003 || client.Player.Body == 1004)
  279. {
  280. if (Kernel.GamePool.ContainsKey(client.Player.InteractionWith))
  281. {
  282. GameState ch = Kernel.GamePool[client.Player.InteractionWith];
  283. Network.GamePackets.MsgAction general = new Network.GamePackets.MsgAction(true);
  284. general.UID = ch.Player.UID;
  285. general.X = new_X;
  286. general.Y = new_Y;
  287. general.ID = (MsgAction.Mode)156;
  288. ch.Send(general.ToArray());
  289. ch.Player.Action = Game.Enums.ConquerAction.Jump;
  290. ch.Player.X = new_X;
  291. ch.Player.Y = new_Y;
  292. ch.Player.Facing = Kernel.GetAngle(ch.Player.X, ch.Player.Y, new_X, new_Y);
  293. ch.SendScreen(action, true);
  294. ch.Screen.Reload(general);
  295. client.SendScreen(action, true);
  296. client.Screen.Reload(general);
  297. }
  298. }
  299. }
  300. }
  301. else
  302. {
  303. client.Disconnect();
  304. }
  305. }
  306. else
  307. {
  308. if (client.Player.Mode == Game.Enums.Mode.None)
  309. {
  310. client.Player.Teleport(client.Map.ID, client.Player.X, client.Player.Y);
  311. }
  312. }
  313. }
  314. else
  315. {
  316. if (Kernel.GetDistance(new_X, new_Y, client.Player.X, client.Player.Y) <= 20)
  317. {
  318. client.Player.Action = Game.Enums.ConquerAction.Jump;
  319. client.Player.Facing = Kernel.GetAngle(action.X, action.Y, new_X, new_Y);
  320. client.Player.X = new_X;
  321. client.Player.Y = new_Y;
  322. client.SendScreen(action, true);
  323. client.Screen.Reload(action);
  324. }
  325. else
  326. {
  327. client.Disconnect();
  328. }
  329. }
  330. #region DragonIsland
  331. /*if (client.Player.MapID == 10137)
  332. {
  333. var floor = Database.FloorItemTable.FloorItems.Where(i => i.ItemID == 1675 && i.MapID == 10137).FirstOrDefault();
  334. if (oldX <= floor.X && client.Player.X > floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16)
  335. {
  336. client.Player.DragonIslandAttackable = true;
  337. }
  338. if (oldX >= floor.X && client.Player.X < floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16)
  339. {
  340. client.Player.DragonIslandAttackable = false;
  341. }
  342. floor = Database.FloorItemTable.FloorItems.Where(i => i.ItemID == 1674 && i.MapID == 10137).FirstOrDefault();
  343. if (oldX <= floor.X && client.Player.X > floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16)
  344. {
  345. client.Player.DragonIslandAttackable = true;
  346. }
  347. if (oldX >= floor.X && client.Player.X < floor.X && Kernel.GetDistance(client.Player.X, client.Player.Y, floor.X, floor.Y) < 16)
  348. {
  349. client.Player.DragonIslandAttackable = false;
  350. }
  351. } */
  352. #endregion
  353. if (client.Map.BaseID == 1038 && Game.GuildWar.IsWar || client.Player.MapID == 1234 && Game.SuperGuildWar.IsWar)
  354. {
  355. Game.Calculations.IsBreaking(client, oldX, oldY);
  356. }
  357. if (!client.Player.HasMagicDefender)
  358. {
  359. if (client.Team != null)
  360. {
  361. var owners = client.Team.Teammates.Where(x => x.Player.MagicDefenderOwner);
  362. if (owners != null)
  363. {
  364. foreach (var owner in owners)
  365. {
  366. if (Kernel.GetDistance(client.Player.X, client.Player.Y, owner.Player.X, owner.Player.Y) <= 4)
  367. {
  368. client.Player.HasMagicDefender = true;
  369. client.Player.MagicDefenderStamp = Time32.Now;
  370. client.Player.MagicDefenderSecs = (byte)(owner.Player.MagicDefenderStamp.AddSeconds(owner.Player.MagicDefenderSecs) - owner.Player.MagicDefenderStamp).AllSeconds();
  371. client.Player.AddFlag3((ulong)MsgUpdate.Flags3.MagicDefender);
  372. MsgUpdate upgrade = new MsgUpdate(true);
  373. upgrade.UID = client.Player.UID;
  374. upgrade.Append((byte)MsgUpdate.DataType.AzureShield, 128, client.Player.MagicDefenderSecs, 0, 0);
  375. client.Send(upgrade.ToArray());
  376. break;
  377. }
  378. }
  379. }
  380. }
  381. }
  382. else
  383. {
  384. client.Player.RemoveMagicDefender();
  385. }
  386. }

comments powered by Disqus