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 static com.osroyale.game.world.entity.combat.attack.FormulaFactory.getModifiedMaxHit;
23public class PureRangeMelee
extends SimplifiedListener<Player> implements BotClass {
26 public Item[] inventory() {
28 new Item(2444),
new Item(12695),
new Item(3144),
new Item(3144),
29 new Item(3024),
new Item(3024),
new Item(3144),
new Item(3144),
30 new Item(3024),
new Item(3024),
new Item(391),
new Item(391),
31 new Item(391),
new Item(391),
new Item(391),
new Item(391),
32 new Item(391),
new Item(391),
new Item(391),
new Item(391),
33 new Item(391),
new Item(11802),
new Item(391),
new Item(391),
34 new Item(391),
new Item(391),
new Item(391),
new Item(391)
39 public Item[] equipment() {
40 return new Item[] {
new Item(2900),
new Item(10498),
new Item(1129),
new Item(11978),
new Item(892, 125),
new Item(3105),
new Item(2497),
new Item(861),
new Item(2491) };
44 public int[] skills() {
45 return new int[] { 75, 1, 99, 80, 99, 52, 1 };
49 public void initCombat(Player target, PlayerBot bot) {
51 bot.prayer.toggle(Prayer.PROTECT_ITEM, Prayer.EAGLE_EYE);
52 bot.getCombat().addListener(
this);
53 bot.spellCasting.cast(
new Vengeance(),
null);
54 bot.getCombat().setFightType(FightType.SHORTBOW_RAPID);
58 public void handleCombat(Player target, PlayerBot bot) {
59 if (!bot.prayer.isActive(Prayer.SMITE) && target.prayer.isActive(Prayer.SMITE)) {
60 bot.prayer.toggle(Prayer.SMITE);
61 bot.speak(
"Let's smite then...");
62 }
else if (bot.prayer.isActive(Prayer.SMITE) && !target.prayer.isActive(Prayer.SMITE)) {
63 bot.prayer.toggle(Prayer.SMITE);
66 if (bot.isSpecialActivated() && target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
67 bot.speak(
"That's such bullshit...");
68 bot.getCombatSpecial().disable(bot,
false);
72 if (!bot.prayer.isActive(Prayer.PROTECT_FROM_MELEE) && target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
73 bot.prayer.toggle(Prayer.PROTECT_FROM_MELEE);
74 }
else if (bot.prayer.isActive(Prayer.PROTECT_FROM_MELEE) && !target.prayer.isActive(Prayer.PROTECT_FROM_MELEE)) {
75 bot.prayer.toggle(Prayer.PROTECT_FROM_MELEE);
80 public void endFight(PlayerBot bot) {
81 bot.prayer.deactivate(Prayer.PROTECT_ITEM, Prayer.SMITE, Prayer.EAGLE_EYE, Prayer.ULTIMATE_STRENGTH, Prayer.STEEL_SKIN, Prayer.INCREDIBLE_REFLEXES);
85 public void hit(Player attacker, Mob defender, Hit hit) {
86 int max = getModifiedMaxHit(attacker, defender, CombatType.MELEE);
88 boolean hasSpec = attacker.getSpecialPercentage().intValue() >= 50;
89 boolean lowHp = defender.getCurrentHealth() <= defender.getMaximumHealth() * RandomUtils.inclusive(0.50, 0.65);
90 boolean combo = defender.getCurrentHealth() <= defender.getMaximumHealth() * RandomUtils.inclusive(0.50, 0.70)
91 && hit.getDamage() >= max * RandomUtils.inclusive(0.65, 0.75);
96 PlayerBot bot = ((PlayerBot) attacker);
97 bot.schedule(4, () -> {
98 if (bot.equipment.getWeapon().matchesId(861)) {
99 int index = bot.inventory.computeIndexForId(11802);
100 bot.equipment.equip(index);
101 bot.getCombat().setFightType(FightType.GODSWORD_SLASH);
105 if (hasSpec && (lowHp || RandomUtils.success(0.75)))
106 bot.getCombatSpecial().enable(bot);
108 bot.schedule(4, () -> {
109 if (!bot.isSpecialActivated() && bot.equipment.getWeapon().matchesId(11802)) {
110 int idx = bot.inventory.computeIndexForId(861);
111 bot.equipment.equip(idx);
112 bot.getCombat().setFightType(FightType.SHORTBOW_RAPID);
120 public void pot(Player target, PlayerBot bot) {
121 int max = target.playerAssistant.getMaxHit(bot, target.getStrategy().getCombatType());
122 if (target.getCurrentHealth() <= Math.floor(target.getMaximumHealth() * 0.35) && max < bot.getCurrentHealth())
125 if (!bot.potionDelay.elapsed(1250)) {
130 ItemClickEvent event;
132 if (checkSkill(bot, Skill.PRAYER, 25)) {
133 int index = bot.inventory.computeIndexForId(3024);
135 event =
new ItemClickEvent(0, bot.inventory.get(index), index);
136 potion = PotionData.SUPER_RESTORE_POTIONS;
137 bot.pot(target, event, potion);
140 if (checkSkill(bot, Skill.ATTACK, 71)
141 || checkSkill(bot, Skill.STRENGTH, 115)
142 || checkSkill(bot, Skill.DEFENCE, 3)) {
143 int index = bot.inventory.computeIndexForId(12695);
145 event =
new ItemClickEvent(0, bot.inventory.get(index), index);
146 potion = PotionData.SUPER_COMBAT_POTION;
147 bot.pot(target, event, potion);
150 if (checkSkill(bot, Skill.RANGED, 108)) {
151 int index = bot.inventory.computeIndexForId(2444);
153 event =
new ItemClickEvent(0, bot.inventory.get(index), index);
154 potion = PotionData.RANGE_POTIONS;
155 bot.pot(target, event, potion);
162 public void eat(Player target, PlayerBot bot) {
163 int max = target.playerAssistant.getMaxHit(bot, target.getStrategy().getCombatType());
164 if (bot.getCurrentHealth() > bot.getMaximumHealth() * 0.45 && max < bot.getCurrentHealth())
167 if (target.getCurrentHealth() <= Math.floor(target.getMaximumHealth() * 0.35) && max < bot.getCurrentHealth())
170 int index = bot.inventory.computeIndexForId(391);
172 EatFoodPlugin.eat(bot, bot.inventory.get(index), index, FoodData.MANTA);
176 if (bot.getCurrentHealth() >= bot.getMaximumHealth() * 0.35)
179 index = bot.inventory.computeIndexForId(3144);
181 EatFoodPlugin.eat(bot, bot.inventory.get(index), index, FoodData.COOKED_KARAMBWAN);
187 public boolean canOtherAttack(Mob attacker, Player defender) {
188 if (defender.getCombat().isAttacking() && !defender.getCombat().isAttacking(attacker)) {
189 attacker.getPlayer().message(
"You cannot attack a bot while they are attacking another player.");
196 public void block(Mob attacker, Player defender, Hit hit, CombatType combatType) {
197 ((PlayerBot) defender).consumableDelay = RandomUtils.inclusive(1, 3);
200 private void rangedPrayers(PlayerBot bot) {
201 bot.prayer.deactivate(Prayer.ULTIMATE_STRENGTH, Prayer.STEEL_SKIN, Prayer.INCREDIBLE_REFLEXES);
203 if (bot.prayer.isActive(Prayer.EAGLE_EYE))
204 bot.prayer.toggle(Prayer.EAGLE_EYE);
207 private void meleePrayers(PlayerBot bot) {
208 bot.prayer.deactivate(Prayer.EAGLE_EYE);
210 if (bot.prayer.isActive(Prayer.ULTIMATE_STRENGTH))
211 bot.prayer.toggle(Prayer.ULTIMATE_STRENGTH);
213 if (bot.prayer.isActive(Prayer.STEEL_SKIN))
214 bot.prayer.toggle(Prayer.STEEL_SKIN);
216 if (bot.prayer.isActive(Prayer.INCREDIBLE_REFLEXES))
217 bot.prayer.toggle(Prayer.INCREDIBLE_REFLEXES);
220 private boolean checkSkill(PlayerBot bot,
int id,
int minimum) {
221 return bot.skills.getLevel(
id) <= minimum;