Fix for armour limit factors no longer working.

This commit is contained in:
Sindusk
2019-05-02 02:53:50 -04:00
parent 08ea7c61fc
commit 6e06d42daa
4 changed files with 36 additions and 1 deletions

View File

@@ -1,7 +1,7 @@
apply plugin: 'java'
group "mod.sin"
version "4.0"
version "4.1"
repositories {
mavenCentral()

View File

@@ -53,6 +53,18 @@ armourEffectiveness-1:cloth;bite,0.90
# Syntax identical to effectiveness settings.
armourGlanceRate-1:leather;bite,0.30
# > Armour Limit Factor < #
#These values are meant to determine the bonus or reduction to spellcasting and archery while wearing armour.
# ** Valid values are between -0.99 and 0.3 only. Anything lower than -0.99 risks damaging the calculations in the game. Anything over 0.3 will simply apply as 0.3.
# I personally do not like the original setup of them, and will only leave a commented out "vanilla" setup, then using my own below.
armourLimitFactor-1:cloth,0.3
armourLimitFactor-2:leather,0.3
armourLimitFactor-3:studded,0.0
armourLimitFactor-4:chain,-0.15
armourLimitFactor-5:plate,-0.3
armourLimitFactor-6:drake,-0.3
armourLimitFactor-7:dragonscale,-0.3
# -- Item Material Configuration -- #
#enableItemMaterialChanges: Enables or disables the whole item material configuration section.
enableItemMaterialChanges=true

View File

@@ -5,6 +5,7 @@ import com.wurmonline.server.items.ItemTemplate;
import com.wurmonline.server.items.ItemTemplateFactory;
import mod.sin.lib.ArmourAssist;
import mod.sin.lib.WoundAssist;
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
import java.util.ArrayList;
import java.util.HashMap;
@@ -18,6 +19,7 @@ public class ArmourTemplateTweaks {
public static HashMap<Byte, HashMap<Byte, Float>> armourEffectiveness = new HashMap<>();
public static HashMap<Byte, HashMap<Byte, Float>> armourGlanceRates = new HashMap<>();
public static HashMap<String, Float> armourMovement = new HashMap<>();
public static HashMap<Byte, Float> armourLimitFactors = new HashMap<>();
protected static ArrayList<Byte> getWoundTypes(String[] split){
ArrayList<Byte> woundTypes = new ArrayList<>();
@@ -85,6 +87,10 @@ public class ArmourTemplateTweaks {
}
}
public static void addArmourLimitFactor(byte armourType, float limitFactor){
armourLimitFactors.put(armourType, limitFactor);
}
public static void addArmourMovement(String itemTemplateName, float movementPenalty){
armourMovement.put(itemTemplateName, movementPenalty);
}
@@ -120,6 +126,14 @@ public class ArmourTemplateTweaks {
ArmourTemplate armourTemplate = ArmourTemplate.getArmourTemplate(template.getTemplateId());
armourTemplate.setMoveModifier(armourMovement.get(armourName)); // Set the new movement speed.
}
for (byte atype : armourLimitFactors.keySet()){
try {
ArmourTemplate.ArmourType armourType = ArmourAssist.getArmourType(atype);
ReflectionUtil.setPrivateField(armourType, ReflectionUtil.getField(armourType.getClass(), "limitFactor"), armourLimitFactors.get(atype));
} catch (IllegalAccessException | NoSuchFieldException e) {
logger.warning("Failed to set armour limit factor for type "+atype);
}
}
}
}
}

View File

@@ -104,6 +104,11 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
byte armourType = parseArmourType(split[0]);
String[] split2 = split[1].split(",");
ArmourTemplateTweaks.addArmourGlanceRate(armourType, split2);
} else if (name.startsWith("armourLimitFactor")) {
String[] split = value.split(",");
byte armourType = parseArmourType(split[0]);
float reduction = Float.parseFloat(split[1]);
ArmourTemplateTweaks.addArmourLimitFactor(armourType, reduction);
} else if (name.startsWith("armourMovement")) {
String[] split = value.split(",");
String itemTemplate = split[0];
@@ -276,6 +281,10 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
logger.info(String.format("Glance rate for armour %s against %s: %.2f%%", ArmourAssist.getArmourName(armourType), wound, woundMap.get(woundType)*100f));
}
}
logger.info("> Armour Limit Factor Settings <");
for(byte armourType : ArmourTemplateTweaks.armourLimitFactors.keySet()){
logger.info(String.format("Limit factor for armour %s: %.2f%%", ArmourAssist.getArmourName(armourType), ArmourTemplateTweaks.armourLimitFactors.get(armourType)*100f));
}
logger.info("> Armour Movement Rate Changes <");
for(String armourName : ArmourTemplateTweaks.armourMovement.keySet()){
logger.info(String.format("Movement penalty for armour %s changed to %.2f%%", armourName, ArmourTemplateTweaks.armourMovement.get(armourName)*100f));