forked from MagicBane/Server
				
			
				 5 changed files with 49 additions and 74 deletions
			
			
		@ -1,66 +0,0 @@
				@@ -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 @@
				@@ -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