コード例 #1
0
	    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;
	    }
コード例 #2
0
	    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);
	    }
コード例 #3
0
	    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);
	    }
コード例 #4
0
	    private void handleSecondClickNPC(Player player, Packet packet) {
		    int npcIndex = packet.readLEShort();
		    if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null) {
			    return;
		    }
		    Npc npc = Server.getNpcList()[npcIndex];
		    if (npc == null || npc.isDestroyed()) {
			    return;
		    }
		    Console.WriteLine("Second click NPC " + npc.getId());
            player.setFaceLocation(npc.getLocation());
		    SkillHandler.resetAllSkills(player);
		    if (Fishing.wantToFish(player, npc, false)) {
			    return;
		    } else if (Slayer.talkToMaster(player, npc)) {
			    return;
		    } else if (AgilityArena.dialogue(player, npc, false)) {
			    return;
		    } else if (TzHaar.interactTzhaarNPC(player, npc, 1)) {
			    return;
		    } else if (WarriorGuild.talkToWarriorGuildNPC(player, npc, 1)) {
			    return;
		    } else if (BoatOptions.interactWithBoatNPC(player, npc)) {
			    return;
		    }
		    switch(npc.getId()) {
			    case 519: // Bob
				    BrokenBarrows.talkToBob(player, npc, -1, 1);
				    break;
				
			    case 553: // Aubury
				    HomeArea.interactWithAubury(player, npc, 1);
				    break;
				
			    case 1862: // Ali morisanne
				    if (npc.getLocation().inArea(2319, 3177, 2321, 3182)) { // Home Ali
					    HomeArea.interactWithAliMorissaae(player, npc);
					    break;
				    } else if (npc.getLocation().inArea(3311, 3198, 3316, 3199)) { // Al Kharid Ali
					    AlKharid.interactWithAliMorissaae(player, npc);
					    break;
				    }
				    break;
		    }
	    }
コード例 #5
0
	    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);
	    }
コード例 #6
0
	    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
	    }
コード例 #7
0
	    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;
	    }
コード例 #8
0
	    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);
	    }
コード例 #9
0
	    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);
	    }
コード例 #10
0
 private void handleFifthClickObject(Player player, Packet packet)
 {
     short id = packet.readLEShortA();
     short x = packet.readLEShortA();
     short y = packet.readLEShortA();
     if (player.getTemporaryAttribute("unmovable") != null)
     {
         return;
     }
     if (x < 1000 || id < 0 || y < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
     {
         return;
     }
     SkillHandler.resetAllSkills(player);
     player.getPackets().closeInterfaces();
     player.setFaceLocation(new Location(x, y, player.getLocation().getZ()));
     Console.WriteLine("Fifth object click = " + id + " " + x + " " + y);
     switch (id)
     {
         case 28089: // GE desk
             Server.getGrandExchange().clickDesk(player, x, y, 5);
             break;
     }
 }
コード例 #11
0
	    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;
	    }
コード例 #12
0
	    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...");
	    }
コード例 #13
0
 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: //1st click on desk [Use]
                 break;
             case 2: //2nd click on desk [Exchange]
                 p.getPackets().closeInterfaces();
                 p.setGESession(new GESession(p, true));
                 break;
             case 3: //3rd click on desk [Collect]
                 p.getPackets().closeInterfaces();
                 p.setGESession(new GESession(p, false));
                 break;
             case 4: //4th click on desk [History]
                 //TODO: combine this with GESession, this is just interface test.
                 p.getPackets().displayInterface(643); //opens Grand Exchange History Box.
                 break;
             case 5: //5th click on desk [Sets]
                 //TODO: combine this with GESession, this is just interface test.
                 p.getPackets().displayInterface(645); //opens Grand Exchange Sets Box.
                 break;
         }
     });
     Server.registerCoordinateEvent(clickDeskAreaEvent);
 }
コード例 #14
0
        public void changeDoor(Player p, Door door)
        {
		    p.setFaceLocation(door.getDoorLocation());
		    updateDoorForPlayers(door);
	    }
コード例 #15
0
	    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;
			    }
		    }
	    }
コード例 #16
0
	    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;
		    }
	    }
コード例 #17
0
 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;
             }
         }
     }
 }
コード例 #18
0
 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);
 }
コード例 #19
0
	    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);
	    }
コード例 #20
0
        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);

	    }
コード例 #21
0
	    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;
            }
	    }
コード例 #22
0
	    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;
		    }
	    }
コード例 #23
0
	    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;
	    }