Kotlin/Java split
This commit is contained in:
@@ -0,0 +1,281 @@
|
||||
package rs09.game.ai.wilderness;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import core.game.container.impl.EquipmentContainer;
|
||||
import core.game.content.consumable.Consumable;
|
||||
import core.game.content.consumable.Consumables;
|
||||
import core.game.content.consumable.Food;
|
||||
import core.game.content.consumable.effects.HealingEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
import core.game.interaction.Option;
|
||||
import core.game.node.entity.Entity;
|
||||
import core.game.node.entity.player.Player;
|
||||
import rs09.game.ai.AIPlayer;
|
||||
import core.game.node.entity.player.link.prayer.PrayerType;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.world.map.Location;
|
||||
import core.game.world.map.RegionManager;
|
||||
import core.tools.RandomFunction;
|
||||
|
||||
public class WildernessBot extends AIPlayer {
|
||||
|
||||
public WildernessBot(Location l) {
|
||||
super(l);
|
||||
this.specWeapon = 1215;
|
||||
this.normalWeapon = 4151;
|
||||
this.getInventory().add(new Item(specWeapon));
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public WildernessBot(Location l, int normalWeaponId, int specWeaponId) {
|
||||
super(l);
|
||||
this.specWeapon = specWeaponId;
|
||||
this.normalWeapon = normalWeaponId;
|
||||
this.getInventory().add(new Item(specWeaponId));
|
||||
}
|
||||
|
||||
int tick = 0;
|
||||
int movetimer = 0;
|
||||
int agressiveTimer = 2;
|
||||
int eatdelay = 2;
|
||||
boolean fleeing = false;
|
||||
boolean riskIt = false;
|
||||
int specWeapon;// = new Item(1215);
|
||||
int normalWeapon;// = new Item(4151);
|
||||
|
||||
Item chest = this.getEquipment().get(EquipmentContainer.SLOT_CHEST);
|
||||
Item legs = this.getEquipment().get(EquipmentContainer.SLOT_LEGS);
|
||||
Item helmet = this.getEquipment().get(EquipmentContainer.SLOT_HAT);
|
||||
Item weapon = this.getEquipment().get(EquipmentContainer.SLOT_WEAPON);
|
||||
Item shield = this.getEquipment().get(EquipmentContainer.SLOT_SHIELD);
|
||||
|
||||
|
||||
public List<Entity> FindTargets(Entity entity, int radius) {
|
||||
List<Entity> targets = new ArrayList<>();
|
||||
for (Player player : RegionManager.getLocalPlayers(entity, radius)) { {
|
||||
if (checkValidTargets(player))
|
||||
targets.add(player);
|
||||
}
|
||||
}
|
||||
if (targets.size() == 0)
|
||||
return null;
|
||||
return targets;
|
||||
}
|
||||
|
||||
public boolean checkValidTargets(Player target){
|
||||
if (!target.isActive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!target.getProperties().isMultiZone() && target.inCombat()) {
|
||||
return false;
|
||||
}
|
||||
if (target.inCombat())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void AttackPlayersInRadius(Player bot, int radius)
|
||||
{
|
||||
if (bot.inCombat())
|
||||
return;
|
||||
List<Entity> players = FindTargets(bot, radius);
|
||||
if (players == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!(players.isEmpty()))
|
||||
{
|
||||
if (agressiveTimer <= 0)
|
||||
bot.attack(players.get(RandomFunction.getRandom((players.size() - 1))));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private Entity getTarget()
|
||||
{
|
||||
return this.getProperties().getCombatPulse().getVictim();
|
||||
}
|
||||
|
||||
private void checkSpecialAttack()
|
||||
{
|
||||
Entity target = getTarget();
|
||||
if (target == null)
|
||||
return;
|
||||
|
||||
if (target.getSkills().getLifepoints() <= 75 && this.getSettings().getSpecialEnergy() >= 25)
|
||||
{
|
||||
//System.out.println("try special");
|
||||
Item weapon = this.getItemById(specWeapon);
|
||||
if (weapon != null)
|
||||
{
|
||||
//System.out.println("found weapon " + weapon.getName());
|
||||
final Option option = weapon.getInteraction().get(1);
|
||||
if (option == null)
|
||||
{
|
||||
System.out.println("Option not found");
|
||||
return;
|
||||
}
|
||||
weapon.getInteraction().handleItemOption(this, option, this.getInventory());
|
||||
this.getSettings().setSpecialToggled(true);
|
||||
this.attack(target);
|
||||
}
|
||||
if (!this.getSettings().isSpecialToggled())
|
||||
{
|
||||
//System.out.println("toggle special");
|
||||
this.getSettings().setSpecialToggled(true);
|
||||
this.attack(target);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//System.out.println("try normal again");
|
||||
Item weapon = this.getItemById(normalWeapon);
|
||||
if (weapon != null)
|
||||
{
|
||||
//System.out.println("found weapon " + weapon.getName());
|
||||
final Option option = weapon.getInteraction().get(1);
|
||||
if (option == null)
|
||||
{
|
||||
System.out.println("Option not found");
|
||||
return;
|
||||
}
|
||||
weapon.getInteraction().handleItemOption(this, option, this.getInventory());
|
||||
this.getSettings().setSpecialToggled(false);
|
||||
this.attack(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBarrowsSwitch()
|
||||
{
|
||||
System.out.println("WildernessBot: " + this.getSkills().getLifepoints());
|
||||
Entity target = getTarget();
|
||||
if (target == null)
|
||||
return;
|
||||
|
||||
if (this.getSkills().getLifepoints() <= 35 && target.isPlayer() && target.getSkills().getLifepoints() <= 60)
|
||||
{
|
||||
this.getEquipment().replace(new Item(4720) ,EquipmentContainer.SLOT_CHEST);
|
||||
this.getEquipment().replace(new Item(4722) ,EquipmentContainer.SLOT_LEGS);
|
||||
this.getEquipment().replace(new Item(4716) ,EquipmentContainer.SLOT_HAT);
|
||||
this.getEquipment().replace(new Item(4719) ,EquipmentContainer.SLOT_WEAPON);
|
||||
this.getEquipment().replace(new Item(-1) ,EquipmentContainer.SLOT_SHIELD);
|
||||
riskIt = true;
|
||||
}
|
||||
else if (riskIt)
|
||||
{
|
||||
this.getEquipment().replace(chest, EquipmentContainer.SLOT_CHEST);
|
||||
this.getEquipment().replace(legs, EquipmentContainer.SLOT_LEGS);
|
||||
this.getEquipment().replace(helmet, EquipmentContainer.SLOT_HAT);
|
||||
this.getEquipment().replace(weapon, EquipmentContainer.SLOT_WEAPON);
|
||||
this.getEquipment().replace(shield, EquipmentContainer.SLOT_SHIELD);
|
||||
riskIt = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkPrayer()
|
||||
{
|
||||
if (this.inCombat())
|
||||
{
|
||||
if (!(this.getPrayer().getActive().contains(PrayerType.PIETY)))
|
||||
this.getPrayer().toggle((PrayerType.PIETY));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
super.tick();
|
||||
//checkBarrowsSwitch();
|
||||
checkSpecialAttack();
|
||||
checkPrayer();
|
||||
//Despawn
|
||||
if (this.getSkills().getLifepoints() == 0)
|
||||
//this.teleport(new Location(500, 500));
|
||||
//Despawning not being delayed causes 3 errors in the console
|
||||
AIPlayer.deregister(this.getUid());
|
||||
if (agressiveTimer != 0)
|
||||
{
|
||||
agressiveTimer--;
|
||||
}
|
||||
|
||||
//Combat
|
||||
if (!fleeing)
|
||||
{
|
||||
if (tick == 0)
|
||||
{
|
||||
if (!this.inCombat())
|
||||
AttackPlayersInRadius(this, 5);
|
||||
this.tick = 10;
|
||||
}
|
||||
else
|
||||
this.tick--;
|
||||
|
||||
if (!this.inCombat())
|
||||
{
|
||||
if (movetimer == 0)
|
||||
{
|
||||
//if (this.FindTargets(this, 5) == null)
|
||||
this.randomWalk(20, 20);
|
||||
this.movetimer = 10;
|
||||
}
|
||||
else
|
||||
movetimer --;
|
||||
}
|
||||
}
|
||||
this.sendChat("Tik");
|
||||
this.checkFlee(385);
|
||||
this.eat(385);
|
||||
//this.getPrayer().toggle()
|
||||
}
|
||||
|
||||
public void checkFlee(int foodId)
|
||||
{
|
||||
if (this.getInventory().contains(foodId, 18) == false)
|
||||
{
|
||||
//todo: add tp
|
||||
// if ()
|
||||
this.getProperties().setRetaliating(false);
|
||||
this.sendChat("Oi");
|
||||
walkPos(this.getLocation().getLocalX(), this.getLocation().getLocalY() - 5 - RandomFunction.getRandom(5));
|
||||
fleeing = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void eat(int foodId)
|
||||
{
|
||||
if (riskIt)
|
||||
return;
|
||||
|
||||
Item foodItem = new Item(foodId);
|
||||
|
||||
if (!(this.getInventory().contains(foodId, 1)))
|
||||
return;
|
||||
|
||||
if((this.getSkills().getStaticLevel(Skills.HITPOINTS) >= this.getSkills().getLifepoints() * 3) && this.getInventory().containsItem(foodItem))
|
||||
{
|
||||
this.lock(3);
|
||||
//this.animate(new Animation(829));
|
||||
Item food = this.getInventory().getItem(foodItem);
|
||||
|
||||
Consumable consumable = Consumables.getConsumableById(food.getId());
|
||||
|
||||
if (consumable == null) {
|
||||
consumable = new Food(new int[] {food.getId()}, new HealingEffect(1));
|
||||
}
|
||||
|
||||
consumable .consume(food, this);
|
||||
this.getProperties().getCombatPulse().delayNextAttack(3);
|
||||
}
|
||||
}
|
||||
|
||||
public void setMainWeapon(int weapon)
|
||||
{
|
||||
this.normalWeapon = weapon;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user