|
|
|
@ -48,7 +48,7 @@ public class WpakPowerManager {
@@ -48,7 +48,7 @@ public class WpakPowerManager {
|
|
|
|
|
|
|
|
|
|
private static JobScheduler js; |
|
|
|
|
|
|
|
|
|
public static void init(){ |
|
|
|
|
public static void init() { |
|
|
|
|
EffectsParser.parseWpakFile(); |
|
|
|
|
PowersParser.parseWpakFile(); |
|
|
|
|
PowerActionParser.parseWpakFile(); |
|
|
|
@ -294,39 +294,44 @@ public class WpakPowerManager {
@@ -294,39 +294,44 @@ public class WpakPowerManager {
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void finishUsePower(PerformActionMsg msg, PlayerCharacter caster, AbstractWorldObject target){ |
|
|
|
|
public static void finishUsePower(PerformActionMsg msg, PlayerCharacter caster, AbstractWorldObject target) { |
|
|
|
|
Power powerUsed = powers.get(msg.getPowerUsedID()); |
|
|
|
|
if(powerUsed == null) |
|
|
|
|
if (powerUsed == null) |
|
|
|
|
return; |
|
|
|
|
if(powerUsed.maxMobTargets > 1 || powerUsed.maxPlayerTargets > 1){ |
|
|
|
|
if (powerUsed.maxMobTargets > 1 || powerUsed.maxPlayerTargets > 1) { |
|
|
|
|
AoeHandler(caster, target, powerUsed, msg.getNumTrains()); |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
applyAllPowerEffects(caster, powerUsed, msg.getNumTrains(), target); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void AoeHandler(PlayerCharacter caster, AbstractWorldObject target, Power powerUsed, int rank) { |
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|
HashSet<AbstractWorldObject> pcTargets = new HashSet<>(); |
|
|
|
|
int count = 1; |
|
|
|
|
for(AbstractWorldObject mob : mobTargets){ |
|
|
|
|
if(count < powerUsed.maxMobTargets + 1){ |
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
for (AbstractWorldObject mob : mobTargets) { |
|
|
|
|
if (count < powerUsed.maxMobTargets + 1) { |
|
|
|
|
applyAllPowerEffects(caster, powerUsed, rank, mob); |
|
|
|
|
count ++; |
|
|
|
|
}else{ |
|
|
|
|
count++; |
|
|
|
|
} else { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
count = 1; |
|
|
|
|
for(AbstractWorldObject pc : pcTargets){ |
|
|
|
|
if(count < powerUsed.maxPlayerTargets + 1){ |
|
|
|
|
for (AbstractWorldObject pc : pcTargets) { |
|
|
|
|
if (count < powerUsed.maxPlayerTargets + 1) { |
|
|
|
|
applyAllPowerEffects(caster, powerUsed, rank, pc); |
|
|
|
|
count ++; |
|
|
|
|
}else{ |
|
|
|
|
count++; |
|
|
|
|
} else { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -334,7 +339,7 @@ public class WpakPowerManager {
@@ -334,7 +339,7 @@ public class WpakPowerManager {
|
|
|
|
|
|
|
|
|
|
public static void applyAllPowerEffects(AbstractCharacter caster, Power power, int rank, AbstractWorldObject target) { |
|
|
|
|
|
|
|
|
|
for(ActionEntry powerAction: power.actionEntries){ |
|
|
|
|
for (ActionEntry powerAction : power.actionEntries) { |
|
|
|
|
|
|
|
|
|
int effectTokem = Hasher.SBStringHash(powerAction.effect_id); |
|
|
|
|
Effect effect = effect_data.get(effectTokem); |
|
|
|
|