예제 #1
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;
             }
         }
     }
 }
예제 #2
0
        private void handleRightClickTwo(Player player, Packet packet)
        {
            int childId     = packet.readLEShort();
            int interfaceId = packet.readLEShort();
            int slot        = packet.readLEShort();
            int item        = packet.readLEShort();

            if (slot < 0 || slot > 28 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            if (player.getInventory().getItemInSlot(slot) == item)
            {
                player.getPackets().closeInterfaces();
                switch (player.getInventory().getItemInSlot(slot))
                {
                case 5509:                     // Small pouch.
                    player.getPackets().sendMessage("There is " + player.getSmallPouchAmount() + " Pure essence in your small pouch. (holds 3).");
                    break;

                case 5510:                     // Medium pouch.
                    player.getPackets().sendMessage("There is " + player.getMediumPouchAmount() + " Pure essence in your medium pouch. (holds 6).");
                    break;

                case 5512:                         // Large pouch.
                    player.getPackets().sendMessage("There is " + player.getLargePouchAmount() + " Pure essence in your large pouch. (holds 9).");
                    break;

                case 5514:                         // Giant pouch.
                    player.getPackets().sendMessage("There is " + player.getGiantPouchAmount() + " Pure essence in your giant pouch. (holds 12).");
                    break;
                }
            }
        }
예제 #3
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);
        }
예제 #4
0
        private void handleRightClickOne(Player player, Packet packet)
        {
            int childId     = packet.readLEShort();
            int interfaceId = packet.readLEShort();
            int item        = packet.readLEShortA();
            int slot        = packet.readLEShortA();

            if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            if (player.getInventory().getItemInSlot(slot) == item)
            {
                player.getPackets().closeInterfaces();
                if (interfaceId == 149 && childId == 0)
                {
                    if (Herblore.emptyPotion(player, player.getInventory().getItemInSlot(slot), slot))
                    {
                        return;
                    }
                    else if (JewelleryTeleport.useJewellery(player, player.getInventory().getItemInSlot(slot), slot, false))
                    {
                        return;
                    }
                }
            }
        }
