Guest User

Untitled

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