Originally Posted by
omnee
Why do you say that?
I'm in no way experienced in private servers, been working with this one for a bit and I'm really enjoying it
The amount of code used for such simple things, seems unbelievably overkill and annoying to work with
If the combat was entity based, you could just do something like (Code was written up really quick by hand);
Code:
public static void applyRecoilNPC(final Entity attacker, final Damage damage) {
if (!(entity instanceof Player)) {
return;
}
final recoilDamage = damage.getCount() / 10;
if (recoilDamage > 0 && entity.getEquipment().contains(RECOIL)) {
attacker.getDamageManager().submit(new Damage(DATA));
entity.decremetRecoilHits(1);
if (entity.getRecoilHits() <= 0) {
entity.getEquipment().remove(RECOIL);
final Player player = (Player) entity;
if (player != null)
player.sendOutgoingPacket(new Message("The recoil has shattered"));
}
}
}
getCloseRandomPlayer() (Also written really quickly from on top of my head):
Code:
public int getRandomClosePlayer() {
if (getHitpoints() <= 0 || isDead() || getCombatBuilder().getUnderAttackBy() != null || getCombatBuilder().getTarget() != null)
return -1;
final List<Player> players = new ArrayList<Player>();
RegionManager.getLocalPlayers(getPosition()).forEach(player -> {
if (getPosition().isWithinRange(player, distance) && player.getCombatBuilder().getUnderAttackBy() == null) {
players.add(player);
}
});
return players.size() > 0 ? players.get(random.nextInt(players.size()) : -1;
}
Compared to:
Code:
public int getCloseRandomPlayer(int i) {
ArrayList<Integer> players = new ArrayList<>();
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
if (Boundary.isIn(npcs[i], Boundary.GODWARS_BOSSROOMS)) {
if (!Boundary.isIn(PlayerHandler.players[j], Boundary.GODWARS_BOSSROOMS)) {
npcs[i].killerId = 0;
continue;
}
}
if (goodDistance(PlayerHandler.players[j].absX, PlayerHandler.players[j].absY, npcs[i].absX,
npcs[i].absY, distanceRequired(i) + followDistance(i)) || isFightCaveNpc(i)) {
if ((PlayerHandler.players[j].underAttackBy <= 0 && PlayerHandler.players[j].underAttackBy2 <= 0)
|| PlayerHandler.players[j].inMulti())
if (PlayerHandler.players[j].heightLevel == npcs[i].heightLevel)
players.add(j);
}
}
}
if (players.size() > 0)
return players.get(Misc.random(players.size() - 1));
return 0;
}
However, take my code with a grain of salt, I'm by no means the best person on here to give you advice