예제 #5
0
        private void handleOperateItem(Player player, Packet packet)
        {
            int item        = packet.readShortA();
            int slot        = packet.readLEShort();
            int interfaceId = packet.readLEShort();
            int childId     = packet.readLEShort();

            if (slot < 0 || slot > 13 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            ItemData.EQUIP equipSlot = (ItemData.EQUIP)slot;
            if (player.getEquipment().getItemInSlot(equipSlot) == item)
            {
                SkillHandler.resetAllSkills(player);
                player.getPackets().closeInterfaces();
                if (JewelleryTeleport.useJewellery(player, player.getEquipment().getItemInSlot(equipSlot), slot, true))
                {
                    return;
                }
                else
                if (equipSlot == ItemData.EQUIP.CAPE && Skillcape.emote(player))
                {
                    return;
                }
                player.getPackets().sendMessage("This item isn't operable.");
            }
        }
예제 #6
0
        private void handleFourthClickNPC(Player player, Packet packet)
        {
            int npcIndex = packet.readUShort();

            if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            Npc npc = Server.getNpcList()[npcIndex];

            if (npc == null || npc.isDestroyed())
            {
                return;
            }
            Console.WriteLine("Fourth click NPC " + npc.getId());
            SkillHandler.resetAllSkills(player);
            if (Slayer.openSlayerShop(player, npc))
            {
                return;
            }
            switch (npc.getId())
            {
            case 553:     // Aubury
                HomeArea.interactWithAubury(player, npc, 3);
                break;
            }
        }
        private void handleFourthClickObject(Player player, Packet packet)
        {
            int    y  = packet.readLEShort();
            int    x  = packet.readLEShortA();
            ushort id = packet.readUShort();

            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("Fourth object click = " + id + " " + x + " " + y);
            switch (id)
            {
            case 28089:             // GE desk
                Server.getGrandExchange().clickDesk(player, x, y, 3);
                break;
            }
        }
예제 #8
0
        private void handleItemOnNPC(Player player, Packet packet)
        {
            int interfaceId = packet.readInt();
            int slot        = packet.readLEShort();
            int npcIndex    = packet.readLEShort();
            int item        = packet.readLEShortA();

            if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            Npc npc = Server.getNpcList()[npcIndex];

            if (npc == null || npc.isDestroyed())
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            player.getPackets().closeInterfaces();
            Console.WriteLine("Item on NPC " + npc.getId());
            if (player.getInventory().getItemInSlot(slot) == item)
            {
                switch (npc.getId())
                {
                case 519:     // Bob
                    BrokenBarrows.talkToBob(player, npc, player.getInventory().getItemInSlot(slot), 0);
                    break;
                }
            }
        }
예제 #9
0
        public static void teleport(Player p, int teleport)
        {
            if (!canTeleport(p, teleport))
            {
                //return;
            }
            if (!deleteRunes(p, TELEPORT_RUNES[teleport], TELEPORT_RUNES_AMOUNT[teleport]))
            {
                //	return;
            }
            p.removeTemporaryAttribute("lootedBarrowChest"); // so it resets instantly.
            p.removeTemporaryAttribute("autoCasting");
            p.setTarget(null);
            bool ancients        = teleport > 6 ? true : false;
            int  playerMagicSet  = p.getMagicType();
            bool correctMagicSet = (!ancients && playerMagicSet == 1) || (ancients && playerMagicSet == 2);

            if (!correctMagicSet)
            {
                return;
            }
            int x = TELE_X[teleport] + Misc.random(TELE_EXTRA_X[teleport]);
            int y = TELE_Y[teleport] + Misc.random(TELE_EXTRA_Y[teleport]);

            p.getPackets().closeInterfaces();
            p.setLastAnimation(new Animation(ancients ? 9599 : 8939, 0));
            p.setLastGraphics(new Graphics(ancients ? 1681 : 1576, 0));
            p.getPackets().sendBlankClientScript(1297);
            p.getWalkingQueue().resetWalkingQueue();
            p.getPackets().clearMapFlag();
            SkillHandler.resetAllSkills(p);
            p.setTemporaryAttribute("teleporting", true);
            Event startTeleportEvent = new Event(ancients ? 2750 : 1800);

            startTeleportEvent.setAction(() =>
            {
                p.teleport(new Location(x, y, 0));
                if (!ancients)
                {
                    p.setLastAnimation(new Animation(8941, 0));
                    p.setLastGraphics(new Graphics(1577, 0));
                }
                Event endTeleportEvent = new Event(ancients ? 500 : 2000);
                endTeleportEvent.setAction(() =>
                {
                    p.getSkills().addXp(Skills.SKILL.MAGIC, TELEPORT_XP[teleport]);
                    resetTeleport(p);
                    endTeleportEvent.stop();
                });
                Server.registerEvent(endTeleportEvent);
                startTeleportEvent.stop();
            });
            Server.registerEvent(startTeleportEvent);
        }
        private void handleExamineObject(Player player, Packet packet)
        {
            ushort id = (ushort)packet.readLEShortA();

            if (player.getTemporaryAttribute("unmovable") != null)
            {
                return;
            }

            SkillHandler.resetAllSkills(player);
            player.getPackets().closeInterfaces();
            player.getPackets().sendMessage("[Id: " + id + "] " + ObjectData.forId(id).getExamine());
        }
예제 #11
0
        private void handleItemOnItem(Player player, Packet packet)
        {
            int itemSlot = packet.readUShort();
            int unused   = packet.readInt();
            int withSlot = packet.readLEShort();
            int unused2  = packet.readInt();
            int itemUsed = packet.readLEShortA();
            int usedWith = packet.readLEShortA();

            if (itemSlot > 28 || itemSlot < 0 || withSlot > 28 || withSlot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            player.getPackets().closeInterfaces();
            if (player.getInventory().getSlot(itemSlot).getItemId() == itemUsed && player.getInventory().getSlot(withSlot).getItemId() == usedWith)
            {
                if (Fletching.isFletching(player, itemUsed, usedWith))
                {
                    return;
                }
                else if (Herblore.doingHerblore(player, itemUsed, usedWith))
                {
                    return;
                }
                else if (Herblore.mixDoses(player, itemUsed, usedWith, itemSlot, withSlot))
                {
                    return;
                }
                else if (Crafting.wantsToCraft(player, itemUsed, usedWith))
                {
                    return;
                }
                else if (Firemaking.isFiremaking(player, itemUsed, usedWith, itemSlot, withSlot))
                {
                    return;
                }
                else if (Farming.plantSapling(player, itemUsed, usedWith))
                {
                    return;
                }
                else
                {
                    player.getPackets().sendMessage("Nothing interesting happens.");
                }
            }
        }
예제 #12
0
        private void handleThirdClickNPC(Player player, Packet packet)
        {
            int npcIndex = packet.readShortA();

            if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            Npc npc = Server.getNpcList()[npcIndex];

            if (npc == null || npc.isDestroyed())
            {
                return;
            }
            Console.WriteLine("Third click NPC " + npc.getId());
            SkillHandler.resetAllSkills(player);
            if (Thieving.wantToThieveNpc(player, npc))
            {
                return;
            }
            else if (Fishing.wantToFish(player, npc, true))
            {
                return;
            }
            else if (AgilityArena.dialogue(player, npc, true))
            {
                return;
            }
            else if (TzHaar.interactTzhaarNPC(player, npc, 2))
            {
                return;
            }
            else if (WarriorGuild.talkToWarriorGuildNPC(player, npc, 2))
            {
                return;
            }
            switch (npc.getId())
            {
            case 553:     // Aubury
                HomeArea.interactWithAubury(player, npc, 2);
                break;

            case 519:     // Bob
                BrokenBarrows.talkToBob(player, npc, -1, 2);
                break;
            }
        }
예제 #13
0
        public static void leverTeleport(Player p, int option)
        {
            p.getPackets().closeInterfaces();
            Location teleLocation = new Location(LEVER_COORDINATES[option][0], LEVER_COORDINATES[option][1], LEVER_COORDINATES[option][2]);

            Event leverTeleportEvent = new Event(200);

            leverTeleportEvent.setAction(() =>
            {
                leverTeleportEvent.stop();
                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);
                Event levelTeleportStartEvent = new Event(700);
                levelTeleportStartEvent.setAction(() =>
                {
                    levelTeleportStartEvent.stop();
                    p.setLastAnimation(new Animation(8939, 0));
                    p.setLastGraphics(new Graphics(1576, 0));
                    Event levelTeleportFinishEvent = new Event(1800);
                    levelTeleportFinishEvent.setAction(() =>
                    {
                        levelTeleportFinishEvent.stop();
                        p.teleport(teleLocation);
                        p.setLastAnimation(new Animation(8941, 0));
                        p.setLastGraphics(new Graphics(1577, 0));
                        Teleport.resetTeleport(p);
                    });
                    Server.registerEvent(levelTeleportFinishEvent);
                });
                Server.registerEvent(levelTeleportStartEvent);
            });
            Server.registerEvent(leverTeleportEvent);
        }
        private void handleFollowPlayer(Player player, Packet packet)
        {
            int index = packet.readLEShortA();

            if (index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            Player p2 = Server.getPlayerList()[index];

            if (p2 == null)
            {
                return;
            }
            player.getFollow().setFollowing(p2);
        }
예제 #15
0
        private void handleFirstClickNPC(Player player, Packet packet)
        {
            int npcIndex = packet.readLEShortA();

            if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            Npc npc = Server.getNpcList()[npcIndex];

            if (npc == null || npc.isDestroyed())
            {
                return;
            }
            Combat.newAttack(player, npc);
        }
예제 #16
0
        private void handleDropItem(Player player, Packet packet)
        {
            int item        = packet.readShortA();
            int slot        = packet.readShortA();
            int interfaceId = packet.readLEShort();
            int childId     = packet.readUShort();

            if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            if (player.getInventory().getItemInSlot(slot) == item)
            {
                player.getPackets().closeInterfaces();
                if (ItemData.isPlayerBound(player.getInventory().getItemInSlot(slot)))
                {
                    Item[] items = { new Item(player.getInventory().getItemInSlot(slot), 1) };
                    //player.getPackets().sendItems(94, 0, 93, items);
                    player.getPackets().modifyText("Are you sure you want to destroy this item?", 94, 3);     // Title
                    //player.getPackets().modifyText("Yes", 94, 4); // Yes
                    //player.getPackets().modifyText("No", 94, 5); // No
                    player.getPackets().modifyText("", 94, 10);                                               // Line 1
                    player.getPackets().modifyText("If you wish to get another Fire cape, you must", 94, 11); // Line 2
                    player.getPackets().modifyText("complete the Fight cave minigame again.", 94, 12);        // Line 3
                    player.getPackets().modifyText("Fire Cape", 94, 13);                                      // Item name
                    player.getPackets().sendChatboxInterface(94);
                    return;
                }
                int        id  = player.getInventory().getItemInSlot(slot);
                int        amt = player.getInventory().getAmountInSlot(slot);
                GroundItem i   = new GroundItem(id, amt, new Location(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ()), player);
                if (player.getInventory().deleteItem(id, slot, amt))
                {
                    if (!Server.getGroundItems().addToStack(id, amt, player.getLocation(), player))
                    {
                        Server.getGroundItems().newEntityDrop(i);
                    }
                }
            }
        }
예제 #17
0
        private void handleFifthClickNPC(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("Fifth click NPC " + npc.getId());
            SkillHandler.resetAllSkills(player);
            if (Slayer.openPointsInterface(player, npc))
            {
                return;
            }
        }
예제 #18
0
        private void handleEquipItem(Player player, Packet packet)
        {
            int item        = packet.readLEShort();
            int slot        = packet.readShortA();
            int interfaceId = packet.readInt();

            if (slot > 28 || slot < 0 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            if (player.getInventory().getItemInSlot(slot) == item)
            {
                //player.getPackets().closeInterfaces();
                if (RuneCraft.emptyPouch(player, (RuneCraftData.POUCHES)player.getInventory().getItemInSlot(slot)))
                {
                    return;
                }
                player.getEquipment().equipItem(player.getInventory().getItemInSlot(slot), slot);
            }
        }
예제 #19
0
        private void handleMagicOnNPC(Player player, Packet packet)
        {
            int childId     = packet.readLEShort();
            int interfaceId = packet.readLEShort();
            int junk        = packet.readShortA();
            int npcIndex    = packet.readLEShortA();

            if (npcIndex < 0 || npcIndex > Constants.MAX_NPCS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            Npc npc = Server.getNpcList()[npcIndex];

            if (npc == null || npc.isDestroyed())
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            player.setTarget(npc);
            MagicCombat.newMagicAttack(player, npc, childId, interfaceId == 193);
            Console.WriteLine(childId);
        }
        private void handleMagicOnPlayer(Player player, Packet packet)
        {
            int junk        = packet.readShortA();
            int id          = packet.readLEShort();
            int interfaceId = packet.readLEShort();
            int index       = packet.readLEShortA();

            if (index < 0 || index >= Constants.MAX_PLAYERS || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            Player p2 = Server.getPlayerList()[index];

            if (p2 == null)
            {
                return;
            }
            player.getPackets().closeInterfaces();
            player.setTarget(p2);
            MagicCombat.newMagicAttack(player, p2, id, interfaceId == 193);
        }
예제 #21
0
        public static void homeTeleport(Player p)
        {
            if (p.getTemporaryAttribute("teleporting") != null || p.getTemporaryAttribute("homeTeleporting") != null || p.getTemporaryAttribute("unmovable") != null || p.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            if (Location.inFightPits(p.getLocation()))
            {
                p.getPackets().sendMessage("You are unable to teleport from the fight pits.");
                return;
            }
            if (Location.inFightCave(p.getLocation()))
            {
                FightCave.antiTeleportMessage(p);
                return;
            }
            if (p.getTemporaryAttribute("teleblocked") != null)
            {
                p.getPackets().sendMessage("A magical force prevents you from teleporting!");
                return;
            }
            if (Location.inWilderness(p.getLocation()) && p.getLocation().wildernessLevel() >= 20)
            {
                p.getPackets().sendMessage("You cannot teleport above level 20 wilderness!");
                return;
            }
            if (p.getDuel() != null)
            {
                if (p.getDuel().getStatus() < 4)
                {
                    p.getDuel().declineDuel();
                }
                else if (p.getDuel().getStatus() == 5)
                {
                    p.getPackets().sendMessage("You cannot teleport whilst in a duel.");
                    return;
                }
                else if (p.getDuel().getStatus() == 8)
                {
                    if (p.getDuel().getWinner().Equals(p))
                    {
                        p.getDuel().recieveWinnings(p);
                    }
                }
            }
            p.getPackets().closeInterfaces();
            p.setTemporaryAttribute("teleporting", true);
            p.setTemporaryAttribute("homeTeleporting", true);
            p.getWalkingQueue().resetWalkingQueue();
            p.getPackets().clearMapFlag();
            SkillHandler.resetAllSkills(p);

            Event teleportHomeAnimationEvent = new Event(500);
            int   currentStage = 0;

            teleportHomeAnimationEvent.setAction(() =>
            {
                if (p.getTemporaryAttribute("homeTeleporting") == null)
                {
                    p.setLastAnimation(new Animation(65535, 0));
                    p.setLastGraphics(new Graphics(65535, 0));
                    resetTeleport(p);
                    teleportHomeAnimationEvent.stop();
                    return;
                }
                if (currentStage++ >= 16)
                {
                    resetTeleport(p);
                    p.teleport(new Location(HOME_TELE[0] + Misc.random(HOME_TELE[2]), HOME_TELE[1] + Misc.random(HOME_TELE[3]), 0));
                    teleportHomeAnimationEvent.stop();
                    return;
                }
                p.setLastAnimation(new Animation(HOME_ANIMATIONS[currentStage], 0));
                p.setLastGraphics(new Graphics(HOME_GRAPHICS[currentStage], 0));
            });
            Server.registerEvent(teleportHomeAnimationEvent);
        }
예제 #22
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;
                }
            }
        }
예제 #23
0
 public DeathEvent(Entity entity)
     : base(entity is Player ? 6000 : (((Npc)entity).getDeathTime()))
 {
     this.entity        = entity;
     this.firstNpcStage = false;
     this.entity.setEntityFocus(65535);
     this.entity.setLastAnimation(new Animation(entity.getDeathAnimation(), 50));
     this.lastAttacker = entity.getAttacker() == null ? null : entity.getAttacker();
     entity.setPoisonAmount(0);
     if (entity.getFollow() != null)
     {
         entity.getFollow().setFollowing(null);
     }
     if (entity.getTarget() != null)
     {
         if (entity.getTarget().getAttacker() == null || entity.getTarget().getAttacker().Equals(entity))
         {
             Combat.resetCombat(entity.getTarget(), 1);
         }
     }
     if (entity.getAttacker() != null)
     {
         if (entity.getAttacker().getTarget() == null || entity.getAttacker().getTarget().Equals(entity))
         {
             Combat.resetCombat(entity.getAttacker(), 1);
         }
     }
     entity.setTarget(null);
     entity.setAttacker(null);
     if (entity.getKiller() != null)
     {
         if (entity is Npc)
         {
             if (((Npc)this.entity).getId() >= 2025 && ((Npc)this.entity).getId() <= 2030)
             {
                 Barrows.killBrother((Player)entity.getKiller(), ((Npc)this.entity).getId());
             }
             if (entity.getKiller() is Player)
             {
                 Slayer.checkSlayerKill((Player)entity.getKiller(), (Npc)entity);
             }
         }
     }
     if (entity is Player)
     {
         if (((Player)entity).getPrayers().getHeadIcon() == PrayerData.PrayerHeadIcon.RETRIBUTION)
         {
             doRedemption((Player)entity);
         }
         ((Player)entity).setDistanceEvent(null);
         ((Player)entity).getWalkingQueue().resetWalkingQueue();
         ((Player)entity).getPackets().clearMapFlag();
         ((Player)entity).removeTemporaryAttribute("autoCasting");
         if (((Player)entity).getDuel() == null)
         {
             if (!Location.inFightPits(entity.getLocation()) && !Location.inFightCave(entity.getLocation()))
             {
                 ((Player)entity).getPackets().sendMessage("Oh dear, you are dead!");
             }
             else
             {
                 ((Player)entity).getPackets().sendMessage("You have been defeated!");
             }
         }
         ((Player)entity).setTemporaryAttribute("unmovable", true);
         if (((Player)entity).getDuel() != null)
         {
             ((Player)entity).getDuel().getPlayer2().setTemporaryAttribute("unmovable", true);
         }
         SkillHandler.resetAllSkills((Player)entity);
         if ((entity.getKiller() is Player))
         {
             Player killer = (Player)entity.getKiller();
             if (killer.getDuel() == null)
             {
                 int    id           = misc.random(DEATH_MESSAGES.Length - 1);
                 string deathMessage = DEATH_MESSAGES[id];
                 if (id <= 4)
                 {
                     killer.getPackets().sendMessage(deathMessage + " " + ((Player)entity).getLoginDetails().getUsername() + ".");
                 }
                 else
                 {
                     killer.getPackets().sendMessage(((Player)entity).getLoginDetails().getUsername() + " " + deathMessage + ".");
                 }
             }
             else
             {
                 killer.setPoisonAmount(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);
        }
        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...");
        }
예제 #26
0
파일: Walk.cs 프로젝트: Rut0/RSPS-CSharp
        public void handlePacket(Player player, Packet packet)
        {
            int size = packet.getLength();

            if (packet.getPacketId() == PacketHandlers.PacketId.WALK_2)
            {
                size -= 14;
            }
            player.getWalkingQueue().resetWalkingQueue();
            int steps = (size - 5) / 2;

            if (steps > WalkingQueue.MAX_WALKING_WAYPOINTS)
            {
                Misc.WriteError("Warning: Walk command contains too many steps (" + steps + ") currently set to 50 [maybe need increase?]");
                return;
            }

            player.getWalkingQueue().setIsRunning(packet.readByteA() == 1);
            bool following = false;

            if (!canWalk(player, packet, following))
            {
                player.getPackets().clearMapFlag();
                player.getWalkingQueue().resetWalkingQueue();
                return;
            }

            int firstX = packet.readUShort() - (player.getLocation().getRegionX() - 6) * 8;
            int firstY = packet.readShortA() - (player.getLocation().getRegionY() - 6) * 8;

            player.getWalkingQueue().addToWalkingQueue(firstX, firstY);

            for (int i = 0; i < steps; i++) //all the waypoints.
            {
                player.getWalkingQueue().addToWalkingQueue((packet.readByteA() + firstX), (packet.readByteS() + firstY));
            }

            if (player.getTeleportTo() != null) //is teleporting?
            {
                player.getWalkingQueue().resetWalkingQueue();
            }

            if (player.getTemporaryAttribute("homeTeleporting") != null)
            {
                player.removeTemporaryAttribute("homeTeleporting");
            }
            SkillHandler.resetAllSkills(player);
            if (player.getTrade() != null)
            {
                player.getTrade().decline();
            }
            if (player.getDuel() != null)
            {
                if (player.getDuel().getStatus() < 4)
                {
                    player.getDuel().declineDuel();
                }
                else if (player.getDuel().getStatus() == 8)
                {
                    player.getDuel().recieveWinnings(player);
                }
            }
            if (player.getTarget() != null)
            {
                if (!following && player.getTarget().getAttacker() != null && player.getTarget().getAttacker().Equals(player))
                {
                    player.getTarget().setAttacker(null);
                }
            }

            if (!following)
            {
                player.getFollow().setFollowing(null);
                player.setTarget(null);
                player.removeTemporaryAttribute("autoCasting");
                if (player.getEntityFocus() != 65535)
                {
                    player.setEntityFocus(65535);
                }
            }
            player.getPackets().closeInterfaces();
        }
        private void handleSecondClickObject(Player player, Packet packet)
        {
            int    objectY  = packet.readLEShortA();
            int    objectX  = packet.readLEShort();
            ushort objectId = packet.readUShort();

            Console.WriteLine("Second object click = " + objectId + " " + objectX + " " + objectY);
            if (player.getTemporaryAttribute("unmovable") != null)
            {
                return;
            }
            if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            player.getPackets().closeInterfaces();
            player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
            if (Thieving.wantToThieveStall(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1))
            {
                return;
            }
            else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2))
            {
                return;
            }
            switch (objectId)
            {
            case 28089:                 // GE desk
                Server.getGrandExchange().clickDesk(player, objectX, objectY, 2);
                break;

            case 25824:                 // Spinning wheel (Seers)
            case 36970:                 // Spinning wheel (Lumbridge
                Spinning.displaySpinningInterface(player);
                break;

            case 6:     // Dwarf multicannon
                DwarfCannon cannon = player.getCannon();
                Location    l      = new Location(objectX, objectY, player.getLocation().getZ());
                if (cannon == null || (cannon != null & !l.Equals(cannon.getLocation())))
                {
                    player.getPackets().sendMessage("This isn't your cannon!");
                    break;
                }
                cannon.pickupCannon();
                break;

            case 11666:                 // Falador furnace
            case 36956:                 // Lumbridge furnace
                Smelting.displaySmeltOptions(player);
                break;

            case 11959:                 // Tin rocks
            case 11958:
            case 11957:
            case 11933:
            case 11934:
            case 11935:
            case 31077:
            case 31078:
            case 31079:
                Mining.prospectRock(player, objectX, objectY, "tin");
                break;

            case 11960:                 // Copper rocks
            case 11961:
            case 11962:
            case 11936:
            case 11937:
            case 11938:
            case 31080:
            case 31081:
            case 31082:
                Mining.prospectRock(player, objectX, objectY, "copper");
                break;

            case 15504:                 // Clay rocks
            case 15503:
            case 15505:
            case 11189:
            case 11190:
            case 11191:
            case 31062:
            case 31063:
            case 31064:
            case 32429:
            case 32430:
            case 32431:
                Mining.prospectRock(player, objectX, objectY, "clay");
                break;

            case 11948:                 // Silver rocks
            case 11949:
            case 11950:
            case 11165:
            case 11186:
            case 11187:
            case 11188:
            case 31074:
            case 31075:
            case 31076:
            case 32444:
            case 32445:
            case 32446:
            case 15579:
            case 15580:
            case 15581:
                Mining.prospectRock(player, objectX, objectY, "silver");
                break;

            case 11930:                 // Coal rocks
            case 11931:
            case 11932:
            case 14850:
            case 14851:
            case 14852:
            case 31068:
            case 31069:
            case 31070:
            case 32426:
            case 32427:
            case 32428:
                Mining.prospectRock(player, objectX, objectY, "coal");
                break;

            case 11945:                 // Mithril rocks
            case 11946:
            case 11947:
            case 11942:
            case 11943:
            case 11944:
            case 14853:
            case 14854:
            case 14855:
            case 31086:
            case 31087:
            case 31088:
            case 32438:
            case 32439:
            case 32440:
                Mining.prospectRock(player, objectX, objectY, "mithril");
                break;

            case 11954:                 // Iron rocks
            case 11955:
            case 11956:
            case 14856:
            case 14857:
            case 14858:
            case 31071:
            case 31072:
            case 31073:
            case 32441:
            case 32442:
            case 32443:
                Mining.prospectRock(player, objectX, objectY, "iron");
                break;

            case 14859:                 // Rune rocks
            case 14860:
            case 14861:
                Mining.prospectRock(player, objectX, objectY, "runite");
                break;

            case 11951:                 // Gold rocks
            case 11952:
            case 11953:
            case 11183:
            case 11184:
            case 11185:
            case 31065:
            case 31066:
            case 31067:
            case 32432:
            case 32433:
            case 32434:
            case 15576:
            case 15577:
            case 15578:
                Mining.prospectRock(player, objectX, objectY, "gold");
                break;

            case 11963:                 // Adamant rocks
            case 11964:
            case 11965:
            case 11939:
            case 11940:
            case 11941:
            case 14862:
            case 14863:
            case 14864:
            case 31083:
            case 31084:
            case 31085:
            case 32435:
            case 32436:
            case 32437:
                Mining.prospectRock(player, objectX, objectY, "adamantite");
                break;

            case 11552:                 // Empty rocks
            case 11553:
            case 11554:
            case 11555:
            case 11556:
            case 31059:
            case 31060:
            case 31061:
            case 14832:
            case 14833:
            case 14834:
            case 33400:
            case 33401:
            case 33402:
            case 15582:
            case 15583:
            case 15584:
                Mining.displayEmptyRockMessage(player, new Location(objectX, objectY, player.getLocation().getZ()));
                break;

            case 2491:                 // Rune essence
                Mining.prospectRock(player, objectX, objectY, "Rune essence");
                break;

            case 27663:                 // Duel arena bank chest.
            case 2213:                  // Catherby bank booth.
            case 11402:                 // Varrock bank booth.
            case 11758:                 // Falador bank booth.
            case 36786:                 // Lumbridge bank booth.
            case 35647:                 // Al-Kharid bank booth.
            case 25808:                 // Seers bank booth.
            case 34752:                 // Ardougne bank booth.
            case 26972:                 // Edgeville bank booth.
            case 29085:                 // Ooglog bank booth.
                player.getBank().openBank(false, objectX, objectY);
                break;
            }
        }
        private void handleFirstClickObject(Player player, Packet packet)
        {
            int    objectX  = packet.readLEShort();
            ushort objectId = (ushort)packet.readShortA();
            int    objectY  = packet.readUShort();

            if (objectX < 1000 || objectY < 1000 || player.isDead() || player.getTemporaryAttribute("cantDoAnything") != null)
            {
                return;
            }
            SkillHandler.resetAllSkills(player);
            player.getPackets().closeInterfaces();
            Console.WriteLine("First object click = " + objectId + " " + objectX + " " + objectY);
            if (RuneCraft.wantToRunecraft(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (RuneCraft.enterRift(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (RuneCraft.enterViaTiara(player, objectId, objectX, objectY))
            {
                player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
                return;
            }
            else if (RuneCraft.leaveAltar(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Barrows.leaveCrypt(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Barrows.tryOpenCoffin(player, objectId))
            {
                return;
            }
            else if (Barrows.openTunnelDoor(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Thieving.wantToThieveChest(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Agility.doAgility(player, objectId, objectX, objectY))
            {
                return;
            }
            else if (Farming.interactWithPatch(player, objectId, objectX, objectY, -1))
            {
                return;
            }
            else if (Server.getGlobalObjects().getDoors().useDoor(player, objectId, objectX, objectY, player.getLocation().getZ()))
            {
                return;
            }
            else if (LaddersAndStairs.useObject(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1))
            {
                return;
            }
            else if (WildernessObelisks.useWildernessObelisk(player, objectId, new Location(objectX, objectY, player.getLocation().getZ())))
            {
                return;
            }
            if (player.getTemporaryAttribute("unmovable") != null)
            {
                return;
            }
            player.setFaceLocation(new Location(objectX, objectY, player.getLocation().getZ()));
            switch (objectId)
            {
            case 2492:                 // essence mine portals
                RuneCraft.leaveEssMine(player, new Location(objectX, objectY, player.getLocation().getZ()));
                break;

            case 5959:
            case 5960:
                Wilderness.handleLever(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()));
                break;

            case 733:                 // Wilderness web
                Wilderness.slashWeb(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()));
                break;

            case 28089:                 // GE desk
                Server.getGrandExchange().clickDesk(player, objectX, objectY, 1);
                break;

            case 9359:                 // Tzhaar main exit
                TzHaar.exitTzhaar(player);
                break;

            case 31284:                 // Tzhaar entrance
                TzHaar.enterTzhaar(player);
                break;

            case 9357:                 // Fight cave exit
                FightCave.exitCave(player, objectX, objectY);
                break;

            case 9356:                 // Fight cave entrance
                FightCave.enterCave(player);
                break;

            case 9391:                 // Tzhaar fight pits viewing orb
                Server.getMinigames().getFightPits().useOrb(player, -1);
                break;

            case 9369:                 // Tzhaar pits main entrance
            case 9368:                 // Tzhaar pits game door
                Server.getMinigames().getFightPits().useDoor(player, objectId);
                break;

            case 3617:                 // Agility arena ladder
                AgilityArena.enterArena(player, objectX, objectY);
                break;

            case 3618:
                if (Location.atAgilityArena(player.getLocation()))
                {
                    AgilityArena.exitArena(player, objectX, objectY);
                }
                break;

            case 6:     // Dwarf multicannon
                DwarfCannon cannon = player.getCannon();
                Location    l      = new Location(objectX, objectY, player.getLocation().getZ());
                if (cannon == null || (cannon != null & !l.withinDistance(cannon.getLocation(), 2)))
                {
                    player.getPackets().sendMessage("This isn't your cannon!");
                    break;
                }
                cannon.fireCannon();
                break;

            case 7:     //Cannon base only
            case 8:     //Cannon stand
            case 9:     //Cannon barrels
                DwarfCannon cannonPickup   = player.getCannon();
                Location    cannonLocation = new Location(objectX, objectY, player.getLocation().getZ());
                if (cannonPickup == null || (cannonPickup != null & !cannonLocation.withinDistance(cannonPickup.getLocation(), 2)))
                {
                    player.getPackets().sendMessage("This isn't your cannon!");
                    break;
                }
                cannonPickup.pickupCannon();
                break;

            case 11601:                 // Clay oven
                player.getPackets().modifyText("Please use the item on the oven.", 210, 1);
                player.getPackets().sendChatboxInterface(210);
                break;

            case 10284:                 // Barrows chest
                Barrows.openChest(player);
                break;

            case 4483:                 // Castle wars bank chest.
            case 21301:                // Neitiznot bank chest
                player.getBank().openBank(false, objectX, objectY);
                break;

            case 1276:                 // Normal tree
            case 1278:                 // Normal tree
            case 2409:                 // Normal tree
            case 1277:                 // Normal tree with but different coloured stump
            case 3034:                 // Normal tree with dark stump
            case 3033:                 // Normal tree with dark stump
            case 10041:                // Normal tree
            case 1282:                 // Dead tree
            case 1283:                 // Dead tree
            case 1284:                 // Dead tree
            case 1285:                 // Dead tree
            case 1286:                 // Dead tree
            case 1289:                 // Dead tree
            case 1290:                 // Dead tree
            case 1365:                 // Dead tree
            case 1383:                 // Dead tree
            case 1384:                 // Dead tree
            case 1291:                 // Dead tree
            case 3035:                 // Dead tree
            case 3036:                 // Dead tree
            case 1315:                 // Evergreen
            case 1316:                 // Evergreen
            case 1318:                 // Snowy Evergreen
            case 1319:                 // Snowy Evergreen
            case 1330:                 // Snow covered tree
            case 1331:                 // Snow covered tree
            case 1332:                 // Snow covered tree
            case 3879:                 // Evergreen from elf land
            case 3881:                 // Evergreen from elf land (slightly bigger than one above)
            case 3882:                 // Evergreen from elf land (slightly bigger than one above)
            case 3883:                 // Small Evergreen from elf land
            case 1280:                 // Normal tree orange stump
            case 14309:                // PC game island tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true);
                break;

            case 1281:                 // Normal Oak tree
            case 3037:                 // Oak tree dark stump
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true);
                break;

            case 1308:                 // Normal Willow tree
            case 5551:                 // Normal Willow tree
            case 5552:                 // Normal Willow tree
            case 5553:                 // Normal Willow tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true);
                break;

            case 2023:                 // Achey tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true);
                break;

            case 9036:                 // Normal Teak tree
            case 15062:                // Normal Teak tree (same as above?)
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 4, true);
                break;

            case 1307:                // Normal Maple tree
            case 4674:                // Exactly same as above
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 5, true);
                break;

            case 2289:                 // Normal Hollow tree
            case 4060:                 // Normal Hollow tree (bigger than above)
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 6, true);
                break;

            case 9034:                 // Normal Mahogany tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 7, true);
                break;

            case 21273:                 // Normal Arctic pine
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true);
                break;

            case 28951:                 // Normal Eucalyptus tree
            case 28952:                 // Normal Eucalyptus tree (smaller)
            case 28953:                 // Normal Eucalyptus tree (smallest)
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true);
                break;

            case 1309:                 // Yew tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true);
                break;

            case 1306:                 // Normal Magic tree
                Woodcutting.tryCutTree(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true);
                break;

            case 3203:                 // Duel arena trapdoors.
                if (player.getDuel() != null)
                {
                    player.getDuel().forfeitDuel(objectX, objectY);
                    break;
                }
                break;

            case 7152:                 // Abyss tendrils.
            case 7144:
                AbyssObstacles.chopTendrils(player, objectX, objectY);
                break;

            case 7147:                 // Abyss tunnel.
                AbyssObstacles.useAgilityTunnel(player, objectX, objectY);
                break;

            case 7146:                 // Abyss eyes.
            case 7150:
                AbyssObstacles.passEyes(player, objectX, objectY);
                break;

            case 7151:                 // Abyss boil.
            case 7145:
                AbyssObstacles.burnBoil(player, objectX, objectY);
                break;

            case 7153:                 // Abyss mining rock.
            case 7143:
                AbyssObstacles.mineRock(player, objectX, objectY);
                break;

            case 2213:                 // Catherby bank booth.
            case 11402:                // Varrock bank booth.
            case 11758:                // Falador bank booth.
            case 36786:                // Lumbridge bank booth.
            case 35647:                // Al-Kharid bank booth.
            case 25808:                // Seers bank booth.
            case 34752:                // Ardougne bank booth.
            case 26972:                // Edgeville bank booth.
            case 29085:                // Ooglog bank booth.
                player.getBank().openBank(true, objectX, objectY);
                break;

            case 2491:                 // Essence rock
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 0, true);
                break;

            case 11954:                 // Iron rocks
            case 11955:
            case 11956:
            case 14856:
            case 14857:
            case 14858:
            case 31071:
            case 31072:
            case 31073:
            case 32441:
            case 32442:
            case 32443:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 6, true);
                break;

            case 11948:                 // Silver rocks
            case 11949:
            case 11950:
            case 11165:
            case 11186:
            case 11187:
            case 11188:
            case 31074:
            case 31075:
            case 31076:
            case 32444:
            case 32445:
            case 32446:
            case 15579:
            case 15580:
            case 15581:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 8, true);
                break;

            case 15504:                 // Clay rocks
            case 15503:
            case 15505:
            case 11189:
            case 11190:
            case 11191:
            case 31062:
            case 31063:
            case 31064:
            case 32429:
            case 32430:
            case 32431:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 1, true);
                break;

            case 11960:                 // Copper rocks
            case 11961:
            case 11962:
            case 11936:
            case 11937:
            case 11938:
            case 31080:
            case 31081:
            case 31082:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 2, true);
                break;

            case 11959:                 // Tin rocks
            case 11958:
            case 11957:
            case 11933:
            case 11934:
            case 11935:
            case 31077:
            case 31078:
            case 31079:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 3, true);
                break;

            case 11930:                 // Coal rocks
            case 11931:
            case 11932:
            case 14850:
            case 14851:
            case 14852:
            case 31068:
            case 31069:
            case 31070:
            case 32426:
            case 32427:
            case 32428:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 9, true);
                break;

            case 11951:                 // Gold rocks
            case 11952:
            case 11953:
            case 11183:
            case 11184:
            case 11185:
            case 31065:
            case 31066:
            case 31067:
            case 32432:
            case 32433:
            case 32434:
            case 15576:
            case 15577:
            case 15578:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 10, true);
                break;

            case 11945:                 // Mithril rocks
            case 11946:
            case 11947:
            case 11942:
            case 11943:
            case 11944:
            case 14853:
            case 14854:
            case 14855:
            case 31086:
            case 31087:
            case 31088:
            case 32438:
            case 32439:
            case 32440:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 11, true);
                break;

            case 11963:                 // Adamant rocks
            case 11964:
            case 11965:
            case 11939:
            case 11940:
            case 11941:
            case 14862:
            case 14863:
            case 14864:
            case 31083:
            case 31084:
            case 31085:
            case 32435:
            case 32436:
            case 32437:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 12, true);
                break;

            case 14859:                 // Rune rocks
            case 14860:
            case 14861:
                Mining.tryMineRock(player, objectId, new Location(objectX, objectY, player.getLocation().getZ()), 13, true);
                break;

            case 11552:                 // Empty rocks
            case 11553:
            case 11554:
            case 11555:
            case 11556:
            case 31059:
            case 31060:
            case 31061:
            case 14832:
            case 14833:
            case 14834:
            case 33400:
            case 33401:
            case 33402:
            case 15582:
            case 15583:
            case 15584:
                Mining.displayEmptyRockMessage(player, new Location(objectX, objectY, player.getLocation().getZ()));
                break;

            case 23271:                 // Wilderness ditch
                Wilderness.crossDitch(player, objectX, objectY);
                break;
            }
        }
