Repair armour modification systems and update to version 4.0.
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
apply plugin: 'java'
|
||||
|
||||
group "mod.sin"
|
||||
version "3.0"
|
||||
version "4.0"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url "http://gotti.no-ip.org/maven/repository" }
|
||||
mavenLocal()
|
||||
maven { url "https://dl.bdew.net/agorepo/" }
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'org.gotti.wurmunlimited:server-modlauncher:0.39-beta1'
|
||||
compile 'com.github.Sindusk:sindusklibrary:v1.7'
|
||||
compile 'org.gotti.wurmunlimited:server-modlauncher:0.40'
|
||||
compile 'com.github.Sindusk:sindusklibrary:v2.1'
|
||||
}
|
||||
|
||||
jar {
|
||||
|
||||
@@ -4,14 +4,70 @@ depend.import=SinduskLibrary
|
||||
depend.suggests=ServerTweaks
|
||||
sharedClassLoader=true
|
||||
|
||||
# -- Mod configuration section -- #
|
||||
#enableNonPlayerCrits: Allows critical strikes against non-player characters. In vanilla Wurm, creatures can only deal critical strikes against players.
|
||||
# Note: this will allow creatures to crit creatures as well, so tamed/charmed/dominated creatures can also be critically hit by aggressive mobs.
|
||||
enableNonPlayerCrits=true
|
||||
# -- Armour configuration section -- #
|
||||
#enableArmourReductionModifications: Enable to enable the whole armour configuration section and material configuration section.
|
||||
# Disabling this will eliminate almost everything that Armoury does to armour.
|
||||
enableArmourModifications=true
|
||||
|
||||
# > Custom Item ID Overrides < #
|
||||
#These are used to override the damage reduction calculation per item ID.
|
||||
# If you want to add challenge helms, masks, and similar here, you are welcome to do so and have their DR work.
|
||||
#Armour types:
|
||||
# Leather = 1 ; Studded = 2 ; Chain = 3 ; Plate = 4 ; *Ring = 5
|
||||
# Cloth = 6 ; *Scale = 7 ; *Splint = 8 ; Drake = 9 ; Dragonscale = 10
|
||||
# Note: Types marked with * do not have an in-game armour associated with them.
|
||||
# These values can be useful for the creation of custom armours, though.
|
||||
|
||||
#armourDamageReduction: Adjust the base DR of certain armour types
|
||||
# Syntax: armourDamageReduction-##:material,reduction
|
||||
# Example: armourDamageReduction-1:cloth,0.40
|
||||
# The example sets cloth (6) armour to have 40% damage reduction at 100QL.
|
||||
# Quality scales the damage reduction
|
||||
#Default configuration:
|
||||
armourDamageReduction-6:cloth,0.40
|
||||
armourDamageReduction-1:leather,0.60
|
||||
armourDamageReduction-2:studded,0.625
|
||||
armourDamageReduction-3:chain,0.625
|
||||
armourDamageReduction-4:plate,0.65
|
||||
armourDamageReduction-9:drake,0.65
|
||||
armourDamageReduction-10:dragonscale,0.70
|
||||
|
||||
# Unused armour types
|
||||
armourDamageReduction-5:5,0.55
|
||||
armourDamageReduction-7:7,0.50
|
||||
armourDamageReduction-8:8,0.60
|
||||
|
||||
# > Armour Effectiveness < #
|
||||
#armourEffectiveness: Adjust the effectiveness of an armour type against a wound type.
|
||||
# Wound Types:
|
||||
# Crush = 0 ; Slash = 1 ; Pierce = 2 ; Bite = 3 ; Burn = 4 ; Poison = 5
|
||||
# Infection = 6 ; Water = 7 ; Cold = 8 ; Internal = 9 ; Acid = 10
|
||||
# Syntax: armourEffectiveness-##:armourtype;woundtype,effectiveness
|
||||
# Example: armourEffectiveness-1:9;8,1.05
|
||||
# The example sets drake (9) armour to have 105% effectiveness (+5% more DR) against cold (8)
|
||||
# Alternative to wound types, you can also use the keys "physical" "elemental" and "other"
|
||||
# Physical: Crush (0), Slash (1), Pierce (2), Bite (3)
|
||||
# Elemental: Burn (4), Cold (8), Acid (10)
|
||||
# Other: Poison (5), Infection (6), Water (7), Internal (9)
|
||||
armourEffectiveness-1:cloth;bite,0.90
|
||||
|
||||
#> Armour Glance Rates < #
|
||||
#armourGlanceRate: Adjust the glance rate of an armour type against a wound type.
|
||||
# Syntax identical to effectiveness settings.
|
||||
armourGlanceRate-1:leather;bite,0.30
|
||||
|
||||
# -- Item Material Configuration -- #
|
||||
#enableItemMaterialChanges: Enables or disables the whole item material configuration section.
|
||||
enableItemMaterialChanges=true
|
||||
|
||||
#> Damage Reduction
|
||||
# Additive damage reduction if the armour is created from this material. This is very specifically what it says after the item.
|
||||
# Example: "chain jacket, iron" would use the iron modifier (11). Even if the armour type is different, the material is still used.
|
||||
# Example 2: "dragonscale jacket, glimmersteel" would use the dragonscale base armour value and add the glimmersteel property below.
|
||||
#materialDamageReduction: Additional percentage of damage reduction from material.
|
||||
# For example, adamantine by default gives 0.05, meaning 5% damage reduction on top the 70% that plate gives.
|
||||
# Adamantine plate would give 75% damage reduction at 100QL with this setting.
|
||||
# Note that if no value is set, the default wurm values will be used.
|
||||
# If you want to remove the DR penalty for lead armour, you'll have to use materialDamageReduction-##:12,0.00
|
||||
# Ensure that each property has it's own unique identifier number and none of them clash.
|
||||
materialDamageReduction-1:adamantine,0.05
|
||||
|
||||
#materialGlanceRate: Adjust the glance rate of an armour against a certain wound type if created from a specified material.
|
||||
# This is a multiplier on the base glance rate.
|
||||
@@ -41,10 +97,6 @@ materialWeaponParry-1:glimmersteel,0.95
|
||||
# Lower values cause less damage, higher values cause more damage. 1.10 = 10% more damage to the armour. 0.90 = 10% less damage to the armour.
|
||||
materialWeaponArmourDamage-1:adamantine,1.05
|
||||
|
||||
# -- Item Material Configuration -- #
|
||||
#enableItemMaterialChanges: Enables or disables the whole item material configuration section.
|
||||
enableItemMaterialChanges=true
|
||||
|
||||
#materialDamageModifier: Adjust how much damage the item takes when receiving non-decay damage (when used).
|
||||
# This is a multiplier on how much damage the item takes.
|
||||
# Lower values reduce damage taken, higher values increase damage taken. 1.10 = 10% more damage taken. 0.90 = 10% less damage taken.
|
||||
|
||||
125
src/main/java/mod/sin/armoury/ArmourTemplateTweaks.java
Normal file
125
src/main/java/mod/sin/armoury/ArmourTemplateTweaks.java
Normal file
@@ -0,0 +1,125 @@
|
||||
package mod.sin.armoury;
|
||||
|
||||
import com.wurmonline.server.combat.ArmourTemplate;
|
||||
import com.wurmonline.server.items.ItemTemplate;
|
||||
import com.wurmonline.server.items.ItemTemplateFactory;
|
||||
import mod.sin.lib.ArmourAssist;
|
||||
import mod.sin.lib.WoundAssist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class ArmourTemplateTweaks {
|
||||
public static Logger logger = Logger.getLogger(ArmourTemplateTweaks.class.getName());
|
||||
|
||||
// Maps for variable changes to armour
|
||||
public static HashMap<Byte, Float> armourDamageReduction = new HashMap<>();
|
||||
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<>();
|
||||
|
||||
protected static ArrayList<Byte> getWoundTypes(String[] split){
|
||||
ArrayList<Byte> woundTypes = new ArrayList<>();
|
||||
int i = 0;
|
||||
while(i < split.length-1){
|
||||
if(split[i].equalsIgnoreCase("all")){
|
||||
byte x = 0;
|
||||
while(x <= 10){
|
||||
woundTypes.add(x);
|
||||
x++;
|
||||
}
|
||||
}else if(split[i].equalsIgnoreCase("physical")){
|
||||
woundTypes.add((byte) 0); // Crush
|
||||
woundTypes.add((byte) 1); // Slash
|
||||
woundTypes.add((byte) 2); // Pierce
|
||||
woundTypes.add((byte) 3); // Bite
|
||||
}else if(split[i].equalsIgnoreCase("elemental")){
|
||||
woundTypes.add((byte) 4); // Burn
|
||||
woundTypes.add((byte) 8); // Cold
|
||||
woundTypes.add((byte) 10); // Acid
|
||||
}else if(split[i].equalsIgnoreCase("other")){
|
||||
woundTypes.add((byte) 5); // Poison
|
||||
woundTypes.add((byte) 6); // Infection
|
||||
woundTypes.add((byte) 7); // Water
|
||||
woundTypes.add((byte) 9); // Internal
|
||||
}else{
|
||||
woundTypes.add(WoundAssist.getWoundType(split[i]));
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return woundTypes;
|
||||
}
|
||||
|
||||
public static void addArmourDamageReduction(byte armourType, float reduction){
|
||||
armourDamageReduction.put(armourType, reduction);
|
||||
}
|
||||
|
||||
public static void addArmourEffectiveness(byte armourType, String[] split){
|
||||
float reduction = Float.parseFloat(split[split.length-1]);
|
||||
ArrayList<Byte> woundTypes = getWoundTypes(split);
|
||||
for(byte woundType : woundTypes) {
|
||||
HashMap<Byte, Float> map;
|
||||
if (armourEffectiveness.containsKey(armourType)) {
|
||||
map = armourEffectiveness.get(armourType);
|
||||
} else {
|
||||
map = new HashMap<>();
|
||||
}
|
||||
map.put(woundType, reduction);
|
||||
armourEffectiveness.put(armourType, map);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addArmourGlanceRate(byte armourType, String[] split){
|
||||
float glance = Float.parseFloat(split[split.length-1]);
|
||||
ArrayList<Byte> woundTypes = getWoundTypes(split);
|
||||
for(byte woundType : woundTypes) {
|
||||
HashMap<Byte, Float> map;
|
||||
if (armourGlanceRates.containsKey(armourType)) {
|
||||
map = armourGlanceRates.get(armourType);
|
||||
} else {
|
||||
map = new HashMap<>();
|
||||
}
|
||||
map.put(woundType, glance);
|
||||
armourGlanceRates.put(armourType, map);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addArmourMovement(String itemTemplateName, float movementPenalty){
|
||||
armourMovement.put(itemTemplateName, movementPenalty);
|
||||
}
|
||||
|
||||
public static void onServerStarted(){
|
||||
if (ArmouryModMain.enableArmourModifications){
|
||||
for (byte atype : armourDamageReduction.keySet()){
|
||||
ArmourTemplate.ArmourType armourType = ArmourAssist.getArmourType(atype);
|
||||
armourType.setBaseDR(armourDamageReduction.get(atype));
|
||||
}
|
||||
for (byte atype : armourEffectiveness.keySet()){
|
||||
ArmourTemplate.ArmourType armourType = ArmourAssist.getArmourType(atype);
|
||||
HashMap<Byte,Float> woundMap = armourEffectiveness.get(atype);
|
||||
for (byte woundType : woundMap.keySet()){
|
||||
armourType.setEffectiveness(woundType, woundMap.get(woundType));
|
||||
}
|
||||
}
|
||||
for (byte atype : armourGlanceRates.keySet()){
|
||||
ArmourTemplate.ArmourType armourType = ArmourAssist.getArmourType(atype);
|
||||
HashMap<Byte,Float> woundMap = armourGlanceRates.get(atype);
|
||||
for (byte woundType : woundMap.keySet()){
|
||||
armourType.setGlanceRate(woundType, woundMap.get(woundType));
|
||||
}
|
||||
}
|
||||
for (String armourName : armourMovement.keySet()){
|
||||
// Get the ItemTemplate instance for the armour name
|
||||
ItemTemplate template = ItemTemplateFactory.getInstance().getTemplate(armourName);
|
||||
if (template == null){
|
||||
logger.warning(String.format("Could not find a valid template for armour %s to adjust movement penalty. Skipping...", armourName));
|
||||
continue;
|
||||
}
|
||||
// Obtain the ArmourTemplate instance based on the ItemTemplate
|
||||
ArmourTemplate armourTemplate = ArmourTemplate.getArmourTemplate(template.getTemplateId());
|
||||
armourTemplate.setMoveModifier(armourMovement.get(armourName)); // Set the new movement speed.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
package mod.sin.armoury;
|
||||
|
||||
import com.wurmonline.server.items.Materials;
|
||||
import mod.sin.lib.ArmourAssist;
|
||||
import mod.sin.lib.Prop;
|
||||
import mod.sin.lib.WoundAssist;
|
||||
import org.gotti.wurmunlimited.modloader.interfaces.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -13,19 +15,19 @@ public class ArmouryModMain
|
||||
implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListener, ServerStartedListener {
|
||||
public static Logger logger = Logger.getLogger(ArmouryModMain.class.getName());
|
||||
|
||||
// Configuration options
|
||||
public static boolean enableNonPlayerCrits = true;
|
||||
// - Armour Configuration - //
|
||||
public static boolean enableArmourModifications = true;
|
||||
|
||||
// - Shield configuration -- //
|
||||
// - Shield Configuration -- //
|
||||
public static boolean enableShieldDamageEnchants = true;
|
||||
public static boolean enableShieldSpeedEnchants = true;
|
||||
|
||||
// -- Weapon configuration -- //
|
||||
// -- Weapon Configuration -- //
|
||||
public static float minimumSwingTime = 3.0f;
|
||||
public static boolean raresReduceSwingTime = true;
|
||||
public static float rareSwingSpeedReduction = 0.2f;
|
||||
public static boolean fixSavedSwingTimer = true;
|
||||
public static boolean betterDualWield = true; // HIGHLY EXPERIMENTAL
|
||||
public static boolean betterDualWield = false; // HIGHLY EXPERIMENTAL
|
||||
public static boolean enableWeaponMaterialChanges = true;
|
||||
public static boolean enableItemMaterialChanges = true;
|
||||
// Weapon variable changes
|
||||
@@ -37,6 +39,9 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
public static HashMap<Integer, Float> weaponParryPercent = new HashMap<>();
|
||||
public static HashMap<Integer, Double> weaponSkillPenalty = new HashMap<>();
|
||||
|
||||
public static byte parseArmourType(String str){
|
||||
return (byte) ArmourAssist.getArmourByte(str);
|
||||
}
|
||||
public static byte parseMaterialType(String str){
|
||||
byte mat = Materials.convertMaterialStringIntoByte(str);
|
||||
if(mat > 0){
|
||||
@@ -51,25 +56,20 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
Prop.properties = properties;
|
||||
|
||||
// Initialization sequences
|
||||
MaterialTweaks.initializeMaterialMaps();
|
||||
WeaponTweaks.initializeWeaponMaps();
|
||||
MaterialsTweaks.initializeMaterialMaps();
|
||||
WeaponsTweaks.initializeWeaponMaps();
|
||||
|
||||
// Base configuration options
|
||||
enableNonPlayerCrits = Prop.getBooleanProperty("enableNonPlayerCrits", enableNonPlayerCrits);
|
||||
/*if(enableArmourModifications){
|
||||
ArmourTweaks.configure();
|
||||
}*/
|
||||
//adamantineMaterialMod = Float.parseFloat(properties.getProperty("adamantineMaterialMod", Float.toString(adamantineMaterialMod)));
|
||||
//glimmersteelMaterialMod = Float.parseFloat(properties.getProperty("glimmersteelMaterialMod", Float.toString(glimmersteelMaterialMod)));
|
||||
//seryllMaterialMod = Float.parseFloat(properties.getProperty("seryllMaterialMod", Float.toString(seryllMaterialMod)));
|
||||
// Shield configuration
|
||||
// Armour Configuration
|
||||
enableArmourModifications = Prop.getBooleanProperty("enableArmourModifications", enableArmourModifications);
|
||||
// Shield Configuration
|
||||
enableShieldDamageEnchants = Boolean.parseBoolean(properties.getProperty("enableShieldDamageEnchants", Boolean.toString(enableShieldDamageEnchants)));
|
||||
// Weapon configuration
|
||||
// Weapon Configuration
|
||||
minimumSwingTime = Float.parseFloat(properties.getProperty("minimumSwingTime", Float.toString(minimumSwingTime)));
|
||||
raresReduceSwingTime = Boolean.parseBoolean(properties.getProperty("raresReduceSwingTime", Boolean.toString(raresReduceSwingTime)));
|
||||
rareSwingSpeedReduction = Float.parseFloat(properties.getProperty("rareSwingSpeedReduction", Float.toString(rareSwingSpeedReduction)));
|
||||
fixSavedSwingTimer = Boolean.parseBoolean(properties.getProperty("fixSavedSwingTimer", Boolean.toString(fixSavedSwingTimer)));
|
||||
betterDualWield = Boolean.parseBoolean(properties.getProperty("betterDualWield", Boolean.toString(betterDualWield)));
|
||||
|
||||
enableWeaponMaterialChanges = Prop.getBooleanProperty("enableWeaponMaterialChanges", enableWeaponMaterialChanges);
|
||||
enableItemMaterialChanges = Prop.getBooleanProperty("enableItemMaterialChanges", enableItemMaterialChanges);
|
||||
for (String name : properties.stringPropertyNames()) {
|
||||
@@ -83,97 +83,132 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
case "depend.import":
|
||||
case "depend.suggests":
|
||||
break; //ignore
|
||||
case "minimumSwingTime":
|
||||
case "rareSwingSpeedReduction":
|
||||
case "fixedSavedSwingTimer":
|
||||
case "betterDualWield":
|
||||
break; // ignore properties that are already configured
|
||||
default:
|
||||
if (name.startsWith("materialWeaponDamage")) {
|
||||
if (name.startsWith("armourDamageReduction")) {
|
||||
String[] split = value.split(",");
|
||||
byte armourType = parseArmourType(split[0]);
|
||||
float reduction = Float.parseFloat(split[1]);
|
||||
ArmourTemplateTweaks.addArmourDamageReduction(armourType, reduction);
|
||||
} else if (name.startsWith("armourEffectiveness")) {
|
||||
String[] split = value.split(";");
|
||||
byte armourType = parseArmourType(split[0]);
|
||||
String[] split2 = split[1].split(",");
|
||||
ArmourTemplateTweaks.addArmourEffectiveness(armourType, split2);
|
||||
} else if (name.startsWith("armourGlanceRate")) {
|
||||
String[] split = value.split(";");
|
||||
byte armourType = parseArmourType(split[0]);
|
||||
String[] split2 = split[1].split(",");
|
||||
ArmourTemplateTweaks.addArmourGlanceRate(armourType, split2);
|
||||
} else if (name.startsWith("armourMovement")) {
|
||||
String[] split = value.split(",");
|
||||
String itemTemplate = split[0];
|
||||
float movementPenalty = Float.parseFloat(split[1]);
|
||||
ArmourTemplateTweaks.addArmourMovement(itemTemplate, movementPenalty);
|
||||
} else if (name.startsWith("materialDamageReduction")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float reduction = Float.parseFloat(split[1]);
|
||||
MaterialsTweaks.addMaterialDamageReduction(material, reduction);
|
||||
} else if (name.startsWith("materialMovementModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float modifier = Float.parseFloat(split[1]);
|
||||
MaterialsTweaks.addMaterialMovementModifier(material, modifier);
|
||||
} else if (name.startsWith("materialWeaponDamage")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
double mult = Double.parseDouble(split[1]);
|
||||
WeaponTweaks.addMaterialWeaponDamage(material, mult);
|
||||
WeaponsTweaks.addMaterialWeaponDamage(material, mult);
|
||||
} else if (name.startsWith("materialWeaponSpeed")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
WeaponTweaks.addMaterialWeaponSpeed(material, mult);
|
||||
WeaponsTweaks.addMaterialWeaponSpeed(material, mult);
|
||||
} else if (name.startsWith("materialWeaponParry")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
WeaponTweaks.addMaterialWeaponParry(material, mult);
|
||||
WeaponsTweaks.addMaterialWeaponParry(material, mult);
|
||||
} else if (name.startsWith("materialWeaponArmourDamage")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
double mult = Double.parseDouble(split[1]);
|
||||
WeaponTweaks.addMaterialWeaponArmourDamage(material, mult);
|
||||
WeaponsTweaks.addMaterialWeaponArmourDamage(material, mult);
|
||||
} else if (name.startsWith("materialDamageModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialDamageModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialDamageModifier(material, mult);
|
||||
} else if (name.startsWith("materialDecayModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialDecayModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialDecayModifier(material, mult);
|
||||
} else if (name.startsWith("materialCreationBonus")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float bonus = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialCreationBonus(material, bonus);
|
||||
MaterialsTweaks.addMaterialCreationBonus(material, bonus);
|
||||
} else if (name.startsWith("materialImproveBonus")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float bonus = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialImproveBonus(material, bonus);
|
||||
MaterialsTweaks.addMaterialImproveBonus(material, bonus);
|
||||
} else if (name.startsWith("materialShatterResistance")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float resistance = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialShatterResistance(material, resistance);
|
||||
MaterialsTweaks.addMaterialShatterResistance(material, resistance);
|
||||
} else if (name.startsWith("materialLockpickBonus")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float bonus = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialLockpickBonus(material, bonus);
|
||||
MaterialsTweaks.addMaterialLockpickBonus(material, bonus);
|
||||
} else if (name.startsWith("materialAnchorBonus")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float bonus = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialAnchorBonus(material, bonus);
|
||||
MaterialsTweaks.addMaterialAnchorBonus(material, bonus);
|
||||
} else if (name.startsWith("materialPendulumEffect")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float bonus = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialPendulumEffect(material, bonus);
|
||||
MaterialsTweaks.addMaterialPendulumEffect(material, bonus);
|
||||
} else if (name.startsWith("materialRepairSpeed")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialRepairSpeed(material, mult);
|
||||
MaterialsTweaks.addMaterialRepairSpeed(material, mult);
|
||||
} else if (name.startsWith("materialBashModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
double mult = Double.parseDouble(split[1]);
|
||||
MaterialTweaks.addMaterialBashModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialBashModifier(material, mult);
|
||||
} else if (name.startsWith("materialSpellEffectModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
float mult = Float.parseFloat(split[1]);
|
||||
MaterialTweaks.addMaterialSpellEffectModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialSpellEffectModifier(material, mult);
|
||||
} else if (name.startsWith("materialSpecificSpellEffectModifier")) {
|
||||
String[] split = value.split(";");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
String[] split2 = split[1].split(",");
|
||||
MaterialTweaks.addMaterialSpecificSpellEffectModifier(material, split2);
|
||||
MaterialsTweaks.addMaterialSpecificSpellEffectModifier(material, split2);
|
||||
} else if (name.startsWith("materialDifficultyModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
double mult = Double.parseDouble(split[1]);
|
||||
MaterialTweaks.addMaterialDifficultyModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialDifficultyModifier(material, mult);
|
||||
} else if (name.startsWith("materialActionSpeedModifier")) {
|
||||
String[] split = value.split(",");
|
||||
byte material = parseMaterialType(split[0]);
|
||||
double mult = Double.parseDouble(split[1]);
|
||||
MaterialTweaks.addMaterialActionSpeedModifier(material, mult);
|
||||
MaterialsTweaks.addMaterialActionSpeedModifier(material, mult);
|
||||
} else if (name.startsWith("weaponDamage")) {
|
||||
String[] split = value.split(",");
|
||||
int weaponId = Integer.parseInt(split[0]);
|
||||
@@ -218,85 +253,117 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// Print values of main.java.armoury.mod configuration
|
||||
logger.info(" -- Mod Configuration -- ");
|
||||
logger.log(Level.INFO, "enableNonPlayerCrits: " + enableNonPlayerCrits);
|
||||
// Print configuration values
|
||||
logger.info(" -- Armour Configuration -- ");
|
||||
logger.info("enableArmourModifications: " + enableArmourModifications);
|
||||
logger.info("> Armour Damage Reduction Settings <");
|
||||
for(byte armourType : ArmourTemplateTweaks.armourDamageReduction.keySet()){
|
||||
logger.info(String.format("Damage reduction for armour %s: %.2f%%", ArmourAssist.getArmourName(armourType), ArmourTemplateTweaks.armourDamageReduction.get(armourType)*100f));
|
||||
}
|
||||
logger.info("> Armour Effectiveness Settings <");
|
||||
for(byte armourType : ArmourTemplateTweaks.armourEffectiveness.keySet()){
|
||||
HashMap<Byte, Float> woundMap = ArmourTemplateTweaks.armourEffectiveness.get(armourType);
|
||||
for(byte woundType : woundMap.keySet()){
|
||||
String wound = WoundAssist.getWoundName(woundType);
|
||||
logger.info(String.format("Effectiveness for armour %s against %s: %.2f%%", ArmourAssist.getArmourName(armourType), wound, woundMap.get(woundType)*100f));
|
||||
}
|
||||
}
|
||||
logger.info("> Armour Glance Rate Settings <");
|
||||
for(byte armourType : ArmourTemplateTweaks.armourGlanceRates.keySet()){
|
||||
HashMap<Byte, Float> woundMap = ArmourTemplateTweaks.armourGlanceRates.get(armourType);
|
||||
for(byte woundType : woundMap.keySet()){
|
||||
String wound = WoundAssist.getWoundName(woundType);
|
||||
logger.info(String.format("Glance rate for armour %s against %s: %.2f%%", ArmourAssist.getArmourName(armourType), wound, woundMap.get(woundType)*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));
|
||||
}
|
||||
logger.info(" -- Material Configuration -- ");
|
||||
logger.info("> Armour Material Damage Reduction Settings <");
|
||||
for(byte material : MaterialsTweaks.materialDamageReduction.keySet()){
|
||||
logger.info(String.format("Base DR modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialDamageReduction.get(material)*100f));
|
||||
}
|
||||
logger.info("> Armour Material Movement Modifier Settings <");
|
||||
for(byte material : MaterialsTweaks.materialMovementModifier.keySet()){
|
||||
logger.info(String.format("Movement Speed modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialMovementModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Weapon Material Damage Settings <");
|
||||
for(byte material : WeaponTweaks.materialWeaponDamage.keySet()){
|
||||
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponDamage.get(material)*100f));
|
||||
for(byte material : WeaponsTweaks.materialWeaponDamage.keySet()){
|
||||
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), WeaponsTweaks.materialWeaponDamage.get(material)*100f));
|
||||
}
|
||||
logger.info("> Weapon Material Speed Settings <");
|
||||
for(byte material : WeaponTweaks.materialWeaponSpeed.keySet()){
|
||||
logger.info(String.format("Speed modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponSpeed.get(material)*100f));
|
||||
for(byte material : WeaponsTweaks.materialWeaponSpeed.keySet()){
|
||||
logger.info(String.format("Speed modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), WeaponsTweaks.materialWeaponSpeed.get(material)*100f));
|
||||
}
|
||||
logger.info("> Weapon Material Parry Settings <");
|
||||
for(byte material : WeaponTweaks.materialWeaponParry.keySet()){
|
||||
logger.info(String.format("Parry modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponParry.get(material)*100f));
|
||||
for(byte material : WeaponsTweaks.materialWeaponParry.keySet()){
|
||||
logger.info(String.format("Parry modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), WeaponsTweaks.materialWeaponParry.get(material)*100f));
|
||||
}
|
||||
logger.info("> Weapon Material Armour Damage Settings <");
|
||||
for(byte material : WeaponTweaks.materialWeaponArmourDamage.keySet()){
|
||||
logger.info(String.format("Armour Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponArmourDamage.get(material)*100f));
|
||||
for(byte material : WeaponsTweaks.materialWeaponArmourDamage.keySet()){
|
||||
logger.info(String.format("Armour Damage modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), WeaponsTweaks.materialWeaponArmourDamage.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Damage Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialDamageModifier.keySet()){
|
||||
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDamageModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialDamageModifier.keySet()){
|
||||
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialDamageModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Decay Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialDecayModifier.keySet()){
|
||||
logger.info(String.format("Decay modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDecayModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialDecayModifier.keySet()){
|
||||
logger.info(String.format("Decay modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialDecayModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Creation Bonus Settings <");
|
||||
for(byte material : MaterialTweaks.materialCreationBonus.keySet()){
|
||||
logger.info(String.format("Creation bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialCreationBonus.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialCreationBonus.keySet()){
|
||||
logger.info(String.format("Creation bonus for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialCreationBonus.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Improve Bonus Settings <");
|
||||
for(byte material : MaterialTweaks.materialImproveBonus.keySet()){
|
||||
logger.info(String.format("Improve bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialImproveBonus.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialImproveBonus.keySet()){
|
||||
logger.info(String.format("Improve bonus for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialImproveBonus.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Shatter Resistance Settings <");
|
||||
for(byte material : MaterialTweaks.materialShatterResistance.keySet()){
|
||||
logger.info(String.format("Shatter resistance for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialShatterResistance.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialShatterResistance.keySet()){
|
||||
logger.info(String.format("Shatter resistance for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialShatterResistance.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Lockpick Bonus Settings <");
|
||||
for(byte material : MaterialTweaks.materialLockpickBonus.keySet()){
|
||||
logger.info(String.format("Lockpick bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialLockpickBonus.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialLockpickBonus.keySet()){
|
||||
logger.info(String.format("Lockpick bonus for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialLockpickBonus.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Anchor Bonus Settings <");
|
||||
for(byte material : MaterialTweaks.materialAnchorBonus.keySet()){
|
||||
logger.info(String.format("Anchor bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialAnchorBonus.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialAnchorBonus.keySet()){
|
||||
logger.info(String.format("Anchor bonus for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialAnchorBonus.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Pendulum Effect Settings <");
|
||||
for(byte material : MaterialTweaks.materialPendulumEffect.keySet()){
|
||||
logger.info(String.format("Pendulum effect for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialPendulumEffect.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialPendulumEffect.keySet()){
|
||||
logger.info(String.format("Pendulum effect for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialPendulumEffect.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Repair Speed Settings <");
|
||||
for(byte material : MaterialTweaks.materialRepairSpeed.keySet()){
|
||||
logger.info(String.format("Repair speed for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialRepairSpeed.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialRepairSpeed.keySet()){
|
||||
logger.info(String.format("Repair speed for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialRepairSpeed.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Bash Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialBashModifier.keySet()){
|
||||
logger.info(String.format("Bash modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialBashModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialBashModifier.keySet()){
|
||||
logger.info(String.format("Bash modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialBashModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Spell Effect Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialSpellEffectModifier.keySet()){
|
||||
logger.info(String.format("Spell effect modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialSpellEffectModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialSpellEffectModifier.keySet()){
|
||||
logger.info(String.format("Spell effect modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialSpellEffectModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Specific Spell Effect Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialSpecificSpellEffectModifier.keySet()){
|
||||
for(byte material : MaterialsTweaks.materialSpecificSpellEffectModifier.keySet()){
|
||||
//String name = materialNameReference.containsKey(material) ? materialNameReference.get(material) : String.valueOf(material);
|
||||
HashMap<Byte, Float> enchantMap = MaterialTweaks.materialSpecificSpellEffectModifier.get(material);
|
||||
HashMap<Byte, Float> enchantMap = MaterialsTweaks.materialSpecificSpellEffectModifier.get(material);
|
||||
for(byte enchant : enchantMap.keySet()){
|
||||
logger.info(String.format("Spell Effect Power for material %s with enchant %s: %.2f%%", MaterialTweaks.getMaterialName(material), enchant, enchantMap.get(enchant)*100f));
|
||||
logger.info(String.format("Spell Effect Power for material %s with enchant %s: %.2f%%", MaterialsTweaks.getMaterialName(material), enchant, enchantMap.get(enchant)*100f));
|
||||
}
|
||||
}
|
||||
logger.info("> Item Material Difficulty Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialDifficultyModifier.keySet()){
|
||||
logger.info(String.format("Difficulty modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDifficultyModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialDifficultyModifier.keySet()){
|
||||
logger.info(String.format("Difficulty modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialDifficultyModifier.get(material)*100f));
|
||||
}
|
||||
logger.info("> Item Material Action Speed Modifier Settings <");
|
||||
for(byte material : MaterialTweaks.materialActionSpeedModifier.keySet()){
|
||||
logger.info(String.format("Action Speed modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialActionSpeedModifier.get(material)*100f));
|
||||
for(byte material : MaterialsTweaks.materialActionSpeedModifier.keySet()){
|
||||
logger.info(String.format("Action Speed modifier for material %s: %.2f%%", MaterialsTweaks.getMaterialName(material), MaterialsTweaks.materialActionSpeedModifier.get(material)*100f));
|
||||
}
|
||||
logger.info(" -- Shield Configuration -- ");
|
||||
logger.log(Level.INFO, "enableShieldDamageEnchants: " + enableShieldDamageEnchants);
|
||||
@@ -311,10 +378,10 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
|
||||
@Override
|
||||
public void preInit(){
|
||||
CombatTweaks.preInit();
|
||||
ShieldTweaks.preInit();
|
||||
WeaponTweaks.preInit();
|
||||
MaterialTweaks.preInit();
|
||||
CombatsTweaks.preInit();
|
||||
ShieldsTweaks.preInit();
|
||||
WeaponsTweaks.preInit();
|
||||
MaterialsTweaks.preInit();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -324,6 +391,7 @@ implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListene
|
||||
|
||||
@Override
|
||||
public void onServerStarted(){
|
||||
WeaponTweaks.onServerStarted();
|
||||
WeaponsTweaks.onServerStarted();
|
||||
ArmourTemplateTweaks.onServerStarted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import mod.sin.lib.Util;
|
||||
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||
|
||||
public class CombatTweaks {
|
||||
public class CombatsTweaks {
|
||||
public static Item handleDualWieldAttack(CombatHandler handler, Creature opponent, float delta){
|
||||
try {
|
||||
Creature performer = ReflectionUtil.getPrivateField(handler, ReflectionUtil.getField(handler.getClass(), "creature"));
|
||||
@@ -33,9 +33,10 @@ public class CombatTweaks {
|
||||
public static void preInit(){
|
||||
try {
|
||||
ClassPool classPool = HookManager.getInstance().getClassPool();
|
||||
Class<CombatTweaks> thisClass = CombatTweaks.class;
|
||||
Class<CombatsTweaks> thisClass = CombatsTweaks.class;
|
||||
|
||||
// - Allow critical hits on creatures as well as players -
|
||||
/* [3.1] Disabled - No longer working properly.
|
||||
ArmouryModMain.enableNonPlayerCrits = false; // Disabled for now as it's not working.
|
||||
if(ArmouryModMain.enableNonPlayerCrits){
|
||||
CtClass ctCombatHandler = classPool.get("com.wurmonline.server.creatures.CombatHandler");
|
||||
@@ -47,14 +48,7 @@ public class CombatTweaks {
|
||||
String desc = Descriptor.ofMethod(CtPrimitiveType.booleanType, attackParams1);
|
||||
Util.setReason("Enable player critical strikes on creatures.");
|
||||
Util.instrumentDescribed(thisClass, ctCombatHandler, "attack", desc, "isPlayer", "$_ = true");
|
||||
/*ctCombatHandler.getMethod("attack", Descriptor.ofMethod(CtPrimitiveType.booleanType, attackParams1)).instrument(new ExprEditor(){
|
||||
public void edit(MethodCall m) throws CannotCompileException {
|
||||
if (m.getMethodName().equals("isPlayer")) {
|
||||
m.replace("$_ = true;");
|
||||
return;
|
||||
}
|
||||
}
|
||||
});*/
|
||||
|
||||
CtClass[] attackParams2 = {
|
||||
classPool.get("com.wurmonline.server.creatures.Creature"),
|
||||
classPool.get("com.wurmonline.server.creatures.AttackAction")
|
||||
@@ -62,15 +56,7 @@ public class CombatTweaks {
|
||||
desc = Descriptor.ofMethod(CtPrimitiveType.booleanType, attackParams2);
|
||||
Util.setReason("Enable player critical strikes on creatures.");
|
||||
Util.instrumentDescribed(thisClass, ctCombatHandler, "attack", desc, "isPlayer", "$_ = true");
|
||||
/*ctCombatHandler.getMethod("attack", Descriptor.ofMethod(CtPrimitiveType.booleanType, attackParams2)).instrument(new ExprEditor(){
|
||||
public void edit(MethodCall m) throws CannotCompileException {
|
||||
if (m.getMethodName().equals("isPlayer")) {
|
||||
m.replace("$_ = true;");
|
||||
return;
|
||||
}
|
||||
}
|
||||
});*/
|
||||
}
|
||||
}*/
|
||||
|
||||
// - Change the minimum swing timer - //
|
||||
if(ArmouryModMain.minimumSwingTime != 3.0f){
|
||||
@@ -143,7 +129,7 @@ public class CombatTweaks {
|
||||
};
|
||||
String desc = Descriptor.ofMethod(CtClass.booleanType, params1);
|
||||
String replace = "if(this.creature.isPlayer()){"
|
||||
+ " com.wurmonline.server.items.Item weapon = "+CombatTweaks.class.getName()+".handleDualWieldAttack(this, opponent, delta);"
|
||||
+ " com.wurmonline.server.items.Item weapon = "+CombatsTweaks.class.getName()+".handleDualWieldAttack(this, opponent, delta);"
|
||||
+ " if(weapon != null){"
|
||||
+ " lDead = attack(opponent, weapon, true);"
|
||||
+ " }"
|
||||
@@ -155,7 +141,7 @@ public class CombatTweaks {
|
||||
public void edit(MethodCall m) throws CannotCompileException {
|
||||
if (m.getMethodName().equals("getSecondaryWeapons")) {
|
||||
m.replace("if(this.creature.isPlayer()){"
|
||||
+ " com.wurmonline.server.items.Item weapon = CombatTweaks.handleDualWieldAttack(this, opponent, delta);"
|
||||
+ " com.wurmonline.server.items.Item weapon = CombatsTweaks.handleDualWieldAttack(this, opponent, delta);"
|
||||
+ " if(weapon != null){"
|
||||
+ " lDead = attack(opponent, weapon, true);"
|
||||
+ " }"
|
||||
@@ -16,9 +16,12 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MaterialTweaks {
|
||||
public static Logger logger = Logger.getLogger(MaterialTweaks.class.getName());
|
||||
public class MaterialsTweaks {
|
||||
public static Logger logger = Logger.getLogger(MaterialsTweaks.class.getName());
|
||||
|
||||
// Material Modifier Maps
|
||||
public static HashMap<Byte, Float> materialDamageReduction = new HashMap<>();
|
||||
public static HashMap<Byte, Float> materialMovementModifier = new HashMap<>();
|
||||
public static HashMap<Byte, Float> materialDamageModifier = new HashMap<>();
|
||||
public static HashMap<Byte, Float> materialDecayModifier = new HashMap<>();
|
||||
public static HashMap<Byte, Float> materialCreationBonus = new HashMap<>();
|
||||
@@ -34,10 +37,26 @@ public class MaterialTweaks {
|
||||
public static HashMap<Byte, Double> materialDifficultyModifier = new HashMap<>();
|
||||
public static HashMap<Byte, Double> materialActionSpeedModifier = new HashMap<>();
|
||||
|
||||
public static float newGetMaterialDamageReduction(byte material){
|
||||
if(materialDamageReduction.containsKey(material)){
|
||||
//logger.info(String.format("Modifying damage by %.2f%% due to material type %s.", materialDamageModifier.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialDamageReduction.get(material);
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
public static float newGetMaterialMovementModifier(byte armourMaterial){
|
||||
if(materialMovementModifier.containsKey(armourMaterial)){
|
||||
//logger.info(String.format("Adjusting movement speed to %.2f%% because of material %s", materialMovementModifier.get(armourMaterial)*100f, armourMaterial));
|
||||
return materialMovementModifier.get(armourMaterial);
|
||||
}
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
public static float newGetMaterialDamageModifier(Item item){
|
||||
byte material = item.getMaterial();
|
||||
if(materialDamageModifier.containsKey(material)){
|
||||
//logger.info(String.format("Modifying damage by %.2f%% due to material type %s.", materialDamageModifier.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying damage by %.2f%% due to material type %s.", materialDamageModifier.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialDamageModifier.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -46,7 +65,7 @@ public class MaterialTweaks {
|
||||
public static float newGetMaterialDecayModifier(Item item){
|
||||
byte material = item.getMaterial();
|
||||
if(materialDecayModifier.containsKey(material)){
|
||||
//logger.info(String.format("Modifying decay by %.2f%% due to material type %s.", materialDecayModifier.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying decay by %.2f%% due to material type %s.", materialDecayModifier.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialDecayModifier.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -54,7 +73,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static float newGetMaterialCreationBonus(byte material){
|
||||
if(materialCreationBonus.containsKey(material)){
|
||||
//logger.info(String.format("Modifying creation bonus by %.2f%% due to material type %s.", materialCreationBonus.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying creation bonus by %.2f%% due to material type %s.", materialCreationBonus.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialCreationBonus.get(material);
|
||||
}
|
||||
return 0.0f;
|
||||
@@ -63,7 +82,7 @@ public class MaterialTweaks {
|
||||
public static float newGetMaterialImpBonus(Item item){
|
||||
byte material = item.getMaterial();
|
||||
if(materialImproveBonus.containsKey(material)){
|
||||
//logger.info(String.format("Modifying improve bonus by %.2f%% due to material type %s.", materialImproveBonus.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying improve bonus by %.2f%% due to material type %s.", materialImproveBonus.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialImproveBonus.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -71,7 +90,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static float newGetMaterialShatterMod(byte material){
|
||||
if(materialShatterResistance.containsKey(material)){
|
||||
//logger.info(String.format("Modifying shatter resistance by %.2f%% due to material type %s.", materialShatterResistance.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying shatter resistance by %.2f%% due to material type %s.", materialShatterResistance.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialShatterResistance.get(material);
|
||||
}
|
||||
return 0.0f;
|
||||
@@ -79,7 +98,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static float newGetMaterialLockpickBonus(byte material){
|
||||
if(materialLockpickBonus.containsKey(material)){
|
||||
//logger.info(String.format("Modifying lockpick bonus by %.2f%% due to material type %s.", materialLockpickBonus.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying lockpick bonus by %.2f%% due to material type %s.", materialLockpickBonus.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialLockpickBonus.get(material);
|
||||
}
|
||||
return 0.0f;
|
||||
@@ -87,7 +106,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static float newGetMaterialAnchorBonus(byte material){
|
||||
if(materialAnchorBonus.containsKey(material)){
|
||||
//logger.info(String.format("Modifying anchor bonus by %.2f%% due to material type %s.", materialAnchorBonus.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying anchor bonus by %.2f%% due to material type %s.", materialAnchorBonus.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialAnchorBonus.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -95,7 +114,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static float newGetMaterialPendulumModifier(byte material){
|
||||
if(materialPendulumEffect.containsKey(material)){
|
||||
//logger.info(String.format("Modifying pendulum effect by %.2f%% due to material type %s.", materialPendulumEffect.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying pendulum effect by %.2f%% due to material type %s.", materialPendulumEffect.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialPendulumEffect.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -104,7 +123,7 @@ public class MaterialTweaks {
|
||||
public static float newGetMaterialRepairTimeMod(Item item){
|
||||
byte material = item.getMaterial();
|
||||
if(materialRepairSpeed.containsKey(material)){
|
||||
//logger.info(String.format("Modifying repair speed by %.2f%% due to material type %s.", materialRepairSpeed.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying repair speed by %.2f%% due to material type %s.", materialRepairSpeed.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialRepairSpeed.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -112,7 +131,7 @@ public class MaterialTweaks {
|
||||
|
||||
public static double newGetMaterialBashModifier(byte material){
|
||||
if(materialBashModifier.containsKey(material)){
|
||||
//logger.info(String.format("Modifying bash by %.2f%% due to material type %s.", materialBashModifier.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying bash by %.2f%% due to material type %s.", materialBashModifier.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialBashModifier.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -127,11 +146,11 @@ public class MaterialTweaks {
|
||||
byte material = item.getMaterial();
|
||||
if(materialSpellEffectModifier.containsKey(material)) {
|
||||
newPower *= materialSpellEffectModifier.get(material);
|
||||
//logger.info(String.format("Modifying spell power by %.2f%% due to material type %s. [%s]", materialSpellEffectModifier.get(material) * 100d, MaterialTweaks.getMaterialName(material), newPower));
|
||||
//logger.info(String.format("Modifying spell power by %.2f%% due to material type %s. [%s]", materialSpellEffectModifier.get(material) * 100d, MaterialsTweaks.getMaterialName(material), newPower));
|
||||
}
|
||||
if(materialSpecificSpellEffectModifier.containsKey(material) && materialSpecificSpellEffectModifier.get(material).containsKey(aEnchantment)) {
|
||||
newPower *= materialSpecificSpellEffectModifier.get(material).get(aEnchantment);
|
||||
//logger.info(String.format("Modifying spell power of enchant %s by %.2f%% due to material type %s. [%s]", aEnchantment, materialSpecificSpellEffectModifier.get(material).get(aEnchantment) * 100d, MaterialTweaks.getMaterialName(material), newPower));
|
||||
//logger.info(String.format("Modifying spell power of enchant %s by %.2f%% due to material type %s. [%s]", aEnchantment, materialSpecificSpellEffectModifier.get(material).get(aEnchantment) * 100d, MaterialsTweaks.getMaterialName(material), newPower));
|
||||
}
|
||||
return newPower;
|
||||
}
|
||||
@@ -144,7 +163,7 @@ public class MaterialTweaks {
|
||||
byte material = item.getMaterial();
|
||||
if(materialDifficultyModifier.containsKey(material)){
|
||||
diff *= materialDifficultyModifier.get(material);
|
||||
//logger.info(String.format("Modifying difficulty by %.2f%% due to material type %s. [%s]", materialDifficultyModifier.get(material) * 100d, MaterialTweaks.getMaterialName(material), diff));
|
||||
//logger.info(String.format("Modifying difficulty by %.2f%% due to material type %s. [%s]", materialDifficultyModifier.get(material) * 100d, MaterialsTweaks.getMaterialName(material), diff));
|
||||
}
|
||||
}
|
||||
return diff;
|
||||
@@ -154,13 +173,21 @@ public class MaterialTweaks {
|
||||
if(item != null){
|
||||
byte material = item.getMaterial();
|
||||
if(materialActionSpeedModifier.containsKey(material)){
|
||||
//logger.info(String.format("Modifying action speed by %.2f%% due to material type %s.", materialActionSpeedModifier.get(material) * 100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying action speed by %.2f%% due to material type %s.", materialActionSpeedModifier.get(material) * 100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialActionSpeedModifier.get(material);
|
||||
}
|
||||
}
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
public static void addMaterialDamageReduction(byte material, float reduction){
|
||||
materialDamageReduction.put(material, reduction);
|
||||
}
|
||||
|
||||
public static void addMaterialMovementModifier(byte material, float speed){
|
||||
materialMovementModifier.put(material, speed);
|
||||
}
|
||||
|
||||
public static void addMaterialDamageModifier(byte material, float mult){
|
||||
materialDamageModifier.put(material, mult);
|
||||
}
|
||||
@@ -263,6 +290,32 @@ public class MaterialTweaks {
|
||||
}
|
||||
|
||||
protected static void initializeMaterialMaps(){
|
||||
// Material damage reduction modifiers
|
||||
materialDamageReduction.put(Materials.MATERIAL_GOLD, -0.01f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_SILVER, -0.0075f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_STEEL, 0.025f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_COPPER, -0.01f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_IRON, 0.0f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_LEAD, -0.025f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_ZINC, -0.02f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_BRASS, 0.01f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_BRONZE, 0.01f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_TIN, -0.0175f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_ADAMANTINE, 0.05f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_GLIMMERSTEEL, 0.05f);
|
||||
materialDamageReduction.put(Materials.MATERIAL_SERYLL, 0.05f);
|
||||
|
||||
// Material movement modifiers
|
||||
materialMovementModifier.put(Materials.MATERIAL_ADAMANTINE, 0.95f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_COPPER, 0.99f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_GLIMMERSTEEL, 0.90f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_GOLD, 1.05f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_LEAD, 1.025f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_SERYLL, 0.90f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_SILVER, 1.02f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_TIN, 0.98f);
|
||||
materialMovementModifier.put(Materials.MATERIAL_ZINC, 0.975f);
|
||||
|
||||
// Material damage taken modifiers
|
||||
materialDamageModifier.put(Materials.MATERIAL_ADAMANTINE, 0.40f);
|
||||
materialDamageModifier.put(Materials.MATERIAL_BRASS, 0.95f);
|
||||
@@ -382,94 +435,107 @@ public class MaterialTweaks {
|
||||
public static void preInit(){
|
||||
try {
|
||||
ClassPool classPool = HookManager.getInstance().getClassPool();
|
||||
final Class<MaterialTweaks> thisClass = MaterialTweaks.class;
|
||||
final Class<MaterialsTweaks> thisClass = MaterialsTweaks.class;
|
||||
String replace;
|
||||
|
||||
if(ArmouryModMain.enableItemMaterialChanges){
|
||||
Util.setReason("Enable material damage reduction modifications.");
|
||||
CtClass ctArmourTemplate = classPool.get("com.wurmonline.server.combat.ArmourTemplate");
|
||||
replace = "{"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialDamageReduction($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctArmourTemplate, "getArmourMatBonus", replace);
|
||||
|
||||
Util.setReason("Enable material movement modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialMovementModifier($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctArmourTemplate, "getMaterialMovementModifier", replace);
|
||||
|
||||
Util.setReason("Enable material damage taken modifications.");
|
||||
CtClass ctItem = classPool.get("com.wurmonline.server.items.Item");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialDamageModifier($0);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialDamageModifier($0);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialDamageModifier", replace);
|
||||
|
||||
Util.setReason("Enable material decay modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialDecayModifier($0);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialDecayModifier($0);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialDecayModifier", replace);
|
||||
|
||||
Util.setReason("Enable material creation bonus modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialCreationBonus($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialCreationBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialCreationBonus", replace);
|
||||
|
||||
Util.setReason("Enable material improvement bonus modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialImpBonus($0);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialImpBonus($0);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialImpBonus", replace);
|
||||
|
||||
Util.setReason("Enable material shatter resistance modifications.");
|
||||
CtClass ctSpell = classPool.get("com.wurmonline.server.spells.Spell");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialShatterMod($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialShatterMod($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctSpell, "getMaterialShatterMod", replace);
|
||||
|
||||
Util.setReason("Enable material lockpick bonus modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialLockpickBonus($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialLockpickBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialLockpickBonus", replace);
|
||||
|
||||
Util.setReason("Enable material anchor bonus modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialAnchorBonus($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialAnchorBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialAnchorBonus", replace);
|
||||
|
||||
Util.setReason("Enable material pendulum effect modifications.");
|
||||
CtClass ctLocates = classPool.get("com.wurmonline.server.behaviours.Locates");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialPendulumModifier($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialPendulumModifier($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctLocates, "getMaterialPendulumModifier", replace);
|
||||
|
||||
Util.setReason("Enable material repair speed modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialRepairTimeMod($0);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialRepairTimeMod($0);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getMaterialRepairTimeMod", replace);
|
||||
|
||||
Util.setReason("Enable material bash modifications.");
|
||||
CtClass ctWeapon = classPool.get("com.wurmonline.server.combat.Weapon");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetMaterialBashModifier($1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetMaterialBashModifier($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctWeapon, "getMaterialBashModifier", replace);
|
||||
|
||||
Util.setReason("Enable material spell power modifications.");
|
||||
replace = "{"
|
||||
+ " return "+MaterialTweaks.class.getName()+".newGetBonusForSpellEffect($0, $1);"
|
||||
+ " return "+MaterialsTweaks.class.getName()+".newGetBonusForSpellEffect($0, $1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctItem, "getBonusForSpellEffect", replace);
|
||||
|
||||
Util.setReason("Enable material skill difficulty modifications.");
|
||||
CtClass ctSkill = classPool.get("com.wurmonline.server.skills.Skill");
|
||||
replace = "$1 = "+MaterialTweaks.class.getName()+".getNewDifficulty(this, $1, $2);";
|
||||
replace = "$1 = "+MaterialsTweaks.class.getName()+".getNewDifficulty(this, $1, $2);";
|
||||
Util.insertBeforeDeclared(thisClass, ctSkill, "checkAdvance", replace);
|
||||
|
||||
Util.setReason("Enable material action speed modifications.");
|
||||
CtClass ctActions = classPool.get("com.wurmonline.server.behaviours.Actions");
|
||||
replace = "$_ = $proceed($$)*"+MaterialTweaks.class.getName()+".getMaterialSpeedModifier(source);";
|
||||
replace = "$_ = $proceed($$)*"+MaterialsTweaks.class.getName()+".getMaterialSpeedModifier(source);";
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getStandardActionTime", "getStaminaModiferFor", replace);
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getQuickActionTime", "getStaminaModiferFor", replace);
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getVariableActionTime", "getStaminaModiferFor", replace);
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getSlowActionTime", "getStaminaModiferFor", replace);
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getPickActionTime", "getStaminaModiferFor", replace);
|
||||
replace = "$_ = $proceed($$)*"+MaterialTweaks.class.getName()+".getMaterialSpeedModifier(realSource);";
|
||||
replace = "$_ = $proceed($$)*"+MaterialsTweaks.class.getName()+".getMaterialSpeedModifier(realSource);";
|
||||
Util.instrumentDeclared(thisClass, ctActions, "getItemCreationTime", "getStaminaModiferFor", replace);
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
@@ -16,8 +16,8 @@ import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.NotFoundException;
|
||||
|
||||
public class ShieldTweaks {
|
||||
public static Logger logger = Logger.getLogger(ShieldTweaks.class.getName());
|
||||
public class ShieldsTweaks {
|
||||
public static Logger logger = Logger.getLogger(ShieldsTweaks.class.getName());
|
||||
|
||||
public static boolean checkShieldSpeed(Item shield){
|
||||
if ((shield != null)) {
|
||||
@@ -59,17 +59,17 @@ public class ShieldTweaks {
|
||||
public static void preInit(){
|
||||
try {
|
||||
ClassPool classPool = HookManager.getInstance().getClassPool();
|
||||
Class<ShieldTweaks> thisClass = ShieldTweaks.class;
|
||||
Class<ShieldsTweaks> thisClass = ShieldsTweaks.class;
|
||||
if(ArmouryModMain.enableShieldDamageEnchants){
|
||||
CtClass ctCombatHandler = classPool.get("com.wurmonline.server.creatures.CombatHandler");
|
||||
String replace = ShieldTweaks.class.getName()+".doSharedPain(this.creature, defender, defShield);"
|
||||
String replace = ShieldsTweaks.class.getName()+".doSharedPain(this.creature, defender, defShield);"
|
||||
+ "$_ = $proceed($$);";
|
||||
Util.setReason("Enable shield damage enchants.");
|
||||
Util.instrumentDeclared(thisClass, ctCombatHandler, "checkShield", "setDamage", replace);
|
||||
/*ctCombatHandler.getDeclaredMethod("checkShield").instrument(new ExprEditor(){
|
||||
public void edit(MethodCall m) throws CannotCompileException {
|
||||
if (m.getMethodName().equals("setDamage")) {
|
||||
m.replace(ShieldTweaks.class.getName()+".doSharedPain(this.creature, defender, defShield);"
|
||||
m.replace(ShieldsTweaks.class.getName()+".doSharedPain(this.creature, defender, defShield);"
|
||||
+ "$_ = $proceed($$);");
|
||||
return;
|
||||
}
|
||||
@@ -78,13 +78,13 @@ public class ShieldTweaks {
|
||||
}
|
||||
if(ArmouryModMain.enableShieldSpeedEnchants){
|
||||
CtClass ctCombatHandler = classPool.get("com.wurmonline.server.creatures.CombatHandler");
|
||||
String insert = "if("+ShieldTweaks.class.getName()+".checkShieldSpeed(defender.getShield())){"
|
||||
String insert = "if("+ShieldsTweaks.class.getName()+".checkShieldSpeed(defender.getShield())){"
|
||||
+ " defender.getCombatHandler().usedShieldThisRound--;"
|
||||
+ "}";
|
||||
Util.setReason("Enable shield speed enchants.");
|
||||
Util.insertBeforeDeclared(thisClass, ctCombatHandler, "checkShield", insert);
|
||||
/*ctCombatHandler.getDeclaredMethod("checkShield").insertBefore(""
|
||||
+ "if("+ShieldTweaks.class.getName()+".checkShieldSpeed(defender.getShield())){"
|
||||
+ "if("+ShieldsTweaks.class.getName()+".checkShieldSpeed(defender.getShield())){"
|
||||
+ " defender.getCombatHandler().usedShieldThisRound--;"
|
||||
+ "}");*/
|
||||
}
|
||||
@@ -16,8 +16,8 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class WeaponTweaks {
|
||||
public static Logger logger = Logger.getLogger(WeaponTweaks.class.getName());
|
||||
public class WeaponsTweaks {
|
||||
public static Logger logger = Logger.getLogger(WeaponsTweaks.class.getName());
|
||||
|
||||
public static Map<Integer, Weapon> weapons; // Mirror of the Weapon class map
|
||||
|
||||
@@ -28,7 +28,7 @@ public class WeaponTweaks {
|
||||
|
||||
public static double newGetMaterialDamageBonus(byte material){
|
||||
if(materialWeaponDamage.containsKey(material)){
|
||||
//logger.info(String.format("Modifying damage by %.2f%% due to material type %s.", materialWeaponDamage.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying damage by %.2f%% due to material type %s.", materialWeaponDamage.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialWeaponDamage.get(material);
|
||||
}
|
||||
return 1.0d;
|
||||
@@ -46,7 +46,7 @@ public class WeaponTweaks {
|
||||
byte material = weapon.getMaterial();
|
||||
if(materialWeaponSpeed.containsKey(material)){
|
||||
speed *= materialWeaponSpeed.get(material);
|
||||
//logger.info(String.format("Found material %s, modifying speed by %.2f%%. New speed: %s", MaterialTweaks.getMaterialName(material), materialWeaponSpeed.get(material)*100f, speed));
|
||||
//logger.info(String.format("Found material %s, modifying speed by %.2f%%. New speed: %s", MaterialsTweaks.getMaterialName(material), materialWeaponSpeed.get(material)*100f, speed));
|
||||
}
|
||||
return speed;
|
||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||
@@ -61,7 +61,7 @@ public class WeaponTweaks {
|
||||
|
||||
public static float newGetMaterialParryBonus(byte material){
|
||||
if(materialWeaponParry.containsKey(material)){
|
||||
//logger.info(String.format("Modifying parry by %.2f%% due to material type %s.", materialWeaponParry.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying parry by %.2f%% due to material type %s.", materialWeaponParry.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialWeaponParry.get(material);
|
||||
}
|
||||
return 1.0f;
|
||||
@@ -69,7 +69,7 @@ public class WeaponTweaks {
|
||||
|
||||
public static double newGetMaterialArmourDamageBonus(byte material){
|
||||
if(materialWeaponArmourDamage.containsKey(material)){
|
||||
//logger.info(String.format("Modifying armour damage by %.2f%% due to material type %s.", materialWeaponArmourDamage.get(material)*100d, MaterialTweaks.getMaterialName(material)));
|
||||
//logger.info(String.format("Modifying armour damage by %.2f%% due to material type %s.", materialWeaponArmourDamage.get(material)*100d, MaterialsTweaks.getMaterialName(material)));
|
||||
return materialWeaponArmourDamage.get(material);
|
||||
}
|
||||
return 1.0d;
|
||||
@@ -365,32 +365,32 @@ public class WeaponTweaks {
|
||||
public static void preInit(){
|
||||
try {
|
||||
ClassPool classPool = HookManager.getInstance().getClassPool();
|
||||
final Class<WeaponTweaks> thisClass = WeaponTweaks.class;
|
||||
final Class<WeaponsTweaks> thisClass = WeaponsTweaks.class;
|
||||
String replace;
|
||||
|
||||
if(ArmouryModMain.enableWeaponMaterialChanges){
|
||||
Util.setReason("Enable weapon material damage modifications.");
|
||||
CtClass ctWeapon = classPool.get("com.wurmonline.server.combat.Weapon");
|
||||
replace = "{"
|
||||
+ " return "+WeaponTweaks.class.getName()+".newGetMaterialDamageBonus($1);"
|
||||
+ " return "+WeaponsTweaks.class.getName()+".newGetMaterialDamageBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctWeapon, "getMaterialDamageBonus", replace);
|
||||
|
||||
Util.setReason("Enable weapon material speed modifications.");
|
||||
replace = "{"
|
||||
+ " return "+WeaponTweaks.class.getName()+".newGetBaseSpeedForWeapon($1);"
|
||||
+ " return "+WeaponsTweaks.class.getName()+".newGetBaseSpeedForWeapon($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctWeapon, "getBaseSpeedForWeapon", replace);
|
||||
|
||||
Util.setReason("Enable weapon material parry modifications.");
|
||||
replace = "{"
|
||||
+ " return "+WeaponTweaks.class.getName()+".newGetMaterialParryBonus($1);"
|
||||
+ " return "+WeaponsTweaks.class.getName()+".newGetMaterialParryBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctWeapon, "getMaterialParryBonus", replace);
|
||||
|
||||
Util.setReason("Enable weapon material armour damage modifications.");
|
||||
replace = "{"
|
||||
+ " return "+WeaponTweaks.class.getName()+".newGetMaterialArmourDamageBonus($1);"
|
||||
+ " return "+WeaponsTweaks.class.getName()+".newGetMaterialArmourDamageBonus($1);"
|
||||
+ "}";
|
||||
Util.setBodyDeclared(thisClass, ctWeapon, "getMaterialArmourDamageBonus", replace);
|
||||
}
|
||||
@@ -401,7 +401,7 @@ public class WeaponTweaks {
|
||||
|
||||
public static void onServerStarted(){
|
||||
try {
|
||||
logger.info("Beginning WeaponTweaks initialization...");
|
||||
logger.info("Beginning WeaponsTweaks initialization...");
|
||||
weapons = ReflectionUtil.getPrivateField(Weapon.class, ReflectionUtil.getField(Weapon.class, "weapons"));
|
||||
|
||||
//printWeapons(); // For debugging/information purposes
|
||||
Reference in New Issue
Block a user