Browse Source

new stat calculations

lakebane-dex-penalty
FatBoy-DOTC 1 week ago
parent
commit
ceed4c641a
  1. 259
      src/engine/objects/PlayerCharacter.java

259
src/engine/objects/PlayerCharacter.java

@ -3838,6 +3838,227 @@ public class PlayerCharacter extends AbstractCharacter {
} }
} }
public void calculateATR(){
if(this.charItemManager == null){
this.atrHandOne = 1;
this.atrHandTwo = 1;
return;
}
Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal());
int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
float atr1 = 0;
int primaryStat1;
if(equippedRight != null && equippedRight.getItemBase().isStrBased()){
primaryStat1 = this.statStrCurrent;
}else{
primaryStat1 = this.statDexCurrent;
}
atr1 = (primaryStat1 * 0.5f) + (weaponSkill1 * 4) + (weaponMastery1 * 3);
if (this.bonuses != null) {
atr1 += this.bonuses.getFloat(ModType.OCV, SourceType.None);
float pos_Bonus = (1 + this.bonuses.getFloatPercentPositive(ModType.OCV, SourceType.None));
atr1 *= pos_Bonus;
float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None);
atr1 *= (1 + neg_Bonus);
}
atr1 = (atr1 < 1) ? 1 : atr1;
this.atrHandOne = (short) (atr1 + 0.5f);
Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal());
int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
float atr2 = 0;
int primaryStat2;
if (equippedLeft != null && equippedLeft.getItemBase().isStrBased()) {
primaryStat2 = this.statStrCurrent;
} else {
primaryStat2 = this.statDexCurrent;
}
atr2 = (primaryStat2 * 0.5f) + (weaponSkill2 * 4) + (weaponMastery2 * 3);
if (this.bonuses != null) {
atr2 += this.bonuses.getFloat(ModType.OCV, SourceType.None);
float pos_Bonus = (1 + this.bonuses.getFloatPercentPositive(ModType.OCV, SourceType.None));
atr2 *= pos_Bonus;
float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None);
atr2 *= (1 + neg_Bonus);
}
atr2 = (atr2 < 1) ? 1 : atr2;
this.atrHandTwo = (short) (atr2 + 0.5f);
}
public void calculateDamage(){
if(this.charItemManager == null){
this.minDamageHandOne = 1;
this.maxDamageHandOne = 5;
this.minDamageHandTwo = 1;
this.maxDamageHandTwo = 5;
return;
}
this.calculateMinDamage();
this.calculateMaxDamage();
}
public void calculateMinDamage(){
int baseDMG1 = 1;
int baseDMG2 = 1;
int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal());
Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal());
int primary1 = this.statDexCurrent;
int secondary1 = this.statStrCurrent;
int primary2 = this.statDexCurrent;
int secondary2 = this.statStrCurrent;
if(equippedRight != null){
baseDMG1 = equippedRight.getItemBase().getMinDamage();
weaponSkill1 = this.skills.get(equippedRight.getItemBase().getSkillRequired()).getTotalSkillPercet();
weaponMastery1 = this.skills.get(equippedRight.getItemBase().getMastery()).getTotalSkillPercet();
if(equippedRight.getItemBase().isStrBased()) {
primary1 = this.statStrCurrent;
secondary1 = this.statDexCurrent;
}
}
if(equippedLeft != null){
baseDMG2 = equippedLeft.getItemBase().getMinDamage();
weaponSkill2 = this.skills.get(equippedLeft.getItemBase().getSkillRequired()).getTotalSkillPercet();
weaponMastery2 = this.skills.get(equippedLeft.getItemBase().getMastery()).getTotalSkillPercet();
if(equippedLeft.getItemBase().isStrBased()) {
primary2 = this.statStrCurrent;
secondary2 = this.statDexCurrent;
}
}
double primaryComponent1 = 0.0048 * primary1 + 0.049 * Math.sqrt(primary1 - 0.75);
double secondaryComponent1 = 0.0066 * secondary1 + 0.064 * Math.sqrt(secondary1 - 0.75);
double skillComponent1 = 0.01 * (weaponSkill1 + weaponMastery1);
int min1 = (int)(baseDMG1 * (primaryComponent1 + secondaryComponent1 + skillComponent1));
double primaryComponent2 = 0.0048 * primary2 + 0.049 * Math.sqrt(primary2 - 0.75);
double secondaryComponent2 = 0.0066 * secondary2 + 0.064 * Math.sqrt(secondary2 - 0.75);
double skillComponent2 = 0.01 * (weaponSkill2 + weaponMastery2);
int min2 = (int)(baseDMG2 * (primaryComponent2 + secondaryComponent2 + skillComponent2));
this.minDamageHandOne = min1;
this.minDamageHandTwo = min2;
}
public void calculateMaxDamage() {
int baseDMG1 = 1;
int baseDMG2 = 1;
int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet();
int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet();
Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal());
Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal());
int primary1 = this.statDexCurrent;
int secondary1 = this.statStrCurrent;
int primary2 = this.statDexCurrent;
int secondary2 = this.statStrCurrent;
if (equippedRight != null) {
baseDMG1 = equippedRight.getItemBase().getMaxDamage();
weaponSkill1 = this.skills.get(equippedRight.getItemBase().getSkillRequired()).getTotalSkillPercet();
weaponMastery1 = this.skills.get(equippedRight.getItemBase().getMastery()).getTotalSkillPercet();
if (equippedRight.getItemBase().isStrBased()) {
primary1 = this.statStrCurrent;
secondary1 = this.statDexCurrent;
}
}
if (equippedLeft != null) {
baseDMG2 = equippedLeft.getItemBase().getMaxDamage();
weaponSkill2 = this.skills.get(equippedLeft.getItemBase().getSkillRequired()).getTotalSkillPercet();
weaponMastery2 = this.skills.get(equippedLeft.getItemBase().getMastery()).getTotalSkillPercet();
if (equippedLeft.getItemBase().isStrBased()) {
primary2 = this.statStrCurrent;
secondary2 = this.statDexCurrent;
}
}
// Calculate max damage for right hand weapon
double primaryComponent1 = 0.0124 * primary1 + 0.118 * Math.sqrt(primary1 - 0.75);
double secondaryComponent1 = 0.0022 * secondary1 + 0.028 * Math.sqrt(secondary1 - 0.75);
double skillComponent1 = 0.0075 * (weaponSkill1 + weaponMastery1);
int max1 = (int) (baseDMG1 * (primaryComponent1 + secondaryComponent1 + skillComponent1));
// Calculate max damage for left hand weapon
double primaryComponent2 = 0.0124 * primary2 + 0.118 * Math.sqrt(primary2 - 0.75);
double secondaryComponent2 = 0.0022 * secondary2 + 0.028 * Math.sqrt(secondary2 - 0.75);
double skillComponent2 = 0.0075 * (weaponSkill2 + weaponMastery2);
int max2 = (int) (baseDMG2 * (primaryComponent2 + secondaryComponent2 + skillComponent2));
this.maxDamageHandOne = max1;
this.maxDamageHandTwo = max2;
}
public void calculateSpeed(){
if(this.charItemManager == null){
this.speedHandOne = 20.0f;
this.speedHandTwo = 20.0f;
return;
}
ItemBase weaponBase1 = null;
ItemBase weaponBase2 = null;
if(this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()) != null){
weaponBase1 = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()).getItemBase();
}
if(this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()) != null){
weaponBase2 = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()).getItemBase();
}
float speed1;
float speed2;
if (weaponBase1 != null)
speed1 = weaponBase1.getSpeed();
else
speed1 = 20f;
if (weaponBase2 != null)
speed2 = weaponBase2.getSpeed();
else
speed2 = 20f;
if(this.bonuses!= null){
for (AbstractEffectModifier mod : this.bonuses.bonusFloats.keySet()) {
if (mod.modType.equals(ModType.AttackDelay) || mod.modType.equals(ModType.WeaponSpeed)) {
float modValue = 1 + mod.getPercentMod() * 0.01f;
speed1 *= modValue;
}
}
}
if(this.bonuses!= null){
for (AbstractEffectModifier mod : this.bonuses.bonusFloats.keySet()) {
if (mod.modType.equals(ModType.AttackDelay) || mod.modType.equals(ModType.WeaponSpeed)) {
float modValue = 1 + mod.getPercentMod() * 0.01f;
speed2 *= modValue;
}
}
}
if (speed1 < 10)
speed1 = 10;
if (speed2 < 10)
speed2 = 10;
this.speedHandOne = speed1;
this.speedHandTwo= speed2;
}
/** /**
* @ Calculates Atr, and Damage for each weapon * @ Calculates Atr, and Damage for each weapon
*/ */
@ -3864,9 +4085,6 @@ public class PlayerCharacter extends AbstractCharacter {
float speed = 20f; float speed = 20f;
boolean strBased = false; boolean strBased = false;
ItemBase wbMain = (weapon != null) ? weapon.getItemBase() : null;
ItemBase wbOff = (otherHand != null) ? otherHand.getItemBase() : null;
// get skill percentages and min and max damage for weapons // get skill percentages and min and max damage for weapons
if (noWeapon) { if (noWeapon) {
if (mainHand) { if (mainHand) {
@ -3930,8 +4148,6 @@ public class PlayerCharacter extends AbstractCharacter {
//(Primary Stat / 2) + (Weapon Skill * 4) + (Weapon Mastery * 3) + (ATR Enchantments) * 1.stance modifier //(Primary Stat / 2) + (Weapon Skill * 4) + (Weapon Mastery * 3) + (ATR Enchantments) * 1.stance modifier
float atr = 0; float atr = 0;
int primaryStat; int primaryStat;
int dexMod = this.getDexMod();
int strMod = this.getStrMod();
if(weaponBase != null && weaponBase.isStrBased()){ if(weaponBase != null && weaponBase.isStrBased()){
primaryStat = this.statStrCurrent; primaryStat = this.statStrCurrent;
}else{ }else{
@ -3953,6 +4169,7 @@ public class PlayerCharacter extends AbstractCharacter {
float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None); float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None);
atr *= (1 + neg_Bonus); atr *= (1 + neg_Bonus);
} }
atr = (atr < 1) ? 1 : atr; atr = (atr < 1) ? 1 : atr;
@ -4086,6 +4303,10 @@ public class PlayerCharacter extends AbstractCharacter {
this.maxDamageHandTwo = (int) maxDamage; this.maxDamageHandTwo = (int) maxDamage;
this.speedHandTwo = speed; this.speedHandTwo = speed;
} }
this.calculateATR();
this.calculateDamage();
this.calculateSpeed();
} }
/** /**
@ -4107,9 +4328,15 @@ public class PlayerCharacter extends AbstractCharacter {
float def = ab.getDefense(); float def = ab.getDefense();
//apply item defense bonuses //apply item defense bonuses
if (shield != null) { if (shield != null) {
def += shield.getBonus(ModType.DR, SourceType.None); //def += shield.getBonus(ModType.DR, SourceType.None);
def *= (1 + shield.getBonusPercent(ModType.DR, SourceType.None)); //def *= (1 + shield.getBonusPercent(ModType.DR, SourceType.None));
for(Effect eff : shield.effects.values()) {
for (AbstractEffectModifier mod : eff.getEffectModifiers()) {
if (mod.modType.equals(ModType.DR)) {
def += mod.minMod * (1 + (eff.getTrains() * mod.getRamp()));
}
}
}
} }
// float val = ((float)ab.getDefense()) * (1 + (skillMod / 100)); // float val = ((float)ab.getDefense()) * (1 + (skillMod / 100));
@ -4167,8 +4394,10 @@ public class PlayerCharacter extends AbstractCharacter {
if (!ib.getType().equals(ItemType.ARMOR)) if (!ib.getType().equals(ItemType.ARMOR))
return 0; return 0;
if (ib.getSkillRequired().isEmpty()) if (ib.getSkillRequired().isEmpty())
return ib.getDefense(); return ib.getDefense();
CharacterSkill armorSkill = this.skills.get(ib.getSkillRequired()); CharacterSkill armorSkill = this.skills.get(ib.getSkillRequired());
if (armorSkill == null) { if (armorSkill == null) {
Logger.error("Player " + this.getObjectUUID() Logger.error("Player " + this.getObjectUUID()
@ -4179,8 +4408,18 @@ public class PlayerCharacter extends AbstractCharacter {
float def = ib.getDefense(); float def = ib.getDefense();
//apply item defense bonuses //apply item defense bonuses
if (armor != null) { if (armor != null) {
def += armor.getBonus(ModType.DR, SourceType.None);
def *= (1 + armor.getBonusPercent(ModType.DR, SourceType.None)); for(Effect eff : armor.effects.values()){
for(AbstractEffectModifier mod : eff.getEffectModifiers()){
if(mod.modType.equals(ModType.DR)){
def += mod.minMod * (1+(eff.getTrains() * mod.getRamp()));
}
}
}
//def += armor.getBonus(ModType.DR, SourceType.None);
//def *= (1 + armor.getBonusPercent(ModType.DR, SourceType.None));
} }

Loading…
Cancel
Save