diff --git a/src/main/java/noppes/npcs/ai/CombatHandler.java b/src/main/java/noppes/npcs/ai/CombatHandler.java index 78a300300..1176cce9d 100644 --- a/src/main/java/noppes/npcs/ai/CombatHandler.java +++ b/src/main/java/noppes/npcs/ai/CombatHandler.java @@ -139,12 +139,14 @@ public class CombatHandler { return randomNum <= chance; } - public boolean shouldSwitchTactically(EntityLivingBase originalTarget, EntityLivingBase newTarget) { + public boolean shouldSwitchTactically(EntityLivingBase originalTarget, EntityLivingBase newTarget, boolean reverse) { // Implement your Tactical Switcher conditions here // Example: Switch if the new target has a higher threat level float currentThreat = calculateThreatLevel(originalTarget); float newThreat = calculateThreatLevel(newTarget); - + if(reverse){ + return newThreat < currentThreat; + } return newThreat > currentThreat; } } diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAI.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAI.java index f13e847b5..cf3b0070f 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAI.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAI.java @@ -80,6 +80,10 @@ public class GuiNpcAI extends GuiNPCInterface2 implements ITextfieldListener, IG getTextField(4).integersOnly = true; getTextField(4).setMinMaxDefault(1, 100, 5); } + else if (ai.combatPolicy == EnumCombatPolicy.Tactical) + { + addButton(new GuiNpcButton(40, guiLeft + 295, guiTop + 160, 60, 20, new String[]{"stats.normal","stats.reverse"}, npc.ai.tacticalChance > 50 ? 1:0)); + } getButton(17).setEnabled(this.ai.onAttack == 0); getButton(15).setEnabled(this.ai.onAttack == 0); @@ -156,6 +160,15 @@ public class GuiNpcAI extends GuiNPCInterface2 implements ITextfieldListener, IG ai.combatPolicy = EnumCombatPolicy.values()[button.getValue()]; initGui(); } + else if (button.id == 40) { + int val = button.getValue(); + if(val == 0){ + ai.tacticalChance = 0; + } else { + ai.tacticalChance = 100; + } + initGui(); + } } @Override diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index 5e6263725..dba82fa3f 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -572,7 +572,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti } break; case Tactical: - if (attackingEntity != getAttackTarget() && combatHandler.shouldSwitchTactically(getAttackTarget(), attackingEntity)) { + if (attackingEntity != getAttackTarget() && combatHandler.shouldSwitchTactically(getAttackTarget(), attackingEntity, ai.tacticalChance > 50)) { setAttackTarget(attackingEntity); } break; diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 9ad2ac0b1..d28f236b7 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -364,6 +364,7 @@ stats.candrown=Drowns stats.firesound:=SoundFX stats.creaturetype=CreatureType stats.normal=Normal +stats.reverse=Reverse stats.undead=Undead stats.arthropod=Arthropod stats.nofalldamage=NoFallDamage