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