Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ========================= import handler.gmevent.GmMiniEventManager.java
- package handler.gmevent;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- import l2f.gameserver.model.Player;
- import l2f.gameserver.utils.Location;
- import l2f.gameserver.utils.Log;
- import l2f.gameserver.network.serverpackets.components.CustomMessage;
- /**
- * Manager principal del evento GM personalizado.
- * Controla la lista de registrados, el estado del evento y las validaciones por IP/HWID.
- */
- public class GmMiniEventManager
- {
- public enum EventState { INACTIVE, REGISTRATION, TELEPORTED }
- private static GmMiniEventManager _instance;
- private EventState _state = EventState.INACTIVE;
- private final Map<Integer, Player> _registeredPlayers = new ConcurrentHashMap<>();
- private Location _adminLoc = null;
- public static GmMiniEventManager getInstance()
- {
- if (_instance == null)
- _instance = new GmMiniEventManager();
- return _instance;
- }
- public EventState getState()
- {
- return _state;
- }
- public boolean isRegistrationOpen()
- {
- return _state == EventState.REGISTRATION;
- }
- public boolean isEventRunning()
- {
- return _state != EventState.INACTIVE;
- }
- public void startEvent(Player gm)
- {
- _state = EventState.REGISTRATION;
- _adminLoc = gm.getLoc();
- _registeredPlayers.clear();
- broadcastToAll("[GM EVENT] El administrador " + gm.getName() + " ha iniciado un evento! Usa .gmeventregister para participar.");
- Log.add("[GM EVENT] Iniciado por: " + gm.getName(), "gmevent");
- }
- public void recallPlayers(Player gm)
- {
- if (_state != EventState.REGISTRATION)
- return;
- for (Player player : _registeredPlayers.values())
- {
- if (player != null && player.isOnline())
- player.teleToLocation(gm.getLoc());
- }
- _state = EventState.TELEPORTED;
- broadcastToAll("[GM EVENT] Todos los jugadores registrados han sido teletransportados.");
- }
- public void stopEvent(Player activeChar)
- {
- broadcastToAll("[GM EVENT] El evento ha finalizado.");
- _registeredPlayers.clear();
- _state = EventState.INACTIVE;
- _adminLoc = null;
- Log.add("[GM EVENT] Finalizado.", "gmevent");
- }
- public boolean registerPlayer(Player player)
- {
- if (!isRegistrationOpen())
- {
- player.sendMessage(new CustomMessage("El evento no está disponible ahora.", player));
- return false;
- }
- // Validaciones por HWID o IP (simplificado: solo IP para este ejemplo)
- String playerIP = player.getIP();
- for (Player p : _registeredPlayers.values())
- {
- if (p.getIP().equals(playerIP))
- {
- player.sendMessage("Ya hay un personaje registrado desde esta IP.");
- return false;
- }
- }
- if (_registeredPlayers.containsKey(player.getObjectId()))
- {
- player.sendMessage("Ya estás registrado en el evento.");
- return false;
- }
- _registeredPlayers.put(player.getObjectId(), player);
- player.sendMessage("Te has registrado exitosamente al evento del GM.");
- return true;
- }
- public boolean unregisterPlayer(Player player)
- {
- if (!isRegistrationOpen())
- return false;
- if (_registeredPlayers.remove(player.getObjectId()) != null)
- {
- player.sendMessage("Has cancelado tu registro del evento.");
- return true;
- }
- else
- {
- player.sendMessage("No estás registrado.");
- return false;
- }
- }
- private void broadcastToAll(String msg)
- {
- for (Player p : l2f.gameserver.model.GameObjectsStorage.getAllPlayersForIterate())
- {
- if (p != null && p.isOnline())
- p.sendMessage(msg);
- }
- }
- public boolean isEventActive()
- {
- return _state != EventState.INACTIVE;
- }
- public boolean isPlayerRegistered(Player player)
- {
- return _registeredPlayers.containsKey(player.getObjectId());
- }
- public boolean isHwIdOrIpRegistered(Player player)
- {
- String playerIP = player.getIP();
- for (Player p : _registeredPlayers.values())
- {
- if (p != null && playerIP.equals(p.getIP()))
- return true;
- if (p.getHWID().equals(player.getHWID()))
- return true;
- }
- return false;
- }
- }
- ========================= import handler.admincommands.AdminGmMiniEvent.java
- package handler.admincommands;
- import l2f.gameserver.handler.admincommands.IAdminCommandHandler;
- import l2f.gameserver.handler.admincommands.AdminCommandHandler;
- import l2f.gameserver.model.Player;
- import l2f.gameserver.scripts.ScriptFile;
- import handler.gmevent.GmMiniEventManager;
- public class AdminGmMiniEvent implements IAdminCommandHandler, ScriptFile
- {
- private enum Commands
- {
- admin_gmeventon,
- admin_gmeventrecall,
- admin_gmeventoff
- }
- @Override
- public boolean useAdminCommand(Enum comm, String[] wordList, String fullString, Player activeChar)
- {
- Commands command = (Commands) comm;
- if (activeChar == null || !activeChar.getPlayerAccess().CanTeleport)
- return false;
- switch (command)
- {
- case admin_gmeventon:
- GmMiniEventManager.getInstance().startEvent(activeChar);
- break;
- case admin_gmeventrecall:
- GmMiniEventManager.getInstance().recallPlayers(activeChar);
- break;
- case admin_gmeventoff:
- GmMiniEventManager.getInstance().stopEvent(activeChar);
- break;
- }
- return true;
- }
- @Override
- public Enum[] getAdminCommandEnum()
- {
- return Commands.values();
- }
- @Override
- public void onLoad()
- {
- AdminCommandHandler.getInstance().registerAdminCommandHandler(this);
- }
- @Override
- public void onReload()
- {
- }
- @Override
- public void onShutdown()
- {
- }
- }
- ========================= import handler.voicecommands.VoiceGmMiniEvent.java
- package handler.voicecommands;
- import l2f.gameserver.handler.voicecommands.IVoicedCommandHandler;
- import l2f.gameserver.model.Player;
- import l2f.gameserver.scripts.ScriptFile;
- import handler.gmevent.GmMiniEventManager;
- public class VoiceGmMiniEvent implements IVoicedCommandHandler, ScriptFile
- {
- private static final String[] _commandList = new String[] {
- "gmeventregister",
- "gmeventunregister"
- };
- @Override
- public void onLoad()
- {
- l2f.gameserver.handler.voicecommands.VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this);
- }
- @Override
- public void onReload() {}
- @Override
- public void onShutdown() {}
- @Override
- public boolean useVoicedCommand(String command, Player activeChar, String args)
- {
- if (activeChar == null || activeChar.isDead())
- return false;
- switch (command)
- {
- case "gmeventregister":
- if (!GmMiniEventManager.getInstance().isEventActive())
- {
- activeChar.sendMessage("El evento GM no está activo.");
- return true;
- }
- if (GmMiniEventManager.getInstance().isPlayerRegistered(activeChar))
- {
- activeChar.sendMessage("Ya estás registrado en el evento.");
- return true;
- }
- if (GmMiniEventManager.getInstance().isHwIdOrIpRegistered(activeChar))
- {
- activeChar.sendMessage("Ya hay un personaje registrado desde esta PC o red.");
- return true;
- }
- GmMiniEventManager.getInstance().registerPlayer(activeChar);
- activeChar.sendMessage("Te has registrado al evento correctamente.");
- break;
- case "gmeventunregister":
- if (!GmMiniEventManager.getInstance().isEventActive())
- {
- activeChar.sendMessage("El evento GM no está activo.");
- return true;
- }
- if (!GmMiniEventManager.getInstance().isPlayerRegistered(activeChar))
- {
- activeChar.sendMessage("No estás registrado en el evento.");
- return true;
- }
- GmMiniEventManager.getInstance().unregisterPlayer(activeChar);
- activeChar.sendMessage("Te has quitado del registro del evento.");
- break;
- }
- return true;
- }
- @Override
- public String[] getVoicedCommandList()
- {
- return _commandList;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement