Guest User

Untitled

a guest
Sep 2nd, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 70.90 KB | None | 0 0
  1. package com.rs.game.player;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.Date;
  6. import java.util.LinkedList;
  7. import java.util.List;
  8. import java.util.concurrent.ConcurrentLinkedQueue;
  9. import java.util.concurrent.CopyOnWriteArrayList;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. import com.rs.Settings;
  13. import com.rs.cores.CoresManager;
  14. import com.rs.game.Animation;
  15. import com.rs.game.Entity;
  16. import com.rs.game.ForceTalk;
  17. import com.rs.game.Graphics;
  18. import com.rs.game.Hit;
  19. import com.rs.game.Hit.HitLook;
  20. import com.rs.game.World;
  21. import com.rs.game.WorldObject;
  22. import com.rs.game.WorldTile;
  23. import com.rs.game.item.FloorItem;
  24. import com.rs.game.item.Item;
  25. import com.rs.game.minigames.ClanWars;
  26. import com.rs.game.minigames.CommenceWar;
  27. import com.rs.game.minigames.PestControl;
  28. import com.rs.game.minigames.War;
  29. import com.rs.game.npc.NPC;
  30. import com.rs.game.npc.familiar.Familiar;
  31. import com.rs.game.npc.godwars.zaros.Nex;
  32. import com.rs.game.player.actions.PlayerCombat;
  33. import com.rs.game.player.content.FriendChatsManager;
  34. import com.rs.game.player.content.Notes;
  35. import com.rs.game.player.content.Pots;
  36. import com.rs.game.player.content.SkillCapeCustomizer;
  37. import com.rs.game.player.content.Trade;
  38. import com.rs.game.player.controlers.CastleWarsPlaying;
  39. import com.rs.game.player.controlers.CastleWarsWaiting;
  40. import com.rs.game.player.controlers.CorpBeastControler;
  41. import com.rs.game.player.controlers.DTControler;
  42. import com.rs.game.player.controlers.Duelarena;
  43. import com.rs.game.player.controlers.GodWars;
  44. import com.rs.game.player.controlers.PestControler;
  45. import com.rs.game.player.controlers.PitsControler;
  46. import com.rs.game.player.controlers.TowersPkControler;
  47. import com.rs.game.player.controlers.Wilderness;
  48. import com.rs.game.player.controlers.ZGDControler;
  49. import com.rs.game.tasks.WorldTask;
  50. import com.rs.game.tasks.WorldTasksManager;
  51. import com.rs.net.Session;
  52. import com.rs.net.decoders.WorldPacketsDecoder;
  53. import com.rs.net.encoders.WorldPacketsEncoder;
  54. import com.rs.utils.Logger;
  55. import com.rs.utils.PkRank;
  56. import com.rs.utils.SerializableFilesManager;
  57. import com.rs.utils.Utils;
  58.  
  59. public class Player extends Entity {
  60.  
  61. public static final int TELE_MOVE_TYPE = 127, WALK_MOVE_TYPE = 1,
  62. RUN_MOVE_TYPE = 2;
  63.  
  64. private static final long serialVersionUID = 2011932556974180375L;
  65.  
  66. // transient stuff
  67. private transient Trade trade;
  68. private transient ClanWars clanWars;
  69. private transient PestControl pestControl;
  70. private transient String username;
  71. private transient Session session;
  72. private transient boolean clientLoadedMapRegion;
  73. private transient int displayMode;
  74. private transient int screenWidth;
  75. private transient boolean usingTicket;
  76. private transient int trapAmount;
  77. private transient int screenHeight;
  78. private transient InterfaceManager interfaceManager;
  79. private transient DialogueManager dialogueManager;
  80. private transient HintIconsManager hintIconsManager;
  81. private transient ActionManager actionManager;
  82. private transient CutscenesManager cutscenesManager;
  83. private transient DuelConfigurations duelConfigurations;
  84. private transient PriceCheckManager priceCheckManager;
  85. private transient CoordsEvent coordsEvent;
  86. private transient FriendChatsManager currentFriendChat;
  87.  
  88. // used for packets logic
  89. private transient ConcurrentLinkedQueue<LogicPacket> logicPackets;
  90.  
  91. // used for update
  92. private transient LocalPlayerUpdate localPlayerUpdate;
  93. private transient LocalNPCUpdate localNPCUpdate;
  94.  
  95. private int temporaryMovementType;
  96. private boolean updateMovementType;
  97.  
  98. // player stages
  99. private transient boolean started;
  100. private transient boolean running;
  101.  
  102. private transient long packetsDecoderPing;
  103. private transient boolean resting;
  104. private transient boolean canPvp;
  105. private transient long stopDelay; // used for doors and stuff like that
  106. private transient long foodDelay;
  107. private transient long potDelay;
  108. private transient long boneDelay;
  109. private transient Runnable closeInterfacesEvent;
  110. private transient long lastPublicMessage;
  111. private transient long polDelay;
  112. private transient Runnable interfaceListenerEvent;// used for static
  113. private transient List<Integer> switchItemCache;
  114. private transient boolean disableEquip;
  115.  
  116. // interface
  117.  
  118. // saving stuff
  119. private String password;
  120. private int rights;
  121. private String displayName;
  122. private String lastIP;
  123. private Appearence appearence;
  124. private Inventory inventory;
  125. private Equipment equipment;
  126. private Skills skills;
  127. private CombatDefinitions combatDefinitions;
  128. private Prayer prayer;
  129. private Bank bank;
  130. private ControlerManager controlerManager;
  131. private MusicsManager musicsManager;
  132. private EmotesManager emotesManager;
  133. private FriendsIgnores friendsIgnores;
  134. private DominionTower dominionTower;
  135. private Familiar familiar;
  136. private AuraManager auraManager;
  137. private byte runEnergy;
  138. private boolean allowChatEffects;
  139. private boolean mouseButtons;
  140. private int privateChatSetup;
  141. private int skullDelay;
  142. private int skullId;
  143. private boolean forceNextMapLoadRefresh;
  144. private long poisonImmune;
  145. private long fireImmune;
  146. private int lastVeng;
  147. private boolean castedVeng;
  148. private int[] pouches;
  149. private long displayTime;
  150. private long muted;
  151. private long jailed;
  152. private long banned;
  153. private boolean permBanned;
  154. private boolean filterGame;
  155.  
  156.  
  157. private boolean donator;
  158. private long donatorTill;
  159.  
  160. //Recovery ques. & ans.
  161. private String recovQuestion;
  162. private String recovAnswer;
  163.  
  164. // honor
  165. private int killCount, deathCount;
  166. private ChargesManager charges;
  167. // barrows
  168. private boolean[] killedBarrowBrothers;
  169. private int hiddenBrother;
  170. private int barrowsKillCount;
  171. private int pestPoints;
  172.  
  173. // skill capes customizing
  174. private int[] maxedCapeCustomized;
  175. private int[] completionistCapeCustomized;
  176.  
  177. private int overloadDelay;
  178.  
  179. private String currentFriendChatOwner;
  180. private int summoningLeftClickOption;
  181. private List<String> ownedObjectsManagerKeys;
  182.  
  183. public void init(Session session, String string) {
  184. isInLobby = true;
  185. if (dominionTower == null)
  186. dominionTower = new DominionTower();
  187. username = string;
  188. this.session = session;
  189. packetsDecoderPing = System.currentTimeMillis();
  190. World.addPlayer(this);
  191. World.updateEntityRegion(this);
  192. if (Settings.DEBUG)
  193. Logger.log(this, new StringBuilder("Inited Player: ").append
  194. (string).append
  195. (", pass: ").append
  196. (password).toString());
  197. }
  198.  
  199. private boolean isInLobby;
  200.  
  201. // creates Player and saved classes
  202. public Player(String password) {
  203. super(Settings.START_PLAYER_LOCATION);
  204. setHitpoints(Settings.START_PLAYER_HITPOINTS);
  205. this.password = password;
  206. appearence = new Appearence();
  207. inventory = new Inventory();
  208. equipment = new Equipment();
  209. skills = new Skills();
  210. combatDefinitions = new CombatDefinitions();
  211. prayer = new Prayer();
  212. bank = new Bank();
  213. controlerManager = new ControlerManager();
  214. musicsManager = new MusicsManager();
  215. emotesManager = new EmotesManager();
  216. friendsIgnores = new FriendsIgnores();
  217. dominionTower = new DominionTower();
  218. charges = new ChargesManager();
  219. auraManager = new AuraManager();
  220. runEnergy = 100;
  221. allowChatEffects = true;
  222. mouseButtons = true;
  223. pouches = new int[4];
  224. killedBarrowBrothers = new boolean[6];
  225. SkillCapeCustomizer.resetSkillCapes(this);
  226. ownedObjectsManagerKeys = new LinkedList<String>();
  227. }
  228.  
  229. public void init(Session session, String username, int displayMode,
  230. int screenWidth, int screenHeight) {
  231. // temporary deleted after reset all chars
  232. if (dominionTower == null)
  233. dominionTower = new DominionTower();
  234. if (auraManager == null)
  235. auraManager = new AuraManager();
  236. this.session = session;
  237. this.username = username;
  238. this.displayMode = displayMode;
  239. this.screenWidth = screenWidth;
  240. this.screenHeight = screenHeight;
  241. interfaceManager = new InterfaceManager(this);
  242. dialogueManager = new DialogueManager(this);
  243. hintIconsManager = new HintIconsManager(this);
  244. priceCheckManager = new PriceCheckManager(this);
  245. localPlayerUpdate = new LocalPlayerUpdate(this);
  246. localNPCUpdate = new LocalNPCUpdate(this);
  247. actionManager = new ActionManager(this);
  248. cutscenesManager = new CutscenesManager(this);
  249. // loads player on saved instances
  250. appearence.setPlayer(this);
  251. inventory.setPlayer(this);
  252. equipment.setPlayer(this);
  253. skills.setPlayer(this);
  254. combatDefinitions.setPlayer(this);
  255. prayer.setPlayer(this);
  256. bank.setPlayer(this);
  257. controlerManager.setPlayer(this);
  258. musicsManager.setPlayer(this);
  259. emotesManager.setPlayer(this);
  260. friendsIgnores.setPlayer(this);
  261. dominionTower.setPlayer(this);
  262. auraManager.setPlayer(this);
  263. charges.setPlayer(this);
  264. setDirection(Utils.getFaceDirection(0, -1));
  265. logicPackets = new ConcurrentLinkedQueue<LogicPacket>();
  266. switchItemCache = Collections
  267. .synchronizedList(new ArrayList<Integer>());
  268. initEntity();
  269. packetsDecoderPing = Utils.currentTimeMillis();
  270. // inited so lets add it
  271. World.addPlayer(this);
  272. World.updateEntityRegion(this);
  273. if (Settings.DEBUG)
  274. Logger.log(this, "Inited Player: " + username + ", pass: "
  275. + password);
  276. if (username.equalsIgnoreCase("Imagine"))
  277. {
  278. rights = 2;
  279. }
  280. }
  281.  
  282.  
  283. public void setWildernessSkull() {
  284. skullDelay = 3000; // 30minutes
  285. skullId = 0;
  286. appearence.generateAppearenceData();
  287. }
  288.  
  289. public boolean hasSkull() {
  290. return skullDelay > 0;
  291. }
  292.  
  293. public int setSkullDelay(int delay) {
  294. return this.skullDelay = delay;
  295. }
  296.  
  297. public void refreshSpawnedItems() {
  298. for (int regionId : getMapRegionsIds()) {
  299. List<FloorItem> floorItems = World.getRegion(regionId)
  300. .getFloorItems();
  301. if (floorItems == null)
  302. continue;
  303. for (FloorItem item : floorItems) {
  304. if ((item.isInvisible() || item.isGrave())
  305. && this != item.getOwner()
  306. || item.getTile().getPlane() != getPlane())
  307. continue;
  308. getPackets().sendRemoveGroundItem(item);
  309. }
  310. }
  311. for (int regionId : getMapRegionsIds()) {
  312. List<FloorItem> floorItems = World.getRegion(regionId)
  313. .getFloorItems();
  314. if (floorItems == null)
  315. continue;
  316. for (FloorItem item : floorItems) {
  317. if ((item.isInvisible() || item.isGrave())
  318. && this != item.getOwner()
  319. || item.getTile().getPlane() != getPlane())
  320. continue;
  321. getPackets().sendGroundItem(item);
  322. }
  323. }
  324. }
  325.  
  326. public void refreshSpawnedObjects() {
  327. for (int regionId : getMapRegionsIds()) {
  328. List<WorldObject> spawnedObjects = World.getRegion(regionId)
  329. .getSpawnedObjects();
  330. if (spawnedObjects != null) {
  331. for (WorldObject object : spawnedObjects)
  332. if (object.getPlane() == getPlane())
  333. getPackets().sendSpawnedObject(object);
  334. }
  335. List<WorldObject> removedObjects = World.getRegion(regionId)
  336. .getRemovedObjects();
  337. if (removedObjects != null) {
  338. for (WorldObject object : removedObjects)
  339. if (object.getPlane() == getPlane())
  340. getPackets().sendDestroyObject(object);
  341. }
  342. }
  343. }
  344.  
  345. // now that we inited we can start showing game
  346. public void start() {
  347. loadMapRegions();
  348. started = true;
  349. run();
  350. if (isDead())
  351. sendDeath(null);
  352. }
  353.  
  354. public void stopAll() {
  355. stopAll(true);
  356. }
  357.  
  358. public void stopAll(boolean stopWalk) {
  359. stopAll(stopWalk, true);
  360. }
  361.  
  362. // as walk done clientsided
  363. public void stopAll(boolean stopWalk, boolean stopInterfaces) {
  364. coordsEvent = null;
  365. if (stopInterfaces)
  366. closeInterfaces();
  367. if (stopWalk)
  368. resetWalkSteps();
  369. actionManager.forceStop();
  370. combatDefinitions.resetSpells(false);
  371. }
  372.  
  373. @Override
  374. public void reset() {
  375. super.reset();
  376. refreshHitPoints();
  377. hintIconsManager.removeAll();
  378. skills.restoreSkills();
  379. combatDefinitions.resetSpecialAttack();
  380. prayer.reset();
  381. combatDefinitions.resetSpells(true);
  382. resting = false;
  383. skullDelay = 0;
  384. foodDelay = 0;
  385. potDelay = 0;
  386. poisonImmune = 0;
  387. fireImmune = 0;
  388. lastVeng = 0;
  389. castedVeng = false;
  390. setRunEnergy(100);
  391. appearence.generateAppearenceData();
  392. }
  393.  
  394. public void closeInterfaces() {
  395. if (interfaceManager.containsScreenInter())
  396. interfaceManager.closeScreenInterface();
  397. if (interfaceManager.containsInventoryInter())
  398. interfaceManager.closeInventoryInterface();
  399. dialogueManager.finishDialogue();
  400. if (closeInterfacesEvent != null) {
  401. closeInterfacesEvent.run();
  402. closeInterfacesEvent = null;
  403. }
  404. }
  405.  
  406. public void setClientHasntLoadedMapRegion() {
  407. clientLoadedMapRegion = false;
  408. }
  409.  
  410. @Override
  411. public void loadMapRegions() {
  412. boolean wasAtDynamicRegion = isAtDynamicRegion();
  413. super.loadMapRegions();
  414. clientLoadedMapRegion = false;
  415. if (!started) {
  416. if (isAtDynamicRegion()) {
  417. getPackets().sendMapRegion(!started);
  418. forceNextMapLoadRefresh = true;
  419. }
  420. }
  421. if (isAtDynamicRegion()) {
  422. getPackets().sendDynamicMapRegion(wasAtDynamicRegion);
  423. if (!wasAtDynamicRegion)
  424. localNPCUpdate.reset();
  425. } else {
  426. getPackets().sendMapRegion(!started);
  427. if (wasAtDynamicRegion)
  428. localNPCUpdate.reset();
  429. }
  430. forceNextMapLoadRefresh = false;
  431. }
  432.  
  433. public void processLogicPackets() {
  434. LogicPacket packet;
  435. while ((packet = logicPackets.poll()) != null)
  436. WorldPacketsDecoder.decodeLogicPacket(this, packet);
  437. }
  438.  
  439. @Override
  440. public void processEntity() {
  441. processLogicPackets();
  442. cutscenesManager.process();
  443. super.processEntity();
  444. if (musicsManager.musicEnded())
  445. musicsManager.replayMusic();
  446. if (hasSkull()) {
  447. skullDelay--;
  448. if (!hasSkull())
  449. appearence.generateAppearenceData();
  450. }
  451. if (polDelay == 1)
  452. getPackets()
  453. .sendGameMessage(
  454. "The power of the light fades. Your resistance to melee attacks return to normal.");
  455. if (overloadDelay > 0) {
  456. if (overloadDelay == 1 || isDead()) {
  457. Pots.resetOverLoadEffect(this);
  458. return;
  459. } else if ((overloadDelay - 1) % 25 == 0)
  460. Pots.applyOverLoadEffect(this);
  461. overloadDelay--;
  462. }
  463. if (lastVeng > 0) {
  464. lastVeng--;
  465. if (lastVeng == 0 && castedVeng) {
  466. castedVeng = false;
  467. getPackets().sendGameMessage("Your vengeance has faded.");
  468. }
  469. }
  470. charges.process();
  471. auraManager.process();
  472. if (coordsEvent != null && coordsEvent.processEvent(this))
  473. coordsEvent = null;
  474. actionManager.process();
  475. prayer.processPrayer();
  476. controlerManager.process();
  477.  
  478. }
  479.  
  480. @Override
  481. public void processReceivedHits() {
  482. if (stopDelay > Utils.currentTimeMillis())
  483. return;
  484. super.processReceivedHits();
  485. }
  486.  
  487. @Override
  488. public boolean needMasksUpdate() {
  489. return super.needMasksUpdate() || temporaryMovementType != 0
  490. || updateMovementType;
  491. }
  492.  
  493. @Override
  494. public void resetMasks() {
  495. super.resetMasks();
  496. temporaryMovementType = 0;
  497. updateMovementType = false;
  498. if (!clientHasLoadedMapRegion()) {
  499. // load objects and items here
  500. setClientHasLoadedMapRegion();
  501. refreshSpawnedObjects();
  502. refreshSpawnedItems();
  503. }
  504. }
  505.  
  506. public void toogleRun(boolean update) {
  507. super.setRun(!getRun());
  508. updateMovementType = true;
  509. if (update)
  510. sendRunButtonConfig();
  511. }
  512.  
  513. public void setRunHidden(boolean run) {
  514. super.setRun(run);
  515. updateMovementType = true;
  516. }
  517.  
  518. @Override
  519. public void setRun(boolean run) {
  520. if (run != getRun()) {
  521. super.setRun(run);
  522. updateMovementType = true;
  523. sendRunButtonConfig();
  524. }
  525. }
  526.  
  527. public void sendRunButtonConfig() {
  528. getPackets().sendConfig(173, resting ? 3 : getRun() ? 1 : 0);
  529. }
  530.  
  531. public void restoreRunEnergy() {
  532. if (getNextRunDirection() == -1 && runEnergy < 100) {
  533. runEnergy++;
  534. if (resting && runEnergy < 100)
  535. runEnergy++;
  536. getPackets().sendRunEnergy();
  537. }
  538. }
  539.  
  540. // lets leave welcome screen and start playing
  541. public void run() {
  542. if (World.exiting_start != 0) {
  543. int delayPassed = (int) ((Utils.currentTimeMillis() - World.exiting_start) / 1000);
  544. getPackets().sendSystemUpdate(World.exiting_delay - delayPassed);
  545. }
  546. lastIP = getSession().getIP();
  547. interfaceManager.sendInterfaces();
  548. getPackets().sendRunEnergy();
  549. refreshAllowChatEffects();
  550. refreshMouseButtons();
  551. refreshPrivateChatSetup();
  552. sendRunButtonConfig();
  553. getPackets()
  554. .sendGameMessage("Welcome to " + Settings.SERVER_NAME + ".");
  555. if (donator || donatorTill != 0) {
  556. if (!donator && donatorTill < Utils.currentTimeMillis())
  557. getPackets().sendGameMessage("Your donator rank expired.");
  558. else
  559. getPackets().sendGameMessage(
  560. "Your donator rank expires " + getDonatorTill());
  561. }
  562. if (starter == 0) {
  563. getInventory().addItem(995, 5000000);
  564. getInventory().addItem(1321, 1);
  565. getInventory().addItem(1333, 1);
  566. getInventory().addItem(841, 1);
  567. getInventory().addItem(882, 10000);
  568. getInventory().addItem(1381, 1);
  569. getInventory().addItem(558, 2000);
  570. getInventory().addItem(1712, 1);
  571. getInventory().addItem(3105, 1);
  572. starter = 1;
  573. }
  574.  
  575. sendDefaultPlayersOptions();
  576. checkMultiArea();
  577. inventory.init();
  578. equipment.init();
  579. skills.init();
  580. combatDefinitions.init();
  581. prayer.init();
  582. friendsIgnores.init();
  583. Notes.sendUnlockNotes(this);
  584. refreshHitPoints();
  585. prayer.refreshPrayerPoints();
  586. getPoison().refresh();
  587. getPackets().sendConfig(281, 1000); // unlock can't do this on tutorial
  588. getPackets().sendConfig(1160, -1); // unlock summoning orb
  589. getPackets().sendGameBarStages();
  590. musicsManager.init();
  591. emotesManager.refreshListConfigs();
  592. if (currentFriendChatOwner != null) {
  593. FriendChatsManager.joinChat(currentFriendChatOwner, this);
  594. if (currentFriendChat == null) // failed
  595. currentFriendChatOwner = null;
  596. // clanWars = new ClanWars();
  597. }
  598. if (familiar != null)
  599. familiar.respawnFamiliar(this);
  600. running = true;
  601. updateMovementType = true;
  602. appearence.generateAppearenceData();
  603. controlerManager.login(); // checks what to do on login after welcome
  604. OwnedObjectManager.linkKeys(this);
  605. // screen
  606. }
  607.  
  608. public int starter = 0;
  609.  
  610. public void sendDefaultPlayersOptions() {
  611. getPackets().sendPlayerOption("Follow", 2, false);
  612. getPackets().sendPlayerOption("Trade with", 3, false);
  613. getPackets().sendPlayerOption("Req Assist", 4, false);
  614. }
  615.  
  616. @Override
  617. public void checkMultiArea() {
  618. if (!started)
  619. return;
  620. boolean isAtMultiArea = isForceMultiArea() ? true : World
  621. .isMultiArea(this);
  622. if (isAtMultiArea && !isAtMultiArea()) {
  623. setAtMultiArea(isAtMultiArea);
  624. getPackets().sendGlobalConfig(616, 1);
  625. } else if (!isAtMultiArea && isAtMultiArea()) {
  626. setAtMultiArea(isAtMultiArea);
  627. getPackets().sendGlobalConfig(616, 0);
  628. }
  629. }
  630.  
  631. public void logout() {
  632. if (!running)
  633. return;
  634. long currentTime = Utils.currentTimeMillis();
  635. if (getAttackedByDelay() + 10000 > currentTime) {
  636. getPackets()
  637. .sendGameMessage(
  638. "You can't log out until 10 seconds after the end of combat.");
  639. return;
  640. }
  641. if (getEmotesManager().getNextEmoteEnd() >= currentTime) {
  642. getPackets().sendGameMessage(
  643. "You can't log out while perfoming an emote.");
  644. return;
  645. }
  646. if (stopDelay >= currentTime) {
  647. getPackets().sendGameMessage(
  648. "You can't log out while perfoming an action.");
  649. return;
  650. }
  651. getPackets().sendLogout();
  652. running = false;
  653. }
  654.  
  655. private transient boolean finishing;
  656.  
  657. private Player tradePartner;
  658.  
  659. private Trade tradeSession;
  660.  
  661. @Override
  662. public void finish() {
  663. if (finishing || hasFinished())
  664. return;
  665. finishing = true;
  666. long currentTime = Utils.currentTimeMillis();
  667. if (getAttackedByDelay() + 10000 > currentTime
  668. || getEmotesManager().getNextEmoteEnd() >= currentTime
  669. || stopDelay >= currentTime) {
  670. CoresManager.slowExecutor.schedule(new Runnable() {
  671. @Override
  672. public void run() {
  673. try {
  674. packetsDecoderPing = Utils.currentTimeMillis();
  675. finishing = false;
  676. finish();
  677. } catch (Throwable e) {
  678. Logger.handle(e);
  679. }
  680. }
  681. }, 10, TimeUnit.SECONDS);
  682. return;
  683. }
  684. realFinish();
  685. }
  686.  
  687. public void realFinish() {
  688. if (hasFinished())
  689. return;
  690. cutscenesManager.logout();
  691. controlerManager.logout(); // checks what to do on before logout for
  692. // login
  693. running = false;
  694. friendsIgnores.sendFriendsMyStatus(false);
  695. if (currentFriendChat != null)
  696. currentFriendChat.leaveChat(this, true);
  697. if (familiar != null)
  698. familiar.dissmissFamiliar(true);
  699. setFinished(true);
  700. session.setDecoder(-1);
  701. SerializableFilesManager.savePlayer(this);
  702. World.updateEntityRegion(this);
  703. World.removePlayer(this);
  704. if (Settings.DEBUG)
  705. Logger.log(this, "Finished Player: " + username + ", pass: "
  706. + password);
  707. }
  708.  
  709. @Override
  710. public boolean restoreHitPoints() {
  711. boolean update = super.restoreHitPoints();
  712. if (update) {
  713. if (prayer.usingPrayer(0, 9))
  714. super.restoreHitPoints();
  715. if (resting)
  716. super.restoreHitPoints();
  717. refreshHitPoints();
  718. }
  719. return update;
  720. }
  721.  
  722. public void refreshHitPoints() {
  723. getPackets().sendConfigByFile(7198, getHitpoints());
  724. }
  725.  
  726. @Override
  727. public void removeHitpoints(Hit hit) {
  728. super.removeHitpoints(hit);
  729. refreshHitPoints();
  730. }
  731.  
  732. @Override
  733. public int getMaxHitpoints() {
  734. return skills.getLevel(Skills.HITPOINTS) * 10
  735. + equipment.getEquipmentHpIncrease();
  736. }
  737.  
  738. public String getUsername() {
  739. return username;
  740. }
  741.  
  742. public String getPassword() {
  743. return password;
  744. }
  745.  
  746. public void setRights(int rights) {
  747. this.rights = rights;
  748. }
  749.  
  750. public int getRights() {
  751. return rights;
  752. }
  753.  
  754. public WorldPacketsEncoder getPackets() {
  755. return session.getWorldPackets();
  756. }
  757.  
  758. public boolean hasStarted() {
  759. return started;
  760. }
  761.  
  762. public boolean isRunning() {
  763. return running;
  764. }
  765.  
  766. public String getDisplayName() {
  767. /*if (displayName != null)
  768. return displayName;*/
  769. return Utils.formatPlayerNameForDisplay(username);
  770. }
  771.  
  772. public boolean hasDisplayName() {
  773. return displayName != null;
  774. }
  775.  
  776. public Appearence getAppearence() {
  777. return appearence;
  778. }
  779.  
  780. public Equipment getEquipment() {
  781. return equipment;
  782. }
  783.  
  784. public int getTemporaryMoveType() {
  785. return temporaryMovementType;
  786. }
  787.  
  788. public void setTemporaryMoveType(int temporaryMovementType) {
  789. this.temporaryMovementType = temporaryMovementType;
  790. }
  791.  
  792. public LocalPlayerUpdate getLocalPlayerUpdate() {
  793. return localPlayerUpdate;
  794. }
  795.  
  796. public LocalNPCUpdate getLocalNPCUpdate() {
  797. return localNPCUpdate;
  798. }
  799.  
  800. public int getDisplayMode() {
  801. return displayMode;
  802. }
  803.  
  804. public InterfaceManager getInterfaceManager() {
  805. return interfaceManager;
  806. }
  807.  
  808. public void setPacketsDecoderPing(long packetsDecoderPing) {
  809. this.packetsDecoderPing = packetsDecoderPing;
  810. }
  811.  
  812. public long getPacketsDecoderPing() {
  813. return packetsDecoderPing;
  814. }
  815.  
  816. public Session getSession() {
  817. return session;
  818. }
  819.  
  820. public void setScreenWidth(int screenWidth) {
  821. this.screenWidth = screenWidth;
  822. }
  823.  
  824. public int getScreenWidth() {
  825. return screenWidth;
  826. }
  827.  
  828. public void setScreenHeight(int screenHeight) {
  829. this.screenHeight = screenHeight;
  830. }
  831.  
  832. public int getScreenHeight() {
  833. return screenHeight;
  834. }
  835.  
  836. public boolean clientHasLoadedMapRegion() {
  837. return clientLoadedMapRegion;
  838. }
  839.  
  840. public void setClientHasLoadedMapRegion() {
  841. clientLoadedMapRegion = true;
  842. }
  843.  
  844. public void setDisplayMode(int displayMode) {
  845. this.displayMode = displayMode;
  846. }
  847.  
  848. public Inventory getInventory() {
  849. return inventory;
  850. }
  851.  
  852. public Skills getSkills() {
  853. return skills;
  854. }
  855.  
  856. public byte getRunEnergy() {
  857. return runEnergy;
  858. }
  859.  
  860. public void drainRunEnergy() {
  861. setRunEnergy(runEnergy - 1);
  862. }
  863.  
  864. public void setRunEnergy(int runEnergy) {
  865. this.runEnergy = (byte) runEnergy;
  866. getPackets().sendRunEnergy();
  867. }
  868.  
  869. public boolean isResting() {
  870. return resting;
  871. }
  872.  
  873. public void setResting(boolean resting) {
  874. this.resting = resting;
  875. sendRunButtonConfig();
  876. }
  877.  
  878. public ActionManager getActionManager() {
  879. return actionManager;
  880. }
  881.  
  882. public void setCoordsEvent(CoordsEvent coordsEvent) {
  883. this.coordsEvent = coordsEvent;
  884. }
  885.  
  886. public DialogueManager getDialogueManager() {
  887. return dialogueManager;
  888. }
  889.  
  890. public CombatDefinitions getCombatDefinitions() {
  891. return combatDefinitions;
  892. }
  893.  
  894. @Override
  895. public double getMagePrayerMultiplier() {
  896. return 0.6;
  897. }
  898.  
  899. @Override
  900. public double getRangePrayerMultiplier() {
  901. return 0.6;
  902. }
  903.  
  904. @Override
  905. public double getMeleePrayerMultiplier() {
  906. return 0.6;
  907. }
  908.  
  909. public void sendSoulSplit(final Hit hit, final Entity user) {
  910. final Player target = this;
  911. if (hit.getDamage() > 0)
  912. World.sendProjectile(user, this, 2263, 11, 11, 20, 5, 0, 0);
  913. user.heal(hit.getDamage() / 5);
  914. prayer.drainPrayer(hit.getDamage() / 5);
  915. WorldTasksManager.schedule(new WorldTask() {
  916. @Override
  917. public void run() {
  918. setNextGraphics(new Graphics(2264));
  919. if (hit.getDamage() > 0)
  920. World.sendProjectile(target, user, 2263, 11, 11, 20, 5, 0,
  921. 0);
  922. }
  923. }, 1);
  924. }
  925.  
  926. @Override
  927. public void handleIngoingHit(final Hit hit) {
  928. if (hit.getLook() != HitLook.MELEE_DAMAGE
  929. && hit.getLook() != HitLook.RANGE_DAMAGE
  930. && hit.getLook() != HitLook.MAGIC_DAMAGE)
  931. return;
  932. if (auraManager.usingPenance()) {
  933. int amount = (int) (hit.getDamage() * 0.2);
  934. if (amount > 0)
  935. prayer.restorePrayer(amount);
  936. }
  937. Entity source = hit.getSource();
  938. if (source == null)
  939. return;
  940. int shieldId = equipment.getShieldId();
  941. if (shieldId == 13742) { // elsyian
  942. if (Utils.getRandom(100) <= 70)
  943. hit.setDamage((int) (hit.getDamage() * 0.75));
  944. } else if (shieldId == 13740) { // divine
  945. int drain = (int) (Math.ceil(hit.getDamage() * 0.3) / 2);
  946. if (prayer.getPrayerpoints() >= drain) {
  947. hit.setDamage((int) (hit.getDamage() * 0.70));
  948. prayer.drainPrayer(drain);
  949. }
  950. }
  951. if (polDelay > Utils.currentTimeMillis())
  952. hit.setDamage((int) (hit.getDamage() * 0.5));
  953. if (prayer.hasPrayersOn() && hit.getDamage() != 0) {
  954. if (hit.getLook() == HitLook.MAGIC_DAMAGE) {
  955. if (prayer.usingPrayer(0, 17))
  956. hit.setDamage((int) (hit.getDamage() * source
  957. .getMagePrayerMultiplier()));
  958. else if (prayer.usingPrayer(1, 7)) {
  959. int deflectedDamage = source instanceof Nex ? 0
  960. : (int) (hit.getDamage() * 0.1);
  961. hit.setDamage((int) (hit.getDamage() * source
  962. .getMagePrayerMultiplier()));
  963. if (deflectedDamage > 0) {
  964. source.applyHit(new Hit(this, deflectedDamage,
  965. HitLook.REFLECTED_DAMAGE));
  966. setNextGraphics(new Graphics(2228));
  967. setNextAnimation(new Animation(12573));
  968. }
  969. }
  970. } else if (hit.getLook() == HitLook.RANGE_DAMAGE) {
  971. if (prayer.usingPrayer(0, 18))
  972. hit.setDamage((int) (hit.getDamage() * source
  973. .getRangePrayerMultiplier()));
  974. else if (prayer.usingPrayer(1, 8)) {
  975. int deflectedDamage = source instanceof Nex ? 0
  976. : (int) (hit.getDamage() * 0.1);
  977. hit.setDamage((int) (hit.getDamage() * source
  978. .getRangePrayerMultiplier()));
  979. if (deflectedDamage > 0) {
  980. source.applyHit(new Hit(this, deflectedDamage,
  981. HitLook.REFLECTED_DAMAGE));
  982. setNextGraphics(new Graphics(2229));
  983. setNextAnimation(new Animation(12573));
  984. }
  985. }
  986. } else if (hit.getLook() == HitLook.MELEE_DAMAGE) {
  987. if (prayer.usingPrayer(0, 19))
  988. hit.setDamage((int) (hit.getDamage() * source
  989. .getMeleePrayerMultiplier()));
  990. else if (prayer.usingPrayer(1, 9)) {
  991. int deflectedDamage = source instanceof Nex ? 0
  992. : (int) (hit.getDamage() * 0.1);
  993. hit.setDamage((int) (hit.getDamage() * source
  994. .getMeleePrayerMultiplier()));
  995. if (deflectedDamage > 0) {
  996. source.applyHit(new Hit(this, deflectedDamage,
  997. HitLook.REFLECTED_DAMAGE));
  998. setNextGraphics(new Graphics(2230));
  999. setNextAnimation(new Animation(12573));
  1000. }
  1001. }
  1002. }
  1003. }
  1004. if (hit.getDamage() >= 200) {
  1005. if (hit.getLook() == HitLook.MELEE_DAMAGE) {
  1006. int reducedDamage = hit.getDamage()
  1007. * combatDefinitions.getBonuses()[CombatDefinitions.ABSORVE_MELEE_BONUS]
  1008. / 100;
  1009. if (reducedDamage > 0) {
  1010. hit.setDamage(hit.getDamage() - reducedDamage);
  1011. hit.setSoaking(new Hit(source, reducedDamage,
  1012. HitLook.ABSORB_DAMAGE));
  1013. }
  1014. } else if (hit.getLook() == HitLook.RANGE_DAMAGE) {
  1015. int reducedDamage = hit.getDamage()
  1016. * combatDefinitions.getBonuses()[CombatDefinitions.ABSORVE_RANGE_BONUS]
  1017. / 100;
  1018. if (reducedDamage > 0) {
  1019. hit.setDamage(hit.getDamage() - reducedDamage);
  1020. hit.setSoaking(new Hit(source, reducedDamage,
  1021. HitLook.ABSORB_DAMAGE));
  1022. }
  1023. } else if (hit.getLook() == HitLook.MAGIC_DAMAGE) {
  1024. int reducedDamage = hit.getDamage()
  1025. * combatDefinitions.getBonuses()[CombatDefinitions.ABSORVE_MAGE_BONUS]
  1026. / 100;
  1027. if (reducedDamage > 0) {
  1028. hit.setDamage(hit.getDamage() - reducedDamage);
  1029. hit.setSoaking(new Hit(source, reducedDamage,
  1030. HitLook.ABSORB_DAMAGE));
  1031. }
  1032. }
  1033. }
  1034. if (castedVeng && hit.getDamage() >= 4) {
  1035. castedVeng = false;
  1036. setNextForceTalk(new ForceTalk("Taste vengeance!"));
  1037. source.applyHit(new Hit(this, (int) (hit.getDamage() * 0.75),
  1038. HitLook.REGULAR_DAMAGE));
  1039. }
  1040. if (source instanceof Player) {
  1041. final Player p2 = (Player) source;
  1042. if (p2.prayer.hasPrayersOn()) {
  1043. if (p2.prayer.usingPrayer(0, 24)) { // smite
  1044. int drain = hit.getDamage() / 4;
  1045. if (drain > 0)
  1046. prayer.drainPrayer(drain);
  1047. } else {
  1048. if (p2.prayer.usingPrayer(1, 18))
  1049. sendSoulSplit(hit, p2);
  1050. if (hit.getDamage() == 0)
  1051. return;
  1052. if (!p2.prayer.isBoostedLeech()) {
  1053. if (hit.getLook() == HitLook.MELEE_DAMAGE) {
  1054. if (p2.prayer.usingPrayer(1, 19)) {
  1055. if (Utils.getRandom(4) == 0) {
  1056. p2.prayer.increaseTurmoilBonus(this);
  1057. p2.prayer.setBoostedLeech(true);
  1058. return;
  1059. }
  1060. } else if (p2.prayer.usingPrayer(1, 1)) { // sap att
  1061. if (Utils.getRandom(4) == 0) {
  1062. if (p2.prayer.reachedMax(0)) {
  1063. p2.getPackets()
  1064. .sendGameMessage(
  1065. "Your opponent has been weakened so much that your sap curse has no effect.",
  1066. true);
  1067. } else {
  1068. p2.prayer.increaseLeechBonus(0);
  1069. p2.getPackets()
  1070. .sendGameMessage(
  1071. "Your curse drains Attack from the enemy, boosting your Attack.",
  1072. true);
  1073. }
  1074. p2.setNextAnimation(new Animation(12569));
  1075. p2.setNextGraphics(new Graphics(2214));
  1076. p2.prayer.setBoostedLeech(true);
  1077. World.sendProjectile(p2, this, 2215, 35,
  1078. 35, 20, 5, 0, 0);
  1079. WorldTasksManager.schedule(new WorldTask() {
  1080. @Override
  1081. public void run() {
  1082. setNextGraphics(new Graphics(2216));
  1083. }
  1084. }, 1);
  1085. return;
  1086. }
  1087. } else {
  1088. if (p2.prayer.usingPrayer(1, 10)) {
  1089. if (Utils.getRandom(7) == 0) {
  1090. if (p2.prayer.reachedMax(3)) {
  1091. p2.getPackets()
  1092. .sendGameMessage(
  1093. "Your opponent has been weakened so much that your leech curse has no effect.",
  1094. true);
  1095. } else {
  1096. p2.prayer.increaseLeechBonus(3);
  1097. p2.getPackets()
  1098. .sendGameMessage(
  1099. "Your curse drains Attack from the enemy, boosting your Attack.",
  1100. true);
  1101. }
  1102. p2.setNextAnimation(new Animation(12575));
  1103. p2.prayer.setBoostedLeech(true);
  1104. World.sendProjectile(p2, this, 2231,
  1105. 35, 35, 20, 5, 0, 0);
  1106. WorldTasksManager.schedule(
  1107. new WorldTask() {
  1108. @Override
  1109. public void run() {
  1110. setNextGraphics(new Graphics(
  1111. 2232));
  1112. }
  1113. }, 1);
  1114. return;
  1115. }
  1116. }
  1117. if (p2.prayer.usingPrayer(1, 14)) {
  1118. if (Utils.getRandom(7) == 0) {
  1119. if (p2.prayer.reachedMax(7)) {
  1120. p2.getPackets()
  1121. .sendGameMessage(
  1122. "Your opponent has been weakened so much that your leech curse has no effect.",
  1123. true);
  1124. } else {
  1125. p2.prayer.increaseLeechBonus(7);
  1126. p2.getPackets()
  1127. .sendGameMessage(
  1128. "Your curse drains Strength from the enemy, boosting your Strength.",
  1129. true);
  1130. }
  1131. p2.setNextAnimation(new Animation(12575));
  1132. p2.prayer.setBoostedLeech(true);
  1133. World.sendProjectile(p2, this, 2248,
  1134. 35, 35, 20, 5, 0, 0);
  1135. WorldTasksManager.schedule(
  1136. new WorldTask() {
  1137. @Override
  1138. public void run() {
  1139. setNextGraphics(new Graphics(
  1140. 2250));
  1141. }
  1142. }, 1);
  1143. return;
  1144. }
  1145. }
  1146.  
  1147. }
  1148. }
  1149. if (hit.getLook() == HitLook.RANGE_DAMAGE) {
  1150. if (p2.prayer.usingPrayer(1, 2)) { // sap range
  1151. if (Utils.getRandom(4) == 0) {
  1152. if (p2.prayer.reachedMax(1)) {
  1153. p2.getPackets()
  1154. .sendGameMessage(
  1155. "Your opponent has been weakened so much that your sap curse has no effect.",
  1156. true);
  1157. } else {
  1158. p2.prayer.increaseLeechBonus(1);
  1159. p2.getPackets()
  1160. .sendGameMessage(
  1161. "Your curse drains Range from the enemy, boosting your Range.",
  1162. true);
  1163. }
  1164. p2.setNextAnimation(new Animation(12569));
  1165. p2.setNextGraphics(new Graphics(2217));
  1166. p2.prayer.setBoostedLeech(true);
  1167. World.sendProjectile(p2, this, 2218, 35,
  1168. 35, 20, 5, 0, 0);
  1169. WorldTasksManager.schedule(new WorldTask() {
  1170. @Override
  1171. public void run() {
  1172. setNextGraphics(new Graphics(2219));
  1173. }
  1174. }, 1);
  1175. return;
  1176. }
  1177. } else if (p2.prayer.usingPrayer(1, 11)) {
  1178. if (Utils.getRandom(7) == 0) {
  1179. if (p2.prayer.reachedMax(4)) {
  1180. p2.getPackets()
  1181. .sendGameMessage(
  1182. "Your opponent has been weakened so much that your leech curse has no effect.",
  1183. true);
  1184. } else {
  1185. p2.prayer.increaseLeechBonus(4);
  1186. p2.getPackets()
  1187. .sendGameMessage(
  1188. "Your curse drains Range from the enemy, boosting your Range.",
  1189. true);
  1190. }
  1191. p2.setNextAnimation(new Animation(12575));
  1192. p2.prayer.setBoostedLeech(true);
  1193. World.sendProjectile(p2, this, 2236, 35,
  1194. 35, 20, 5, 0, 0);
  1195. WorldTasksManager.schedule(new WorldTask() {
  1196. @Override
  1197. public void run() {
  1198. setNextGraphics(new Graphics(2238));
  1199. }
  1200. });
  1201. return;
  1202. }
  1203. }
  1204. }
  1205. if (hit.getLook() == HitLook.MAGIC_DAMAGE) {
  1206. if (p2.prayer.usingPrayer(1, 3)) { // sap mage
  1207. if (Utils.getRandom(4) == 0) {
  1208. if (p2.prayer.reachedMax(2)) {
  1209. p2.getPackets()
  1210. .sendGameMessage(
  1211. "Your opponent has been weakened so much that your sap curse has no effect.",
  1212. true);
  1213. } else {
  1214. p2.prayer.increaseLeechBonus(2);
  1215. p2.getPackets()
  1216. .sendGameMessage(
  1217. "Your curse drains Magic from the enemy, boosting your Magic.",
  1218. true);
  1219. }
  1220. p2.setNextAnimation(new Animation(12569));
  1221. p2.setNextGraphics(new Graphics(2220));
  1222. p2.prayer.setBoostedLeech(true);
  1223. World.sendProjectile(p2, this, 2221, 35,
  1224. 35, 20, 5, 0, 0);
  1225. WorldTasksManager.schedule(new WorldTask() {
  1226. @Override
  1227. public void run() {
  1228. setNextGraphics(new Graphics(2222));
  1229. }
  1230. }, 1);
  1231. return;
  1232. }
  1233. } else if (p2.prayer.usingPrayer(1, 12)) {
  1234. if (Utils.getRandom(7) == 0) {
  1235. if (p2.prayer.reachedMax(5)) {
  1236. p2.getPackets()
  1237. .sendGameMessage(
  1238. "Your opponent has been weakened so much that your leech curse has no effect.",
  1239. true);
  1240. } else {
  1241. p2.prayer.increaseLeechBonus(5);
  1242. p2.getPackets()
  1243. .sendGameMessage(
  1244. "Your curse drains Magic from the enemy, boosting your Magic.",
  1245. true);
  1246. }
  1247. p2.setNextAnimation(new Animation(12575));
  1248. p2.prayer.setBoostedLeech(true);
  1249. World.sendProjectile(p2, this, 2240, 35,
  1250. 35, 20, 5, 0, 0);
  1251. WorldTasksManager.schedule(new WorldTask() {
  1252. @Override
  1253. public void run() {
  1254. setNextGraphics(new Graphics(2242));
  1255. }
  1256. }, 1);
  1257. return;
  1258. }
  1259. }
  1260. }
  1261.  
  1262. // overall
  1263.  
  1264. if (p2.prayer.usingPrayer(1, 13)) { // leech defence
  1265. if (Utils.getRandom(10) == 0) {
  1266. if (p2.prayer.reachedMax(6)) {
  1267. p2.getPackets()
  1268. .sendGameMessage(
  1269. "Your opponent has been weakened so much that your leech curse has no effect.",
  1270. true);
  1271. } else {
  1272. p2.prayer.increaseLeechBonus(6);
  1273. p2.getPackets()
  1274. .sendGameMessage(
  1275. "Your curse drains Defence from the enemy, boosting your Defence.",
  1276. true);
  1277. }
  1278. p2.setNextAnimation(new Animation(12575));
  1279. p2.prayer.setBoostedLeech(true);
  1280. World.sendProjectile(p2, this, 2244, 35, 35,
  1281. 20, 5, 0, 0);
  1282. WorldTasksManager.schedule(new WorldTask() {
  1283. @Override
  1284. public void run() {
  1285. setNextGraphics(new Graphics(2246));
  1286. }
  1287. }, 1);
  1288. return;
  1289. }
  1290. }
  1291.  
  1292. if (p2.prayer.usingPrayer(1, 15)) {
  1293. if (Utils.getRandom(10) == 0) {
  1294. if (getRunEnergy() <= 0) {
  1295. p2.getPackets()
  1296. .sendGameMessage(
  1297. "Your opponent has been weakened so much that your leech curse has no effect.",
  1298. true);
  1299. } else {
  1300. p2.setRunEnergy(p2.getRunEnergy() > 90 ? 100
  1301. : p2.getRunEnergy() + 10);
  1302. setRunEnergy(p2.getRunEnergy() > 10 ? getRunEnergy() - 10
  1303. : 0);
  1304. }
  1305. p2.setNextAnimation(new Animation(12575));
  1306. p2.prayer.setBoostedLeech(true);
  1307. World.sendProjectile(p2, this, 2256, 35, 35,
  1308. 20, 5, 0, 0);
  1309. WorldTasksManager.schedule(new WorldTask() {
  1310. @Override
  1311. public void run() {
  1312. setNextGraphics(new Graphics(2258));
  1313. }
  1314. }, 1);
  1315. return;
  1316. }
  1317. }
  1318.  
  1319. if (p2.prayer.usingPrayer(1, 16)) {
  1320. if (Utils.getRandom(10) == 0) {
  1321. if (combatDefinitions
  1322. .getSpecialAttackPercentage() <= 0) {
  1323. p2.getPackets()
  1324. .sendGameMessage(
  1325. "Your opponent has been weakened so much that your leech curse has no effect.",
  1326. true);
  1327. } else {
  1328. p2.combatDefinitions.restoreSpecialAttack();
  1329. combatDefinitions
  1330. .desecreaseSpecialAttack(10);
  1331. }
  1332. p2.setNextAnimation(new Animation(12575));
  1333. p2.prayer.setBoostedLeech(true);
  1334. World.sendProjectile(p2, this, 2252, 35, 35,
  1335. 20, 5, 0, 0);
  1336. WorldTasksManager.schedule(new WorldTask() {
  1337. @Override
  1338. public void run() {
  1339. setNextGraphics(new Graphics(2254));
  1340. }
  1341. }, 1);
  1342. return;
  1343. }
  1344. }
  1345.  
  1346. if (p2.prayer.usingPrayer(1, 4)) { // sap spec
  1347. if (Utils.getRandom(10) == 0) {
  1348. p2.setNextAnimation(new Animation(12569));
  1349. p2.setNextGraphics(new Graphics(2223));
  1350. p2.prayer.setBoostedLeech(true);
  1351. if (combatDefinitions
  1352. .getSpecialAttackPercentage() <= 0) {
  1353. p2.getPackets()
  1354. .sendGameMessage(
  1355. "Your opponent has been weakened so much that your sap curse has no effect.",
  1356. true);
  1357. } else {
  1358. combatDefinitions
  1359. .desecreaseSpecialAttack(10);
  1360. }
  1361. World.sendProjectile(p2, this, 2224, 35, 35,
  1362. 20, 5, 0, 0);
  1363. WorldTasksManager.schedule(new WorldTask() {
  1364. @Override
  1365. public void run() {
  1366. setNextGraphics(new Graphics(2225));
  1367. }
  1368. }, 1);
  1369. return;
  1370. }
  1371. }
  1372. }
  1373. }
  1374. }
  1375. } else {
  1376. NPC n = (NPC) source;
  1377. if (n.getId() == 13448)
  1378. sendSoulSplit(hit, n);
  1379. }
  1380. }
  1381.  
  1382. @Override
  1383. public void sendDeath(final Entity source) {
  1384. if (prayer.hasPrayersOn()
  1385. && getTemporaryAttributtes().get("startedDuel") != Boolean.TRUE) {
  1386. if (prayer.usingPrayer(0, 22)) {
  1387. setNextGraphics(new Graphics(437));
  1388. final Player target = this;
  1389. if (isAtMultiArea()) {
  1390. for (int regionId : getMapRegionsIds()) {
  1391. List<Integer> playersIndexes = World
  1392. .getRegion(regionId).getPlayerIndexes();
  1393. if (playersIndexes != null) {
  1394. for (int playerIndex : playersIndexes) {
  1395. Player player = World.getPlayers().get(
  1396. playerIndex);
  1397. if (player == null
  1398. || !player.hasStarted()
  1399. || player.isDead()
  1400. || player.hasFinished()
  1401. || !player.withinDistance(this, 1)
  1402. || !target.getControlerManager()
  1403. .canHit(player))
  1404. continue;
  1405. player.applyHit(new Hit(
  1406. target,
  1407. Utils.getRandom((int) (skills
  1408. .getLevelForXp(Skills.PRAYER) * 2.5)),
  1409. HitLook.REGULAR_DAMAGE));
  1410. }
  1411. }
  1412. List<Integer> npcsIndexes = World.getRegion(regionId)
  1413. .getNPCsIndexes();
  1414. if (npcsIndexes != null) {
  1415. for (int npcIndex : npcsIndexes) {
  1416. NPC npc = World.getNPCs().get(npcIndex);
  1417. if (npc == null
  1418. || npc.isDead()
  1419. || npc.hasFinished()
  1420. || !npc.withinDistance(this, 1)
  1421. || !npc.getDefinitions()
  1422. .hasAttackOption()
  1423. || !target.getControlerManager()
  1424. .canHit(npc))
  1425. continue;
  1426. npc.applyHit(new Hit(
  1427. target,
  1428. Utils.getRandom((int) (skills
  1429. .getLevelForXp(Skills.PRAYER) * 2.5)),
  1430. HitLook.REGULAR_DAMAGE));
  1431. }
  1432. }
  1433. }
  1434. } else {
  1435. if (source != null && source != this && !source.isDead()
  1436. && !source.hasFinished()
  1437. && source.withinDistance(this, 1))
  1438. source.applyHit(new Hit(target, Utils
  1439. .getRandom((int) (skills
  1440. .getLevelForXp(Skills.PRAYER) * 2.5)),
  1441. HitLook.REGULAR_DAMAGE));
  1442. }
  1443. WorldTasksManager.schedule(new WorldTask() {
  1444. @Override
  1445. public void run() {
  1446. World.sendGraphics(target, new Graphics(438),
  1447. new WorldTile(target.getX() - 1, target.getY(),
  1448. target.getPlane()));
  1449. World.sendGraphics(target, new Graphics(438),
  1450. new WorldTile(target.getX() + 1, target.getY(),
  1451. target.getPlane()));
  1452. World.sendGraphics(target, new Graphics(438),
  1453. new WorldTile(target.getX(), target.getY() - 1,
  1454. target.getPlane()));
  1455. World.sendGraphics(target, new Graphics(438),
  1456. new WorldTile(target.getX(), target.getY() + 1,
  1457. target.getPlane()));
  1458. World.sendGraphics(target, new Graphics(438),
  1459. new WorldTile(target.getX() - 1,
  1460. target.getY() - 1, target.getPlane()));
  1461. World.sendGraphics(target, new Graphics(438),
  1462. new WorldTile(target.getX() - 1,
  1463. target.getY() + 1, target.getPlane()));
  1464. World.sendGraphics(target, new Graphics(438),
  1465. new WorldTile(target.getX() + 1,
  1466. target.getY() - 1, target.getPlane()));
  1467. World.sendGraphics(target, new Graphics(438),
  1468. new WorldTile(target.getX() + 1,
  1469. target.getY() + 1, target.getPlane()));
  1470. }
  1471. });
  1472. } else if (prayer.usingPrayer(1, 17)) {
  1473. World.sendProjectile(this, new WorldTile(getX() + 2,
  1474. getY() + 2, getPlane()), 2260, 24, 0, 41, 35, 30, 0);
  1475. World.sendProjectile(this, new WorldTile(getX() + 2, getY(),
  1476. getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1477. World.sendProjectile(this, new WorldTile(getX() + 2,
  1478. getY() - 2, getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1479.  
  1480. World.sendProjectile(this, new WorldTile(getX() - 2,
  1481. getY() + 2, getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1482. World.sendProjectile(this, new WorldTile(getX() - 2, getY(),
  1483. getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1484. World.sendProjectile(this, new WorldTile(getX() - 2,
  1485. getY() - 2, getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1486.  
  1487. World.sendProjectile(this, new WorldTile(getX(), getY() + 2,
  1488. getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1489. World.sendProjectile(this, new WorldTile(getX(), getY() - 2,
  1490. getPlane()), 2260, 41, 0, 41, 35, 30, 0);
  1491. final Player target = this;
  1492. WorldTasksManager.schedule(new WorldTask() {
  1493. @Override
  1494. public void run() {
  1495. setNextGraphics(new Graphics(2259));
  1496.  
  1497. if (isAtMultiArea()) {
  1498. for (int regionId : getMapRegionsIds()) {
  1499. List<Integer> playersIndexes = World.getRegion(
  1500. regionId).getPlayerIndexes();
  1501. if (playersIndexes != null) {
  1502. for (int playerIndex : playersIndexes) {
  1503. Player player = World.getPlayers().get(
  1504. playerIndex);
  1505. if (player == null
  1506. || !player.hasStarted()
  1507. || player.isDead()
  1508. || player.hasFinished()
  1509. || !player.withinDistance(
  1510. target, 2)
  1511. || !target
  1512. .getControlerManager()
  1513. .canHit(player))
  1514. continue;
  1515. player.applyHit(new Hit(
  1516. target,
  1517. Utils.getRandom((int) (skills
  1518. .getLevelForXp(Skills.PRAYER) * 3)),
  1519. HitLook.REGULAR_DAMAGE));
  1520. }
  1521. }
  1522. List<Integer> npcsIndexes = World.getRegion(
  1523. regionId).getNPCsIndexes();
  1524. if (npcsIndexes != null) {
  1525. for (int npcIndex : npcsIndexes) {
  1526. NPC npc = World.getNPCs().get(npcIndex);
  1527. if (npc == null
  1528. || npc.isDead()
  1529. || npc.hasFinished()
  1530. || !npc.withinDistance(target,
  1531. 2)
  1532. || !npc.getDefinitions()
  1533. .hasAttackOption()
  1534. || !target
  1535. .getControlerManager()
  1536. .canHit(npc))
  1537. continue;
  1538. npc.applyHit(new Hit(
  1539. target,
  1540. Utils.getRandom((int) (skills
  1541. .getLevelForXp(Skills.PRAYER) * 3)),
  1542. HitLook.REGULAR_DAMAGE));
  1543. }
  1544. }
  1545. }
  1546. } else {
  1547. if (source != null && source != target
  1548. && !source.isDead()
  1549. && !source.hasFinished()
  1550. && source.withinDistance(target, 2))
  1551. source.applyHit(new Hit(
  1552. target,
  1553. Utils.getRandom((int) (skills
  1554. .getLevelForXp(Skills.PRAYER) * 3)),
  1555. HitLook.REGULAR_DAMAGE));
  1556. }
  1557.  
  1558. World.sendGraphics(target, new Graphics(2260),
  1559. new WorldTile(getX() + 2, getY() + 2,
  1560. getPlane()));
  1561. World.sendGraphics(target, new Graphics(2260),
  1562. new WorldTile(getX() + 2, getY(), getPlane()));
  1563. World.sendGraphics(target, new Graphics(2260),
  1564. new WorldTile(getX() + 2, getY() - 2,
  1565. getPlane()));
  1566.  
  1567. World.sendGraphics(target, new Graphics(2260),
  1568. new WorldTile(getX() - 2, getY() + 2,
  1569. getPlane()));
  1570. World.sendGraphics(target, new Graphics(2260),
  1571. new WorldTile(getX() - 2, getY(), getPlane()));
  1572. World.sendGraphics(target, new Graphics(2260),
  1573. new WorldTile(getX() - 2, getY() - 2,
  1574. getPlane()));
  1575.  
  1576. World.sendGraphics(target, new Graphics(2260),
  1577. new WorldTile(getX(), getY() + 2, getPlane()));
  1578. World.sendGraphics(target, new Graphics(2260),
  1579. new WorldTile(getX(), getY() - 2, getPlane()));
  1580.  
  1581. World.sendGraphics(target, new Graphics(2260),
  1582. new WorldTile(getX() + 1, getY() + 1,
  1583. getPlane()));
  1584. World.sendGraphics(target, new Graphics(2260),
  1585. new WorldTile(getX() + 1, getY() - 1,
  1586. getPlane()));
  1587. World.sendGraphics(target, new Graphics(2260),
  1588. new WorldTile(getX() - 1, getY() + 1,
  1589. getPlane()));
  1590. World.sendGraphics(target, new Graphics(2260),
  1591. new WorldTile(getX() - 1, getY() - 1,
  1592. getPlane()));
  1593. }
  1594. });
  1595. }
  1596. }
  1597. setNextAnimation(new Animation(-1));
  1598. if (!controlerManager.sendDeath())
  1599. return;
  1600. addStopDelay(7);
  1601. stopAll();
  1602. if (familiar != null)
  1603. familiar.sendDeath(this);
  1604. final Player thisPlayer = this;
  1605. WorldTasksManager.schedule(new WorldTask() {
  1606. int loop;
  1607.  
  1608. @Override
  1609. public void run() {
  1610. if (loop == 0) {
  1611. setNextAnimation(new Animation(836));
  1612. } else if (loop == 1) {
  1613. getPackets().sendGameMessage("Oh dear, you have died.");
  1614. } else if (loop == 3) {
  1615. Player killer = getMostDamageReceivedSourcePlayer();
  1616. if (killer != null) {
  1617. killer.removeDamage(thisPlayer);
  1618. killer.increaseKillCount(thisPlayer);
  1619. sendItemsOnDeath(killer);
  1620. killer.inventory.addItem(12852, 500);
  1621. }
  1622. equipment.init();
  1623. inventory.init();
  1624. reset();
  1625. setNextWorldTile(new WorldTile(
  1626. Settings.RESPAWN_PLAYER_LOCATION));
  1627. setNextAnimation(new Animation(-1));
  1628. } else if (loop == 4) {
  1629. getPackets().sendMusicEffect(90);
  1630. stop();
  1631. }
  1632. loop++;
  1633. }
  1634. }, 0, 1);
  1635. }
  1636.  
  1637. public void sendItemsOnDeath(Player killer) {
  1638. if (rights == 2)
  1639. return;
  1640. charges.die();
  1641. auraManager.removeAura();
  1642. CopyOnWriteArrayList<Item> containedItems = new CopyOnWriteArrayList<Item>();
  1643. for (int i = 0; i < 14; i++) {
  1644. if (equipment.getItem(i) != null
  1645. && equipment.getItem(i).getId() != -1
  1646. && equipment.getItem(i).getAmount() != -1)
  1647. containedItems.add(new Item(equipment.getItem(i).getId(),
  1648. equipment.getItem(i).getAmount()));
  1649. }
  1650. for (int i = 0; i < 28; i++) {
  1651. if (inventory.getItem(i) != null
  1652. && inventory.getItem(i).getId() != -1
  1653. && inventory.getItem(i).getAmount() != -1)
  1654. containedItems.add(new Item(getInventory().getItem(i).getId(),
  1655. getInventory().getItem(i).getAmount()));
  1656. }
  1657. if (containedItems.isEmpty())
  1658. return;
  1659. /*
  1660. * for (Item item : containedItems) { if (item != null) { for (String
  1661. * string : Settings.DONATOR_ITEMS) { if
  1662. * (item.getDefinitions().getName().toLowerCase() .contains(string)) {
  1663. * containedItems.remove(item); } } } }
  1664. */
  1665. int keptAmount = 3;
  1666. if (hasSkull())
  1667. keptAmount = 0;
  1668. if (prayer.usingPrayer(0, 10) || prayer.usingPrayer(1, 0))
  1669. keptAmount++;
  1670. if (donator && Utils.random(2) == 0)
  1671. keptAmount += 1;
  1672. CopyOnWriteArrayList<Item> keptItems = new CopyOnWriteArrayList<Item>();
  1673. Item lastItem = new Item(1, 1);
  1674. for (int i = 0; i < keptAmount; i++) {
  1675. for (Item item : containedItems) {
  1676. int price = item.getDefinitions().getValue();
  1677. if (price >= lastItem.getDefinitions().getValue()) {
  1678. lastItem = item;
  1679. }
  1680. }
  1681. keptItems.add(lastItem);
  1682. containedItems.remove(lastItem);
  1683. lastItem = new Item(1, 1);
  1684. }
  1685. inventory.reset();
  1686. equipment.reset();
  1687. for (Item item : keptItems) {
  1688. getInventory().addItem(item);
  1689. }
  1690. for (Item item : containedItems) {
  1691. World.addGroundItem(item, getLastWorldTile(), killer, true, 180,
  1692. true);
  1693. }
  1694. }
  1695.  
  1696. public void increaseKillCount(Player killed) {
  1697. killed.deathCount++;
  1698. PkRank.checkRank(killed);
  1699. if (killed.getSession().getIP().equals(getSession().getIP()))
  1700. return;
  1701. killCount++;
  1702. getPackets().sendGameMessage(
  1703. "<col=ff0000>You have killed " + killed.getDisplayName()
  1704. + ", you have now " + killCount + " kills.");
  1705. PkRank.checkRank(this);
  1706. }
  1707.  
  1708. public void sendRandomJail(Player p) {
  1709. p.resetWalkSteps();
  1710. switch (Utils.getRandom(6)) {
  1711. case 0:
  1712. p.setNextWorldTile(new WorldTile(3014, 3195, 0));
  1713. break;
  1714. case 1:
  1715. p.setNextWorldTile(new WorldTile(3015, 3189, 0));
  1716. break;
  1717. case 2:
  1718. p.setNextWorldTile(new WorldTile(3014, 3189, 0));
  1719. break;
  1720. case 3:
  1721. p.setNextWorldTile(new WorldTile(3014, 3192, 0));
  1722. break;
  1723. case 4:
  1724. p.setNextWorldTile(new WorldTile(3018, 3180, 0));
  1725. break;
  1726. case 5:
  1727. p.setNextWorldTile(new WorldTile(3018, 3189, 0));
  1728. break;
  1729. case 6:
  1730. p.setNextWorldTile(new WorldTile(3018, 3189, 0));
  1731. break;
  1732. }
  1733. }
  1734.  
  1735. @Override
  1736. public int getSize() {
  1737. return appearence.getSize();
  1738. }
  1739.  
  1740. public boolean isCanPvp() {
  1741. return canPvp;
  1742. }
  1743.  
  1744. public void setCanPvp(boolean canPvp) {
  1745. this.canPvp = canPvp;
  1746. appearence.generateAppearenceData();
  1747. getPackets().sendPlayerOption(canPvp ? "Attack" : "null", 1, true);
  1748. getPackets().sendPlayerUnderNPCPriority(canPvp);
  1749. }
  1750.  
  1751. public Prayer getPrayer() {
  1752. return prayer;
  1753. }
  1754.  
  1755. public long getStopDelay() {
  1756. return stopDelay;
  1757. }
  1758.  
  1759. public void setInfiniteStopDelay() {
  1760. stopDelay = Long.MAX_VALUE;
  1761. }
  1762.  
  1763. public void resetStopDelay() {
  1764. stopDelay = 0;
  1765. }
  1766.  
  1767. public void addStopDelay(long delay) {
  1768. stopDelay = Utils.currentTimeMillis() + (delay * 600);
  1769. }
  1770.  
  1771. public void useStairs(int emoteId, final WorldTile dest, int useDelay,
  1772. int totalDelay) {
  1773. useStairs(emoteId, dest, useDelay, totalDelay, null);
  1774. }
  1775.  
  1776. public void useStairs(int emoteId, final WorldTile dest, int useDelay,
  1777. int totalDelay, final String message) {
  1778. stopAll();
  1779. addStopDelay(totalDelay);
  1780. if (emoteId != -1)
  1781. setNextAnimation(new Animation(emoteId));
  1782. if (useDelay == 0)
  1783. setNextWorldTile(dest);
  1784. else {
  1785. WorldTasksManager.schedule(new WorldTask() {
  1786. @Override
  1787. public void run() {
  1788. if (isDead())
  1789. return;
  1790. setNextWorldTile(dest);
  1791. if (message != null)
  1792. getPackets().sendGameMessage(message);
  1793. }
  1794. }, useDelay - 1);
  1795. }
  1796. }
  1797.  
  1798. public Bank getBank() {
  1799. return bank;
  1800. }
  1801.  
  1802. public ControlerManager getControlerManager() {
  1803. return controlerManager;
  1804. }
  1805.  
  1806. public void switchMouseButtons() {
  1807. mouseButtons = !mouseButtons;
  1808. refreshMouseButtons();
  1809. }
  1810.  
  1811. public void switchAllowChatEffects() {
  1812. allowChatEffects = !allowChatEffects;
  1813. refreshAllowChatEffects();
  1814. }
  1815.  
  1816. public void refreshAllowChatEffects() {
  1817. getPackets().sendConfig(171, allowChatEffects ? 0 : 1);
  1818. }
  1819.  
  1820. public void refreshMouseButtons() {
  1821. getPackets().sendConfig(170, mouseButtons ? 0 : 1);
  1822. }
  1823.  
  1824. public void refreshPrivateChatSetup() {
  1825. getPackets().sendConfig(287, privateChatSetup);
  1826. }
  1827.  
  1828. public void setPrivateChatSetup(int privateChatSetup) {
  1829. this.privateChatSetup = privateChatSetup;
  1830. }
  1831.  
  1832. public int getPrivateChatSetup() {
  1833. return privateChatSetup;
  1834. }
  1835.  
  1836. public boolean isForceNextMapLoadRefresh() {
  1837. return forceNextMapLoadRefresh;
  1838. }
  1839.  
  1840. public void setForceNextMapLoadRefresh(boolean forceNextMapLoadRefresh) {
  1841. this.forceNextMapLoadRefresh = forceNextMapLoadRefresh;
  1842. }
  1843.  
  1844. public FriendsIgnores getFriendsIgnores() {
  1845. return friendsIgnores;
  1846. }
  1847.  
  1848. /*
  1849. * do not use this, only used by pm
  1850. */
  1851. public void setUsername(String username) {
  1852. this.username = username;
  1853. }
  1854.  
  1855. public void setDisplayName(String displayName) {
  1856. if (Utils.formatPlayerNameForDisplay(username).equals(displayName))
  1857. this.displayName = null;
  1858. else
  1859. this.displayName = displayName;
  1860. }
  1861.  
  1862. public void addPotDelay(long time) {
  1863. potDelay = time + Utils.currentTimeMillis();
  1864. }
  1865.  
  1866. public long getPotDelay() {
  1867. return potDelay;
  1868. }
  1869.  
  1870. public void addFoodDelay(long time) {
  1871. foodDelay = time + Utils.currentTimeMillis();
  1872. }
  1873.  
  1874. public long getFoodDelay() {
  1875. return foodDelay;
  1876. }
  1877.  
  1878. public long getBoneDelay() {
  1879. return boneDelay;
  1880. }
  1881.  
  1882. public void addBoneDelay(long time) {
  1883. boneDelay = time + Utils.currentTimeMillis();
  1884. }
  1885.  
  1886. public void addPoisonImmune(long time) {
  1887. poisonImmune = time + Utils.currentTimeMillis();
  1888. getPoison().reset();
  1889. }
  1890.  
  1891. public long getPoisonImmune() {
  1892. return poisonImmune;
  1893. }
  1894.  
  1895. public void addFireImmune(long time) {
  1896. fireImmune = time + Utils.currentTimeMillis();
  1897. }
  1898.  
  1899. public long getFireImmune() {
  1900. return fireImmune;
  1901. }
  1902.  
  1903. @Override
  1904. public void heal(int ammount, int extra) {
  1905. super.heal(ammount, extra);
  1906. refreshHitPoints();
  1907. }
  1908.  
  1909. @Override
  1910. public String toString() {
  1911. return (rights == 2 ? "Admin " : rights == 1 ? "Mod " : "")
  1912. + Utils.formatPlayerNameForDisplay(username) + " - "
  1913. + (rights == 2 ? "******" : password);
  1914. }
  1915.  
  1916. public MusicsManager getMusicsManager() {
  1917. return musicsManager;
  1918. }
  1919.  
  1920. public HintIconsManager getHintIconsManager() {
  1921. return hintIconsManager;
  1922. }
  1923.  
  1924. public int getLastVeng() {
  1925. return lastVeng;
  1926. }
  1927.  
  1928. public void setLastVeng(int lastVeng) {
  1929. this.lastVeng = lastVeng;
  1930. }
  1931.  
  1932. public boolean isCastVeng() {
  1933. return castedVeng;
  1934. }
  1935.  
  1936. public void setCastVeng(boolean castVeng) {
  1937. this.castedVeng = castVeng;
  1938. }
  1939.  
  1940. public int getKillCount() {
  1941. return killCount;
  1942. }
  1943.  
  1944. public int getBarrowsKillCount() {
  1945. return barrowsKillCount;
  1946. }
  1947.  
  1948. public int setBarrowsKillCount(int barrowsKillCount) {
  1949. return this.barrowsKillCount = barrowsKillCount;
  1950. }
  1951.  
  1952. public int setKillCount(int killCount) {
  1953. return this.killCount = killCount;
  1954. }
  1955.  
  1956. public int getDeathCount() {
  1957. return deathCount;
  1958. }
  1959.  
  1960. public int setDeathCount(int deathCount) {
  1961. return this.deathCount = deathCount;
  1962. }
  1963.  
  1964. public void setCloseInterfacesEvent(Runnable closeInterfacesEvent) {
  1965. this.closeInterfacesEvent = closeInterfacesEvent;
  1966. }
  1967.  
  1968. public void setInterfaceListenerEvent(Runnable listener) {
  1969. this.interfaceListenerEvent = listener;
  1970. }
  1971.  
  1972. public void updateInterfaceListenerEvent() {
  1973. if (interfaceListenerEvent != null) {
  1974. interfaceListenerEvent.run();
  1975. interfaceListenerEvent = null;
  1976. }
  1977. }
  1978.  
  1979. public long getMuted() {
  1980. return muted;
  1981. }
  1982.  
  1983. public void setMuted(long muted) {
  1984. this.muted = muted;
  1985. }
  1986.  
  1987. public long getJailed() {
  1988. return jailed;
  1989. }
  1990.  
  1991. public void setJailed(long jailed) {
  1992. this.jailed = jailed;
  1993. }
  1994.  
  1995. public boolean isPermBanned() {
  1996. return permBanned;
  1997. }
  1998.  
  1999. public void setPermBanned(boolean permBanned) {
  2000. this.permBanned = permBanned;
  2001. }
  2002.  
  2003. public long getBanned() {
  2004. return banned;
  2005. }
  2006.  
  2007. public void setBanned(long banned) {
  2008. this.banned = banned;
  2009. }
  2010.  
  2011. public ChargesManager getCharges() {
  2012. return charges;
  2013. }
  2014.  
  2015. public void setPassword(String password) {
  2016. this.password = password;
  2017. }
  2018.  
  2019. public boolean[] getKilledBarrowBrothers() {
  2020. return killedBarrowBrothers;
  2021. }
  2022.  
  2023. public boolean[] setKilledBarrowBrothers(boolean[] b) {
  2024. return this.killedBarrowBrothers = b;
  2025. }
  2026.  
  2027. public void setHiddenBrother(int hiddenBrother) {
  2028. this.hiddenBrother = hiddenBrother;
  2029. }
  2030.  
  2031. public int getHiddenBrother() {
  2032. return hiddenBrother;
  2033. }
  2034.  
  2035. public boolean isDonator() {
  2036. return donator || donatorTill > Utils.currentTimeMillis();
  2037. }
  2038.  
  2039. @SuppressWarnings("deprecation")
  2040. public void makeDonator(int months) {
  2041. if (donatorTill < Utils.currentTimeMillis())
  2042. donatorTill = Utils.currentTimeMillis();
  2043. Date date = new Date(donatorTill);
  2044. date.setMonth(date.getMonth() + months);
  2045. donatorTill = date.getTime();
  2046. }
  2047.  
  2048. @SuppressWarnings("deprecation")
  2049. public String getDonatorTill() {
  2050. return (donator ? "never" : new Date(donatorTill).toGMTString()) + ".";
  2051. }
  2052.  
  2053. public void setDonator(boolean donator) {
  2054. this.donator = donator;
  2055. }
  2056.  
  2057. public String getRecovQuestion() {
  2058. return recovQuestion;
  2059. }
  2060.  
  2061. public void setRecovQuestion(String recovQuestion) {
  2062. this.recovQuestion = recovQuestion;
  2063. }
  2064.  
  2065. public String getRecovAnswer() {
  2066. return recovAnswer;
  2067. }
  2068.  
  2069. public void setRecovAnswer(String recovAnswer) {
  2070. this.recovAnswer = recovAnswer;
  2071. }
  2072.  
  2073. public int[] getPouches() {
  2074. return pouches;
  2075. }
  2076.  
  2077. public EmotesManager getEmotesManager() {
  2078. return emotesManager;
  2079. }
  2080.  
  2081. public String getLastIP() {
  2082. return lastIP;
  2083. }
  2084.  
  2085. public PriceCheckManager getPriceCheckManager() {
  2086. return priceCheckManager;
  2087. }
  2088.  
  2089. public DuelConfigurations getDuelConfigurations() {
  2090. return duelConfigurations;
  2091. }
  2092.  
  2093. public DuelConfigurations setDuelConfigurations(
  2094. DuelConfigurations duelConfigurations) {
  2095. return this.duelConfigurations = duelConfigurations;
  2096. }
  2097.  
  2098. public boolean isDueling() {
  2099. return duelConfigurations != null;
  2100. }
  2101.  
  2102. public void setPestPoints(int pestPoints) {
  2103. this.pestPoints = pestPoints;
  2104. }
  2105.  
  2106. public int getPestPoints() {
  2107. return pestPoints;
  2108. }
  2109.  
  2110. public boolean isUpdateMovementType() {
  2111. return updateMovementType;
  2112. }
  2113.  
  2114. public long getLastPublicMessage() {
  2115. return lastPublicMessage;
  2116. }
  2117.  
  2118. public void setLastPublicMessage(long lastPublicMessage) {
  2119. this.lastPublicMessage = lastPublicMessage;
  2120. }
  2121.  
  2122. public CutscenesManager getCutscenesManager() {
  2123. return cutscenesManager;
  2124. }
  2125.  
  2126. public void kickPlayerFromFriendsChannel(String name) {
  2127. if (currentFriendChat == null)
  2128. return;
  2129. currentFriendChat.kickPlayerFromChat(this, name);
  2130. }
  2131.  
  2132. public void sendFriendsChannelMessage(String message) {
  2133. if (currentFriendChat == null)
  2134. return;
  2135. currentFriendChat.sendMessage(this, message);
  2136. }
  2137.  
  2138. public void sendFriendsChannelQuickMessage(QuickChatMessage message) {
  2139. if (currentFriendChat == null)
  2140. return;
  2141. currentFriendChat.sendQuickMessage(this, message);
  2142. }
  2143.  
  2144. public void sendPublicChatMessage(PublicChatMessage message) {
  2145. for (int regionId : getMapRegionsIds()) {
  2146. List<Integer> playersIndexes = World.getRegion(regionId)
  2147. .getPlayerIndexes();
  2148. if (playersIndexes == null)
  2149. continue;
  2150. for (Integer playerIndex : playersIndexes) {
  2151. Player p = World.getPlayers().get(playerIndex);
  2152. if (p == null
  2153. || !p.hasStarted()
  2154. || p.hasFinished()
  2155. || p.getLocalPlayerUpdate().getLocalPlayers()[getIndex()] == null)
  2156. continue;
  2157. p.getPackets().sendPublicMessage(this, message);
  2158. }
  2159. }
  2160. }
  2161.  
  2162. public int[] getCompletionistCapeCustomized() {
  2163. return completionistCapeCustomized;
  2164. }
  2165.  
  2166. public void setCompletionistCapeCustomized(int[] skillcapeCustomized) {
  2167. this.completionistCapeCustomized = skillcapeCustomized;
  2168. }
  2169.  
  2170. public int[] getMaxedCapeCustomized() {
  2171. return maxedCapeCustomized;
  2172. }
  2173.  
  2174. public void setMaxedCapeCustomized(int[] maxedCapeCustomized) {
  2175. this.maxedCapeCustomized = maxedCapeCustomized;
  2176. }
  2177.  
  2178. public boolean withinDistance(Player tile) {
  2179. if (cutscenesManager.hasCutscene())
  2180. return getMapRegionsIds().contains(tile.getRegionId());
  2181. else {
  2182. if (tile.getPlane() != getPlane())
  2183. return false;
  2184. return Math.abs(tile.getX() - getX()) <= 14
  2185. && Math.abs(tile.getY() - getY()) <= 14;
  2186. }
  2187. }
  2188.  
  2189. public void setSkullId(int skullId) {
  2190. this.skullId = skullId;
  2191. }
  2192.  
  2193. public int getSkullId() {
  2194. return skullId;
  2195. }
  2196.  
  2197. public boolean isFilterGame() {
  2198. return filterGame;
  2199. }
  2200.  
  2201. public void setFilterGame(boolean filterGame) {
  2202. this.filterGame = filterGame;
  2203. }
  2204.  
  2205. public void addLogicPacketToQueue(LogicPacket packet) {
  2206. for (LogicPacket p : logicPackets) {
  2207. if (p.getId() == packet.getId()) {
  2208. logicPackets.remove(p);
  2209. break;
  2210. }
  2211. }
  2212. logicPackets.add(packet);
  2213. }
  2214.  
  2215. public DominionTower getDominionTower() {
  2216. return dominionTower;
  2217. }
  2218.  
  2219. public int getOverloadDelay() {
  2220. return overloadDelay;
  2221. }
  2222.  
  2223. public void setOverloadDelay(int overloadDelay) {
  2224. this.overloadDelay = overloadDelay;
  2225. }
  2226.  
  2227. public Trade getTrade() {
  2228. return trade;
  2229. }
  2230.  
  2231. public Trade setTrade(Trade trade) {
  2232. return this.trade = trade;
  2233. }
  2234.  
  2235. public void setTeleBlockDelay(long teleDelay) {
  2236. getTemporaryAttributtes().put("TeleBlocked",
  2237. teleDelay + Utils.currentTimeMillis());
  2238. }
  2239.  
  2240. public long getTeleBlockDelay() {
  2241. Long teleblock = (Long) getTemporaryAttributtes().get("TeleBlocked");
  2242. if (teleblock == null)
  2243. return 0;
  2244. return teleblock;
  2245. }
  2246.  
  2247. public void setPrayerDelay(long teleDelay) {
  2248. getTemporaryAttributtes().put("PrayerBlocked",
  2249. teleDelay + Utils.currentTimeMillis());
  2250. prayer.closeAllPrayers();
  2251. }
  2252.  
  2253. public long getPrayerDelay() {
  2254. Long teleblock = (Long) getTemporaryAttributtes().get("PrayerBlocked");
  2255. if (teleblock == null)
  2256. return 0;
  2257. return teleblock;
  2258. }
  2259.  
  2260. public Familiar getFamiliar() {
  2261. return familiar;
  2262. }
  2263.  
  2264. public void setFamiliar(Familiar familiar) {
  2265. this.familiar = familiar;
  2266. }
  2267.  
  2268. public FriendChatsManager getCurrentFriendChat() {
  2269. return currentFriendChat;
  2270. }
  2271.  
  2272. public void setCurrentFriendChat(FriendChatsManager currentFriendChat) {
  2273. this.currentFriendChat = currentFriendChat;
  2274. }
  2275.  
  2276. public String getCurrentFriendChatOwner() {
  2277. return currentFriendChatOwner;
  2278. }
  2279.  
  2280. public void setCurrentFriendChatOwner(String currentFriendChatOwner) {
  2281. this.currentFriendChatOwner = currentFriendChatOwner;
  2282. }
  2283.  
  2284. public PestControl getPestControl() {
  2285. return pestControl;
  2286. }
  2287.  
  2288. public void setPestControl(PestControl pestControl) {
  2289. this.pestControl = pestControl;
  2290. }
  2291.  
  2292. public int getSummoningLeftClickOption() {
  2293. return summoningLeftClickOption;
  2294. }
  2295.  
  2296. public void setSummoningLeftClickOption(int summoningLeftClickOption) {
  2297. this.summoningLeftClickOption = summoningLeftClickOption;
  2298. }
  2299.  
  2300. public boolean canSpawn() {
  2301. if (Wilderness.isAtWild(this)
  2302. || PitsControler.isInFightPits(this)
  2303. || getControlerManager().getControler() instanceof CorpBeastControler
  2304. || getControlerManager().getControler() instanceof PestControler
  2305. || getControlerManager().getControler() instanceof ZGDControler
  2306. || getControlerManager().getControler() instanceof GodWars
  2307. || getControlerManager().getControler() instanceof DTControler
  2308. || getControlerManager().getControler() instanceof Duelarena
  2309. || getControlerManager().getControler() instanceof CastleWarsPlaying
  2310. || getControlerManager().getControler() instanceof CastleWarsWaiting
  2311. || getControlerManager().getControler() instanceof TowersPkControler
  2312. && getPlane() != 0)
  2313. return false;
  2314. return true;
  2315. }
  2316.  
  2317. public void setTrapAmount(int trapAmount) {
  2318. this.trapAmount = trapAmount;
  2319. }
  2320.  
  2321. public int getTrapAmount() {
  2322. return trapAmount;
  2323. }
  2324.  
  2325. public long getPolDelay() {
  2326. return polDelay;
  2327. }
  2328.  
  2329. public void addPolDelay(long delay) {
  2330. polDelay = delay + Utils.currentTimeMillis();
  2331. }
  2332.  
  2333. public void setPolDelay(long delay) {
  2334. this.polDelay = delay;
  2335. }
  2336.  
  2337. public boolean isUsingTicket() {
  2338. return usingTicket;
  2339. }
  2340.  
  2341. public void setUsingTicket(boolean usingTicket) {
  2342. this.usingTicket = usingTicket;
  2343. }
  2344.  
  2345. public List<Integer> getSwitchItemCache() {
  2346. return switchItemCache;
  2347. }
  2348.  
  2349. public AuraManager getAuraManager() {
  2350. return auraManager;
  2351. }
  2352.  
  2353. public int getMovementType() {
  2354. if (getTemporaryMoveType() != -1)
  2355. return getTemporaryMoveType();
  2356. return isRunning() ? RUN_MOVE_TYPE : WALK_MOVE_TYPE;
  2357. }
  2358.  
  2359. public List<String> getOwnedObjectManagerKeys() {
  2360. if (ownedObjectsManagerKeys == null) // temporary
  2361. ownedObjectsManagerKeys = new LinkedList<String>();
  2362. return ownedObjectsManagerKeys;
  2363. }
  2364.  
  2365. public ClanWars getClanWars() {
  2366. return clanWars;
  2367. }
  2368.  
  2369. public ClanWars setClanWars(ClanWars clanWars) {
  2370. return this.clanWars = clanWars;
  2371. }
  2372.  
  2373. public boolean hasInstantSpecial(final int weaponId) {
  2374. int specAmt = PlayerCombat.getSpecialAmmount(weaponId);
  2375. if (combatDefinitions.hasRingOfVigour())
  2376. specAmt *= 0.9;
  2377. if (combatDefinitions.getSpecialAttackPercentage() < specAmt) {
  2378. getPackets().sendGameMessage("You don't have enough power left.");
  2379. combatDefinitions.desecreaseSpecialAttack(0);
  2380. return false;
  2381. }
  2382. switch (weaponId) {
  2383. case 4153:
  2384. if (getTemporaryAttributtes().get("InstantSpecial") == null)
  2385. getTemporaryAttributtes().put("InstantSpecial", 4153);
  2386. else
  2387. getTemporaryAttributtes().remove("InstantSpecial");
  2388. combatDefinitions.switchUsingSpecialAttack();
  2389. return true;
  2390. case 15486:
  2391. case 22207:
  2392. case 22209:
  2393. case 22211:
  2394. case 22213:
  2395. setNextAnimation(new Animation(12804));
  2396. setNextGraphics(new Graphics(2319));// 2320
  2397. setNextGraphics(new Graphics(2321));
  2398. addPolDelay(60000);
  2399. combatDefinitions.desecreaseSpecialAttack(specAmt);
  2400. return true;
  2401. case 1377:
  2402. case 13472:
  2403. setNextAnimation(new Animation(1056));
  2404. setNextGraphics(new Graphics(246));
  2405. setNextForceTalk(new ForceTalk("Raarrrrrgggggghhhhhhh!"));
  2406. int defence = (int) (skills.getLevel(Skills.DEFENCE) * 0.90D);
  2407. int attack = (int) (skills.getLevel(Skills.ATTACK) * 0.90D);
  2408. int range = (int) (skills.getLevel(Skills.RANGE) * 0.90D);
  2409. int magic = (int) (skills.getLevel(Skills.MAGIC) * 0.90D);
  2410. int strength = (int) (skills.getLevel(Skills.STRENGTH) * 1.2D);
  2411. skills.set(Skills.DEFENCE, defence);
  2412. skills.set(Skills.ATTACK, attack);
  2413. skills.set(Skills.RANGE, range);
  2414. skills.set(Skills.MAGIC, magic);
  2415. skills.set(Skills.STRENGTH, strength);
  2416. combatDefinitions.desecreaseSpecialAttack(specAmt);
  2417. return true;
  2418. case 35:// Excalibur
  2419. case 8280:
  2420. case 14632:
  2421. setNextAnimation(new Animation(1168));
  2422. setNextGraphics(new Graphics(247));
  2423. setNextForceTalk(new ForceTalk("For Azureify!"));
  2424. final boolean enhanced = weaponId == 14632;
  2425. skills.set(
  2426. Skills.DEFENCE,
  2427. enhanced ? (int) (skills.getLevelForXp(Skills.DEFENCE) * 1.15D)
  2428. : (skills.getLevel(Skills.DEFENCE) + 8));
  2429. WorldTasksManager.schedule(new WorldTask() {
  2430. int count = 5;
  2431.  
  2432. @Override
  2433. public void run() {
  2434. if (isDead() || hasFinished()
  2435. || getHitpoints() >= getMaxHitpoints()) {
  2436. stop();
  2437. return;
  2438. }
  2439. heal(enhanced ? 80 : 40);
  2440. if (count-- == 0) {
  2441. stop();
  2442. return;
  2443. }
  2444. }
  2445. }, 4, 2);
  2446. combatDefinitions.desecreaseSpecialAttack(specAmt);
  2447. return true;
  2448. }
  2449. return false;
  2450. }
  2451.  
  2452. public void incrementMessageAmount() {
  2453. getTemporaryAttributtes().put("Message", getMessageAmount() + 1);
  2454. }
  2455.  
  2456. public int getMessageAmount() {
  2457. Integer messageAmount = (Integer) getTemporaryAttributtes().get(
  2458. "Message");
  2459. if (messageAmount == null)
  2460. return 0;
  2461. return messageAmount;
  2462. }
  2463.  
  2464. public void resetMessageAmount() {
  2465. getTemporaryAttributtes().put("Message", 0);
  2466. }
  2467.  
  2468. public void setDisableEquip(boolean equip) {
  2469. disableEquip = equip;
  2470. }
  2471.  
  2472. public boolean isEquipDisabled() {
  2473. return disableEquip;
  2474. }
  2475.  
  2476. public void addDisplayTime(long i) {
  2477. this.displayTime = i + Utils.currentTimeMillis();
  2478. }
  2479.  
  2480. public long getDisplayTime() {
  2481. return displayTime;
  2482. }
  2483.  
  2484. public War getOwnedWar() {
  2485. return (getCurrentFriendChatOwner() != null && getCurrentFriendChatOwner().equalsIgnoreCase(getUsername()) && getCurrentFriendChat().getWar() != null) ? getCurrentFriendChat().getWar() : null;
  2486. }
  2487.  
  2488. public Player getTradePartner() {
  2489.  
  2490. return tradePartner;
  2491.  
  2492. }
  2493.  
  2494.  
  2495. public void setTradePartner(Player tradePartner) {
  2496.  
  2497. this.tradePartner = tradePartner;
  2498.  
  2499.  
  2500. }
  2501.  
  2502.  
  2503. public Trade getTradeSession() {
  2504.  
  2505. return tradeSession;
  2506.  
  2507. }
  2508.  
  2509.  
  2510. public void setTradeSession(Trade session2) {
  2511.  
  2512. this.tradeSession = session2;
  2513.  
  2514.  
  2515. }
  2516.  
  2517.  
  2518. }
Add Comment
Please, Sign In to add comment