forked from MagicBane/Server
				
			
				 5 changed files with 49 additions and 74 deletions
			
			
		@ -1,66 +0,0 @@ | 
				
			|||||||
// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
 | 
					 | 
				
			||||||
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
 | 
					 | 
				
			||||||
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
 | 
					 | 
				
			||||||
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
 | 
					 | 
				
			||||||
// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
 | 
					 | 
				
			||||||
//      Magicbane Emulator Project © 2013 - 2022
 | 
					 | 
				
			||||||
//                www.magicbane.com
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package engine.mobileAI.Threads; | 
					 | 
				
			||||||
import engine.gameManager.ZoneManager; | 
					 | 
				
			||||||
import engine.objects.Mob; | 
					 | 
				
			||||||
import engine.objects.Zone; | 
					 | 
				
			||||||
import org.pmw.tinylog.Logger; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * Thread blocks until MagicBane dispatch messages are | 
					 | 
				
			||||||
 * enqueued then processes them in FIFO order. The collection | 
					 | 
				
			||||||
 * is thread safe. | 
					 | 
				
			||||||
 * <p> | 
					 | 
				
			||||||
 * Any large messages not time sensitive such as load object | 
					 | 
				
			||||||
 * sent to more than a single individual should be spawned | 
					 | 
				
			||||||
 * individually on a DispatchMessageThread. | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class MobRespawnThread implements Runnable { | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public MobRespawnThread() { | 
					 | 
				
			||||||
        Logger.info(" MobRespawnThread thread has started!"); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override | 
					 | 
				
			||||||
    public void run() { | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        while (true) { | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            try { | 
					 | 
				
			||||||
                for (Zone zone : ZoneManager.getAllZones()) { | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (zone.respawnQue.isEmpty() == false && zone.lastRespawn + 100 < System.currentTimeMillis()) { | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        Mob respawner = zone.respawnQue.iterator().next(); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (respawner == null) | 
					 | 
				
			||||||
                            continue; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        respawner.respawn(); | 
					 | 
				
			||||||
                        zone.respawnQue.remove(respawner); | 
					 | 
				
			||||||
                        zone.lastRespawn = System.currentTimeMillis(); | 
					 | 
				
			||||||
                    } | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
            } catch (Exception e) { | 
					 | 
				
			||||||
                Logger.error(e); | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
    public static void startRespawnThread() { | 
					 | 
				
			||||||
        Thread respawnThread; | 
					 | 
				
			||||||
        respawnThread = new Thread(new MobRespawnThread()); | 
					 | 
				
			||||||
        respawnThread.setName("respawnThread"); | 
					 | 
				
			||||||
        respawnThread.start(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -0,0 +1,44 @@ | 
				
			|||||||
 | 
					// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
 | 
				
			||||||
 | 
					// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
 | 
				
			||||||
 | 
					// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
 | 
				
			||||||
 | 
					// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
 | 
				
			||||||
 | 
					// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
 | 
				
			||||||
 | 
					//      Magicbane Emulator Project © 2013 - 2022
 | 
				
			||||||
 | 
					//                www.magicbane.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package engine.mobileAI.Threads; | 
				
			||||||
 | 
					import engine.objects.Mob; | 
				
			||||||
 | 
					import org.pmw.tinylog.Logger; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.concurrent.BlockingQueue; | 
				
			||||||
 | 
					import java.util.concurrent.DelayQueue; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public enum Respawner implements Runnable { | 
				
			||||||
 | 
					    Respawner; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static BlockingQueue<Mob> respawnQueue = new DelayQueue(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void run() { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while (true) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                Mob mobile = respawnQueue.take(); | 
				
			||||||
 | 
					                mobile.respawn(); | 
				
			||||||
 | 
					            } catch (InterruptedException e) { | 
				
			||||||
 | 
					                Logger.error(e.toString()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void startRespawnThread() { | 
				
			||||||
 | 
					        Thread respawnThread; | 
				
			||||||
 | 
					        respawnThread = new Thread(Respawner); | 
				
			||||||
 | 
					        respawnThread.setName("respawnThread"); | 
				
			||||||
 | 
					        respawnThread.start(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue