system to finish using powers with new UsePowerJob

This commit is contained in:
2024-09-08 20:11:21 -05:00
parent 3c1280e546
commit 0c50cd9536
3 changed files with 98 additions and 9 deletions
+53 -9
View File
@@ -1,10 +1,12 @@
package engine.wpak;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.*;
import engine.job.JobContainer;
import engine.job.JobScheduler;
import engine.jobs.FinishRecycleTimeJob;
import engine.jobs.UsePowerJob;
import engine.jobs.WpakUsePowerJob;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.net.Dispatch;
@@ -16,14 +18,14 @@ import engine.net.client.msg.UpdateStateMsg;
import engine.objects.*;
import engine.powers.PowersBase;
import engine.server.MBServerStatics;
import engine.util.Hasher;
import engine.wpak.data.*;
import engine.wpak.data.Effect;
import engine.wpak.data.EquipmentPreReq;
import engine.wpak.data.Power;
import engine.wpak.data.PowerAction;
import org.pmw.tinylog.Logger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import static engine.math.FastMath.sqr;
@@ -34,8 +36,7 @@ public class WpakPowerManager {
private static JobScheduler js;
public static void usePower(final PerformActionMsg msg, ClientConnection origin,
boolean sendCastToSelf) {
public static void usePower(final PerformActionMsg msg, ClientConnection origin, boolean sendCastToSelf) {
if (ConfigManager.MB_RULESET.getValue().equals("LORE")) {
PowersBase pb = PowersManager.powersBaseByToken.get(msg.getPowerUsedID());
@@ -90,7 +91,7 @@ public class WpakPowerManager {
}
}
public static boolean castPower(final PerformActionMsg msg, ClientConnection origin, boolean sendCastToSelf) {
private static boolean castPower(final PerformActionMsg msg, ClientConnection origin, boolean sendCastToSelf) {
//check to see if the caster is valid
PlayerCharacter playerCharacter = SessionManager.getPlayerCharacter(origin);
@@ -293,9 +294,9 @@ public class WpakPowerManager {
// run timer job to end cast
if (time < 1) // run immediately
finishUsePower(copyMsg, playerCharacter, casterLiveCounter, targetLiveCounter);
finishUsePower(copyMsg, playerCharacter, target);
else {
UsePowerJob upj = new UsePowerJob(playerCharacter, copyMsg, copyMsg.getPowerUsedID(), powerCast, casterLiveCounter, targetLiveCounter);
WpakUsePowerJob upj = new WpakUsePowerJob(playerCharacter, copyMsg, target);
JobContainer jc = js.scheduleJob(upj, time);
// make lastPower
@@ -306,8 +307,51 @@ public class WpakPowerManager {
return false;
}
public static void finishUsePower(PerformActionMsg msg, int castCount, int targetCount){
public static void finishUsePower(PerformActionMsg msg, PlayerCharacter caster, AbstractWorldObject target){
Power powerUsed = powers.get(msg.getPowerUsedID());
if(powerUsed == null)
return;
if(powerUsed.maxMobTargets > 1 || powerUsed.maxPlayerTargets > 1){
AoeHandler(caster, target, powerUsed);
}else{
applyAllPowerEffects(powerUsed, target);
}
}
private static void AoeHandler(PlayerCharacter caster, AbstractWorldObject target, Power powerUsed){
HashSet<AbstractWorldObject> mobTargets = new HashSet<>();
HashSet<AbstractWorldObject> pcTargets = new HashSet<>();
if(powerUsed.maxMobTargets > 0)
mobTargets = WorldGrid.getObjectsInRangePartial(target.loc,powerUsed.areaRange, MBServerStatics.MASK_MOB);
if(powerUsed.maxPlayerTargets > 0)
pcTargets = WorldGrid.getObjectsInRangePartial(target.loc,powerUsed.areaRange, MBServerStatics.MASK_PLAYER);
int count = 1;
for(AbstractWorldObject mob : mobTargets){
if(count < powerUsed.maxMobTargets + 1){
applyAllPowerEffects(powerUsed,mob);
count ++;
}else{
break;
}
}
count = 1;
for(AbstractWorldObject pc : pcTargets){
if(count < powerUsed.maxPlayerTargets + 1){
applyAllPowerEffects(powerUsed,pc);
count ++;
}else{
break;
}
}
}
public static void applyAllPowerEffects(Power power, AbstractWorldObject target){
for(ActionEntry powerAction: power.actionEntries){
Effect eff = effect_data.get(Hasher.SBStringHash(powerAction.effect_id));
if(eff == null)
continue;
//TODO add in effect application
}
}
public static void sendPowerMsg(PlayerCharacter playerCharacter, int type, PerformActionMsg msg) {
+1
View File
@@ -9,6 +9,7 @@
package engine.wpak.data;
import engine.mbEnums;
import engine.objects.AbstractWorldObject;
import java.util.ArrayList;
import java.util.EnumSet;