public static void enterCave(Player p) { AreaEvent enterCaveAreaEvent = new AreaEvent(p, 2438, 5168, 2439, 5168); enterCaveAreaEvent.setAction(() => { /* * Fight cave is 20k squares from the original place, then another (200 * playerIndex) squares west. */ Location instanceLocation = new Location((20000 + 2413) + (200 * p.getIndex()), 20000 + 5116, 0); p.teleport(instanceLocation); p.setFightCave(new FightCaveSession(p)); Event caveNpcEvent = new Event(600); caveNpcEvent.setAction(() => { caveNpcEvent.stop(); p.getPackets().sendNPCHead(2617, 242, 1); p.getPackets().modifyText("TzHaar-Mej-Jal", 242, 3); p.getPackets().modifyText("You're on your own now, JalYt.", 242, 4); p.getPackets().modifyText("Pepare to fight for your life!", 242, 5); p.getPackets().animateInterface(9827, 242, 1); p.getPackets().sendChatboxInterface2(242); }); Server.registerEvent(caveNpcEvent); }); Server.registerCoordinateEvent(enterCaveAreaEvent); }
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 void exitCave(Player p, int objectX, int objectY) { AreaEvent exitCaveAreaEvent = new AreaEvent(p, objectX, objectY - 1, objectX + 2, objectY - 1); exitCaveAreaEvent.setAction(() => { p.setTemporaryAttribute("unmovable", true); Event teleFromCaveEvent = new Event(600); teleFromCaveEvent.setAction(() => { teleFromCaveEvent.stop(); p.getFightCave().teleFromCave(true); }); Server.registerEvent(teleFromCaveEvent); }); Server.registerCoordinateEvent(exitCaveAreaEvent); }
public static bool wantToFish(Player p, Npc npc, bool secondOption) { for (int i = 0; i < SPOT_IDS.Length; i++) { if (npc.getId() == SPOT_IDS[i]){ p.setFaceLocation(npc.getLocation()); AreaEvent startFishingAreaEvent = new AreaEvent(p, npc.getLocation().getX() - 1, npc.getLocation().getY() - 1, npc.getLocation().getX() + 1, npc.getLocation().getY() + 1); startFishingAreaEvent.setAction(() => { startFishing(p, i, npc, true, secondOption); }); Server.registerCoordinateEvent(startFishingAreaEvent); return true; } } return false; }
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; }
private static void thieveNpc(Player p, Npc npc, int index) { AreaEvent thieveNpcAreaEvent = new AreaEvent(p, npc.getLocation().getX()-1, npc.getLocation().getY()-1, npc.getLocation().getX()+1, npc.getLocation().getY()+1); thieveNpcAreaEvent.setAction(() => { if (!canThieveNpc(p, npc, index)) { return; } p.setFaceLocation(npc.getLocation()); p.setLastAnimation(new Animation(881)); p.getPackets().sendMessage("You attempt to pick the " + NPC_NAMES[index] + " pocket..."); p.setTemporaryAttribute("lastPickPocket", Environment.TickCount); Event thieveNpcEvent = new Event(1000); thieveNpcEvent.setAction(() => { thieveNpcEvent.stop(); if (!p.getLocation().withinDistance(npc.getLocation(), 2)) { return; } if (successfulThieve(p, index, false)) { int rewardIndex = misc.random(NPC_REWARD[index].Length - 1); int reward = NPC_REWARD[index][rewardIndex]; int rewardAmount = NPC_REWARD_AMOUNT[index][rewardIndex]; if (index == 7) { // Master farmer. if (misc.random(15) == 0) { reward = HERB_SEEDS[misc.random(HERB_SEEDS.Length - 1)]; } } p.getSkills().addXp(Skills.SKILL.THIEVING, NPC_XP[index]); p.getInventory().addItem(reward, rewardAmount); p.getPackets().sendMessage("You pick the " + NPC_NAMES[index] + " pocket."); } else { p.getWalkingQueue().resetWalkingQueue(); p.getPackets().sendMessage("You fail to pick the " + NPC_NAMES[index] + " pocket."); p.getPackets().sendMessage("You've been stunned!"); npc.setForceText("What do you think you're doing?"); p.setTemporaryAttribute("unmovable", true); p.setTemporaryAttribute("stunned", true); p.setLastGraphics(new Graphics(80, 0, 100)); p.setLastAnimation(new Animation(p.getDefenceAnimation())); p.hit(1); npc.setFaceLocation(p.getLocation()); Event removeStunEvent = new Event(5000); removeStunEvent.setAction(() => { removeStunEvent.stop(); p.removeTemporaryAttribute("unmovable"); p.removeTemporaryAttribute("stunned"); p.setLastGraphics(new Graphics(65535)); }); Server.registerEvent(removeStunEvent); } }); Server.registerEvent(thieveNpcEvent); }); Server.registerCoordinateEvent(thieveNpcAreaEvent); }
private static void thieveChest(Player p, int index, ushort chestId, int x, int y) { AreaEvent thieveChestAreaEvent = new AreaEvent(p, x-1, y-1, x+1, y+1); thieveChestAreaEvent.setAction(() => { p.setFaceLocation(new Location(x, y, p.getLocation().getZ())); if (!canThieveChest(p, index, chestId, x, y)) { return; } p.getPackets().sendMessage("You attempt to pick the chest lock.."); p.setLastAnimation(new Animation(833)); Event thieveChestEvent = new Event(1000); thieveChestEvent.setAction(() => { thieveChestEvent.stop(); if (misc.random(5) == 0) { p.hit(p.getSkills().getMaxLevel(Skills.SKILL.HITPOINTS) / 10); p.setForceText("Ouch!"); p.getPackets().sendMessage("You activate a trap whilst trying to pick the lock!"); return; } if (Server.getGlobalObjects().originalObjectExists(chestId, new Location(x, y, 0))) { Server.getGlobalObjects().lowerHealth(chestId, new Location(x, y, 0)); for (int i = 0; i < CHEST_REWARD[index].Length; i++) { p.getInventory().addItem(CHEST_REWARD[index][i], CHEST_REWARD_AMOUNTS[index][i]); } p.getSkills().addXp(Skills.SKILL.THIEVING, CHEST_XP[index]); p.getPackets().sendMessage("You successfully pick the lock and loot the chest!"); } }); Server.registerEvent(thieveChestEvent); }); Server.registerCoordinateEvent(thieveChestAreaEvent); }
public static void doCourse(Player p, int objectX, int objectY, object[] objectArray) { if (p.getTemporaryAttribute("unmovable") != null) { return; } switch((int)objectArray[0]) { case 2309: //Entrance log CoordinateEvent startEntranceLogCoordinateEvent = new CoordinateEvent(p, new Location((int)objectArray[1], (int)objectArray[2], 0)); startEntranceLogCoordinateEvent.setAction(() => { bool running = p.getWalkingQueue().isRunToggled(); Event comeToLogEvent = new Event(500); comeToLogEvent.setAction(() => { p.getWalkingQueue().setRunToggled(false); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); p.getWalkingQueue().forceWalk(0, 1); //go past gate, no animation yet. comeToLogEvent.stop(); }); Server.registerEvent(comeToLogEvent); int doLogWalkCounter = 0; Event doLogWalkEvent = new Event(800); doLogWalkEvent.setAction(() => { if (doLogWalkCounter == 0) { //start the animation p.getAppearance().setWalkAnimation(155); p.getUpdateFlags().setAppearanceUpdateRequired(true); doLogWalkEvent.setTick(500); //500 milliseconds required to make animations realistic. } else if(doLogWalkCounter < 16) { //15 steps foward, 1 step is just quickfix TODO: Add gate opener. p.getWalkingQueue().forceWalk(0, 1); } else if(doLogWalkCounter == 17) { //stop the animation add the xp. doLogWalkEvent.stop(); p.getAppearance().setWalkAnimation(-1); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); p.getWalkingQueue().setRunToggled(running); } doLogWalkCounter++; }); Server.registerEvent(doLogWalkEvent); }); Server.registerCoordinateEvent(startEntranceLogCoordinateEvent); break; case 2288: // Tunnel AreaEvent startTunnelAreaEvent = new AreaEvent(p, 3003, 3937, 3005, 3938); startTunnelAreaEvent.setAction(() => { int newMove = 0; int pX = p.getLocation().getX(); int pY = p.getLocation().getY(); if (pX == objectX + 1 && pY == objectY) // right side newMove = 1; else if (pX == objectX - 1 && pY == objectY) // left side newMove = 2; if (newMove > 0) { int walkTunnelCounter = 0; Event walkTunnelEvent = new Event(500); walkTunnelEvent.setAction(() => { if (walkTunnelCounter == 0) { p.getWalkingQueue().forceWalk(0, -1); } else if (walkTunnelCounter == 1) { p.getWalkingQueue().forceWalk(newMove == 1 ? -1 : +1, 0); } else { doCourse(p, objectX, objectY, objectArray); walkTunnelEvent.stop(); } walkTunnelCounter++; }); Server.registerEvent(walkTunnelEvent); return; } Event squeezeIntoPipeEvent = new Event(0); squeezeIntoPipeEvent.setAction(() => { squeezeIntoPipeEvent.stop(); p.getPackets().sendMessage("You squeeze into the pipe..."); 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, lY + 3, 10, 60, 0)); p.setFaceLocation(new Location(p.getLocation().getX(), p.getLocation().getY() + 1, 0)); p.setLastAnimation(new Animation(10578)); bool running = p.getWalkingQueue().isRunToggled(); p.getWalkingQueue().setRunToggled(false); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); Event squeezeOutOfPipeEvent = new Event(1000); int squeezeOutOfPipeCounter = 0; squeezeOutOfPipeEvent.setAction(() => { if (squeezeOutOfPipeCounter == 0) { p.teleport(new Location(p.getLocation().getX(), p.getLocation().getY() + 9, 0)); squeezeOutOfPipeEvent.setTick(850); } else if (squeezeOutOfPipeCounter == 1) { ForceMovement movement = new ForceMovement(lX, lY + 9, lX, lY + 12, 10, 90, 0); p.setForceMovement(movement); squeezeOutOfPipeEvent.setTick(1100); } else if (squeezeOutOfPipeCounter == 2) { squeezeOutOfPipeEvent.setTick(500); p.setLastAnimation(new Animation(10579)); p.setForceMovement(new ForceMovement(lX, lY + 12, lX, lY + 13, 10, 40, 0)); } else { p.getPackets().sendMessage("...You squeeze out of the pipe."); squeezeOutOfPipeEvent.stop(); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); p.getWalkingQueue().setRunToggled(running); p.teleport(new Location(3004, 3950, 0)); } squeezeOutOfPipeCounter++; }); Server.registerEvent(squeezeOutOfPipeEvent); }); Server.registerEvent(squeezeIntoPipeEvent); }); Server.registerCoordinateEvent(startTunnelAreaEvent); break; case 2283: // Rope swing AreaEvent startRopeSwingAreaEvent = new AreaEvent(p, 3004, 3951, 3006, 3953); startRopeSwingAreaEvent.setAction(() => { int newMove = 0; int pX = p.getLocation().getX(); int pY = p.getLocation().getY(); if (pX == objectX - 1 && pY == objectY + 1) // front left newMove = 1; else if (pX == objectX + 1 && pY == objectY + 1) // front right newMove = 2; else if (pX == objectX - 1 && pY == objectY) // back left newMove = 3; else if (pX == objectX + 1 && pY == objectY) // back right newMove = 4; else if (pX == objectX && pY == objectY - 1) // very back middle newMove = 5; else if (pX == objectX && pY == objectY) // middle newMove = 6; if (newMove > 0) { int path = newMove; int walkRopeSwingCounter = 0; Event walkRopeSwingEvent = new Event(500); walkRopeSwingEvent.setAction(() => { p.setFaceLocation(new Location(3005, 3958, 0)); if (path == 1 || path == 2) { if (walkRopeSwingCounter == 0) { p.getWalkingQueue().forceWalk(path == 1 ? +1 : -1, 0); } else if (walkRopeSwingCounter >= 1) { walkRopeSwingEvent.stop(); doCourse(p, objectX, objectY, objectArray); } } else if (path == 3 || path == 4) { if (walkRopeSwingCounter == 0) { p.getWalkingQueue().forceWalk(path == 3 ? +1 : -1, +1); } else if (walkRopeSwingCounter >= 1) { walkRopeSwingEvent.stop(); doCourse(p, objectX, objectY, objectArray); } } else if (path == 5 || path == 6) { if (walkRopeSwingCounter == 0) { p.getWalkingQueue().forceWalk(0, path == 5 ? +2 : +1); } else if (walkRopeSwingCounter >= 1) { walkRopeSwingEvent.stop(); doCourse(p, objectX, objectY, objectArray); } } walkRopeSwingCounter++; }); Server.registerEvent(walkRopeSwingEvent); return; } Event setupRopeSwingEvent = new Event(0); setupRopeSwingEvent.setAction(() => { setupRopeSwingEvent.stop(); bool running = p.getWalkingQueue().isRunToggled(); 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)); int newY = p.getLocation().getY() + 5; int dir = 4; p.setLastAnimation(new Animation(751)); p.setForceMovement(new ForceMovement(lX, lY, lX, lY+5, 25, 57, dir)); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); Location objectLocation = new Location(3005, 3952, 0); Event doRopeSwingAnimationEvent = new Event(30); doRopeSwingAnimationEvent.setAction(() => { doRopeSwingAnimationEvent.stop(); foreach(Player nearbyPlayers in Server.getPlayerList()) { if (nearbyPlayers != null) { nearbyPlayers.getPackets().newObjectAnimation(objectLocation, 497); } } }); Server.registerEvent(doRopeSwingAnimationEvent); Event finishRopeSwingEvent = new Event(1300); finishRopeSwingEvent.setAction(() => { finishRopeSwingEvent.stop(); p.getAppearance().setWalkAnimation(-1); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.removeTemporaryAttribute("unmovable"); p.teleport(new Location(p.getLocation().getX(), newY, 0)); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); p.getWalkingQueue().setRunToggled(running); }); Server.registerEvent(finishRopeSwingEvent); }); Server.registerEvent(setupRopeSwingEvent); }); Server.registerCoordinateEvent(startRopeSwingAreaEvent); break; case 37704: // Stepping stones CoordinateEvent startSteppingStonesCoordinateEvent = new CoordinateEvent(p, new Location(3002, 3960, 0)); startSteppingStonesCoordinateEvent.setAction(() => { bool running = p.getWalkingQueue().isRunToggled(); int dir = 4; p.getWalkingQueue().setRunToggled(false); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.setTemporaryAttribute("unmovable", true); int stepStoneCounter = 0; Event stepStoneEvent = new Event(600); stepStoneEvent.setAction(() => { if (stepStoneCounter >= 6) { stepStoneEvent.stop(); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); p.getWalkingQueue().setRunToggled(running); } else { 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.setLastAnimation(new Animation(741)); p.setForceMovement(new ForceMovement(lX, lY, lX - 1, lY, 5, 35, dir)); Event teleportStepStoneEvent = new Event(550); teleportStepStoneEvent.setAction(() => { teleportStepStoneEvent.stop(); p.teleport(new Location(p.getLocation().getX()-1, p.getLocation().getY(), 0)); }); Server.registerEvent(teleportStepStoneEvent); stepStoneEvent.setTick(stepStoneCounter == 6 ? 300 : 1100); stepStoneCounter++; p.setFaceLocation(new Location(2995, 3960, 0)); } }); Server.registerEvent(stepStoneEvent); }); Server.registerCoordinateEvent(startSteppingStonesCoordinateEvent); break; case 2297: // Log AreaEvent startLogAreaEvent = new AreaEvent(p, 3001, 3944, 3002, 3946); startLogAreaEvent.setAction(() => { int distanceToWalk = p.getLocation().getX() == 3001 ? -7 : -8; int newMove = 0; int pX = p.getLocation().getX(); int pY = p.getLocation().getY(); if (pX == objectX && pY == objectY - 1) newMove = 1; else if (pX == objectX && pY == objectY + 1) newMove = 2; else if (pX == objectX + 1 && pY == objectY + 1) newMove = 3; else if (pX == objectX + 1 && pY == objectY - 1) newMove = 4; if (newMove > 0) { int path = newMove; int doLogWalkCounter = 0; Event doLogWalkEvent = new Event(500); doLogWalkEvent.setAction(() => { if (doLogWalkCounter == 0) { if (path == 1 || path == 2) { p.getWalkingQueue().forceWalk(0, path == 1 ? +1 : -1); } else if (path == 3 || path == 4) { p.getWalkingQueue().forceWalk(0, path == 4 ? +1 : -1); } } else { doCourse(p, objectX, objectY, objectArray); doLogWalkEvent.stop(); } doLogWalkCounter++; }); Server.registerEvent(doLogWalkEvent); return; } Event doLogAnimationEvent = new Event(0); doLogAnimationEvent.setAction(() => { doLogAnimationEvent.stop(); 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(distanceToWalk, 0); int delay = distanceToWalk == -7 ? 4100 : 4600; Event doLogFinishEvent = new Event(delay); doLogFinishEvent.setAction(() => { doLogFinishEvent.stop(); p.getAppearance().setWalkAnimation(-1); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); p.getWalkingQueue().setRunToggled(running); }); Server.registerEvent(doLogFinishEvent); }); Server.registerEvent(doLogAnimationEvent); }); Server.registerCoordinateEvent(startLogAreaEvent); break; case 2328: // Rocks AreaEvent startRocksAreaEvent = new AreaEvent(p, 2993, 3937, 2995, 3937); startRocksAreaEvent.setAction(() => { int doRocksAnimationCounter = 0; Event doRocksAnimationEvent = new Event(0); doRocksAnimationEvent.setAction(() => { if (doRocksAnimationCounter == 0) { p.setFaceLocation(new Location(p.getLocation().getX(), p.getLocation().getY() - 5, 0)); doRocksAnimationCounter++; doRocksAnimationEvent.setTick(500); return; } doRocksAnimationEvent.stop(); p.setLastAnimation(new Animation(740)); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); p.getAppearance().setWalkAnimation(0); p.getUpdateFlags().setAppearanceUpdateRequired(true); p.setTemporaryAttribute("unmovable", true); 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, lY - 4, 5, 80, 4)); Event finishRocksEvent = new Event(1500); finishRocksEvent.setAction(() => { finishRocksEvent.stop(); p.teleport(new Location(p.getLocation().getX(), p.getLocation().getY() - 4, 0)); p.setLastAnimation(new Animation(65535)); p.removeTemporaryAttribute("unmovable"); p.getSkills().addXp(Skills.SKILL.AGILITY, (double)objectArray[7]); }); Server.registerEvent(finishRocksEvent); }); Server.registerEvent(doRocksAnimationEvent); }); Server.registerCoordinateEvent(startRocksAreaEvent); break; } }
public static bool openSlayerShop(Player p, Npc npc) { int id = npc.getId(); if (id != 8273 && id != 1597 && id != 8274 && id != 1598 && id != 8275 || p.isDead()) { return false; } p.setEntityFocus(npc.getClientIndex()); AreaEvent openSlayerShopAreaEvent = new AreaEvent(p, npc.getLocation().getX()-1, npc.getLocation().getY()-1, npc.getLocation().getX()+1, npc.getLocation().getY()+1); openSlayerShopAreaEvent.setAction(() => { p.setFaceLocation(npc.getLocation()); npc.setFaceLocation(p.getLocation()); p.setShopSession(new ShopSession(p, 2)); }); Server.registerCoordinateEvent(openSlayerShopAreaEvent); return true; }
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 openChest(Player player) { Player p = player; if (p.getLocation().getZ() != 0 || p.getTemporaryAttribute("lootedBarrowChest") != null) { return; } if (!p.getLocation().inArea(3551, 9694, 3552, 9694)) { AreaEvent openChestAreaEvent = new AreaEvent(p, 3551, 9694, 3552, 9694); openChestAreaEvent.setAction(() => { openChest(p); }); Server.registerCoordinateEvent(openChestAreaEvent); return; } for (int i = 0; i < 6; i++) { if (!p.getBarrowBrothersKilled(i)) { foreach(Npc n in Server.getNpcList()) { if (n != null) { if (n.getId() == BROTHER_ID[i]) { if (n.getOwner().Equals(p)) { return; } } } } Npc npc = new Npc(BROTHER_ID[i]); npc.setLocation(p.getLocation()); npc.setEntityFocus(p.getClientIndex()); npc.setOwner(p); npc.setTarget(p); npc.setCombatTurns(npc.getAttackSpeed()); Server.getNpcList().Add(npc); p.getPackets().setArrowOnEntity(1, npc.getClientIndex()); return; } } p.getPackets().sendMessage("You begin to lift open the massive chest..."); p.setLastAnimation(new Animation(833)); Event rewardEarthQuakeEvent = new Event(1000); rewardEarthQuakeEvent.setAction(() => { rewardEarthQuakeEvent.stop(); p.getPackets().sendMessage("..You loot the chest and the tomb begins to shake!"); p.getPackets().createObject(6775, new Location(3551, 9695, 0), 0, 10); getBarrowReward(p); startEarthQuake(p); }); Server.registerEvent(rewardEarthQuakeEvent); }
public void forfeitDuel(int x, int y) { // if (status == 5 || status == 4) { AreaEvent forfeitDuelAreaEvent = new AreaEvent(player, x-1, y-1, x+1, y+1); forfeitDuelAreaEvent.setAction(() => { if (ruleEnabled(RULE.NO_FORFEIT)) { player.getPackets().sendMessage("You cannot forfeit this duel!"); return; } player.getPackets().modifyText("Forfeit duel?", 228, 1); player.getPackets().modifyText("Yes", 228, 2); player.getPackets().modifyText("No", 228, 3); player.getPackets().sendChatboxInterface2(228); }); Server.registerCoordinateEvent(forfeitDuelAreaEvent); //} }
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); }
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 static void thieveStall(Player p, int index, ushort stallId, int x, int y) { int stallFace = Server.getGlobalObjects().getFace(stallId, new Location(x, y, 0)); int[] areaCoords = new int[4]; if (index == 2 || index == 4 || index == 5 || index == 12 || index == 13) { // Ape atoll stalls areaCoords[0] = x - 1; areaCoords[1] = y - 1; areaCoords[2] = x + 1; areaCoords[3] = y + 1; } else { areaCoords = getAreaCoords(stallFace, x, y); } AreaEvent thieveStallAreaEvent = new AreaEvent(p, areaCoords[0], areaCoords[1], areaCoords[2], areaCoords[3]); thieveStallAreaEvent.setAction(() => { if (!canThieveStall(p, index, stallId, x, y)) { return; } p.setLastAnimation(new Animation(833)); Event thieveStallEvent = new Event(1000); thieveStallEvent.setAction(() => { thieveStallEvent.stop(); if (Server.getGlobalObjects().originalObjectExists(stallId, new Location(x, y, 0))) { Server.getGlobalObjects().lowerHealth(stallId, new Location(x, y, 0)); p.getSkills().addXp(Skills.SKILL.THIEVING, STALL_XP[index]); int rewardIndex = misc.random(STALL_REWARD[index].Length - 1); int reward = STALL_REWARD[index][rewardIndex]; if (index == 7) { // Seed stall if (misc.random(15) == 0) { reward = HERB_SEEDS[misc.random(HERB_SEEDS.Length - 1)]; } } else if (index == 13) { // Scimitar stall if (misc.random(75) == 0) { reward = 1333; // Rune scimitar. } else if (misc.random(250) == 0) { reward = 4587; // Dragon scimitar. } } int amount = misc.random(STALL_REWARD_AMOUNTS[index][rewardIndex]); if (amount <= 0) { amount = 1; } p.getInventory().addItem(reward, amount); } }); Server.registerEvent(thieveStallEvent); }); Server.registerCoordinateEvent(thieveStallAreaEvent); }
public static bool openPointsInterface(Player p, Npc npc) { int id = npc.getId(); if (id != 8273 && id != 1597 && id != 8274 && id != 1598 && id != 8275 || p.isDead()) { return false; } p.setEntityFocus(npc.getClientIndex()); AreaEvent openPointsInterfaceAreaEvent = new AreaEvent(p, npc.getLocation().getX()-1, npc.getLocation().getY()-1, npc.getLocation().getX()+1, npc.getLocation().getY()+1); openPointsInterfaceAreaEvent.setAction(() => { p.setEntityFocus(65535); npc.setFaceLocation(p.getLocation()); displayPoints(p, 1); }); Server.registerCoordinateEvent(openPointsInterfaceAreaEvent); return true; }
public static bool tryOpenCoffin(Player player, int objectId) { if (objectId != 6823 && objectId != 6771 && objectId != 6821 && objectId != 6773 && objectId != 6822 && objectId != 6772) { return false; } Player p = player; int cryptIndex = getCryptIndex(p); if (cryptIndex == -1) { return false; } AreaEvent openCoffinAreaEvent = new AreaEvent(p, COFFIN_AREA[cryptIndex][0], COFFIN_AREA[cryptIndex][1], COFFIN_AREA[cryptIndex][2], COFFIN_AREA[cryptIndex][3]); openCoffinAreaEvent.setAction(() => { openCoffin(p, objectId); }); Server.registerCoordinateEvent(openCoffinAreaEvent); return true; }
public static bool talkToMaster(Player p, Npc npc) { for (int i = 0; i < SLAYER_MASTERS.Length; i++) { if (npc.getId() == (int)SLAYER_MASTERS[i][0]) { int j = i; p.setEntityFocus(npc.getClientIndex()); AreaEvent talkToMasterAreaEvent = new AreaEvent(p, npc.getLocation().getX()-1, npc.getLocation().getY()-1, npc.getLocation().getX()+1, npc.getLocation().getY()+1); talkToMasterAreaEvent.setAction(() => { p.setTemporaryAttribute("slayerMaster", j); npc.setFaceLocation(p.getLocation()); p.setFaceLocation(npc.getLocation()); p.setEntityFocus(65535); doDialogue(p, 1000); }); Server.registerCoordinateEvent(talkToMasterAreaEvent); return true; } } return false; }
public static bool useObject(Player p, int id, Location location, int option) { foreach (LoadedLaddersAndStairs.HeightObject heightObject in LoadedLaddersAndStairs.objects) { if (heightObject.getId() == id) { if (heightObject.getLocation().Equals(location) && heightObject.getOption() == option) { LoadedLaddersAndStairs.HeightObject obj = heightObject; if (heightObject.getType() == LoadedLaddersAndStairs.Event_Type.COORDINATE_POSITION) { CoordinateEvent useObjectCoordinateEvent = new CoordinateEvent(p, heightObject.getStandLocation()); useObjectCoordinateEvent.setAction(() => { LaddersAndStairs.teleport(p, obj); }); Server.registerCoordinateEvent(useObjectCoordinateEvent); } else if (heightObject.getType() == LoadedLaddersAndStairs.Event_Type.AREA_POSITION) { AreaEvent useObjectAreaEvent = new AreaEvent(p, heightObject.getMinCoords().getX(), heightObject.getMinCoords().getY(), heightObject.getMaxCoords().getX(), heightObject.getMaxCoords().getY()); useObjectAreaEvent.setAction(() => { LaddersAndStairs.teleport(p, obj); }); Server.registerCoordinateEvent(useObjectAreaEvent); } return true; } } } return false; }