Guest User

Untitled

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