Advertisement
Reanimation06

l2 new admin event

Apr 17th, 2025 (edited)
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.65 KB | Gaming | 0 0
  1. ========================= import handler.gmevent.GmMiniEventManager.java
  2. package handler.gmevent;
  3.  
  4. import java.util.Map;
  5. import java.util.concurrent.ConcurrentHashMap;
  6.  
  7. import l2f.gameserver.model.Player;
  8. import l2f.gameserver.utils.Location;
  9. import l2f.gameserver.utils.Log;
  10. import l2f.gameserver.network.serverpackets.components.CustomMessage;
  11.  
  12. /**
  13.  * Manager principal del evento GM personalizado.
  14.  * Controla la lista de registrados, el estado del evento y las validaciones por IP/HWID.
  15.  */
  16. public class GmMiniEventManager
  17. {
  18.     public enum EventState { INACTIVE, REGISTRATION, TELEPORTED }
  19.  
  20.     private static GmMiniEventManager _instance;
  21.  
  22.     private EventState _state = EventState.INACTIVE;
  23.     private final Map<Integer, Player> _registeredPlayers = new ConcurrentHashMap<>();
  24.     private Location _adminLoc = null;
  25.  
  26.     public static GmMiniEventManager getInstance()
  27.     {
  28.         if (_instance == null)
  29.             _instance = new GmMiniEventManager();
  30.         return _instance;
  31.     }
  32.  
  33.     public EventState getState()
  34.     {
  35.         return _state;
  36.     }
  37.  
  38.     public boolean isRegistrationOpen()
  39.     {
  40.         return _state == EventState.REGISTRATION;
  41.     }
  42.  
  43.     public boolean isEventRunning()
  44.     {
  45.         return _state != EventState.INACTIVE;
  46.     }
  47.  
  48.     public void startEvent(Player gm)
  49.     {
  50.         _state = EventState.REGISTRATION;
  51.         _adminLoc = gm.getLoc();
  52.         _registeredPlayers.clear();
  53.         broadcastToAll("[GM EVENT] El administrador " + gm.getName() + " ha iniciado un evento! Usa .gmeventregister para participar.");
  54.         Log.add("[GM EVENT] Iniciado por: " + gm.getName(), "gmevent");
  55.     }
  56.  
  57.     public void recallPlayers(Player gm)
  58.     {
  59.         if (_state != EventState.REGISTRATION)
  60.             return;
  61.  
  62.         for (Player player : _registeredPlayers.values())
  63.         {
  64.             if (player != null && player.isOnline())
  65.                 player.teleToLocation(gm.getLoc());
  66.         }
  67.         _state = EventState.TELEPORTED;
  68.         broadcastToAll("[GM EVENT] Todos los jugadores registrados han sido teletransportados.");
  69.     }
  70.  
  71.     public void stopEvent(Player activeChar)
  72.     {
  73.         broadcastToAll("[GM EVENT] El evento ha finalizado.");
  74.         _registeredPlayers.clear();
  75.         _state = EventState.INACTIVE;
  76.         _adminLoc = null;
  77.         Log.add("[GM EVENT] Finalizado.", "gmevent");
  78.     }
  79.  
  80.     public boolean registerPlayer(Player player)
  81.     {
  82.         if (!isRegistrationOpen())
  83.         {
  84.             player.sendMessage(new CustomMessage("El evento no está disponible ahora.", player));
  85.             return false;
  86.         }
  87.  
  88.         // Validaciones por HWID o IP (simplificado: solo IP para este ejemplo)
  89.         String playerIP = player.getIP();
  90.         for (Player p : _registeredPlayers.values())
  91.         {
  92.             if (p.getIP().equals(playerIP))
  93.             {
  94.                 player.sendMessage("Ya hay un personaje registrado desde esta IP.");
  95.                 return false;
  96.             }
  97.         }
  98.  
  99.         if (_registeredPlayers.containsKey(player.getObjectId()))
  100.         {
  101.             player.sendMessage("Ya estás registrado en el evento.");
  102.             return false;
  103.         }
  104.  
  105.         _registeredPlayers.put(player.getObjectId(), player);
  106.         player.sendMessage("Te has registrado exitosamente al evento del GM.");
  107.         return true;
  108.     }
  109.  
  110.     public boolean unregisterPlayer(Player player)
  111.     {
  112.         if (!isRegistrationOpen())
  113.             return false;
  114.  
  115.         if (_registeredPlayers.remove(player.getObjectId()) != null)
  116.         {
  117.             player.sendMessage("Has cancelado tu registro del evento.");
  118.             return true;
  119.         }
  120.         else
  121.         {
  122.             player.sendMessage("No estás registrado.");
  123.             return false;
  124.         }
  125.     }
  126.  
  127.     private void broadcastToAll(String msg)
  128.     {
  129.         for (Player p : l2f.gameserver.model.GameObjectsStorage.getAllPlayersForIterate())
  130.         {
  131.             if (p != null && p.isOnline())
  132.                 p.sendMessage(msg);
  133.         }
  134.     }
  135.    
  136.     public boolean isEventActive()
  137.     {
  138.         return _state != EventState.INACTIVE;
  139.     }
  140.  
  141.     public boolean isPlayerRegistered(Player player)
  142.     {
  143.         return _registeredPlayers.containsKey(player.getObjectId());
  144.     }
  145.  
  146.     public boolean isHwIdOrIpRegistered(Player player)
  147.     {
  148.         String playerIP = player.getIP();
  149.  
  150.         for (Player p : _registeredPlayers.values())
  151.         {
  152.             if (p != null && playerIP.equals(p.getIP()))
  153.                 return true;
  154.  
  155.            
  156.             if (p.getHWID().equals(player.getHWID()))
  157.                 return true;
  158.         }
  159.         return false;
  160.     }
  161.  
  162. }
  163.  
  164. ========================= import handler.admincommands.AdminGmMiniEvent.java
  165. package handler.admincommands;
  166.  
  167. import l2f.gameserver.handler.admincommands.IAdminCommandHandler;
  168. import l2f.gameserver.handler.admincommands.AdminCommandHandler;
  169. import l2f.gameserver.model.Player;
  170. import l2f.gameserver.scripts.ScriptFile;
  171. import handler.gmevent.GmMiniEventManager;
  172.  
  173. public class AdminGmMiniEvent implements IAdminCommandHandler, ScriptFile
  174. {
  175.     private enum Commands
  176.     {
  177.         admin_gmeventon,
  178.         admin_gmeventrecall,
  179.         admin_gmeventoff
  180.     }
  181.  
  182.     @Override
  183.     public boolean useAdminCommand(Enum comm, String[] wordList, String fullString, Player activeChar)
  184.     {
  185.         Commands command = (Commands) comm;
  186.  
  187.         if (activeChar == null || !activeChar.getPlayerAccess().CanTeleport)
  188.             return false;
  189.  
  190.         switch (command)
  191.         {
  192.             case admin_gmeventon:
  193.                 GmMiniEventManager.getInstance().startEvent(activeChar);
  194.                 break;
  195.             case admin_gmeventrecall:
  196.                 GmMiniEventManager.getInstance().recallPlayers(activeChar);
  197.                 break;
  198.             case admin_gmeventoff:
  199.                 GmMiniEventManager.getInstance().stopEvent(activeChar);
  200.                 break;
  201.         }
  202.         return true;
  203.     }
  204.  
  205.     @Override
  206.     public Enum[] getAdminCommandEnum()
  207.     {
  208.         return Commands.values();
  209.     }
  210.  
  211.     @Override
  212.     public void onLoad()
  213.     {
  214.         AdminCommandHandler.getInstance().registerAdminCommandHandler(this);
  215.     }
  216.  
  217.     @Override
  218.     public void onReload()
  219.     {
  220.     }
  221.  
  222.     @Override
  223.     public void onShutdown()
  224.     {
  225.     }
  226. }
  227.  
  228. ========================= import handler.voicecommands.VoiceGmMiniEvent.java
  229. package handler.voicecommands;
  230.  
  231. import l2f.gameserver.handler.voicecommands.IVoicedCommandHandler;
  232. import l2f.gameserver.model.Player;
  233. import l2f.gameserver.scripts.ScriptFile;
  234. import handler.gmevent.GmMiniEventManager;
  235.  
  236. public class VoiceGmMiniEvent implements IVoicedCommandHandler, ScriptFile
  237. {
  238.     private static final String[] _commandList = new String[] {
  239.             "gmeventregister",
  240.             "gmeventunregister"
  241.     };
  242.  
  243.     @Override
  244.     public void onLoad()
  245.     {
  246.         l2f.gameserver.handler.voicecommands.VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this);
  247.     }
  248.  
  249.     @Override
  250.     public void onReload() {}
  251.  
  252.     @Override
  253.     public void onShutdown() {}
  254.  
  255.     @Override
  256.     public boolean useVoicedCommand(String command, Player activeChar, String args)
  257.     {
  258.         if (activeChar == null || activeChar.isDead())
  259.             return false;
  260.  
  261.         switch (command)
  262.         {
  263.             case "gmeventregister":
  264.                 if (!GmMiniEventManager.getInstance().isEventActive())
  265.                 {
  266.                     activeChar.sendMessage("El evento GM no está activo.");
  267.                     return true;
  268.                 }
  269.                 if (GmMiniEventManager.getInstance().isPlayerRegistered(activeChar))
  270.                 {
  271.                     activeChar.sendMessage("Ya estás registrado en el evento.");
  272.                     return true;
  273.                 }
  274.                 if (GmMiniEventManager.getInstance().isHwIdOrIpRegistered(activeChar))
  275.                 {
  276.                     activeChar.sendMessage("Ya hay un personaje registrado desde esta PC o red.");
  277.                     return true;
  278.                 }
  279.                 GmMiniEventManager.getInstance().registerPlayer(activeChar);
  280.                 activeChar.sendMessage("Te has registrado al evento correctamente.");
  281.                 break;
  282.  
  283.             case "gmeventunregister":
  284.                 if (!GmMiniEventManager.getInstance().isEventActive())
  285.                 {
  286.                     activeChar.sendMessage("El evento GM no está activo.");
  287.                     return true;
  288.                 }
  289.                 if (!GmMiniEventManager.getInstance().isPlayerRegistered(activeChar))
  290.                 {
  291.                     activeChar.sendMessage("No estás registrado en el evento.");
  292.                     return true;
  293.                 }
  294.                 GmMiniEventManager.getInstance().unregisterPlayer(activeChar);
  295.                 activeChar.sendMessage("Te has quitado del registro del evento.");
  296.                 break;
  297.         }
  298.         return true;
  299.     }
  300.  
  301.     @Override
  302.     public String[] getVoicedCommandList()
  303.     {
  304.         return _commandList;
  305.     }
  306. }
  307.  
Tags: l2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement