public static void interactWithAubury(Player p, Npc n, int option) { p.setEntityFocus(n.getClientIndex()); AreaEvent interactWithAuburyAreaEvent = new AreaEvent(p, n.getLocation().getX() - 1, n.getLocation().getY() - 1, n.getLocation().getX() + 1, n.getLocation().getY() + 1); interactWithAuburyAreaEvent.setAction(() => { n.setFaceLocation(p.getLocation()); p.setFaceLocation(n.getLocation()); p.setEntityFocus(65535); switch (option) { case 1: // talk to break; case 2: // trade p.setShopSession(new ShopSession(p, 3)); break; case 3: // teleport RuneCraft.teleportToEssMine(p, n); break; } }); Server.registerCoordinateEvent(interactWithAuburyAreaEvent); }
public static void crossDitch(Player p, int x, int y) { if (p.getTemporaryAttribute("unmovable") != null) { return; } AreaEvent crossDitchAreaEvent = new AreaEvent(p, x, y - 1, x, y + 2); crossDitchAreaEvent.setAction(() => { p.getPackets().closeInterfaces(); p.getWalkingQueue().resetWalkingQueue(); p.setTemporaryAttribute("unmovable", true); int newY = p.getLocation().getY() >= 3523 ? p.getLocation().getY() - 3 : p.getLocation().getY() + 3; int dir = newY == 3 ? 0 : 4; Location faceLocation = new Location(p.getLocation().getX(), dir == 3 ? 3523 : 3520, 0); p.setFaceLocation(faceLocation); Event crossDitchMoveEvent = new Event(500); crossDitchMoveEvent.setAction(() => { crossDitchMoveEvent.stop(); p.setLastAnimation(new Animation(6132)); int regionX = p.getUpdateFlags().getLastRegion().getRegionX(); int regionY = p.getUpdateFlags().getLastRegion().getRegionY(); int lX = (p.getLocation().getX() - ((regionX - 6) * 8)); int lY = (p.getLocation().getY() - ((regionY - 6) * 8)); ForceMovement movement = new ForceMovement(lX, lY, lX, newY, 33, 60, dir); p.setForceMovement(movement); p.setFaceLocation(new Location(x, y, 0)); Event crossDitchTeleportEvent = new Event(1250); crossDitchTeleportEvent.setAction(() => { crossDitchTeleportEvent.stop(); int playerY = p.getLocation().getY(); int nY = playerY >= 3523 ? 3520 : 3523; p.teleport(new Location(p.getLocation().getX(), nY, 0)); p.removeTemporaryAttribute("unmovable"); }); Server.registerEvent(crossDitchTeleportEvent); }); Server.registerEvent(crossDitchMoveEvent); }); Server.registerCoordinateEvent(crossDitchAreaEvent); }
public static void interactWithAliMorissaae(Player p, Npc n) { p.setEntityFocus(n.getClientIndex()); AreaEvent interactWithAliMorissaaeAreaEvent = new AreaEvent(p, n.getLocation().getX() - 1, n.getLocation().getY() - 1, n.getLocation().getX() + 1, n.getLocation().getY() + 1); interactWithAliMorissaaeAreaEvent.setAction(() => { n.setFaceLocation(p.getLocation()); p.setFaceLocation(n.getLocation()); p.setEntityFocus(65535); showAliDialogue(p, 205); }); Server.registerCoordinateEvent(interactWithAliMorissaaeAreaEvent); }
public static bool interactWithBoatNPC(Player p, Npc n) { int id = n.getId(); if (id != 4540 && id != 1304 && id != 2436 && id != 3781 && id != 1361 && id != 4962) { return false; } p.setEntityFocus(n.getClientIndex()); AreaEvent interactWithBoatNPCAreaEvent = new AreaEvent(p, n.getLocation().getX() - 1, n.getLocation().getY() - 1, n.getLocation().getX() + 1, n.getLocation().getY() + 1); interactWithBoatNPCAreaEvent.setAction(() => { n.setFaceLocation(p.getLocation()); p.setFaceLocation(n.getLocation()); p.setEntityFocus(65535); switch (n.getId()) { case 4540: // Home boat showBentleyDialogue(p, 240); break; case 1304: // Canifis sailor showCanifisSailorDialogue(p, 280); break; case 2436: // Waterbirth isle showJarvaldDialogue(p, 300); break; case 3781: // Pest control squire showSquireDialogue(p, 340); break; case 1361: // Warrior guild showArnorDialogue(p, 370); break; case 4962: // fremmenik shore showCaptainBarnabyDialogue(p, 410); break; } }); Server.registerCoordinateEvent(interactWithBoatNPCAreaEvent); return true; }
public static bool interactTzhaarNPC(Player p, Npc n, int option) { if (n.getId() != 2622 && n.getId() != 2620 && n.getId() != 2623 && n.getId() != 2619 && n.getId() != 2617 && n.getId() != 2618) { return false; } p.setEntityFocus(n.getClientIndex()); int npcX = n.getLocation().getX(); int npcY = n.getLocation().getY(); AreaEvent interactTzhaarNpcAreaEvent = new AreaEvent(p, npcX - 1, npcY - 1, npcX + 1, npcY + 1); interactTzhaarNpcAreaEvent.setAction(() => { p.setFaceLocation(n.getLocation()); p.setEntityFocus(65535); switch (n.getId()) { case 2619: // Bankers if (option == 1) { // Talk } else if (option == 2) { // Bank p.getBank().openBank(); } else if (option == 3) { // Collect } break; //TODO tzhaar stores case 2622: // Ore shop if (option == 1) { // Speak } else if (option == 2) { // Trade p.setShopSession(new ShopSession(p, 3)); } break; } }); Server.registerCoordinateEvent(interactTzhaarNpcAreaEvent); return true; }
public static void talkToBob(Player p, Npc npc, int item, int option) { p.setEntityFocus(npc.getClientIndex()); AreaEvent talkToBobAreaEvent = new AreaEvent(p, npc.getLocation().getX() - 1, npc.getLocation().getY() - 1, npc.getLocation().getX() + 1, npc.getLocation().getY() + 1); talkToBobAreaEvent.setAction(() => { npc.setFaceLocation(p.getLocation()); p.setFaceLocation(npc.getLocation()); p.setEntityFocus(65535); if (option == 0) { // use item on bob if (item > 0) { p.setTemporaryAttribute("bobsAxesBarrowItem", item); showBobDialogue(p, 101); } } else if (option == 1) { // talk showBobDialogue(p, 107); } else if (option == 2) { // trade p.setShopSession(new ShopSession(p, 4)); } }); Server.registerCoordinateEvent(talkToBobAreaEvent); }
private void handleThirdClickObject(Player player, Packet packet) { short id = packet.readLEShortA(); int y = packet.readLEShortA(); int x = packet.readLEShort(); 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("Third object click = " + id + " " + x + " " + y); if (LaddersAndStairs.useObject(player, id, new Location(x, y, player.getLocation().getZ()), 3)) { return; } switch (id) { case 28089: // GE desk Server.getGrandExchange().clickDesk(player, x, y, 3); break; } }
public static void slashWeb(Player p, ushort webId, Location webLocation) { AreaEvent slashWebAreaEvent = new AreaEvent(p, webLocation.getX() - 1, webLocation.getY() - 1, webLocation.getX() + 1, webLocation.getY() + 1); slashWebAreaEvent.setAction(() => { long lastSlash = 0; p.setFaceLocation(webLocation); if (p.getTemporaryAttribute("lastWebSlash") != null) { lastSlash = (int)p.getTemporaryAttribute("lastWebSlash"); } if (Environment.TickCount - lastSlash <= 800) { return; } if (Server.getGlobalObjects().originalObjectExists(webId, webLocation)) { p.setLastAnimation(new Animation(p.getAttackAnimation())); p.setTemporaryAttribute("lastWebSlash", Environment.TickCount); Event attemptCutWebEvent = new Event(500); attemptCutWebEvent.setAction(() => { attemptCutWebEvent.stop(); bool webExists = Server.getGlobalObjects().originalObjectExists(webId, webLocation); Server.getGlobalObjects().lowerHealth(webId, webLocation); if (Server.getGlobalObjects().originalObjectExists(webId, webLocation)) { p.getPackets().sendMessage("You fail to cut through the web."); } else { if (webExists) { // This means we slashed it, if !webExists, someone else slashed it in the last 500ms p.getPackets().sendMessage("You slash through the web!"); } } }); Server.registerEvent(attemptCutWebEvent); } }); Server.registerCoordinateEvent(slashWebAreaEvent); }
private void handleSecondClickObject(Player player, Packet packet) { int objectY = packet.readLEShortA(); int objectX = packet.readLEShort(); ushort objectId = packet.readUShort(); Console.WriteLine("Second object click = " + objectId + " " + objectX + " " + objectY); if (player.getTemporaryAttribute("unmovable") != null) { return; } if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) { return; } SkillHandler.resetAllSkills(player); player.getPackets().closeInterfaces(); player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ())); if (Thieving.wantToThieveStall(player, objectId, objectX, objectY)) { return; } else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1)) { return; } else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2)) { return; } switch (objectId) { case 28089: // GE desk Server.getGrandExchange().clickDesk(player, objectX, objectY, 2); break; case 25824: // Spinning wheel (Seers) case 36970: // Spinning wheel (Lumbridge Spinning.displaySpinningInterface(player); break; case 6: // Dwarf multicannon DwarfCannon cannon = player.getCannon(); Location l = new Location(objectX, objectY, player.getLocation().getZ()); if (cannon == null || (cannon != null & !l.Equals(cannon.getLocation()))) { player.getPackets().sendMessage("This isn't your cannon!"); break; } cannon.pickupCannon(); break; case 11666: // Falador furnace case 36956: // Lumbridge furnace Smelting.displaySmeltOptions(player); break; case 11959: // Tin rocks case 11958: case 11957: case 11933: case 11934: case 11935: case 31077: case 31078: case 31079: Mining.prospectRock(player, objectX, objectY, "tin"); break; case 11960: // Copper rocks case 11961: case 11962: case 11936: case 11937: case 11938: case 31080: case 31081: case 31082: Mining.prospectRock(player, objectX, objectY, "copper"); 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.prospectRock(player, objectX, objectY, "clay"); 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.prospectRock(player, objectX, objectY, "silver"); 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.prospectRock(player, objectX, objectY, "coal"); 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.prospectRock(player, objectX, objectY, "mithril"); 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.prospectRock(player, objectX, objectY, "iron"); break; case 14859: // Rune rocks case 14860: case 14861: Mining.prospectRock(player, objectX, objectY, "runite"); 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.prospectRock(player, objectX, objectY, "gold"); 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.prospectRock(player, objectX, objectY, "adamantite"); 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 2491: // Rune essence Mining.prospectRock(player, objectX, objectY, "Rune essence"); break; case 27663: // Duel arena bank chest. 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(false, objectX, objectY); break; } }
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; } }
public static void tagPillar(Player p, int pillarIndex) { AreaEvent tagPillarAreaEvent = new AreaEvent(p, AGILITY_ARENA_PILLARS[pillarIndex][1] - 1, AGILITY_ARENA_PILLARS[pillarIndex][2] - 1, AGILITY_ARENA_PILLARS[pillarIndex][1] + 1, AGILITY_ARENA_PILLARS[pillarIndex][2] + 1); tagPillarAreaEvent.setAction(() => { if (p.getLocation().getZ() == 3) { p.setFaceLocation(new Location(AGILITY_ARENA_PILLARS[pillarIndex][1], AGILITY_ARENA_PILLARS[pillarIndex][2], 3)); if (pillarIndex != currentPillar) { p.getPackets().sendMessage("You can only get a ticket when the flashing arrow is above the pillar!"); return; } if (p.isTaggedLastAgilityPillar()) { p.getPackets().sendMessage("You have already tagged this pillar, wait until the arrow moves again."); return; } int currentStatus = p.getAgilityArenaStatus(); if (currentStatus == 0) { p.getPackets().sendConfig(309, 4); p.getPackets().sendMessage("You get tickets by tagging more than one pillar in a row. Tag the next pillar!"); } else { p.getInventory().addItem(2996); p.getPackets().sendMessage("You recieve an Agility Arena ticket!"); } p.setAgilityArenaStatus(currentStatus == 0 ? 1 : 1); p.setTaggedLastAgilityPillar(true); } }); Server.registerCoordinateEvent(tagPillarAreaEvent); }
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; } } }
public static void teleport(Player p, LoadedLaddersAndStairs.HeightObject obj) { p.getWalkingQueue().resetWalkingQueue(); p.setTemporaryAttribute("unmovable", true); p.setFaceLocation(obj.getLocation()); if (obj.getAnimation() != -1) { p.setLastAnimation(new Animation(obj.getAnimation())); } Event teleportEvent = new Event(obj.getAnimation() != -1 ? obj.getTeleDelay() : 500); teleportEvent.setAction(() => { teleportEvent.stop(); p.teleport(obj.getTeleLocation()); p.removeTemporaryAttribute("unmovable"); }); Server.registerEvent(teleportEvent); }
public static void useLever(Player p, int id, Location leverLocation) { if (p.getTemporaryAttribute("teleporting") != null) { return; } foreach (LoadedLaddersAndStairs.Lever lever in LoadedLaddersAndStairs.levers) { if (lever.getId() == id) { if (lever.getLeverLocation().Equals(leverLocation)) { LoadedLaddersAndStairs.Lever l = lever; //TODO when in use it cant be used (in use = lever is facing down) CoordinateEvent useLeverCoordinateEvent = new CoordinateEvent(p, l.getLeverLocation()); useLeverCoordinateEvent.setAction(() => { p.setFaceLocation(l.getFaceLocation()); if (p.getTemporaryAttribute("teleblocked") != null) { p.getPackets().sendMessage("A magical force prevents you from teleporting!"); return; } else if ((p.getTemporaryAttribute("teleporting") != null)) { return; } p.setLastAnimation(new Animation(2140)); p.getPackets().closeInterfaces(); p.setTemporaryAttribute("teleporting", true); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); SkillHandler.resetAllSkills(p); l.setInUse(true); Event useLeverEvent = new Event(700); useLeverEvent.setAction(() => { useLeverEvent.stop(); p.setLastAnimation(new Animation(8939, 0)); p.setLastGraphics(new Graphics(1576, 0)); l.setInUse(false); Event setLeverTeleportEvent = new Event(1800); setLeverTeleportEvent.setAction(() => { setLeverTeleportEvent.stop(); p.teleport(l.getTeleLocation()); p.setLastAnimation(new Animation(8941, 0)); p.setLastGraphics(new Graphics(1577, 0)); Teleport.resetTeleport(p); }); Server.registerEvent(setLeverTeleportEvent); }); Server.registerEvent(useLeverEvent); }); Server.registerCoordinateEvent(useLeverCoordinateEvent); break; } } } }
public static bool talkToWarriorGuildNPC(Player p, Npc n, int slot) { if (n.getId() != 4289) { return false; } p.setEntityFocus(n.getClientIndex()); int npcX = n.getLocation().getX(); int npcY = n.getLocation().getY(); AreaEvent talkToWarriorGuildNPCAreaEvent = new AreaEvent(p, npcX - 1, npcY - 1, npcX + 1, npcY + 1); talkToWarriorGuildNPCAreaEvent.setAction(() => { p.setFaceLocation(n.getLocation()); p.setEntityFocus(65535); switch (n.getId()) { case 4289: // Kamfreena Dialogue.doDialogue(p, 77); break; } }); Server.registerCoordinateEvent(talkToWarriorGuildNPCAreaEvent); return true; }
public void clickDesk(Player p, int x, int y, int option) { AreaEvent clickDeskAreaEvent = new AreaEvent(p, x - 1, y - 1, x + 1, y + 1); clickDeskAreaEvent.setAction(() => { p.setFaceLocation(new Location(x, y, 0)); switch (option) { case 1: break; case 2: p.getPackets().closeInterfaces(); p.setGESession(new GESession(p)); break; } }); Server.registerCoordinateEvent(clickDeskAreaEvent); }
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 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..."); }
public static bool openTunnelDoor(Player player, int doorId, int x, int y) { if (doorId < 6716 || (doorId > 6731 && doorId < 6735) || doorId > 6750) { return false; } int index = getDoorIndex(doorId, x, y); int index2 = getOtherDoor(x, y); // index of the door next to the one you clicked. if (index == -1 || index2 == -1) { return false; } bool betweenDoors = player.getTemporaryAttribute("betweenDoors") != null; Location clickedDoor = new Location(DOOR_LOCATION[index][0], DOOR_LOCATION[index][1], 0); Location otherDoor = new Location(DOOR_LOCATION[index2][0], DOOR_LOCATION[index2][1], 0); int openDoorId = DOOR_OPEN_DIRECTION[index][0]; int openDoorId2 = DOOR_OPEN_DIRECTION[index2][0]; int openDirection = DOOR_OPEN_DIRECTION[index][2]; int newX = openDirection == 1 ? x + 1 : openDirection == 2 ? x : openDirection == 3 ? x - 1 : openDirection == 4 ? x : x; int newY = openDirection == 1 ? y : openDirection == 2 ? y + 1 : openDirection == 3 ? y : openDirection == 4 ? y - 1 : y; int newX2 = openDirection == 1 ? DOOR_LOCATION[index2][0] + 1 : openDirection == 2 ? DOOR_LOCATION[index2][0] : openDirection == 3 ? DOOR_LOCATION[index2][0] - 1 : openDirection == 4 ? DOOR_LOCATION[index2][0] : DOOR_LOCATION[index2][0]; int newY2 = openDirection == 1 ? DOOR_LOCATION[index2][1] : openDirection == 2 ? DOOR_LOCATION[index2][1] + 1 : openDirection == 3 ? DOOR_LOCATION[index2][1] : openDirection == 4 ? DOOR_LOCATION[index2][1] - 1 : DOOR_LOCATION[index2][1]; int[] doorStandCoordinates = getDoorCoordinates(player, index, index2, betweenDoors); int[] walkDirections = getWalkDirections(player, index, index2, betweenDoors); player.setFaceLocation(clickedDoor); AreaEvent doorsWalkAreaEvent = new AreaEvent(player, doorStandCoordinates[0], doorStandCoordinates[1], doorStandCoordinates[2] + 1, doorStandCoordinates[3] + 1); doorsWalkAreaEvent.setAction(() => { player.setTemporaryAttribute("unmovable", true); Event forceWalkDoorEvent = new Event(800); forceWalkDoorEvent.setAction(() => { player.getWalkingQueue().resetWalkingQueue(); foreach (Player p in Server.getPlayerList()) { //change door for all logged in players? uhh what? p.getPackets().removeObject(clickedDoor, openDoorId == 6713 ? 4 : 3, 0); p.getPackets().removeObject(otherDoor, openDoorId2 == 6732 ? 3 : 4, 0); p.getPackets().createObject(openDoorId, new Location(newX, newY, 0), DOOR_OPEN_DIRECTION[index][1], 0); p.getPackets().createObject(openDoorId2, new Location(newX2, newY2, 0), DOOR_OPEN_DIRECTION[index2][1], 0); } player.getWalkingQueue().forceWalk(walkDirections[0], walkDirections[1]); forceWalkDoorEvent.stop(); }); Server.registerEvent(forceWalkDoorEvent); Event betweenDoorsEvent = new Event(betweenDoors ? 2200 : 1900); betweenDoorsEvent.setAction(() => { int face = openDirection == 3 ? 0 : openDirection == 4 ? 3 : openDirection == 2 ? 1 : 2; foreach (Player p in Server.getPlayerList()) { p.getPackets().removeObject(new Location(newX, newY, 0), openDoorId == 6713 ? 4 : 3, 0); p.getPackets().removeObject(new Location(newX2, newY2, 0), openDoorId2 == 6732 ? 3 : 4, 0); p.getPackets().createObject(DOORS[index], clickedDoor, face, 0); p.getPackets().createObject(DOORS[index2], otherDoor, face, 0); } player.removeTemporaryAttribute("unmovable"); if (!betweenDoors) { player.getPackets().sendConfig(1270, 1); player.setTemporaryAttribute("betweenDoors", true); } else { player.getPackets().sendConfig(1270, 0); player.removeTemporaryAttribute("betweenDoors"); } betweenDoorsEvent.stop(); }); Server.registerEvent(betweenDoorsEvent); }); Server.registerCoordinateEvent(doorsWalkAreaEvent); return true; }
public static void handleLever(Player p, int id, Location loc) { if ((p.getTemporaryAttribute("teleporting") != null)) { return; } for (int i = 0; i < LEVER_COORDINATES.Length; i++) { Location loc1 = new Location(LEVER_COORDINATES[i][0], LEVER_COORDINATES[i][1], LEVER_COORDINATES[i][2]); if (loc.Equals(loc1)) { int index = i; Location loc2 = new Location(LEVER_FACE_COORDINATES[i][0], LEVER_FACE_COORDINATES[i][1], LEVER_FACE_COORDINATES[i][2]); CoordinateEvent wildernessHandleLeverCoordinateEvent = new CoordinateEvent(p, loc); wildernessHandleLeverCoordinateEvent.setAction(() => { p.setFaceLocation(loc2); displayWildernessLeverOptions(p, index); }); Server.registerCoordinateEvent(wildernessHandleLeverCoordinateEvent); return; } } LaddersAndStairs.useLever(p, id, loc); // Used for default levers/levers with no options }
public static void newMagicAttack(Player p, Entity target, int id, bool ancients) { int index = getSpellIndex(p, id, ancients); bool autoCasting = p.getTemporaryAttribute("autoCasting") != null; bool fakeNPC = target != null && target is Npc && ((Npc)target).getId() == 0; Entity lastAutocastEntity = null; bool frozen = false; if (index == -1) { return; } if (p.getTarget() == null) { if (autoCasting) { if (Location.inMultiCombat(p.getLocation())) { lastAutocastEntity = (Entity)p.getTemporaryAttribute("autocastEntity") == null ? null : (Entity)p.getTemporaryAttribute("autocastEntity"); if (lastAutocastEntity == null || lastAutocastEntity is Player) { p.removeTemporaryAttribute("autoCasting"); Combat.resetCombat(p, 1); return; } if (hitsMulti(p, index)) { Location location = (Location)p.getTemporaryAttribute("autocastLocation"); Entity newTarget = new Npc(0); newTarget.setLocation(location); p.setTarget(newTarget); newMagicAttack(p, newTarget, id, ancients); return; } } else { p.removeTemporaryAttribute("autoCasting"); Combat.resetCombat(p, 1); return; } } else { p.removeTemporaryAttribute("autoCasting"); Combat.resetCombat(p, 1); return; } } else { if (!canCastSpell(p, target, index, fakeNPC)) { p.removeTemporaryAttribute("autoCasting"); Combat.resetCombat(p, 1); return; } } int distance = 8; if (target is Player) { if (((Player)target).getSprites().getPrimarySprite() != -1) { distance = 8; } } if (!fakeNPC) { // we're actually attacking a real npc/player if (!p.getLocation().withinDistance(target.getLocation(), distance)) { p.getFollow().setFollowing(target); Event attemptMagicAttackEvent = new Event(500); int attemptMagicAttackCounter = 0; attemptMagicAttackEvent.setAction(() => { if (p.getLocation().withinDistance(target.getLocation(), distance) && p.getTarget() != null) { attemptMagicAttackEvent.stop(); newMagicAttack(p, target, id, ancients); return; } attemptMagicAttackCounter++; if (attemptMagicAttackCounter >= 12) { attemptMagicAttackEvent.stop(); } }); Server.registerEvent(attemptMagicAttackEvent); return; } } int timeSinceLastCast = autoCasting ? 3500 : 2000; if (Environment.TickCount - p.getLastMagicAttack() < timeSinceLastCast) { p.getWalkingQueue().resetWalkingQueue(); //return; } int time = p.getLastCombatType().Equals(Combat.CombatType.MAGE) ? 1550 : 600; if (Environment.TickCount - p.getLastAttack() < time) { int delay = p.getLastCombatType().Equals(Combat.CombatType.MAGE) ? 1350 : 800; Event attemptMagicAttackEvent = new Event(500); attemptMagicAttackEvent.setAction(() => { if (Environment.TickCount - p.getLastAttack() > delay) { attemptMagicAttackEvent.stop(); newMagicAttack(p, target, id, ancients); } }); Server.registerEvent(attemptMagicAttackEvent); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setLastCombatType(Combat.CombatType.MAGE); return; } if (fakeNPC && !monsterInArea(p, target)) { p.removeTemporaryAttribute("autoCasting"); Combat.resetCombat(p, 1); return; } int endGfx = END_GFX[index]; double damage = Misc.random(CombatFormula.getMagicHit(p, target, getSpellMaxHit(p, index))); bool mp = false; bool magicProtect = mp; if (target is Player) { mp = ((Player)target).getPrayers().getHeadIcon() == PrayerData.MAGIC; } if (magicProtect) { damage *= 0.60; } if (p.getEquipment().getItemInSlot(ItemData.EQUIP.WEAPON) == 8841) { damage *= 1.10; // void mace 10% hit increase. } if (damage == 0 && index != 41 && index != 42 && index != 43 && index != 44 && index != 45 && index != 46 && index != 47) { endGfx = 85; } if (!deleteRunes(p, RUNES[index], RUNE_AMOUNTS[index])) { p.setTarget(null); return; } p.getFollow().setFollowing(null); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setFaceLocation(target.getLocation()); if (HANDS_GFX[index] != -1) { p.setLastGraphics(new Graphics(HANDS_GFX[index], 0, getStartingGraphicHeight(index))); } p.setLastAnimation(new Animation(SPELL_ANIM[index])); p.getPackets().closeInterfaces(); if (target is Player) { ((Player)target).getPackets().closeInterfaces(); } target.setAttacker(p); p.setTarget(target); target.setLastAttacked(Environment.TickCount); p.setLastAttack(Environment.TickCount); p.setLastMagicAttack(Environment.TickCount); p.setCombatTurns(p.getAttackSpeed()); Combat.setSkull(p, target); if (damage > 0) { frozen = freezeTarget(index, target); if (!frozen && index == 31) { endGfx = 1677; } } if (AIR_GFX[index] != -1 || ((index == 31 || index == 27) && target is Player && ((Player)target).getWalkingQueue().isRunning())) { sendProjectile(index, target, p); } if (damage > target.getHp()) { damage = target.getHp(); } if (index == 47 && Misc.random(2) == 0) { endGfx = 85; } Combat.checkIfWillDie(target, damage); Event doMagicAttackEvent = new Event(getSpellHitDelay(index)); doMagicAttackEvent.setAction(() => { doMagicAttackEvent.stop(); if (p == null || p.isDead() || !fakeNPC && (target.isDead() || target.isHidden() || target.isDestroyed())) { return; } if (target.isAutoRetaliating() && target.getTarget() == null && damage > 0) { if (target is Npc) { } else { if (((Player)target).getTemporaryAttribute("autoCastSpell") != null) { int autoCastSpell = (int)((Player)target).getTemporaryAttribute("autoCastSpell"); ((Player)target).setTemporaryAttribute("autoCasting", true); target.setTarget(p); MagicCombat.newMagicAttack((Player)target, p, autoCastSpell, ((Player)target).getTemporaryAttribute("autoCastAncients") != null); } } target.getFollow().setFollowing(p); target.setEntityFocus(p.getClientIndex()); if ((target.getCombatTurns() <= (target.getAttackSpeed() / 2) || target.getCombatTurns() >= (target.getAttackSpeed()))) { target.setCombatTurns(target.getAttackSpeed() / 2); } target.setTarget(p); if (target is Player) { ((Player)target).getWalkingQueue().resetWalkingQueue(); ((Player)target).getPackets().clearMapFlag(); } } addMagicXp(p, target, damage, index, true); target.setLastGraphics(new Graphics(endGfx, 0, getGroundHeight(index, endGfx))); if (index == 47 && endGfx != 85) { // teleblock if (target is Player) { teleblockPlayer(p, (Player)target); } } if (damage != 0) { Combat.checkRecoil(p, target, damage); Combat.checkSmite(p, target, damage); Combat.checkVengeance(p, target, damage); hitInMulti(p, target, index); applyMiasmicEffects(p, target, index); if ((target.getCombatTurns() > 2 || target.getCombatTurns() < 0) && !target.isDead()) { target.setLastAnimation(new Animation(target.getDefenceAnimation())); } if (index != 27) { target.hit((int)damage); if (index == 18 || index == 22 || index == 26 || index == 30) { p.heal(Convert.ToInt32(damage / 4)); } } else if (index == 27) { Event doHitEvent = new Event(1000); doHitEvent.setAction(() => { doHitEvent.stop(); target.hit((int)damage); }); Server.registerEvent(doHitEvent); } } }); Server.registerEvent(doMagicAttackEvent); if (p.getTemporaryAttribute("autoCasting") != null) { if (p.getTemporaryAttribute("autoCastSpell") != null) { if (id != (int)p.getTemporaryAttribute("autoCastSpell")) { p.setTarget(null); return; } } if (!fakeNPC) { p.setTemporaryAttribute("autocastLocation", target.getLocation()); p.setTemporaryAttribute("autocastEntity", target); } Event autoCastSpellEvent = new Event(3500); autoCastSpellEvent.setAction(() => { autoCastSpellEvent.stop(); if (p.getTemporaryAttribute("autoCasting") != null && p.getTemporaryAttribute("autoCastSpell") != null) { int autoCastSpell = (int)p.getTemporaryAttribute("autoCastSpell"); MagicCombat.newMagicAttack(p, p.getTarget(), autoCastSpell, p.getTemporaryAttribute("autoCastAncients") != null); } }); Server.registerEvent(autoCastSpellEvent); } else { p.setTarget(null); } }
public void changeDoor(Player p, Door door) { p.setFaceLocation(door.getDoorLocation()); updateDoorForPlayers(door); }
public static void doObstacle(Player p, int index) { if (p.getTemporaryAttribute("unmovable") != null) { return; } switch (index) { case 0: // 3 planks, northern (east side) case 1: // 3 planks, middle (east side) case 2: // 3 planks, southern (east side) case 3: // 3 planks, northern (west side) case 4: // 3 planks, middle (west side) case 5: // 3 planks, southern (west side) int logXCoord = index <= 2 ? (int)AGILITY_ARENA_OBJECTS[index][1] + 1 : (int)AGILITY_ARENA_OBJECTS[index][1] - 1; int logDirectionX = index <= 2 ? -7 : +7; CoordinateEvent plankObstaclesCoordinateEvent = new CoordinateEvent(p, new Location(logXCoord, (int)AGILITY_ARENA_OBJECTS[index][2], 3)); plankObstaclesCoordinateEvent.setAction(() => { bool running = p.getWalkingQueue().isRunToggled(); p.getWalkingQueue().setRunToggled(false); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); p.getAppearance().setWalkAnimation(155); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.getWalkingQueue().forceWalk(logDirectionX, 0); Event plankObstaclesEvent = new Event(4300); plankObstaclesEvent.setAction(() => { plankObstaclesEvent.stop(); p.removeTemporaryAttribute("unmovable"); p.getAppearance().setWalkAnimation(-1); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)AGILITY_ARENA_OBJECTS[index][3]); p.getWalkingQueue().setRunToggled(running); }); Server.registerEvent(plankObstaclesEvent); }); Server.registerCoordinateEvent(plankObstaclesCoordinateEvent); break; case 6: //Handholds obstacle east of planks. case 7: //Handholds obstacle west of planks. int handHoldsDirectionX = 1; int handHoldsDirectionY = 1; if (index == 6) { handHoldsDirectionX = -1; handHoldsDirectionY = +1; } else if (index == 7) { handHoldsDirectionX = +1; handHoldsDirectionY = -1; } CoordinateEvent handholdsObstacleCoordinateEvent = new CoordinateEvent(p, new Location((int)AGILITY_ARENA_OBJECTS[index][1], (int)AGILITY_ARENA_OBJECTS[index][2], 3)); handholdsObstacleCoordinateEvent.setAction(() => { bool running = p.getWalkingQueue().isRunToggled(); p.getWalkingQueue().setRunToggled(false); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); p.setLastAnimation(new Animation(1121)); p.setFaceLocation(new Location(p.getLocation().getX(), p.getLocation().getY() + handHoldsDirectionY, 3)); Event handholdsObstaclesEvent = new Event(700); int handholdsObstaclesCounter = 0; handholdsObstaclesEvent.setAction(() => { p.setLastAnimation(new Animation(1122)); int regionX = p.getUpdateFlags().getLastRegion().getRegionX(); int regionY = p.getUpdateFlags().getLastRegion().getRegionY(); int lX = (p.getLocation().getX() - ((regionX - 6) * 8)); int lY = (p.getLocation().getY() - ((regionY - 6) * 8)); p.setForceMovement(new ForceMovement(lX, lY, lX + handHoldsDirectionX, lY, 0, 5, 0)); if (handholdsObstaclesCounter++ >= 7) { p.setLastAnimation(new Animation(65535)); handholdsObstaclesEvent.stop(); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)AGILITY_ARENA_OBJECTS[index][3]); p.getWalkingQueue().setRunToggled(running); return; } Event teleportEvent = new Event(500); teleportEvent.setAction(() => { teleportEvent.stop(); p.teleport(new Location(p.getLocation().getX() + handHoldsDirectionX, p.getLocation().getY(), 3)); }); Server.registerEvent(teleportEvent); }); Server.registerEvent(handholdsObstaclesEvent); }); Server.registerCoordinateEvent(handholdsObstacleCoordinateEvent); break; } }