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 WorldObject(Location location, int face, int type, bool deleteObject) { this.location = location; this.face = face; this.type = type; // default this.objectType = 0; this.deleteObject = deleteObject; }
public WorldObject(ushort id, Location location, int face, int type) { this.originalId = id; this.location = location; this.face = face; this.type = type; this.objectType = 0; }
public static bool atDuelArena(Location l) { return l.inArea(3318, 3247, 3327, 3247) || l.inArea(3324, 3247, 3328, 3264) || l.inArea(3327, 3262, 3342, 3270) || l.inArea(3342, 3262, 3387, 3280) || l.inArea(3387, 3262, 3394, 3271) || l.inArea(3313, 3224, 3325, 3247) || l.inArea(3326, 3200, 3398, 3267); // Entire arena }
public Tree(int index, ushort treeId, Location loc, int log, int level, string name, double xp, int distance) { this.treeIndex = index; this.treeLocation = loc; this.log = log; this.treeId = treeId; this.level = level; this.xp = xp; this.name = name; this.distance = distance; }
public Rock(int index, ushort rockId, Location loc, int ore, int level, string name, double xp) { this.rockIndex = index; this.rockLocation = loc; this.ore = ore; this.rockId = rockId; this.level = level; this.xp = xp; this.name = name; this.continueMine = index == 0 || index == 9; }
public GroundItem(int id, int amount, Location location, Player owner) : base(id, amount) { this.location = location; this.owner = owner; respawn = false; this.dropTime = Environment.TickCount; if (owner != null) { ownerId = owner.getIndex(); } }
public DwarfCannon(Player player) { p = player; cannonLocation = p.getLocation(); fakeCannonLocation = new Location(cannonLocation.getX()+1, cannonLocation.getY()+1, cannonLocation.getY()); firing = false; cannonballs = 0; constructionStage = 0; direction = 0; setNpcsInArea(); newCannon(); }
public WorldObject(ushort originalId, int secondaryId, int face, Location location, int delay, int health) { this.originalId = originalId; this.secondaryId = secondaryId; this.location = location; this.face = face; this.restoreDelay = delay; this.objectHealth = health; this.secondForm = false; this.type = 10; // default this.objectType = 0; }
public Entity() { this.entityFocusId = -1; queuedHits = new Queue<Hits.Hit>(); hits = new Hits(); hidden = false; dead = false; target = null; attacker = null; combatTurns = 0; poisonAmount = 0; killers = new Dictionary<Entity, double>(); temporaryAttributes = new Dictionary<string, Object>(); follow = new Follow(this); sprite = new Sprite(); this.location = new Location(2322 + misc.random(1), 3171 + misc.random(5), 0); }
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 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 bool inFightCave(Location l) { return l.getX() >= 19000; }
private static void summonJadHealers(Player p, Npc jad) { for (int i = 0; i < 4; i++) { Npc npc = new Npc(2746); Location minCoords = new Location((20000 + 2363) + (200 * p.getIndex()), 25502, 0); Location maxCoords = new Location((20000 + 2430) + (200 * p.getIndex()), 25123, 0); npc.setMinimumCoords(minCoords); npc.setMaximumCoords(maxCoords); npc.setLocation(new Location((20000 + 2387) + (200 * p.getIndex()) + misc.random(22), 20000 + 5069 + misc.random(33), 0)); npc.setEntityFocus(jad.getClientIndex()); npc.setOwner(p); npc.getFollow().setFollowing(jad); npc.setTarget(null); Server.getNpcList().Add(npc); Event jadHealerEvent = new Event(2000); jadHealerEvent.setAction(() => { if (npc.isDead() || npc.isHidden() || npc.isDestroyed()) { jadHealerEvent.stop(); return; } if (npc.getLocation().withinDistance(jad.getLocation(), 2) && !npc.inCombat()) { if (misc.random(7) == 0) { jad.setLastGraphics(new Graphics(444)); npc.setLastAnimation(new Animation(9254)); int jadMaxHp = jad.getMaxHp(); jad.heal((int) (jadMaxHp * 0.5)); } } }); Server.registerEvent(jadHealerEvent); } }
public static bool inTzHaar(Location l) { return l.inArea(2370, 5120, 2541, 5185); }
public void setLocation(Location location) { this.location = location; }
private Location[] getArenaTeleport() { int arenaChoice = misc.random(2); Location[] locations = new Location[2]; int[] arenaBoundariesX = {3337, 3367, 3336}; int[] arenaBoundariesY = {3246, 3227, 3208}; int[] maxOffsetX = {14, 14, 16}; int[] maxOffsetY = {10, 10, 10}; int finalX = arenaBoundariesX[arenaChoice] + misc.random(maxOffsetX[arenaChoice]); int finalY = arenaBoundariesY[arenaChoice] + misc.random(maxOffsetY[arenaChoice]); locations[0] = new Location(finalX, finalY, 0); if (ruleEnabled(RULE.NO_MOVEMENT)) { int direction = misc.random(1); if (direction == 0) { finalX--; } else { finalY++; } } else { finalX = arenaBoundariesX[arenaChoice] + misc.random(maxOffsetX[arenaChoice]); finalY = arenaBoundariesY[arenaChoice] + misc.random(maxOffsetY[arenaChoice]); } locations[1] = new Location(finalX, finalY, 0); return locations; }
public static bool inFightPits(Location l) { return l.inArea(2376, 5127, 2422, 5168); }
private static void lightFire(Player p, int logIndex, bool colouredFire, int slot) { //if (!World.getInstance().getObjectLocations().tileAvailable(new Location(p.getLocation().getX() - 1, p.getLocation().getY(), p.getLocation().getZ()))) { //return; //} // TODO clip this p.getPackets().closeInterfaces(); int log = colouredFire ? COLOURED_LOGS[logIndex] : LOGS[logIndex]; if (!canMakeFire(p, logIndex, colouredFire)) return; if (slot != -1) { //item in inventory wasn't a log (you may have swapped it/banked it quickly). if(!p.getInventory().deleteItem(log, slot, 1)) return; Server.getGroundItems().newEntityDrop(new GroundItem(log, 1, (Location)p.getLocation().Clone(), p)); } else { //light fire using logs already placed on ground. //check if there is a log on the ground in our current location, if not we can't make fire. GroundItem gi = Server.getGroundItems().itemExists(p.getLocation(), log); if (gi == null) return; //so we quit here. } int delay = getDelay(p, logIndex); p.getWalkingQueue().resetWalkingQueue(); p.getPackets().clearMapFlag(); if (delay == START_DELAY) p.setLastAnimation(new Animation(733)); p.getPackets().sendMessage("You attempt to light the logs."); ushort fireObject = colouredFire ? COLOURED_FIRES[logIndex] : FIRE_OBJECT; p.setTemporaryAttribute("unmovable", true); Event lightFireEvent = new Event(delay); lightFireEvent.setAction(() => { lightFireEvent.stop(); p.setTemporaryAttribute("lastFiremake", Environment.TickCount); p.setLastAnimation(new Animation(65535)); p.getWalkingQueue().forceWalk(-1, 0); Event finishFireEvent = new Event(1000); finishFireEvent.setAction(() => { finishFireEvent.stop(); Location fireLocation = new Location((p.getLocation().getX() + 1), p.getLocation().getY(), p.getLocation().getZ()); if (Server.getGroundItems().deleteItem(log, fireLocation)) { p.getPackets().sendMessage("The fire catches and the logs begin to burn."); p.setFaceLocation(fireLocation); p.getSkills().addXp(Skills.SKILL.FIREMAKING, FIRE_XP[logIndex]); Server.getGlobalObjects().newFire(p, fireObject, fireLocation); } p.removeTemporaryAttribute("unmovable"); }); Server.registerEvent(finishFireEvent); }); Server.registerEvent(lightFireEvent); }
public static bool inFightPitsWaitingArea(Location l) { return l.inArea(2394, 5169, 2404, 5175); }
public int distanceToPoint(Location l) { return (int) Math.Sqrt(Math.Pow(x - l.getX(), 2) + Math.Pow(y - l.getY(), 2)); }
public static bool onWaterbirthIsle(Location l) { return l.inArea(2494, 3710, 2564, 3786); }
public static bool inWilderness(Location l) { return l.inArea(2945, 3524, 3391, 3975); }
public void resetTeleportTo() { this.teleportTo = null; }
public void setFaceLocation(Location faceLocation) { this.faceLocation = faceLocation; if (this is Player) ((Player)this).getUpdateFlags().setFaceLocationUpdateRequired(true); else if (this is Npc) ((Npc)this).getUpdateFlags().setFaceLocationUpdateRequired(true); }
public static bool leaveCrypt(Player player, int stairs, int x, int y) { if (stairs != 6707 && stairs != 6703 && stairs != 6702 && stairs != 6704 && stairs != 6705 && stairs != 6706) { return false; } Player p = player; Location stairLocation; Location moundLocation; int cryptIndex = getCryptIndex(p); if (cryptIndex == -1) { return false; } stairLocation = new Location(STAIR_COORDS[cryptIndex][0], STAIR_COORDS[cryptIndex][1], 3); moundLocation = new Location(MOUND_COORDS[cryptIndex][0] + misc.random(3), MOUND_COORDS[cryptIndex][1] + misc.random(3), 0); if (p.getLocation().Equals(stairLocation)) { p.setFaceLocation(new Location(x, y, 3)); p.teleport(moundLocation); return true; } CoordinateEvent teleportMoundCoordinateEvent = new CoordinateEvent(p, stairLocation); teleportMoundCoordinateEvent.setAction(() => { p.teleport(moundLocation); }); Server.registerCoordinateEvent(teleportMoundCoordinateEvent); return true; }
public void teleport(Location location) { this.teleportTo = location; if (this is Player) { ((Player) this).getWalkingQueue().resetWalkingQueue(); } }
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 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 inMultiCombat(Location l) { return atGodwars(l) || inTzHaar(l) || inFightPits(l) || inFightCave(l); }