|  |  |  | @ -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); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |