Browse Source

stances for guards

feature-workorder
FatBoy-DOTC 1 year ago
parent
commit
df3964110a
  1. 88
      src/engine/gameManager/NPCManager.java
  2. 2
      src/engine/mobileAI/MobAI.java
  3. 12
      src/engine/objects/AbstractCharacter.java
  4. 21
      src/engine/objects/Mob.java

88
src/engine/gameManager/NPCManager.java

@ -5,14 +5,17 @@ import engine.InterestManagement.WorldGrid; @@ -5,14 +5,17 @@ import engine.InterestManagement.WorldGrid;
import engine.math.Quaternion;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.mobileAI.MobAI;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.msg.PetMsg;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.powers.PowersBase;
import engine.powers.RuneSkillAdjustEntry;
import org.pmw.tinylog.Logger;
import javax.smartcardio.ATR;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.ThreadLocalRandom;
@ -274,6 +277,91 @@ public enum NPCManager { @@ -274,6 +277,91 @@ public enum NPCManager {
}
}
public static void setDamageAndSpeedForGuard(Mob guard){
//handle stance for guard mob
String stancePowerName = "";
if(guard.agentType.equals(Enum.AIAgentType.GUARDWALLARCHER)){
//apply rogue offensive stance
stancePowerName = "STC-R-O";
}else {
Integer contractID;
if (guard.agentType.equals(Enum.AIAgentType.GUARDMINION)) {
contractID = guard.guardCaptain.contract.getContractID();
} else{
contractID = guard.contract.getContractID();
}
if (Enum.MinionType.ContractToMinionMap.get(contractID) != null && Enum.MinionType.ContractToMinionMap.get(contractID).isMage()){
//apply mage offensive Stance
stancePowerName = "STC-M-O";
} else{
//apply fighter offensive stance
stancePowerName = "STC-F-O";
}
}
int stancePowerRank = MobAI.getGuardPowerRank(guard);
PowersBase stancePower = PowersManager.getPowerByIDString(stancePowerName);
PowersManager.useMobPower(guard,guard,stancePower,stancePowerRank);
if(guard.equip == null) {
guard.minDamageHandOne = (int)(guard.mobBase.getDamageMin());
guard.maxDamageHandOne = (int)(guard.mobBase.getDamageMax());
guard.speedHandOne = 30.0f;
}else{
if(guard.equip.containsKey(1)){
//has main hand weapon
ItemBase weapon = guard.equip.get(1).getItemBase();
guard.minDamageHandOne = (int)(guard.mobBase.getDamageMin() + weapon.getMinDamage());
guard.maxDamageHandOne = (int)(guard.mobBase.getDamageMax() + weapon.getMaxDamage());
guard.speedHandOne = weapon.getSpeed();
} else if(guard.equip.containsKey(2) && !guard.equip.get(2).getItemBase().isShield()){
//has off hand weapon
ItemBase weapon = guard.equip.get(2).getItemBase();
guard.minDamageHandTwo = (int)(guard.mobBase.getDamageMin() + weapon.getMinDamage());
guard.maxDamageHandTwo = (int)(guard.mobBase.getDamageMax() + weapon.getMaxDamage());
guard.speedHandTwo = weapon.getSpeed();
} else {
guard.minDamageHandOne = (int)(guard.mobBase.getDamageMin());
guard.maxDamageHandOne = (int)(guard.mobBase.getDamageMax());
guard.speedHandOne = 30.0f;
}
}
}
public static void setDefenseForGuard(Mob guard){
}
public static void setAttackRatingForGuard(Mob guard){
}
public static void setMaxHealthForGuard(Mob guard){
//values derived fom reading memory address for health on client when selecting player guards
switch(guard.getRank()){
default:
guard.healthMax = 750; //rank 1
break;
case 2:
guard.healthMax = 2082;
break;
case 3:
guard.healthMax = 2740;
break;
case 4:
guard.healthMax = 3414;
break;
case 5:
guard.healthMax = 4080;
break;
case 6:
guard.healthMax = 4746;
break;
case 7:
guard.healthMax = 5412;
break;
}
}
public static void applyMobbaseEffects(Mob mob) {
EffectsBase effectsBase;
for (MobBaseEffects mbe : mob.mobBase.effectsList) {

2
src/engine/mobileAI/MobAI.java

@ -456,7 +456,7 @@ public class MobAI { @@ -456,7 +456,7 @@ public class MobAI {
return false;
}
private static int getGuardPowerRank(Mob mob) {
public static int getGuardPowerRank(Mob mob) {
int powerRank = 1;
switch (mob.getRank()) {

12
src/engine/objects/AbstractCharacter.java

@ -94,14 +94,14 @@ public abstract class AbstractCharacter extends AbstractWorldObject { @@ -94,14 +94,14 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
protected ConcurrentHashMap<String, Long> timestamps;
protected int atrHandOne;
protected int atrHandTwo;
protected int minDamageHandOne;
protected int maxDamageHandOne;
protected int minDamageHandTwo;
protected int maxDamageHandTwo;
public int minDamageHandOne;
public int maxDamageHandOne;
public int minDamageHandTwo;
public int maxDamageHandTwo;
protected float rangeHandOne;
protected float rangeHandTwo;
protected float speedHandOne;
protected float speedHandTwo;
public float speedHandOne;
public float speedHandTwo;
protected int defenseRating;
protected boolean isActive; // <-Do not use this for deleting character!
protected float altitude = 0; // 0=on terrain, 1=tier 1, 2=tier 2, etc.

21
src/engine/objects/Mob.java

@ -1030,12 +1030,12 @@ public class Mob extends AbstractIntelligenceAgent { @@ -1030,12 +1030,12 @@ public class Mob extends AbstractIntelligenceAgent {
}
public void recalculateStats() {
try {
calculateModifiedStats();
} catch (Exception e) {
Logger.error(e.getMessage());
}
if(this.isPlayerGuard()){
NPCManager.setMaxHealthForGuard(this);
NPCManager.setAttackRatingForGuard(this);
NPCManager.setDefenseForGuard(this);
NPCManager.setDamageAndSpeedForGuard(this);
}else {
try {
calculateAtrDefenseDamage();
@ -1047,7 +1047,14 @@ public class Mob extends AbstractIntelligenceAgent { @@ -1047,7 +1047,14 @@ public class Mob extends AbstractIntelligenceAgent {
} catch (Exception e) {
Logger.error(e.getMessage());
}
}
try {
calculateModifiedStats();
} catch (Exception e) {
Logger.error(e.getMessage());
}
if(this.isSiege())
this.healthMax = 10000;
Resists.calculateResists(this);
}

Loading…
Cancel
Save