Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 144.24 KB | None | 0 0
  1. /*
  2.  * Class Player
  3.  *
  4.  * Version 1.0
  5.  *
  6.  * Thursday, August 14, 2008
  7.  *
  8.  * Created by Palidino76 Codeusa
  9.  */
  10.  
  11. package net.COM.codeusa.model;
  12.  
  13. import java.io.FileWriter;
  14. import java.io.BufferedReader;
  15. import java.io.BufferedWriter;
  16. import java.io.FileReader;
  17. import java.io.IOException;
  18. import java.net.Socket;
  19. import java.util.*;
  20. import java.lang.*;
  21. import net.COM.codeusa.test.TestWorldLoader;
  22. import net.COM.codeusa.model.misc.*;
  23. import net.COM.codeusa.model.games.*;
  24. import net.COM.codeusa.clanchat.ClanChat;
  25. import net.COM.codeusa.model.skills.*;
  26. import net.COM.codeusa.model.combat.*;
  27. import net.COM.codeusa.model.quest.*;
  28. import net.COM.codeusa.*;
  29. import net.COM.codeusa.io.*;
  30. import net.COM.codeusa.net.PlayerSocket;
  31. import net.COM.codeusa.util.ByteVector;
  32. import net.COM.codeusa.util.Misc;
  33. import net.COM.codeusa.npcs.NPC;
  34. import net.COM.codeusa.model.items.*;
  35. import net.COM.codeusa.model.items.PlayerWeapon;
  36. import net.COM.codeusa.model.ptrade.PTrade;
  37.  
  38. public class Player implements Entity {
  39.  
  40.  
  41. /* Pvp Degrading Author Tim*/
  42. public INT vls = 325;//Vesta longsword
  43. public INT sw = 325;//Statius Warhammer
  44. public INT vs = 325;//Vesta's Spear
  45. public INT zs = 325;//Zuriel's Staff
  46. public INT stpl = 325;//Statius's Platebody
  47. public INT stl = 325;//Statius's Platelegs
  48. public INT sth = 325;//Statius's Fullhelm
  49. public INT vch = 325;//Vesta's Chainbody
  50. public INT vps = 325;//Vesta's Plateskirt
  51. public INT mc = 325;//Morrigan's Coif
  52. public INT ml = 325;//Morrigans Leather body
  53. public INT mlc = 325;//Morrigans leather chaps
  54. public INT zrt = 325;//Zuriel Robe top
  55. public INT zrh = 325;//Zuriel robe hat
  56. public INT zrb = 325;//Zuriel Robe Bottom
  57. public INT cvls = 150;//Vesta longsword
  58. public INT csw = 150;//Statius Warhammer
  59. public INT CVS = 150;//Vesta's Spear
  60. public INT czs = 150;//Zuriel's Staff
  61. public INT cstpl = 150;//Statius's Platebody
  62. public INT cstl = 150;//Statius's Platelegs
  63. public INT csth = 150;//Statius's Fullhelm
  64. public INT cvch = 150;//Vesta's Chainbody
  65. public INT cvps = 150;//Vesta's Plateskirt
  66. public INT cmc = 150;//Morrigan's Coif
  67. public INT cml = 150;//Morrigans Leather body
  68. public INT cmlc = 150;//Morrigans leather chaps
  69. public INT czrt = 150;//Zuriel Robe top
  70. public INT czrh = 150;//Zuriel robe hat
  71. public INT czrb = 150;//Zuriel Robe Bottom
  72.    /* END Of Degrading */
  73.  
  74.     public boolean noteItems = false;
  75.                  public STRING clanRoom = "";
  76.     public List<Long> friends = new ArrayList<Long>(200);
  77.     public List<Long> ignores = new ArrayList<Long>(100);
  78. /*
  79.  * AutoCasting
  80.  * Tim
  81.  *
  82.  */
  83.    public INT[] regularStaffs = {
  84.     1381
  85.     };
  86.     public INT[] otherStaffs = {
  87.     4675,6914,13867
  88.     };
  89.  public INT autoCastDmgDelay = -1;
  90.  public INT autoCastDelay;
  91.  public INT[] autoCast = new INT[3];
  92.  public boolean castAuto;
  93.  public INT autoCastSpellbook = 192; // Default: Moderns
  94.  public LONG lastAutoCast = 0;
  95.  public boolean usingAutoCast;
  96.  public INT autocastSpell = 0;
  97.  public boolean autocast = false;
  98.  public INT autocastSpellbook = 0;
  99.  
  100.     public boolean inLowBounty = false;
  101.     public boolean inMedBounty = false;
  102.     public boolean inHighBounty = false;
  103.     public INT bountyMaxPlayers = 100;
  104.     public boolean bountyInterface = false;
  105.     public INT BhTimer;
  106.     public INT leftBhTimer = 0;
  107.     public INT bhPickup;
  108.     public INT bhLeave;
  109.     public INT bhTarget = 0;
  110.     public INT switchSpells = 0;
  111.     public INT fleeTimer = 0;
  112.     public INT bhLeave1;
  113.     public boolean inBounty = false;
  114.     public INT serverMsg;
  115.     public INT pickedUp;
  116.     public INT InBounty = 0;
  117.  
  118.     /*Miasmic Spell TIMER*/
  119.     public INT miasmicSpell;
  120.  
  121.     public transient INT hitDelay = 0;
  122.     public INT direction = 0;
  123.    
  124.     public INT followPlayer;
  125.         public boolean followingPlayer;
  126.  
  127.     public boolean DFSSpecial;
  128.     public LONG lastDFS;
  129.     public INT DFSDelay = -1;
  130.  
  131.     public INT points = 0; //bandos
  132.     public INT apoints = 0; //armadyl
  133.     public INT spoints = 0; //saradomin
  134.     public INT zpoints = 0; //zamorak  
  135.  
  136.     public boolean wildWarned = false;
  137.     public boolean swapAsNote = false;
  138.  
  139.     public boolean initialAttack;
  140.  
  141.     public boolean dboltspecial;
  142.     public boolean diamondboltspecial;
  143.     public boolean onyxboltspecial;
  144.     public boolean morriganjavs;
  145.     public boolean morriganaxes;
  146.         public INT turmoilon;
  147.         public INT rangeon;
  148.         public INT strengthon;
  149.         public INT mageon;
  150.         public INT defenceon;
  151.         public INT attackon;
  152.     public INT prayOff = 0;
  153.    
  154.     public STRING nameSet;
  155.     public INT setDrop;
  156.  
  157.     public INT KC;
  158.     public INT DC;
  159.  
  160.     public INT msgTimer = 8;
  161.     public INT safeTimer = 0;
  162.     public boolean underAttack = false;
  163.     public boolean inWild = false;
  164.     public boolean safed = false;
  165.  
  166.     public STRING chatName;
  167.     public final STRING ACTIVE_CHAT_DEFAULT = "Sinner's Heaven";
  168.     public STRING activeChat = ACTIVE_CHAT_DEFAULT;
  169.     public final STRING ACTIVE_CHAT_OWNER_DEFAULT = "Public Channel";
  170.     public STRING activeChatOwner = ACTIVE_CHAT_OWNER_DEFAULT;
  171.  
  172. STRING[][] itemPrices = {{"Warrior helm", "536"}, {"Dwarf remains", "1000000000"}, {"Enchanted robe", "495"}, {"Enchanted top", "741"}, {"Enchanted hat", "89"}, {"Adamant knife", "2"}, {"Adamant knife(p)", "4"}, {"Adamant knife(p+)", "5"}, {"Adamant knife(p++)", "13"}, {"Adamant dart", "1"}, {"Adamant dart(p)", "3"}, {"Adamant dart(p+)", "4"}, {"Adamant dart(p++)", "12"}, {"Tzhaar-ket-em", "891"}, {"Barrelchest anchor", "2300"}, {"Crystal bow full", "9000"}, {"Crystal shield full", "9000"}, {"Rune chainbody", "315"}, {"Zamorakian spear", "14395"}, {"Saradomin staff", "800"}, {"Guthix staff", "800"}, {"Zamorak staff", "800"}, {"Bolt rack", "2"}, {"Santa hat", "131601"}, {"Tuna potato", "14"}, {"Wizard boots", "3319"}, {"Regen bracelet", "2570"}, {"Combat bracelet", "137"}, {"Combat bracelet(1)", "137"}, {"Combat bracelet(2)", "137"}, {"Combat bracelet(3)", "137"}, {"Combat bracelet(4)", "137"}, {"Splitbark body", "271"}, {"Splitbark boots", "28"}, {"Splitbark gauntlets", "28"}, {"Splitback helm", "59"}, {"Splitback legs", "240"}, {"Dwarven helmet", "358"}, {"Abyssal whip", "14570"}, {"Fire cape", "10000"}, {"Armadyl godsword", "675018"}, {"Bandos godsword", "188580"}, {"Saradomin godsword", "496437"}, {"Zamorak godsword", "267983"}, {"Dragon med helm", "885"}, {"Dragon sq shield", "5630"}, {"Dragon dagger", "292"}, {"Dragon dagger(p)", "305"}, {"Dragon dagger(p+)", "312"}, {"Drag dagger(p++)", "350"}, {"Dragon spear", "451"}, {"Dragon spear(p)", "460"}, {"Dragon spear(p+)", "465"}, {"Dragon spear(p++)", "506"}, {"Dragon longsword", "956"}, {"Dragon battleaxe", "1200"}, {"Dragon mace", "298"}, {"Dragon claws", "277832"}, {"Dragon chainbody", "50565"}, {"Dragon halberd", "1948"}, {"Dragon platelegs", "6323"}, {"Dragon plateskirt", "1979"}, {"Dragon scimitar", "998"}, {"Dragon platebody", "99230"}, {"Dragon axe", "16880"}, {"Dragon 2h sword", "8921"}, {"Dragon bolts (e)", "46"}, {"Diamond bolts (e)", "8"}, {"Dragon arrow", "29"}, {"Dragon arrow(p)", "31"}, {"Dragon arrow(p+)", "32"}, {"Dragon arrow(p++)", "40"}, {"Dragon fire arrows", "26"}, {"Dragonfire shield", "177038"}, {"Dragon full helm", "125349"}, {"Dragon boots", "2407"}, {"Dragon dart", "6"}, {"Dragon dart(p)", "8"}, {"Dragon dart(p+)", "9"}, {"Dragon dart(p++)", "17"}, {"Dragon bones", "24"}, {"Big bones", "3"}, {"Astral rune", "1"}, {"Blood rune", "3"}, {"Death rune", "3"}, {"Law rune", "3"}, {"Nature rune", "2"}, {"Soul rune", "3"}, {"Rune arrow", "2"}, {"Rune arrow(p)", "4"}, {"Rune arrow(p+)", "5"}, {"Rune arrow(p++)", "13"}, {"Rune fire arrows", "2"}, {"Rune c'bow", "95"}, {"Rune dart", "2"}, {"Rune dart(p)", "4"}, {"Rune dart(p+)", "5"}, {"Rune dart(p++)", "13"}, {"Rune fire arrows", "2"}, {"Rune full helm (t)", "3160"}, {"Rune full helm(g)", "4792"}, {"Rune kiteshield (g)", "4307"}, {"Rune kiteshield (t)", "2838"}, {"Rune platebody (g)", "6296"}, {"Rune platebody (t)", "3995"}, {"Rune platelegs (g)", "6296"}, {"Rune platelegs (t)", "2076"}, {"Rune plateskirt (g)", "639"}, {"Rune plateskirt (t)", "569"}, {"Rune full helm", "211"}, {"Rune boots", "460"}, {"Rune kiteshield", "499"}, {"Rune med helm", "114"}, {"Rune platebody", "578"}, {"Rune platelegs", "507"}, {"Rune plateskirt", "443"}, {"Rune sq shield", "230"}, {"Rune thrownaxe", "3"}, {"Gilded full helm", "3957"}, {"Gilded kiteshield", "4460"}, {"Gilded platebody", "15019"}, {"Gilded platelegs", "5902"}, {"Gilded plateskirt", "1618"}, {"Guthix full helm", "38888"}, {"Guthix kiteshield", "3763"}, {"Guthix platebody", "6185"}, {"Guthix platelegs", "2935"}, {"Guthix plateskirt", "577"}, {"Saradomin full", "8430"}, {"Saradomin kite", "8776"}, {"Saradomin plate", "16213"}, {"Saradomin legs", "3694"}, {"Saradomin skirt", "1003"}, {"Zamorak full helm", "5814"}, {"Zamorak kiteshield", "6221"}, {"Zamorak platebody", "11047"}, {"Zamorak platelegs", "3534"}, {"Zamorak plateskirt", "991"}, {"Adam full helm(g)", "1121"}, {"Adam full helm(t)", "601"}, {"Adam kiteshield (g)", "1159"}, {"Adam kiteshield (t)", "414"}, {"Adam platebody (g)", "2009"}, {"Adam platebody (t)", "908"}, {"Adam platelegs (g)", "792"}, {"Adam plateskirt (t)", "152"}, {"Adamant arrow", "1"}, {"Adamant arrow(p)", "3"}, {"Adamant arrow(p+)", "4"}, {"Adamant arrow(p++)", "12"}, {"Adamant fire arrows", "9"}, {"Adamant javelin", "1"}, {"Adamant javelin(p)", "3"}, {"Adamant javelin(p+)", "4"}, {"Adamant javelin(p++)", "12"}, {"Adamant chainbody", "27"}, {"Adamant boots", "20"}, {"Adamant full helm", "23"}, {"Adamant kiteshield", "31"}, {"Adamant platebody", "98"}, {"Adamant platelegs", "37"}, {"Adamant plateskirt", "37"}, {"Adamant med helm", "12"}, {"Adamant thrownaxe", "1"}, {"Adamant spear", "10"}, {"Adamant spear(p)", "20"}, {"Adamant spear(p+)", "25"}, {"Adamant spear(p++)", "66"}, {"Spined boots", "36"}, {"Spined gloves", "17"}, {"Spined body", "45"}, {"Spined chaps", "21"}, {"Spined helm", "358"}, {"Rock-shell boots", "11"}, {"Rock-shell gloves", "28"}, {"Rock-shell helm", "209"}, {"Rock-shell legs", "486"}, {"Rock-shell plate", "397"}, {"Skeletal boots", "194"}, {"Skeletal bottoms", "238"}, {"Skeletal gloves", "432"}, {"Skeletal helm", "58"}, {"Skeletal top", "267"}, {"Archers ring", "5783"}, {"Berserker ring", "18367"}, {"Seer's ring", "599"}, {"Warrior ring", "1163"}, {"Toktz-xil-ul", "3"}, {"Toktz-ket-xil", "2108"}, {"Toktz-mej-tal", "1092"}, {"Toktz-xil-ak", "1231"}, {"Toktz-xil-ek", "739"}, {"Toktz-ket-em", "935"}, {"Tzhaar-ket-om", "1579"}, {"Obsidian cape", "1864"}, {"Berserker necklace", "1787"}, {"Granite maul", "1458"}, {"Granite body", "490"}, {"Granite helm", "274"}, {"Granite legs", "1999"}, {"Granite shield", "348"}, {"Amulet of defence", "7"}, {"Amulet of fury", "25823"}, {"Amulet of glory", "386"}, {"Amulet of glory(1)", "386"}, {"Amulet of glory(2)", "386"}, {"Amulet of glory(3)", "386"}, {"Amulet of glory(4)", "386"}, {"Amulet of glory(t)", "2090"}, {"Amulet of glory(t1)", "2090"}, {"Amulet of glory(t2)", "2090"}, {"Amulet of glory(t3)", "2090"}, {"Amulet of glory(t4)", "2090"}, {"Amulet glory(t2)", "2090"}, {"Amulet glory(t3)", "2090"}, {"Amulet glory(t4)", "2090"}, {"Amulet of magic", "5"}, {"Amulet of magic(t)", "1042"}, {"Amulet of power", "31"}, {"Amulet of strength", "15"}, {"3rd age amulet", "561623"}, {"Strength amulet(t)", "5439"}, {"Antipoison(1)", "1"}, {"Antipoison(2)", "3"}, {"Antipoison(3)", "4"}, {"Antipoison(4)", "5"}, {"Antipoison+(1)", "23"}, {"Antipoison+(2)", "45"}, {"Antipoison+(3)", "68"}, {"Antipoison+(4)", "90"}, {"Antipoison++(1)", "37"}, {"Antipoison++(2)", "74"}, {"Antipoison++(3)", "110"}, {"Antipoison++(4)", "147"}, {"Super attack(1)", "2"}, {"Super attack(2)", "4"}, {"Super attack(3)", "5"}, {"Super attack(4)", "7"}, {"Super strength(1)", "10"}, {"Super strength(2)", "20"}, {"Super strength(3)", "30"}, {"Super strength(4)", "40"}, {"Super defence(1)", "2"}, {"Super defence(2)", "4"}, {"Super defence(3)", "5"}, {"Super defence(4)", "8"}, {"Saradomin brew(1)", "7"}, {"Saradomin brew(2)", "15"}, {"Saradomin brew(3)", "22"}, {"Saradomin brew(4)", "29"}, {"Zamorak brew(1)", "12"}, {"Zamorak brew(2)", "24"}, {"Zamorak brew(3)", "36"}, {"Zamorak brew(4)", "48"}, {"Super restore(1)", "36"}, {"Super restore(2)", "72"}, {"Super restore(3)", "108"}, {"Super restore(4)", "144"}, {"Super antipoison(1)", "3"}, {"Super antipoison(2)", "6"}, {"Super antipoison(3)", "9"}, {"Super antipoison(4)", "11"}, {"Prayer potion(1)", "21"}, {"Prayer potion(2)", "42"}, {"Prayer potion(3)", "64"}, {"Prayer potion(4)", "85"}, {"3rd age mage hat", "406772"}, {"3rd age robe", "422061"}, {"3rd age robe top", "644626"}, {"3rd age full helmet", "559838"}, {"3rd age kiteshield", "848461"}, {"3rd age platebody", "849293"}, {"3rd age platelegs", "757609"}, {"3rd age range coif", "282814"}, {"3rd age range legs", "427202"}, {"3rd age range top", "501644"}, {"3rd age vambraces", "210575"}, {"Ahrim's hood", "608"}, {"Ahrim's robeskirt", "7747"}, {"Ahrim's robetop", "3582"}, {"Ahrim's staff", "511"}, {"Torag's hammers", "960"}, {"Torag's helm", "4919"}, {"Torag's platebody", "2196"}, {"Torag's platelegs", "3563"}, {"Karil's coif", "428"}, {"Karil's crossbow", "1265"}, {"Karil's leatherskirt", "2165"}, {"Karil's leathertop", "11627"}, {"Dharok's greataxe", "2181"}, {"Dharok's helm", "32601"}, {"Dharok's platebody", "2247"}, {"Dharok's platelegs", "3242"}, {"Verac's brassard", "2181"}, {"Verac's flail", "1592"}, {"Verac's helm", "19233"}, {"Verac's plateskirt", "5590"}, {"Guthan's chainskirt", "2090"}, {"Guthan's helm", "21675"}, {"Guthan's platebody", "2160"}, {"Guthan's warspear", "13720"}, {"Saradomin sword", "71022"}, {"Ava's accumulator", "113"}, {"Archer helm", "553"}, {"Berserker helm", "773"}, {"Farseer helm", "536"}, {"Helm of neitiznot", "521"}, {"Infinity boots", "8277"}, {"Infinity bottoms", "3089"}, {"Infinity gloves", "1957"}, {"Infinity hat", "6382"}, {"Infinity top", "4317"}, {"Master wand", "4265"}, {"Teacher wand", "432"}, {"Mage's book", "19198"}, {"Initiate cuisse", "47"}, {"Initiate hauberk", "59"}, {"Initiate sallet", "34"}, {"Proselyte cuisse", "61"}, {"Proselyte hauberk", "75"}, {"Proselyte sallet", "46"}, {"Proselyte tasset", "61"}, {"Bandos boots", "8567"}, {"Bandos chestplate", "137022"}, {"Bandos tassets", "119478"}, {"Armadyl chestplate", "110821"}, {"Armadyl helmet", "48086"}, {"Armadyl plateskirt", "119685"}, {"Black d'hide body", "80"}, {"Black d'hide chaps", "62"}, {"Black d'hide vamb", "25"}, {"Zamorak d'hide", "12302"}, {"Zamorak chaps", "1175"}, {"Zamorak bracers", "5754"}, {"Zamorak coif", "2072"}, {"Saradomin d'hide", "9908"}, {"Saradomin chaps", "1005"}, {"Saradomin bracers", "4112"}, {"Saradomin coif", "1172"}, {"Guthix chaps", "279"}, {"Guthix coif", "1044"}, {"Guthix dragonhide", "949"}, {"Guthix bracers", "138"}, {"Guthix cloak", "6229"}, {"Guthix crozier", "29"}, {"Guthix mitre", "972"}, {"Guthix mjolnir", "60"}, {"Guthix robe legs", "993"}, {"Guthix robe top", "1095"}, {"Guthix stole", "144"}, {"Zamorak cloak", "10332"}, {"Zamorak crozier", "54"}, {"Zamorak mitre", "1382"}, {"Zamorak mjolnir", "91"}, {"Zamorak robe legs", "1626"}, {"Zamorak robe top", "1967"}, {"Zamorak stole", "864"}, {"Saradomin cloak", "9206"}, {"Saradomin crozier", "51"}, {"Saradomin mitre", "1634"}, {"Saradomin mjolnir", "113"}, {"Saradomin robe legs", "1071"}, {"Saradomin robe top", "1242"}, {"Saradomin stole", "650"}, {"Dark bow", "7900"}, {"Blue partyhat", "3166068"}, {"Green partyhat", "971385"}, {"Purple partyhat", "833622"}, {"Red partyhat", "1173043"}, {"White partyhat", "1638634"}, {"Yellow partyhat", "928302"}, {"Blue h'ween mask", "123047"}, {"Green h'ween mask", "102486"}, {"Red h'ween mask", "166275"}, {"Scythe", "273844"}, {"Bunny ears", "170376"}, {"Easter egg", "46282"}, {"Pumpkin", "53056"}, {"Manta ray", "0"}, {"Shark", "8"}, {"Cooked karambwan", "6"}, {"Rune knife", "5"}, {"Rune knife(p)", "7"}, {"Rune knife(p+)", "8"}, {"Rune knife(p++)", "16"}, {"Attack cape(t)", "990"}, {"Attack cape(t)", "990"}, {"Attack hood", "10"}, {"Strength cape", "990"}, {"Strength cape(t)", "990"}, {"Strength hood", "10"}, {"Defence cape", "990"}, {"Defence cape(t)", "990"}, {"Defence hood", "10"}, {"Ranging cape", "990"}, {"Ranging cape(t)", "990"}, {"Ranging hood", "10"}, {"Prayer cape", "990"}, {"Prayer cape(t)", "990"}, {"Prayer hood", "10"}, {"Magic cape", "990"}, {"Magic cape(t)", "990"}, {"Magic hood", "10"}, {"Runecraft cape", "990"}, {"Runecraft cape(t)", "990"}, {"Runecrafting hood", "10"}, {"Hitpoints cape", "990"}, {"Hitpoints cape(t)", "990"}, {"Hitpoints hood", "10"}, {"Agility cape", "990"}, {"Agility cape(t)", "990"}, {"Agility hood", "10"}, {"Herblore cape", "990"}, {"Herblore cape(t)", "990"}, {"Herblore hood", "10"}, {"Thieving cape", "990"}, {"Thieving cape(t)", "990"}, {"Thieving hood", "10"}, {"Crafting cape", "990"}, {"Crafting cape(t)", "990"}, {"Crafting hood", "10"}, {"Fletching cape", "990"}, {"Fletching cape(t)", "990"}, {"Fletching hood", "10"}, {"Slayer cape", "990"}, {"Slayer cape(t)", "990"}, {"Slayer hood", "10"}, {"Construct. cape", "990"}, {"Construct. cape(t)", "990"}, {"Construct. hood", "10"}, {"Mining cape", "990"}, {"Mining cape(t)", "990"}, {"Mining hood", "10"}, {"Smithing cape", "990"}, {"Smithing cape(t)", "990"}, {"Smithing hood", "10"}, {"Fishing cape", "990"}, {"Fishing cape(t)", "990"}, {"Fishing hood", "10"}, {"Cooking cape", "990"}, {"Cooking cape(t)", "990"}, {"Cooking hood", "10"}, {"Firemaking cape", "990"}, {"Firemaking cape(t)", "990"}, {"Firemaking hood", "10"}, {"Woodcutting cape", "990"}, {"Woodcut. cape(t)", "990"}, {"Woodcutting hood", "10"}, {"Farming cape", "990"}, {"Farming cape(t)", "990"}, {"Farming hood", "10"}, {"Quest point cape", "990"}, {"Quest point hood", "10"}, {"Summoning cape", "990"}, {"Summoning cape(t)", "990"}, {"Summoning hood", "10"}, {"Robin hood hat", "20395"}, {"Ranger boots", "66372"}, {"Arcane spirit shield", "1533295"}, {"Blessed spirit shield", "41387"}, {"Divine spirit shield", "2113049"}, {"Elysian spirit shield", "2515283"}, {"Spectral spirit shield", "1552932"}, {"Spirit shield", "626"}, {"Vesta's longsword", "100"}, {"Dragon claws", "277832"}, {"Dagon'hai hat", "331540"}, {"Dagon'hai robe top", "793450"}, {"Dagon'hai robe bottom", "522590"}, {"Elite black platelegs", "2729823"}, {"Elite black platebody", "3344210"}, {"Elite black full helm", "2576421"}, {"Chaotic maul", "1533295"}};
  173.  
  174.     STRING[][] killPrices = {{"Void knight top", "0"}, {"Void knight robe", "0"}, {"Void knight mace", "0"}, {"Void knight gloves", "0"}, {"Void mage helm", "0"}, {"Void ranger helm", "0"}, {"Void melee helm", "0"}, {"Runner hat", "0"}, {"Healer hat", "0"}, {"Ranger hat", "0"}, {"Runner boots", "0"}, {"Penance gloves", "0"}, {"Penance skirt", "0"}, {"Fighter torso", "0"}, {"Fire cape", "0"}, {"Zuriel's staff", "20"}, {"Zuriel's hood", "20"}, {"Zuriel's robe bottom", "20"}, {"Zuriel's robe top", "20"}, {"Statius's platelegs", "20"}, {"Statius's platelegs", "20"}, {"Statius's platebody", "20"}, {"Statius's full helm", "20"}, {"Statius's warhammer", "0"}, {"Statius's platelegs", "20"}, {"Bandos tassets", "0"}, {"Vesta's chainbody", "20"}, {"Vesta's plateskirt", "20"}, {"Vesta's longsword", "30"}, {"Armadyl chestplate", "0"}, {"Armadyl plateskirt", "0"}, {"Armadyl helmet", "0"}, {"Blessed spirit shield", "60"}, {"Arcane spirit shield", "0"}, {"Divine spirit shield", "0"}, {"Elysian spirit shield", "0"}, {"Spectral spirit shield", "0"}, {"Morrigan's leather body", "20"}, {"Corrupt Zuriel's hood", "20"}, {"Corrupt Zuriel's robetop", "20"}, {"Corrupt Zuriel's robebottom", "20"}, {"Corrupt Zuriel's staff", "20"}, {"Corrupt Vesta's chainbody", "20"}, {"Corrupt Vesta's plateskirt", "20"}, {"Corrupt Statius's hammer", "20"}, {"Corrupt Statius's full helm", "20"}, {"Corrupt Statius's platebody", "20"}, {"Corrupt Statius's platelegs", "20"}, {"Morrigan's leather chaps", "20"}, {"Morrigan's coif", "20"}};
  175.  
  176.     INT[][] otherPrices = {{7653, 1}, {7454, 1}, {7455, 3}, {7456, 5}, {7457, 10}, {7458, 15}, {7459, 25}, {7460, 50}, {7461, 1000}, {7462, 1000}, {4097, 59}, {4107, 153}, {4117, 61}, {4105, 59}, {4115, 59}, {4095, 58}, {4099, 92}, {4109, 118}, {4089, 145}, {4093, 482}, {4103, 478}, {4113, 480}, {4091, 721}, {4101, 720}, {4111, 720}};
  177.  
  178.     INT[][] killRequirments = {{8844, 0}, {8845, 0}, {8846, 0}, {8847, 0}, {8848, 0}, {8849, 0}, {8850, 0}, {10887, 0}, {4214, 0}, {4225, 0}, {2412, 0}, {2413, 0}, {2414, 0}, {2415, 0}, {2416, 0}, {2417, 0}, {7453, 0}, {7454, 0}, {7455, 0}, {7456, 0}, {7457, 0}, {7458, 0}, {7459, 0}, {7460, 0}, {7461, 0}, {7462, 0}, {6529, 500000}, {10645, 500000}, {10646, 500000}, {1249, 100}, {1250, 100}, {4383, 500000}, {4384, 500000}, {4317, 500000}, {4318, 500000}, {4379, 500000}, {4380, 500000}, {12658, 500000}, {12659, 500000}, {6607, 500000}, {6608, 500000}, {1075, 500000}, {1076, 500000}, {1117, 500000}, {1118, 500000}, {8748, 500000}, {8749, 500000}, {1307, 500000}, {1308, 500000}, {1141, 500000}, {1142, 500000}, {1069, 500000}, {1070, 500000}, {2583, 500000}, {2584, 500000}, {8762, 500000}, {8763, 500000}, {13501, 500000}, {13502, 500000}, {1073, 500000}, {1074, 500000}, {2599, 500000}, {2600, 500000}, {8774, 500000}, {8775, 500000}, {1319, 500000}, {1320, 500000}, {13746, 500000}, {13747, 500000}, {13748, 500000}, {13749, 500000}, {13750, 500000}, {13751, 500000}, {13752, 500000}, {13753, 500000}, {11702, 500000}, {11703, 500000}, {11704, 500000}, {11705, 500000}, {11706, 500000}, {11707, 500000}, {11708, 500000}, {11709, 500000}, {14481, 500000}, {14482, 500000}, {11709, 500000}, {4508, 500000}, {4509, 500000}, {13552, 500000}, {13553, 500000}, {13783, 500000}, {13784, 500000}, {6609, 500000}, {6610, 500000}, {13821, 500000}, {13822, 500000}, {14095, 500000}, {14096, 500000}, {14107, 500000}, {14108, 500000}, {9813, 500000}, {1027, 500000}, {9814, 500000}, {1028, 500000}};
  179.  
  180.  
  181.     public INT getItemValue(INT item) {
  182.         IF (item == 995) {
  183.             RETURN 1;
  184.         }
  185.         INT value = 0;
  186.         FOR (STRING[] s : itemPrices) {
  187.             STRING NAME = Engine.items.getItemName(item);
  188.             IF (NAME.equals(s[0])) {
  189.                 value = 100 * INTEGER.parseInt(s[1]);
  190.             }
  191.         }
  192.         FOR (INT[] i : otherPrices) {
  193.             IF (item == i[0]) {
  194.                 value = 100 * i[1];
  195.             }
  196.         }
  197.         IF (Engine.items.stackable(item) && value == 0) {
  198.             value = 1;
  199.         }
  200.         RETURN value;
  201.     }
  202.  
  203.     public INT getXPForLevel(INT level) {
  204.     INT points = 0;
  205.     INT OUTPUT = 0;
  206.     FOR (INT lvl = 1; lvl <= level; lvl++) {
  207.         points += Math.floor((DOUBLE) lvl + 300.0 * Math.pow(2.0, (DOUBLE) lvl / 7.0));
  208.     IF (lvl >= level) {
  209.         RETURN OUTPUT;
  210.     }
  211.     OUTPUT = (INT) Math.floor(points / 4);
  212.     }
  213.         RETURN 0;
  214.     }
  215.  
  216.     public INT getKillRequirment(INT item) {
  217.         INT requirment = 0;
  218.         FOR (INT[] i : killRequirments) {
  219.             IF (item == i[0]) {
  220.                 requirment = i[1];
  221.             }
  222.         }
  223.         RETURN requirment;
  224.     }
  225.  
  226.     public INT getKillCost(INT item) {
  227.         INT cost = 0;
  228.         FOR (STRING[] s : killPrices) {
  229.             STRING NAME = Engine.items.getItemName(item);
  230.             IF (NAME.equals(s[0])) {
  231.                 cost = INTEGER.parseInt(s[1]);
  232.             }
  233.         }
  234.         RETURN cost;
  235.     }
  236.  
  237.     public INT Donator;
  238.  
  239.     public LONG getItemValue2(INT item) {
  240.         IF (item == 995) {
  241.             RETURN 1;
  242.         }
  243.         INT value = 0;
  244.         LONG value2 = 0;
  245.         FOR (STRING[] s : itemPrices) {
  246.             STRING NAME = Engine.items.getItemName(item);
  247.             IF (NAME.equals(s[0])) {
  248.                 value = 100 * INTEGER.parseInt(s[1]);
  249.                 value2 = 100 * INTEGER.parseInt(s[1]);
  250.             }
  251.         }
  252.         FOR (INT[] i : otherPrices) {
  253.             IF (item == i[0]) {
  254.                 value = 100 * i[1];
  255.                 value2 = 100 * i[1];
  256.             }
  257.         }
  258.         IF (Engine.items.stackable(item) && value == 0) {
  259.             value = 1;
  260.             value2 = 1;
  261.         }
  262.         RETURN value2;
  263.     }
  264.  
  265.     public DOUBLE PVPPotential;
  266.  
  267.     public INT totalKills;
  268.     public INT kills;
  269.  
  270.     public void message(STRING message) {
  271.         getActionSender().sendMessage(this, message);
  272.     }
  273.  
  274.     public boolean teleblocked;
  275.     public INT teleblockTimer = 500;
  276.  
  277.     public boolean teletab;
  278.     public INT leverTeleportX;
  279.     public INT leverTeleportY;
  280.     public INT leverTeleportH;
  281.     public INT leverTeleportDelay = -1;
  282.  
  283.     public boolean hitOne;
  284.     public boolean hitTwo;
  285.     public boolean hitThree;
  286.     public boolean hitFour;
  287.     public DOUBLE hit1;
  288.     public DOUBLE hit2;
  289.     public DOUBLE hit3;
  290.     public DOUBLE hit4;
  291.  
  292.     public INT specials;
  293.  
  294.     public INT spendingExperience = 1000000;
  295.  
  296.     public INT degrade = 6000;
  297.     public boolean degrades = degrade < 6000;
  298.  
  299.     //Combat variables
  300.  
  301.     public DOUBLE rangedMax;
  302.     public STRING OriginalAttacker;
  303.     public INT attackedByCount;
  304.     public STRING attacking;
  305.     public STRING attackedBy;
  306.  
  307.     public INT spell;
  308.     public INT spell2;
  309.     public INT cuedSpell;
  310.     public INT cuedSpells;
  311.     public INT magicOppIndex;
  312.     public INT graphicMSDelay;
  313.     public INT magicGraphicDelay = -1;
  314.     public INT magicDamageDelay = -1;
  315.     public INT magicAffectDelay = -1;
  316.     public boolean successfulCast;
  317.     public boolean usingMage;
  318.     public boolean orb;
  319.  
  320.     public INT weapon;
  321.     public INT strengthBonus;
  322.     public INT oppIndex;
  323.     public INT hitIndex;
  324.  
  325.     public boolean getExperience = true;
  326.  
  327.     public PTrade pTrade;
  328.  
  329.     public void statSpy(Player other) {
  330.         INT[] strings = {1, 25, 13, 5, 37, 49, 61, 45, 69, 65, 33, 57, 53, 21, 9, 29, 17, 41, 77, 81, 73, 85, 89, 93};
  331.         getActionSender().setString(this, other.username.substring(0, 1).toUpperCase() + other.username.substring(1), 523, 99);
  332.         FOR (INT i = 0; i < strings.length; i++) {
  333.             getActionSender().setString(this, ""+other.skillLvl[i], 523, strings[i]);
  334.             getActionSender().setString(this, ""+other.getLevelForXP(i), 523, strings[i] + 1);
  335.         }
  336.         getActionSender().setTab(this, 79, 523);
  337.     }
  338.  
  339.     public void clearItem(INT item) {
  340.         FOR (INT i = 0; i < bankItems.length; i++) {
  341.             IF (item == bankItems[i]) {
  342.                 bankItems[i] = -1;
  343.                 bankItemsN[i] = 0;
  344.             }
  345.         }
  346.         FOR (INT i = 0; i < equipment.length; i++) {
  347.             IF (item == equipment[i]) {
  348.                 equipment[i] = -1;
  349.                 equipmentN[i] = 0;
  350.             }
  351.         }
  352.         FOR (INT i = 0; i < items.length; i++) {
  353.             IF (item == items[i]) {
  354.                 items[i] = -1;
  355.                 itemsN[i] = 0;
  356.             }
  357.         }
  358.     }
  359.  
  360.     public void clearItem(STRING item) {
  361.         STRING NAME = item;
  362.         FOR (INT i = 0; i < bankItems.length; i++) {
  363.             IF (NAME.equals(Engine.items.getItemName(bankItems[i]))) {
  364.                 bankItems[i] = -1;
  365.                 bankItemsN[i] = 0;
  366.             }
  367.         }
  368.         FOR (INT i = 0; i < equipment.length; i++) {
  369.             IF (NAME.equals(Engine.items.getItemName(equipment[i]))) {
  370.                 equipment[i] = -1;
  371.                 equipmentN[i] = 0;
  372.             }
  373.         }
  374.         FOR (INT i = 0; i < items.length; i++) {
  375.             IF (NAME.equals(Engine.items.getItemName(items[i]))) {
  376.                 items[i] = -1;
  377.                 itemsN[i] = 0;
  378.             }
  379.         }
  380.     }
  381.  
  382.     public boolean lever;
  383.     public void leverTeleport(STRING location) {
  384.         IF (teleblocked) {
  385.             getActionSender().sendMessage(this, "You are teleport blocked!");
  386.             RETURN;
  387.         }
  388.         INT x = absX;
  389.         INT y = absY;
  390.         INT h = heightLevel;
  391.         IF (location != null) {
  392.             IF (location.equals("Deep Wilderness")) {
  393.                 x = 3153;
  394.                 y = 3923;
  395.             }
  396.             IF (location.equals("Ardougne Lever")) {
  397.                 x = 2561;
  398.                 y = 3311;
  399.             }
  400.             IF (location.equals("Mage Bank (Inside)")) {
  401.                 x = 2539;
  402.                 y = 4712;
  403.             }
  404.             IF (location.equals("Mage Bank (Outside)")) {
  405.                 x = 3090;
  406.                 y = 3956;
  407.             }
  408.         }
  409.         getActionSender().removeShownInterface(this);
  410.         requestAnim(2140, 0);
  411.         leverTeleportX = x;
  412.         leverTeleportY = y;
  413.         leverTeleportH = h;
  414.         leverTeleportDelay = 2;
  415.         lever = true;
  416.     }
  417.  
  418.     public void teletab(STRING city) {
  419.         INT x = absX;
  420.         INT y = absY;
  421.         INT h = heightLevel;
  422.         INT r = 0;
  423.         teletab = true;
  424.         IF (this.InBounty == 1) {
  425.             this.getActionSender().sendMessage (this, "You cannot use this inside bounty hunter");
  426.             RETURN;
  427.         }
  428.         IF (city != null) {
  429.             IF (city.equals("Varrock")) {
  430.                 x = 3210;
  431.                 y = 3421;
  432.                 r = 4;
  433.             }
  434.             IF (city.equals("Lumbridge")) {
  435.                 x = 3221;
  436.                 y = 3218;
  437.                 r = 2;
  438.             }
  439.             IF (city.equals("Falador")) {
  440.                 x = 2964;
  441.                 y = 3378;
  442.                 r = 3;
  443.             }
  444.             IF (city.equals("Camelot")) {
  445.                 x = 2756;
  446.                 y = 3476;
  447.                 r = 3;
  448.             }
  449.             IF (city.equals("Ardougne")) {
  450.                 x = 2660;
  451.                 y = 3301;
  452.                 r = 4;
  453.             }
  454. }
  455.         getActionSender().removeShownInterface(this);
  456.         x += getRandom(r);
  457.         y += getRandom(r);
  458.         teleportTo(x, y, h, 3, 0, 9597, 4071, 1680, 0, 678, 0);
  459.     }
  460.    
  461.  
  462.     public void cityTeleport(STRING city) {
  463.         INT x = absX;
  464.         INT y = absY;
  465.         INT h = heightLevel;
  466.         INT r = 0;
  467.         IF (city != null) {
  468.             IF (city.equals("Varrock")) {
  469.                 x = 3210;
  470.                 y = 3421;
  471.                 r = 4;
  472.             }
  473.             IF (city.equals("Lumbridge")) {
  474.                 x = 3221;
  475.                 y = 3218;
  476.                 r = 2;
  477.             }
  478.             IF (city.equals("Falador")) {
  479.                 x = 2964;
  480.                 y = 3378;
  481.                 r = 3;
  482.             }
  483.             IF (city.equals("Camelot")) {
  484.                 x = 2756;
  485.                 y = 3476;
  486.                 r = 3;
  487.             }
  488.             IF (city.equals("Ardougne")) {
  489.                 x = 2660;
  490.                 y = 3301;
  491.                 r = 4;
  492.             }
  493.         }
  494.         getActionSender().removeShownInterface(this);
  495.         x += getRandom(r);
  496.         y += getRandom(r);
  497.         teleportTo(x, y, h, 4, 0, 8939, 8941, 1576, 0, 1577, 0);
  498.     }
  499.         public boolean usingAutocast() {
  500.         INT[] staff = {4675,6914,13867};
  501.         FOR (INT i : staff) {
  502.             IF (this.equipment[3] == i && castAuto) {
  503.                 RETURN true;
  504.             }
  505.         }
  506.         public void Procast() {
  507.         Player opp = Server.engine.players[this.magicOppIndex];
  508.         IF (this.procast == 0) {
  509.             this.playerMagic.combatMagic(opp, 193, 3);
  510.             this.procast = 3;
  511.         }
  512.     }
  513.         RETURN false;
  514.     }
  515.     public boolean isPVP() {
  516.         RETURN heightLevel == 4;
  517.     }
  518.     public boolean hotZone(INT x, INT y) {
  519.         IF ((x >= 3205 && x <= 3222 && y >= 3420 && y <= 3438) || //Varrock
  520.         (x >= 3231 && x <= 3238 && y >= 3212 && y <= 3225) || //Lumbridge
  521.         (x >= 2949 && x <= 2978 && y >= 3367 && y <= 3391) || //Falador
  522.         (x >= 2741 && x <= 2774 && y >= 3464 && y <= 3481) || //Camelot
  523.         (x >= 2652 && x <= 2672 && y >= 3294 && y <= 3318)) { //Ardougne
  524.             RETURN true;
  525.         }
  526.         RETURN false;
  527.     }
  528.     public boolean DoorArea(INT x, INT y) {
  529.     IF ((x >= 3124 && x <= 3124 && y >= 3665 && y <= 3665) ||
  530.     (x >= 3138 && x <= 3138 && y >= 3669 && y <= 3669) ||
  531.     (x >= 3146 && x <= 3146 && y >= 3681 && y <= 3681) ||
  532.     (x >= 3163 && x <= 3163 && y >= 3696 && y <= 3696) ||
  533.         (x >= 3180 && x <= 3180 && y >= 3708 && y <= 3708) ||
  534.         (x >= 3181 && x <= 3181 && y >= 3720 && y <= 3720) ||
  535.         (x >= 3171 && x <= 3171 && y >= 3737 && y <= 3737) ||
  536.   (x >= 3101 && x <= 3101 && y >= 3682 && y <= 3682) ||
  537.         (x >= 3170 && x <= 3170 && y >= 3746 && y <= 3746) ||
  538.         (x >= 3163 && x <= 3163 && y >= 3753 && y <= 3753) ||
  539.         (x >= 3147 && x <= 3147 && y >= 3758 && y <= 3758) ||
  540.         (x >= 3135 && x <= 3135 && y >= 3758 && y <= 3758) ||
  541.         (x >= 3121 && x <= 3121 && y >= 3754 && y <= 3754) ||
  542.         (x >= 3110 && x <= 3110 && y >= 3747 && y <= 3747) ||
  543.         (x >= 3091 && x <= 3091 && y >= 3735 && y <= 3735) ||
  544.         (x >= 3086 && x <= 3086 && y >= 3717 && y <= 3717) ||
  545.         (x >= 3091 && x <= 3091 && y >= 3706 && y <= 3706) ||
  546.         (x >= 3096 && x <= 3096 && y >= 3692 && y <= 3692) ||
  547.         (x >= 3108 && x <= 3108 && y >= 3670 && y <= 3670) ||
  548.     (x >= 3171 && x <= 3171 && y >= 3701 && y <= 3701)) {
  549.       RETURN true;
  550.     }
  551.     RETURN false;
  552.   }
  553.     public boolean Safezone(INT x, INT y) {
  554.     IF ((x >= 3091 && x <= 3098 && y >= 3488 && y <= 3499) ||
  555.       (x >= 3135 && x <= 3192 && y >= 3652 && y <= 3702) ||
  556.       (x >= 3179 && x <= 3194 && y >= 3432 && y <= 3446) ||
  557.       (x >= 3250 && x <= 3257 && y >= 3416 && y <= 3423) ||
  558.       (x >= 2943 && x <= 2947 && y >= 2946 && y <= 3373) ||
  559.       (x >= 2943 && x <= 2949 && y >= 3368 && y <= 3368) ||
  560.       (x >= 3009 && x <= 3018 && y >= 3353 && y <= 3358) ||
  561.       (x >= 3009 && x <= 3022 && y >= 3353 && y <= 3356) ||
  562.       (x >= 2649 && x <= 2658 && y >= 3280 && y <= 3287) ||
  563.       (x >= 2612 && x <= 2621 && y >= 3330 && y <= 3335) ||
  564.       (x >= 3201 && x <= 3229 && y >= 3217 && y <= 3220) ||
  565.       (x >= 3201 && x <= 3226 && y >= 3209 && y <= 3228) ||
  566.       (x >= 3201 && x <= 3225 && y >= 3208 && y <= 3229) ||
  567.       (x >= 3201 && x <= 3224 && y >= 3207 && y <= 3230) ||
  568.       (x >= 3201 && x <= 3223 && y >= 3206 && y <= 3231) ||
  569.       (x >= 3201 && x <= 3222 && y >= 3205 && y <= 3232) ||
  570.       (x >= 3201 && x <= 3221 && y >= 3204 && y <= 3233) ||
  571.       (x >= 3201 && x <= 3220 && y >= 3203 && y <= 3234) ||
  572.       (x >= 3201 && x <= 3213 && y >= 3202 && y <= 3235) ||
  573.       (x >= 3201 && x <= 3212 && y >= 3201 && y <= 3236) ||
  574.       (x >= 3201 && x <= 3203 && y >= 3202 && y <= 3235) ||
  575.       (x >= 3201 && x <= 3202 && y >= 3203 && y <= 3234) ||
  576.        (x >= 2526 && x <= 2550 && y >= 4709 && y <= 4725) ||
  577.       (x >= 3201 && x <= 3201 && y >= 3204 && y <= 3233)) {
  578.       RETURN true;
  579.     }
  580.     RETURN false;
  581.   }
  582.  
  583.     public void Welcome() {
  584.     IF (this == null || this.disconnected[0]) {
  585.         RETURN;
  586.     }
  587.         requestGFX(1844, 0);
  588.         clearItem("null");
  589.         getActionSender().setWindowPane(this, 549);
  590.         getActionSender().setInterface(this, 1, 549, 2, 378);
  591.         getActionSender().setInterface(this, 1, 549, 3, 17);
  592.         getActionSender().setString(this, "DOWNLOAD THE NEW CLIENT AT Sinnersheaven.tk!!!", 17, 0);
  593.         getActionSender().setString(this, "Wildy is now in edge! NO MORE PVP!", 17, 3);
  594. getActionSender().setString(this, "Players online: <col=FFFFF>"+Server.engine.getPlayerCount(), 378, 62);
  595.         getActionSender().setString(this, "Owner: <col=FFFFF>Zero", 378, 56);
  596.         getActionSender().setString(this, "1 unread messages. Sike.", 378, 37);
  597.         getActionSender().setString(this, "0", 378, 39);
  598.         getActionSender().setString(this, "P2P Ftl, Donate for awesome stuff.", 378, 94);
  599.         getActionSender().setString(this, "You have unlimited member credit. Duh.", 378, 93);
  600.         getActionSender().setString(this, "0", 378, 96);
  601.         getActionSender().setString(this, "Welcome to Sinner's Heaven", 378, 115);
  602.         getActionSender().setString(this, "You last logged in yesterday from:  " +  Server.socketListener.getAddress(socket.socket) + "", 378, 116);
  603.     }
  604.  
  605.     public STRING getKillMessage(STRING player) {
  606.         STRING[][] selection = {{"It's official: you are far more awesome than ", " is."},
  607.                     {"Let all warriors learn from the fate of ", " and fear you."},
  608.                     {"Well done, you've pwned ", "."},
  609.                     {"You rock, ", " clearly does not."},
  610.                     {"", " is crying now."},
  611.                     {"You have wiped the floor with ", "."},
  612.                     {"Ooh, ", " just dropped dead, and it's all thanks to you!"},
  613.                     {"", " has fallen before your mighty mightiness."},
  614.                     {"You have proven your ownageness over ", "."}};
  615.         INT index = (INT)Math.floor(Math.RANDOM() * 9);
  616.         RETURN selection[index][0] + player + selection[index][1];
  617.     }
  618.  
  619.     public boolean multiwayCombatZone(INT x, INT y) {
  620.             IF ((x > 3072 && x < 3107 && y > 3401 && y < 3448) ||
  621.             (x > 3093 && x < 3117 && y > 3921 && y < 3946) ||
  622.             (x > 2946 && x < 3004 && y > 3333 && y < 3424) ||
  623.             (x > 3193 && x < 3332 && y > 3665 && y < 3752) ||
  624.             (x > 3203 && x < 3331 && y > 3519 && y < 3666) ||
  625.             (x > 3134 && x < 3328 && y > 3519 && y < 3658) ||
  626.             (x > 2945 && x < 2961 && y > 3812 && y < 3828) ||
  627.             (x > 2982 && x < 3010 && y > 3913 && y < 3929) ||
  628.             (x > 3203 && x < 3392 && y > 3904 && y < 4031) ||
  629.             (x > 3149 && x < 3331 && y > 3799 && y < 3850) ||
  630.             (x > 3064 && x < 3391 && y > 3864 && y < 3903) ||
  631.             (x > 3006 && x < 3072 && y > 3601 && y < 3713)) {
  632.             getActionSender().setInterfaceConfig(this, 745, 1, true);
  633.             RETURN true;
  634.             }
  635.         RETURN false;
  636.     }
  637.  
  638.     public boolean timerStarted;
  639.     public LONG PVPTimer;
  640.  
  641.     public boolean wildernessZone(INT x, INT y ) {
  642.         IF (castleArea()){
  643.                     RETURN absX >= 2358 && absX <= 2438 && absY >= 3066 && absY <= 3142;
  644.                 }
  645.                 IF (!isPVP()) {
  646.             RETURN (x >= 3042 && x <= 3395 && y >= 3523 && y <= 4000);
  647.         }
  648.         IF (isPVP()) {
  649.             IF ((x >= 3091 && x <= 3098 && y >= 3488 && y <= 3499) ||
  650.             (x >= 3135 && x <= 3192 && y >= 3652 && y <= 3702) ||
  651.             (x >= 3179 && x <= 3194 && y >= 3432 && y <= 3446) ||
  652.                     (x >= 2526 && x <= 2551 && y >= 4709 && y <= 4726) ||
  653.             (x >= 3250 && x <= 3257 && y >= 3416 && y <= 3423) ||
  654.             (x >= 2943 && x <= 2947 && y >= 2946 && y <= 3373) ||
  655.             (x >= 2943 && x <= 2949 && y >= 3368 && y <= 3368) ||
  656.             (x >= 3009 && x <= 3018 && y >= 3353 && y <= 3358) ||
  657.             (x >= 3009 && x <= 3022 && y >= 3353 && y <= 3356) ||
  658.             (x >= 2721 && x <= 2730 && y >= 3490 && y <= 3493) ||
  659.             (x >= 2724 && x <= 2727 && y >= 3487 && y <= 3489) ||
  660.             (x >= 2649 && x <= 2658 && y >= 3280 && y <= 3287) ||
  661.             (x >= 2612 && x <= 2621 && y >= 3330 && y <= 3335) ||
  662.             (x >= 3201 && x <= 3229 && y >= 3217 && y <= 3220) ||
  663.             (x >= 3201 && x <= 3226 && y >= 3209 && y <= 3228) ||
  664.             (x >= 3201 && x <= 3225 && y >= 3208 && y <= 3229) ||
  665.             (x >= 3201 && x <= 3224 && y >= 3207 && y <= 3230) ||
  666.             (x >= 3201 && x <= 3223 && y >= 3206 && y <= 3231) ||
  667.             (x >= 3201 && x <= 3222 && y >= 3205 && y <= 3232) ||
  668.             (x >= 3201 && x <= 3221 && y >= 3204 && y <= 3233) ||
  669.             (x >= 3201 && x <= 3220 && y >= 3203 && y <= 3234) ||
  670.             (x >= 3201 && x <= 3213 && y >= 3202 && y <= 3235) ||
  671.             (x >= 3201 && x <= 3212 && y >= 3201 && y <= 3236) ||
  672.             (x >= 3201 && x <= 3203 && y >= 3202 && y <= 3235) ||
  673.             (x >= 3201 && x <= 3202 && y >= 3203 && y <= 3234) ||
  674.             (x >= 2526 && x <= 2550 && y >= 4709 && y <= 4725) ||
  675.             (x >= 2806 && x <= 2812 && y >= 3438 && y <= 3445) ||//Catherby Bank
  676.             (x >= 2609 && x <= 2616 && y >= 3088 && y <= 3097) ||//Yanille Bank
  677.             (x >= 3265 && x <= 3272 && y >= 3161 && y <= 3173) ||//Al Karid Bank
  678.             (x >= 3147 && x <= 3181 && y >= 3473 && y <= 3506) ||
  679.                         (x >= 3264 && x <= 3279 && y >= 3672 && y <= 3695) ||
  680.                         (x >= 2756 && x <= 2875 && y >= 5508 && y <= 5511) ||
  681.                         (x >= 3201 && x <= 3201 && y >= 3204 && y <= 3233)) {
  682.         IF ((attacking == null && attackedBy == null) || (timerStarted && SYSTEM.currentTimeMillis() - PVPTimer >= 10000)) {
  683. IF (timerStarted) {
  684. removeWilderness();
  685. timerStarted = false;
  686. attackedBy = null;
  687. attacking = null;
  688. }
  689. RETURN false;
  690. } ELSE IF (!timerStarted && (attacking == null || attackedBy != null || attacking != null || attackedBy == null)) {
  691. PVPTimer = SYSTEM.currentTimeMillis();
  692. timerStarted = true;
  693. }
  694.  
  695. }
  696. RETURN true;
  697. }
  698. RETURN false;
  699. }
  700.  
  701.     public INT getWildernessLevel() {
  702.         INT level = 0;
  703.         IF (absY >= 3523 && absY <= 3527) {
  704.             level = 1;
  705.         } ELSE IF (absY >= 3526 && absY <= 3535) {
  706.             level = 2;
  707.         } ELSE {
  708.             level = 3 + (INT)Math.ceil((absY - 3536) / 8);
  709.         }
  710.         IF (level < 0 || absY < 3523) {
  711.             level = 0;
  712.         }
  713.         IF (!isPVP()) {
  714.             RETURN level;
  715.         }
  716.         IF (isPVP()) {
  717.             DOUBLE BASE = 5 + (combatLevel * 0.10);
  718.             INT total = (INT)Math.round(BASE) + level;
  719.             IF (wildernessZone(absX, absY)) {
  720.                 RETURN total;
  721.             } ELSE {
  722.                 RETURN 0;
  723.             }
  724.         }
  725.         RETURN level;  
  726.     }
  727.  
  728.     public boolean properWildernessLevel(INT thisCombat, INT opponentCombat) {
  729.         INT difference = thisCombat >= opponentCombat ? thisCombat - opponentCombat : opponentCombat - thisCombat;
  730.         RETURN getWildernessLevel() >= difference;
  731.     }
  732.  
  733.     public void restoreTabs(Player p) {
  734.         FOR (INT b = 16; b <= 21; b++) {
  735.             p.getActionSender().setInterfaceConfig(p, 548, b, false);
  736.         }
  737.  
  738.         FOR (INT a = 32; a <= 38; a++) {
  739.             p.getActionSender().setInterfaceConfig(p, 548, a, false);
  740.         }
  741.         p.calculateEquipmentBonus();
  742.  
  743.         p.getActionSender().setInterfaceConfig(p, 548, 14, false);
  744.         p.getActionSender().setInterfaceConfig(p, 548, 31, false);
  745.         p.getActionSender().setInterfaceConfig(p, 548, 63, false);
  746.  
  747.         p.getActionSender().setInterfaceConfig(p, 548, 72, false);
  748.     }
  749.     public void hideTabs(Player p) {
  750.         FOR (INT b = 16; b <= 21; b++) {
  751.             p.getActionSender().setInterfaceConfig(p, 548, b, true);
  752.         }
  753.  
  754.         FOR (INT a = 32; a <= 38; a++) {
  755.             p.getActionSender().setInterfaceConfig(p, 548, a, true);
  756.         }
  757.         p.calculateEquipmentBonus();
  758.  
  759.         p.getActionSender().setInterfaceConfig(p, 548, 14, true);
  760.         p.getActionSender().setInterfaceConfig(p, 548, 31, true);
  761.         p.getActionSender().setInterfaceConfig(p, 548, 63, true);
  762.  
  763.         p.getActionSender().setInterfaceConfig(p, 548, 72, true);
  764.     }
  765.  
  766.     /**
  767.       * Player count in clan.
  768.       */
  769.     public STATIC INT blackCount, whiteCount;
  770.     /**
  771.       * Clan wars teams
  772.       */
  773.     public STATIC boolean blackTeam, whiteTeam;
  774.     /**
  775.       * Clan wars handler
  776.       */
  777.     public ClanWars clanWars = Engine.clanWars;
  778.     /**
  779.      * Wilderness level
  780.      */
  781.     public INT wildLevel;
  782.     /**
  783.      * IF player updated the Wilderness level.
  784.      */
  785.     public boolean updatedLevel;
  786.     public INT savedLevel;
  787.     /**
  788.      * Thieving.
  789.      */
  790.     public INT[] thievingArray = new INT[4];
  791.     public INT maxArrays = 10;
  792.     public boolean[] optionArray = new boolean[maxArrays];
  793.     public TestWorldLoader worldLoader = new TestWorldLoader(this);
  794.     /**
  795.      * Quest variables
  796.      */
  797.     public INT questId;
  798.     public INT questStage;
  799.     public QuestDevelopment quest = new QuestDevelopment(this);
  800.     /**
  801.      * Has entered defence room Warrior guild.
  802.      */
  803.     public boolean enteredDefenceRoom;
  804.     /**
  805.      * Prevents XLogging.
  806.      */
  807.     public INT combatType;
  808.     /**
  809.      * The delay FOR making a fire.
  810.      */
  811.     public INT[] firemaking = new INT[4];
  812.     /**
  813.      * NEXT graphic creating delay FOR MSB Special attack
  814.      */
  815.     public INT nextDamageDelay = -1;
  816.     public INT nextGraphicDelay = -1;
  817.     /**
  818.      * Item ids of which are NOT spawnable.
  819.      */
  820.     public INT[] economyItems = {
  821.     11696, 11698, 11700, 11694, 11730, 3140, 11718, 11720, 11722, 11724, 11726, 11728,
  822.     11690, 11702, 11704, 11706, 11708, 10581, 10566, 10637, 385, 391, 2440, 2434, 6685,
  823.     11235, 4151, 12670, 12671
  824.     };
  825.     /**
  826.      * OPTION variable
  827.      */
  828.     public INT optionId;
  829.     /**
  830.      * CALL Warrior guild class
  831.      */
  832.     public WarriorGuild warriorGuild = new WarriorGuild(this);
  833.     /**
  834.      * Defender dropping types variable
  835.      */
  836.     public INT defenderId;
  837.  
  838.     /**
  839.      * Wilderness Levels
  840.      */
  841.     public INT wildernessLevel;
  842.  
  843.     /**
  844.      * Summoning variables
  845.      */
  846.     public INT summonTeleDelay = -1;
  847.     public INT summonDrainDelay = -1;
  848.     public boolean callFamiliar;
  849.     public boolean familiarDissMiss;
  850.     public boolean summonedFamiliar;
  851.  
  852.     /**
  853.      * Warrior Guild variables
  854.      */
  855.     public INT[] randomItemIds = {
  856.     8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850
  857.     };
  858.     public STRING warriorArmour;
  859.  
  860.     /**
  861.      * autoCast Variables
  862.      */
  863.     public INT[] regularStaffs = {
  864.     1381
  865.     };
  866.     public INT[] otherStaffs = {
  867.     4675, 1379, 6914, 9084
  868.     };
  869.     public INT autoCastDmgDelay = -1;
  870.     public INT autoCastDelay;
  871.     public INT[] autoCast = new INT[3];
  872.     public boolean castAuto;
  873.     public boolean usingAutoCast;
  874.     /**
  875.      * IF player IS disturbing commander zilyana.
  876.      */
  877.     public boolean disturbSara;
  878.     /**
  879.      * Death Delays
  880.      */
  881.     public INT deathEmoteDelay = -1;
  882.     /**
  883.      * Yell delay
  884.      */
  885.     public INT massYellDelay = 0;
  886.  
  887.     /**
  888.      * Crystal bow shots.
  889.      */
  890.     public INT crystalShots;
  891.  
  892.     /**
  893.      * Fight Cave variables
  894.      */
  895.     public INT neededKills;
  896.     public INT[] waveType = new INT[5];
  897.     public INT waveCount;
  898.     public INT waveDelay = -1;
  899.     public FightCave fCave = new FightCave(this);
  900.  
  901.     /**
  902.      * Fletching variables
  903.      */
  904.     public INT deletedItem, addedItem;
  905.     public INT fletchAmt;
  906.     public boolean isFletching;
  907.     public INT[] fletching;
  908.     public INT fletchDelay;
  909.     public INT fletchType, fletchExp;
  910.     PlayerFletching fletchingClass = new PlayerFletching(this);
  911.  
  912.     public INT equipSpecDelay;
  913.     public INT[] miningAxes = {
  914.     1265, 1267, 1269, 1271, 1273, 1275
  915.     };
  916.     public boolean isBanking;
  917.  
  918.     /**
  919.      * Dueling variables
  920.      */
  921.     public INT countDelay = -1;
  922.     public INT countType = -1;
  923.     public boolean duelDeath;
  924.     public boolean acceptDuel;
  925.     public boolean acceptScreen1, acceptScreen2;
  926.     public DuelArena duelArena = new DuelArena(this);
  927.     public INT duelFriend;
  928.     public boolean duelScreen1, duelScreen2;
  929.  
  930.     public INT explodeType;
  931.     public INT explodeDelay = -1;
  932.  
  933.     public INT[] godWarsKills = new INT[5];
  934.  
  935.     public INT watchId = -1;
  936.  
  937.     public INT spellType;
  938.  
  939.     public INT playerStart;
  940.  
  941.     public boolean muteExpect, muteExpect2;
  942.     public INT muteType;
  943.     public INT[] hugeNpcs = {
  944.     50, 1155, 1157, 1158, 1160, 2745, 6222, 6203, 8133
  945.     };
  946.  
  947.     /**
  948.      * Woodcutting variables
  949.      */
  950.     public INT cutDelay;
  951.     public boolean isWoodcutting;
  952.  
  953.     /**
  954.      * Dueling variables
  955.      */
  956.     public boolean isBusy;
  957.     public INT duelEnemy;
  958.     public boolean inDuelFight;
  959.  
  960.     /**
  961.      * Pet variables
  962.      */
  963.     public INT petKeeper;
  964.     public boolean summonedPet;
  965.  
  966.     /**
  967.      * Mage Arena variables
  968.      */
  969.     public INT kolodionDelay;
  970.     public boolean arenaActive;
  971.  
  972.     /**
  973.      * Slayer variables
  974.      */
  975.     public INT slayerAmount1;
  976.     public INT slayerType1;
  977.     public INT[] slayerType = {
  978.     1615, 5363, 55, 54
  979.     };
  980.     public boolean slayerTask;
  981.     public INT[] slayerArray = {
  982.     1, 2, 3, 4
  983.     };
  984.     public INT slayerAmount;
  985.  
  986.     /**
  987.      * Pvn variables
  988.      */
  989.     public INT damageSpecDelay = -1;
  990.     public boolean enableSpecDamage;
  991.     public INT damageDelay1 = -1;
  992.     public boolean enableDamage;
  993.     public INT atkDelay;
  994.     public boolean attackingNpc;
  995.     public INT attackNpc;
  996.  
  997.     /**
  998.      * Clan wars variables.
  999.      */
  1000.     public boolean blackClan;
  1001.     public boolean whiteClan;
  1002.  
  1003.     /**
  1004.      * Thieving variables.
  1005.      */
  1006.     public INT pickPocketDelay;
  1007.  
  1008.     /**
  1009.      * This variable IS added TO add facing IF player IS gonna pickpocket.
  1010.      */
  1011.     public INT npcClick2;
  1012.  
  1013.     /**
  1014.      * Mining variables.
  1015.      */
  1016.     public INT rockId;
  1017.     public boolean isMining;
  1018.     public INT receiveOreDelay;
  1019.     public INT miningDelay;
  1020.  
  1021.     /**
  1022.      * Wilderness variables.
  1023.      */
  1024.     public INT wildyLevel;
  1025.  
  1026.     public INT statDelay = 100; //Stat update delay
  1027.     public INT hpDelay = 100; //HP update delay
  1028.  
  1029.     /**
  1030.      * Emote clicking delay.
  1031.      */
  1032.     public INT animClickDelay;
  1033.     public boolean usingPrayer;
  1034.     public INT buryDelay;
  1035.     public INT drainDelay;
  1036.     public boolean rangedPrayer;
  1037.     public boolean meleePrayer;
  1038.     public boolean magicPrayer;
  1039.     public boolean retriPrayer;
  1040.     public boolean redempPrayer;
  1041.  
  1042.     //Prayer
  1043.  
  1044.     public DOUBLE[][] prayers = {{1, 0, 5}, {4, 0, 5}, {7, 0, 5}, {8, 0, 5}, {9, 0, 5}, {10, 0, 10}, {13, 0, 10}, {16, 0, 10}, {19, 0, 1.67}, {22, 0, 3.33}, {25, 0, 3.33}, {26, 0, 10}, {27, 0, 10}, {28, 0, 20}, {31, 0, 20}, {34, 0, 20}, {36, 0, 20}, {37, 0, 20}, {40, 0, 20}, {43, 0, 20}, {44, 0, 20}, {45, 0, 20}, {46, 0, 5}, {49, 0, 10}, {52, 0, 30}, {60, 0, 38.33}, {70, 0, 38.33}};
  1045.     public INT headIconPrayer = -1;
  1046.     public DOUBLE drainCount = 0;
  1047.  
  1048.     public boolean canPray(INT prayer) {
  1049.         IF (skillLvl[5] > 0 && getLevelForXP(5) >= prayers[prayer][0]) {
  1050.             RETURN true;
  1051.         }
  1052.         RETURN false;
  1053.     }
  1054.  
  1055.     public boolean usingPrayer(INT prayer) {
  1056.         RETURN prayers[prayer][1] == 1;
  1057.     }
  1058.  
  1059.     public boolean usingPrayer() {
  1060.         INT i = 0;
  1061.         WHILE (i <= 26) {
  1062.             IF (prayers[i][1] == 1) RETURN true;
  1063.             i++;
  1064.         }
  1065.         RETURN false;
  1066.     }
  1067.  
  1068.     public void togglePrayer(INT prayer, INT toggle) {
  1069.         INT[] configuration = {83, 84, 85, 862, 863, 86, 87, 88, 89, 90, 91, 864, 865, 92, 93, 94, 1168, 95, 96, 97, 866, 867, 98, 99, 100, 1052, 1053};
  1070.         prayers[prayer][1] = toggle;
  1071.         getActionSender().setConfig(this, configuration[prayer], toggle);
  1072.     }
  1073.  
  1074.     public DOUBLE prayerDrain() {
  1075.         INT i = 0;
  1076.         DOUBLE drainPerMinute = 0;
  1077.         WHILE (i <= 26) {
  1078.             IF (usingPrayer(i)) drainPerMinute += prayers[i][2];
  1079.             i++;
  1080.         }
  1081.         drainPerMinute *= 1 + (equipmentBonus[11] / 30);
  1082.         RETURN drainPerMinute / 175;
  1083.     }
  1084.  
  1085.     public void switchPrayers(INT[] prayers, INT prayer) {
  1086.         IF (!canPray(prayer)) {
  1087.             RETURN;
  1088.         }
  1089.         FOR (INT i : prayers) {
  1090.             IF (usingPrayer(i)) {
  1091.                 togglePrayer(i, 0);
  1092.             }
  1093.         }
  1094.     }
  1095.  
  1096.     public void prayerSounds(INT prayer) {
  1097.         INT SOUND = 0;
  1098.         switch (prayer) {
  1099.             CASE 0: SOUND = 2690; break;
  1100.             CASE 1: SOUND = 2688; break;
  1101.             CASE 2: SOUND = 2664; break;
  1102.             CASE 3: SOUND = 2685; break;
  1103.             CASE 4: SOUND = 2668; break;
  1104.             CASE 5: SOUND = 2684; break;
  1105.             CASE 6: SOUND = 2689; break;
  1106.             CASE 7: SOUND = 2662; break;
  1107.             CASE 8: SOUND = 2679; break;
  1108.             CASE 9: SOUND = 2678; break;
  1109.             CASE 10: SOUND = 0; break;
  1110.             CASE 11: SOUND = 2666; break;
  1111.             CASE 12: SOUND = 2670; break;
  1112.             CASE 13: SOUND = 2687; break;
  1113.             CASE 14: SOUND = 2691; break;
  1114.             CASE 15: SOUND = 2667; break;
  1115.             CASE 16: SOUND = 0; break;
  1116.             CASE 17: SOUND = 2675; break;
  1117.             CASE 18: SOUND = 2677; break;
  1118.             CASE 19: SOUND = 2676; break;
  1119.             CASE 20: SOUND = 2665; break;
  1120.             CASE 21: SOUND = 2669; break;
  1121.             CASE 22: SOUND = 2682; break;
  1122.             CASE 23: SOUND = 2680; break;
  1123.             CASE 24: SOUND = 2686; break;
  1124.             CASE 25: SOUND = 3826; break;
  1125.             CASE 26: SOUND = 3825; break;
  1126.         }
  1127.         IF (SOUND != 0) {
  1128.             getActionSender().addSoundEffect(this, SOUND, 1, 0, 0);
  1129.         }
  1130.     }
  1131.  
  1132.     public void resetPrayer() {
  1133.         INT i = 0;
  1134.         WHILE (i <= 26) {
  1135.             togglePrayer(i, 0);
  1136.             i++;
  1137.         }
  1138.         drainCount = 0;
  1139.         headIconPrayer = -1;
  1140.         updateReq = true;
  1141.         appearanceUpdateReq = true;
  1142.     }
  1143.                
  1144.  
  1145.     /**
  1146.      * Magic combat variables
  1147.      */
  1148.     public INT freezeDelay;
  1149.     public INT vengeanceDelay;
  1150.     public INT lunarDelay;
  1151.     public boolean vengeance;
  1152.     public INT spellbookSwapTimer;
  1153.     public boolean spellbookSwap;
  1154.     public boolean usedSpellbookSwap;
  1155.     public INT mageDelay;
  1156.  
  1157.     /**
  1158.      * Agility Variables
  1159.      */
  1160.     public INT[] agilityX = {
  1161.     2476, 2475, 2474, 2473, 2472, 2471
  1162.     };
  1163.     public INT[] agilityY = {
  1164.     3426
  1165.     };
  1166.     public boolean agilityPerforming;
  1167.     public INT agilityDelay;
  1168.     public INT agilityType;
  1169.  
  1170.     /**
  1171.      * Combat variables
  1172.      */
  1173.     public boolean fadeAway;
  1174.     public INT enemyFadeAwayDelay = -1;
  1175.     public INT fightStyle = 1;
  1176.     public INT[] strangeItems = {
  1177.     6570
  1178.     };
  1179.     public INT battleCDelay;
  1180.     public INT battleCount;
  1181.     public INT poisonDelay;
  1182.     public INT poisonHitCount;
  1183.     public boolean isPoisoned;
  1184.     public INT headIconSkull = -1;
  1185.     public boolean isSkulled;
  1186.     public INT skullVanishDelay;
  1187.     public INT rangeDmgDelay = -1;
  1188.     public INT rangeDmgDelay2 = -1;
  1189.    
  1190.     public INT[] rangeBows = {
  1191.     841, 843, 845, 847, 849, 851, 853,
  1192.     855, 857, 859, 861,6724, 9174, 9176, 9177,
  1193.     9179, 9181, 9183, 9185
  1194.     };
  1195.     public INT[] rangeArrows = {
  1196.     882, 884, 886, 888, 890, 892
  1197.     };
  1198.     public INT[] godSwords = {
  1199.     11694, 11696, 11698, 11700
  1200.     };
  1201.     public INT myBonus;
  1202.     public INT meleeDef;
  1203.     public INT waitDeathDelay = -1;
  1204.     public boolean randomVariable;
  1205.     public INT deathDelay = -1;
  1206.     public boolean isDead;
  1207.     public INT specDelay = -1;
  1208.     public INT secondSpecDelay = -1;
  1209.     public INT delayedDamageDelay = -1;
  1210.     public INT delayedDamageHit = -1;
  1211.     public boolean expectSpec;
  1212.     public boolean autoRetaliate = true;
  1213.     public INT specFillDelay = 50;
  1214.     public boolean usingSpecial;
  1215.     public INT specAmount;
  1216.     public INT damageDelay;
  1217.     public boolean damagePending;
  1218.     public INT combatDelay;
  1219.     public INT enemyIndex;
  1220.     public boolean attackingPlayer;
  1221.  
  1222.     /**
  1223.      * Player's index.
  1224.      */
  1225.     public INT playerId = 0;
  1226.     /**
  1227.      * Class FOR storing AND converting bytes.
  1228.      */
  1229.     public ByteVector stream = new ByteVector(500, 5000);
  1230.     /**
  1231.      * Player's socket for handling most io operations.
  1232.      */
  1233.     public PlayerSocket socket;
  1234.     /**
  1235.      * Set TO true IF the player has finished the login stage.
  1236.      */
  1237.     public boolean online = false;
  1238.     /**
  1239.      * Player's username.
  1240.      */
  1241.     public STRING username = "null";
  1242.     /**
  1243.      * Player's password.
  1244.      */
  1245.     public STRING password = "";
  1246.     /**
  1247.      * Player's rights.
  1248.      */
  1249.     public INT rights = 0;
  1250.     /**
  1251.      * Player's jail status.
  1252.      */
  1253.     public INT jailed = 0;
  1254.     /**
  1255.      * Player s starter.
  1256.      */
  1257.     public INT starter = 0;
  1258.  
  1259.     /**
  1260.      * 1 set TO true means socket disconnected but logged in, both FOR removing the player.
  1261.      */
  1262.     public boolean[] disconnected = new boolean[2];
  1263.     /**
  1264.      * The region this player IS in.
  1265.      */
  1266.     public INT mapRegionX = 0;
  1267.     public INT mapRegionY = 0;
  1268.     /**
  1269.      * The position this player IS at in the map region.
  1270.      */
  1271.     public INT currentX = 0;
  1272.     public INT currentY = 0;
  1273.     /**
  1274.      * ABSOLUTE coordinates this player IS at.
  1275.      */
  1276.     public INT absX = 0;
  1277.     public INT absY = 0;
  1278.     /**
  1279.      * The height level this player IS at.
  1280.      */
  1281.     public INT heightLevel = 0;
  1282.     /**
  1283.      * Storing players spellbook
  1284.      */
  1285.     public INT spellbook = 192;
  1286.     /**
  1287.      * IF either are above -1 THEN the player IS in motion.
  1288.      */
  1289.     public INT walkDir = -1;
  1290.     public INT runDir = -1;
  1291.     /**
  1292.      * True IF the player IS running, false IF it isn't.
  1293.      */
  1294.     public boolean isRunning = false;
  1295.     /**
  1296.      * Set TO true IF the player has entered a new map region.
  1297.      */
  1298.     public boolean mapRegionDidChange = false;
  1299.     /**
  1300.      * Set TO true IF teleported.
  1301.      */
  1302.     public boolean didTeleport = false;
  1303.     /**
  1304.      * Set ABSOLUTE coordinates TO these.
  1305.      */
  1306.     public INT teleportToX = -1;
  1307.     public INT teleportToY = -1;
  1308.     /**
  1309.      * True IF the player IS Reqing an update.
  1310.      */
  1311.     public boolean updateReq = false;
  1312.     /**
  1313.      * Max number of steps this player can have pending.
  1314.      */
  1315.     public INT walkingQueueSize = 50;
  1316.     public INT wQueueReadPtr = 0;
  1317.     public INT wQueueWritePtr = 0;
  1318.     /**
  1319.      * Positions the player IS Reqing TO walk TO.
  1320.      */
  1321.     public INT[] walkingQueueX = new INT[walkingQueueSize];
  1322.     public INT[] walkingQueueY = new INT[walkingQueueSize];
  1323.     public INT[] walkingQueue = new INT[walkingQueueSize];
  1324.     /**
  1325.      * All the players within distance.
  1326.      */
  1327.     public Player[] playerList = new Player[Engine.players.length];
  1328.     /**
  1329.      * All the players stored in distance.
  1330.      */
  1331.     public byte[] playersInList = new byte[Engine.players.length];
  1332.     public INT playerListSize = 0;
  1333.     /**
  1334.      * True IF chatting IS Reqing TO be sent.
  1335.      */
  1336.     public boolean chatTextUpdateReq = false;
  1337.     public STRING chatText = "";
  1338.     public INT chatTextEffects = 0;
  1339.     /**
  1340.      * True IF an appearance update IS needed.
  1341.      */
  1342.     public boolean appearanceUpdateReq = false;
  1343.     /**
  1344.      * Animation DATA.
  1345.      */
  1346.     public boolean animUpdateReq = false;
  1347.     public INT animReq = -1;
  1348.     public INT animDelay = 0;
  1349.     /**
  1350.      * GFX DATA.
  1351.      */
  1352.     public boolean gfxUpdateReq = false;
  1353.     public INT gfxReq = -1;
  1354.     public INT gfxDelay = 0;
  1355.     /**
  1356.      * Player AND NPC facing DATA.
  1357.      */
  1358.     public boolean faceToUpdateReq = false;
  1359.     public INT faceToReq = -1;
  1360.     /**
  1361.      * Damage DATA.
  1362.      */
  1363.     public boolean hit1UpdateReq = false;
  1364.     public boolean hit2UpdateReq = false;
  1365.     public INT hitDiff1 = 0;
  1366.     public INT hitDiff2 = 0;
  1367.     public INT poisonHit1 = 0;
  1368.     public INT poisonHit2 = 0;
  1369.     /**
  1370.      * Skill level DATA.
  1371.      */
  1372.     public INT[] skillLvl = new INT[25];
  1373.     public INT[] skillXP = new INT[25];
  1374.     public INT combatLevel = 0;
  1375.     /**
  1376.      * Equipment DATA.
  1377.      */
  1378.     public INT[] equipment = new INT[14];
  1379.     public INT[] equipmentN = new INT[14];
  1380.     public INT[] equipmentBonus = new INT[12];
  1381.     /**
  1382.      * Player appearance.
  1383.      */
  1384.     public INT[] color = new INT[5];
  1385.     public INT[] look = new INT[7];
  1386.     public INT npcType = -1;
  1387.     public INT gender = 0;
  1388.     /**
  1389.      * Player emotes.
  1390.      */
  1391.     public INT runEmote = 0x338;
  1392.     public INT walkEmote = 0x333;
  1393.     public INT standEmote = 0x328;
  1394.     /**
  1395.      * All the NPCs within distance.
  1396.      */
  1397.     public NPC[] npcList = new NPC[Engine.npcs.length];
  1398.     /**
  1399.      * All the npcs stored in distance.
  1400.      */
  1401.     public byte[] npcsInList = new byte[Engine.npcs.length];
  1402.     public INT npcListSize = 0;
  1403.     /**
  1404.      * Rebuild the entire NPC LIST.
  1405.      */
  1406.     public boolean rebuildNPCList = false;
  1407.     /**
  1408.      * An array storing all the players items.
  1409.      */
  1410.     public INT[] items = new INT[28];
  1411.     public INT[] itemsN = new INT[28];
  1412.     /**
  1413.      * OPEN interfaces, use these TO confirm an interface IS OPEN when trying TO use one.
  1414.      */
  1415.     public INT interfaceId = -1;
  1416.     public INT chatboxInterfaceId = -1;
  1417.     /**
  1418.      * The current position in the login stage.
  1419.      */
  1420.     public INT loginStage = 0;
  1421.     /**
  1422.      * Click x position.
  1423.      */
  1424.     public INT clickX = 0;
  1425.     /**
  1426.      * Click y position.
  1427.      */
  1428.     public INT clickY = 0;
  1429.     /**
  1430.      * Click id.
  1431.      */
  1432.     public INT clickId = 0;
  1433.     /**
  1434.      * Eat delay.
  1435.      */
  1436.     public INT eatDelay;
  1437.     public INT drinkDelay;
  1438.     /**
  1439.      * True IF the player IS trying TO pickup an item.
  1440.      */
  1441.     public boolean itemPickup = false;
  1442.     /**
  1443.      * Set RUN energy.
  1444.      */
  1445.     public boolean runEnergyUpdateReq = false;
  1446.     /**
  1447.      * Amount of current RUN energy.
  1448.      */
  1449.     public INT runEnergy = 100;
  1450.     /**
  1451.      * Delay before RUN energy can increase.
  1452.      */
  1453.     public INT runEnergyDelay = 0;
  1454.     /**
  1455.      * Clicked the first OPTION ON a player.
  1456.      */
  1457.     public boolean playerOption1 = false;
  1458.     /**
  1459.      * Clicked the second OPTION ON a player.
  1460.      */
  1461.     public boolean playerOption2 = false;
  1462.     /**
  1463.      * Clicked the third OPTION ON a player.
  1464.      */
  1465.     public boolean playerOption3 = false;
  1466.     /**
  1467.      * Clicked the first OPTION ON a NPC.
  1468.      */
  1469.     public boolean npcOption1 = false;
  1470.     /**
  1471.      * Clicked the first OPTION ON an object.
  1472.      */
  1473.     public boolean objectOption1 = false;
  1474.     /**
  1475.      * Setting the prayer SYSTEM effects.
  1476.      */
  1477.     public PrayerSystem prayerSystem = new PrayerSystem(this);
  1478.     /**
  1479.      * Setting the players weapon.
  1480.      */
  1481.     public PlayerWeapon playerWeapon = new PlayerWeapon(this);
  1482.     /**
  1483.      * Clicked the second OPTION ON an object.
  1484.      */
  1485.     public boolean objectOption2 = false;
  1486.     /**
  1487.      * Clicked the second OPTION ON a NPC.
  1488.      */
  1489.     public boolean npcOption2 = false;
  1490.     /**
  1491.      * Forced chat.
  1492.      */
  1493.     public STRING forceChat = "";
  1494.     public boolean forceChatUpdateReq = false;
  1495.     /**
  1496.      * Teleporting variables.
  1497.      */
  1498.     public INT teleX = -1;
  1499.     public INT teleY = -1;
  1500.     public INT teleH = -1;
  1501.     public INT teleDelay = -1;
  1502.     public INT teleFinishGFX = 0;
  1503.     public INT teleFinishGFXHeight = 0;
  1504.     public INT teleFinishAnim = 0;
  1505.     /**
  1506.      * Delay before recieving packets.
  1507.      */
  1508.     public INT clickDelay = -1;
  1509.     public LONG loginTimeout = SYSTEM.currentTimeMillis();
  1510.     public INT[] bankItems = new INT[500];
  1511.     public INT[] bankItemsN = new INT[500];
  1512.  
  1513.     /**
  1514.      * Constructs a new Player.
  1515.      * @param socket The socket this Player belongs TO.
  1516.      * @param id The index this player IS at.
  1517.      */
  1518.     public Player(Socket socket, INT id) {
  1519.         this.socket = new PlayerSocket(this, socket);
  1520.         playerId = id;
  1521.     look[0] = 0;
  1522.     look[1] = 10;
  1523.     look[2] = 18;
  1524.     look[3] = 26;
  1525.     look[4] = 33;
  1526.     look[5] = 36;
  1527.     look[6] = 42;
  1528.         FOR (INT i = 0; i < skillLvl.length; i++) {
  1529.         skillLvl[i] = 1;
  1530.         skillXP[i] = 0;
  1531.         skillLvl[3] = 10;
  1532.         skillXP[3] = 1155;
  1533.         }
  1534.         FOR (INT i = 0; i < items.length; i++) {
  1535.             items[i] = -1;
  1536.         itemsN[i] = 0;
  1537.         }
  1538.         FOR (INT i = 0; i < equipment.length; i++) {
  1539.             equipment[i] = -1;
  1540.         }
  1541.         FOR (INT i = 0; i < bankItems.length; i++) {
  1542.             bankItems[i] = -1;
  1543.         }
  1544. pTrade = new PTrade(this);
  1545.     }
  1546.      
  1547.     public boolean skillCapeEquiped() {
  1548.     FOR (INT i = 10639; i < 10663; i++) {
  1549.         FOR (INT j = 9747; j < 9812; j++) {
  1550.             IF (equipment[1] == i || equipment[1] == j || equipment[1] == 12169 || equipment[1] == 12170) {
  1551.                 RETURN true;
  1552.             }
  1553.         }
  1554.     }
  1555.     RETURN false;
  1556.     }
  1557.  
  1558.     public INT logoutTimer;
  1559.     public INT restoreSpecialTimer;
  1560.  
  1561.     public void processTimers() { //Processes evenly at 1000 milliseconds
  1562.             IF (procast > 0) {
  1563.             procast--;
  1564.             }
  1565.         IF (freezeDelay > 0) {
  1566.             freezeDelay--;
  1567.         }
  1568.         IF (vengeanceDelay > 0) {
  1569.             vengeanceDelay--;
  1570.         }
  1571.         IF (spellbookSwapTimer > 0) {
  1572.             spellbookSwapTimer--;
  1573.         } ELSE IF (spellbookSwap) {
  1574.             getActionSender().setTab(this, 79, spellbook);
  1575.             spellbookSwap = false;
  1576.             usedSpellbookSwap = false;
  1577.         }
  1578.         IF (attackedBy != null) {
  1579.             count++;
  1580.             IF (count == 4) {
  1581.                 attackedBy = null;
  1582.                 attackedByCount--;
  1583.                 count = 0;
  1584.             }
  1585.         }
  1586.         IF (serverMsg == 0) {
  1587.             serverMsg = 150;
  1588.         }
  1589.     IF (fleeTimer > 0) {
  1590.         fleeTimer--;
  1591.     }
  1592.         IF (serverMsg > 0) {
  1593.         serverMsg--;
  1594.         }
  1595.   IF (leftBhTimer > 0) {
  1596.       leftBhTimer--;
  1597.     }
  1598.         IF (bhLeave1 > 0) {
  1599.       bhLeave1--;
  1600.     }
  1601.        IF(bhPickup < 1 && (InBounty == 1)) {
  1602.         bhPickup--;
  1603.         this.getActionSender().setString(this, "", 653, 11);
  1604.         this.getActionSender().setString(this, "", 653, 10);
  1605.         }
  1606.         IF(bhPickup > 0 && (InBounty == 1)) {
  1607.         bhPickup--;
  1608.         this.getActionSender().setString(this, + bhPickup +" Sec", 653, 11);
  1609.         this.getActionSender().setString(this, "Can't leave for:", 653, 10);
  1610.         }
  1611. IF(bhLeave > 0 && (InBounty == 1)) {
  1612.         bhLeave--;
  1613.         this.getActionSender().setString(this, + bhLeave +" Sec", 653, 11);
  1614.         this.getActionSender().setString(this, "Pickup penalty:", 653, 10);
  1615.         }
  1616.         IF (logoutTimer > 0) {
  1617.             logoutTimer--;
  1618.         }
  1619.         IF (restoreSpecialTimer > 0) {
  1620.             restoreSpecialTimer--;
  1621.         }
  1622.     }
  1623.  
  1624.  
  1625.     /**
  1626.      * This method IS called every 600 milliseconds.
  1627.      * <p>WHILE this IS good FOR FOR changing integers, this
  1628.      * should NOT be abused. Things that can be handled ELSE where should
  1629.      * be done in that way, such AS clicking the accept button in trade
  1630.      * should update in the ActionsButton class rather than Reqing
  1631.      * an update FOR the process TO handle.
  1632.      */
  1633.  
  1634.     public void attackPlayer() {
  1635.         PlayerCombat pc = new PlayerCombat(this);
  1636.         pc.attackPlayer();
  1637.     }
  1638.  
  1639.     public INT count;
  1640.     public boolean usedLogout;
  1641.  
  1642.     public void process() {
  1643.  
  1644.         IF (DFSDelay > 0) {
  1645.             DFSDelay--;
  1646.         } ELSE IF (DFSDelay == 0) {
  1647.             append1Hit((INT)Math.round(Math.RANDOM() * 25), 0);
  1648.             DFSDelay = -1;
  1649.         }
  1650.         IF (attackedBy == null) {
  1651.                     OriginalAttacker = null;
  1652.  
  1653.             }
  1654.         IF(followingPlayer)
  1655.                 Engine.playerFollow.followPlayer(this);
  1656.         IF (leverTeleportDelay > 0) {
  1657.             leverTeleportDelay--;
  1658.         } ELSE IF (leverTeleportDelay == 0) {
  1659.             teleportTo(leverTeleportX, leverTeleportY, leverTeleportH, 4, 0, 8939, 8941, 1576, 0, 1577, 0);
  1660.             lever = false;
  1661.             leverTeleportDelay--;
  1662.         }
  1663.  
  1664.         IF (teleblocked && teleblockTimer > 0) {
  1665.             IF (teleblockTimer == 500) {
  1666.                 getActionSender().sendMessage(this, "You have been teleport blocked!");
  1667.                 IF (usingPrayer(17)) {
  1668.                     teleblockTimer = 250;
  1669.                 }
  1670.             }
  1671.             teleblockTimer--;
  1672.         }
  1673.         IF (teleblockTimer == 0) {
  1674.             teleblocked = false;
  1675.             teleblockTimer = 500;
  1676.             getActionSender().sendMessage(this, "The teleport block has worn off.");
  1677.         }
  1678.  
  1679.         IF (degrades && equipment[3] == 13290) {
  1680.             degrade--;
  1681.             IF (degrade == 0) {
  1682.                 boolean deleted = false;
  1683.                 PlayerItems playerItems = new PlayerItems();
  1684.                 FOR (INT i = 0; i < equipment.length; i++) {
  1685.                     IF (equipment[i] == 13290) {
  1686.                         equipment[i] = -1;
  1687.                         equipmentN[i] = 0;
  1688.                         getActionSender().setItems(this, 387, 28, 93, equipment, equipmentN);
  1689.                         getActionSender().sendMessage(this, "Your Vesta's longsword has degraded into nothing.");
  1690.                         deleted = true;
  1691.                         break;
  1692.                     }
  1693.                 }
  1694.                 IF (!deleted) {
  1695.                     FOR (INT i = 0; i < items.length; i++) {
  1696.                         IF (items[i] == 13290) {
  1697.                             playerItems.deleteItem(this, 13290, playerItems.getItemSlot(this, 13290), 1);
  1698.                             getActionSender().sendMessage(this, "Your Vesta's longsword has degraded into nothing.");
  1699.                             deleted = true;
  1700.                             break;
  1701.                         }
  1702.                     }
  1703.                 }
  1704.                 IF (!deleted) {
  1705.                     FOR (INT i = 0; i < bankItems.length; i++) {
  1706.                         IF (bankItems[i] == 13290) {
  1707.                             bankItemsN[i]--;
  1708.                             IF (bankItemsN[i] <= 0) {
  1709.                                 bankItems[i] = -1;
  1710.                             }
  1711.                             getActionSender().setItems(this, -1, 64207, 95, bankItems, bankItemsN);
  1712.                             getActionSender().setItems(this, -1, 64209, 93, items, itemsN);
  1713.                             getActionSender().setItems(this, 149, 0, 93, items, itemsN);
  1714.                             getActionSender().sendMessage(this, "Your Vesta's longsword has degraded into nothing.");
  1715.                             break;
  1716.                         }
  1717.                     }
  1718.                 }
  1719.                 degrade = 6000;
  1720.                 degrades = false;
  1721.             }
  1722.         }
  1723.  
  1724.  
  1725.  
  1726.         IF (magicGraphicDelay > 0) {
  1727.             magicGraphicDelay--;
  1728.         } ELSE IF (magicGraphicDelay == 0) {
  1729.             PlayerMagic playerMagic = new PlayerMagic(this);
  1730.             playerMagic.appendGraphic(spellbook, spell);
  1731.             magicGraphicDelay--;
  1732.         }
  1733.         IF (magicDamageDelay > 0) {
  1734.             magicDamageDelay--;
  1735.         } ELSE IF (magicDamageDelay == 0) {
  1736.             PlayerMagic playerMagic = new PlayerMagic(this);
  1737.             playerMagic.appendDamage(spellbook, spell);
  1738.             magicDamageDelay--;
  1739.         }
  1740.         IF (magicAffectDelay > 0) {
  1741.             magicAffectDelay--;
  1742.         } ELSE IF (magicAffectDelay == 0) {
  1743.             PlayerMagic playerMagic = new PlayerMagic(this);
  1744.             playerMagic.appendAffect(spellbook, spell);
  1745.             magicAffectDelay--;
  1746.         }
  1747.         IF (cuedSpells > 0 && combatDelay == 0) {
  1748.             try {
  1749.                 Player opp = Server.engine.players[magicOppIndex];
  1750.                 PlayerMagic playerMagic = new PlayerMagic(this);
  1751.                 playerMagic.combatMagic(opp, spellbook, cuedSpell);
  1752.                 cuedSpells = 0;
  1753.             } catch (Exception e) {
  1754.             }
  1755.         }
  1756.    
  1757.         IF (usingPrayer()) {
  1758.             drainCount += prayerDrain();
  1759.             IF (!isDead) {
  1760.                 IF (drainCount >= 1) {
  1761.                     skillLvl[5]--;
  1762.                     getActionSender().setSkillLvl(this, 5);
  1763.                     drainCount--;
  1764.                 }
  1765.             }
  1766.             IF (skillLvl[5] <= 0) {
  1767.                 skillLvl[5] = 0;
  1768.                 getActionSender().addSoundEffect(this, 2672, 1, 0, 0);
  1769.                 getActionSender().setSkillLvl(this, 5);
  1770.                 getActionSender().sendMessage(this, "You have run out of Prayer points; you must recharge at an altar.");
  1771.                 resetPrayer();
  1772.             }
  1773.         }
  1774.  
  1775.     getDuelClass().process();
  1776.     IF (disconnected[0] && (usedLogout || attackedBy == null)) {
  1777.         try {
  1778.             IF (heightLevel != 0) heightLevel = heightLevel;
  1779.             Engine.fileManager.saveCharacter(this);
  1780.         } catch (Exception e) {
  1781.         }
  1782.             IF (clanRoom.length() > 0) {
  1783.                 Engine.clanChat.leave(this);
  1784.             }
  1785.         IF (pTrade.getPartner() != null) {
  1786.             pTrade.declineTrade();
  1787.         }
  1788.         disconnected[1] = true;
  1789.     }
  1790.     /**
  1791.      * Warrior Guild
  1792.      */
  1793.     IF (!enteredDefenceRoom) {
  1794.         IF (absX == 2842 && absY == 3545 && heightLevel == 1)
  1795.             getWarriorClass().addWarriorDefenceEvent();
  1796.         enteredDefenceRoom = false;
  1797.     }
  1798.     IF (thievingArray[0] > 0)
  1799.         thievingArray[0]--;
  1800.     IF (thievingArray[0] == 0) {
  1801.         PlayerThieving thievClass = new PlayerThieving(this);
  1802.         thievClass.addStallThievingEvent();
  1803.     }
  1804.     IF (thievingArray[3] > 0)
  1805.         thievingArray[3]--;
  1806.     IF (nextGraphicDelay > 0)
  1807.         nextGraphicDelay--;
  1808.     IF (nextGraphicDelay == 0) {
  1809.         PlayerCombat playerAttacking = new PlayerCombat(this);
  1810.         playerAttacking.addNextAttack();
  1811.     }
  1812.     IF (nextDamageDelay > 0)
  1813.         nextDamageDelay--;
  1814.     IF (nextDamageDelay == 0) {
  1815.         PlayerCombat playerAttacking = new PlayerCombat(this);
  1816.         playerAttacking.addNextDamage();
  1817.     }
  1818.     IF (fletchDelay > 0)
  1819.         fletchDelay--;
  1820.  
  1821.     IF (fletchDelay == 0 && isFletching)
  1822.         getFletchingClass().appendFletchingEngine();
  1823.  
  1824.     IF (summonTeleDelay > 0) {
  1825.         summonTeleDelay--;
  1826.     }
  1827.     IF (summonTeleDelay == 0) {
  1828.         setCoords(3069, 10257, 0);
  1829.         summonTeleDelay = -1;
  1830.         requestAnim(715, 0);
  1831.     }
  1832.     IF (summonDrainDelay > 0) {
  1833.         summonDrainDelay--;
  1834.     }
  1835.     IF (summonDrainDelay == 0) {
  1836.         IF (skillLvl[23] > 0) {
  1837.         skillLvl[23]--;
  1838.             getActionSender().setSkillLvl(this, 23);
  1839.         summonDrainDelay = 14;
  1840.         } ELSE {
  1841.         familiarDissMiss = true;
  1842.         summonedFamiliar = false;
  1843.         summonDrainDelay = -1;
  1844.         getActionSender().sendMessage(this, "You ran out of Summoning skill points, Please restore them.");
  1845.         }
  1846.     }
  1847.     IF (deathEmoteDelay > 0) {
  1848.         deathEmoteDelay--;
  1849.     }
  1850.     IF (deathEmoteDelay == 0) {
  1851.         requestAnim(9055, 0); //836, 2261
  1852.         IF (usingPrayer(22)) {
  1853.             requestGFX(437, 0);
  1854.             IF (multiwayCombatZone(absX, absY)) {
  1855.                 try {
  1856.                     FOR (Player player : Server.engine.players) {
  1857.                         IF (Misc.getDistance(absX, absY, player.absX, player.absY) <= 1) {
  1858.                             player.append1Hit(getRandom((INT)Math.floor(getLevelForXP(5) * 0.25)), 0);
  1859.                         }
  1860.                     }
  1861.                 } catch (Exception e) {
  1862.                 }
  1863.             } ELSE {
  1864.                 try {
  1865.                     Server.engine.players[hitIndex].append1Hit(getRandom((INT)Math.floor(getLevelForXP(5) * 0.25)), 0);
  1866.                 } catch (Exception e) {
  1867.                 }
  1868.             }
  1869.         }
  1870.                    
  1871.         isDead = true;
  1872.         deathDelay = 4;
  1873.         deathEmoteDelay = -1;
  1874.     }
  1875.     IF (massYellDelay > 0) {
  1876.         massYellDelay--;
  1877.     }
  1878.         IF (clickDelay > 0) {
  1879.             clickDelay--;
  1880.         }
  1881.         IF (teleDelay > 0) {
  1882.             teleDelay--;
  1883.         }
  1884.     IF (equipSpecDelay > 0) {
  1885.         equipSpecDelay--;
  1886.     }
  1887.     IF (waveDelay > 0) {
  1888.         waveDelay--;
  1889.     }
  1890.     IF (waveDelay == 0) {
  1891.         fCave.fightSystem();
  1892.     }
  1893.     IF (countDelay > 0) {
  1894.         countDelay--;
  1895.     }
  1896.     IF (countDelay == 0) {
  1897.         IF (countType >= 0) {
  1898.             IF (countType == 3) {
  1899.             requestForceChat("3");
  1900.             } ELSE IF (countType == 2) {
  1901.             requestForceChat("2");
  1902.             } ELSE IF (countType == 1) {
  1903.             requestForceChat("1");
  1904.         } ELSE IF (countType == 0) {
  1905.             requestForceChat("FIGHT!");
  1906.             }
  1907.             countType--;
  1908.             countDelay = 3;
  1909.         } ELSE {
  1910.         countType = -1;
  1911.         countDelay = -1;
  1912.         }
  1913.     }
  1914.     IF (explodeDelay > 0) {
  1915.         explodeDelay--;
  1916.     }
  1917.     IF (explodeDelay == 0) {
  1918.         appendPotion();
  1919.     }
  1920.     IF (rangeDmgDelay > 0) {
  1921.         rangeDmgDelay--;
  1922.     }
  1923.     IF (rangeDmgDelay == 0) {
  1924.         PlayerCombat PC2 = new PlayerCombat(this);
  1925.         PC2.appendRangeDamage();
  1926.     }
  1927.     IF (rangeDmgDelay2 > 0) {
  1928.         rangeDmgDelay2--;
  1929.     }
  1930.     IF (rangeDmgDelay2 == 0) {
  1931.         PlayerCombat PC2 = new PlayerCombat(this);
  1932.         PC2.appendRangeDamage();
  1933.     }
  1934.     IF (damageSpecDelay > 0) {
  1935.         damageSpecDelay--;
  1936.     }
  1937.     IF (damageSpecDelay == 0 && enableSpecDamage) {
  1938.         PlayerCombat playCb2 = new PlayerCombat(this);
  1939.         playCb2.appendNpcDamageMeleeSpec();
  1940.     }
  1941.     IF (damageDelay1 > 0) {
  1942.         damageDelay1--;
  1943.     }
  1944.     IF (damageDelay1 == 0 && enableDamage) {
  1945.         PlayerCombat playerCb = new PlayerCombat(this);
  1946.         playerCb.appendNpcDamageMelee();
  1947.     }
  1948.     IF (atkDelay > 0) {
  1949.         atkDelay--;
  1950.     }
  1951.     IF (atkDelay == 0 && attackingNpc) {
  1952.         PlayerCombat playCb = new PlayerCombat(this);
  1953.         playCb.attackNpc();
  1954.     }
  1955.     IF (buryDelay > 0) {
  1956.         buryDelay--;
  1957.     }
  1958.     IF (battleCDelay > 0) {
  1959.         battleCDelay--;
  1960.     }
  1961.     IF (battleCDelay == 0) {
  1962.         battleCount = 0;
  1963.         battleCDelay = -1;
  1964.     }
  1965.     IF (pickPocketDelay > 0) {
  1966.         pickPocketDelay--;
  1967.     }
  1968.     IF (skullVanishDelay > 0) {
  1969.         skullVanishDelay--;
  1970.     }
  1971.     IF (skullVanishDelay == 0 && isSkulled) {
  1972.         headIconSkull = -1;
  1973.         isSkulled = false;
  1974.         skullVanishDelay = 0;
  1975.         appearanceUpdateReq = true;
  1976.         updateReq = true;
  1977.     }
  1978.     IF (eatDelay > 0) {
  1979.         eatDelay--;
  1980.     }
  1981.     IF (drinkDelay > 0) {
  1982.         drinkDelay--;
  1983.     }
  1984.  
  1985.     IF (statDelay > 0) {
  1986.         statDelay -= usingPrayer(8) ? 2 : 1;
  1987.     } ELSE {
  1988.         updateStats();
  1989.     }
  1990.     IF (hpDelay > 0) {
  1991.         hpDelay -= usingPrayer(9) ? 2 : 1;
  1992.     } ELSE {
  1993.         restoreHP();
  1994.     }
  1995.  
  1996.     IF (poisonDelay > 0) {
  1997.         poisonDelay--;
  1998.     }
  1999.     IF (isPoisoned && poisonDelay == 0) {
  2000.         DOUBLE intreval = (poisonHitCount / 3) - poisonIntrevals;
  2001.         IF (poisonHitCount == 0) {
  2002.             poisonDamage = getStartingPoisonDamage(Server.engine.players[enemyIndex]);
  2003.         } ELSE IF (intreval == 1) {
  2004.             poisonIntrevals++;
  2005.             poisonDamage -= poisonIntrevals;
  2006.         }
  2007.         IF (poisonDamage == 0) {
  2008.             isPoisoned = false;
  2009.             poisonHitCount = 0;
  2010.             poisonIntrevals = 0;
  2011.             getActionSender().sendMessage(this, "The poison wears off.");
  2012.             RETURN;
  2013.         }
  2014.         appendHit(poisonDamage, 1);
  2015.         poisonDelay = 100;
  2016.         poisonHitCount++;
  2017.     }
  2018.  
  2019.     IF (specFillDelay > 0) {
  2020.         IF (specAmount < 1000) {
  2021.             specFillDelay--;
  2022.         } ELSE {
  2023.             specFillDelay = 50;
  2024.         }
  2025.     } ELSE {
  2026.         IF (specAmount < 1000) {
  2027.             IF (specAmount - 100 > 900) {
  2028.                 specAmount = 1000;
  2029.             } ELSE {
  2030.                 specAmount += 100;
  2031.             }
  2032.             getActionSender().setConfig2(this, 300, specAmount);
  2033.         }
  2034.         specFillDelay = 50;
  2035.     }
  2036.  
  2037.     IF (animClickDelay > 0) {
  2038.         animClickDelay--;
  2039.     }
  2040.     IF (agilityDelay > 0) {
  2041.         agilityDelay--;
  2042.     }
  2043.     IF (agilityDelay == 0 && agilityPerforming) {
  2044.         PlayerAgility pa = new PlayerAgility(this);
  2045.         pa.resetPerforming();
  2046.     }
  2047.     IF (deathDelay > 0) {
  2048.         deathDelay--;
  2049.     }
  2050.     IF (waitDeathDelay > 0) {
  2051.         waitDeathDelay--;
  2052.     }
  2053.  
  2054.     //IF (skillLvl[3] <= 0 && waitDeathDelay == -1 && !randomVariable) {
  2055.     //    waitDeathDelay = 3;
  2056.     //    resetAttack();
  2057.     //    deathEmoteDelay = 3;
  2058.     //    IF (duelFight())
  2059.     //  duelDeath = true;
  2060.     //    randomVariable = true;
  2061.     //    isDead = true;
  2062.     //}
  2063.  
  2064.     IF (deathDelay == 0 && isDead) {
  2065.         appendDeath();
  2066.     }
  2067.     IF (combatDelay > 0) {
  2068.         combatDelay--;
  2069.     }
  2070.     IF (attackingPlayer) {
  2071.         attackPlayer();
  2072.     }
  2073.     IF (damageDelay > 0) {
  2074.         damageDelay--;
  2075.     }
  2076.     IF (damageDelay == 0) {
  2077.         PlayerCombat PC = new PlayerCombat(this);
  2078.         PC.appendDamages();
  2079.     }
  2080.     IF (mageDelay > 0) {
  2081.         mageDelay--;
  2082.     }
  2083.     IF (specDelay > 0) {
  2084.         specDelay--;
  2085.     }
  2086.     IF (specDelay == 0) {
  2087.         PlayerCombat PC1 = new PlayerCombat(this);
  2088.         PC1.appendSpecDamage();
  2089.     }
  2090.     IF (secondSpecDelay > 0) {
  2091.         secondSpecDelay--;
  2092.     }
  2093.     IF (secondSpecDelay == 0) {
  2094.         PlayerCombat PC1 = new PlayerCombat(this);
  2095.         PC1.appendSecondSpecDamage();
  2096.     }
  2097.     IF (delayedDamageDelay > 0) {
  2098.         delayedDamageDelay--;
  2099.     }
  2100.     IF (delayedDamageDelay == 0) {
  2101.         PlayerCombat PC1 = new PlayerCombat(this);
  2102.         PC1.appendDelayedDamage(delayedDamageHit);
  2103.     }
  2104.         IF (runEnergyDelay > 0) {
  2105.             runEnergyDelay--;
  2106.         } ELSE {
  2107.             IF (runEnergy < 100) {
  2108.                 runEnergy++;
  2109.                 runEnergyUpdateReq = true;
  2110.             }
  2111.             runEnergyDelay = 4;
  2112.         }
  2113.         IF (itemPickup) {
  2114.             Engine.packets.pickupItem.handlePacket(this, 0, 0);
  2115.         }
  2116.         IF (playerOption1) {
  2117.             Engine.packets.playerOption1.handlePacket(this, 0, 0);
  2118.         }
  2119.         IF (playerOption2) {
  2120.             Engine.packets.playerOption2.handlePacket(this, 0, 0);
  2121.         }
  2122.         IF (playerOption3) {
  2123.             Engine.packets.playerOption3.handlePacket(this, 0, 0);
  2124.         }
  2125.         IF (npcOption1) {
  2126.             Engine.packets.npcOption1.handlePacket(this, 0, 0);
  2127.         }
  2128.         IF (npcOption2) {
  2129.             Engine.packets.npcOption2.handlePacket(this, 0, 0);
  2130.         }
  2131.         IF (objectOption1) {
  2132.             Engine.packets.objectOption1.handlePacket(this, 0, 0);
  2133.         }
  2134.         IF (objectOption2) {
  2135.             Engine.packets.objectOption2.handlePacket(this, 0, 0);
  2136.         }
  2137.         IF (runEnergyUpdateReq) {
  2138.             getActionSender().setEnergy(this);
  2139.             runEnergyUpdateReq = false;
  2140.         }
  2141.     appendWilderness();
  2142.         IF (teleDelay == 0) {
  2143.             teleDelay = -1;
  2144.         IF (teletab) {
  2145.             requestAnim(teleFinishAnim, 0);
  2146.             requestGFX(teleFinishGFX, teleFinishGFXHeight);
  2147.             teleDelay = 2;
  2148.             teleFinishAnim = playerWeapon.getStandEmote(equipment[3]);
  2149.             teleFinishGFX = -1;
  2150.         } ELSE {
  2151.             setCoords(teleX, teleY, teleH);
  2152.             IF (teleFinishAnim != -1) {
  2153.                 requestAnim(teleFinishAnim, 0);
  2154.             }
  2155.             IF (teleFinishGFX != -1) {
  2156.                 requestGFX(teleFinishGFX, teleFinishGFXHeight);
  2157.             }
  2158.         }
  2159.     IF (!teletab) {
  2160.             teleX = teleY = -1;
  2161.     }
  2162.     teletab = false;
  2163.         }
  2164.         IF (clickDelay == 0) {
  2165.             clickDelay = -1;
  2166.         }
  2167.     }
  2168.  
  2169.  
  2170.     public void potion(INT potionID) {
  2171.         INT root = 0;
  2172.         INT toAdd = 0;
  2173.         INT i = 0;
  2174.         switch (potionID) {
  2175.             CASE 2436:
  2176.             CASE 145:
  2177.             CASE 147:
  2178.             CASE 149:
  2179.                 root = getLevelForXP(0);
  2180.                 toAdd = 5 + (INT)Math.round(root * 0.1414141414);
  2181.                 IF ((skillLvl[0] + toAdd) > (root + toAdd)) {
  2182.                     skillLvl[0] = root + toAdd;
  2183.                 } ELSE {
  2184.                     skillLvl[0] += toAdd;
  2185.                 }
  2186.                 getActionSender().setSkillLvl(this, 0);
  2187.             break;
  2188.  
  2189.             CASE 2440:
  2190.             CASE 157:
  2191.             CASE 159:
  2192.             CASE 161:
  2193.                 root = getLevelForXP(2);
  2194.                 toAdd = 5 + (INT)Math.round(root * 0.1414141414);
  2195.                 IF ((skillLvl[2] + toAdd) > (root + toAdd)) {
  2196.                     skillLvl[2] = root + toAdd;
  2197.                 } ELSE {
  2198.                     skillLvl[2] += toAdd;
  2199.                 }
  2200.                 getActionSender().setSkillLvl(this, 2);
  2201.             break;
  2202.  
  2203.             CASE 2442:
  2204.             CASE 163:
  2205.             CASE 165:
  2206.             CASE 167:
  2207.                 root = getLevelForXP(1);
  2208.                 toAdd = 5 + (INT)Math.round(root * 0.1414141414);
  2209.                 IF ((skillLvl[1] + toAdd) > (root + toAdd)) {
  2210.                     skillLvl[1] = root + toAdd;
  2211.                 } ELSE {
  2212.                     skillLvl[1] += toAdd;
  2213.                 }
  2214.                 getActionSender().setSkillLvl(this, 1);
  2215.             break;
  2216.  
  2217.             CASE 2444:
  2218.             CASE 169:
  2219.             CASE 171:
  2220.             CASE 173:
  2221.                 root = getLevelForXP(4);
  2222.                 toAdd = 4 + (INT)Math.round(root * 0.0909090909);
  2223.                 IF ((skillLvl[4] + toAdd) > (root + toAdd)) {
  2224.                     skillLvl[4] = root + toAdd;
  2225.                 } ELSE {
  2226.                     skillLvl[4] += toAdd;
  2227.                 }
  2228.                 getActionSender().setSkillLvl(this, 4);
  2229.             break;
  2230.  
  2231.             CASE 3040:
  2232.             CASE 3042:
  2233.             CASE 3044:
  2234.             CASE 3046:
  2235.                 IF (skillLvl[6] + 4 > getLevelForXP(6) + 4) {
  2236.                     skillLvl[6] = getLevelForXP(6) + 4;
  2237.                 } ELSE {
  2238.                     skillLvl[6] += 4;
  2239.                 }
  2240.                 getActionSender().setSkillLvl(this, 6);
  2241.             break;
  2242.  
  2243.             CASE 2428:
  2244.             CASE 121:
  2245.             CASE 123:
  2246.             CASE 125:
  2247.                 root = getLevelForXP(0);
  2248.                 toAdd = 3 + (INT)Math.round(root * 0.0909090909);
  2249.                 IF ((skillLvl[0] + toAdd) > (root + toAdd)) {
  2250.                     skillLvl[0] = root + toAdd;
  2251.                 } ELSE {
  2252.                     skillLvl[0] += toAdd;
  2253.                 }
  2254.                 getActionSender().setSkillLvl(this, 0);
  2255.             break;
  2256.  
  2257.             CASE 113:
  2258.             CASE 115:
  2259.             CASE 117:
  2260.             CASE 119:
  2261.                 root = getLevelForXP(2);
  2262.                 toAdd = 3 + (INT)Math.round(root * 0.0909090909);
  2263.                 IF ((skillLvl[2] + toAdd) > (root + toAdd)) {
  2264.                     skillLvl[2] = root + toAdd;
  2265.                 } ELSE {
  2266.                     skillLvl[2] += toAdd;
  2267.                 }
  2268.                 getActionSender().setSkillLvl(this, 2);
  2269.             break;
  2270.  
  2271.             CASE 2432:
  2272.             CASE 133:
  2273.             CASE 135:
  2274.             CASE 137:
  2275.                 root = getLevelForXP(1);
  2276.                 toAdd = 3 + (INT)Math.round(root * 0.0909090909);
  2277.                 IF ((skillLvl[1] + toAdd) > (root + toAdd)) {
  2278.                     skillLvl[1] = root + toAdd;
  2279.                 } ELSE {
  2280.                     skillLvl[1] += toAdd;
  2281.                 }
  2282.                 getActionSender().setSkillLvl(this, 1);
  2283.             break;
  2284.  
  2285.             CASE 2434:
  2286.             CASE 139:
  2287.             CASE 141:
  2288.             CASE 143:
  2289.                 root = getLevelForXP(5);
  2290.                 toAdd = 7 + (INT)Math.round(root * 0.2424242424);
  2291.                 IF ((skillLvl[5] + toAdd) > root) {
  2292.                     IF (skillLvl[5] < root) {
  2293.                         skillLvl[5] = root;
  2294.                     }
  2295.                 } ELSE {
  2296.                     skillLvl[5] += toAdd;
  2297.                 }
  2298.                 getActionSender().setSkillLvl(this, 5);
  2299.             break;
  2300.  
  2301.             CASE 2430:
  2302.             CASE 127:
  2303.             CASE 129:
  2304.             CASE 131:
  2305.                 WHILE (i <= 6) {
  2306.                     IF (i == 3 || i == 5) {
  2307.                         i++;
  2308.                     }
  2309.                     root = getLevelForXP(i);
  2310.                     toAdd = 10 + (INT)Math.round(root * 0.2929292929);
  2311.                     IF ((skillLvl[i] + toAdd) > root) {
  2312.                         IF (skillLvl[i] < root) {
  2313.                             skillLvl[i] = root;
  2314.                         }
  2315.                     } ELSE {
  2316.                         skillLvl[i] += toAdd;
  2317.                     }
  2318.                     getActionSender().setSkillLvl(this, i);
  2319.                     i++;
  2320.                 }
  2321.             break;
  2322.  
  2323.             CASE 3024:
  2324.             CASE 3026:
  2325.             CASE 3028:
  2326.             CASE 3030:
  2327.                 WHILE (i <= 23) {
  2328.                     IF (i == 3) {
  2329.                         i++;
  2330.                     }
  2331.                     root = getLevelForXP(i);
  2332.                     toAdd = 8 + (INT)Math.round(root * 0.2424242424);
  2333.                     IF ((skillLvl[i] + toAdd) > root) {
  2334.                         IF (skillLvl[i] < root) {
  2335.                             skillLvl[i] = root;
  2336.                         }
  2337.                     } ELSE {
  2338.                         skillLvl[i] += toAdd;
  2339.                     }
  2340.                     getActionSender().setSkillLvl(this, i);
  2341.                     i++;
  2342.                 }
  2343.             break;
  2344.  
  2345.             CASE 6685:
  2346.             CASE 6687:
  2347.             CASE 6689:
  2348.             CASE 6691:
  2349.                 WHILE (i <= 6) {
  2350.                     IF (i == 5) {
  2351.                         i++;
  2352.                     }
  2353.                     root = getLevelForXP(i);
  2354.                     IF (i == 0 || i == 2 || i == 4 || i == 6) {
  2355.                         toAdd = -1 * (2 + (INT)Math.round(root * 0.0707070707));
  2356.                         IF ((skillLvl[i] + toAdd) < 0) {
  2357.                             skillLvl[i] = 0;
  2358.                         } ELSE {
  2359.                             skillLvl[i] += toAdd;
  2360.                         }
  2361.                     } ELSE {
  2362.                         toAdd = 2 + (INT)Math.round(root * (i == 1 ? 0.1919191919 : 0.1414141414));
  2363.                         IF (skillLvl[i] + toAdd > root + toAdd) {
  2364.                             skillLvl[i] = root + toAdd;
  2365.                         } ELSE {
  2366.                             skillLvl[i] += toAdd;
  2367.                         }
  2368.                     }
  2369.                     getActionSender().setSkillLvl(this, i);
  2370.                     i++;
  2371.                 }
  2372.             break;
  2373.  
  2374.             CASE 2450:
  2375.             CASE 189:
  2376.             CASE 191:
  2377.             CASE 193:
  2378.                 WHILE (i <= 5) {
  2379.                     IF (i == 4) {
  2380.                         i++;
  2381.                     }
  2382.                     root = getLevelForXP(i);
  2383.                     IF (i == 5) {
  2384.                         toAdd = 9;
  2385.                         IF (skillLvl[i] + toAdd > root) {
  2386.                             IF (skillLvl[i] < root) {
  2387.                                 skillLvl[i] = root;
  2388.                             }
  2389.                         } ELSE {
  2390.                             skillLvl[i] += toAdd;
  2391.                         }
  2392.                         break;
  2393.                     }
  2394.                     IF (i == 1 || i == 3) {
  2395.                         toAdd = -1 * (2 + (INT)Math.round(root * 0.0909090909));
  2396.                         IF (i == 3) {
  2397.                             append1Hit(-1 * toAdd, 0);
  2398.                         } ELSE {
  2399.                             IF ((skillLvl[i] + toAdd) < 0) {
  2400.                                 skillLvl[i] = 0;
  2401.                             } ELSE {
  2402.                                 skillLvl[i] += toAdd;
  2403.                             }
  2404.                         }
  2405.                     } ELSE {
  2406.                         toAdd = 2 + (INT)Math.round(root * (i == 0 ? 0.1919191919 : 0.1111111111));
  2407.                         IF (skillLvl[i] + toAdd > root + toAdd) {
  2408.                             skillLvl[i] = root + toAdd;
  2409.                         } ELSE {
  2410.                             skillLvl[i] += toAdd;
  2411.                         }
  2412.                     }
  2413.                     getActionSender().setSkillLvl(this, i);
  2414.                     i++;
  2415.                 }
  2416.             break;
  2417.         }
  2418.         requestAnim(829, 0);
  2419.         getActionSender().addSoundEffect(this, 2401, 1, 0, 0);
  2420.         combatDelay = 6;
  2421.         eatDelay = 3;
  2422.         drinkDelay = 3;
  2423.     }
  2424.  
  2425.     public void food(INT foodID) {
  2426.         INT healAmount = 0;
  2427.         INT toDelayCombat = 6;
  2428.         INT toDelayEat = 3;
  2429.         switch (foodID) {
  2430.             CASE 373: healAmount = 14; break;
  2431.             CASE 379: healAmount = 12; break;
  2432.             CASE 385: healAmount = 20; break;
  2433.             CASE 391: healAmount = 25; break;
  2434.                         CASE 329: healAmount = 23; break;
  2435.             CASE 3144:
  2436.                 healAmount = 18;
  2437.                 toDelayCombat = combatDelay;
  2438.                 drinkDelay = 3;
  2439.             break;
  2440.             CASE 7060: healAmount = 22; break;
  2441.             CASE 7946: healAmount = 16; break;
  2442.             CASE 10476:
  2443.                 healAmount = 1 + Misc.RANDOM(2);
  2444.                 runEnergy += runEnergy * .10;
  2445.                                 runEnergyUpdateReq = true;
  2446.                 IF (runEnergy + (runEnergy * .10) > 100) {
  2447.                 runEnergy = 100;
  2448.                 }
  2449.             break;
  2450.         }
  2451.         requestAnim(829, 0);
  2452.         getActionSender().addSoundEffect(this, 2393, 1, 0, 0);
  2453.         updateHP(healAmount, true);
  2454.         getActionSender().sendMessage(this, "You eat the "+Engine.items.getItemName(foodID)+".");
  2455.         combatDelay = toDelayCombat;
  2456.         eatDelay = toDelayEat;
  2457.     }
  2458.  
  2459.     public STRING lastKilled = "";
  2460.     public boolean receivesPVPDrop(Player p, Player opp) {
  2461.         IF (Server.socketListener.getAddress(p.socket.socket).equals(Server.socketListener.getAddress(opp.socket.socket))) {
  2462.             RETURN false;
  2463.         }
  2464.         RETURN true;
  2465.     }
  2466.  
  2467.    
  2468.   public void appendDeath() {
  2469.     IF (deathDelay == 0 && isDead) {
  2470.       Player opp = Server.engine.players[hitIndex];
  2471.  
  2472.       try {
  2473.         IF (rights < 4) {
  2474.           dropStuff(opp.username);
  2475.         }
  2476.  
  2477.                 IF (!inBounty) {
  2478.         getActionSender().sendMessage(opp, getKillMessage(username));
  2479.                 }
  2480.         IF (receivesPVPDrop(this, opp)) {
  2481.           opp.kills++;
  2482.           opp.totalKills++;
  2483.  
  2484.           DC++;
  2485.           opp.KC++;
  2486.         }
  2487.  
  2488.         IF (Server.socketListener.getAddress(socket.socket).equals(opp.lastKilled)) {
  2489.           Engine.fileManager.appendData("characters/logs/flagged.txt", opp.username);
  2490.         }
  2491.         opp.lastKilled = Server.socketListener.getAddress(socket.socket);
  2492.         Engine.fileManager.appendData("characters/logs/kills/"+opp.username+".txt", username);
  2493.       } catch (Exception e) {
  2494.       }
  2495.  
  2496.       FOR (INT i = 0; i < skillLvl.length; i++) {
  2497.         skillLvl[i] = getLevelForXP(i);
  2498.         getActionSender().setSkillLvl(this, i);
  2499.       }
  2500.       FOR (INT i = 0; i < 1000; i++) {
  2501.         requestAnim(playerWeapon.getStandEmote(equipment[3]), 0);
  2502.       }
  2503.  
  2504.       IF (opp != null) {
  2505.         opp.attacking = null;
  2506.         opp.attackedBy = null;
  2507.         opp.oppIndex = 0;
  2508.         opp.hitIndex = 0;
  2509.         opp.resetAttack();
  2510.         opp.requestFaceTo(65535);
  2511.       }
  2512.       attacking = null;
  2513.       attackedBy = null;
  2514.       oppIndex = 0;
  2515.       hitIndex = 0;
  2516.       resetAttack();
  2517.  
  2518.             IF(inBounty) {
  2519.         INT i = heightLevel;
  2520.         IF(opp != null) {
  2521.       IF (opp.playerId == bhTarget || (playerId == opp.bhTarget)) {
  2522.           opp.getActionSender().setInterfaceConfig(opp, 653, 9, false);
  2523.                 getActionSender().sendMessage(opp, "You killed "+username+". They were your target, so your Hunter PvP rating increases!");
  2524.                 leftBhTimer = 120;
  2525.                 this.InBounty = 0;
  2526.               //opp.bhTarget = Engine.BountyHunter.getTargetHigh(opp);
  2527.               Engine.BountyHunter.removeHigh(this);
  2528.               Engine.BountyHunter.EXIT(this, 3);
  2529.                 Engine.BountyHunter.EXIT(this, 2);
  2530.                 Engine.BountyHunter.EXIT(this, 1);
  2531.             }
  2532.  
  2533.                         IF(inBounty) {
  2534.         IF(opp != null) {
  2535.       IF (opp.playerId != bhTarget || (playerId != opp.bhTarget)) {
  2536.                 opp.bhLeave = 180;
  2537.           opp.getActionSender().setInterfaceConfig(opp, 653, 9, false);
  2538.                 getActionSender().sendMessage(opp, "You killed "+username+". They were not your target, so your Rougue PvP rating increases!");
  2539.                 getActionSender().sendMessage(opp, "This means that you got the pickup penalty, pick up anything and you cant leave!");
  2540.                 leftBhTimer = 120;
  2541.                 this.InBounty = 0;
  2542.                 this.bhLeave = 0;
  2543.                 this.bhPickup = 0;
  2544.                 Engine.BountyHunter.removeHigh(this);
  2545.                 Engine.BountyHunter.EXIT(this, 3);
  2546.                 Engine.BountyHunter.EXIT(this, 2);
  2547.                 Engine.BountyHunter.EXIT(this, 1);
  2548.             }
  2549.       } ELSE {
  2550.         //opp.bhTarget = Engine.BountyHunter.getTargetHigh(this);
  2551.                 }
  2552.               Player p3 = Engine.players[opp.bhTarget];
  2553.               IF(p3 != null) {
  2554.                opp.getActionSender().setString(opp, "" + p3.username , 653, 8);
  2555.               } ELSE {
  2556.             opp.getActionSender().setString(opp, "None" , 653, 8);
  2557.             }
  2558.         }
  2559.         getActionSender().removeOverlay(this);
  2560.         headIconSkull = -1;
  2561.         appearanceUpdateReq = updateReq = true;
  2562.         IF(i == 0) {
  2563.             Engine.BountyHunter.removeLow(this);
  2564.         } ELSE IF(i == 0) {
  2565.       Engine.BountyHunter.removeMid(this);
  2566.           } ELSE {
  2567.       Engine.BountyHunter.removeHigh(this);
  2568.         }
  2569.         setCoords(3172, 3675, 0);
  2570.     } ELSE {
  2571.                 Engine.BountyHunter.EXIT(this, 3);
  2572.                 Engine.BountyHunter.EXIT(this, 2);
  2573.                 Engine.BountyHunter.EXIT(this, 1);
  2574.                     setCoords(3661, 3497, 0);
  2575.     }
  2576.             }
  2577.  
  2578.       ELSE setCoords(3087, 3491, 0);
  2579.       getActionSender().sendMessage(this, "Oh dear, you are dead!");
  2580.                    
  2581.  
  2582.             deathDelay = -1;
  2583.             isDead = false;
  2584.  
  2585.             magicGraphicDelay = -1;
  2586.             magicDamageDelay = -1;
  2587.  
  2588.             initialAttack = false;
  2589.             isSkulled = false;
  2590.             headIconSkull = -1;
  2591.             skullVanishDelay = 0;
  2592.  
  2593.             isPoisoned = false;
  2594.             poisonHitCount = 0;
  2595.             poisonDelay = 0;
  2596.  
  2597.             specAmount = 1000;
  2598.             getActionSender().setConfig2(this, 300, 1000);
  2599.  
  2600.             resetPrayer();
  2601.  
  2602.             getActionSender().removeOverlay(this);
  2603.  
  2604.             appearanceUpdateReq = true;
  2605.             updateReq = true;
  2606.         }
  2607.     }
  2608.  
  2609.     public void resetAttack() {
  2610.         attackingPlayer = false;
  2611.         enemyIndex = 0;
  2612.         oppIndex = 0;
  2613.         hitOne = false;
  2614.         hitTwo = false;
  2615.         hitThree = false;
  2616.         hitFour = false;
  2617.         hit1 = 0;
  2618.         hit2 = 0;
  2619.         hit3 = 0;
  2620.         hit4 = 0;
  2621.         specDelay = -1;
  2622.         secondSpecDelay = -1;
  2623.     }
  2624.  
  2625.     /**
  2626.      * GET xp based ON your level.
  2627.      * @param skillId The skill level TO GET the level based OFF XP FOR.
  2628.      * @RETURN Returns the level based ON the amount of XP the specified skill has.
  2629.      */
  2630.     public INT getLevelForXP(INT skillId) {
  2631.         INT EXP = skillXP[skillId];
  2632.         INT points = 0;
  2633.         INT OUTPUT = 0;
  2634.         FOR (INT lvl = 1; lvl < 100; lvl++) {
  2635.             points += Math.floor((DOUBLE)lvl + 300.0 * Math.pow(2.0, (DOUBLE)lvl / 7.0));
  2636.             OUTPUT = (INT)Math.floor(points / 4);
  2637.             IF ((OUTPUT - 1) >= EXP) {
  2638.                 RETURN lvl;
  2639.             }
  2640.         }
  2641.         RETURN 99;
  2642.     }
  2643.  
  2644.     /**
  2645.      * Calculates equipment bonus.
  2646.      */
  2647.     public void calculateEquipmentBonus() {
  2648.         FOR (INT i = 0; i < equipmentBonus.length; i++) {
  2649.             equipmentBonus[i] = 0;
  2650.         }
  2651.         FOR (INT i = 0; i < equipment.length; i++) {
  2652.             IF (equipment[i] > -1) {
  2653.                 FOR (INT j = 0; j < Engine.items.maxListedItems; j++) {
  2654.                     IF (Engine.items.itemLists[j] != null) {
  2655.                         IF (Engine.items.itemLists[j].itemId == equipment[i]) {
  2656.                             FOR (INT k = 0; k < equipmentBonus.length; k++) {
  2657.                                 equipmentBonus[k] += Engine.items.itemLists[j].bonuses[k];
  2658.                             }
  2659.                             break;
  2660.                         }
  2661.                     }
  2662.                 }
  2663.             }
  2664.         }
  2665.     }
  2666.  
  2667.     /**
  2668.      * Writes the equipment bonus.
  2669.      */
  2670.     public void setEquipmentBonus() {
  2671.         STRING[] bonusNames = Misc.bonusNames;
  2672.         INT id = 35;
  2673.         FOR (INT i = 0; i < equipmentBonus.length; i++) {
  2674.             getActionSender().setString(this, bonusNames[i] + ": " + (equipmentBonus[i] >= 0 ? "+" : "") + equipmentBonus[i], 667, id++);
  2675.             IF (id == 45) {
  2676.                 id = 47;
  2677.             }
  2678.         }
  2679.         getActionSender().setString(this, "Summoning: +0", 667, 45);
  2680.     }
  2681.  
  2682.     public void openBank() {
  2683.         getActionSender().setConfig2(this, 563, 4194304);
  2684.         getActionSender().setConfig2(this, 1248, -2013265920);
  2685.         getActionSender().showInterface(this, 762);
  2686.         getActionSender().setInventory(this, 763);
  2687.         getActionSender().setBankOptions(this);
  2688.                                    getActionSender().setString(this, "Bank" , 762, 24);
  2689.         getActionSender().setItems(this, -1, 64207, 95, bankItems, bankItemsN);
  2690.         getActionSender().setItems(this, -1, 64209, 93, items, itemsN);
  2691.         isBanking = true;
  2692.     }
  2693.  
  2694.     public void updateHP(INT difference, boolean heal) {
  2695.         IF (skillLvl[3] == 0) {
  2696.             RETURN;
  2697.         }
  2698.         IF (heal) {
  2699.             skillLvl[3] += difference;
  2700.             IF (skillLvl[3] > getLevelForXP(3)) {
  2701.                 skillLvl[3] = getLevelForXP(3);
  2702.             }
  2703.         } ELSE IF (!heal) {
  2704.             skillLvl[3] -= difference;
  2705.             IF (skillLvl[3] <= 0) {
  2706.                 skillLvl[3] = 0;
  2707.                 deathEmoteDelay = 3;
  2708.                 isDead = true;
  2709.                 attacking = null;
  2710.                 attackedBy = null;
  2711.                 Engine.playerMovement.resetWalkingQueue(this);
  2712.                 requestFaceTo(65535);
  2713.             }
  2714.         }
  2715.         getActionSender().setSkillLvl(this, 3);
  2716.         IF ((skillLvl[3] <= Math.round(getLevelForXP(3) * 0.10) && skillLvl[3] > 0) && usingPrayer(23)) {
  2717.             requestGFX(436, 0);
  2718.             getActionSender().addSoundEffect(this, 2681, 1, 0, 0);
  2719.             skillLvl[3] += Math.round(getLevelForXP(5) * 0.25);
  2720.             skillLvl[5] = 0;
  2721.             getActionSender().setSkillLvl(this, 5);
  2722.         }
  2723.     }
  2724.  
  2725.     /**
  2726.      * Teleports a player.
  2727.      * @param x The x coordinate TO teleport TO.
  2728.      * @param y The y coordinate TO teleport TO.
  2729.      * @param height The height level TO teleport TO.
  2730.      * @param delay The delay before the teleport IS done.
  2731.      * @param distance The offset you can teleport TO, such AS 1 FOR a max offset of x +/- 1 AND y +/- 1.
  2732.      * @param emoteStart The emote TO DO right away.
  2733.      * @param emoteEnd The emote TO DO after teleporting.
  2734.      * @param gfxStart The graphic TO DO right away.
  2735.      * @param gfxStartH The height level TO create the start graphic at.
  2736.      * @param gfxEnd The graphic TO DO after the teleport IS done.
  2737.      * @param gfxEndH The finish graphic height.
  2738.      */
  2739.     public void teleportTo(INT x, INT y, INT height, INT delay, INT distance, INT emoteStart, INT emoteEnd, INT gfxStart,
  2740.             INT gfxStartH, INT gfxEnd, INT gfxEndH) {
  2741.     IF (teleblocked) {
  2742.         getActionSender().sendMessage(this, "You are teleport blocked!");
  2743.         RETURN;
  2744.     }
  2745.     IF (jailed == 1) {
  2746.             getActionSender().sendMessage(this, "You are jailed!");
  2747.             RETURN;
  2748.         }
  2749.     IF (getWildernessLevel() >= 20 && !lever && getWildernessLevel() <= 60 && !bountySafe()) {
  2750.        
  2751.         getActionSender().sendMessage(this, "A magical force stops you from teleporting.");
  2752.         RETURN;
  2753.     }
  2754.         itemPickup = false;
  2755.         playerOption1 = false;
  2756.         playerOption2 = false;
  2757.         playerOption3 = false;
  2758.         npcOption1 = false;
  2759.         npcOption2 = false;
  2760.         objectOption1 = false;
  2761.         objectOption2 = false;
  2762.         attackingPlayer = false;
  2763.         clickDelay = delay + 2;
  2764.         teleDelay = delay;
  2765.         IF (distance > 0) {
  2766.             INT xType = Misc.RANDOM(1);
  2767.             INT yType = Misc.RANDOM(1);
  2768.             INT xOffset = Misc.RANDOM(distance);
  2769.             INT yOffset = Misc.RANDOM(distance);
  2770.             IF (xType == 1)
  2771.                 x += -xOffset;
  2772.             ELSE
  2773.                 x += xOffset;
  2774.             IF(yType == 1)
  2775.                 y += -yOffset;
  2776.             ELSE
  2777.                 y += yOffset;
  2778.         }
  2779.         teleX = x;
  2780.         teleY = y;
  2781.     teleH = height;
  2782.         Engine.playerMovement.resetWalkingQueue(this);
  2783.         requestAnim(emoteStart, 0);
  2784.         requestGFX(gfxStart, gfxStartH);
  2785.         teleFinishGFX = gfxEnd;
  2786.         teleFinishGFXHeight = gfxEndH;
  2787.         teleFinishAnim = emoteEnd;
  2788.     }
  2789.  
  2790.     /**
  2791.      * Set the player's coordinates.
  2792.      * @param x The x coordinate TO teleport TO.
  2793.      * @param y The y coordinate TO teleport TO.
  2794.      */
  2795.     public void setCoords(INT x, INT y, INT height) {
  2796.         teleportToX = x;
  2797.         teleportToY = y;
  2798.         heightLevel = height;
  2799.         didTeleport = true;
  2800.     }
  2801.     /**
  2802.       *Pm void
  2803.       */
  2804.  public void friendsLoggedIn() {
  2805.     FOR(LONG friend : friends) {
  2806.         getActionSender().sendFriend(this, friend, 66);
  2807.     }
  2808.     LONG[] array = new LONG[ignores.size()];
  2809.     INT i = 0;
  2810.     FOR(LONG ignore : ignores) {
  2811.         IF(ignore != null)
  2812.             array[i++] = ignore;
  2813.     }
  2814.     getActionSender().sendIgnores(this, array);
  2815.     LONG me = Misc.stringToLong(username);
  2816.     FOR(Player p : Engine.players) {
  2817.         IF(p == null) continue;
  2818.         IF(p.friends.contains(me)) {
  2819.             p.getActionSender().sendFriend(p, me, 66);
  2820.         }
  2821.     }
  2822. }
  2823.  
  2824.     /**
  2825.      * Req an animation FOR this player.
  2826.      * @param animId The amination TO perform.
  2827.      * @param animD The delay before doing the animation.
  2828.      */
  2829.     public void requestAnim(INT animId, INT animD) {
  2830.         animReq = animId;
  2831.         animDelay = animD;
  2832.         animUpdateReq = true;
  2833.         updateReq = true;
  2834.     }
  2835.  
  2836.     /**
  2837.      * Req an graphic FOR this player.
  2838.      * @param gfxId The graphic TO perform.
  2839.      * @param gfxD The delay OR height OR the gfx depending ON the value.
  2840.      */
  2841.     public void requestGFX(INT gfxId, INT gfxD) {
  2842.         IF (gfxD >= 100) {
  2843.             gfxD += 6553500;
  2844.         }
  2845.         gfxReq = gfxId;
  2846.         gfxDelay = gfxD;
  2847.         gfxUpdateReq = true;
  2848.         updateReq = true;
  2849.     }
  2850.  
  2851.     /**
  2852.      * Req this player faces NPC OR player.
  2853.      * @param faceId The target TO face.
  2854.      */
  2855.     public void requestFaceTo(INT faceId) {
  2856.         faceToReq = faceId;
  2857.         faceToUpdateReq = true;
  2858.         updateReq = true;
  2859.     }
  2860.  
  2861.     INT poisonDamage;
  2862.     INT poisonIntrevals = 0;
  2863.     public INT getStartingPoisonDamage(Player p2) {
  2864.         STRING NAME = "";
  2865.         INT damage = 0;
  2866.         boolean usingRange = false;
  2867.         IF ((p2.equipment[3] >= 839 && p2.equipment[3] <= 861) || (p2.equipment[3] >= 9174 && p2.equipment[3] <= 9185) || p2.equipment[3] == 11235) { //Ranged
  2868.             NAME = Engine.items.getItemName(equipment[13]);
  2869.             usingRange = true;
  2870.         } ELSE { //Melee
  2871.             NAME = Engine.items.getItemName(p2.equipment[3]);
  2872.         }
  2873.         IF (NAME.contains("(p++)")) {
  2874.             damage = usingRange ? 4 : 6;
  2875.         }
  2876.         IF (NAME.contains("(p+)")) {
  2877.             damage = usingRange ? 3 : 5;
  2878.         }
  2879.         IF (NAME.contains("(p)")) {
  2880.             damage = usingRange ? 2 : 4;
  2881.         }
  2882.         RETURN damage;
  2883.     }
  2884.  
  2885.     public INT totalDamageRecoiled;
  2886.  
  2887.     public void appendNPCHit(INT damage, INT poison) {
  2888.             IF (damage > skillLvl[3]) {
  2889.             damage = skillLvl[3];
  2890.         }
  2891.         updateHP(damage, false);
  2892.         IF (!hit1UpdateReq) {
  2893.             hitDiff1 = damage;
  2894.             poisonHit1 = poison;
  2895.             hit1UpdateReq = true;
  2896.         } ELSE {
  2897.             hitDiff2 = damage;
  2898.             poisonHit2 = poison;
  2899.             hit2UpdateReq = true;
  2900.         }
  2901.         updateReq = true;
  2902.     }
  2903.  
  2904.     public void appendHit(INT damage, INT poison) {
  2905.         Player opp = Server.engine.players[hitIndex];
  2906.         IF (opp != null) {
  2907.             IF (opp.isDead) {
  2908.                 RETURN;
  2909.             }
  2910.                 IF (damage > skillLvl[3]) {
  2911.                 damage = skillLvl[3];
  2912.             }
  2913.             updateHP(damage, false);
  2914.             IF (autoRetaliate) {
  2915.                 enemyIndex = hitIndex;
  2916.                 attackingPlayer = true;
  2917.             }
  2918.             INT[] skill = {-1, -1, -1};
  2919.             IF (!usingMage) {
  2920.                 switch (opp.attackStyle()) {
  2921.                     CASE 1:
  2922.                         skill[0] = 0;
  2923.                         skill[1] = 0;
  2924.                         skill[2] = 0;
  2925.                     break;
  2926.                     CASE 2:
  2927.                         skill[0] = 2;
  2928.                         skill[1] = 2;
  2929.                         skill[2] = 2;
  2930.                     break;
  2931.                     CASE 3:
  2932.                         skill[0] = 1;
  2933.                         skill[1] = 1;
  2934.                         skill[2] = 1;
  2935.                     break;
  2936.                     CASE 4:
  2937.                         skill[0] = 0;
  2938.                         skill[1] = 1;
  2939.                         skill[2] = 2;
  2940.                     break;
  2941.                     CASE 5:
  2942.                     CASE 6:
  2943.                         skill[0] = 4;
  2944.                         skill[1] = 4;
  2945.                         skill[2] = 4;
  2946.                     break;
  2947.                     CASE 7:
  2948.                         opp.appendExperience((damage * 200), 4);
  2949.                         opp.appendExperience((damage * 200), 1);
  2950.                         opp.appendExperience((damage * 133), 3);
  2951.                     break;
  2952.                 }
  2953.                 FOR (INT i : skill) {
  2954.                     IF (i != -1) {
  2955.                         opp.appendExperience((damage * 133), i);
  2956.                     }
  2957.                 }
  2958.                 opp.appendExperience((damage * 133), 3);
  2959.             }
  2960.             IF (vengeance && poison == 0) { //Vengeance
  2961.                 IF (damage > 0) {
  2962.                     IF (skillLvl[3] > 0) {
  2963.                         opp.append1Hit(((INT)Math.floor(damage * 0.75)), 0);
  2964.                     } ELSE {
  2965.                         opp.append1Hit(0, 0);
  2966.                     }
  2967.                     requestForceChat("Taste vengeance!");
  2968.                     vengeance = false;
  2969.                 }
  2970.             }
  2971.             IF (equipment[12] == 2550 && poison == 0) { //Ring of recoil
  2972.                 IF (damage > 0) {
  2973.                     IF (skillLvl[3] > 0) {
  2974.                         INT recoil = 1 + ((INT)Math.floor(damage * 0.10));
  2975.                         opp.append1Hit(recoil, 0);
  2976.                         totalDamageRecoiled += recoil;
  2977.                         IF (totalDamageRecoiled >= 40) {
  2978.                             equipment[12] = -1;
  2979.                             equipmentN[12] = 0;
  2980.                             getActionSender().setItems(this, 387, 28, 93, equipment, equipmentN);
  2981.                             getActionSender().sendMessage(this, "Your ring of recoil has shattered.");
  2982.                             totalDamageRecoiled = 0;
  2983.                         }
  2984.                     } ELSE {
  2985.                         opp.append1Hit(0, 0);
  2986.                     }
  2987.                 }
  2988.             }
  2989.     IF (opp.usingPrayer(24)) { //Soul Split
  2990.      INT toHitpoints = (INT)Math.floor(damage / 5);
  2991.         INT toPrayer = (INT)Math.floor(damage / 5);
  2992.     INT casterX1 = opp.absX;
  2993.     INT casterY1 = opp.absY;
  2994.     INT offsetX1 = (opp.absX - absX) * -1;
  2995.     INT offsetY1 = (opp.absY - absY) * -1;     
  2996.     INT casterX = absX;
  2997.     INT casterY = absY;
  2998.     INT offsetX = (absX - opp.absX) * -1;
  2999.     INT offsetY = (absY - opp.absY) * -1;  
  3000.         IF (opp.skillLvl[3] + toHitpoints > opp.getLevelForXP(3))
  3001.             toHitpoints = opp.getLevelForXP(3) - opp.skillLvl[3];
  3002.             opp.getActionSender().slopedProjectile(opp, casterY1, casterX1, offsetY1, offsetX1, 50, 70, 500, 46, 31, playerId, 1);
  3003.             getActionSender().slopedProjectile(this, casterY, casterX, offsetY, offsetX, 50, 70, 500, 46, 31, opp.playerId, 1);
  3004.             requestGFX(1314, 0);
  3005.         IF (skillLvl[3] - damage <= 0) {
  3006.             IF ((INT)Math.floor(damage / 4) + opp.skillLvl[3] <= opp.getLevelForXP(3))
  3007.                 toHitpoints = (INT)Math.floor(damage / 4);
  3008.             ELSE
  3009.                 toHitpoints = opp.getLevelForXP(3) - opp.skillLvl[3];
  3010.         }          
  3011.             opp.getActionSender().slopedProjectile(opp, casterY1, casterX1, offsetY1, offsetX1, 50, 70, 500, 46, 31, playerId, 1);
  3012.             getActionSender().slopedProjectile(this, casterY, casterX, offsetY, offsetX, 50, 70, 500, 46, 31, opp.playerId, 1);
  3013.             requestAnim(436, 0);
  3014.             requestGFX(1314, 0);      
  3015.         opp.skillLvl[3] += toHitpoints;
  3016.         opp.getActionSender().setSkillLvl(this, 3);
  3017.     }
  3018.  IF (opp.equipment[5] == 13742) {//Elysian Effect
  3019.                         IF ((Misc.RANDOM(4) == 2 || Misc.RANDOM(4) == 3 || Misc.RANDOM(4) == 4 || Misc.RANDOM(4) == 0)) {
  3020.                             DOUBLE damages = damage;
  3021.                             DOUBLE damageDeduction = ((DOUBLE)damages)/((DOUBLE)4);
  3022.                             damage = damage-((INT)Math.round(damageDeduction));
  3023.                         }
  3024.                     }
  3025.                     IF (opp.equipment[5] == 13740) {//Divine Effect
  3026.                             DOUBLE damages2 = damage;
  3027.                             DOUBLE prayer = opp.skillLvl[5];
  3028.                             DOUBLE possibleDamageDeduction = ((DOUBLE)damages2)/((DOUBLE)3.33);//30% of Damage Inflicted
  3029.                             DOUBLE actualDamageDeduction;
  3030.                             IF ((prayer * 2) < possibleDamageDeduction) {
  3031.                             actualDamageDeduction = (prayer * 2);//Partial Effect(NOT enough prayer points)
  3032.                             } ELSE {
  3033.                             actualDamageDeduction = possibleDamageDeduction;//Full effect
  3034.                             }
  3035.                             DOUBLE prayerDeduction = ((DOUBLE)actualDamageDeduction)/((DOUBLE)2);//Half of the damage deducted
  3036.                             damage = damage-((INT)Math.round(actualDamageDeduction));
  3037.                             opp.skillLvl[5] = opp.skillLvl[5]-((INT)Math.round(prayerDeduction));
  3038.                             opp.getActionSender().setSkillLvl(opp, 5);
  3039.                     }
  3040.    
  3041.             IF (usingPrayer(17) && poison == 0) { //Deflect Magic (HITS)
  3042.                 IF (damage > 0) {
  3043.                     IF (skillLvl[3] > 0) {
  3044.                     INT recoil = 1 + ((INT)Math.floor(damage * 0.10));
  3045.                     opp.append1Hit(recoil, 0);
  3046.                 } ELSE {
  3047.                     opp.append1Hit(0, 0);
  3048.                 }
  3049.             }
  3050.         }
  3051.             IF (usingPrayer(18) && poison == 0) { //Deflect Range (HITS)
  3052.                 IF (damage > 0) {
  3053.                     IF (skillLvl[3] > 0) {
  3054.                     INT recoil = 1 + ((INT)Math.floor(damage * 0.10));
  3055.                     opp.append1Hit(recoil, 0);
  3056.                 } ELSE {
  3057.                     opp.append1Hit(0, 0);
  3058.                 }
  3059.             }
  3060.         }
  3061.             IF (usingPrayer(19) && poison == 0) { //Deflect Melee (HITS)
  3062.                 IF (damage > 0) {
  3063.                     IF (skillLvl[3] > 0) {
  3064.                     INT recoil = 1 + ((INT)Math.floor(damage * 0.10));
  3065.                     opp.append1Hit(recoil, 0);
  3066.                 } ELSE {
  3067.                     opp.append1Hit(0, 0);
  3068.                 }
  3069.             }
  3070.        
  3071.         }
  3072.             IF (opp.barrowsSet(3) && poison == 0) { //Guthans affect
  3073.                 IF (Math.RANDOM() <= 0.25) {
  3074.                     opp.updateHP(damage, true);
  3075.                     requestGFX(398, 0);
  3076.                 }  
  3077.             }
  3078.             IF (!hit1UpdateReq) {
  3079.                 hitDiff1 = damage;
  3080.                 poisonHit1 = poison;
  3081.                 hit1UpdateReq = true;
  3082.             } ELSE {
  3083.                 hitDiff2 = damage;
  3084.                 poisonHit2 = poison;
  3085.                 hit2UpdateReq = true;
  3086.             }
  3087.             updateReq = true;
  3088.         }
  3089.     }
  3090.  
  3091.     /**
  3092.      * APPEND damage.
  3093.      */
  3094.     public void append1Hit(INT damage, INT poison) {
  3095.         IF (damage > skillLvl[3]) {
  3096.             damage = skillLvl[3];
  3097.         }
  3098.         updateHP(damage, false);
  3099.     IF (!hit1UpdateReq) {
  3100.         hitDiff1 = damage;
  3101.         poisonHit1 = poison;
  3102.         hit1UpdateReq = true;
  3103.     } ELSE {
  3104.         hitDiff2 = damage;
  3105.         poisonHit2 = poison;
  3106.         hit2UpdateReq = true;
  3107.     }
  3108.         updateReq = true;
  3109.     }
  3110.  
  3111.     /**
  3112.      * Block anims.
  3113.      */
  3114.     public INT getBlockAnim() {
  3115.     IF (equipment[3] == 4031) {
  3116.         RETURN 221;
  3117.     }
  3118.     IF (equipment[5] == 8850) {
  3119.         RETURN 4177;
  3120.     }
  3121.     RETURN 1156;
  3122.     }
  3123.  
  3124.     /**
  3125.      * Block anims.
  3126.      */
  3127.     public INT getBlockAnim1() {
  3128.     IF (equipment[3] == 4031) {
  3129.         RETURN 221;
  3130.     }
  3131.     IF (equipment[3] == 4151) {
  3132.         RETURN 1659;
  3133.     }
  3134.     IF (equipment[3] == 4718 ||
  3135.         equipment[3] == -1) {
  3136.         RETURN 424;
  3137.     }
  3138.     IF (equipment[3] == 4755) {
  3139.         RETURN 2063;
  3140.     }
  3141.     IF (equipment[3] == 10887) {
  3142.         RETURN 5866;
  3143.     }
  3144.     IF (equipment[3] == 4153) {
  3145.         RETURN 1666;
  3146.     }
  3147.     IF (equipment[3] == 11694 ||
  3148.         equipment[3] == 11696 ||
  3149.         equipment[3] == 11698 ||
  3150.         equipment[3] == 11700 ||
  3151.         equipment[3] == 1307 ||
  3152.         equipment[3] == 1309 ||
  3153.             equipment[3] == 1311 ||
  3154.         equipment[3] == 1313 ||
  3155.         equipment[3] == 1315 ||
  3156.         equipment[3] == 1317 ||
  3157.         equipment[3] == 1319 ||
  3158.         equipment[3] == 7158 ||
  3159.         equipment[3] == 11730) {
  3160.         RETURN 7050;
  3161.     }
  3162.     IF (equipment[3] == 3204) {
  3163.         RETURN 420;
  3164.     }
  3165.     RETURN 404;
  3166.     }
  3167.  
  3168.     /**
  3169.      * Force chat text.
  3170.      */
  3171.     public void requestForceChat(STRING s) {
  3172.         forceChat = s;
  3173.         forceChatUpdateReq = true;
  3174.         updateReq = true;
  3175.     }
  3176.         public boolean quickChat;
  3177.     public void requestForceChat2(STRING s) {
  3178.         quickChat = true;
  3179.         chatTextUpdateReq = true;
  3180.         chatText = s;
  3181.         updateReq = true;
  3182.     }
  3183.  
  3184.     public INT getArmourDef() {
  3185.     switch (equipment[4]) {
  3186.  
  3187.         CASE 1127: RETURN 80;
  3188.         CASE 4712: RETURN 120;
  3189.         CASE 4757: RETURN 140;
  3190.         CASE 4720: RETURN 140;
  3191.         CASE 3140: RETURN 100;
  3192.         CASE 10551: RETURN 70;
  3193.         CASE 11720: RETURN 215;
  3194.         CASE 11724: RETURN 220;
  3195.     }
  3196.     RETURN 10;
  3197.     }
  3198.  
  3199.     public INT getRangeArmourDef() {
  3200.     switch (equipment[4]) {
  3201.  
  3202.         CASE 1135: RETURN 115;
  3203.         CASE 2499: RETURN 140;
  3204.         CASE 2501: RETURN 165;
  3205.         CASE 2503: RETURN 190;
  3206.         CASE 11720: RETURN 200;
  3207.     }
  3208.     RETURN 40;
  3209.     }
  3210.  
  3211.     public INT getRangeBonus() {
  3212.     switch (equipment[3]) {
  3213.  
  3214.         CASE 841: RETURN 65;
  3215.         CASE 843: RETURN 80;
  3216.         CASE 845: RETURN 85;
  3217.         CASE 847: RETURN 90;
  3218.         CASE 849: RETURN 95;
  3219.         CASE 851: RETURN 100;
  3220.         CASE 853: RETURN 120;
  3221.         CASE 855: RETURN 130;
  3222.         CASE 857: RETURN 150;
  3223.         CASE 859: RETURN 165;
  3224.         CASE 861: RETURN 180;
  3225.         CASE 9185: RETURN 280;
  3226.         CASE 11235: RETURN 160;
  3227.     }
  3228.     RETURN 60;
  3229.     }
  3230.  
  3231.     public boolean defile;
  3232.  
  3233.     public void checkVeracs() {
  3234.         IF (barrowsSet(6)) {
  3235.             IF (Math.RANDOM() <= 0.15) {
  3236.                 defile = true;
  3237.             }
  3238.         } ELSE {
  3239.             defile = false;
  3240.         }
  3241.     }
  3242.  
  3243.     public DOUBLE accuracy = 1;
  3244.  
  3245.     public DOUBLE meleeAccuracy(Player opp) {
  3246.         IF (opp == null || this.isDead || opp.isDead || this.disconnected[0] || opp.disconnected[0]) {
  3247.             RETURN 1;
  3248.         }
  3249.         DOUBLE attack = skillLvl[0];
  3250.         DOUBLE defence = opp.skillLvl[1];
  3251.         INT activeAttackBonus = weaponStyle(equipment[3]) - 1;
  3252.         INT activeDefenceBonus = activeAttackBonus + 5;
  3253.         DOUBLE attackBonus = equipmentBonus[activeAttackBonus];
  3254.         DOUBLE defenceBonus = opp.equipmentBonus[activeDefenceBonus];
  3255.         IF (usingPrayer(2)) {
  3256.             attack *= 1.05;
  3257.         }
  3258.         IF (usingPrayer(7)) {
  3259.             attack *= 1.10;
  3260.         }
  3261.         IF (usingPrayer(15)) {
  3262.             attack *= 1.15;
  3263.         }
  3264.         IF (usingPrayer(25)) {
  3265.             attack *= 1.15;
  3266.         }
  3267.         IF (usingPrayer(26)) {
  3268.             attack *= 1.20;
  3269.         }
  3270.         IF (attackStyle() == 4) {
  3271.             attack += 1;
  3272.         }
  3273.         IF (attackStyle() == 1) {
  3274.             attack += 3;
  3275.         }
  3276.         IF (opp.usingPrayer(0)) {
  3277.             defence *= 1.05;
  3278.         }
  3279.         IF (opp.usingPrayer(5)) {
  3280.             defence *= 1.10;
  3281.         }
  3282.         IF (opp.usingPrayer(13)) {
  3283.             defence *= 1.15;
  3284.         }
  3285.         IF (opp.usingPrayer(25)) {
  3286.             defence *= 1.20;
  3287.         }
  3288.         IF (opp.usingPrayer(26)) {
  3289.             defence *= 1.25;
  3290.         }
  3291.         IF (opp.attackStyle() == 4) {
  3292.             defence += 1;
  3293.         }
  3294.         IF (opp.attackStyle() == 3) {
  3295.             defence += 3;
  3296.         }
  3297.         IF (attackBonus < 0) {
  3298.             attackBonus = 0;
  3299.         }
  3300.         IF (defenceBonus < 0) {
  3301.             defenceBonus = 0;
  3302.         }
  3303.         IF (defile) {
  3304.             defenceBonus = 0;
  3305.         }
  3306.         DOUBLE offensiveAttribute = (attack * 1.5) + attackBonus;
  3307.         DOUBLE defensiveAttribute = (defence * 1.5) + defenceBonus;
  3308.         DOUBLE difference = Math.ABS(offensiveAttribute - defensiveAttribute);
  3309.         boolean positive = offensiveAttribute > defensiveAttribute;
  3310.         DOUBLE interval = difference * 0.0015;
  3311.         DOUBLE percentage = 0.55;
  3312.         IF (!positive) {
  3313.             percentage -= interval;
  3314.         }
  3315.         IF (positive) {
  3316.             percentage += interval;
  3317.         }
  3318.         IF (accuracy != 1) {
  3319.             percentage *= accuracy;
  3320.             accuracy = 1;
  3321.         }
  3322.         RETURN percentage;
  3323.     }
  3324.  
  3325.     public boolean hitPlayer(Player opp) {
  3326.         RETURN Math.RANDOM() <= meleeAccuracy(opp);
  3327.     }
  3328.  
  3329.     public DOUBLE rangeAccuracy(Player opp) {
  3330.         IF (opp == null || this.isDead || opp.isDead || this.disconnected[0] || opp.disconnected[0]) {
  3331.             RETURN 1;
  3332.         }
  3333.         DOUBLE range = skillLvl[4];
  3334.         DOUBLE defence = opp.skillLvl[1];
  3335.         DOUBLE rangeBonus = equipmentBonus[4];
  3336.         DOUBLE defenceBonus = opp.equipmentBonus[9];
  3337.         IF (usingPrayer(3)) {
  3338.             range *= 1.05;
  3339.         }
  3340.         IF (usingPrayer(11)) {
  3341.             range *= 1.10;
  3342.         }
  3343.         IF (usingPrayer(20)) {
  3344.             range *= 1.15;
  3345.         }
  3346.         IF (attackStyle() == 5) {
  3347.             range += 1;
  3348.         }
  3349.         IF (opp.usingPrayer(0)) {
  3350.             defence *= 1.05;
  3351.         }
  3352.         IF (opp.usingPrayer(5)) {
  3353.             defence *= 1.10;
  3354.         }
  3355.         IF (opp.usingPrayer(13)) {
  3356.             defence *= 1.15;
  3357.         }
  3358.         IF (opp.usingPrayer(25)) {
  3359.             defence *= 1.20;
  3360.         }
  3361.         IF (opp.usingPrayer(26)) {
  3362.             defence *= 1.25;
  3363.         }
  3364.         IF (opp.attackStyle() == 4) {
  3365.             defence += 1;
  3366.         }
  3367.         IF (opp.attackStyle() == 3) {
  3368.             defence += 3;
  3369.         }
  3370.         IF (rangeBonus < 0) {
  3371.             rangeBonus = 0;
  3372.         }
  3373.         IF (defenceBonus < 0) {
  3374.             defenceBonus = 0;
  3375.         }
  3376.         DOUBLE offensiveAttribute = range + rangeBonus;
  3377.         DOUBLE defensiveAttribute = defence + defenceBonus;
  3378.         DOUBLE difference = Math.ABS(offensiveAttribute - defensiveAttribute);
  3379.         boolean positive = offensiveAttribute > defensiveAttribute;
  3380.         DOUBLE interval = difference * 0.00175;
  3381.         DOUBLE percentage = 0.50;
  3382.         IF (!positive) {
  3383.             percentage -= interval;
  3384.         }
  3385.         IF (positive) {
  3386.             percentage += interval;
  3387.         }
  3388.         IF (accuracy != 1) {
  3389.             percentage *= accuracy;
  3390.             accuracy = 1;
  3391.         }
  3392.         RETURN percentage;
  3393.     }
  3394.  
  3395.     public boolean hitPlayerRange(Player opp) {
  3396.         RETURN Math.RANDOM() <= rangeAccuracy(opp);
  3397.     }
  3398.  
  3399.     public boolean barrowsSet(INT setID) {
  3400.         STRING helmet = Engine.items.getItemName(equipment[0]);
  3401.         STRING platebody = Engine.items.getItemName(equipment[4]);
  3402.         STRING weapon = Engine.items.getItemName(equipment[3]);
  3403.         STRING platelegs = Engine.items.getItemName(equipment[7]);
  3404.         STRING set = "";
  3405.         switch (setID) {
  3406.             CASE 1: //Ahrim's
  3407.                 set = "Ahrim";
  3408.             break;
  3409.             CASE 2: //Dharok's
  3410.                 set = "Dharok";
  3411.             break;
  3412.             CASE 3: //Guthan's
  3413.                 set = "Guthan";
  3414.             break;
  3415.             CASE 4: //Karil's
  3416.                 set = "Karil";
  3417.             break;
  3418.             CASE 5: //Torag's
  3419.                 set = "Torag";
  3420.             break;
  3421.             CASE 6: //Verac's
  3422.                 set = "Verac";
  3423.             break;
  3424.         }
  3425.         boolean hasHelmet = helmet.contains(set);
  3426.         boolean hasPlatebody = platebody.contains(set);
  3427.         boolean hasWeapon = weapon.contains(set);
  3428.         boolean hasPlatelegs = platelegs.contains(set);
  3429.         IF (hasHelmet && hasPlatebody && hasWeapon && hasPlatelegs) {
  3430.             RETURN true;
  3431.         }
  3432.         RETURN false;
  3433.     }
  3434.     public boolean voidSet(INT setID) {
  3435.         STRING helmet = Engine.items.getItemName(equipment[0]);
  3436.         STRING set = "";
  3437.         switch (setID) {
  3438.             CASE 1: //Melee
  3439.                 set = "Void melee";
  3440.             break;
  3441.             CASE 2: //Range
  3442.                 set = "Void ranger";
  3443.             break;
  3444.             CASE 3: //Mage
  3445.                 set = "Void mage";
  3446.             break;
  3447.         }
  3448.         boolean hasHelmet = helmet.contains(set);
  3449.         boolean hasTop = equipment[4] == 8839;
  3450.         boolean hasGloves = equipment[9] == 8842;
  3451.         boolean hasBottom = equipment[7] == 8840;
  3452.         IF (hasHelmet && hasTop && hasGloves && hasBottom) {
  3453.             RETURN true;
  3454.         }
  3455.         RETURN false;
  3456.     }
  3457.  
  3458.     public boolean hasProperArrows(INT bow, INT arrows) {
  3459.         IF (usingSpecial) {
  3460.             IF (weapon == 861 || weapon == 11235) {
  3461.                 IF (equipmentN[13] <= 1) {
  3462.                     getActionSender().sendMessage(this, "You don't have enough ammo!");
  3463.                     RETURN false;
  3464.                 }
  3465.             }
  3466.         }
  3467.         IF (bow >= 839 && bow <= 861) {
  3468.             switch (arrows) {
  3469.                 CASE 882:
  3470.                 CASE 884:
  3471.                 CASE 886:
  3472.                 CASE 888:
  3473.                 CASE 890:
  3474.                 CASE 892: RETURN true;
  3475.             }
  3476.         }
  3477.         IF (bow == 6724) {
  3478.             switch (arrows) {
  3479.                 CASE 882:
  3480.                 CASE 884:
  3481.                 CASE 886:
  3482.                 CASE 888:
  3483.                 CASE 890:
  3484.                 CASE 892: RETURN true;
  3485.             }
  3486.         }
  3487.         IF (bow == 11235) {
  3488.             switch (arrows) {
  3489.                 CASE 882:
  3490.                 CASE 884:
  3491.                 CASE 886:
  3492.                 CASE 888:
  3493.                 CASE 890:
  3494.                 CASE 892:
  3495.                 CASE 11212:
  3496.                     IF (equipmentN[13] > 1) {
  3497.                         RETURN true;
  3498.                     } ELSE {
  3499.                         getActionSender().sendMessage(this, "You don't have enough ammo!");
  3500.                         RETURN false;
  3501.                     }
  3502.             }
  3503.         }
  3504.         IF (bow == 4214 || bow == 868 || bow == 11230 || bow == 13879 || bow == 13883) {
  3505.             RETURN true;
  3506.         }
  3507.         IF (bow == 9185) {
  3508.             switch (arrows) {
  3509.                 CASE 9243:
  3510.                 CASE 9245:
  3511.                 CASE 9244: RETURN true;
  3512.             }
  3513.         }
  3514.         IF (bow == 4734) {
  3515.             IF (arrows == 4740) RETURN true;
  3516.         }
  3517.         RETURN false;
  3518.     }
  3519.  
  3520.     public boolean hitNpcRange() {
  3521.     PlayerCombat playCb = new PlayerCombat(this);
  3522.     IF (getRandom(equipmentBonus[8] + getRangeBonus()) > getRandom(playCb.getNpcDefenceRange())) {
  3523.         RETURN true;
  3524.     }
  3525.     RETURN false;
  3526.     }
  3527.  
  3528.     private INT getRandom(INT range) {
  3529.         RETURN (INT)(Math.RANDOM() * (range + 1));
  3530.     }
  3531.  
  3532.     /**
  3533.      * Gives experience TO a player.
  3534.      * @param amount The amount which will gives TO the player
  3535.      * @param skillId the skill Id of the player which the EXP will go TO.
  3536.      */
  3537.     public void appendExperience(INT amount, INT skillId) {
  3538.     IF (!getExperience) {
  3539.         RETURN;
  3540.     }
  3541.     INT oldLvl = getLevelForXP(skillId);
  3542.     IF (skillXP[skillId] > 200000000) {
  3543.         RETURN;
  3544.     }
  3545.     skillXP[skillId] += amount;
  3546.     INT newLvl = getLevelForXP(skillId);
  3547.     IF (oldLvl < newLvl) {
  3548.         skillLvl[skillId] += (newLvl - oldLvl);
  3549.         switch (skillId) {
  3550.  
  3551.             CASE 0:
  3552.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Attack level!");
  3553.             break;
  3554.  
  3555.             CASE 1:
  3556.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Defence level!");
  3557.             break;
  3558.  
  3559.             CASE 2:
  3560.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Strength level!");
  3561.             break;
  3562.  
  3563.             CASE 3:
  3564.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new hitpoints level!");
  3565.             break;
  3566.  
  3567.             CASE 4:
  3568.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Ranged level!");
  3569.             break;
  3570.  
  3571.             CASE 5:
  3572.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Prayer level!");
  3573.             break;
  3574.  
  3575.             CASE 6:
  3576.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Magic level!");
  3577.             break;
  3578.  
  3579.             CASE 7:
  3580.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Cooking level!");
  3581.             break;
  3582.  
  3583.             CASE 8:
  3584.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Woodcutting level!");
  3585.             break;
  3586.  
  3587.             CASE 16:
  3588.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Agility level!");
  3589.             break;
  3590.  
  3591.             CASE 17:
  3592.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Thieving level!");
  3593.             break;
  3594.  
  3595.             CASE 18:
  3596.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Slayer level!");
  3597.             break;
  3598.  
  3599.             CASE 19:
  3600.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Farming level!");
  3601.             break;
  3602.  
  3603.             CASE 20:
  3604.                 getActionSender().sendMessage(this, "Congratiolations, You have just advanced a new Runecrafting level!");
  3605.             break;
  3606.  
  3607.             default:
  3608.                 getActionSender().sendMessage(this, "This level is unknown, Please report this to an administrator.");
  3609.             break;
  3610.         }
  3611.         requestGFX(1635, 0);
  3612.         appearanceUpdateReq = true;
  3613.         updateReq = true;
  3614.     }
  3615.     getActionSender().setSkillLvl(this, skillId);
  3616.     }
  3617.  
  3618.     /**
  3619.      * Checks special amount AND gets config.
  3620.      */
  3621.      public void checkAmount() {
  3622.     INT amount = specAmount;
  3623.     getActionSender().setConfig2(this, 300, amount);
  3624.     }
  3625.  
  3626.     /**
  3627.      * Walking request.
  3628.      */
  3629.     public void playerWalk(INT x, INT y, INT emote, INT delay) {
  3630.         INT firstX = x - (mapRegionX - 6) * 8;
  3631.         INT firstY = y - (mapRegionY - 6) * 8;
  3632.         Engine.playerMovement.resetWalkingQueue(this);
  3633.         Engine.playerMovement.addToWalkingQueue(this, firstX, firstY);
  3634.         appearanceUpdateReq = true;
  3635.         updateReq = true;
  3636.     }
  3637.     public void WalkingTo(INT i, INT j)
  3638.     {
  3639.         INT k = i - (mapRegionX - 6) * 8;
  3640.         INT l = j - (mapRegionY - 6) * 8;
  3641.         Engine.playerMovement.resetWalkingQueue(this);
  3642.         Engine.playerMovement.addToWalkingQueue(this, k, l);
  3643.         appearanceUpdateReq = true;
  3644.         updateReq = true;
  3645.     }
  3646.     public boolean inWilderness() {
  3647.     RETURN absX >= 3136 && absX <= 3350 && absY >= 3523 && absY <= 3597;
  3648.     }
  3649.  
  3650.     /**
  3651.      * Cross wilderness ditch
  3652.      */
  3653.     public void crossDitch() {
  3654.     INT y = 3520;
  3655.     IF (!wildernessZone(absX, absY)) {
  3656.         y = 3523;
  3657.     }
  3658.     playerWalk(absX, y, 6132, 0);
  3659.         appearanceUpdateReq = true;
  3660.         updateReq = true;
  3661.     }
  3662.  
  3663.  
  3664.     /**
  3665.      * Boolean which returns coords ids TO GET safezone of bounty hunter place.
  3666.      */
  3667.     public boolean pkArenaPart1() {
  3668.     RETURN absX >= 3067 && absX <= 3134 && absY >= 3650 && absY <= 3698;
  3669.     }
  3670.  
  3671.     public boolean pkArenaPart2() {
  3672.     RETURN absX >= 3135 && absX <= 3144 && absY >= 3672 && absY <= 3714;
  3673.     }
  3674.  
  3675.     public boolean inPkArena() {
  3676.     RETURN pkArenaPart1() && pkArenaPart2();
  3677.     }
  3678.  
  3679.     void updateStats() {
  3680.         IF (isDead) {
  3681.             RETURN;
  3682.         }
  3683.         INT skill = 0;
  3684.         WHILE (skill <= 22) {
  3685.             IF (skill == 3 || skill == 5) {
  3686.                 skill++;
  3687.             }
  3688.             IF (skillLvl[skill] > getLevelForXP(skill)) {
  3689.                 skillLvl[skill]--;
  3690.             }
  3691.             IF (skillLvl[skill] < getLevelForXP(skill)) {
  3692.                 skillLvl[skill]++;
  3693.             }
  3694.             statDelay = 100;
  3695.             getActionSender().setSkillLvl(this, skill);
  3696.             skill++;
  3697.         }
  3698.     }
  3699.     void restoreHP() {
  3700.         IF (isDead) {
  3701.             RETURN;
  3702.         }
  3703.         IF (skillLvl[3] > getLevelForXP(3)) {
  3704.             skillLvl[3]--;
  3705.         }
  3706.         IF (skillLvl[3] < getLevelForXP(3)) {
  3707.             skillLvl[3] += equipment[9] == 11133 ? 2 : 1;
  3708.         }
  3709.         hpDelay = 100;
  3710.         getActionSender().setSkillLvl(this, 3);
  3711.     }
  3712.  
  3713.     /**
  3714.      * Unequip AND delete all items player has.
  3715.      */
  3716.     public void dropAllStuff() {
  3717.     IF (this == null)
  3718.         RETURN;
  3719.     PlayerItems pi = new PlayerItems();
  3720.         FOR(INT i = 0; i < items.length; i++)
  3721.         {
  3722.         IF(items[i] == 6570)
  3723.         break;
  3724.             IF(items[i] >= 0)
  3725.             {
  3726.                 IF(Engine.items.isUntradable((items[i])))
  3727.                 {
  3728.                     Engine.playerItems.deleteItem(this, items[i], pi.getItemSlot(this, items[i]), itemsN[i]);
  3729.                 }
  3730.                 ELSE
  3731.                 {
  3732.                     Engine.playerItems.deleteItem(this, items[i], pi.getItemSlot(this, items[i]), itemsN[i]);
  3733.                 }
  3734.             }
  3735.         }
  3736.         FOR(INT i = 0; i < equipment.length; i++)
  3737.         {
  3738.         IF(equipment[i] == 6570)
  3739.         break;
  3740.             IF(equipment[i] >= 0)
  3741.             {
  3742.         getActionSender().removeEquipment(this, equipment[i], i);
  3743.                 IF(Engine.items.isUntradable((items[0])))
  3744.                 {
  3745.                     Engine.playerItems.deleteItem(this, items[0], pi.getItemSlot(this, items[0]), itemsN[0]);
  3746.  
  3747.                 }
  3748.                 ELSE
  3749.                 {
  3750.                     Engine.playerItems.deleteItem(this, items[0], pi.getItemSlot(this, items[0]), itemsN[0]);
  3751.                 }
  3752.             }
  3753.         }
  3754.     combatType = 0;
  3755.     }
  3756.  
  3757.     public boolean arrayContains(INT[] array, INT value) {
  3758.         FOR (INT i : array) {
  3759.             IF (value == i) {
  3760.                 RETURN true;
  3761.             }
  3762.         }
  3763.         RETURN false;
  3764.     }
  3765.  
  3766.     public INT[] removeValueFromArray(INT[] array, INT value) {
  3767.         INT index = -1;
  3768.         FOR (INT i = 0; i < array.length; i++) {
  3769.             IF (value == array[i]) {
  3770.                 index = i;
  3771.             }
  3772.         }
  3773.         IF (index != -1) {
  3774.             array[index] = 0;
  3775.         }
  3776.         RETURN array;
  3777.     }
  3778.  
  3779.     public INT[][] removeValueFromArray(INT[][] array, INT value) {
  3780.         INT indexI = -1;
  3781.         INT indexJ = -1;
  3782.         FOR (INT i = 0; i < array.length; i++) {
  3783.             FOR (INT j = 0; j < array[i].length; j++) {
  3784.                 IF (value == array[i][j]) {
  3785.                     indexI = i;
  3786.                     indexJ = j;
  3787.                 }
  3788.             }
  3789.         }
  3790.         IF (indexI != -1 && indexJ != -1) {
  3791.             array[indexI][indexJ] = -1;
  3792.         }
  3793.         RETURN array;
  3794.     }
  3795.  
  3796.     void dropStuff(STRING opp) {
  3797.         try {
  3798.             INT amountOfKeptItems = isSkulled ? (usingPrayer(10) ? 1 : 0) : (usingPrayer(10) ? 4 : 3);
  3799.             INT[] allItems = new INT[items.length + equipment.length];
  3800.             INT[] allItemsN = new INT[itemsN.length + equipmentN.length];
  3801.             INT[] keptItems = new INT[amountOfKeptItems];
  3802.             INT[] toAdd = new INT[keptItems.length];
  3803.             SYSTEM.arraycopy(items, 0, allItems, 0, items.length);
  3804.             SYSTEM.arraycopy(equipment, 0, allItems, items.length, equipment.length);
  3805.             SYSTEM.arraycopy(itemsN, 0, allItemsN, 0, itemsN.length);
  3806.             SYSTEM.arraycopy(equipmentN, 0, allItemsN, itemsN.length, equipmentN.length);
  3807.             FOR (INT i = 0; i < keptItems.length; i++) {
  3808.                 INT index = 0;
  3809.                 INT standing = 0;
  3810.                 FOR (INT j = 0; j < allItems.length; j++) {
  3811.                     IF (allItems[j] < 1) {
  3812.                         continue;
  3813.                     }
  3814.                     INT price = Engine.items.itemLists[allItems[j]].shopValue;
  3815.                     IF (price > standing) {
  3816.                         index = j;
  3817.                         standing = price;
  3818.                     }
  3819.                 }
  3820.                 keptItems[i] = allItems[index];
  3821.                 toAdd[i] = allItems[index];
  3822.                 allItemsN[index]--;
  3823.                 IF (allItemsN[index] == 0) {
  3824.                     allItems[index] = 0;
  3825.                 }
  3826.             }
  3827.             FOR(INT i = 0; i < items.length; i++) {
  3828.                 IF(items[i] > 0) {
  3829.                     IF (!arrayContains(keptItems, items[i])) {
  3830.                         IF (Engine.items.isUntradable((items[i]))) {
  3831.                             IF (items[i] != 13290) {
  3832.                                 Engine.items.createGroundItem(items[i], itemsN[i], absX, absY, heightLevel, username);
  3833.                             } ELSE {
  3834.                                 getActionSender().sendMessage(this, "Your Vesta's longsword shatters as it hits the ground.");
  3835.                                 degrade = 6000;
  3836.                                 degrades = false;
  3837.                             }
  3838.                             Engine.playerItems.deleteItem(this, items[i], Engine.playerItems.getItemSlot(this, items[i]), itemsN[i]);
  3839.                         } ELSE {
  3840.                             IF (!isPVP()) {
  3841.                                 Engine.items.createGroundItem(items[i], itemsN[i], absX, absY, heightLevel, opp);
  3842.                             }
  3843.                         }
  3844.                     } ELSE {
  3845.                         keptItems = removeValueFromArray(keptItems, items[i]);
  3846.                     }
  3847.                     Engine.playerItems.deleteItem(this, items[i], Engine.playerItems.getItemSlot(this, items[i]), itemsN[i]);
  3848.                 }
  3849.             }
  3850.             FOR(INT i = 0; i < equipment.length; i++) {
  3851.                 IF (equipment[i] > 0) {
  3852.                     getActionSender().removeEquipment(this, equipment[i], i);
  3853.                     IF (!arrayContains(keptItems, items[0])) {
  3854.                         IF(Engine.items.isUntradable((items[0]))) {
  3855.                             IF (items[0] != 13290) {
  3856.                                 Engine.items.createGroundItem(items[0], itemsN[0], absX, absY, heightLevel, username);
  3857.                             } ELSE {
  3858.                                 getActionSender().sendMessage(this, "Your Vesta's longsword shatters as it hits the ground.");
  3859.                                 degrade = 6000;
  3860.                                 degrades = false;
  3861.                             }
  3862.                             Engine.playerItems.deleteItem(this, items[0], Engine.playerItems.getItemSlot(this, items[0]), itemsN[0]);
  3863.                         } ELSE {
  3864.                             IF (!isPVP()) {
  3865.                                 Engine.items.createGroundItem(items[0], itemsN[0], absX, absY, heightLevel, opp);
  3866.                             }
  3867.                         }
  3868.                     } ELSE {
  3869.                         keptItems = removeValueFromArray(keptItems, items[0]);
  3870.                     }
  3871.                     Engine.playerItems.deleteItem(this, items[0], Engine.playerItems.getItemSlot(this, items[0]), itemsN[0]);
  3872.                 }
  3873.             }
  3874.             FOR (INT i : toAdd) {
  3875.                 IF (i > 0) {
  3876.                     Engine.playerItems.addItem(this, i, 1);
  3877.                 }
  3878.             }
  3879.             Engine.items.createGroundItem(526, 1, absX, absY, heightLevel, opp);
  3880.             INT[] lostItems = allItems;
  3881.             IF (isPVP() && receivesPVPDrop(this, Server.engine.players[Server.engine.getIdFromName(opp)])) {
  3882.                 PVPDrop(opp, lostItems);
  3883.             }
  3884.         } catch (Exception e) {
  3885.             e.printStackTrace();
  3886.             SYSTEM.OUT.println("Null drop: "+opp);
  3887.             RETURN;
  3888.         }
  3889.     }
  3890.  
  3891.     public INT totalValue(INT[] items) {
  3892.         INT totalValue = 0;
  3893.         try {
  3894.             INT[] allItems = new INT[items.length + equipment.length];
  3895.             SYSTEM.arraycopy(items, 0, allItems, 0, items.length);
  3896.             SYSTEM.arraycopy(equipment, 0, allItems, items.length, equipment.length);
  3897.  
  3898.             FOR (INT i : allItems) {
  3899.                 totalValue += getItemValue(i);
  3900.             }
  3901.         } catch (Exception e) {
  3902.             e.printStackTrace();
  3903.             RETURN 0;
  3904.         }
  3905.         RETURN totalValue;
  3906.     }
  3907.    
  3908.  
  3909.     void PVPDrop(STRING player, INT[] lostItems) {
  3910.         Player dropFor = Server.engine.players[Server.engine.getIdFromName(player)];
  3911.         try {
  3912.             IF (dropFor.setDrop != 0) {
  3913.                 Engine.items.createGroundItem(dropFor.setDrop, 1, absX, absY, heightLevel, player);
  3914.                 dropFor.setDrop = 0;
  3915.             }
  3916.             IF (DOUBLE.isInfinite(dropFor.PVPPotential) || DOUBLE.isNaN(dropFor.PVPPotential)) {
  3917.                 dropFor.PVPPotential = 0.0;
  3918.             }
  3919.             DOUBLE chance = 0.00;
  3920.             INT randomDrops = 0;
  3921.             FOR (INT i : lostItems) {
  3922.                 IF (Math.RANDOM() <= 0.75) {
  3923.                     lostItems = removeValueFromArray(lostItems, i);
  3924.                 } ELSE {
  3925.                     IF (getItemValue(i) >= 3000) {
  3926.                         randomDrops++;
  3927.                     } ELSE IF (Math.RANDOM() <= 0.25) {
  3928.                         randomDrops++;
  3929.                     }
  3930.                 }
  3931.  
  3932.             }
  3933.             FOR (INT i : lostItems) {
  3934.                 IF (i == 0 || Engine.items.isUntradable(i)) {
  3935.                     continue;
  3936.                 }
  3937.                 Engine.items.createGroundItem(i, 1, absX, absY, heightLevel, player);
  3938.             }
  3939.             INT[] potentialDrops = {1145,1147,2605,2613,2619,2627,2657,2673,3385,3486,3749,3751,3753,3755,4716,4724,4745,4753,5574,6128,6131,6137,10350,10589,10606,10828,11200,11335,1073,1079,1091,1093,1123,1127,2599,2601,2607,2609,2615,2617,2623,2625,2653,2655,2661,2669,2671,3474,3476,3480,3481,3483,3485,3670,3476,3674,3676,4087,4585,4720,4722,4728,4749,4751,4759,5575,5576,6129,6617,10346,10348,11720,11722,11724,1199,1201,2603,2611,2621,2629,2659,2667,2675,3488,10352,11726,11728,11730,11720,11718,11694,11696,11698,11700,11283,1187,1215,1231,1249,1263,1305,1377,1434,3101,3140,3204,4087,3587,5680,5698,6739,7158,9244,11212,11217,11227,11228,11229,11230,11231,11233,11234,11732,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,6916,6918,6920,6922,6924,4708,4710,4712,4714,4755,4757,4726,4730,4747,4732,4734,4735,4738,4740,4718,2491,2497,2503,10370,10386,6764,10368,10372,10374,10444,10450,10456,10460,10468,10474,10786,2663,3479,4151,6762,10384,10386,10388,10390,10440,10446,10452,10458,10464,10470,10784,6760,10376,10378,10380,10382,10442,10448,1454,10462,10466,10472,9672,9674,9676,9678,3122,4153,6809,10564,10330,10332,10334,10336,10338,10340,10342,10344,6731,6733,6735,6737,9185,1704,1706,1708,1710,1712,1725,1727,1729,1731,6585,10354,10356,10358,10360,10362,10364,10366,10719,10736,10738,6889,4129,4131,2579,6914,6912,139,141,143,169,171,173,175,177,179,2430,2442,2444,3040,3042,3044,3046,145,147,149,157,159,161,163,165,167,181,183,185,2436,2440,2448,3024,3026,3028,3030,6568,6524,6526,6523,6525,6522,6527,6528,11126,11124,11122,11120,11118,11133,13290}; //PVP Drops
  3940.             FOR (INT i = 0; i < randomDrops; i++) {
  3941.                 INT item = potentialDrops[(INT)Math.floor(Math.RANDOM() * potentialDrops.length)];
  3942.                 chance = getPVPDropPercentage(item, totalValue(lostItems), dropFor.PVPPotential);
  3943.                 IF (Math.RANDOM() <= chance) {
  3944.                     Engine.items.createGroundItem(item, 1, absX, absY, heightLevel, player);
  3945.                     dropFor.PVPPotential -= ((1.00 - chance) / 10);
  3946.                 } ELSE {
  3947.                     dropFor.PVPPotential += ((1.00 - chance) / 10);
  3948.                 }
  3949.             }
  3950.         } catch (Exception e) {
  3951.         }
  3952.     }
  3953.  
  3954.     DOUBLE getPVPDropPercentage(INT item, INT risk, DOUBLE potential) {
  3955.         DOUBLE BASE = 0.10 + potential * (hotZone(absX, absY) ? 3.00 : 1.50);
  3956.         DOUBLE ratio = getItemValue(item) / 1457000;
  3957.         DOUBLE value = BASE / ratio;
  3958.         IF (value > 0.95) {
  3959.             value = 0.95;
  3960.         }
  3961.         RETURN value;
  3962.     }
  3963.  
  3964.     void drainPrayer() {
  3965.     IF (usingPrayer) {
  3966.         IF (drainDelay == 0) {
  3967.             IF (skillLvl[5] <= 1) {
  3968.                 resetPrayer();
  3969.                 skillLvl[5]--;
  3970.                 getActionSender().setSkillLvl(this, 5);
  3971.                 appearanceUpdateReq = true;
  3972.                 updateReq = true;
  3973.                 getActionSender().sendMessage(this, "You are out of prayer points. Please restore them at an prayer altar.");
  3974.                 RETURN;
  3975.             }
  3976.             skillLvl[5]--;
  3977.             getActionSender().setSkillLvl(this, 5);
  3978.         }
  3979.         drainDelay = 8;
  3980.         appearanceUpdateReq = true;
  3981.         updateReq = true;
  3982.     }
  3983.     }
  3984. public void appendWilderness() {
  3985.   wildyLevel = getWildernessLevel();
  3986.   IF (savedLevel != wildyLevel) {
  3987.     savedLevel = wildyLevel;
  3988.     IF (wildyLevel > 0 && !bountySafe()) {
  3989.       addWilderness();
  3990.     } ELSE {
  3991.       removeWilderness();
  3992.     }
  3993.   }
  3994.     }
  3995.     public void removeWilderness() {
  3996.     getActionSender().setPlayerOption(this, "Null", 1, true);
  3997.     getActionSender().removeOverlay(this);
  3998.     getActionSender().setInterfaceConfig(this, 745, 6, true);
  3999.     getActionSender().setInterfaceConfig(this, 745, 3, false);
  4000.     }
  4001.     public void addWilderness() {
  4002.   getActionSender().setPlayerOption(this, "Attack", 1, true);
  4003.     IF (InBounty == 0) {
  4004.   IF (!isPVP()) {
  4005.     getActionSender().setOverlay(this, 381);
  4006.   } ELSE {
  4007.     getActionSender().setInterfaceConfig(this, 745, 6, false);
  4008.     getActionSender().setInterfaceConfig(this, 745, 3, true);
  4009.     getActionSender().setOverlay(this, 24);
  4010.     INT max = combatLevel + wildyLevel;
  4011.     IF (max > 126) {
  4012.       max = 126;
  4013.     }
  4014.     INT min = (combatLevel - wildyLevel) + (((combatLevel % 10 >= 5) && ((combatLevel - wildyLevel) % 10 < 5) || (combatLevel >= 114)) ? 2 : 1);
  4015.     IF (min < 3) {
  4016.       min = 3;
  4017.     }
  4018.     STRING range = min+" - "+max ;
  4019.     getActionSender().setString(this, range, 24, 0);
  4020.   }
  4021.     }
  4022.     }
  4023.     public INT wildernessLevels(INT coordY) {
  4024.         wildyLevel = (coordY - 3254 / 7);
  4025.         IF (wildyLevel < 1)
  4026.         wildyLevel = 1;
  4027.         RETURN wildyLevel;
  4028.     }
  4029.  
  4030.     public boolean inEdge() {
  4031.     RETURN absX >= 3040 && absX <= 3125 && absY >= 3523 && absY <= 3551;
  4032.     }
  4033.  
  4034.  
  4035.     /**
  4036.      * Dharok's equipment check.
  4037.      */
  4038.     public boolean fullDharok() {
  4039.     RETURN equipment[3] == 4718 && equipment[4] == 4720 && equipment[7] == 4722 && equipment[0] == 4716;
  4040.     }
  4041.  
  4042.     /**
  4043.      * Verac's equipment check.
  4044.      */
  4045.     public boolean fullVerac() {
  4046.     RETURN equipment[3] == 4755 && equipment[4] == 4757 && equipment[7] == 4759 && equipment[0] == 4753;
  4047.     }
  4048.  
  4049.    /**
  4050.     * Guthan equipment chck
  4051.     */
  4052.    public boolean hasGuthanEquipment() {
  4053.     RETURN equipment[3] == 4726 && equipment[4] == 4728 && equipment[7] == 4730 && equipment[0] == 4724;
  4054.    }
  4055.  
  4056.     /**
  4057.      * Safezone.
  4058.      */
  4059.     public boolean inClan() {
  4060.     RETURN absX >= 3264 && absY >= 3672 && absX <= 3279 && absY <= 3695;
  4061.     }
  4062.  
  4063.     /**
  4064.      * clan wars arena
  4065.      */
  4066.     public boolean inClanFight() {
  4067.     RETURN absX >= 3258 && absY >= 3710 && absX <= 3330 && absY <= 3842;
  4068.     }
  4069.  
  4070.     public void addClanWarsScreen() {
  4071.     getActionSender().setString(this, ""+Server.engine.getWhiteClanPlayerCount(whiteCount)+"", 265, 6);
  4072.     getActionSender().setString(this, ""+Server.engine.getBlackClanPlayerCount(blackCount)+"", 265, 7);
  4073.     getActionSender().setOverlay(this, 265);
  4074.     }
  4075.  
  4076.     public INT distanceToPoint(INT pointX, INT pointY) {
  4077.     RETURN (INT) Math.sqrt(Math.pow(absX - pointX, 2) + Math.pow(absY - pointY, 2));
  4078.     }
  4079.  
  4080.     public boolean fullVoidKnightRange() {
  4081.     RETURN equipment[0] == 11675 && equipment[4] == 8839 && equipment[7] == 8840;
  4082.     }
  4083.  
  4084.     public boolean fullArmadyl() {
  4085.     RETURN equipment[0] == 11718 && equipment[4] == 11720 && equipment[7] == 11722;
  4086.     }
  4087.  
  4088.     public boolean saraChamber() {
  4089.     RETURN absX >= 2889 && absX <= 2907 && absY >= 5258 && absY <= 5276;
  4090.     }
  4091.  
  4092.     public boolean zammyChamber() {
  4093.     RETURN absX >= 2919 && absX <= 2935 && absY >= 5319 && absY <= 5330;
  4094.     }
  4095.  
  4096.     public boolean graardorChamber() {
  4097.     RETURN absX >= 2864 && absX <= 2876 && absY >= 5351 && absY <= 5369;
  4098.     }
  4099.  
  4100.     public boolean armadylChamber() {
  4101.     RETURN absX >= 2823 && absX <= 2843 && absY >= 5295 && absY <= 5310;
  4102.     }
  4103.  
  4104.     public boolean armadylChamber1() {
  4105.     RETURN absX >= 2825 && absX <= 2841 && absY >= 5297 && absY <= 5307;
  4106.     }
  4107.  
  4108.     public boolean inMageArena() {
  4109.     RETURN absX >= 3079 && absX <= 3126 && absY >= 3906 && absY <= 3951;
  4110.     }
  4111.  
  4112.     public boolean inDuelArena() {
  4113.     RETURN absX >= 3349 && absX <= 3388 && absY >= 3262 && absY <= 3280;
  4114.     }
  4115.  
  4116.     public boolean godWarsDung() {
  4117.     RETURN absX >= 2819 && absX <= 2946 && absY >= 5254 && absY <= 5362;
  4118.     }
  4119.  
  4120.     public boolean inJadCave() {
  4121.     RETURN absX >= 2375 && absX <= 2425 && absY >= 5128 && absY <= 5169;
  4122.     }
  4123.  
  4124.     /**
  4125.      * Sets the strings FOR KILL counts FOR god wars dungeon.
  4126.      */
  4127.     public void setGodWarsStrings() {
  4128.     IF (zammyChamber() || addZamorakCheckEventGodWars())
  4129.         FOR (INT i = 7; i <  11; i++)
  4130.             FOR (INT k = 0; k < 5; k++)
  4131.                 IF (this != null)
  4132.                     getActionSender().setString(this, ""+godWarsKills[k]+"", 598, i);
  4133.     ELSE
  4134.         FOR (INT s = 7; s <  11; s++)
  4135.             FOR (INT d = 0; d < 5; d++)
  4136.                 IF (this != null)
  4137.                     getActionSender().setString(this, ""+godWarsKills[d]+"", 601, s);
  4138.     }
  4139.  
  4140.     public ActionSender getActionSender() {
  4141.     RETURN Engine.actionSender;
  4142.     }
  4143.  
  4144.     public DuelArena getDuelClass() {
  4145.     RETURN duelArena;
  4146.     }
  4147.  
  4148.     public FightCave getFightClass() {
  4149.     RETURN fCave;
  4150.     }
  4151.  
  4152.     public WarriorGuild getWarriorClass() {
  4153.     RETURN warriorGuild;
  4154.     }
  4155.  
  4156.     public QuestDevelopment getQuestClass() {
  4157.     RETURN quest;
  4158.     }
  4159.  
  4160.     public TestWorldLoader getWorldLoader() {
  4161.     RETURN worldLoader;
  4162.     }
  4163.  
  4164.     public ByteVector getByteVector() {
  4165.     RETURN stream;
  4166.     }
  4167.  
  4168.     public boolean duelFight() {
  4169.     RETURN absX >= 3361 && absX <= 3392 && absY >= 3223 && absY <= 3241;
  4170.     }
  4171.  
  4172.     public boolean slayerTower() {
  4173.     RETURN absX >= 3402 && absX <= 3458 && absY >= 3529 && absY <= 3581;
  4174.     }
  4175.  
  4176.     public void appendPotion() {
  4177.     IF (explodeDelay == 0) {
  4178.         IF (explodeType == 1) {
  4179.             appendHit(25, 0);
  4180.             requestForceChat("Ow!");
  4181.             getActionSender().sendMessage(this, "The unidentified liquid potion exploded!");
  4182.         }
  4183.         explodeType = 0;
  4184.         explodeDelay = -1;
  4185.     }
  4186.     }
  4187.  
  4188.     public boolean castleLobby() {
  4189.     RETURN absX >= 2435 && absX <= 2449 && absY >= 3079 && absY <= 3099;
  4190.     }
  4191.  
  4192.     public boolean castleArea() {
  4193.     RETURN absX >= 2358 && absX <= 2438 && absY >= 3066 && absY <= 3142;
  4194.     }
  4195.  
  4196.     public boolean correctDistance(INT j, INT k, INT l, INT i1, INT j1)
  4197.     {
  4198.         FOR(INT k1 = 0; k1 <= j1; k1++)
  4199.         {
  4200.             FOR(INT l1 = 0; l1 <= j1; l1++)
  4201.             {
  4202.                 IF(j + k1 == l && (k + l1 == i1 || k - l1 == i1 || k == i1))
  4203.                     RETURN true;
  4204.                 IF(j - k1 == l && (k + l1 == i1 || k - l1 == i1 || k == i1))
  4205.                     RETURN true;
  4206.                 IF(j == l && (k + l1 == i1 || k - l1 == i1 || k == i1))
  4207.                     RETURN true;
  4208.             }
  4209.  
  4210.         }
  4211.  
  4212.         RETURN false;
  4213.     }
  4214.  
  4215.     public INT getLoginSpecial() {
  4216.     IF (specAmount <= 0) {
  4217.         RETURN 0;
  4218.     } ELSE {
  4219.         RETURN specAmount;
  4220.         }
  4221.     }
  4222.  
  4223.     public INT getLoginSpellbook() {
  4224.     IF (spellbook <= 0) {
  4225.         RETURN 192;
  4226.     } ELSE {
  4227.         RETURN spellbook;
  4228.     }
  4229.     }
  4230.    
  4231.     public PlayerFletching getFletchingClass() {
  4232.     RETURN fletchingClass;
  4233.     }
  4234.  
  4235.     /**
  4236.      * Edgeville 1 V 1
  4237.      */
  4238.     public boolean inEdgePk() {
  4239.     RETURN absX >= 3040 && absX <= 3118 && absY >= 3522 && absY <= 3553;
  4240.     }
  4241.  
  4242.     /**
  4243.      * Checking IF combat level difference IS correct FOR attacking in wild.
  4244.      */
  4245.     public boolean combatDifference(INT cbLvl) {
  4246.     RETURN wildLevel >= combatLevel && combatLevel + cbLvl >= wildLevel || cbLvl < combatLevel && combatLevel - wildLevel <= cbLvl || cbLvl == combatLevel;
  4247.     }
  4248.  
  4249.     /**
  4250.      * Update the wilderness levels.
  4251.      */
  4252.     void addWildernessUpdating() {
  4253.     getActionSender().setString(this, "Level: "+getWildernessLevel(), 380, 1);
  4254.     IF (updatedLevel != wildernessZone(absX, absY)) {
  4255.         updatedLevel = wildernessZone(absX, absY);
  4256.         IF (updatedLevel && !inClan() && !clanWarsFightArea()) {
  4257.             getActionSender().setOverlay(this, 380);
  4258.         } ELSE {
  4259.             wildyLevel = 0;
  4260.             getActionSender().removeOverlay(this);
  4261.         }
  4262.     }
  4263.     }
  4264.  
  4265.     public STRING getMessageString(INT economyId) {
  4266.     switch (economyId) {
  4267.         CASE 0:
  4268.             RETURN"No more duping faggots.";
  4269.         CASE 4153:
  4270.             RETURN "Granite mauls are now disabled, Please kill Gargoyles in the Slayer tower.";
  4271.  
  4272.         CASE 4151:
  4273.         CASE 11235:
  4274.             RETURN "Abyssal whips and Dark bows are disabled, Please go to Slayer tower.";
  4275.  
  4276.         CASE 2440:
  4277.         CASE 2434:
  4278.         CASE 6685:
  4279.             RETURN "You cannot spawn the super strength potion, Prayer potion and Brews anymore, Please steal potions from the stalls at home.";
  4280.  
  4281.         CASE 385:
  4282.         CASE 391:
  4283.             RETURN "You cannot spawn food anymore, Please steal food from the stalls at home.";
  4284.  
  4285.         CASE 10581:
  4286.             RETURN "Please go to the Slayer Tower for a Keris dagger.";
  4287.  
  4288.         CASE 11690:
  4289.         CASE 11702:
  4290.         CASE 11704:
  4291.         CASE 11706:
  4292.         CASE 11708:
  4293.             RETURN "You can only get a God hilt or Godsword blade by Defeating the Generals of the Gods in the God wars Dungeon.";
  4294.  
  4295.         CASE 11718:
  4296.         CASE 11720:
  4297.         CASE 11722:
  4298.         CASE 12670:
  4299.         CASE 12671:
  4300.             RETURN "You can only get a piece of Armadyl armour by Visitting Armadyl's Eyrie in the Godwars dungeon.";
  4301.  
  4302.         CASE 11724:
  4303.         CASE 11726:
  4304.         CASE 11728:
  4305.             RETURN "You can only get a piece of Bandos armour by Visitting Bandos's Stronghold in the Godwars dungeon.";
  4306.  
  4307.         CASE 3140:
  4308.             RETURN "You can only get a Dragon chainbody by Killing the Kalphite Queen in her Kalphite Lair.";
  4309.  
  4310.         CASE 6570:
  4311.         CASE 10566:
  4312.         CASE 10637:
  4313.             RETURN "Please visit The fight cave for a Fire cape.";
  4314.  
  4315.         CASE 11694:
  4316.         CASE 11696:
  4317.         CASE 11698:
  4318.         CASE 11700:
  4319.             RETURN "Please visit the Godwars dungeon to get this item.";
  4320.  
  4321.         default:
  4322.             RETURN "";
  4323.     }
  4324.     }
  4325.  
  4326.     /**
  4327.      * Loads objects at Map region loading.
  4328.      */
  4329.     public void loadStaticObjects() {
  4330.     getActionSender().addStaticObject(4008,0,3183,3433,0,10); //Prayer Altar
  4331.  
  4332.     getActionSender().addStaticObject(23610, 2, 3509, 9497, 0, 10);
  4333.     //getActionSender().addStaticObject(3831, 0, 3227, 3108, 0, 10);
  4334.     }
  4335.  
  4336.  
  4337.     /**
  4338.      * Zammys part of god wars area check boolean
  4339.      */
  4340.     public boolean addZamorakCheckEventGodWars() {
  4341.     RETURN absX >= 2879 && absX <= 2945 && absY >= 5342 && absY <= 5364;
  4342.     }
  4343.  
  4344.     /**
  4345.      * Update the player.
  4346.      */
  4347.     public void updatePlayer(boolean updateIsNeccesary) {
  4348.     appearanceUpdateReq = updateReq = updateIsNeccesary;
  4349.     }
  4350.  
  4351.     public INT getX() {
  4352.     RETURN absX;
  4353.     }
  4354.  
  4355.     public INT getY() {
  4356.     RETURN absY;
  4357.     }
  4358.  
  4359.     public INT getHeight() {
  4360.     RETURN heightLevel;
  4361.     }
  4362.  
  4363.     public INT getPlayerId() {
  4364.     RETURN playerId;
  4365.     }
  4366.  
  4367.     public void convertPlayerToNpc(INT npcType) {
  4368.     this.npcType = npcType;
  4369.     }
  4370.  
  4371.     public void updatePlayerAppearance(INT walkAnim, INT standAnim, INT runAnim) {
  4372.     standEmote = standAnim;
  4373.     walkEmote = walkAnim;
  4374.     runEmote = runAnim;
  4375.     }
  4376.  
  4377.     public void appendToIPBanned(Player player) {
  4378.     BufferedWriter bw = null;
  4379.     try {
  4380.         bw = new BufferedWriter(new FileWriter("./data/banned/bannedhosts.dat", true));
  4381.         bw.WRITE(Server.socketListener.getAddress(player.socket.socket));
  4382.         bw.newLine();
  4383.         bw.flush();
  4384.         Server.socketListener.loadBannedHosts();
  4385.         player.disconnected[0] = true;
  4386.         player.disconnected[1] = true;
  4387.     } catch (IOException ioe) {
  4388.     } finally {
  4389.         IF (bw != null) {
  4390.             try {
  4391.             bw.CLOSE();
  4392.     } catch (IOException ioe2) {
  4393.     }
  4394.     }
  4395.     }
  4396.     }
  4397.     public void appendToBanned(STRING player) {
  4398.     BufferedWriter bw = null;
  4399.     try {
  4400.         bw = new BufferedWriter(new FileWriter("./data/banned/bannedusers.dat", true));
  4401.         bw.WRITE(player);
  4402.         bw.newLine();
  4403.         bw.flush();
  4404.         Server.loadBannedUsers();
  4405.     } catch (IOException ioe) {
  4406.     } finally {
  4407.         IF (bw != null) {
  4408.             try {
  4409.             bw.CLOSE();
  4410.     } catch (IOException ioe2) {
  4411.     }
  4412.     }
  4413.     }
  4414.     }
  4415.  
  4416.     STRING Directory = "./data/banned/bannedusers.dat";
  4417.     STRING MaxBan[] = new STRING[1000];
  4418.     STRING UserThatBan = new STRING();
  4419.     INT Ban = 0;
  4420.  
  4421.      public void UnBanPlayer(STRING Player) {
  4422.  try {
  4423.  BufferedReader dataStream = new BufferedReader(new FileReader("./data/banned/bannedusers.dat"));
  4424.  WHILE ((UserThatBan = dataStream.readLine()) != null) {
  4425.  IF(UserThatBan.equalsIgnoreCase(Player)) {
  4426.  } ELSE
  4427.   IF(!UserThatBan.equalsIgnoreCase(Player)) {
  4428.   MaxBan[Ban] = UserThatBan;
  4429.   Ban++;
  4430.  }
  4431.  }
  4432.  } catch(Exception e) {
  4433.   e.printStackTrace();
  4434.  }
  4435.  BufferedWriter bw = null;
  4436.  try {
  4437.  bw = new BufferedWriter(new FileWriter(Directory, false));
  4438.   bw.WRITE("");
  4439.   bw.flush();
  4440.   bw.CLOSE();
  4441.  } catch(Exception e) {
  4442.   e.printStackTrace();
  4443.  }
  4444.  try {
  4445.   bw = new BufferedWriter(new FileWriter("./data/banned/bannedusers.dat", true));
  4446.   FOR(INT a = 0; a < MaxBan.length; a++) {
  4447.   IF(MaxBan[a] != null) {
  4448.   bw.WRITE(MaxBan[a]);
  4449.   bw.newLine();
  4450.   bw.flush();
  4451.  }
  4452.  }
  4453.  bw.CLOSE();
  4454.  } catch(Exception e) {
  4455.   e.printStackTrace();
  4456.  }
  4457.  Server.loadBannedUsers();
  4458.     }
  4459.     public boolean nonMultiPlace() {
  4460.     RETURN absX >= 3400 && absX <= 3457 && absY >= 3527 && absY <=  3579 && heightLevel == 2;
  4461.     }
  4462.  
  4463.     public INT neededSpecialAmount() {
  4464.         switch (equipment[3]) {
  4465.             CASE 1215:
  4466.             CASE 1231:
  4467.             CASE 5680:
  4468.             CASE 5698:
  4469.             CASE 1305:
  4470.             CASE 1434:
  4471.                 RETURN 250;
  4472.             CASE 10887:
  4473.             CASE 11694:
  4474.             CASE 11698:
  4475.             CASE 4151:
  4476.                 RETURN 500;
  4477.             CASE 11235:
  4478.                 RETURN 550;
  4479.             CASE 11700:
  4480.                 RETURN 600;
  4481.             CASE 11696:
  4482.             CASE 11730:
  4483.                 RETURN 1000;
  4484.             default:
  4485.                 RETURN 0;
  4486.         }
  4487.     }
  4488.  
  4489.     public INT weaponType;
  4490.  
  4491.     public INT attackStyle() {
  4492.  
  4493.         /*
  4494.          * Melee weapon styles
  4495.          * 1 : accurate
  4496.          * 2 : agressive
  4497.          * 3 : defensive
  4498.          * 4 : controlled
  4499.          *
  4500.          * Ranged weapon styles
  4501.          * 5 : accurate
  4502.          * 6 : rapid
  4503.          * 7 : longrange
  4504.          */
  4505.  
  4506.         switch (weaponType) {
  4507.             CASE 0: RETURN fightStyle;
  4508.             CASE 1: RETURN fightStyle;
  4509.             CASE 2:
  4510.                 IF (fightStyle == 1) {
  4511.                     RETURN 1;
  4512.                 }
  4513.                 IF (fightStyle == 3) {
  4514.                     RETURN 2;
  4515.                 }
  4516.                 IF (fightStyle == 2) {
  4517.                     RETURN 3;
  4518.                 }
  4519.             CASE 3:
  4520.                 IF (fightStyle == 1) {
  4521.                     RETURN 1;
  4522.                 }
  4523.                 IF (fightStyle == 2) {
  4524.                     RETURN 2;
  4525.                 }
  4526.                 IF (fightStyle == 3) {
  4527.                     RETURN 4;
  4528.                 }
  4529.                 IF (fightStyle == 4) {
  4530.                     RETURN 3;
  4531.                 }
  4532.             CASE 4:
  4533.                 IF (fightStyle == 1) {
  4534.                     RETURN 5;
  4535.                 }
  4536.                 IF (fightStyle == 3) {
  4537.                     RETURN 6;
  4538.                 }
  4539.                 IF (fightStyle == 2) {
  4540.                     RETURN 7;
  4541.                 }
  4542.             CASE 5: break;
  4543.             CASE 6: RETURN fightStyle;
  4544.             CASE 7:
  4545.                 IF (fightStyle == 1) {
  4546.                     RETURN 1;
  4547.                 }
  4548.                 IF (fightStyle == 2 || fightStyle == 3) {
  4549.                     RETURN 2;
  4550.                 }
  4551.                 IF (fightStyle == 4) {
  4552.                     RETURN 3;
  4553.                 }
  4554.             CASE 8:
  4555.                 IF (fightStyle == 1) {
  4556.                     RETURN 1;
  4557.                 }
  4558.                 IF (fightStyle == 4 || fightStyle == 3) {
  4559.                     RETURN 2;
  4560.                 }
  4561.                 IF (fightStyle == 2) {
  4562.                     RETURN 3;
  4563.                 }
  4564.             CASE 9:
  4565.                 IF (fightStyle == 1) {
  4566.                     RETURN 4;
  4567.                 }
  4568.                 IF (fightStyle == 2) {
  4569.                     RETURN 2;
  4570.                 }
  4571.                 IF (fightStyle == 3) {
  4572.                     RETURN 3;
  4573.                 }
  4574.             CASE 10:
  4575.                 IF (fightStyle == 1) {
  4576.                     RETURN 1;
  4577.                 }
  4578.                 IF (fightStyle == 2) {
  4579.                     RETURN 2;
  4580.                 }
  4581.                 IF (fightStyle == 3) {
  4582.                     RETURN 4;
  4583.                 }
  4584.                 IF (fightStyle == 4) {
  4585.                     RETURN 3;
  4586.                 }
  4587.             CASE 11:
  4588.                 IF (fightStyle == 1) {
  4589.                     RETURN 1;
  4590.                 }
  4591.                 IF (fightStyle == 4) {
  4592.                     RETURN 2;
  4593.                 }
  4594.                 IF (fightStyle == 3) {
  4595.                     RETURN 4;
  4596.                 }
  4597.                 IF (fightStyle == 2) {
  4598.                     RETURN 3;
  4599.                 }
  4600.             CASE 12:
  4601.                 IF (fightStyle == 1 || fightStyle == 2) {
  4602.                     RETURN fightStyle;
  4603.                 }
  4604.                 IF (fightStyle == 3) {
  4605.                     RETURN 4;
  4606.                 }
  4607.                 IF (fightStyle == 4) {
  4608.                     RETURN 3;
  4609.                 }
  4610.         }
  4611.         RETURN 8;
  4612.     }
  4613.  
  4614.     public INT weaponStyle(INT weaponID) {
  4615.         switch (weaponID) {
  4616.             CASE 4151: RETURN 2;
  4617.             CASE 4153: RETURN 3;
  4618.             CASE 1277:
  4619.             CASE 1279:
  4620.             CASE 1281:
  4621.             CASE 1283:
  4622.             CASE 1285:
  4623.             CASE 1287:
  4624.             CASE 1289:
  4625.             CASE 1291:
  4626.             CASE 1293:
  4627.             CASE 1295:
  4628.             CASE 1297:
  4629.             CASE 1299:
  4630.             CASE 1301:
  4631.             CASE 1303:
  4632.             CASE 1305:
  4633.             CASE 1329:
  4634.             CASE 1331:
  4635.             CASE 1337:
  4636.             CASE 4587:
  4637.                 IF (fightStyle != 3) {
  4638.                     RETURN 2;
  4639.                 } ELSE {
  4640.                     RETURN 1;
  4641.                 }
  4642.             CASE 1434:
  4643.             CASE 4755:
  4644.             CASE 10887:
  4645.                 IF (fightStyle != 3) {
  4646.                     RETURN 3;
  4647.                 } ELSE {
  4648.                     RETURN 1;
  4649.                 }
  4650.             CASE 1215:
  4651.             CASE 1231:
  4652.             CASE 5680:
  4653.             CASE 5698:
  4654.                 IF (fightStyle != 3) {
  4655.                     RETURN 1;
  4656.                 } ELSE {
  4657.                     RETURN 2;
  4658.                 }
  4659.             CASE 1307:
  4660.             CASE 1309:
  4661.             CASE 1311:
  4662.             CASE 1313:
  4663.             CASE 1315:
  4664.             CASE 1317:
  4665.             CASE 1319:
  4666.             CASE 1349:
  4667.             CASE 1351:
  4668.             CASE 1353:
  4669.             CASE 1355:
  4670.             CASE 1357:
  4671.             CASE 1359:
  4672.             CASE 1361:
  4673.             CASE 1363:
  4674.             CASE 1365:
  4675.             CASE 1367:
  4676.             CASE 1369:
  4677.             CASE 1371:
  4678.             CASE 1373:
  4679.             CASE 1375:
  4680.             CASE 1377:
  4681.             CASE 4718:
  4682.             CASE 6739:
  4683.             CASE 7158:
  4684.             CASE 11694:
  4685.             CASE 11696:
  4686.             CASE 11698:
  4687.             CASE 11700:
  4688.             CASE 11730:
  4689.                 IF (fightStyle != 3) {
  4690.                     RETURN 2;
  4691.                 } ELSE {
  4692.                     RETURN 3;
  4693.                 }
  4694.         }
  4695.         RETURN 1;
  4696.     }
  4697.  
  4698.     public INT getAttackSound() {
  4699.         STRING weapon = Engine.items.getItemName(equipment[3]);
  4700.         IF (weapon.equals("Abyssal whip")) {
  4701.             RETURN 2720;
  4702.         }
  4703.         IF (weapon.contains("godsword") || weapon.equals("Saradomin sword")) {
  4704.             switch (fightStyle) {
  4705.                 CASE 1:
  4706.                 CASE 2:
  4707.                 CASE 4: RETURN 3846;
  4708.                 CASE 3: RETURN 3882;
  4709.             }
  4710.         }
  4711.         IF (weapon.equals("Granite maul")) {
  4712.             RETURN 2714;
  4713.         }
  4714.         RETURN -1;
  4715.     }
  4716.  
  4717.     public INT getSpecialAttackSound() {
  4718.         RETURN -1;
  4719.     }
  4720.  
  4721.      public ClanWars getClanWarsHandler() {
  4722.     RETURN clanWars;
  4723.      }
  4724.  
  4725.      public boolean clanWarsFightArea() {
  4726.     RETURN absX >= 3263 && absX <= 3327 && absY >= 3713 && absY <= 3840;
  4727.      }
  4728.          public boolean bountySafe1() {
  4729.     RETURN absX >=3173  && absX <=3193  && absY >=3669  && absY <=3701;
  4730.     }
  4731.             public boolean bountySafe2() {
  4732.     RETURN absX >=3154  && absX <=3173  && absY >=3669  && absY <=3690;
  4733.     }
  4734.             public boolean bountySafe3() {
  4735.     RETURN absX >=3145  && absX <=3167  && absY >=3662  && absY <=3668;
  4736.     }
  4737.             public boolean bountySafe4() {
  4738.     RETURN absX >=3143  && absX <=3154  && absY >=3669  && absY <=3675;
  4739.     }
  4740.             public boolean bountySafe5() {
  4741.     RETURN absX >=3136  && absX <=3145  && absY >=3652  && absY <=3662;
  4742.     }
  4743.      public boolean bountySafe(){
  4744.         RETURN bountySafe1() || bountySafe2() || bountySafe3() || bountySafe4() || bountySafe5();
  4745.      }
  4746.  
  4747.  
  4748.   /**
  4749.      * Prepare player FOR removal.
  4750.      */
  4751.    public void destruct() {
  4752.         stream = null;
  4753.         try {
  4754.             socket.INPUT.CLOSE();
  4755.             socket.OUTPUT.CLOSE();
  4756.             socket.socket.CLOSE();
  4757.         } catch (Exception e) {
  4758.         }
  4759.        socket.INPUT = null;
  4760.         socket.OUTPUT = null;
  4761.         socket.socket = null;
  4762.         socket = null;
  4763.         absX = absY = mapRegionX = mapRegionY = -1;
  4764.         LONG me = Misc.stringToLong(username);
  4765.     FOR(Player p : Engine.players) {
  4766.         IF(p == null) continue;
  4767.         IF(p.friends.contains(me)) {
  4768.             p.getActionSender().sendFriend(p, me, 0);
  4769.         }
  4770.     }
  4771.     }
  4772.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement