Code:
public void drop() {
try {
Player killer = getMostDamageReceivedSourcePlayer();
if (killer == null)
return;
SlayerManager manager = killer.getSlayerManager();
if (manager.isValidTask(getName()))
manager.checkCompletedTask(getDamageReceived(killer), 0);
Drop[] dropsArray = NPCDrops.getDrops(id);
if (dropsArray == null) {
return;
}
List<Drop> drops = new ArrayList<>(Arrays.asList(dropsArray));
if (getId() == 2881) {
addRainPoints(killer, this);
killer.setDagannothSupremeKilled(killer.getDagannothSupremeKilled() + 1);
if (killer.getDagannothSupremeKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Dagannoth supremes");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getDagannothSupremeKilled() + " " + getName() + "s.");
}
if (getId() == 2882) {
addRainPoints(killer, this);
killer.setDagannothPrimeKilled(killer.getDagannothPrimeKilled() + 1);
if (killer.getDagannothPrimeKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Dagannoth primes");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getDagannothPrimeKilled() + " " + getName() + "s.");
}
if (getId() == 2883) {
addRainPoints(killer, this);
killer.setDagannothRexKilled(killer.getDagannothRexKilled() + 1);
if (killer.getDagannothRexKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Dagannoth rexs");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getDagannothRexKilled() + " " + getName() + "s.");
}
if (getName().toLowerCase().equalsIgnoreCase("tormented demon")) {
addRainPoints(killer, this);
killer.setTormentedDemonsKilled(killer.getTormentedDemonsKilled() + 1);
if (killer.getTormentedDemonsKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Tormented demons");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getTormentedDemonsKilled() + " " + getName() + "s.");
}
if (getId() == 6260) {
addRainPoints(killer, this);
killer.bandosKilled++;
if (killer.getBandosKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 General graardors");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getBandosKilled() + " " + getName() + "s.");
}
if (getId() == 6222) {
addRainPoints(killer, this);
killer.armadylKilled++;
if (killer.getArmadylKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Kree'arras");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getArmadylKilled() + " " + getName() + "s.");
}
if (getId() == 6247) {
addRainPoints(killer, this);
killer.saradominKilled++;
if (killer.getSaradominKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Commander zilyana");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getSaradominKilled() + " " + getName() + "s.");
}
if (getId() == 6203) {
addRainPoints(killer, this);
killer.zamorakKilled++;
if (killer.getZamorakKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 K'ril tsutsaroths");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getZamorakKilled() + " " + getName() + "s.");
}
if (getId() == 8133) {
addRainPoints(killer, this);
killer.corpKilled++;
if (killer.getCorpKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 Corporeal beasts");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getCorpKilled() + " " + getName() + "s.");
}
if (getId() == 50) {
addRainPoints(killer, this);
killer.setKbdKilled(killer.getKbdKilled() + 1);
if (killer.getKbdKilled() == 25) {
killer.getPackets().sendGameMessage(
"<col=ff0000>Congratulations, you have completed a completionist cape requirement;");
killer.getPackets().sendGameMessage("<col=ff0000>Kill 25 King black dragons");
}
killer.getPackets().sendGameMessage(
"You have killed in total of " + killer.getKbdKilled() + " " + getName() + "s.");
}
if (killer.isAtWild() && killer.getControlerManager().getControler() instanceof WildernessControler) {
if (getCombatLevel() > 10) {
double combatLevel = getCombatLevel() * 0.5;
double wildyLevel = WildernessControler.getWildLevel(killer) * 0.5;
double points = combatLevel * wildyLevel;
double bonusPoints = (points * killer.getBonusPoints()) - points;
double totalPoints = points + bonusPoints;
killer.setAvalonPoints(killer.getAvalonPoints() + (int) totalPoints);
killer.getPackets().sendGameMessage("You gain " + totalPoints
+ (bonusPoints > 1 ? " (" + bonusPoints + " Bonus points)" : " ") + Settings.SERVER_NAME
+ " points for killing a level " + getCombatLevel() + " " + getName() + ".");
}
}
Charms charm = CharmDrops.calculateCharm(killer, this);
if (charm != null) {
int charmCount = CharmDrops.getCharmsAmount(this, charm);
Drop charmDrop = Drop.create(charm.getItemId(), 100, charmCount, charmCount, false);
drops.add(charmDrop);
}
Casket casket = CasketDrops.calculateDrop(killer, this);
if (casket != null) {
Drop casketDrop = Drop.create(casket.getItemId(), 100, 1, 1, false);
drops.add(casketDrop);
}
KeyPart keyPart = CrystalKeyDrops.calculateDrop(killer, this);
if (keyPart != null) {
Drop keyDrop = Drop.create(keyPart.getItemId(), 100, 1, 1, false);
drops.add(keyDrop);
}
Item bestDefender = new Item(WarriorsGuild.getBestDefender(killer));
if (getDefinitions().getName().toLowerCase().equalsIgnoreCase("cyclops")) {
if (Utils.getRandom(9) == 0 && bestDefender != null) {
Drop defenderDrop = Drop.create(bestDefender.getId(), 100, 1, 1, false);
drops.add(defenderDrop);
killer.sm("<col=216902>You received: " + bestDefender.getName() + " (" + getName() + ")");
}
}
Drop[] possibleDrops = new Drop[drops.size()];
int possibleDropsCount = 0;
for (Drop drop : drops) {
if (drop.getRate() == 100)
sendDrop(killer, drop);
else {
if ((Utils.getRandomDouble(99) + 1) <= (drop.getRate())) {
possibleDrops[possibleDropsCount++] = drop;
}
}
}
if (possibleDropsCount > 0)
sendDrop(killer, possibleDrops[Utils.getRandom(possibleDropsCount - 1)]);
} catch (Exception e) {
e.printStackTrace();
} catch (Error e) {
e.printStackTrace();
}
}
public void handleBonecrusher(Player player, Drop drop, Item item, boolean lootShare) {
CopyOnWriteArrayList<Player> playersWithLs = new CopyOnWriteArrayList<Player>();
String dropName = ItemDefinitions.getItemDefinitions(drop.getItemId()).getName().toLowerCase();
if (lootShare) {
player.sm(String.format(("<col=216902>Your bonecrusher crushed: %s x %s. </col>"),
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
for (Player p : playersWithLs) {
if (!p.equals(player)) {
p.sm(String.format("%s bonecrusher crushed: %s x %s.", player.getDisplayName(),
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
}
}
}
for (int i = 0; i < item.getAmount(); i++)
player.getSkills().addXp(Skills.PRAYER, Burying.Bone.forId(item.getId()).getExperience());
item.setAmount(0);
}
public void handleHerbicide(Player player, Drop drop, Item item, boolean lootShare) {
CopyOnWriteArrayList<Player> playersWithLs = new CopyOnWriteArrayList<Player>();
String dropName = ItemDefinitions.getItemDefinitions(drop.getItemId()).getName().toLowerCase();
if (lootShare) {
player.sm(String.format(("<col=216902>Your herbicide burnt: %s x %s. </col>"),
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
for (Player p : playersWithLs) {
if (!p.equals(player)) {
p.sm(String.format("%s herbicide burnt: %s x %s.", player.getDisplayName(),
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
}
}
}
for (int i = 0; i < item.getAmount(); i++)
player.getSkills().addXp(Skills.HERBLORE, HerbCleaning.getHerb(drop.getItemId()).getExperience() * 2);
item.setAmount(0);
}
boolean sendDp = false;
public void sendLootshare(Player player, Drop drop, Item item) {
int size = getSize();
String dropName = ItemDefinitions.getItemDefinitions(drop.getItemId()).getName().toLowerCase();
ItemDefinitions defs = ItemDefinitions.getItemDefinitions(drop.getItemId());
/* LootShare/CoinShare */
FriendChatsManager fc = player.getCurrentFriendChat();
if (fc != null) {
CopyOnWriteArrayList<Player> players = fc.getPlayers();
CopyOnWriteArrayList<Player> playersWithLs = new CopyOnWriteArrayList<Player>();
for (Player p : players) {
if (p.isToogleLootShare() && p.getRegionId() == player.getRegionId())
playersWithLs.add(p);
}
Player luckyPlayer = playersWithLs.get((int) (Math.random() * playersWithLs.size()));
if (luckyPlayer.getInventory().containsItem(19675, 1) && defs.getName().toLowerCase().contains("grimy")) {
if (luckyPlayer.getSkills().getLevel(Skills.HERBLORE) >= HerbCleaning.getHerb(drop.getItemId())
.getLevel()) {
handleHerbicide(luckyPlayer, drop, item, true);
return;
}
}
if ((defs.getName().toLowerCase().equalsIgnoreCase("bones")
|| defs.getName().toLowerCase().contains(" bones"))
&& luckyPlayer.getInventory().containsItem(18337, 1)) {
handleBonecrusher(luckyPlayer, drop, item, true);
return;
}
if (item.getAmount() > 0) {
if (Settings.DOUBLE_DROP && rareDrop(dropName.toLowerCase()))
item.setAmount(item.getAmount() * 2);
World.updateGroundItem(item, new WorldTile(getCoordFaceX(size), getCoordFaceY(size), getPlane()),
luckyPlayer, 60, 0);
luckyPlayer.sm(String.format(
(rareDrop(dropName.toLowerCase()) ? "<col=ff0000>" : "<col=216902>")
+ "You received: %s x %s. (" + getName() + ") </col>",
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
for (Player p : playersWithLs) {
if (!p.equals(luckyPlayer)) {
p.sm(String.format("%s received: %s x %s. (" + getName() + ") ", luckyPlayer.getDisplayName(),
Utils.getFormattedNumber(item.getAmount(), ','), dropName));
}
}
if (rareDrop(dropName.toLowerCase()))
World.sendWorldMessage("<img=7><col=36648b>News: " + luckyPlayer.getDisplayName() + " has recieved "
+ (item.getAmount() > 1 ? item.getAmount() + " x " + dropName : dropName)
+ " as loot from (" + getName() + ")!", false);
}
}
sendDp = false;
}
public void sendDrop(Player player, Drop drop) {
int size = getSize();
sendDp = true;
String dropName = ItemDefinitions.getItemDefinitions(drop.getItemId()).getName().toLowerCase();
Item item = ItemDefinitions.getItemDefinitions(drop.getItemId()).isStackable()
? new Item(drop.getItemId(),
(drop.getMinAmount() * Settings.DROP_RATE)
+ Utils.getRandom(drop.getExtraAmount() * Settings.DROP_RATE))
: new Item(drop.getItemId(), (drop.getMinAmount() + Utils.getRandom(drop.getExtraAmount())));
if (Settings.DOUBLE_DROP && (drop.getRate() == 100 || item.getDefinitions().isStackable()
|| item.getDefinitions().isNoted() || rareDrop(dropName.toLowerCase())))
item.setAmount(item.getAmount() * 2);
ItemDefinitions defs = ItemDefinitions.getItemDefinitions(drop.getItemId());
/* LootShare/CoinShare */
if (player.isToogleLootShare()) {
sendLootshare(player, drop, item);
} else if (!player.isToogleLootShare() || sendDp) {
if (player.getInventory().containsItem(19675, 1) && defs.getName().toLowerCase().contains("grimy")) {
if (player.getSkills().getLevel(Skills.HERBLORE) >= HerbCleaning.getHerb(drop.getItemId()).getLevel()) {
handleHerbicide(player, drop, item, false);
return;
}
}
if (defs.getName().toLowerCase().equalsIgnoreCase("bones")
|| defs.getName().toLowerCase().contains(" bones")
&& player.getInventory().containsItem(18337, 1)) {
handleBonecrusher(player, drop, item, false);
return;
}
if (item.getAmount() > 0) {
World.updateGroundItem(item, new WorldTile(getCoordFaceX(size), getCoordFaceY(size), getPlane()),
player, 60, 0);
if (rareDrop(dropName.toLowerCase())) {
World.sendWorldMessage("<img=7><col=36648b>News: " + player.getDisplayName() + " has recieved "
+ (item.getAmount() > 1 ? item.getAmount() + " x " + dropName : dropName)
+ " as loot from (" + getName() + ")!", false);
}
}
}
}
private boolean rareDrop(String name) {
if (name.contains("virtus") || name.contains("bandos chest") || name.contains("bandos tasset")
|| name.contains("bandos boots") || name.contains("hilt") || name.contains("visage")
|| name.contains("sigil") || name.contains("korasi") || name.contains("armadyl chain")
|| name.contains("armadyl helm") || name.contains("armadyl chest") || name.contains("dragon claws")
|| name.contains("berserker ring") || name.contains("archers' ring") || name.contains("seers' ring")
|| name.contains("warrior ring") || name.contains("zamorakian") || name.contains("saradomin sword")
|| name.contains("dragon pickaxe") || name.contains("ragefire") || name.contains("steadfast")
|| name.contains("glaiven") || name.contains("morrigan") || name.contains("zuriel")
|| name.contains("vesta") || name.contains("statius") || name.contains("fury"))
return true;
return false;
}