Post by fejj on Jan 3, 2018 4:50:47 GMT
Got on for a couple minutes just to see thieving needs redone. Cheers mate
PickPocketableNPC.java
PickPocketAction.java
Thieving.java
ThievingStalls.java
PickPocketableNPC.java
package com.rs.game.player.actions.skills.thieving;
import java.util.HashMap;
import java.util.Map;
import com.rs.game.item.Item;
/**
* An enum containing the data for all pickpocketable NPCs.
*
* @author Emperor - From dementhium.
*/
public enum PickPocketableNPC {
/**
* The man or women npcs.
*/
MAN(new short[] { 1, 2, 3, 4, 5, 6, 16, 24, 170 },
new byte[] { 1, 11, 21, 31 },
new byte[] { 1, 1, 11, 21 },
20.0, 4, 10,
new Item(995, 3)),
/**
* The regular farmer npcs.
*/
FARMER(new short[] { 7, 1757, 1758, 1760 }, new byte[] { 10, 20, 30, 40 },
new byte[] { 1, 10, 20, 30 }, 35, 4, 10, new Item(995, 9),
new Item(5318, 1)),
/**
* The female H.A.M. members.
*/
FEMALE_HAM(new short[] { 1715 }, new byte[] { 15, 25, 35, 45 }, new byte[] {
1, 15, 25, 35 }, 50, 3, 10, new Item(995, 12), new Item(590),
new Item(1621), new Item(1623), new Item(1625), new Item(1269),
new Item(321), new Item(2138), new Item(4298), new Item(4300),
new Item(4302), new Item(4304), new Item(4306), new Item(4308),
new Item(4310), new Item(1267), new Item(1353), new Item(199),
new Item(201), new Item(203), new Item(205), new Item(686),
new Item(697), new Item(453), new Item(688), new Item(314, 3)),
/**
* The male H.A.M. members.
*/
MALE_HAM(new short[] { 1714, 1716 }, new byte[] { 20, 30, 40, 50 },
new byte[] { 1, 20, 30, 40 }, 50, 3, 20, new Item(995, 12),
new Item(590), new Item(1621), new Item(1623), new Item(1625),
new Item(1269), new Item(321), new Item(2138), new Item(4298),
new Item(4300), new Item(4302), new Item(4304), new Item(4306),
new Item(4308), new Item(4310), new Item(1267), new Item(1353),
new Item(199), new Item(201), new Item(203), new Item(205),
new Item(686), new Item(697), new Item(453), new Item(688),
new Item(314, 3)),
/**
* The H.A.M. guards.
*/
HAM_GUARD(new short[] { 1710, 1711, 1712 }, new byte[] { 20, 30, 40, 50 },
new byte[] { 1, 20, 30, 40 }, 65.5, 3, 30, new Item(995, 12),
new Item(590), new Item(1621), new Item(1623), new Item(1625),
new Item(1269), new Item(321), new Item(2138), new Item(4298),
new Item(4300), new Item(4302), new Item(4304), new Item(4306),
new Item(4308), new Item(4310), new Item(1267), new Item(1353),
new Item(199), new Item(201), new Item(203), new Item(205),
new Item(686), new Item(697), new Item(453), new Item(688),
new Item(314, 3), new Item(8866), new Item(8867), new Item(8868),
new Item(8869)),
/**
* The al-kharid warrior and Warrior woman npcs.
*/
WARRIOR(new short[] { 15, 18 }, new byte[] { 25, 35, 45, 55 }, new byte[] {
1, 25, 35, 45 }, 75, 5, 20, new Item(995, 18)),
/**
* The rogues.
*/
ROGUE(new short[] { 187, 2267, 2268, 2269, 8122 }, new byte[] { 32, 42, 52,
62 }, new byte[] { 1, 32, 42, 52 }, 90, 4, 20, new Item(995, 25),
new Item(995, 40), new Item(1993), new Item(556, 2),
new Item(1219), new Item(1523), new Item(1944)),
/**
* Cave goblins.
*/
CAVE_GOBLIN(new short[] { 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759,
5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768 }, new byte[] {
36, 46, 56, 66 }, new byte[] { 1, 36, 46, 56 }, 110, 4, 10,
new Item(995, 30), new Item(590), new Item(4522), new Item(4544),
new Item(596), new Item(1939), new Item(441, 4), new Item(441),
new Item(10981)),
/**
* The master farmer npcs.
*/
MASTER_FARMER(new short[] { 2234, 2235 }, new byte[] { 38, 48, 58, 68 },
new byte[] { 1, 38, 48, 58 }, 150, 4, 30, new Item(5096), new Item(
5097), new Item(5098), new Item(5099), new Item(5100),
new Item(5101), new Item(5102), new Item(5103), new Item(5104),
new Item(5105), new Item(5106), new Item(5291), new Item(5292),
new Item(5293), new Item(5294), new Item(5295), new Item(5296),
new Item(5297), new Item(5298), new Item(5299), new Item(5300),
new Item(5301), new Item(5302), new Item(5304), new Item(5305),
new Item(5306), new Item(5307), new Item(5308), new Item(5309),
new Item(5310), new Item(5311), new Item(5312), new Item(5318),
new Item(5319), new Item(5320), new Item(5321), new Item(5322),
new Item(5323), new Item(5324)),
/**
* City guards.
*/
GUARD(new short[] { 9, 32, 206, 296, 297, 298, 299, 344, 345, 346, 368,
678, 812 }, new byte[] { 40, 50, 60, 70 }, new byte[] { 1, 40, 50,
60 }, 175, 4, 20, new Item(995, 30)),
/**
* Fremennik citizen. TODO: correct npc ids.
*/
FREMENNIK_CITIZEN(new short[] { 2462 }, new byte[] { 45, 55, 65, 75 },
new byte[] { 1, 45, 55, 65 }, 190, 4, 20, new Item(995, 40)),
/**
* A knight of ardougne.
*/
ARDOUGNE_KNIGHT(new short[] { 23, 26 }, new byte[] { 55, 65, 75, 85 },
new byte[] { 1, 55, 65, 75 }, 210, 4, 30, new Item(995, 50)),
/**
* A menaphite thug.
*/
MENAPHITE_THUG(new short[] { 1905 }, new byte[] { 65, 75, 85, 95 },
new byte[] { 1, 65, 75, 85 }, 230, 4, 50, new Item(995, 60)),
/**
* A paladin.
*/
PALADIN(new short[] { 20, 2256 }, new byte[] { 70, 80, 90, 100 },
new byte[] { 1, 70, 80, 90 }, 251.75, 4, 30, new Item(995, 80),
new Item(562, 2)),
/**
* A monkey knife fighter.
*/
MONKEY_KNIFE_FIGHTER(new short[] { 13195, 13212, 13213 }, new byte[] { 70,
127, 127, 127 }, new byte[] { 1, 1, 1, 1 }, 265, 4, 10, new Item(
995, 1), new Item(995, 50), new Item(869, 4), new Item(874, 2),
new Item(379), new Item(1331), new Item(1333), new Item(4587)),
/**
* Gnomes.
*/
GNOME(new short[] { 66, 67, 68, 168, 169, 2249, 2250, 2251, 2371, 2649,
2650, 6002, 6004 }, new byte[] { 75, 85, 95, 105 },
new byte[] { 1, 75, 85, 95 }, 290, 4, 10, new Item(995, 300), new Item(557),
new Item(444), new Item(569), new Item(2150), new Item(2162)),
/**
* Heroes.
*/
HERO(new short[] { 21 }, new byte[] { 80, 90, 100, 110 }, new byte[] { 1,
80, 90, 100 }, 375, 5, 40, new Item(995, 200), new Item(995, 300),
new Item(560, 2), new Item(565), new Item(569), new Item(1601),
new Item(444), new Item(1993)),
/**
* Elves.
*/
// TODO: Find what elfs are pickpocketable. ELF(new short[] { }, new byte[]
// { 85, 95, 105, 115 }, new byte[] { 1, 85, 95, 105 }, 353, 10, 50),
/**
* Dwarf traders.
*/
DWARF_TRADER(new short[] { 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116,
2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126 },
new byte[] { 90, 100, 110, 120 }, new byte[] { 1, 90, 100, 110 },
556.5, 6, 10, new Item(995, 100), new Item(995, 400),
new Item(2350), new Item(2352), new Item(2354), new Item(2360),
new Item(2362), new Item(2364), new Item(437), new Item(439),
new Item(441), new Item(448), new Item(450), new Item(452),
new Item(454));
/**
* A hashmap containing all the npc pickpocketing data.
*/
private static final Map<Short, PickPocketableNPC> NPCS = new HashMap<Short, PickPocketableNPC>();
/**
* Gets the pickpocketing data from the mapping, depending on the NPC id.
*
* @param id
* The npc id.
* @return The {@code PickpocketableNPC} {@code Object}, or {@code null} if
* the data was non-existant.
*/
public static PickPocketableNPC get(int id) {
return NPCS.get((short) id);
}
/**
* Populate the mapping.
*/
static {
for (PickPocketableNPC data : PickPocketableNPC.values()) {
for (short id : data.npcIds) {
NPCS.put(id, data);
}
}
}
/**
* The npc ids.
*/
private final short[] npcIds;
/**
* The thieving levels required (slot 0 = normal loot, 1 = double, 2 = 3x
* loot, 4 = 4x loot).
*/
private final byte[] thievingLevels;
/**
* The agility levels required (see thievingLevels[] comment for slots).
*/
private final byte[] agilityLevels;
/**
* The experience gained.
*/
private final double experience;
/**
* The stun time.
*/
private final byte stunTime;
/**
* The stun damage to deal.
*/
private final byte stunDamage;
/**
* The possible loot.
*/
private final Item[] loot;
/**
* Constructs a new {@code PickpocketableNPC} {@code Object}.
*
* @param npcIds
* The array containing all the npc ids of the npcs using this
* pickpocket data.
* @param thievingLevel
* The thieving levels required (slot 0 = normal loot, 1 =
* double, 2 = 3x loot, 4 = 4x loot).
* @param agilityLevel
* The agility levels required (see slots above).
* @param experience
* The experience gained.
* @param stunTime
* The stun time (per sec).
* @param stunDamage
* The stun damage to deal when stunned.
* @param loot
* The possible loot.
*/
private PickPocketableNPC(short[] npcIds, byte[] thievingLevel,
byte[] agilityLevel, double experience, int stunTime,
int stunDamage, Item... loot) {
this.npcIds = npcIds;
this.thievingLevels = thievingLevel;
this.agilityLevels = agilityLevel;
this.experience = experience;
this.stunTime = (byte) stunTime;
this.stunDamage = (byte) stunDamage;
this.loot = loot;
}
/**
* @return the npcIds
*/
public short[] getNpcIds() {
return npcIds;
}
/**
* @return the thievingLevels
*/
public byte[] getThievingLevels() {
return thievingLevels;
}
/**
* @return the agilityLevels
*/
public byte[] getAgilityLevels() {
return agilityLevels;
}
/**
* @return the experience
*/
public double getExperience() {
return experience;
}
/**
* @return the stunTime
*/
public byte getStunTime() {
return stunTime;
}
/**
* @return the stunDamage
*/
public byte getStunDamage() {
return stunDamage;
}
/**
* @return the loot
*/
public Item[] getLoot() {
return loot;
}
}
PickPocketAction.java
package com.rs.game.player.actions.skills.thieving;
import com.rs.game.Animation;
import com.rs.game.ForceTalk;
import com.rs.game.Graphics;
import com.rs.game.Hit;
import com.rs.game.Hit.HitLook;
import com.rs.game.item.Item;
import com.rs.game.npc.NPC;
import com.rs.game.player.Equipment;
import com.rs.game.player.Player;
import com.rs.game.player.Skills;
import com.rs.game.player.actions.Action;
import com.rs.utils.Utils;
/**
* Handels the pick pocketing.
*
* @author Raghav/Own4g3
*
*/
public class PickPocketAction extends Action {
/**
* Pick pocketing npc.
*/
private NPC npc;
/**
* Data of an npc.
*/
private PickPocketableNPC npcData;
/**
* The npc stun animation.
*/
private static final Animation STUN_ANIMATION = new Animation(422),
/**
* The pick pocketing animation.
*/
PICKPOCKETING_ANIMATION = new Animation(881),
/**
* The double loot animation.
*/
DOUBLE_LOOT_ANIMATION = new Animation(5074),
/**
* The triple loot animation.
*/
TRIPLE_LOOT_ANIMATION = new Animation(5075),
/**
* The quadruple loot animation.
*/
QUADRUPLE_LOOT_ANIMATION = new Animation(5078);
/**
* The double loot gfx.
*/
private static final Graphics DOUBLE_LOOT_GFX = new Graphics(873),
/**
* The triple loot gfx.
*/
TRIPLE_LOOT_GFX = new Graphics(874),
/**
* The quadruple loot gfx.
*/
QUADRUPLE_LOOT_GFX = new Graphics(875);
/**
* The index to use in the levels required arrays.
*/
private int index;
/**
* Constructs a new {@code PickpocketAction} {@code Object}.
*
* @param npc
* The npc to whom the player is pickpocketing.
* @param npcData
* Data of an npc.
*/
public PickPocketAction(NPC npc, PickPocketableNPC npcData) {
this.npc = npc;
this.npcData = npcData;
}
@Override
public boolean start(Player player) {
if (checkAll(player)) {
int thievingLevel = player.getSkills().getLevel(Skills.THIEVING);
int agilityLevel = player.getSkills().getLevel(Skills.AGILITY);
if (Utils.getRandom(50) < 5) {
for (int i = 0; i < 4; i++) {
if (npcData.getThievingLevels()[i] <= thievingLevel
&& npcData.getAgilityLevels()[i] <= agilityLevel)
index = i;
}
}
player.faceEntity(npc);
player.setNextAnimation(getAnimation());
player.setNextGraphics(getGraphics());
player.getPackets().sendGameMessage("You attempt to pick the " + npc.getDefinitions().name.toLowerCase() + "'s pocket...");
setActionDelay(player, 3);
return true;
}
return false;
}
@Override
public boolean process(Player player) {
return checkAll(player);
}
@Override
public int processWithDelay(Player player) {
if (!isSuccesfull(player)) {
player.getPackets().sendGameMessage(
"You fail to pick the "
+ npc.getDefinitions().name.toLowerCase()
+ "'s pocket.");
npc.setNextAnimation(STUN_ANIMATION);
npc.faceEntity(player);
player.setNextAnimation(new Animation(424));
player.setNextGraphics(new Graphics(80, 5, 60));
player.getPackets().sendGameMessage("You've been stuned.");
player.applyHit(new Hit(player, npcData.getStunDamage(),
HitLook.REGULAR_DAMAGE));
if (npcData.equals(PickPocketableNPC.MASTER_FARMER) || npcData.equals(PickPocketableNPC.FARMER))
npc.setNextForceTalk(new ForceTalk("Cor blimey mate, what are ye doing in me pockets?"));
else
npc.setNextForceTalk(new ForceTalk("What do you think you're doing?"));
player.lock(npcData.getStunTime());
stop(player);
} else {
player.getPackets().sendGameMessage("" + getMessage(player));
double totalXp = npcData.getExperience();
if (hasTheivingSuit(player))
totalXp *= 1.025;
player.getSkills().addXp(Skills.THIEVING, totalXp);
for (int i = 0; i <= index; i++) {
Item item = npcData.getLoot()[Utils
.random(npcData.getLoot().length)];
player.getInventory().addItemMoneyPouch(item.getId(), item.getAmount());
}
}
return -1;
}
@Override
public void stop(Player player) {
npc.setNextFaceEntity(null);
setActionDelay(player, 3);
}
private boolean hasTheivingSuit(Player player) {
if (player.getEquipment().getHatId() == 21482
&& player.getEquipment().getChestId() == 21480
&& player.getEquipment().getLegsId() == 21481
&& player.getEquipment().getBootsId() == 21483)
return true;
return false;
}
/**
* Checks if the player is succesfull to thiev or not.
*
* @param player
* The player.
* @return {@code True} if succesfull, {@code false} if not.
*/
private boolean isSuccesfull(Player player) {
if (player.getSkills().getLevelForXp(Skills.THIEVING) >= 99)
return true;
int thievingLevel = player.getSkills().getLevel(Skills.THIEVING);
int increasedChance = getIncreasedChance(player);
int level = Utils.getRandom(thievingLevel + increasedChance);
double ratio = level / (Utils.random(npcData.getThievingLevels()[0] + 6) + 1);
if (Math.round(ratio * thievingLevel) < npcData.getThievingLevels()[0] / player.getAuraManager().getThievingAccurayMultiplier())
return false;
return true;
}
/**
* Gets the increased chance for succesfully pickpocketing.
*
* @param player
* The player.
* @return The amount of increased chance.
*/
private int getIncreasedChance(Player player) {
int chance = 0;
if (Equipment.getItemSlot(Equipment.SLOT_HANDS) == 10075)
chance += 12;
player.getEquipment();
if (Equipment.getItemSlot(Equipment.SLOT_CAPE) == 15349)
chance += 15;
if (npc.getDefinitions().name.contains("H.A.M")) {
for (Item item : player.getEquipment().getItems().getItems()) {
if (item != null && item.getDefinitions().getName().contains("H.A.M")) {
chance += 3;
}
}
}
return chance;
}
/**
* Gets the message to send when finishing.
*
* @param player
* The player.
* @return The message.
*/
private String getMessage(Player player) {
switch (index) {
case 0:
return "You succesfully pick the " + npc.getDefinitions().name.toLowerCase() + "'s pocket.";
case 1:
return "Your lighting-fast reactions allow you to steal double loot.";
case 2:
return "Your lighting-fast reactions allow you to steal triple loot.";
case 3:
return "Your lighting-fast reactions allow you to steal quadruple loot.";
}
return null;
}
/**
* Checks everything before starting.
*
* @param player
* The player.
* @return
*/
private boolean checkAll(Player player) {
if (player.getSkills().getLevel(Skills.THIEVING) < npcData
.getThievingLevels()[0]) {
player.getDialogueManager().startDialogue(
"SimpleMessage",
"You need a thieving level of "
+ npcData.getThievingLevels()[0]
+ " to steal from this npc.");
return false;
}
if (player.getInventory().getFreeSlots() < 1) {
player.getPackets().sendGameMessage(
"You don't have enough space in your inventory.");
return false;
}
if (player.getAttackedBy() != null
&& player.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You can't do this while you're under combat.");
return false;
}
if (npc.getAttackedBy() != null
&& npc.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage("The npc is under combat.");
return false;
}
if (npc.isDead()) {
player.getPackets().sendGameMessage("Too late, the npc is dead.");
return false;
}
return true;
}
/**
* Gets the animation to perform.
*
* @param player
* The player.
* @return The animation.
*/
private Animation getAnimation() {
switch (index) {
case 0:
return PICKPOCKETING_ANIMATION;
case 1:
return DOUBLE_LOOT_ANIMATION;
case 2:
return TRIPLE_LOOT_ANIMATION;
case 3:
return QUADRUPLE_LOOT_ANIMATION;
}
return null;
}
/**
* Gets the graphic to perform.
*
* @param player
* The player.
* @return The graphic.
*/
private Graphics getGraphics() {
switch (index) {
case 0:
return null;
case 1:
return DOUBLE_LOOT_GFX;
case 2:
return TRIPLE_LOOT_GFX;
case 3:
return QUADRUPLE_LOOT_GFX;
}
return null;
}
}
Thieving.java
package com.rs.game.player.actions.skills.thieving;
import java.util.List;
import com.rs.game.Animation;
import com.rs.game.ForceTalk;
import com.rs.game.World;
import com.rs.game.WorldObject;
import com.rs.game.npc.NPC;
import com.rs.game.player.Equipment;
import com.rs.game.player.Player;
import com.rs.game.player.Skills;
import com.rs.game.tasks.WorldTask;
import com.rs.game.tasks.WorldTasksManager;
import com.rs.net.decoders.handlers.ObjectHandler;
import com.rs.utils.Utils;
/**
* Handles the Thieving Skill
*
* @author Dragonkk
*
*/
public class Thieving {
public enum Stalls {
VEGETABAL(0, 2, new int[] { 1957, 1965, 1942, 1982, 1550 }, 1, 2, 10,
34381), CAKE(34384, 5, new int[] { 1891, 1897, 2309 }, 1, 2.5,
16, 34381), CRAFTING(0, 5, new int[] { 1755, 1592, 1597 }, 1,
7, 16, 34381), MONKEY_FOOD(0, 5, new int[] { 1963 }, 1, 7, 16,
34381), MONKEY_GENERAL(0, 5, new int[] { 1931, 2347, 590 }, 1,
7, 16, 34381), TEA_STALL(0, 5, new int[] { 712 }, 1, 7, 16,
34381), SILK_STALL(34383, 20, new int[] { 950 }, 1, 8, 24,
34381), WINE_STALL(14011, 22, new int[] { 1937, 1993, 1987,
1935, 7919 }, 1, 16, 27, 2046), SEED_STALL(7053, 27, new int[] {
5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5105 }, 30, 11,
10, 2047), FUR_STALL(34387, 35, new int[] { 6814, 958 }, 1, 15,
36, 34381), FISH_STALL(0, 42, new int[] { 331, 359, 377 }, 1,
16, 42, 34381), CROSSBOW_STALL(0, 49, new int[] { 877, 9420,
9440 }, 1, 11, 52, 34381), SILVER_STALL(0, 50,
new int[] { 442 }, 1, 30, 54, 34381), SPICE_STALL(34386, 65,
new int[] { 2007 }, 1, 80, 81, 34381), MAGIC_STALL(0, 65,
new int[] { 556, 557, 554, 555, 563 }, 30, 80, 100, 34381), SCIMITAR_STALL(
0, 65, new int[] { 1323 }, 1, 80, 100, 34381), GEM_STALL(34385,
75, new int[] { 1623, 1621, 1619, 1617 }, 1, 180, 16, 34381);
private int[] item;
private int level;
private int amount;
private int objectId;
private int replaceObject;
private double experience;
private double seconds;
Stalls(int objectId, int level, int[] item, int amount, double seconds,
double experience, int replaceObject) {
this.objectId = objectId;
this.level = level;
this.item = item;
this.amount = amount;
this.seconds = seconds;
this.experience = experience;
this.replaceObject = replaceObject;
}
public int getReplaceObject() {
return replaceObject;
}
public int getObjectId() {
return objectId;
}
public int getItem(int count) {
return item[count];
}
public int getAmount() {
return amount;
}
public int getLevel() {
return level;
}
public double getTime() {
return seconds;
}
public double getExperience() {
return experience;
}
}
public static boolean isGuard(int npcId) {
if (npcId == 32 || npcId == 21 || npcId == 2256 || npcId == 23)
return true;
else
return false;
}
public static void handleStalls(final Player player, final WorldObject object) {
if (player.getAttackedBy() != null && player.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage("You can't do this while you're under combat.");
return;
}
for (final Stalls stall : Stalls.values()) {
if (stall.getObjectId() == object.getId()) {
final WorldObject emptyStall = new WorldObject(stall.getReplaceObject(), 10, object.getRotation(), object.getX(), object.getY(), object.getPlane());
if (player.getSkills().getLevel(Skills.THIEVING) < stall.getLevel()) {
player.getPackets().sendGameMessage("You need a thieving level of " + stall.getLevel() + " to steal from this.", true);
return;
}
if (player.getInventory().getFreeSlots() <= 0) {
player.getPackets().sendGameMessage("Not enough space in your inventory.", true);
return;
}
player.setNextAnimation(new Animation(881));
player.lock(2);
WorldTasksManager.schedule(new WorldTask() {
boolean gaveItems;
@Override
public void run() {
if (!World.containsObjectWithId(object, object.getId())) {
stop();
return;
}
if (!gaveItems) {
player.getInventory().addItemMoneyPouch(stall.getItem(Utils.getRandom(stall.item.length - 1)), Utils.getRandom(stall.getAmount()));
player.getSkills().addXp(Skills.THIEVING, stall.getExperience());
gaveItems = true;
checkGuards(player);
} else {
World.spawnTemporaryObject(emptyStall, (int) (1500 * stall.getTime()));
stop();
}
}
}, 0, 0);
}
}
}
public static void checkGuards(Player player) {
NPC guard = null;
int lastDistance = -1;
for (int regionId : player.getMapRegionsIds()) {
List<Integer> npcIndexes = World.getRegion(regionId).getNPCsIndexes();
if (npcIndexes == null)
continue;
for (int npcIndex : npcIndexes) {
NPC npc = World.getNPCs().get(npcIndex);
if (npc == null)
continue;
if (!isGuard(npc.getId()) || npc.isUnderCombat() || npc.isDead() || !npc.withinDistance(player, 4) || !npc.clipedProjectile(player, true))
continue;
int distance = Utils.getDistance(npc.getX(), npc.getY(), player.getX(), player.getY());
if (lastDistance == -1 || lastDistance > distance) {
guard = npc;
lastDistance = distance;
}
}
}
if (guard != null) {
guard.setNextForceTalk(new ForceTalk("Hey, what do you think you are doing!"));
guard.setTarget(player);
}
}
public static boolean pickDoor(Player player, WorldObject object) {
if (player.getAttributes().get("numbFingers") == null)
player.getAttributes().put("numbFingers", 0);
int thievingLevel = player.getSkills().getLevel(Skills.THIEVING);
int increasedChance = getIncreasedChance(player);
int decreasedChance = (Integer) player.getAttributes().get("numbFingers");
int level = Utils.getRandom(thievingLevel + (increasedChance - decreasedChance)) + 1;
double ratio = level / (Utils.getRandom(45 + 5) + 1);
if (Math.round(ratio * thievingLevel) < (player.getAttackedByDelay() > 0 ? 50 : 40) / player.getAuraManager().getThievingAccurayMultiplier()) {
player.getPackets().sendGameMessage("You fail to unlock the door and your hands begin to numb down.");
player.getAttributes().put("numbFingers", decreasedChance + 1);
return false;
}
player.getPackets().sendGameMessage("You successfully unlock the door.");
ObjectHandler.handleDoor(player, object, 1500 + Utils.getRandom(1000));
return true;
}
private static int getIncreasedChance(Player player) {
int chance = 0;
if (Equipment.getItemSlot(Equipment.SLOT_HANDS) == 10075)
chance += 12;
player.getEquipment();
if (Equipment.getItemSlot(Equipment.SLOT_CAPE) == 15349)
chance += 15;
return chance;
}
}
ThievingStalls.java
package com.rs.game.player.actions.skills.thieving;
import java.io.Serializable;
import com.rs.game.Animation;
import com.rs.game.player.Player;
import com.rs.game.player.Skills;
public class ThievingStalls implements Serializable {
private static final long serialVersionUID = 1153410720477418692L;
public Player player;
public void setPlayer(Player player) {
this.player = player;
}
public enum Stalls {
BEGINNER_STALL(4875, 4, 1, 50, 80, 4000),
NOVICE_STALL(4876, 4, 50, 75, 90, 6000),
EXPERT_STALL(4877, 4, 75, 90, 110, 8000),
ADVANCED_STALL(4878, 4, 90, 99, 180, 10000),
HOME_FISH(4277, 4, 50, 99, 110, 10000),
HOME_FURS(4278, 4, 1, 50, 110, 5000),
;
int id, delay, minLvl, maxLvl, exp, reward;
Stalls(int id, int delay, int minLvl, int maxLvl, int exp, int reward) {
this.id = id;
this.delay = delay;
this.minLvl = minLvl;
this.maxLvl = maxLvl;
this.exp = exp;
this.reward = reward;
}
}
public boolean handleStall(Player player, int stallId) {
for (Stalls s : Stalls.values()) {
if (stallId == s.id) {
if (player.getSkills().getLevel(Skills.THIEVING) < s.minLvl) {
player.sendMessage("You need atleast "+s.minLvl+" Thieving to steal from this stall!");
return false;
}
if (player.getSkills().getLevel(Skills.THIEVING) >= s.maxLvl) {
player.sendMessage("You can no longer benefit from stealing here.");
return false;
}
player.getInventory().addItemMoneyPouch(995, s.reward);
player.getSkills().addXp(Skills.THIEVING, s.exp);
player.lock(s.delay);
player.getPackets().sendGameMessage("You successfully thieve from the stall.");
player.setNextAnimation(new Animation(881));
return true;
}
}
return false;
}
}