Guest User

Untitled

a guest
Jun 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.97 KB | None | 0 0
  1. package rsca.gs.phandler.client;
  2.  
  3. import org.apache.mina.common.IoSession;
  4.  
  5. import rsca.config.Formulae;
  6. import rsca.gs.Instance;
  7. import rsca.gs.connection.Packet;
  8. import rsca.gs.connection.RSCPacket;
  9. import rsca.gs.event.DuelEvent;
  10. import rsca.gs.event.SingleEvent;
  11. import rsca.gs.event.WalkToMobEvent;
  12. import rsca.gs.external.ItemDef;
  13. import rsca.gs.model.InvItem;
  14. import rsca.gs.model.Inventory;
  15. import rsca.gs.model.Player;
  16. import rsca.gs.model.World;
  17. import rsca.gs.phandler.PacketHandler;
  18. import rsca.gs.states.Action;
  19. import rsca.gs.tools.DataConversions;
  20.  
  21. public class DuelHandler implements PacketHandler {
  22. /**
  23. * World instance
  24. */
  25. public static final World world = Instance.getWorld();
  26.  
  27. private boolean busy(Player player) {
  28. return player.isBusy() || player.isRanging() || player.accessingBank()
  29. || player.isTrading();
  30. }
  31.  
  32. public void handlePacket(Packet p, IoSession session) throws Exception {
  33. Player player = (Player) session.getAttachment();
  34. int pID = ((RSCPacket) p).getID();
  35. if (!World.DUEL) {
  36. player.getActionSender().sendMessage(
  37. "This feature has been disabled temporarily");
  38. return;
  39. }
  40.  
  41. if(player.getX() < 209 && player.getX() > 231 && player.getY() < 639 && player.getY() > 652) {
  42. player.getActionSender().sendMessage("You can not duel here, please move to draynor");
  43. return;
  44. }
  45. Player affectedPlayer = player.getWishToDuel();
  46. if (player == affectedPlayer) {
  47. System.out.println("Warning : " + player.getUsername()
  48. + " tried to duel himself");
  49. unsetOptions(player);
  50. unsetOptions(affectedPlayer);
  51. return;
  52. }
  53. if (player.isDuelConfirmAccepted() && affectedPlayer != null
  54. && affectedPlayer.isDuelConfirmAccepted()) {
  55. // If we are actually dueling we shouldn't touch any settings
  56. // (modify or unset!)
  57. return;
  58. }
  59. if (busy(player) || player.getLocation().inWilderness()) {
  60. unsetOptions(player);
  61. unsetOptions(affectedPlayer);
  62. return;
  63. }
  64. if (player.getLocation().inModRoom()) {
  65. player.getActionSender().sendMessage("You cannot duel in here!");
  66. unsetOptions(player);
  67. unsetOptions(affectedPlayer);
  68. return;
  69. }
  70. switch (pID) {
  71. case 222: // Sending duel request
  72. affectedPlayer = world.getPlayer(p.readShort());
  73. if (affectedPlayer == null || affectedPlayer.isDueling()
  74. || !player.withinRange(affectedPlayer, 8)
  75. || player.isDueling() || player.tradeDuelThrottling()) {
  76. unsetOptions(player);
  77. return;
  78. }
  79.  
  80. if ((affectedPlayer.getPrivacySetting(3) && !affectedPlayer
  81. .isFriendsWith(player.getUsernameHash()))
  82. || affectedPlayer.isIgnoring(player.getUsernameHash())) {
  83. player.getActionSender().sendMessage(
  84. "This player has duel requests blocked.");
  85. return;
  86. }
  87.  
  88. player.setWishToDuel(affectedPlayer);
  89. player.getActionSender().sendMessage(
  90. affectedPlayer.isDueling() ? affectedPlayer.getUsername()
  91. + " is already in a duel" : "Sending duel request");
  92. affectedPlayer.getActionSender().sendMessage(
  93. player.getUsername()
  94. + " "
  95. + Formulae.getLvlDiffColour(affectedPlayer
  96. .getCombatLevel()
  97. - player.getCombatLevel()) + "(level-"
  98. + player.getCombatLevel()
  99. + ")@whi@ wishes to duel with you");
  100.  
  101. if (!player.isDueling() && affectedPlayer.getWishToDuel() != null
  102. && affectedPlayer.getWishToDuel().equals(player)
  103. && !affectedPlayer.isDueling()) {
  104. player.setDueling(true);
  105. player.resetPath();
  106. player.clearDuelOptions();
  107. player.resetAllExceptDueling();
  108. affectedPlayer.setDueling(true);
  109. affectedPlayer.resetPath();
  110. affectedPlayer.clearDuelOptions();
  111. affectedPlayer.resetAllExceptDueling();
  112.  
  113. player.getActionSender().sendDuelWindowOpen();
  114. affectedPlayer.getActionSender().sendDuelWindowOpen();
  115. }
  116. break;
  117. case 252: // Duel accepted
  118. affectedPlayer = player.getWishToDuel();
  119. if (affectedPlayer == null || busy(affectedPlayer)
  120. || !player.isDueling() || !affectedPlayer.isDueling()) { // This
  121. // shouldn't
  122. // happen
  123. player.setSuspiciousPlayer(true);
  124. unsetOptions(player);
  125. unsetOptions(affectedPlayer);
  126. return;
  127. }
  128.  
  129. player.setDuelOfferAccepted(true);
  130.  
  131. player.getActionSender().sendDuelAcceptUpdate();
  132. affectedPlayer.getActionSender().sendDuelAcceptUpdate();
  133.  
  134. if (affectedPlayer.isDuelOfferAccepted()) {
  135. player.getActionSender().sendDuelAccept();
  136. affectedPlayer.getActionSender().sendDuelAccept();
  137. }
  138. break;
  139. case 87: // Confirm accepted
  140. affectedPlayer = player.getWishToDuel();
  141. if (affectedPlayer == null || busy(affectedPlayer)
  142. || !player.isDueling() || !affectedPlayer.isDueling()
  143. || !player.isDuelOfferAccepted()
  144. || !affectedPlayer.isDuelOfferAccepted()) { // This
  145. // shouldn't
  146. // happen
  147. player.setSuspiciousPlayer(true);
  148. unsetOptions(player);
  149. unsetOptions(affectedPlayer);
  150. return;
  151. }
  152. player.setDuelConfirmAccepted(true);
  153.  
  154. if (affectedPlayer.isDuelConfirmAccepted()) {
  155. player.getActionSender().sendDuelWindowClose();
  156. player.getActionSender().sendMessage("Commencing Duel");
  157. affectedPlayer.getActionSender().sendDuelWindowClose();
  158. affectedPlayer.getActionSender().sendMessage("Commencing Duel");
  159.  
  160. player.resetAllExceptDueling();
  161. player.setBusy(true);
  162. player.setStatus(Action.DUELING_PLAYER);
  163.  
  164. affectedPlayer.resetAllExceptDueling();
  165. affectedPlayer.setBusy(true);
  166. affectedPlayer.setStatus(Action.DUELING_PLAYER);
  167.  
  168. if (player.getDuelSetting(3)) {
  169. for (InvItem item : player.getInventory().getItems()) {
  170. if (item.isWielded()) {
  171. item.setWield(false);
  172. player.updateWornItems(item.getWieldableDef()
  173. .getWieldPos(), player
  174. .getPlayerAppearance().getSprite(
  175. item.getWieldableDef()
  176. .getWieldPos()));
  177. }
  178. }
  179. player.getActionSender().sendSound("click");
  180. player.getActionSender().sendInventory();
  181. player.getActionSender().sendEquipmentStats();
  182.  
  183. for (InvItem item : affectedPlayer.getInventory()
  184. .getItems()) {
  185. if (item.isWielded()) {
  186. item.setWield(false);
  187. affectedPlayer.updateWornItems(item
  188. .getWieldableDef().getWieldPos(),
  189. affectedPlayer.getPlayerAppearance()
  190. .getSprite(
  191. item.getWieldableDef()
  192. .getWieldPos()));
  193. }
  194. }
  195. affectedPlayer.getActionSender().sendSound("click");
  196. affectedPlayer.getActionSender().sendInventory();
  197. affectedPlayer.getActionSender().sendEquipmentStats();
  198.  
  199. }
  200.  
  201. if (player.getDuelSetting(2)) {
  202. for (int x = 0; x < 14; x++) {
  203. if (player.isPrayerActivated(x)) {
  204. player.removePrayerDrain(x);
  205. player.setPrayer(x, false);
  206. }
  207. if (affectedPlayer.isPrayerActivated(x)) {
  208. affectedPlayer.removePrayerDrain(x);
  209. affectedPlayer.setPrayer(x, false);
  210. }
  211. }
  212. player.getActionSender().sendPrayers();
  213. affectedPlayer.getActionSender().sendPrayers();
  214. }
  215.  
  216. player.setFollowing(affectedPlayer);
  217. WalkToMobEvent walking = new WalkToMobEvent(player,
  218. affectedPlayer, 1) {
  219. public void arrived() {
  220. Instance.getDelayedEventHandler().add(
  221. new SingleEvent(owner, 300) {
  222. public void action() {
  223. Player affectedPlayer = (Player) affectedMob;
  224. owner.resetPath();
  225. if (!owner.nextTo(affectedPlayer)) {
  226. unsetOptions(owner);
  227. unsetOptions(affectedPlayer);
  228. return;
  229. }
  230. affectedPlayer.resetPath();
  231.  
  232. owner.resetAllExceptDueling();
  233. affectedPlayer.resetAllExceptDueling();
  234.  
  235. owner.setLocation(affectedPlayer
  236. .getLocation(), true);
  237. for (Player p : owner.getViewArea()
  238. .getPlayersInView()) {
  239. p.removeWatchedPlayer(owner);
  240. }
  241.  
  242. owner.setSprite(9);
  243. owner.setOpponent(affectedMob);
  244. owner.setCombatTimer();
  245.  
  246. affectedPlayer.setSprite(8);
  247. affectedPlayer.setOpponent(owner);
  248. affectedPlayer.setCombatTimer();
  249.  
  250. Player attacker, opponent;
  251. if (owner.getCombatLevel() > affectedPlayer
  252. .getCombatLevel()) {
  253. attacker = affectedPlayer;
  254. opponent = owner;
  255. } else if (affectedPlayer
  256. .getCombatLevel() > owner
  257. .getCombatLevel()) {
  258. attacker = owner;
  259. opponent = affectedPlayer;
  260. } else if (DataConversions.random(0, 1) == 1) {
  261. attacker = owner;
  262. opponent = affectedPlayer;
  263. } else {
  264. attacker = affectedPlayer;
  265. opponent = owner;
  266. }
  267. DuelEvent dueling = new DuelEvent(
  268. attacker, opponent);
  269. dueling.setLastRun(0);
  270. Instance.getDelayedEventHandler().add(
  271. dueling);
  272. }
  273. });
  274. }
  275.  
  276. public void failed() {
  277. Player affectedPlayer = (Player) affectedMob;
  278. owner.getActionSender().sendMessage(
  279. "Error walking to "
  280. + affectedPlayer.getUsername()
  281. + " (known bug)");
  282. affectedPlayer.getActionSender().sendMessage(
  283. "Error walking to " + owner.getUsername()
  284. + " (known bug)");
  285. unsetOptions(owner);
  286. unsetOptions(affectedPlayer);
  287. owner.setBusy(false);
  288. affectedPlayer.setBusy(false);
  289. }
  290. };
  291. walking.setLastRun(System.currentTimeMillis() + 500);
  292. Instance.getDelayedEventHandler().add(walking);
  293. }
  294. break;
  295. case 35: // Decline duel
  296. affectedPlayer = player.getWishToDuel();
  297. if (affectedPlayer == null || busy(affectedPlayer)
  298. || !player.isDueling() || !affectedPlayer.isDueling()) { // This
  299. // shouldn't
  300. // happen
  301. player.setSuspiciousPlayer(true);
  302. unsetOptions(player);
  303. unsetOptions(affectedPlayer);
  304. return;
  305. }
  306. affectedPlayer.getActionSender().sendMessage(
  307. player.getUsername() + " has declined the duel.");
  308.  
  309. unsetOptions(player);
  310. unsetOptions(affectedPlayer);
  311. break;
  312. case 123: // Receive offered item data
  313. affectedPlayer = player.getWishToDuel();
  314. if (affectedPlayer == null
  315. || busy(affectedPlayer)
  316. || !player.isDueling()
  317. || !affectedPlayer.isDueling()
  318. || (player.isDuelOfferAccepted() && affectedPlayer
  319. .isDuelOfferAccepted())
  320. || player.isDuelConfirmAccepted()
  321. || affectedPlayer.isDuelConfirmAccepted()) { // This
  322. // shouldn't
  323. // happen
  324. player.setSuspiciousPlayer(true);
  325. unsetOptions(player);
  326. unsetOptions(affectedPlayer);
  327. return;
  328. }
  329.  
  330. player.setDuelOfferAccepted(false);
  331. player.setDuelConfirmAccepted(false);
  332. affectedPlayer.setDuelOfferAccepted(false);
  333. affectedPlayer.setDuelConfirmAccepted(false);
  334.  
  335. player.getActionSender().sendDuelAcceptUpdate();
  336. affectedPlayer.getActionSender().sendDuelAcceptUpdate();
  337.  
  338. Inventory duelOffer = new Inventory();
  339. player.resetDuelOffer();
  340. int count = (int) p.readByte();
  341. for (int slot = 0; slot < count; slot++) {
  342. InvItem tItem = new InvItem(p.readShort(), p.readInt());
  343. if (tItem.getAmount() < 1) {
  344. player.setSuspiciousPlayer(true);
  345. continue;
  346. }
  347. ItemDef def = tItem.getDef();
  348. if (!def.canTrade()) {
  349. player.getActionSender().sendMessage(
  350. def.getName()
  351. + " cannot be traded with other players");
  352. player.setRequiresOfferUpdate(true);
  353. continue;
  354. }
  355. duelOffer.add(tItem);
  356. }
  357. for (InvItem item : duelOffer.getItems()) {
  358. if (duelOffer.countId(item.getID()) > player.getInventory()
  359. .countId(item.getID())) {
  360. player.setSuspiciousPlayer(true);
  361. return;
  362. }
  363. player.addToDuelOffer(item);
  364. }
  365. player.setRequiresOfferUpdate(true);
  366. break;
  367.  
  368. case 225: // Set duel options
  369. affectedPlayer = player.getWishToDuel();
  370. if (affectedPlayer == null
  371. || busy(affectedPlayer)
  372. || !player.isDueling()
  373. || !affectedPlayer.isDueling()
  374. || (player.isDuelOfferAccepted() && affectedPlayer
  375. .isDuelOfferAccepted())
  376. || player.isDuelConfirmAccepted()
  377. || affectedPlayer.isDuelConfirmAccepted()) { // This
  378. // shouldn't
  379. // happen
  380. player.setSuspiciousPlayer(true);
  381. unsetOptions(player);
  382. unsetOptions(affectedPlayer);
  383. return;
  384. }
  385.  
  386. player.setDuelOfferAccepted(false);
  387. player.setDuelConfirmAccepted(false);
  388. affectedPlayer.setDuelOfferAccepted(false);
  389. affectedPlayer.setDuelConfirmAccepted(false);
  390.  
  391. player.getActionSender().sendDuelAcceptUpdate();
  392. affectedPlayer.getActionSender().sendDuelAcceptUpdate();
  393.  
  394. for (int i = 0; i < 4; i++) {
  395. boolean b = p.readByte() == 1;
  396. player.setDuelSetting(i, b);
  397. affectedPlayer.setDuelSetting(i, b);
  398. }
  399.  
  400. player.getActionSender().sendDuelSettingUpdate();
  401. affectedPlayer.getActionSender().sendDuelSettingUpdate();
  402. break;
  403. }
  404. }
  405.  
  406. private void unsetOptions(Player p) {
  407. if (p == null) {
  408. return;
  409. }
  410. p.resetDueling();
  411. }
  412.  
  413. }
Add Comment
Please, Sign In to add comment