예제 #29
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());
            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;
            }
        }
예제 #30
0
        public static bool useTeletab(Player p, int item, int slot)
        {
            int index = -1;

            for (int i = 0; i < TELETABS.Length; i++)
            {
                if (item == TELETABS[i])
                {
                    index = i;
                }
            }
            if (index == -1)
            {
                return(false);
            }
            if (p.getTemporaryAttribute("teleporting") != null || p.getTemporaryAttribute("homeTeleporting") != null || p.getTemporaryAttribute("unmovable") != null || p.getTemporaryAttribute("cantDoAnything") != null)
            {
                return(false);
            }
            if (p.getTemporaryAttribute("teleblocked") != null)
            {
                p.getPackets().sendMessage("A magical force prevents you from teleporting!");
                return(false);
            }
            if (Location.inFightPits(p.getLocation()))
            {
                p.getPackets().sendMessage("You are unable to teleport from the fight pits.");
                return(false);
            }
            if (Location.inFightCave(p.getLocation()))
            {
                FightCave.antiTeleportMessage(p);
                return(false);
            }
            if (Location.inWilderness(p.getLocation()) && p.getLocation().wildernessLevel() >= 20)
            {
                p.getPackets().sendMessage("You cannot teleport above level 20 wilderness!");
                return(false);
            }
            if (p.getDuel() != null)
            {
                if (p.getDuel().getStatus() < 4)
                {
                    p.getDuel().declineDuel();
                }
                else if (p.getDuel().getStatus() == 8)
                {
                    if (p.getDuel().getWinner().Equals(p))
                    {
                        p.getDuel().recieveWinnings(p);
                    }
                }
            }
            int x = TELE_X[index] + Misc.random(TELE_EXTRA_X[index]);
            int y = TELE_Y[index] + Misc.random(TELE_EXTRA_Y[index]);

            p.getPackets().closeInterfaces();
            p.getPackets().sendBlankClientScript(1297);
            p.getWalkingQueue().resetWalkingQueue();
            p.getPackets().clearMapFlag();
            SkillHandler.resetAllSkills(p);
            if (p.getInventory().deleteItem(item, slot, 1))
            {
                p.setTemporaryAttribute("unmovable", true);
                p.setTemporaryAttribute("teleporting", true);
                p.setLastAnimation(new Animation(9597));
                p.setLastGraphics(new Graphics(1680, 0, 0));
                //p.setLastGraphics(new Graphics(678, 0, 0)); // blue gfx
                Event teleportEvent   = new Event(900);
                int   teleportCounter = 0;
                teleportEvent.setAction(() =>
                {
                    if (teleportCounter == 0)
                    {
                        p.setLastAnimation(new Animation(4071));
                        teleportCounter++;
                    }
                    else
                    {
                        p.setLastAnimation(new Animation(65535));
                        p.removeTemporaryAttribute("unmovable");
                        p.teleport(new Location(x, y, 0));
                        resetTeleport(p);
                        teleportEvent.stop();
                    }
                });
                Server.registerEvent(teleportEvent);
                return(true);
            }
            return(true);
        }