1package com.osroyale.content.bot.botclass.impl;
3import com.osroyale.content.bot.PlayerBot;
4import com.osroyale.content.bot.botclass.BotClass;
5import com.osroyale.content.consume.FoodData;
6import com.osroyale.content.consume.PotionData;
7import com.osroyale.content.skill.impl.magic.spell.impl.Vengeance;
8import com.osroyale.game.event.impl.ItemClickEvent;
9import com.osroyale.game.world.entity.combat.CombatType;
10import com.osroyale.game.world.entity.combat.attack.FightType;
11import com.osroyale.game.world.entity.combat.attack.listener.SimplifiedListener;
12import com.osroyale.game.world.entity.combat.hit.Hit;
13import com.osroyale.game.world.entity.mob.Mob;
14import com.osroyale.game.world.entity.mob.player.Player;
15import com.osroyale.game.world.entity.mob.prayer.Prayer;
16import com.osroyale.game.world.entity.skill.Skill;
17import com.osroyale.game.world.items.Item;
18import com.osroyale.util.RandomUtils;
19import plugin.click.item.EatFoodPlugin;
21import java.util.concurrent.TimeUnit;
23import static com.osroyale.game.world.entity.combat.attack.FormulaFactory.getModifiedMaxHit;
25public class ZerkerMelee
extends SimplifiedListener<Player> implements BotClass {
28 public Item[] inventory() {
30 new Item(5698),
new Item(21003),
new Item(12695),
new Item(3024),
31 new Item(3024),
new Item(3024),
new Item(3024),
new Item(3144),
32 new Item(3144),
new Item(3144),
new Item(3144),
new Item(3144),
33 new Item(3144),
new Item(560, 150),
new Item(9075, 150),
new Item(557, 300),
34 new Item(391),
new Item(391),
new Item(391),
new Item(391),
35 new Item(391),
new Item(391),
new Item(391),
new Item(391),
36 new Item(391),
new Item(391),
new Item(391),
new Item(391)
41 public Item[] equipment() {
57 public int[] skills() {
58 return new int[] { 75, 45, 99, 99, 1, 52, 1 };
62 public void initCombat(Player target, PlayerBot bot) {
64 bot.prayer.toggle(Prayer.PROTECT_ITEM, Prayer.PIETY);
65 bot.getCombat().addListener(
this);
66 bot.spellCasting.cast(
new Vengeance(),
null);
67 bot.getCombat().setFightType(FightType.SCIMITAR_SLASH);
71 public void handleCombat(Player target, PlayerBot bot) {
72 if (!bot.prayer.isActive(Prayer.SMITE) && target.prayer.isActive(Prayer.SMITE)) {
73 bot.prayer.toggle(Prayer.SMITE);
74 bot.speak(
"Let's smite then...");
75 }
else if (bot.prayer.isActive(Prayer.SMITE) && !target.prayer.isActive(Prayer.SMITE)) {
76 bot.prayer.toggle(Prayer.SMITE);
79 if (bot.isSpecialActivated() && target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
80 bot.speak(
"That's such bullshit...");
81 bot.getCombatSpecial().disable(bot,
false);
85 if (!bot.prayer.isActive(Prayer.PROTECT_FROM_MELEE) && target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
86 bot.prayer.toggle(Prayer.PROTECT_FROM_MELEE);
87 }
else if (bot.prayer.isActive(Prayer.PROTECT_FROM_MELEE) && !target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
88 bot.prayer.toggle(Prayer.PROTECT_FROM_MELEE);
91 if (bot.spellCasting.vengeanceDelay.elapsedTime(TimeUnit.SECONDS) >= 30) {
92 bot.spellCasting.cast(
new Vengeance(),
null);
97 public void endFight(PlayerBot bot) {
98 bot.prayer.deactivate(Prayer.PROTECT_ITEM, Prayer.SMITE, Prayer.PIETY);
102 public void hit(Player attacker, Mob defender, Hit hit) {
103 int max = getModifiedMaxHit(attacker, defender, CombatType.MELEE);
104 max = attacker.getCombat().modifyDamage(defender, max);
106 boolean hasRoom = attacker.inventory.getFreeSlots() > 0;
107 boolean hasSpec = attacker.getSpecialPercentage().intValue() >= 25;
108 boolean lowHp = defender.getCurrentHealth() <= defender.getMaximumHealth() * RandomUtils.inclusive(0.50, 0.65);
109 boolean combo = defender.getCurrentHealth() <= defender.getMaximumHealth() * RandomUtils.inclusive(0.50, 0.70)
110 && hit.getDamage() >= max * RandomUtils.inclusive(0.65, 0.75);
112 if (!combo && !lowHp)
115 PlayerBot bot = ((PlayerBot) attacker);
116 bot.schedule(4, () -> {
117 if (bot.equipment.getWeapon().matchesId(4587)) {
118 boolean useMaul = hasRoom && (!hasSpec || RandomUtils.success(0.50));
120 int index = bot.inventory.computeIndexForId(21103);
121 bot.equipment.equip(index);
122 bot.getCombat().setFightType(FightType.ELDER_MAUL_PUMMEL);
124 int index = bot.inventory.computeIndexForId(5698);
125 bot.equipment.equip(index);
126 bot.getCombat().setFightType(FightType.DRAGON_DAGGER_LUNGE);
130 if (bot.equipment.getWeapon().matchesId(5698) && hasSpec && (lowHp || RandomUtils.success(0.75)))
131 bot.getCombatSpecial().enable(bot);
133 bot.schedule(4, () -> {
134 if (!bot.isSpecialActivated() && bot.equipment.getWeapon().matchesId(5698)) {
135 int idx = bot.inventory.computeIndexForId(4587);
136 bot.equipment.equip(idx);
137 idx = bot.inventory.computeIndexForId(8850);
138 bot.equipment.equip(idx);
139 bot.getCombat().setFightType(FightType.SCIMITAR_SLASH);
146 public void pot(Player target, PlayerBot bot) {
147 if (target.getCurrentHealth() <= Math.floor(target.getMaximumHealth() * 0.35))
150 if (!bot.potionDelay.elapsed(1250)) {
155 ItemClickEvent event;
157 if (checkSkill(bot, Skill.PRAYER, 40)) {
158 int index = bot.inventory.computeIndexForId(3024);
160 event =
new ItemClickEvent(0, bot.inventory.get(index), index);
161 potion = PotionData.SUPER_RESTORE_POTIONS;
162 bot.pot(target, event, potion);
164 }
else if (checkSkill(bot, Skill.ATTACK, 115)
165 || checkSkill(bot, Skill.STRENGTH, 115)
166 || checkSkill(bot, Skill.DEFENCE, 115)) {
167 int index = bot.inventory.computeIndexForId(12695);
169 event =
new ItemClickEvent(0, bot.inventory.get(index), index);
170 potion = PotionData.SUPER_COMBAT_POTION;
171 bot.pot(target, event, potion);
177 public void eat(Player target, PlayerBot bot) {
178 int max = target.playerAssistant.getMaxHit(bot, target.getStrategy().getCombatType());
179 if (bot.getCurrentHealth() > bot.getMaximumHealth() * 0.45 && max < bot.getCurrentHealth())
182 if (target.getCurrentHealth() <= Math.floor(target.getMaximumHealth() * 0.35) && max < bot.getCurrentHealth())
185 int index = bot.inventory.computeIndexForId(391);
187 EatFoodPlugin.eat(bot, bot.inventory.get(index), index, FoodData.MANTA);
191 if (bot.getCurrentHealth() >= bot.getMaximumHealth() * 0.35)
194 index = bot.inventory.computeIndexForId(3144);
196 EatFoodPlugin.eat(bot, bot.inventory.get(index), index, FoodData.COOKED_KARAMBWAN);
202 public boolean canOtherAttack(Mob attacker, Player defender) {
203 if (defender.getCombat().isAttacking() && !defender.getCombat().isAttacking(attacker)) {
204 attacker.getPlayer().message(
"You cannot attack a bot while they are attacking another player.");
211 public void block(Mob attacker, Player defender, Hit hit, CombatType combatType) {
212 ((PlayerBot) defender).consumableDelay = RandomUtils.inclusive(1, 3);
215 private boolean checkSkill(PlayerBot bot,
int id,
int minimum) {
216 return bot.skills.getLevel(
id) < minimum;