forked from MagicBane/Server
Build power actions from PowerActions.cfg
PowersManager.loadPowerActions builds every AbstractPowerAction from PowerActionTemplate (template ctor on all subclasses), in id order with IDs 1..3046; OPENGATE keeps 5000. The ResultSet loader stays until removal. The parser now reads the SimpleDamage (min, max), Teleport (bool), Track (two bools) and TransferStat (bool at token 8) header fields. Parity (JSON-Refactor-Plan/scripts/p47.py, every column): ids 3046/3046 plus the DB-only AELFBORN row, which nothing references (the cfg has BOON-AELFBORN). Effect ids, deferred powers, RemoveEffect source/REMOVEALL, track filter/max, transfer types/ramps/ramp-add, mob level identical. The old flags match the new header fields: Track 1024/2048 = tokens 3/4, TransferStat 16384 = token 8, Teleport 32768 = SAB-001A's TRUE. Value changes (PowerActions.cfg wins): - DamageOverTime/TransferStatOT: the cfg value is the tick count; tick length = action duration / ticks. The DB stored cfg+1 as tick seconds, which only worked for 30s DoTs (5 x 6s, unchanged). HOLY-DOT-17 (60s) goes 10 -> 5 ticks, BLEED-DOT (4s) 0 -> 4, TransferStatOT 30s 6 -> 5 ticks. - TransferStat amounts are read with ToInt as the client does: 16 actions drop by 0.5 (BEL-001A 31.5 -> 31, CON-001A 13.5 -> 13, ...). - PRE-334..337 become ApplyEffects with one effect; ApplyEffectsPowerAction now allows a missing second effect on baked-in items. - Charm level cap ramp from the LEVELCAP= curve (same values as the DB). - Charm actions with effect FEAR/CONFUSION (12, DB type Confusion) stay ConfusionPowerAction no-ops; CHARM ones use CharmPowerAction (decided). - CreateMob: the cfg client mob id (49..74, 3500, 3501) maps to the mobbase through a map in CreateMobPowerAction, from the old DB values. - The 50 Charm/Block/SpireDisable rows with no DB effect id get the cfg id (unread by those classes); isAggressive differs on 330 rows (unread). - SimpleDamage keeps min/max instead of the always-0 simpleDamage (unread). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b5c3d8c3fd
commit
3fc5e7253a
38 files changed
+435
-16
No files matched your search
@@ -31,7 +31,7 @@ import engine.parsers.objects.wpak.PowActionCostTemplate;
|
|||||||
import engine.parsers.objects.wpak.PowerActionTemplate;
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.parsers.objects.wpak.PowerTemplate;
|
import engine.parsers.objects.wpak.PowerTemplate;
|
||||||
import engine.powers.*;
|
import engine.powers.*;
|
||||||
import engine.powers.poweractions.AbstractPowerAction;
|
import engine.powers.poweractions.*;
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
@@ -135,6 +135,109 @@ public enum PowersManager {
|
|||||||
+ actionKeyCount + " effect keys from PowerActions.cfg");
|
+ actionKeyCount + " effect keys from PowerActions.cfg");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PowerActions.cfg in id order; ids 1..n, OPENGATE keeps 5000
|
||||||
|
private static void loadPowerActions() {
|
||||||
|
|
||||||
|
int powerActionID = 0;
|
||||||
|
PowerActionTemplate powerActionTemplate;
|
||||||
|
AbstractPowerAction powerAction;
|
||||||
|
AbstractPowerAction openGateAction;
|
||||||
|
|
||||||
|
for (String actionID : new TreeSet<>(PowerActionTemplate._powerActions.keySet())) {
|
||||||
|
|
||||||
|
powerActionTemplate = PowerActionTemplate._powerActions.get(actionID);
|
||||||
|
powerAction = buildPowerAction(powerActionTemplate, ++powerActionID);
|
||||||
|
|
||||||
|
if (powerAction == null) {
|
||||||
|
Logger.error("Power action " + actionID + " has unsupported type " + powerActionTemplate.action_type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PowersManager.ActionTokenByIDString.put(actionID, DbManager.hasher.SBStringHash(actionID));
|
||||||
|
PowersManager.powerActionsByIDString.put(actionID, powerAction);
|
||||||
|
PowersManager.powerActionsByID.put(powerAction.getUUID(), powerAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
openGateAction = new OpenGatePowerAction(5000, "OPENGATE", "OpenGate", false);
|
||||||
|
PowersManager.powerActionsByIDString.put("OPENGATE", openGateAction);
|
||||||
|
PowersManager.powerActionsByID.put(openGateAction.getUUID(), openGateAction);
|
||||||
|
|
||||||
|
Logger.info("Loaded " + PowersManager.powerActionsByIDString.size() + " power actions from PowerActions.cfg (incl. OPENGATE)");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AbstractPowerAction buildPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
|
||||||
|
HashMap<String, EffectsBase> effects = PowersManager.effectsBaseByIDString;
|
||||||
|
|
||||||
|
switch (powerActionTemplate.action_type) {
|
||||||
|
case ApplyEffect:
|
||||||
|
return new ApplyEffectPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case ApplyEffects:
|
||||||
|
return new ApplyEffectsPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case Block:
|
||||||
|
return new BlockPowerAction(powerActionTemplate, id);
|
||||||
|
case Charm:
|
||||||
|
// FEAR and CONFUSION Charm actions stay no-ops, as when the DB typed them Confusion
|
||||||
|
if (powerActionTemplate.effect_ids.get(0).equals("CHARM"))
|
||||||
|
return new CharmPowerAction(powerActionTemplate, id);
|
||||||
|
return new ConfusionPowerAction(powerActionTemplate, id);
|
||||||
|
case ClaimMine:
|
||||||
|
return new ClaimMinePowerAction(powerActionTemplate, id);
|
||||||
|
case ClearAggro:
|
||||||
|
return new ClearAggroPowerAction(powerActionTemplate, id);
|
||||||
|
case ClearNearbyAggro:
|
||||||
|
return new ClearNearbyAggroPowerAction(powerActionTemplate, id);
|
||||||
|
case Confusion:
|
||||||
|
return new ConfusionPowerAction(powerActionTemplate, id);
|
||||||
|
case CreateMob:
|
||||||
|
return new CreateMobPowerAction(powerActionTemplate, id);
|
||||||
|
case DamageOverTime:
|
||||||
|
return new DamageOverTimePowerAction(powerActionTemplate, id, effects);
|
||||||
|
case DeferredPower:
|
||||||
|
return new DeferredPowerPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case DirectDamage:
|
||||||
|
return new DirectDamagePowerAction(powerActionTemplate, id, effects);
|
||||||
|
case Invis:
|
||||||
|
return new InvisPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case MobRecall:
|
||||||
|
return new MobRecallPowerAction(powerActionTemplate, id);
|
||||||
|
case Peek:
|
||||||
|
return new PeekPowerAction(powerActionTemplate, id);
|
||||||
|
case Recall:
|
||||||
|
return new RecallPowerAction(powerActionTemplate, id);
|
||||||
|
case RemoveEffect:
|
||||||
|
return new RemoveEffectPowerAction(powerActionTemplate, id);
|
||||||
|
case Resurrect:
|
||||||
|
return new ResurrectPowerAction(powerActionTemplate, id);
|
||||||
|
case RunegateTeleport:
|
||||||
|
return new RunegateTeleportPowerAction(powerActionTemplate, id);
|
||||||
|
case SetItemFlag:
|
||||||
|
return new SetItemFlagPowerAction(powerActionTemplate, id);
|
||||||
|
case SimpleDamage:
|
||||||
|
return new SimpleDamagePowerAction(powerActionTemplate, id);
|
||||||
|
case SpireDisable:
|
||||||
|
return new SpireDisablePowerAction(powerActionTemplate, id);
|
||||||
|
case Steal:
|
||||||
|
return new StealPowerAction(powerActionTemplate, id);
|
||||||
|
case Summon:
|
||||||
|
return new SummonPowerAction(powerActionTemplate, id);
|
||||||
|
case Teleport:
|
||||||
|
return new TeleportPowerAction(powerActionTemplate, id);
|
||||||
|
case Track:
|
||||||
|
return new TrackPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case TransferStat:
|
||||||
|
return new TransferStatPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case TransferStatOT:
|
||||||
|
return new TransferStatOTPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case Transform:
|
||||||
|
return new TransformPowerAction(powerActionTemplate, id, effects);
|
||||||
|
case TreeChoke:
|
||||||
|
return new TreeChokePowerAction(powerActionTemplate, id);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void addEffect(EffectsBase effectsBase) {
|
private static void addEffect(EffectsBase effectsBase) {
|
||||||
PowersManager.effectsBaseByToken.put(effectsBase.getToken(), effectsBase);
|
PowersManager.effectsBaseByToken.put(effectsBase.getToken(), effectsBase);
|
||||||
PowersManager.effectsBaseByIDString.put(effectsBase.getIDString(), effectsBase);
|
PowersManager.effectsBaseByIDString.put(effectsBase.getIDString(), effectsBase);
|
||||||
@@ -192,8 +295,7 @@ public enum PowersManager {
|
|||||||
|
|
||||||
loadEffects();
|
loadEffects();
|
||||||
|
|
||||||
// Add PowerActions
|
loadPowerActions();
|
||||||
AbstractPowerAction.getAllPowerActions(PowersManager.powerActionsByIDString, PowersManager.powerActionsByID, PowersManager.effectsBaseByIDString);
|
|
||||||
|
|
||||||
// get all PowersBase
|
// get all PowersBase
|
||||||
ArrayList<PowersBase> pbList = dbSkillReqHandler.getAllPowersBase();
|
ArrayList<PowersBase> pbList = dbSkillReqHandler.getAllPowersBase();
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public class DamageOverTimeJob extends AbstractEffectJob {
|
|||||||
private final DamageOverTimePowerAction dot;
|
private final DamageOverTimePowerAction dot;
|
||||||
private int iteration = 0;
|
private int iteration = 0;
|
||||||
private int liveCounter = 0;
|
private int liveCounter = 0;
|
||||||
|
private final int tickLength;
|
||||||
|
|
||||||
public DamageOverTimeJob(AbstractWorldObject source, AbstractWorldObject target, String stackType, int trains, ActionsBase action, PowersBase power, EffectsBase eb, DamageOverTimePowerAction dot) {
|
public DamageOverTimeJob(AbstractWorldObject source, AbstractWorldObject target, String stackType, int trains, ActionsBase action, PowersBase power, EffectsBase eb, DamageOverTimePowerAction dot) {
|
||||||
super(source, target, stackType, trains, action, power, eb);
|
super(source, target, stackType, trains, action, power, eb);
|
||||||
@@ -33,7 +34,9 @@ public class DamageOverTimeJob extends AbstractEffectJob {
|
|||||||
if (this.target != null && AbstractWorldObject.IsAbstractCharacter(target))
|
if (this.target != null && AbstractWorldObject.IsAbstractCharacter(target))
|
||||||
this.liveCounter = ((AbstractCharacter) target).getLiveCounter();
|
this.liveCounter = ((AbstractCharacter) target).getLiveCounter();
|
||||||
|
|
||||||
this.iteration = action.getDurationInSeconds(trains) / this.dot.getNumIterations();
|
// PowerActions.cfg gives the tick count; the ticks split the action's duration
|
||||||
|
this.iteration = this.dot.getNumIterations();
|
||||||
|
this.tickLength = action.getDuration(trains) / Math.max(1, this.dot.getNumIterations());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,7 +85,7 @@ public class DamageOverTimeJob extends AbstractEffectJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getTickLength() {
|
public int getTickLength() {
|
||||||
return this.dot.getNumIterations() * 1000;
|
return this.tickLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int inc() {
|
public int inc() {
|
||||||
|
|||||||
@@ -21,11 +21,15 @@ public class TransferStatOTJob extends AbstractEffectJob {
|
|||||||
|
|
||||||
private final TransferStatOTPowerAction dot;
|
private final TransferStatOTPowerAction dot;
|
||||||
private int iteration = 0;
|
private int iteration = 0;
|
||||||
|
private final int tickLength;
|
||||||
|
|
||||||
public TransferStatOTJob(AbstractWorldObject source, AbstractWorldObject target, String stackType, int trains, ActionsBase action, PowersBase power, EffectsBase eb, TransferStatOTPowerAction dot) {
|
public TransferStatOTJob(AbstractWorldObject source, AbstractWorldObject target, String stackType, int trains, ActionsBase action, PowersBase power, EffectsBase eb, TransferStatOTPowerAction dot) {
|
||||||
super(source, target, stackType, trains, action, power, eb);
|
super(source, target, stackType, trains, action, power, eb);
|
||||||
this.dot = dot;
|
this.dot = dot;
|
||||||
this.iteration = action.getDurationInSeconds(trains) / this.dot.getNumIterations();
|
|
||||||
|
// PowerActions.cfg gives the tick count; the ticks split the action's duration
|
||||||
|
this.iteration = this.dot.getNumIterations();
|
||||||
|
this.tickLength = action.getDuration(trains) / Math.max(1, this.dot.getNumIterations());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +68,7 @@ public class TransferStatOTJob extends AbstractEffectJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getTickLength() {
|
public int getTickLength() {
|
||||||
return this.dot.getNumIterations() * 1000;
|
return this.tickLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int inc() {
|
public int inc() {
|
||||||
|
|||||||
@@ -46,6 +46,15 @@ public class PowerActionTemplate {
|
|||||||
public String track_filter;
|
public String track_filter;
|
||||||
public int max_track;
|
public int max_track;
|
||||||
|
|
||||||
|
// Names from the old DB flags (1024, 2048, 16384, 32768); the client's use is unchecked
|
||||||
|
public boolean track_player;
|
||||||
|
public boolean track_corpse;
|
||||||
|
public boolean transfer_target_to_caster;
|
||||||
|
public boolean ignore_no_tele_spire;
|
||||||
|
|
||||||
|
public float simple_damage_min;
|
||||||
|
public float simple_damage_max;
|
||||||
|
|
||||||
public mbEnums.CostType transfer_from_type;
|
public mbEnums.CostType transfer_from_type;
|
||||||
public mbEnums.CostType transfer_to_type;
|
public mbEnums.CostType transfer_to_type;
|
||||||
|
|
||||||
|
|||||||
@@ -139,12 +139,21 @@ public class PowerActionParser {
|
|||||||
break;
|
break;
|
||||||
case Track:
|
case Track:
|
||||||
powerAction.effect_ids.add(header.token(2));
|
powerAction.effect_ids.add(header.token(2));
|
||||||
|
powerAction.track_player = header.boolToken(3);
|
||||||
|
powerAction.track_corpse = header.boolToken(4);
|
||||||
powerAction.track_filter = header.token(5);
|
powerAction.track_filter = header.token(5);
|
||||||
powerAction.max_track = header.intToken(7);
|
powerAction.max_track = header.intToken(7);
|
||||||
break;
|
break;
|
||||||
case Transform:
|
case Transform:
|
||||||
powerAction.effect_ids.add(header.token(2));
|
powerAction.effect_ids.add(header.token(2));
|
||||||
break;
|
break;
|
||||||
|
case SimpleDamage:
|
||||||
|
powerAction.simple_damage_min = header.floatToken(2);
|
||||||
|
powerAction.simple_damage_max = header.floatToken(3);
|
||||||
|
break;
|
||||||
|
case Teleport:
|
||||||
|
powerAction.ignore_no_tele_spire = header.optionalBoolToken(2);
|
||||||
|
break;
|
||||||
case TransferStat:
|
case TransferStat:
|
||||||
parseTransferStat(powerAction, header);
|
parseTransferStat(powerAction, header);
|
||||||
break;
|
break;
|
||||||
@@ -166,6 +175,7 @@ public class PowerActionParser {
|
|||||||
powerAction.transfer_amount_curve = WpakParserUtil.curveToken(header, 5);
|
powerAction.transfer_amount_curve = WpakParserUtil.curveToken(header, 5);
|
||||||
powerAction.transfer_efficiency = header.floatToken(6);
|
powerAction.transfer_efficiency = header.floatToken(6);
|
||||||
powerAction.transfer_efficiency_curve = WpakParserUtil.curveToken(header, 7);
|
powerAction.transfer_efficiency_curve = WpakParserUtil.curveToken(header, 7);
|
||||||
|
powerAction.transfer_target_to_caster = header.boolToken(8);
|
||||||
powerAction.isaggressive = header.optionalIntToken(9) != 0;
|
powerAction.isaggressive = header.optionalIntToken(9) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import engine.math.Vector3fImmutable;
|
|||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Item;
|
import engine.objects.Item;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -54,6 +55,18 @@ public abstract class AbstractPowerAction {
|
|||||||
this.isAggressive = ((flags & 128) != 0) ? true : false;
|
this.isAggressive = ((flags & 128) != 0) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AbstractPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
this.UUID = id;
|
||||||
|
this.IDString = powerActionTemplate.action_id;
|
||||||
|
this.type = powerActionTemplate.action_type.name();
|
||||||
|
this.isAggressive = powerActionTemplate.isaggressive;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty when the action has no effect at that position, as the DB column default was
|
||||||
|
protected static String effectIDAt(PowerActionTemplate powerActionTemplate, int index) {
|
||||||
|
return (index < powerActionTemplate.effect_ids.size()) ? powerActionTemplate.effect_ids.get(index) : "";
|
||||||
|
}
|
||||||
|
|
||||||
public AbstractPowerAction(int uUID, String iDString, String type, boolean isAggressive) {
|
public AbstractPowerAction(int uUID, String iDString, String type, boolean isAggressive) {
|
||||||
super();
|
super();
|
||||||
UUID = uUID;
|
UUID = uUID;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import engine.mbEnums.ModType;
|
|||||||
import engine.mbEnums.SourceType;
|
import engine.mbEnums.SourceType;
|
||||||
import engine.net.client.msg.chat.ChatSystemMsg;
|
import engine.net.client.msg.chat.ChatSystemMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -46,6 +47,14 @@ public class ApplyEffectPowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApplyEffectPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
this.effectParentID = powerActionTemplate.action_id;
|
||||||
|
this.effectParent = effects.get(this.effectParentID);
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean blockInvul(PowersBase pb, AbstractCharacter source, AbstractWorldObject awo) {
|
private static boolean blockInvul(PowersBase pb, AbstractCharacter source, AbstractWorldObject awo) {
|
||||||
if (awo == null || pb == null || source == null)
|
if (awo == null || pb == null || source == null)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Effect;
|
import engine.objects.Effect;
|
||||||
import engine.objects.Item;
|
import engine.objects.Item;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -43,6 +44,16 @@ public class ApplyEffectsPowerAction extends AbstractPowerAction {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApplyEffectsPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
this.IDString = powerActionTemplate.action_id;
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.effectID2 = effectIDAt(powerActionTemplate, 1);
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
this.effect2 = effects.get(this.effectID2);
|
||||||
|
this.effectParent = effects.get(this.IDString);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
@@ -83,7 +94,8 @@ public class ApplyEffectsPowerAction extends AbstractPowerAction {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.effect2 == null) {
|
// PRE-334 to PRE-337 list a single effect
|
||||||
|
if (this.effect2 == null && !this.effectID2.isEmpty()) {
|
||||||
Logger.error("Unknown Token: EffectBase ID " + this.effectID2 + '.');
|
Logger.error("Unknown Token: EffectBase ID " + this.effectID2 + '.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -94,13 +106,14 @@ public class ApplyEffectsPowerAction extends AbstractPowerAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Effect eff = item.addEffectNoTimer(Integer.toString(this.effect.getUUID()), this.effect, trains, false);
|
Effect eff = item.addEffectNoTimer(Integer.toString(this.effect.getUUID()), this.effect, trains, false);
|
||||||
Effect eff2 = item.addEffectNoTimer(Integer.toString(this.effect2.getUUID()), this.effect2, trains, false);
|
Effect eff2 = (this.effect2 == null) ? null : item.addEffectNoTimer(Integer.toString(this.effect2.getUUID()), this.effect2, trains, false);
|
||||||
Effect eff3 = item.addEffectNoTimer(Integer.toString(this.effectParent.getUUID()), this.effectParent, trains, false);
|
Effect eff3 = item.addEffectNoTimer(Integer.toString(this.effectParent.getUUID()), this.effectParent, trains, false);
|
||||||
|
|
||||||
if (eff != null && eff2 != null && eff3 != null) {
|
if (eff != null && (eff2 != null || this.effect2 == null) && eff3 != null) {
|
||||||
eff3.setBakedInStat(true);
|
eff3.setBakedInStat(true);
|
||||||
item.getEffectNames().add(this.effect.getIDString());
|
item.getEffectNames().add(this.effect.getIDString());
|
||||||
item.getEffectNames().add(this.effect2.getIDString());
|
if (this.effect2 != null)
|
||||||
|
item.getEffectNames().add(this.effect2.getIDString());
|
||||||
item.getEffectNames().add(this.effectParent.getIDString());
|
item.getEffectNames().add(this.effectParent.getIDString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.powers.poweractions;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -25,6 +26,10 @@ public class BlockPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BlockPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
|
import engine.parsers.objects.wpak.CurveRamp;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -34,6 +36,13 @@ public class CharmPowerAction extends AbstractPowerAction {
|
|||||||
this.levelCapRamp = rs.getFloat("levelCapRamp");
|
this.levelCapRamp = rs.getFloat("levelCapRamp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CharmPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
CurveRamp curveRamp = (powerActionTemplate.levelcap_curve == null) ? null : CurveRamp.fromCurve(powerActionTemplate.levelcap_curve);
|
||||||
|
this.levelCap = powerActionTemplate.levelcap;
|
||||||
|
this.levelCapRamp = (curveRamp == null) ? 0 : curveRamp.ramp;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.gameManager.ChatManager;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.mbEnums;
|
import engine.mbEnums;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -26,6 +27,10 @@ public class ClaimMinePowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClaimMinePowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject worldObject, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject worldObject, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import engine.mbEnums.GameObjectType;
|
|||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -27,6 +28,10 @@ public class ClearAggroPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClearAggroPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (awo != null && awo.getObjectType() == GameObjectType.Mob) {
|
if (awo != null && awo.getObjectType() == GameObjectType.Mob) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.math.Vector3fImmutable;
|
|||||||
import engine.mbEnums.GameObjectType;
|
import engine.mbEnums.GameObjectType;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -26,6 +27,10 @@ public class ClearNearbyAggroPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClearNearbyAggroPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (source.getObjectType() == GameObjectType.Mob) {
|
if (source.getObjectType() == GameObjectType.Mob) {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.powers.poweractions;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -25,6 +26,10 @@ public class ConfusionPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ConfusionPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -20,19 +20,38 @@ import engine.net.Dispatch;
|
|||||||
import engine.net.client.ClientConnection;
|
import engine.net.client.ClientConnection;
|
||||||
import engine.net.client.msg.PetMsg;
|
import engine.net.client.msg.PetMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|
||||||
public class CreateMobPowerAction extends AbstractPowerAction {
|
public class CreateMobPowerAction extends AbstractPowerAction {
|
||||||
|
|
||||||
|
// PowerActions.cfg names the pet by a client object id that no MBDATA file maps; this is the old DB mapping
|
||||||
|
private static final HashMap<Integer, Integer> MOBBASE_BY_CLIENT_MOB_ID = new HashMap<>();
|
||||||
|
|
||||||
private int mobID;
|
private int mobID;
|
||||||
private int mobLevel;
|
private int mobLevel;
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (int clientMobID = 49; clientMobID <= 65; clientMobID++)
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(clientMobID, 12000 + clientMobID - 49);
|
||||||
|
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(68, 12018);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(69, 12020);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(70, 12019);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(71, 12021);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(72, 12022);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(74, 12023);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(3500, 11999);
|
||||||
|
MOBBASE_BY_CLIENT_MOB_ID.put(3501, 11998);
|
||||||
|
}
|
||||||
|
|
||||||
public CreateMobPowerAction(ResultSet rs) throws SQLException {
|
public CreateMobPowerAction(ResultSet rs) throws SQLException {
|
||||||
super(rs);
|
super(rs);
|
||||||
|
|
||||||
@@ -40,6 +59,18 @@ public class CreateMobPowerAction extends AbstractPowerAction {
|
|||||||
this.mobLevel = rs.getInt("mobLevel");
|
this.mobLevel = rs.getInt("mobLevel");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CreateMobPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
Integer mobBaseID = MOBBASE_BY_CLIENT_MOB_ID.get(powerActionTemplate.mob_id);
|
||||||
|
|
||||||
|
if (mobBaseID == null)
|
||||||
|
Logger.error("Power action " + powerActionTemplate.action_id + ": no mobbase for client mob " + powerActionTemplate.mob_id);
|
||||||
|
|
||||||
|
this.mobID = (mobBaseID == null) ? 0 : mobBaseID;
|
||||||
|
this.mobLevel = powerActionTemplate.mob_level;
|
||||||
|
}
|
||||||
|
|
||||||
public int getMobID() {
|
public int getMobID() {
|
||||||
return this.mobID;
|
return this.mobID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.jobs.DamageOverTimeJob;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -36,6 +37,14 @@ public class DamageOverTimePowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DamageOverTimePowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.numIterations = powerActionTemplate.num_iterations;
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -39,6 +40,14 @@ public class DeferredPowerPowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DeferredPowerPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.deferedPowerID = powerActionTemplate.deferred_power_id;
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import engine.jobs.PersistentAoeJob;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -35,6 +36,13 @@ public class DirectDamagePowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DirectDamagePowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
|
import engine.parsers.objects.wpak.CurveRamp;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -35,6 +37,13 @@ public class FearPowerAction extends AbstractPowerAction {
|
|||||||
this.levelCapRamp = rs.getFloat("levelCapRamp");
|
this.levelCapRamp = rs.getFloat("levelCapRamp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FearPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
CurveRamp curveRamp = (powerActionTemplate.levelcap_curve == null) ? null : CurveRamp.fromCurve(powerActionTemplate.levelcap_curve);
|
||||||
|
this.levelCap = powerActionTemplate.levelcap;
|
||||||
|
this.levelCapRamp = (curveRamp == null) ? 0 : curveRamp.ramp;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (source == null || awo == null || !(awo.getObjectType().equals(mbEnums.GameObjectType.Mob)) || !(source.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter)))
|
if (source == null || awo == null || !(awo.getObjectType().equals(mbEnums.GameObjectType.Mob)) || !(source.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter)))
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.jobs.FinishEffectTimeJob;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -34,6 +35,13 @@ public class InvisPowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InvisPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import engine.mbEnums.GameObjectType;
|
|||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -28,6 +29,10 @@ public class MobRecallPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MobRecallPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (!AbstractWorldObject.IsAbstractCharacter(awo) || source == null)
|
if (!AbstractWorldObject.IsAbstractCharacter(awo) || source == null)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Building;
|
import engine.objects.Building;
|
||||||
import engine.objects.Runegate;
|
import engine.objects.Runegate;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -32,6 +33,10 @@ public class OpenGatePowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OpenGatePowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
public OpenGatePowerAction(int uUID, String iDString, String type, boolean isAggressive) {
|
public OpenGatePowerAction(int uUID, String iDString, String type, boolean isAggressive) {
|
||||||
super(uUID, iDString, type, isAggressive);
|
super(uUID, iDString, type, isAggressive);
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import engine.mbEnums;
|
|||||||
import engine.net.Dispatch;
|
import engine.net.Dispatch;
|
||||||
import engine.net.client.msg.LootWindowResponseMsg;
|
import engine.net.client.msg.LootWindowResponseMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -30,6 +31,10 @@ public class PeekPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PeekPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
protected static boolean peekSuccess(AbstractCharacter pc, AbstractWorldObject awo) {
|
protected static boolean peekSuccess(AbstractCharacter pc, AbstractWorldObject awo) {
|
||||||
if (pc == null || awo == null || !AbstractWorldObject.IsAbstractCharacter(awo) || pc.getPowers() == null)
|
if (pc == null || awo == null || !AbstractWorldObject.IsAbstractCharacter(awo) || pc.getPowers() == null)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
@@ -36,6 +37,10 @@ public class RecallPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RecallPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (!AbstractWorldObject.IsAbstractCharacter(awo) || source == null)
|
if (!AbstractWorldObject.IsAbstractCharacter(awo) || source == null)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.math.Vector3fImmutable;
|
|||||||
import engine.mbEnums.EffectSourceType;
|
import engine.mbEnums.EffectSourceType;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -34,6 +35,13 @@ public class RemoveEffectPowerAction extends AbstractPowerAction {
|
|||||||
this.removeAll = ((flags & 2) != 0) ? true : false;
|
this.removeAll = ((flags & 2) != 0) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RemoveEffectPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
String effectTypeToRemove = powerActionTemplate.effect_source_to_remove.replace("-", "").trim();
|
||||||
|
sourceType = EffectSourceType.GetEffectSourceType(effectTypeToRemove);
|
||||||
|
this.removeAll = powerActionTemplate.removeall;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.powers.poweractions;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -25,6 +26,10 @@ public class ResurrectPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResurrectPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import engine.mbEnums;
|
|||||||
import engine.net.Dispatch;
|
import engine.net.Dispatch;
|
||||||
import engine.net.client.msg.PromptRecallMsg;
|
import engine.net.client.msg.PromptRecallMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -33,6 +34,10 @@ public class RunegateTeleportPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RunegateTeleportPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.CharacterItemManager;
|
import engine.objects.CharacterItemManager;
|
||||||
import engine.objects.Item;
|
import engine.objects.Item;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -29,6 +30,10 @@ public class SetItemFlagPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SetItemFlagPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.powers.poweractions;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -21,16 +22,26 @@ import java.sql.SQLException;
|
|||||||
|
|
||||||
public class SimpleDamagePowerAction extends AbstractPowerAction {
|
public class SimpleDamagePowerAction extends AbstractPowerAction {
|
||||||
|
|
||||||
private int simpleDamage;
|
private float minDamage;
|
||||||
|
private float maxDamage;
|
||||||
|
|
||||||
public SimpleDamagePowerAction(ResultSet rs) throws SQLException {
|
public SimpleDamagePowerAction(ResultSet rs) throws SQLException {
|
||||||
super(rs);
|
super(rs);
|
||||||
|
|
||||||
this.simpleDamage = rs.getInt("simpleDamage");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSimpleDamage() {
|
public SimpleDamagePowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
return this.simpleDamage;
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.minDamage = powerActionTemplate.simple_damage_min;
|
||||||
|
this.maxDamage = powerActionTemplate.simple_damage_max;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getMinDamage() {
|
||||||
|
return this.minDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getMaxDamage() {
|
||||||
|
return this.maxDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.Building;
|
import engine.objects.Building;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -32,6 +33,10 @@ public class SpireDisablePowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SpireDisablePowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
if (awo == null)
|
if (awo == null)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import engine.net.Dispatch;
|
|||||||
import engine.net.client.ClientConnection;
|
import engine.net.client.ClientConnection;
|
||||||
import engine.net.client.msg.LootMsg;
|
import engine.net.client.msg.LootMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
@@ -39,6 +40,10 @@ public class StealPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StealPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
protected static boolean stealSuccess(PlayerCharacter pc, AbstractWorldObject awo) {
|
protected static boolean stealSuccess(PlayerCharacter pc, AbstractWorldObject awo) {
|
||||||
if (pc == null || awo == null || !AbstractWorldObject.IsAbstractCharacter(awo) || pc.getPowers() == null)
|
if (pc == null || awo == null || !AbstractWorldObject.IsAbstractCharacter(awo) || pc.getPowers() == null)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import engine.objects.AbstractCharacter;
|
|||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
import engine.objects.PlayerCharacter;
|
import engine.objects.PlayerCharacter;
|
||||||
import engine.objects.Zone;
|
import engine.objects.Zone;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -36,6 +37,10 @@ public class SummonPowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SummonPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab,
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab,
|
||||||
PowersBase pb) {
|
PowersBase pb) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import engine.mbEnums;
|
|||||||
import engine.mbEnums.ModType;
|
import engine.mbEnums.ModType;
|
||||||
import engine.mbEnums.SourceType;
|
import engine.mbEnums.SourceType;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
import engine.powers.effectmodifiers.AbstractEffectModifier;
|
import engine.powers.effectmodifiers.AbstractEffectModifier;
|
||||||
@@ -37,6 +38,12 @@ public class TeleportPowerAction extends AbstractPowerAction {
|
|||||||
this.ignoreNoTeleSpire = ((flags & 32768) != 0) ? true : false;
|
this.ignoreNoTeleSpire = ((flags & 32768) != 0) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TeleportPowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.ignoreNoTeleSpire = powerActionTemplate.ignore_no_tele_spire;
|
||||||
|
}
|
||||||
|
|
||||||
private static void failTeleport(PowersBase pb, AbstractCharacter awo) {
|
private static void failTeleport(PowersBase pb, AbstractCharacter awo) {
|
||||||
|
|
||||||
if (pb == null || awo == null || (!(awo.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))))
|
if (pb == null || awo == null || (!(awo.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))))
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.jobs.TrackJob;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -56,6 +57,24 @@ public class TrackPowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TrackPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.trackPlayer = powerActionTemplate.track_player;
|
||||||
|
this.trackCorpse = powerActionTemplate.track_corpse;
|
||||||
|
String trackFilter = powerActionTemplate.track_filter;
|
||||||
|
this.trackAll = trackFilter.equals("All") ? true : false;
|
||||||
|
this.trackDragon = trackFilter.equals("Dragon") ? true : false;
|
||||||
|
this.trackGiant = trackFilter.equals("Giant") ? true : false;
|
||||||
|
this.trackNPC = trackFilter.equals("NPC") ? true : false;
|
||||||
|
this.trackUndead = trackFilter.equals("Undead") ? true : false;
|
||||||
|
this.trackVampire = trackFilter.equals("Vampire") ? true : false;
|
||||||
|
|
||||||
|
this.maxTrack = powerActionTemplate.max_track;
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import engine.math.Vector3f;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -33,6 +34,12 @@ public class TransferStatOTPowerAction extends TransferStatPowerAction {
|
|||||||
this.numIterations = rs.getInt("numIterations");
|
this.numIterations = rs.getInt("numIterations");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TransferStatOTPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id, effects);
|
||||||
|
|
||||||
|
this.numIterations = powerActionTemplate.num_iterations;
|
||||||
|
}
|
||||||
|
|
||||||
public int getNumIterations() {
|
public int getNumIterations() {
|
||||||
return this.numIterations;
|
return this.numIterations;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import engine.net.AbstractNetMsg;
|
|||||||
import engine.net.client.msg.ModifyHealthKillMsg;
|
import engine.net.client.msg.ModifyHealthKillMsg;
|
||||||
import engine.net.client.msg.ModifyHealthMsg;
|
import engine.net.client.msg.ModifyHealthMsg;
|
||||||
import engine.objects.*;
|
import engine.objects.*;
|
||||||
|
import engine.parsers.objects.wpak.CurveRamp;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -84,6 +86,37 @@ public class TransferStatPowerAction extends AbstractPowerAction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TransferStatPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
CurveRamp amountRamp = CurveRamp.fromCurve(powerActionTemplate.transfer_amount_curve);
|
||||||
|
CurveRamp efficiencyRamp = CurveRamp.fromCurve(powerActionTemplate.transfer_efficiency_curve);
|
||||||
|
|
||||||
|
// TransferStatOT names its effect in the header, TransferStat with EFFECTID=
|
||||||
|
if (!powerActionTemplate.effect_ids.isEmpty())
|
||||||
|
this.effectID = powerActionTemplate.effect_ids.get(0);
|
||||||
|
else
|
||||||
|
this.effectID = (powerActionTemplate.effectid == null) ? "" : powerActionTemplate.effectid;
|
||||||
|
|
||||||
|
this.transferFromHealth = powerActionTemplate.transfer_from_type == mbEnums.CostType.HEALTH;
|
||||||
|
this.transferFromMana = powerActionTemplate.transfer_from_type == mbEnums.CostType.MANA;
|
||||||
|
this.transferFromStamina = !this.transferFromHealth && !this.transferFromMana;
|
||||||
|
this.transferToHealth = powerActionTemplate.transfer_to_type == mbEnums.CostType.HEALTH;
|
||||||
|
this.transferToMana = powerActionTemplate.transfer_to_type == mbEnums.CostType.MANA;
|
||||||
|
this.transferToStamina = !this.transferToHealth && !this.transferToMana;
|
||||||
|
|
||||||
|
// The client reads both with String::ToInt (0x56ADF0), so 31.5 acts as 31
|
||||||
|
this.transferAmount = (int) powerActionTemplate.transfer_amount;
|
||||||
|
this.transferEfficiency = (int) powerActionTemplate.transfer_efficiency;
|
||||||
|
|
||||||
|
this.transferRamp = (amountRamp == null) ? 0 : amountRamp.ramp;
|
||||||
|
this.transferRampAdd = amountRamp == null || amountRamp.useAdd;
|
||||||
|
this.transferEfficiencyRamp = (efficiencyRamp == null) ? 0 : efficiencyRamp.ramp;
|
||||||
|
this.transferEfficiencyRampAdd = efficiencyRamp == null || efficiencyRamp.useAdd;
|
||||||
|
this.targetToCaster = powerActionTemplate.transfer_target_to_caster;
|
||||||
|
this.damageType = powerActionTemplate.damagetype;
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import engine.jobs.FinishEffectTimeJob;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.EffectsBase;
|
import engine.powers.EffectsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
@@ -34,6 +35,13 @@ public class TransformPowerAction extends AbstractPowerAction {
|
|||||||
this.effect = effects.get(this.effectID);
|
this.effect = effects.get(this.effectID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TransformPowerAction(PowerActionTemplate powerActionTemplate, int id, HashMap<String, EffectsBase> effects) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
|
||||||
|
this.effectID = effectIDAt(powerActionTemplate, 0);
|
||||||
|
this.effect = effects.get(this.effectID);
|
||||||
|
}
|
||||||
|
|
||||||
public String getEffectID() {
|
public String getEffectID() {
|
||||||
return this.effectID;
|
return this.effectID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ package engine.powers.poweractions;
|
|||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.objects.AbstractCharacter;
|
import engine.objects.AbstractCharacter;
|
||||||
import engine.objects.AbstractWorldObject;
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.parsers.objects.wpak.PowerActionTemplate;
|
||||||
import engine.powers.ActionsBase;
|
import engine.powers.ActionsBase;
|
||||||
import engine.powers.PowersBase;
|
import engine.powers.PowersBase;
|
||||||
|
|
||||||
@@ -25,6 +26,10 @@ public class TreeChokePowerAction extends AbstractPowerAction {
|
|||||||
super(rs);
|
super(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TreeChokePowerAction(PowerActionTemplate powerActionTemplate, int id) {
|
||||||
|
super(powerActionTemplate, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
protected void _startAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, int trains, ActionsBase ab, PowersBase pb) {
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user