forked from MagicBane/Server
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
374 lines
9.8 KiB
374 lines
9.8 KiB
3 years ago
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||
|
// Magicbane Emulator Project © 2013 - 2022
|
||
|
// www.magicbane.com
|
||
|
|
||
|
|
||
|
package engine.powers.effectmodifiers;
|
||
|
|
||
|
import engine.Enum.ModType;
|
||
|
import engine.Enum.SourceType;
|
||
|
import engine.gameManager.DbManager;
|
||
|
import engine.gameManager.PowersManager;
|
||
|
import engine.jobs.AbstractEffectJob;
|
||
|
import engine.objects.*;
|
||
|
import engine.powers.EffectsBase;
|
||
|
import org.pmw.tinylog.Logger;
|
||
|
|
||
|
import java.sql.ResultSet;
|
||
|
import java.sql.SQLException;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.HashSet;
|
||
|
|
||
|
|
||
|
public abstract class AbstractEffectModifier {
|
||
|
|
||
|
protected EffectsBase parent;
|
||
|
protected int UUID;
|
||
|
protected String IDString;
|
||
|
protected String effectType;
|
||
|
protected float minMod;
|
||
|
protected float maxMod;
|
||
|
protected float percentMod;
|
||
|
protected float ramp;
|
||
|
protected boolean useRampAdd;
|
||
|
protected String type;
|
||
|
public SourceType sourceType;
|
||
|
|
||
|
protected String string1;
|
||
|
protected String string2;
|
||
|
public ModType modType;
|
||
|
|
||
|
public AbstractEffectModifier(ResultSet rs) throws SQLException {
|
||
|
|
||
|
this.UUID = rs.getInt("ID");
|
||
|
this.IDString = rs.getString("IDString");
|
||
|
this.effectType = rs.getString("modType");
|
||
|
this.modType = ModType.GetModType(this.effectType);
|
||
|
this.type = rs.getString("type").replace("\"", "");
|
||
|
this.sourceType = SourceType.GetSourceType(this.type.replace(" ", "").replace("-", ""));
|
||
|
this.minMod = rs.getFloat("minMod");
|
||
|
this.maxMod = rs.getFloat("maxMod");
|
||
|
this.percentMod = rs.getFloat("percentMod");
|
||
|
this.ramp = rs.getFloat("ramp");
|
||
|
this.useRampAdd = (rs.getInt("useRampAdd") == 1) ? true : false;
|
||
|
|
||
|
this.string1 = rs.getString("string1");
|
||
|
this.string2 = rs.getString("string2");
|
||
|
}
|
||
|
|
||
|
public static ArrayList<AbstractEffectModifier> getAllEffectModifiers() {
|
||
|
PreparedStatementShared ps = null;
|
||
|
ArrayList<AbstractEffectModifier> out = new ArrayList<>();
|
||
|
try {
|
||
|
ps = new PreparedStatementShared("SELECT * FROM static_power_effectmod");
|
||
|
ResultSet rs = ps.executeQuery();
|
||
|
String IDString;
|
||
|
AbstractEffectModifier aem = null;
|
||
|
while (rs.next()) {
|
||
|
IDString = rs.getString("IDString");
|
||
|
int token = DbManager.hasher.SBStringHash(IDString);
|
||
|
|
||
|
EffectsBase eb = PowersManager.getEffectByIDString(IDString);
|
||
|
|
||
|
ModType modifier = ModType.GetModType(rs.getString("modType"));
|
||
|
|
||
|
//combine item prefix and suffix effect modifiers
|
||
|
switch (modifier){
|
||
|
case AdjustAboveDmgCap:
|
||
|
aem = new AdjustAboveDmgCapEffectModifier(rs);
|
||
|
break;
|
||
|
case Ambidexterity:
|
||
|
aem = new AmbidexterityEffectModifier(rs);
|
||
|
break;
|
||
|
case AnimOverride:
|
||
|
break;
|
||
|
case ArmorPiercing:
|
||
|
aem = new ArmorPiercingEffectModifier(rs);
|
||
|
break;
|
||
|
case AttackDelay:
|
||
|
aem = new AttackDelayEffectModifier(rs);
|
||
|
break;
|
||
|
case Attr:
|
||
|
aem = new AttributeEffectModifier(rs);
|
||
|
break;
|
||
|
case BlackMantle:
|
||
|
aem = new BlackMantleEffectModifier(rs);
|
||
|
break;
|
||
|
case BladeTrails:
|
||
|
aem = new BladeTrailsEffectModifier(rs);
|
||
|
break;
|
||
|
case Block:
|
||
|
aem = new BlockEffectModifier(rs);
|
||
|
break;
|
||
|
case BlockedPowerType:
|
||
|
aem = new BlockedPowerTypeEffectModifier(rs);
|
||
|
break;
|
||
|
case CannotAttack:
|
||
|
aem = new CannotAttackEffectModifier(rs);
|
||
|
break;
|
||
|
case CannotCast:
|
||
|
aem = new CannotCastEffectModifier(rs);
|
||
|
break;
|
||
|
case CannotMove:
|
||
|
aem = new CannotMoveEffectModifier(rs);
|
||
|
break;
|
||
|
case CannotTrack:
|
||
|
aem = new CannotTrackEffectModifier(rs);
|
||
|
break;
|
||
|
case Charmed:
|
||
|
aem = new CharmedEffectModifier(rs);
|
||
|
break;
|
||
|
case ConstrainedAmbidexterity:
|
||
|
aem = new ConstrainedAmbidexterityEffectModifier(rs);
|
||
|
break;
|
||
|
case DamageCap:
|
||
|
aem = new DamageCapEffectModifier(rs);
|
||
|
break;
|
||
|
case DamageShield:
|
||
|
aem = new DamageShieldEffectModifier(rs);
|
||
|
break;
|
||
|
case DCV:
|
||
|
aem = new DCVEffectModifier(rs);
|
||
|
break;
|
||
|
case Dodge:
|
||
|
aem = new DodgeEffectModifier(rs);
|
||
|
break;
|
||
|
case DR:
|
||
|
aem = new DREffectModifier(rs);
|
||
|
break;
|
||
|
case Durability:
|
||
|
aem = new DurabilityEffectModifier(rs);
|
||
|
break;
|
||
|
case ExclusiveDamageCap:
|
||
|
aem = new ExclusiveDamageCapEffectModifier(rs);
|
||
|
break;
|
||
|
case Fade:
|
||
|
aem = new FadeEffectModifier(rs);
|
||
|
break;
|
||
|
case Fly:
|
||
|
aem = new FlyEffectModifier(rs);
|
||
|
break;
|
||
|
case Health:
|
||
|
aem = new HealthEffectModifier(rs);
|
||
|
break;
|
||
|
case HealthFull:
|
||
|
aem = new HealthFullEffectModifier(rs);
|
||
|
break;
|
||
|
case HealthRecoverRate:
|
||
|
aem = new HealthRecoverRateEffectModifier(rs);
|
||
|
break;
|
||
|
case IgnoreDamageCap:
|
||
|
aem = new IgnoreDamageCapEffectModifier(rs);
|
||
|
break;
|
||
|
case IgnorePassiveDefense:
|
||
|
aem = new IgnorePassiveDefenseEffectModifier(rs);
|
||
|
break;
|
||
|
case ImmuneTo:
|
||
|
aem = new ImmuneToEffectModifier(rs);
|
||
|
break;
|
||
|
case ImmuneToAttack:
|
||
|
aem = new ImmuneToAttackEffectModifier(rs);
|
||
|
break;
|
||
|
case ImmuneToPowers:
|
||
|
aem = new ImmuneToPowersEffectModifier(rs);
|
||
|
break;
|
||
|
case Invisible:
|
||
|
aem = new InvisibleEffectModifier(rs);
|
||
|
break;
|
||
|
case ItemName:
|
||
|
aem = new ItemNameEffectModifier(rs);
|
||
|
if ((((ItemNameEffectModifier)aem).name.isEmpty()))
|
||
|
break;
|
||
|
if (eb != null)
|
||
|
eb.setName((((ItemNameEffectModifier)aem).name));
|
||
|
break;
|
||
|
case Mana:
|
||
|
aem = new ManaEffectModifier(rs);
|
||
|
break;
|
||
|
case ManaFull:
|
||
|
aem = new ManaFullEffectModifier(rs);
|
||
|
break;
|
||
|
case ManaRecoverRate:
|
||
|
aem = new ManaRecoverRateEffectModifier(rs);
|
||
|
break;
|
||
|
case MaxDamage:
|
||
|
aem = new MaxDamageEffectModifier(rs);
|
||
|
break;
|
||
|
case MeleeDamageModifier:
|
||
|
aem = new MeleeDamageEffectModifier(rs);
|
||
|
break;
|
||
|
case MinDamage:
|
||
|
aem = new MinDamageEffectModifier(rs);
|
||
|
break;
|
||
|
case NoMod:
|
||
|
aem = new NoModEffectModifier(rs);
|
||
|
break;
|
||
|
case OCV:
|
||
|
aem = new OCVEffectModifier(rs);
|
||
|
break;
|
||
|
case Parry:
|
||
|
aem = new ParryEffectModifier(rs);
|
||
|
break;
|
||
|
case PassiveDefense:
|
||
|
aem = new PassiveDefenseEffectModifier(rs);
|
||
|
case PowerCost:
|
||
|
aem = new PowerCostEffectModifier(rs);
|
||
|
break;
|
||
|
case PowerCostHealth:
|
||
|
aem = new PowerCostHealthEffectModifier(rs);
|
||
|
break;
|
||
|
case PowerDamageModifier:
|
||
|
aem = new PowerDamageEffectModifier(rs);
|
||
|
break;
|
||
|
case ProtectionFrom:
|
||
|
aem = new ProtectionFromEffectModifier(rs);
|
||
|
break;
|
||
|
case Resistance:
|
||
|
aem = new ResistanceEffectModifier(rs);
|
||
|
break;
|
||
|
case ScaleHeight:
|
||
|
aem = new ScaleHeightEffectModifier(rs);
|
||
|
break;
|
||
|
case ScaleWidth:
|
||
|
aem = new ScaleWidthEffectModifier(rs);
|
||
|
break;
|
||
|
case ScanRange:
|
||
|
aem = new ScanRangeEffectModifier(rs);
|
||
|
break;
|
||
|
case SeeInvisible:
|
||
|
aem = new SeeInvisibleEffectModifier(rs);
|
||
|
break;
|
||
|
case Silenced:
|
||
|
aem = new SilencedEffectModifier(rs);
|
||
|
break;
|
||
|
case Skill:
|
||
|
aem = new SkillEffectModifier(rs);
|
||
|
break;
|
||
|
case Slay:
|
||
|
aem = new SlayEffectModifier(rs);
|
||
|
break;
|
||
|
case Speed:
|
||
|
aem = new SpeedEffectModifier(rs);
|
||
|
break;
|
||
|
case SpireBlock:
|
||
|
aem = new SpireBlockEffectModifier(rs);
|
||
|
break;
|
||
|
case Stamina:
|
||
|
aem = new StaminaEffectModifier(rs);
|
||
|
break;
|
||
|
case StaminaFull:
|
||
|
aem = new StaminaFullEffectModifier(rs);
|
||
|
break;
|
||
|
case StaminaRecoverRate:
|
||
|
aem = new StaminaRecoverRateEffectModifier(rs);
|
||
|
break;
|
||
|
case Stunned:
|
||
|
aem = new StunnedEffectModifier(rs);
|
||
|
break;
|
||
|
case Value:
|
||
|
aem = new ValueEffectModifier(rs);
|
||
|
if (eb != null){
|
||
|
ValueEffectModifier valueEffect = (ValueEffectModifier)aem;
|
||
|
eb.setValue(valueEffect.minMod);
|
||
|
}
|
||
|
break;
|
||
|
case WeaponProc:
|
||
|
aem = new WeaponProcEffectModifier(rs);
|
||
|
break;
|
||
|
case WeaponRange:
|
||
|
aem = new WeaponRangeEffectModifier(rs);
|
||
|
break;
|
||
|
case WeaponSpeed:
|
||
|
aem = new WeaponSpeedEffectModifier(rs);
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
if (aem != null){
|
||
|
|
||
|
|
||
|
if (EffectsBase.modifiersMap.containsKey(eb.getIDString()) == false)
|
||
|
EffectsBase.modifiersMap.put(eb.getIDString(), new HashSet<>());
|
||
|
EffectsBase.modifiersMap.get(eb.getIDString()).add(aem);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
rs.close();
|
||
|
} catch (Exception e) {
|
||
|
Logger.error( e);
|
||
|
} finally {
|
||
|
ps.release();
|
||
|
}
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
public int getUUID() {
|
||
|
return this.UUID;
|
||
|
}
|
||
|
|
||
|
// public String getIDString() {
|
||
|
// return this.IDString;
|
||
|
// }
|
||
|
|
||
|
public String getmodType() {
|
||
|
return this.effectType;
|
||
|
}
|
||
|
|
||
|
public float getMinMod() {
|
||
|
return this.minMod;
|
||
|
}
|
||
|
|
||
|
public float getMaxMod() {
|
||
|
return this.maxMod;
|
||
|
}
|
||
|
|
||
|
public float getPercentMod() {
|
||
|
return this.percentMod;
|
||
|
}
|
||
|
|
||
|
public float getRamp() {
|
||
|
return this.ramp;
|
||
|
}
|
||
|
|
||
|
public String getType() {
|
||
|
return this.type;
|
||
|
}
|
||
|
|
||
|
public String getString1() {
|
||
|
return this.string1;
|
||
|
}
|
||
|
|
||
|
public String getString2() {
|
||
|
return this.string2;
|
||
|
}
|
||
|
|
||
|
public EffectsBase getParent() {
|
||
|
return this.parent;
|
||
|
}
|
||
|
|
||
|
public void setParent(EffectsBase value) {
|
||
|
this.parent = value;
|
||
|
}
|
||
|
|
||
|
public void applyEffectModifier(AbstractCharacter source, AbstractWorldObject awo, int trains, AbstractEffectJob effect) {
|
||
|
|
||
|
_applyEffectModifier(source, awo, trains, effect);
|
||
|
}
|
||
|
|
||
|
protected abstract void _applyEffectModifier(AbstractCharacter source, AbstractWorldObject awo, int trains, AbstractEffectJob effect);
|
||
|
|
||
|
public abstract void applyBonus(AbstractCharacter ac, int trains);
|
||
|
public abstract void applyBonus(Item item, int trains);
|
||
|
public abstract void applyBonus(Building building, int trains);
|
||
|
}
|