Build effect modifiers from Effects.cfg
Each EffectsBase builds its modifiers from its EffectTemplate MODS lines, with ramps from the CompoundCurve helper. The Value mods now fill Item.enchantValues, replacing LOAD_ENCHANT_VALUES. The ItemName skip list of DB row IDs is gone; it only hid Centurion's and Imperturbable from ./makeitem. Value changes (cfg wins): weapon power X effects lose the DB-only OCV mod; PRE-210A..237A resists and SUF-153A..171A resists (doubled); Speed on SPRINT, SNT-010A, BHN-001A, HNT/RNG-037A, BRD-016A, PRS-031A, and RNG-049A loses Speed; ARM-058A Necromancy +1; TMP-040A, WLR-018A; PARRY/CRU-032A gain their Parry line. RESTORE's damage type is NONE (cfg typo, as the client reads it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
27c59749fa
commit
e2ec8eb8a6
70 files changed
+597
-8
No files matched your search
@@ -27,11 +27,12 @@ import engine.net.client.msg.ApplyEffectMsg;
|
||||
import engine.objects.AbstractCharacter;
|
||||
import engine.objects.AbstractWorldObject;
|
||||
import engine.objects.Effect;
|
||||
import engine.objects.Item;
|
||||
import engine.objects.PlayerCharacter;
|
||||
import engine.parsers.objects.wpak.CurveRamp;
|
||||
import engine.parsers.objects.wpak.EffectTemplate;
|
||||
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||
import engine.powers.effectmodifiers.AbstractEffectModifier;
|
||||
import engine.powers.effectmodifiers.*;
|
||||
import engine.server.MBServerStatics;
|
||||
import engine.util.Hasher;
|
||||
import org.pmw.tinylog.Logger;
|
||||
@@ -140,6 +141,7 @@ public class EffectsBase {
|
||||
this.isPrefix = this.IDString.startsWith("PRE-");
|
||||
this.isSuffix = this.IDString.startsWith("SUF-");
|
||||
|
||||
loadModifiers(effectTemplate.mods);
|
||||
loadFailConditions(effectTemplate.conditions);
|
||||
loadSourceTypes(effectTemplate.sources);
|
||||
}
|
||||
@@ -240,6 +242,227 @@ public class EffectsBase {
|
||||
}
|
||||
}
|
||||
|
||||
// AnimOverride is client-only and has no server modifier
|
||||
private void loadModifiers(ArrayList<EffectTemplate.ModEntry> mods) {
|
||||
|
||||
AbstractEffectModifier modifier;
|
||||
|
||||
for (EffectTemplate.ModEntry modEntry : mods) {
|
||||
|
||||
switch (modEntry.mod_type) {
|
||||
case AdjustAboveDmgCap:
|
||||
modifier = new AdjustAboveDmgCapEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Ambidexterity:
|
||||
modifier = new AmbidexterityEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ArmorPiercing:
|
||||
modifier = new ArmorPiercingEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case AttackDelay:
|
||||
modifier = new AttackDelayEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Attr:
|
||||
modifier = new AttributeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case BlackMantle:
|
||||
modifier = new BlackMantleEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case BladeTrails:
|
||||
modifier = new BladeTrailsEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Block:
|
||||
modifier = new BlockEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case BlockedPowerType:
|
||||
modifier = new BlockedPowerTypeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case CannotAttack:
|
||||
modifier = new CannotAttackEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case CannotCast:
|
||||
modifier = new CannotCastEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case CannotMove:
|
||||
modifier = new CannotMoveEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case CannotTrack:
|
||||
modifier = new CannotTrackEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Charmed:
|
||||
modifier = new CharmedEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ConstrainedAmbidexterity:
|
||||
modifier = new ConstrainedAmbidexterityEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case DamageCap:
|
||||
modifier = new DamageCapEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case DamageShield:
|
||||
modifier = new DamageShieldEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case DCV:
|
||||
modifier = new DCVEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Dodge:
|
||||
modifier = new DodgeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case DR:
|
||||
modifier = new DREffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Durability:
|
||||
modifier = new DurabilityEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ExclusiveDamageCap:
|
||||
modifier = new ExclusiveDamageCapEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Fade:
|
||||
modifier = new FadeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Fly:
|
||||
modifier = new FlyEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Health:
|
||||
modifier = new HealthEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case HealthFull:
|
||||
modifier = new HealthFullEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case HealthRecoverRate:
|
||||
modifier = new HealthRecoverRateEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case IgnoreDamageCap:
|
||||
modifier = new IgnoreDamageCapEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case IgnorePassiveDefense:
|
||||
modifier = new IgnorePassiveDefenseEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ImmuneTo:
|
||||
modifier = new ImmuneToEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ImmuneToAttack:
|
||||
modifier = new ImmuneToAttackEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ImmuneToPowers:
|
||||
modifier = new ImmuneToPowersEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Invisible:
|
||||
modifier = new InvisibleEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ItemName:
|
||||
modifier = new ItemNameEffectModifier(this.IDString, modEntry);
|
||||
if (!((ItemNameEffectModifier) modifier).name.isEmpty())
|
||||
this.name = ((ItemNameEffectModifier) modifier).name;
|
||||
break;
|
||||
case Mana:
|
||||
modifier = new ManaEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ManaFull:
|
||||
modifier = new ManaFullEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ManaRecoverRate:
|
||||
modifier = new ManaRecoverRateEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case MaxDamage:
|
||||
modifier = new MaxDamageEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case MeleeDamageModifier:
|
||||
modifier = new MeleeDamageEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case MinDamage:
|
||||
modifier = new MinDamageEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case NoMod:
|
||||
modifier = new NoModEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case OCV:
|
||||
modifier = new OCVEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Parry:
|
||||
modifier = new ParryEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case PassiveDefense:
|
||||
modifier = new PassiveDefenseEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case PowerCost:
|
||||
modifier = new PowerCostEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case PowerCostHealth:
|
||||
modifier = new PowerCostHealthEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case PowerDamageModifier:
|
||||
modifier = new PowerDamageEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ProtectionFrom:
|
||||
modifier = new ProtectionFromEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Resistance:
|
||||
modifier = new ResistanceEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ScaleHeight:
|
||||
modifier = new ScaleHeightEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ScaleWidth:
|
||||
modifier = new ScaleWidthEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case ScanRange:
|
||||
modifier = new ScanRangeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case SeeInvisible:
|
||||
modifier = new SeeInvisibleEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Silenced:
|
||||
modifier = new SilencedEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Skill:
|
||||
modifier = new SkillEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Slay:
|
||||
modifier = new SlayEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Speed:
|
||||
modifier = new SpeedEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case SpireBlock:
|
||||
modifier = new SpireBlockEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Stamina:
|
||||
modifier = new StaminaEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case StaminaFull:
|
||||
modifier = new StaminaFullEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case StaminaRecoverRate:
|
||||
modifier = new StaminaRecoverRateEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Stunned:
|
||||
modifier = new StunnedEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case Value:
|
||||
modifier = new ValueEffectModifier(this.IDString, modEntry);
|
||||
this.value = modifier.minMod;
|
||||
Item.addEnchantValue(this.IDString, (int) modifier.minMod);
|
||||
break;
|
||||
case WeaponProc:
|
||||
modifier = new WeaponProcEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case WeaponRange:
|
||||
modifier = new WeaponRangeEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
case WeaponSpeed:
|
||||
modifier = new WeaponSpeedEffectModifier(this.IDString, modEntry);
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!EffectsBase.modifiersMap.containsKey(this.IDString))
|
||||
EffectsBase.modifiersMap.put(this.IDString, new HashSet<>());
|
||||
|
||||
EffectsBase.modifiersMap.get(this.IDString).add(modifier);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadSourceTypes(ArrayList<String> sources) {
|
||||
|
||||
if (sources.isEmpty())
|
||||
|
||||
Reference in new issue
Block a user