mob work
This commit is contained in:
@@ -252,12 +252,12 @@ public class CombatUtilities {
|
|||||||
if (agent.getEquip().get(1) != null && agent.getEquip().get(2) != null && agent.getEquip().get(2).getItemBase().isShield() == false) {
|
if (agent.getEquip().get(1) != null && agent.getEquip().get(2) != null && agent.getEquip().get(2).getItemBase().isShield() == false) {
|
||||||
//mob is duel wielding and should conduct an attack for each hand
|
//mob is duel wielding and should conduct an attack for each hand
|
||||||
ItemBase weapon1 = agent.getEquip().get(1).getItemBase();
|
ItemBase weapon1 = agent.getEquip().get(1).getItemBase();
|
||||||
double range1 = getMaxDmg(weapon1.getMinDamage(), agent, weapon1) - getMinDmg(weapon1.getMinDamage(), agent, weapon1);
|
double range1 = getMaxDmg(agent) - getMinDmg(agent);
|
||||||
double damage1 = getMinDmg(weapon1.getMinDamage(), agent, weapon1) + ((ThreadLocalRandom.current().nextFloat() * range1) + (ThreadLocalRandom.current().nextFloat() * range1)) / 2;
|
double damage1 = getMinDmg(agent) + ((ThreadLocalRandom.current().nextFloat() * range1) + (ThreadLocalRandom.current().nextFloat() * range1)) / 2;
|
||||||
swingIsDamage(agent, target, (float) damage1, CombatManager.getSwingAnimation(weapon1, null, true));
|
swingIsDamage(agent, target, (float) damage1, CombatManager.getSwingAnimation(weapon1, null, true));
|
||||||
ItemBase weapon2 = agent.getEquip().get(2).getItemBase();
|
ItemBase weapon2 = agent.getEquip().get(2).getItemBase();
|
||||||
double range2 = getMaxDmg(weapon2.getMinDamage(), agent, weapon2) - getMinDmg(weapon2.getMinDamage(), agent, weapon2);
|
double range2 = getMaxDmg(agent) - getMinDmg(agent);
|
||||||
double damage2 = getMinDmg(weapon2.getMinDamage(), agent, weapon2) + ((ThreadLocalRandom.current().nextFloat() * range2) + (ThreadLocalRandom.current().nextFloat() * range2)) / 2;
|
double damage2 = getMinDmg(agent) + ((ThreadLocalRandom.current().nextFloat() * range2) + (ThreadLocalRandom.current().nextFloat() * range2)) / 2;
|
||||||
swingIsDamage(agent, target, (float) damage2, CombatManager.getSwingAnimation(weapon1, null, false));
|
swingIsDamage(agent, target, (float) damage2, CombatManager.getSwingAnimation(weapon1, null, false));
|
||||||
} else {
|
} else {
|
||||||
swingIsDamage(agent, target, determineDamage(agent), anim);
|
swingIsDamage(agent, target, determineDamage(agent), anim);
|
||||||
@@ -307,9 +307,9 @@ public class CombatUtilities {
|
|||||||
float damage = 0;
|
float damage = 0;
|
||||||
|
|
||||||
DamageType dt = getDamageType(agent);
|
DamageType dt = getDamageType(agent);
|
||||||
if ((agent.agentType.equals(AIAgentType.PET)) == true || agent.isPet() == true || agent.isNecroPet() == true) {
|
if (agent.BehaviourType.equals(MobBehaviourType.Pet1)) {
|
||||||
damage = calculatePetDamage(agent);
|
damage = calculateMobDamage(agent);
|
||||||
} else if (agent.isPlayerGuard() == true) {
|
} else if (agent.isPlayerGuard()) {
|
||||||
//damage = calculateGuardDamage(agent);
|
//damage = calculateGuardDamage(agent);
|
||||||
damage = calculateMobDamage(agent);
|
damage = calculateMobDamage(agent);
|
||||||
} else if (agent.getLevel() > 80) {
|
} else if (agent.getLevel() > 80) {
|
||||||
@@ -349,8 +349,8 @@ public class CombatUtilities {
|
|||||||
float min = 40;
|
float min = 40;
|
||||||
float max = 60;
|
float max = 60;
|
||||||
float dmgMultiplier = 1 + agent.getBonuses().getFloatPercentAll(ModType.MeleeDamageModifier, SourceType.None);
|
float dmgMultiplier = 1 + agent.getBonuses().getFloatPercentAll(ModType.MeleeDamageModifier, SourceType.None);
|
||||||
double minDmg = getMinDmg(min, agent, null);
|
double minDmg = getMinDmg(agent);
|
||||||
double maxDmg = getMaxDmg(max, agent, null);
|
double maxDmg = getMaxDmg(agent);
|
||||||
dmgMultiplier += agent.getLevel() * 0.1f;
|
dmgMultiplier += agent.getLevel() * 0.1f;
|
||||||
range = (float) (maxDmg - minDmg);
|
range = (float) (maxDmg - minDmg);
|
||||||
damage = min + ((ThreadLocalRandom.current().nextFloat() * range) + (ThreadLocalRandom.current().nextFloat() * range)) / 2;
|
damage = min + ((ThreadLocalRandom.current().nextFloat() * range) + (ThreadLocalRandom.current().nextFloat() * range)) / 2;
|
||||||
@@ -366,8 +366,8 @@ public class CombatUtilities {
|
|||||||
|
|
||||||
double minDmg = weapon.getMinDamage();
|
double minDmg = weapon.getMinDamage();
|
||||||
double maxDmg = weapon.getMaxDamage();
|
double maxDmg = weapon.getMaxDamage();
|
||||||
double min = getMinDmg(minDmg, agent, weapon);
|
double min = getMinDmg(agent);
|
||||||
double max = getMaxDmg(maxDmg, agent, weapon);
|
double max = getMaxDmg(agent);
|
||||||
|
|
||||||
DamageType dt = weapon.getDamageType();
|
DamageType dt = weapon.getDamageType();
|
||||||
|
|
||||||
@@ -408,92 +408,48 @@ public class CombatUtilities {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int calculateMobDamage(Mob agent) {
|
public static int calculateMobDamage(Mob agent) {
|
||||||
ItemBase weapon = null;
|
double minDmg = getMinDmg(agent);
|
||||||
double minDmg;
|
double maxDmg = getMaxDmg(agent);
|
||||||
double maxDmg;
|
DamageType dt = getDamageType(agent);
|
||||||
DamageType dt;
|
|
||||||
|
|
||||||
//main hand or offhand damage
|
|
||||||
|
|
||||||
if (agent.getEquip().get(1) != null)
|
|
||||||
weapon = agent.getEquip().get(1).getItemBase();
|
|
||||||
else if (agent.getEquip().get(2) != null)
|
|
||||||
weapon = agent.getEquip().get(2).getItemBase();
|
|
||||||
|
|
||||||
if (weapon != null) {
|
|
||||||
minDmg = getMinDmg(weapon.getMinDamage(), agent, weapon);
|
|
||||||
maxDmg = getMaxDmg(weapon.getMaxDamage(), agent, weapon);
|
|
||||||
dt = weapon.getDamageType();
|
|
||||||
} else {
|
|
||||||
minDmg = agent.getMobBase().getDamageMin();
|
|
||||||
maxDmg = agent.getMobBase().getDamageMax();
|
|
||||||
dt = DamageType.Crush;
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractWorldObject target = agent.getCombatTarget();
|
AbstractWorldObject target = agent.getCombatTarget();
|
||||||
|
|
||||||
float dmgMultiplier = 1 + agent.getBonuses().getFloatPercentAll(ModType.MeleeDamageModifier, SourceType.None);
|
double damage = ThreadLocalRandom.current().nextInt((int)minDmg,(int)maxDmg + 1);
|
||||||
double range = maxDmg - minDmg;
|
|
||||||
double damage = minDmg + ((ThreadLocalRandom.current().nextFloat() * range) + (ThreadLocalRandom.current().nextFloat() * range)) / 2;
|
|
||||||
|
|
||||||
if (AbstractWorldObject.IsAbstractCharacter(target))
|
if (AbstractWorldObject.IsAbstractCharacter(target))
|
||||||
if (((AbstractCharacter) target).isSit())
|
if (((AbstractCharacter) target).isSit())
|
||||||
damage *= 2.5f; //increase damage if sitting
|
damage *= 2.5f; //increase damage if sitting
|
||||||
if (AbstractWorldObject.IsAbstractCharacter(target))
|
if (AbstractWorldObject.IsAbstractCharacter(target))
|
||||||
return (int) (((AbstractCharacter) target).getResists().getResistedDamage(agent, (AbstractCharacter) target, dt, (float) damage, 0) * dmgMultiplier);
|
return (int) (((AbstractCharacter) target).getResists().getResistedDamage(agent, (AbstractCharacter) target, dt, (float) damage, 0));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getMinDmg(double min, Mob agent, ItemBase weapon) {
|
public static double getMinDmg(Mob agent) {
|
||||||
|
if(agent.getEquip() != null){
|
||||||
int primary = agent.getStatStrCurrent();
|
if(agent.getEquip().get(ItemSlotType.RHELD) != null){
|
||||||
int secondary = agent.getStatDexCurrent();
|
return agent.minDamageHandOne;
|
||||||
int focusLevel = 0;
|
}else if(agent.getEquip().get(ItemSlotType.LHELD) != null){
|
||||||
int masteryLevel = 0;
|
return agent.getMinDamageHandTwo();
|
||||||
|
}else{
|
||||||
if (weapon != null) {
|
return agent.minDamageHandOne;
|
||||||
if (weapon.isStrBased() == true) {
|
|
||||||
primary = agent.getStatStrCurrent();
|
|
||||||
secondary = agent.getStatDexCurrent();
|
|
||||||
} else {
|
|
||||||
primary = agent.getStatDexCurrent();
|
|
||||||
secondary = agent.getStatStrCurrent();
|
|
||||||
if (agent.getSkills().containsKey(weapon.getSkillRequired())) {
|
|
||||||
focusLevel = (int) agent.getSkills().get(weapon.getSkillRequired()).getModifiedAmount();
|
|
||||||
}
|
|
||||||
if (agent.getSkills().containsKey(weapon.getMastery())) {
|
|
||||||
masteryLevel = (int) agent.getSkills().get(weapon.getMastery()).getModifiedAmount();
|
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
return agent.minDamageHandOne;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return min * (pow(0.0048 * primary + .049 * (primary - 0.75), 0.5) + pow(0.0066 * secondary + 0.064 * (secondary - 0.75), 0.5) + +0.01 * (focusLevel + masteryLevel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getMaxDmg(double max, Mob agent, ItemBase weapon) {
|
public static double getMaxDmg(Mob agent) {
|
||||||
|
if(agent.getEquip() != null){
|
||||||
int primary = agent.getStatStrCurrent();
|
if(agent.getEquip().get(ItemSlotType.RHELD) != null){
|
||||||
int secondary = agent.getStatDexCurrent();
|
return agent.maxDamageHandOne;
|
||||||
int focusLevel = 0;
|
}else if(agent.getEquip().get(ItemSlotType.LHELD) != null){
|
||||||
int masteryLevel = 0;
|
return agent.getMaxDamageHandTwo();
|
||||||
|
}else{
|
||||||
if (weapon != null) {
|
return agent.maxDamageHandOne;
|
||||||
|
}
|
||||||
if (weapon.isStrBased() == true) {
|
}else{
|
||||||
primary = agent.getStatStrCurrent();
|
return agent.maxDamageHandOne;
|
||||||
secondary = agent.getStatDexCurrent();
|
|
||||||
} else {
|
|
||||||
primary = agent.getStatDexCurrent();
|
|
||||||
secondary = agent.getStatStrCurrent();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (agent.getSkills().containsKey(weapon.getSkillRequired()))
|
|
||||||
focusLevel = (int) agent.getSkills().get(weapon.getSkillRequired()).getModifiedAmount();
|
|
||||||
|
|
||||||
if (agent.getSkills().containsKey(weapon.getSkillRequired()))
|
|
||||||
masteryLevel = (int) agent.getSkills().get(weapon.getMastery()).getModifiedAmount();
|
|
||||||
|
|
||||||
}
|
|
||||||
return max * (pow(0.0124 * primary + 0.118 * (primary - 0.75), 0.5) + pow(0.0022 * secondary + 0.028 * (secondary - 0.75), 0.5) + 0.0075 * (focusLevel + masteryLevel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user