|
|
|
@ -527,7 +527,7 @@ public class PlayerCombatStats {
@@ -527,7 +527,7 @@ public class PlayerCombatStats {
|
|
|
|
|
} |
|
|
|
|
for(String armorUsed : armorsUsed){ |
|
|
|
|
if(this.owner.skills.containsKey(armorUsed)) { |
|
|
|
|
armorSkill += calculateModifiedSkill(armorUsed,this.owner); |
|
|
|
|
armorSkill += calculateBuffedSkillLevel(armorUsed,this.owner); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(armorsUsed.size() > 0) |
|
|
|
@ -535,7 +535,7 @@ public class PlayerCombatStats {
@@ -535,7 +535,7 @@ public class PlayerCombatStats {
|
|
|
|
|
|
|
|
|
|
float blockSkill = 0.0f; |
|
|
|
|
if(this.owner.skills.containsKey("Block")) |
|
|
|
|
blockSkill = calculateModifiedSkill("Block",this.owner); |
|
|
|
|
blockSkill = calculateBuffedSkillLevel("Block",this.owner); |
|
|
|
|
|
|
|
|
|
float shieldDefense = 0.0f; |
|
|
|
|
if(this.owner.charItemManager.getEquipped(2) != null && this.owner.charItemManager.getEquipped(2).getItemBase().isShield()){ |
|
|
|
@ -631,85 +631,6 @@ public class PlayerCombatStats {
@@ -631,85 +631,6 @@ public class PlayerCombatStats {
|
|
|
|
|
this.defense = (int) defense; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static float calculateModifiedSkill(String skillName, PlayerCharacter pc) { |
|
|
|
|
|
|
|
|
|
CharacterSkill skill = null; |
|
|
|
|
if (pc.skills.containsKey(skillName)) { |
|
|
|
|
skill = pc.skills.get(skillName); |
|
|
|
|
} |
|
|
|
|
SkillsBase skillBase = skill.getSkillsBase(); |
|
|
|
|
if(skillBase == null) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
//Get any rune bonus
|
|
|
|
|
float bonus = 0f; |
|
|
|
|
if (pc.getBonuses() != null) { |
|
|
|
|
//Get bonuses from runes
|
|
|
|
|
bonus = pc.getBonuses().getSkillBonus(skillBase.sourceType); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Get Base skill for modified stats
|
|
|
|
|
float base = 7f; |
|
|
|
|
if(skillBase.getToken() == -660435875){ |
|
|
|
|
base = 0; |
|
|
|
|
} |
|
|
|
|
float statMod = 0.5f; |
|
|
|
|
if (skillBase.getStrMod() > 0) |
|
|
|
|
statMod += (float) skillBase.getStrMod() * (float) pc.getStatStrCurrent() / 100f; |
|
|
|
|
if (skillBase.getDexMod() > 0) |
|
|
|
|
statMod += (float) skillBase.getDexMod() * (float) getDexAfterPenalty(pc) / 100f; |
|
|
|
|
if (skillBase.getConMod() > 0) |
|
|
|
|
statMod += (float) skillBase.getConMod() * (float) pc.getStatConCurrent() / 100f; |
|
|
|
|
if (skillBase.getIntMod() > 0) |
|
|
|
|
statMod += (float) skillBase.getIntMod() * (float) pc.getStatIntCurrent() / 100f; |
|
|
|
|
if (skillBase.getSpiMod() > 0) |
|
|
|
|
statMod += (float) skillBase.getSpiMod() * (float) pc.getStatSpiCurrent() / 100f; |
|
|
|
|
|
|
|
|
|
if (statMod < 1) |
|
|
|
|
statMod = 1f; |
|
|
|
|
|
|
|
|
|
if(skillBase.getToken() == -660435875){ |
|
|
|
|
statMod = 0; |
|
|
|
|
} |
|
|
|
|
base += CharacterSkill.baseSkillValues[(int) statMod]; |
|
|
|
|
Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); |
|
|
|
|
|
|
|
|
|
//Get any rune, effect and item bonus
|
|
|
|
|
|
|
|
|
|
if (pc.getBonuses() != null) { |
|
|
|
|
//add bonuses from effects/items and runes
|
|
|
|
|
base += bonus + pc.getBonuses().getFloat(Enum.ModType.Skill, sourceType); |
|
|
|
|
} |
|
|
|
|
float baseAmount; |
|
|
|
|
if (base < 1f && skillBase.getToken() != -660435875) |
|
|
|
|
baseAmount = 1f; |
|
|
|
|
else |
|
|
|
|
baseAmount = base; |
|
|
|
|
|
|
|
|
|
int amount; |
|
|
|
|
|
|
|
|
|
int trains = skill.getNumTrains(); |
|
|
|
|
if (trains < 10) |
|
|
|
|
amount = (trains * 2); |
|
|
|
|
else if (trains < 90) |
|
|
|
|
amount = 10 + trains; |
|
|
|
|
else if (trains < 134) |
|
|
|
|
amount = 100 + ((trains - 90) / 2); |
|
|
|
|
else |
|
|
|
|
amount = 122 + ((trains - 134) / 3); |
|
|
|
|
|
|
|
|
|
float modAmount = baseAmount + amount; |
|
|
|
|
|
|
|
|
|
if (pc.getBonuses() != null) { |
|
|
|
|
//Multiply any percent bonuses
|
|
|
|
|
modAmount *= (1 + pc.getBonuses().getFloatPercentAll(Enum.ModType.Skill, sourceType)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float modifiedAmount = (float) Math.round(modAmount); |
|
|
|
|
|
|
|
|
|
return modifiedAmount; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static int getDexAfterPenalty(PlayerCharacter pc){ |
|
|
|
|
if(pc.charItemManager == null) |
|
|
|
|
return pc.statDexCurrent; |
|
|
|
@ -776,4 +697,83 @@ public class PlayerCombatStats {
@@ -776,4 +697,83 @@ public class PlayerCombatStats {
|
|
|
|
|
} |
|
|
|
|
return (def * (1 + ((int) armorSkill.getModifiedAmount() / 50f))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static int calculateBaseSkillLevel(String skillName, PlayerCharacter pc){ |
|
|
|
|
//calculates the base level of any skill
|
|
|
|
|
if(!pc.skills.containsKey(skillName)) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
CharacterSkill skill = pc.skills.get(skillName); |
|
|
|
|
SkillsBase skillBase = skill.getSkillsBase(); |
|
|
|
|
|
|
|
|
|
//get amounts from skills
|
|
|
|
|
float level = 0; |
|
|
|
|
level += pc.statStrBase * skillBase.getStrMod(); |
|
|
|
|
level += pc.statDexBase * skillBase.getDexMod(); |
|
|
|
|
level += pc.statIntBase * skillBase.getIntMod(); |
|
|
|
|
level += pc.statConBase * skillBase.getConMod(); |
|
|
|
|
level += pc.statSpiBase * skillBase.getSpiMod(); |
|
|
|
|
level = level / 100; |
|
|
|
|
|
|
|
|
|
//get amounts from trains
|
|
|
|
|
int amount; |
|
|
|
|
int trains = skill.getNumTrains(); |
|
|
|
|
if (trains < 10) |
|
|
|
|
amount = (trains * 2); |
|
|
|
|
else if (trains < 90) |
|
|
|
|
amount = 10 + trains; |
|
|
|
|
else if (trains < 134) |
|
|
|
|
amount = 100 + ((trains - 90) / 2); |
|
|
|
|
else |
|
|
|
|
amount = 122 + ((trains - 134) / 3); |
|
|
|
|
|
|
|
|
|
level += amount; |
|
|
|
|
|
|
|
|
|
//add any bonuses to the skill
|
|
|
|
|
Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); |
|
|
|
|
if(sourceType != null && pc.bonuses != null) { |
|
|
|
|
level += pc.bonuses.getFloat(Enum.ModType.Skill, sourceType); |
|
|
|
|
level *= (1 + pc.bonuses.getFloatPercentAll(Enum.ModType.Skill, sourceType)); |
|
|
|
|
} |
|
|
|
|
return Math.round(level); |
|
|
|
|
} |
|
|
|
|
public static int calculateBuffedSkillLevel(String skillName, PlayerCharacter pc){ |
|
|
|
|
//calculates the "current" or modified level of any skill
|
|
|
|
|
if(!pc.skills.containsKey(skillName)) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
CharacterSkill skill = pc.skills.get(skillName); |
|
|
|
|
SkillsBase skillBase = skill.getSkillsBase(); |
|
|
|
|
|
|
|
|
|
//get amounts from skills
|
|
|
|
|
float level = 0; |
|
|
|
|
level += pc.statStrCurrent * skillBase.getStrMod(); |
|
|
|
|
level += getDexAfterPenalty(pc) * skillBase.getDexMod(); |
|
|
|
|
level += pc.statIntCurrent * skillBase.getIntMod(); |
|
|
|
|
level += pc.statConCurrent * skillBase.getConMod(); |
|
|
|
|
level += pc.statSpiCurrent * skillBase.getSpiMod(); |
|
|
|
|
level = level / 100; |
|
|
|
|
|
|
|
|
|
//get amounts from trains
|
|
|
|
|
int amount; |
|
|
|
|
int trains = skill.getNumTrains(); |
|
|
|
|
if (trains < 10) |
|
|
|
|
amount = (trains * 2); |
|
|
|
|
else if (trains < 90) |
|
|
|
|
amount = 10 + trains; |
|
|
|
|
else if (trains < 134) |
|
|
|
|
amount = 100 + ((trains - 90) / 2); |
|
|
|
|
else |
|
|
|
|
amount = 122 + ((trains - 134) / 3); |
|
|
|
|
|
|
|
|
|
level += amount; |
|
|
|
|
|
|
|
|
|
//add any bonuses to the skill
|
|
|
|
|
Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); |
|
|
|
|
if(sourceType != null && pc.bonuses != null) { |
|
|
|
|
level += pc.bonuses.getFloat(Enum.ModType.Skill, sourceType); |
|
|
|
|
level *= (1 + pc.bonuses.getFloatPercentAll(Enum.ModType.Skill, sourceType)); |
|
|
|
|
} |
|
|
|
|
return Math.round(level); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|