private void handleFirstClickNPC(Player player, Packet packet) { int npcIndex = packet.readLEShortA(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } Console.WriteLine("First click NPC " + npc.getId()); SkillHandler.resetAllSkills(player); Combat.newAttack(player, npc); }
private void handleSecondClickNPC(Player player, Packet packet) { int npcIndex = packet.readLEShort(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } Console.WriteLine("Second click NPC " + npc.getId()); player.setFaceLocation(npc.getLocation()); SkillHandler.resetAllSkills(player); if (Fishing.wantToFish(player, npc, false)) { return; } else if (Slayer.talkToMaster(player, npc)) { return; } else if (AgilityArena.dialogue(player, npc, false)) { return; } else if (TzHaar.interactTzhaarNPC(player, npc, 1)) { return; } else if (WarriorGuild.talkToWarriorGuildNPC(player, npc, 1)) { return; } else if (BoatOptions.interactWithBoatNPC(player, npc)) { return; } switch(npc.getId()) { case 519: // Bob BrokenBarrows.talkToBob(player, npc, -1, 1); break; case 553: // Aubury HomeArea.interactWithAubury(player, npc, 1); break; case 1862: // Ali morisanne if (npc.getLocation().inArea(2319, 3177, 2321, 3182)) { // Home Ali HomeArea.interactWithAliMorissaae(player, npc); break; } else if (npc.getLocation().inArea(3311, 3198, 3316, 3199)) { // Al Kharid Ali AlKharid.interactWithAliMorissaae(player, npc); break; } break; } }
private void handleFifthClickObject(Player player, Packet packet) { short id = packet.readLEShortA(); short x = packet.readLEShortA(); short y = packet.readLEShortA(); if (player.getTemporaryAttribute("unmovable") != null) { return; } if (x < 1000 || id < 0 || y < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); player.setFaceLocation(new Location(x, y, player.getLocation().getZ())); Console.WriteLine("Fifth object click = " + id + " " + x + " " + y); switch (id) { case 28089: // GE desk Server.getGrandExchange().clickDesk(player, x, y, 5); break; } }
private void handleClickOne(Player player, Packet packet) { int slot = packet.readShortA(); int item = packet.readUShort(); int childId = packet.readUShort(); int interfaceId = packet.readUShort(); if (slot < 0 || slot > 28 || player.isDead()) { return; } Console.WriteLine("Click One Slot = " + slot); player.getPackets().closeInterfaces(); Console.WriteLine("InterfaceOption 1: interfaceId: " + interfaceId); switch(interfaceId) { case 387: // Unequip item if (slot < 14 && player.getEquipment().getItemInSlot((ItemData.EQUIP)slot) == item) { player.getEquipment().unequipItem((ItemData.EQUIP)slot); } break; } }
private void handleMagicOnNPC(Player player, Packet packet) { int childId = packet.readLEShort(); int interfaceId = packet.readLEShort(); int junk = packet.readShortA(); int npcIndex = packet.readLEShortA(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } SkillHandler.resetAllSkills(player); player.setTarget(npc); MagicCombat.newMagicAttack(player, npc, childId, interfaceId == 193); Console.WriteLine(childId); }
private void handleFourthClickNPC(Player player, Packet packet) { int npcIndex = packet.readUShort(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } Console.WriteLine("Fourth click NPC " + npc.getId()); SkillHandler.resetAllSkills(player); if (Slayer.openSlayerShop(player, npc)) { return; } switch(npc.getId()) { case 553: // Aubury HomeArea.interactWithAubury(player, npc, 3); break; } }
private void handleEquipItem(Player player, Packet packet) { int item = packet.readLEShort(); int slot = packet.readShortA(); int interfaceId = packet.readInt(); if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); if (player.getInventory().getItemInSlot(slot) == item) { //player.getPackets().closeInterfaces(); if (RuneCraft.emptyPouch(player, (RuneCraftData.POUCHES)player.getInventory().getItemInSlot(slot))) { return; } player.getEquipment().equipItem(player.getInventory().getItemInSlot(slot), slot); } }
private void handleRightClickOne(Player player, Packet packet) { int childId = packet.readLEShort(); int interfaceId = packet.readLEShort(); int item = packet.readLEShortA(); int slot = packet.readLEShortA(); if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); if (player.getInventory().getItemInSlot(slot) == item) { player.getPackets().closeInterfaces(); if (interfaceId == 149 && childId == 0) { if (Herblore.emptyPotion(player, player.getInventory().getItemInSlot(slot), slot)) { return; } else if (JewelleryTeleport.useJewellery(player, player.getInventory().getItemInSlot(slot), slot, false)) { return; } } } }
public static void fightCaveAttacks(Npc npc, Player p) { if (npc.isDead() || npc.isDestroyed() || p.isDead() || p.isDestroyed() || p.isDead() || !Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } double damage = misc.randomDouble(npc.getMaxHit()); PrayerData.PrayerHeadIcon prayerHeadIcon = p.getPrayers().getHeadIcon(); int hitDelay = npc.getHitDelay(); int animation = npc.getAttackAnimation(); switch(npc.getId()) { case 2734: // Tz-Kih (lvl 22) case 2735: if (prayerHeadIcon == PrayerData.PrayerHeadIcon.MELEE) { damage = 0; } break; case 2739: // Tz-Xil (lvl 90) case 2740: if (prayerHeadIcon == PrayerData.PrayerHeadIcon.RANGE) { damage = 0; } p.getPackets().sendProjectile(npc.getLocation(), p.getLocation(), 32, 1616, 50, 40, 34, 50, p); break; case 2741: // Yt-MejKot (lvl 180) case 2742: if (prayerHeadIcon == PrayerData.PrayerHeadIcon.MELEE) { damage = 0; } // TODO healing break; case 2743: // Ket-Zek (lvl 360) case 2744: if (!p.getLocation().withinDistance(npc.getLocation(), 2)) { hitDelay = 1600; animation = 9266; npc.setLastGraphics(new Graphics(1622)); damage = misc.randomDouble(49); if (prayerHeadIcon == PrayerData.PrayerHeadIcon.MAGIC) { damage = 0; } Event sendProjectileToNpc = new Event(300); sendProjectileToNpc.setAction(() => { sendProjectileToNpc.stop(); p.getPackets().sendProjectile(npc.getLocation(), p.getLocation(), 32, 1623, 50, 40, 34, 80, p); }); Server.registerEvent(sendProjectileToNpc); } else { damage = misc.randomDouble(64); if (prayerHeadIcon == PrayerData.PrayerHeadIcon.MELEE) { damage = 0; } } break; case 2745: // TzTok Jad (lvl 702) doJadAttacks(p, npc); break; } if (npc.getId() == 2745){ return; } if (animation != 65535) { npc.setLastAnimation(new Animation(animation)); } p.setLastAttacked(Environment.TickCount); npc.setLastAttack(Environment.TickCount); p.setAttacker(npc); npc.resetCombatTurns(); if (damage > p.getHp()) { damage = p.getHp(); } int npcId = npc.getId(); Event losePrayerFightingEvent = new Event(hitDelay); losePrayerFightingEvent.setAction(() => { losePrayerFightingEvent.stop(); if (!Location.inFightCave(p.getLocation()) || p.getTeleportTo() != null) { return; } if (npcId == 2734 || npcId == 2735) { int prayerLevel = p.getSkills().getCurLevel(Skills.SKILL.PRAYER); int newPrayerLevel = prayerLevel -= (int)(damage + 1); if (newPrayerLevel <= 0) { newPrayerLevel = 0; } p.getSkills().setCurLevel(Skills.SKILL.PRAYER, newPrayerLevel); p.getPackets().sendSkillLevel(Skills.SKILL.PRAYER); } else if (npcId == 2743 || npcId == 2744) { if (misc.random(1) == 0) { p.setLastGraphics(new Graphics(1624, 0)); } } if ((p.getCombatTurns() > 2 || p.getCombatTurns() < 0)) { p.setLastAnimation(new Animation(p.getDefenceAnimation())); } p.hit(damage); }); Server.registerEvent(losePrayerFightingEvent); }
private static void drinkPotion(Player p, int i, int j, int slot) { //TODO antipoisons/antifire int lastPotion = -1; int delay = 500; long lastDrink = 0; if (p.isDead() || p.getTemporaryAttribute("willDie") != null) { return; } if (p.getDuel() != null) { if (p.getDuel().ruleEnabled(DuelSession.RULE.NO_DRINKS)) { p.getPackets().sendMessage("Drinks have been disabled for this duel!"); return; } } if (p.getTemporaryAttribute("lastDrankPotion") != null) { lastPotion = (int) p.getTemporaryAttribute("lastDrankPotion"); } if (p.getTemporaryAttribute("drinkPotionTimer") != null) { lastDrink = (int) p.getTemporaryAttribute("drinkPotionTimer"); } int time = (j == lastPotion) ? 1000 : 500; if (Environment.TickCount - lastDrink < time) { return; } p.getPackets().closeInterfaces(); p.setTemporaryAttribute("drinkPotionTimer", Environment.TickCount); p.setTemporaryAttribute("lastDrankPotion", j); p.setTarget(null); p.resetCombatTurns(); p.setEntityFocus(65535); p.removeTemporaryAttribute("autoCasting"); Event drinkPotionEvent = new Event(delay); drinkPotionEvent.setAction(() => { drinkPotionEvent.stop(); if (p.isDead() || p.getSkills().getCurLevel(Skills.SKILL.HITPOINTS) <= 0) { return; } int item = i != 0 && POTIONS[i - 1][j] != -1 ? POTIONS[i - 1][j] : 229; if (!p.getInventory().replaceItemSlot(POTIONS[i][j], item, slot)) { return; } string drinkPotion = ItemData.forId(POTIONS[0][j]).getName().Replace("(", "").Replace(")", "").Replace("3", "").Replace("2", "").Replace("1", "").ToLower(); p.getPackets().sendMessage("You drink some of your " + drinkPotion + "."); p.getPackets().sendMessage("You have " + (i == 0 ? "no" : i.ToString()) + " doses of potion left."); switch(j) { case 0: //Attack potion [+3 and 10% of max attack] statBoost(p, Skills.SKILL.ATTACK, 0.10, 3, false); break; case 1: //Antipoison potion p.setPoisonAmount(0); break; case 2: //Strength potion [+3 and 10% of max strength] statBoost(p, Skills.SKILL.STRENGTH, 0.10, 3, false); break; case 3: //Restore potion [restores randomly between 10-39 points] restorePotion(p, Skills.SKILL.DEFENCE, 10, 39); restorePotion(p, Skills.SKILL.ATTACK, 10, 39); restorePotion(p, Skills.SKILL.STRENGTH, 10, 39); restorePotion(p, Skills.SKILL.RANGE, 10, 39); restorePotion(p, Skills.SKILL.HITPOINTS, 10, 39); break; case 4: //Energy potion [restores 20% energy] double newEnergy = p.getRunEnergy() * 0.20; p.setRunEnergy(((p.getRunEnergy() + (int)newEnergy >= 100) ? 100 : (p.getRunEnergy() + (int)newEnergy))); break; case 5: //Defence potion [Should be +3 and 10% of max defence] statBoost(p, Skills.SKILL.DEFENCE, 0.10, 3, false); break; case 6: //Agility potion [restores 2 or 3 agility points] int newAgility = misc.random(2, 3) + p.getSkills().getCurLevel(Skills.SKILL.AGILITY); if (newAgility < p.getSkills().getMaxLevel(Skills.SKILL.AGILITY)) p.getSkills().setCurLevel(Skills.SKILL.AGILITY, newAgility); break; case 7: //Combat potion [Should be 10% of attack+strength and +3 to each]. statBoost(p, Skills.SKILL.ATTACK, 0.10, 3, false); statBoost(p, Skills.SKILL.STRENGTH, 0.10, 3, false); break; case 8: //Prayer potion, [heals 7-31, formula = 7+floor(prayerlevel/4)] int newPrayer = 7 + (int)Math.Floor((double)(p.getSkills().getMaxLevel(Skills.SKILL.PRAYER) / 4)) + p.getSkills().getCurLevel(Skills.SKILL.PRAYER); if (newPrayer < p.getSkills().getCurLevel(Skills.SKILL.PRAYER)) p.getSkills().setCurLevel(Skills.SKILL.PRAYER, newPrayer); checkOverdose(p, Skills.SKILL.PRAYER); break; case 9: //Summoning potion [25% of players summoning + 7] int newSummoning = (7 + (int)((double)p.getSkills().getMaxLevel(Skills.SKILL.SUMMONING) * 0.25)) + p.getSkills().getCurLevel(Skills.SKILL.SUMMONING); if (newSummoning < p.getSkills().getCurLevel(Skills.SKILL.SUMMONING)) p.getSkills().setCurLevel(Skills.SKILL.SUMMONING, newSummoning); statBoost(p, Skills.SKILL.STRENGTH, 0.10, 3, false); break; case 10: //Super attack potion [15% of players attack + 5] statBoost(p, Skills.SKILL.ATTACK, 0.15, 5, false); break; case 11: // super antipoison p.setPoisonAmount(0); p.setSuperAntipoisonCycles(20); break; case 12: //Fishing potion [fishing +3] if (p.getSkills().getCurLevel(Skills.SKILL.FISHING) < (p.getSkills().getMaxLevel(Skills.SKILL.FISHING) + 3)) p.getSkills().setCurLevel(Skills.SKILL.FISHING, p.getSkills().getCurLevel(Skills.SKILL.FISHING) + 3); break; case 13: p.setRunEnergy(p.getRunEnergy() + 20); if (p.getRunEnergy() >= 100) { p.setRunEnergy(100); } break; case 14: //Hunter potion [hunting + 3] if (p.getSkills().getCurLevel(Skills.SKILL.HUNTER) < (p.getSkills().getMaxLevel(Skills.SKILL.HUNTER) + 3)) p.getSkills().setCurLevel(Skills.SKILL.HUNTER, p.getSkills().getCurLevel(Skills.SKILL.HUNTER) + 3); break; case 15: //Super strength [strength 15% +5] statBoost(p, Skills.SKILL.STRENGTH, 0.15, 5, false); break; case 16: //restores all skills by 33%. foreach (Skills.SKILL skill in Enum.GetValues(typeof(Skills.SKILL))) superRestorePotion(p, skill, 0.33); break; case 17://Super defence [defence 15% +5] statBoost(p, Skills.SKILL.DEFENCE, 0.15, 5, false); break; case 18: // Antifire potion p.setAntifireCycles(20); break; case 19: //Ranging potions statBoost(p, Skills.SKILL.RANGE, 0.10, 4, false); break; case 20: //Magic potion. if (p.getSkills().getCurLevel(Skills.SKILL.MAGIC) < (p.getSkills().getMaxLevel(Skills.SKILL.MAGIC) + 4)) p.getSkills().setCurLevel(Skills.SKILL.MAGIC, p.getSkills().getCurLevel(Skills.SKILL.MAGIC) + 4); break; case 21: //Zamorak brew potion. [Attack %20+2][Strength %12 +2][Defense -10% + -2][hitpoints -10% + 20] statBoost(p, Skills.SKILL.ATTACK, 0.20, 2, false); statBoost(p, Skills.SKILL.STRENGTH, 0.12, 2, false); statBoost(p, Skills.SKILL.DEFENCE, 0.10, 2, true); statBoost(p, Skills.SKILL.HITPOINTS, 0.10, 20, true); break; case 22: //Saradomin brew potion. [Hitpoints +%15][Defense +25%][Strength, Attack, Magic and Ranged -10%] statBoost(p, Skills.SKILL.HITPOINTS, 0.15, 0, false); statBoost(p, Skills.SKILL.DEFENCE, 0.25, 0, false); statBoost(p, Skills.SKILL.STRENGTH, 0.10, 0, true); statBoost(p, Skills.SKILL.ATTACK, 0.10, 0, true); statBoost(p, Skills.SKILL.MAGIC, 0.10, 0, true); statBoost(p, Skills.SKILL.RANGE, 0.10, 0, true); break; } p.setLastAnimation(new Animation(829)); p.getPackets().sendSkillLevels(); }); Server.registerEvent(drinkPotionEvent); }
private static void eatFood(Player p, int i, int j, int slot) { //delay at which you eat food 0.5 seconds (half a second per eat). int delay = 500; //If you are dead or yourHp is zero (this should be enough), also if variable is set to die from next attack if (p.isDead() || p.getHp() <= 0 || p.getTemporaryAttribute("willDie") != null) return; //Last time you ate timer was previously set. if (p.getTemporaryAttribute("eatFoodTimer") != null) { //Check if the timer has passed the time of 1.2 seconds if (Environment.TickCount - (int) p.getTemporaryAttribute("eatFoodTimer") < 1200) { return; } } //if you are in a duel if (p.getDuel() != null) { //dueling with No Food rule enabled if (p.getDuel().ruleEnabled(DuelSession.RULE.NO_FOOD)) { p.getPackets().sendMessage("Food has been disabled for this duel!"); return; } } //Set timer right now because you are eating some food. p.setTemporaryAttribute("eatFoodTimer", Environment.TickCount); //while you are eating the target you are attacking gets reset. p.setTarget(null); p.resetCombatTurns(); p.setEntityFocus(65535); p.getPackets().closeInterfaces(); p.removeTemporaryAttribute("autoCasting"); //start eating the food at delay which is 0.5 of a second / half a second. Event eatFoodEvent = new Event(delay); eatFoodEvent.setAction(() => { //make the food eating event stop after this time. eatFoodEvent.stop(); //if you are dead or your hp is zero aka dead. if (p.isDead() || p.getHp() <= 0) { return; } int newHealth = p.getSkills().getCurLevel(Skills.SKILL.HITPOINTS) + FOOD_HEAL[j]; int item = i != 2 && FOOD[i + 1][j] != -1 ? FOOD[i + 1][j] : -1; if (!p.getInventory().replaceItemSlot(FOOD[i][j], item, slot)) { return; } p.getPackets().sendMessage("You eat the " + ItemData.forId(FOOD[i][j]).getName().ToLower() + "."); p.getSkills().setCurLevel(Skills.SKILL.HITPOINTS, newHealth > p.getSkills().getMaxLevel(Skills.SKILL.HITPOINTS) ? p.getSkills().getMaxLevel(Skills.SKILL.HITPOINTS) : newHealth); p.setLastAnimation(new Animation(829)); p.getPackets().sendSkillLevel(Skills.SKILL.HITPOINTS); }); Server.registerEvent(eatFoodEvent); }
private void handleAttackPlayer(Player player, Packet packet) { int index = packet.readLEShortA(); if(index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); Player p2 = Server.getPlayerList()[index]; if (p2 == null) return; player.setFaceLocation(p2.getLocation()); player.getPackets().closeInterfaces(); if (Location.atDuelArena(player.getLocation())) { if(player.getDuel() != null) { if (player.getDuel().getStatus() < 4) { player.getDuel().declineDuel(); return; } else if (player.getDuel().getStatus() == 5 && player.getDuel().getPlayer2().Equals(p2)) { player.getPackets().sendMessage("The duel has not yet started!"); return; } else if ((player.getDuel().getStatus() == 5 || player.getDuel().getStatus() == 6) && !player.getDuel().getPlayer2().Equals(p2)) { return; } else if (player.getDuel().getStatus() == 6) { Combat.newAttack(player, p2); return; } } if (!player.getLocation().withinDistance(p2.getLocation(), 1)) { int x = p2.getLocation().getX(); int y = p2.getLocation().getY(); AreaEvent attackAreaEvent = new AreaEvent(player, x-1, y-1, x+1, y+1); attackAreaEvent.setAction(() => { player.getWalkingQueue().resetWalkingQueue(); player.getPackets().clearMapFlag(); if (p2.getGESession() != null || (p2.getDuel() != null && !p2.getDuel().getPlayer2().Equals(player)) || p2.getTrade() != null || p2.getShopSession() != null || p2.getBank().isBanking()) { player.getPackets().sendMessage("That player is busy at the moment."); return; } if (p2.wantsToDuel(player)) { p2.setFaceLocation(player.getLocation()); player.getPackets().closeInterfaces(); p2.getPackets().closeInterfaces(); player.setDuelSession(new DuelSession(player, p2)); p2.setDuelSession(new DuelSession(p2, player)); return; } player.setFaceLocation(p2.getLocation()); p2.getPackets().sendMessage(player.getLoginDetails().getUsername() + ":duelstake:"); player.getPackets().sendMessage("Sending duel request..."); player.newDuelRequest(p2); }); Server.registerCoordinateEvent(attackAreaEvent); return; } if (p2.getGESession() != null || (p2.getDuel() != null && !p2.getDuel().getPlayer2().Equals(player)) || p2.getTrade() != null || p2.getShopSession() != null || p2.getBank().isBanking()) { player.getPackets().sendMessage("That player is busy at the moment."); return; } if (p2.wantsToDuel(player)) { player.getPackets().closeInterfaces(); p2.getPackets().closeInterfaces(); p2.setFaceLocation(player.getLocation()); player.setDuelSession(new DuelSession(player, p2)); p2.setDuelSession(new DuelSession(p2, player)); return; } player.newDuelRequest(p2); p2.getPackets().sendMessage(player.getLoginDetails().getUsername() + ":duelstake:"); player.getPackets().sendMessage("Sending duel request..."); return; } Combat.newAttack(player, p2); }
private void handleMagicOnPlayer(Player player, Packet packet) { int junk = packet.readShortA(); int id = packet.readLEShort(); int interfaceId = packet.readLEShort(); int index = packet.readLEShortA(); if(index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); Player p2 = Server.getPlayerList()[index]; if (p2 == null) { return; } player.getPackets().closeInterfaces(); player.setTarget(p2); MagicCombat.newMagicAttack(player, p2, id, interfaceId == 193); }
private void handleTradePlayer(Player player, Packet packet) { int index = packet.readLEShortA(); if(index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); Player p2 = Server.getPlayerList()[index]; if (p2 == null) { return; } player.setFaceLocation(p2.getLocation()); if(player.getTrade() != null) { player.getTrade().decline(); return; } player.getPackets().closeInterfaces(); if (!player.getLocation().withinDistance(p2.getLocation(), 1)) { int x = p2.getLocation().getX(); int y = p2.getLocation().getY(); AreaEvent tradePlayerAreaEvent = new AreaEvent(player, x-1, y-1, x+1, y+1); tradePlayerAreaEvent.setAction(() => { player.getWalkingQueue().resetWalkingQueue(); player.getPackets().clearMapFlag(); if (p2.getGESession() != null || p2.getTrade() != null || p2.getDuel() != null || p2.getShopSession() != null || p2.getBank().isBanking()) { player.getPackets().sendMessage("That player is busy at the moment."); return; } if (p2.wantsToTrade(player)) { player.getPackets().closeInterfaces(); p2.getPackets().closeInterfaces(); p2.setFaceLocation(player.getLocation()); player.setTrade(new TradeSession(player, p2)); p2.setTrade(new TradeSession(p2, player)); return; } player.setFaceLocation(p2.getLocation()); p2.getPackets().sendMessage(player.getLoginDetails().getUsername() + ":tradereq:"); player.getPackets().sendMessage("Sending trade offer..."); player.newTradeRequest(p2); }); Server.registerCoordinateEvent(tradePlayerAreaEvent); return; } if (p2.getGESession() != null || p2.getTrade() != null || p2.getDuel() != null || p2.getShopSession() != null || p2.getBank().isBanking()) { player.getPackets().sendMessage("That player is busy at the moment."); return; } if (p2.wantsToTrade(player)) { player.getPackets().closeInterfaces(); p2.getPackets().closeInterfaces(); p2.setFaceLocation(player.getLocation()); player.setTrade(new TradeSession(player, p2)); p2.setTrade(new TradeSession(p2, player)); return; } player.newTradeRequest(p2); p2.getPackets().sendMessage(player.getLoginDetails().getUsername() + ":tradereq:"); player.getPackets().sendMessage("Sending trade offer..."); }
private void handleFollowPlayer(Player player, Packet packet) { int index = packet.readLEShortA(); if(index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); Player p2 = Server.getPlayerList()[index]; if (p2 == null) { return; } player.getFollow().setFollowing(p2); }
private void handleSwapSlot(Player player, Packet packet) { int oldSlot = packet.readUShort(); int childId = packet.readLEShort(); int interfaceId = packet.readLEShort(); int newSlot = packet.readShortA(); int swapType = packet.readByteS(); int oldItem = player.getInventory().getItemInSlot(oldSlot); int oldAmount = player.getInventory().getAmountInSlot(oldSlot); int newItem = player.getInventory().getItemInSlot(newSlot); int newAmount = player.getInventory().getAmountInSlot(newSlot); if (oldSlot > 28 || oldSlot < 0 || newSlot > 28 || oldSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } switch (interfaceId) { case 149: if (swapType == 0 && childId == 0) { player.getInventory().getSlot(oldSlot).setItemId(newItem); player.getInventory().getSlot(oldSlot).setItemAmount(newAmount); player.getInventory().getSlot(newSlot).setItemId(oldItem); player.getInventory().getSlot(newSlot).setItemAmount(oldAmount); } break; default: misc.WriteError("UNHANDLED ITEM SWAP 1 : interface = " + interfaceId); break; } //No need to update the screen since the client does it for us! }
private void handleSwapSlot2(Player player, Packet packet) { int interfaceId = packet.readLEShort(); int child = packet.readUShort(); int newSlot = packet.readLEShort(); int interface2 = packet.readUShort(); int child2 = packet.readUShort(); int oldSlot = packet.readLEShort(); int oldItem = player.getInventory().getItemInSlot(oldSlot); int oldAmount = player.getInventory().getAmountInSlot(oldSlot); int newItem = player.getInventory().getItemInSlot(newSlot); int newAmount = player.getInventory().getAmountInSlot(newSlot); if (oldSlot > 28 || oldSlot < 0 || newSlot > 28 || oldSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } switch (interfaceId) { case 621: // Shop. case 763: // Bank. case 336: // Duel player.getInventory().getSlot(oldSlot).setItemId(newItem); player.getInventory().getSlot(oldSlot).setItemAmount(newAmount); player.getInventory().getSlot(newSlot).setItemId(oldItem); player.getInventory().getSlot(newSlot).setItemAmount(oldAmount); break; default: misc.WriteError("UNHANDLED ITEM SWAP 2 : interface = " + interfaceId); break; } //No need to update the screen since the client does it for us! player.getPackets().refreshInventory(); }
private void handleItemOnItem(Player player, Packet packet) { int itemSlot = packet.readUShort(); int unused = packet.readInt(); int withSlot = packet.readLEShort(); int unused2 = packet.readInt(); int itemUsed = packet.readLEShortA(); int usedWith = packet.readLEShortA(); if (itemSlot > 28 || itemSlot < 0 || withSlot > 28 || withSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); if (player.getInventory().getSlot(itemSlot).getItemId() == itemUsed && player.getInventory().getSlot(withSlot).getItemId() == usedWith) { if (Fletching.isFletching(player, itemUsed, usedWith)) { return; } else if (Herblore.doingHerblore(player, itemUsed, usedWith)) { return; } else if (Herblore.mixDoses(player, itemUsed, usedWith, itemSlot, withSlot)) { return; } else if (Crafting.wantsToCraft(player, itemUsed, usedWith)) { return; } else if (Firemaking.isFiremaking(player, itemUsed, usedWith, itemSlot, withSlot)) { return; } else if (Farming.plantSapling(player, itemUsed, usedWith)) { return; } else { player.getPackets().sendMessage("Nothing interesting happens."); } } }
private void handleRightClickTwo(Player player, Packet packet) { int childId = packet.readLEShort(); int interfaceId = packet.readLEShort(); int slot = packet.readLEShort(); int item = packet.readLEShort(); if (slot < 0 || slot > 28 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); if (player.getInventory().getItemInSlot(slot) == item) { player.getPackets().closeInterfaces(); switch(player.getInventory().getItemInSlot(slot)) { case 5509: // Small pouch. player.getPackets().sendMessage("There is " + player.getSmallPouchAmount() + " Pure essence in your small pouch. (holds 3)."); break; case 5510: // Medium pouch. player.getPackets().sendMessage("There is " + player.getMediumPouchAmount() + " Pure essence in your medium pouch. (holds 6)."); break; case 5512: // Large pouch. player.getPackets().sendMessage("There is " + player.getLargePouchAmount() + " Pure essence in your large pouch. (holds 9)."); break; case 5514: // Giant pouch. player.getPackets().sendMessage("There is " + player.getGiantPouchAmount() + " Pure essence in your giant pouch. (holds 12)."); break; } } }
private void handleInvenClickItem(Player player, Packet packet) { int slot = packet.readLEShortA(); int item = packet.readShortA(); int childId = packet.readLEShort(); int interfaceId = packet.readLEShort(); if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); if (player.getInventory().getItemInSlot(slot) == item) { player.getPackets().closeInterfaces(); if (Consumables.isEating(player, player.getInventory().getItemInSlot(slot), slot)) return; else if (Herblore.idHerb(player, player.getInventory().getItemInSlot(slot))) return; else if (RuneCraft.fillPouch(player, (RuneCraftData.POUCHES)player.getInventory().getItemInSlot(slot))) return; else if (Prayer.wantToBury(player, player.getInventory().getItemInSlot(slot), slot)) return; else if (Teleport.useTeletab(player, player.getInventory().getItemInSlot(slot), slot)) return; else if (FarmingAmulet.showOptions(player, player.getInventory().getItemInSlot(slot))) return; switch(item) { case 4155: // Slayer gem Slayer.doDialogue(player, 1051); break; case 6: // Dwarf multicannon if (player.getCannon() != null) { player.getPackets().sendMessage("You already have a cannon set up!"); break; } player.setCannon(new DwarfCannon(player)); break; case 5073: // Nest with seeds. case 5074: // Nest with jewellery. Woodcutting.randomNestItem(player, item); break; case 952: // Spade player.setLastAnimation(new Animation(830)); if (Barrows.enterCrypt(player)) { player.getPackets().sendMessage("You've broken into a crypt!"); break; } player.getPackets().sendMessage("You find nothing."); break; } } }
private void handleThirdClickNPC(Player player, Packet packet) { int npcIndex = packet.readShortA(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } Console.WriteLine("Third click NPC " + npc.getId()); SkillHandler.resetAllSkills(player); if (Thieving.wantToThieveNpc(player, npc)) { return; } else if (Fishing.wantToFish(player, npc, true)) { return; } else if (AgilityArena.dialogue(player, npc, true)) { return; } else if (TzHaar.interactTzhaarNPC(player, npc, 2)) { return; } else if (WarriorGuild.talkToWarriorGuildNPC(player, npc, 2)) { return; } switch(npc.getId()) { case 553: // Aubury HomeArea.interactWithAubury(player, npc, 2); break; case 519: // Bob BrokenBarrows.talkToBob(player, npc, -1, 2); break; } }
private void handleItemOnObject(Player player, Packet packet) { int objectX = packet.readShortA(); int item = packet.readUShort(); int objectY = packet.readLEShort(); int slot = packet.readUShort(); int interfaceId = packet.readLEShort(); int child = packet.readUShort(); int objectId = packet.readShortA(); if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Console.WriteLine("Item on object = " + objectId + " " + objectX + " " + objectY); SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ())); if (player.getInventory().getItemInSlot(slot) == item) { if (Crafting.wantsToCraftOnObject(player, player.getInventory().getItemInSlot(slot), objectId)) { return; } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, player.getInventory().getItemInSlot(slot))) { return; } else if (WarriorGuild.useAnimator(player, player.getInventory().getItemInSlot(slot), objectId, objectX, objectY)) { return; } if (player.getInventory().getItemInSlot(slot) == 7936) { if (RuneCraft.wantToRunecraft(player, objectId, objectX, objectY)) { return; } if (RuneCraft.useTalisman(player, objectId, objectX, objectY)) { return; } } switch(objectId) { case 6: // Cannon: DwarfCannon cannon = player.getCannon(); Location l = new Location(objectX, objectY, player.getLocation().getZ()); if (cannon == null || (cannon != null & !l.withinDistance(cannon.getLocation(), 2))) { player.getPackets().sendMessage("This isn't your cannon!"); break; } cannon.loadCannon(); break; case 36781: // Lumbridge fountain. case 24214: // Fountain in east Varrock. case 24265: // Varrock main fountain. case 11661: // Falador waterpump. case 11759: // Falador south fountain. case 879: // Camelot fountains. case 29529: // Sink. case 874: // Sink. if (FillVial.fillingVial(player, new Location(objectX, objectY, player.getLocation().getZ())) && player.getInventory().getItemInSlot(slot) == 229) { break; } break; case 2728: // Range in Catherby if (Cooking.isCooking(player, player.getInventory().getItemInSlot(slot), false, -1, -1)) { break; } break; case 2732: // Fire if (Cooking.isCooking(player, player.getInventory().getItemInSlot(slot), true, objectX, objectY)) { break; } break; case 36956: // Lumbridge furnace case 11666: // Falador furnace if (Smelting.wantToSmelt(player, player.getInventory().getItemInSlot(slot))) { break; } else if (Crafting.wantsToCraftOnObject(player, player.getInventory().getItemInSlot(slot), objectId)) { break; } break; case 2783: // Anvil if (Smithing.wantToSmithOnAnvil(player, player.getInventory().getItemInSlot(slot), new Location(objectX, objectY, player.getLocation().getZ()))) { break; } break; default: player.getPackets().sendMessage("Nothing interesting happens."); break; } } }
private void handleExamineNPC(Player player, Packet packet) { int npcId = packet.readUShort(); if (npcId < 0 || npcId > NpcData.getTotalNpcDefinitions() || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) return; player.getPackets().sendMessage(NpcData.forId(npcId).getExamine()); }
private void handleItemOnGroundItem(Player player, Packet packet) { int objectX = packet.readLEShortA(); int itemSlot = packet.readLEShort(); int itemIdInInventory = packet.readLEShort(); int itemIdOnGround = packet.readLEShort(); int objectY = packet.readLEShortA(); int interfaceId = packet.readLEShort(); int child = packet.readUShort(); if (itemSlot > 28 || itemSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) return; if (Firemaking.isFiremaking(player, itemIdInInventory, itemIdOnGround, itemSlot, -1)) return; else player.getPackets().sendMessage("Nothing interesting happens."); }
private void handleItemOnNPC(Player player, Packet packet) { int interfaceId = packet.readInt(); int slot = packet.readLEShort(); int npcIndex = packet.readLEShort(); int item = packet.readLEShortA(); if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } Npc npc = Server.getNpcList()[npcIndex]; if (npc == null || npc.isDestroyed()) { return; } SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); Console.WriteLine("Item on NPC " + npc.getId()); if (player.getInventory().getItemInSlot(slot) == item) { switch(npc.getId()) { case 519: // Bob BrokenBarrows.talkToBob(player, npc, player.getInventory().getItemInSlot(slot), 0); break; } } }
private void handleOperateItem(Player player, Packet packet) { int item = packet.readShortA(); int slot = packet.readLEShort(); int interfaceId = packet.readLEShort(); int childId = packet.readLEShort(); if (slot < 0 || slot > 13 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } ItemData.EQUIP equipSlot = (ItemData.EQUIP)slot; if (player.getEquipment().getItemInSlot(equipSlot) == item) { SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); if (JewelleryTeleport.useJewellery(player, player.getEquipment().getItemInSlot(equipSlot), slot, true)) { return; } else if (equipSlot == ItemData.EQUIP.CAPE && Skillcape.emote(player)) { return; } player.getPackets().sendMessage("This item isn't operable."); } }
private void handleDropItem(Player player, Packet packet) { int item = packet.readShortA(); int slot = packet.readShortA(); int interfaceId = packet.readLEShort(); int childId = packet.readUShort(); if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); if (player.getInventory().getItemInSlot(slot) == item) { player.getPackets().closeInterfaces(); if (ItemData.isPlayerBound(player.getInventory().getItemInSlot(slot))) { Item[] items = {new Item(player.getInventory().getItemInSlot(slot), 1)}; //player.getPackets().sendItems(94, 0, 93, items); player.getPackets().modifyText("Are you sure you want to destroy this item?", 94, 3); // Title //player.getPackets().modifyText("Yes", 94, 4); // Yes //player.getPackets().modifyText("No", 94, 5); // No player.getPackets().modifyText("", 94, 10); // Line 1 player.getPackets().modifyText("If you wish to get another Fire cape, you must", 94, 11); // Line 2 player.getPackets().modifyText("complete the Fight cave minigame again.", 94, 12); // Line 3 player.getPackets().modifyText("Fire Cape", 94, 13); // Item name player.getPackets().sendChatboxInterface(94); return; } int id = player.getInventory().getItemInSlot(slot); int amt = player.getInventory().getAmountInSlot(slot); GroundItem i = new GroundItem(id, amt, new Location(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ()), player); if (player.getInventory().deleteItem(id, slot, amt)) { if (!Server.getGroundItems().addToStack(id, amt, player.getLocation(), player)) { Server.getGroundItems().newEntityDrop(i); } } } }
private void handlePickupItem(Player player, Packet packet) { int x = packet.readLEShort(); int id = packet.readUShort(); int y = packet.readLEShortA(); Location l = new Location(x, y, player.getLocation().getZ()); SkillHandler.resetAllSkills(player); if (x < 1000 || y < 1000 | id < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } player.getPackets().closeInterfaces(); if(player.getLocation().Equals(l)) { Server.getGroundItems().pickupItem(player, id, player.getLocation()); return; } CoordinateEvent pickupItemCoordinateEvent = new CoordinateEvent(player, l); pickupItemCoordinateEvent.setAction(() => { Server.getGroundItems().pickupItem(player, id, player.getLocation()); }); Server.registerCoordinateEvent(pickupItemCoordinateEvent); }
private bool canWalk(Player player, Packet packet, bool following) { if (player.getTemporaryAttribute("smeltingBar") != null) { Smelting.setAmountToZero(player); return false; } else if (player.getTemporaryAttribute("teleporting") != null && player.getTemporaryAttribute("homeTeleporting") == null) { return false; } else if (player.isFrozen()) { player.getPackets().sendMessage("A magic force prevents you from moving!"); return false; } else if (player.getDuel() != null) { if (player.getDuel().ruleEnabled(DuelSession.RULE.NO_MOVEMENT)) { if (player.getDuel().getStatus() == 5 || player.getDuel().getStatus() == 6) { if(player.getTarget() == null) player.getPackets().sendMessage("Movement is disabled for this duel."); return false; } } } else if (player.getTemporaryAttribute("unmovable") != null || player.getTemporaryAttribute("cantDoAnything") != null) { return false; } else if (player.isDead()) { return false; } else if (player.getTeleportTo() != null) { return false; } return true; }
private void handleFirstClickObject(Player player, Packet packet) { int objectX = packet.readLEShort(); ushort objectId = (ushort)packet.readShortA(); int objectY = packet.readUShort(); if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); Console.WriteLine("First object click = " + objectId + " " + objectX + " " + objectY); if (RuneCraft.wantToRunecraft(player, objectId, objectX, objectY)) { return; } else if (RuneCraft.enterRift(player, objectId, objectX, objectY)) { return; } else if (RuneCraft.enterViaTiara(player, objectId, objectX, objectY)) { player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ())); return; } else if (RuneCraft.leaveAltar(player, objectId, objectX, objectY)) { return; } else if (Barrows.leaveCrypt(player, objectId, objectX, objectY)) { return; } else if (Barrows.tryOpenCoffin(player, objectId)) { return; } else if (Barrows.openTunnelDoor(player, objectId, objectX, objectY)) { return; } else if (Thieving.wantToThieveChest(player, objectId, objectX, objectY)) { return; } else if (Agility.doAgility(player, objectId, objectX, objectY)) { return; } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1)) { return; } else if (Server.getGlobalObjects().getDoors().useDoor(player, objectId, objectX, objectY, player.getLocation().getZ())) { return; } else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1)) { return; } else if (WildernessObelisks.useWildernessObelisk(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()))) { return; } if (player.getTemporaryAttribute("unmovable") != null) { return; } player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ())); switch(objectId) { case 2492: // essence mine portals RuneCraft.leaveEssMine(player, new Location(objectX, objectY, player.getLocation().getZ())); break; case 5959: case 5960: Wilderness.handleLever(player, objectId, new Location(objectX, objectY, player.getLocation().getZ())); break; case 733: // Wilderness web Wilderness.slashWeb(player, objectId, new Location(objectX, objectY, player.getLocation().getZ())); break; case 28089: // GE desk Server.getGrandExchange().clickDesk(player, objectX, objectY, 1); break; case 9359: // Tzhaar main exit TzHaar.exitTzhaar(player); break; case 31284: // Tzhaar entrance TzHaar.enterTzhaar(player); break; case 9357: // Fight cave exit FightCave.exitCave(player, objectX, objectY); break; case 9356: // Fight cave entrance FightCave.enterCave(player); break; case 9391: // Tzhaar fight pits viewing orb Server.getMinigames().getFightPits().useOrb(player, -1); break; case 9369: // Tzhaar pits main entrance case 9368: // Tzhaar pits game door Server.getMinigames().getFightPits().useDoor(player, objectId); break; case 3617: // Agility arena ladder AgilityArena.enterArena(player, objectX, objectY); break; case 3618: if (Location.atAgilityArena(player.getLocation())) { AgilityArena.exitArena(player, objectX, objectY); } break; case 6: // Dwarf multicannon DwarfCannon cannon = player.getCannon(); Location l = new Location(objectX, objectY, player.getLocation().getZ()); if (cannon == null || (cannon != null & !l.withinDistance(cannon.getLocation(), 2))) { player.getPackets().sendMessage("This isn't your cannon!"); break; } cannon.fireCannon(); break; case 7: //Cannon base only case 8: //Cannon stand case 9: //Cannon barrels DwarfCannon cannonPickup = player.getCannon(); Location cannonLocation = new Location(objectX, objectY, player.getLocation().getZ()); if (cannonPickup == null || (cannonPickup != null & !cannonLocation.withinDistance(cannonPickup.getLocation(), 2))) { player.getPackets().sendMessage("This isn't your cannon!"); break; } cannonPickup.pickupCannon(); break; case 11601: // Clay oven player.getPackets().modifyText("Please use the item on the oven.", 210, 1); player.getPackets().sendChatboxInterface(210); break; case 10284: // Barrows chest Barrows.openChest(player); break; case 4483: // Castle wars bank chest. case 21301: // Neitiznot bank chest player.getBank().openBank(false, objectX, objectY); break; case 1276: // Normal tree case 1278: // Normal tree case 2409: // Normal tree case 1277: // Normal tree with but different coloured stump case 3034: // Normal tree with dark stump case 3033: // Normal tree with dark stump case 10041: // Normal tree case 1282: // Dead tree case 1283: // Dead tree case 1284: // Dead tree case 1285: // Dead tree case 1286: // Dead tree case 1289: // Dead tree case 1290: // Dead tree case 1365: // Dead tree case 1383: // Dead tree case 1384: // Dead tree case 1291: // Dead tree case 3035: // Dead tree case 3036: // Dead tree case 1315: // Evergreen case 1316: // Evergreen case 1318: // Snowy Evergreen case 1319: // Snowy Evergreen case 1330: // Snow covered tree case 1331: // Snow covered tree case 1332: // Snow covered tree case 3879: // Evergreen from elf land case 3881: // Evergreen from elf land (slightly bigger than one above) case 3882: // Evergreen from elf land (slightly bigger than one above) case 3883: // Small Evergreen from elf land case 1280: // Normal tree orange stump case 14309: // PC game island tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true); break; case 1281: // Normal Oak tree case 3037: // Oak tree dark stump Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true); break; case 1308: // Normal Willow tree case 5551: // Normal Willow tree case 5552: // Normal Willow tree case 5553: // Normal Willow tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true); break; case 2023: // Achey tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true); break; case 9036: // Normal Teak tree case 15062: // Normal Teak tree (same as above?) Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 4, true); break; case 1307: // Normal Maple tree case 4674:// Exactly same as above Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 5, true); break; case 2289: // Normal Hollow tree case 4060: // Normal Hollow tree (bigger than above) Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 6, true); break; case 9034: // Normal Mahogany tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 7, true); break; case 21273: // Normal Arctic pine Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true); break; case 28951: // Normal Eucalyptus tree case 28952: // Normal Eucalyptus tree (smaller) case 28953: // Normal Eucalyptus tree (smallest) Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true); break; case 1309: // Yew tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true); break; case 1306: // Normal Magic tree Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true); break; case 3203: // Duel arena trapdoors. if (player.getDuel() != null) { player.getDuel().forfeitDuel(objectX, objectY); break; } break; case 7152: // Abyss tendrils. case 7144: AbyssObstacles.chopTendrils(player, objectX, objectY); break; case 7147: // Abyss tunnel. AbyssObstacles.useAgilityTunnel(player, objectX, objectY); break; case 7146: // Abyss eyes. case 7150: AbyssObstacles.passEyes(player, objectX, objectY); break; case 7151: // Abyss boil. case 7145: AbyssObstacles.burnBoil(player, objectX, objectY); break; case 7153: // Abyss mining rock. case 7143: AbyssObstacles.mineRock(player, objectX, objectY); break; case 2213: // Catherby bank booth. case 11402: // Varrock bank booth. case 11758: // Falador bank booth. case 36786: // Lumbridge bank booth. case 35647: // Al-Kharid bank booth. case 25808: // Seers bank booth. case 34752: // Ardougne bank booth. case 26972: // Edgeville bank booth. case 29085: // Ooglog bank booth. player.getBank().openBank(true, objectX, objectY); break; case 2491: // Essence rock Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true); break; case 11954: // Iron rocks case 11955: case 11956: case 14856: case 14857: case 14858: case 31071: case 31072: case 31073: case 32441: case 32442: case 32443: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 6, true); break; case 11948: // Silver rocks case 11949: case 11950: case 11165: case 11186: case 11187: case 11188: case 31074: case 31075: case 31076: case 32444: case 32445: case 32446: case 15579: case 15580: case 15581: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true); break; case 15504: // Clay rocks case 15503: case 15505: case 11189: case 11190: case 11191: case 31062: case 31063: case 31064: case 32429: case 32430: case 32431: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true); break; case 11960: // Copper rocks case 11961: case 11962: case 11936: case 11937: case 11938: case 31080: case 31081: case 31082: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true); break; case 11959: // Tin rocks case 11958: case 11957: case 11933: case 11934: case 11935: case 31077: case 31078: case 31079: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true); break; case 11930: // Coal rocks case 11931: case 11932: case 14850: case 14851: case 14852: case 31068: case 31069: case 31070: case 32426: case 32427: case 32428: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true); break; case 11951: // Gold rocks case 11952: case 11953: case 11183: case 11184: case 11185: case 31065: case 31066: case 31067: case 32432: case 32433: case 32434: case 15576: case 15577: case 15578: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true); break; case 11945: // Mithril rocks case 11946: case 11947: case 11942: case 11943: case 11944: case 14853: case 14854: case 14855: case 31086: case 31087: case 31088: case 32438: case 32439: case 32440: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true); break; case 11963: // Adamant rocks case 11964: case 11965: case 11939: case 11940: case 11941: case 14862: case 14863: case 14864: case 31083: case 31084: case 31085: case 32435: case 32436: case 32437: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 12, true); break; case 14859: // Rune rocks case 14860: case 14861: Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 13, true); break; case 11552: // Empty rocks case 11553: case 11554: case 11555: case 11556: case 31059: case 31060: case 31061: case 14832: case 14833: case 14834: case 33400: case 33401: case 33402: case 15582: case 15583: case 15584: Mining.displayEmptyRockMessage(player, new Location(objectX, objectY, player.getLocation().getZ())); break; case 23271: // Wilderness ditch Wilderness.crossDitch(player, objectX, objectY); break; } }