Anunciar cuando un player tira su primer sub (ERROR, no me lo detecta el server)

Iniciado por fa1thDEV, Ene 27, 2025, 02:49 PM

Tema anterior - Siguiente tema
Buenas, estoy intentando crear un script de que cuando el jugador tira sub class avisa al mundo y cuando termina de completar las 3 subs, retumba el piso y se pone el cielo en rojo, alguno tiene idea de que hice mal aca?, porque el server me carga la script pero no sucede nada in game.

Codigo:

package services;

import l2.gameserver.listener.actor.player.OnSetActiveSubClassListener;
import l2.gameserver.model.Player;
import l2.gameserver.model.actor.listener.CharListenerList;
import l2.gameserver.network.l2.components.ChatType;
import l2.gameserver.network.l2.s2c.Earthquake;
import l2.gameserver.network.l2.s2c.ExRedSky;
import l2.gameserver.network.l2.s2c.L2GameServerPacket;
import l2.gameserver.network.l2.s2c.Say2;
import l2.gameserver.scripts.ScriptFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SubClassAnn implements OnSetActiveSubClassListener, ScriptFile {
    private static final SubClassAnn INSTANCE = new SubClassAnn();
    private static final Logger logger = LoggerFactory.getLogger(SubClassAnn.class);

    @Override
    public void onSetActiveSub(Player player, int idk) {
        if (player == null) {
            logger.debug("Player is null, returning.");
            return;
        }

        int subclassCount = player.getSubClasses().size() - 1;
        logger.debug("Player {} has {} subclasses.", player.getName(), subclassCount);

        String announcement = switch (subclassCount) {
            case 1 -> "The " + player.getName() + " has made their first subclass!";
            case 2 -> "The " + player.getName() + " has made their second subclass!";
            case 3 -> player.getName() + " has made their third subclass, congratulations!";
            default -> null;
        };

        if (announcement != null) {
            logger.debug("Announcement: {}", announcement);
            Say2 globalAnnouncement = new Say2(0, ChatType.ANNOUNCEMENT, "", announcement);
            player.sendPacket(globalAnnouncement);
            player.broadcastPacket(new L2GameServerPacket[] {new ExRedSky(10)});
            player.broadcastPacket(new L2GameServerPacket[] {new Earthquake(player.getLoc(), 30, 12)});
        } else {
            logger.debug("No announcement to make.");
        }
    }

    @Override
    public void onLoad() {
        logger.info("SubClassAnn script loaded.");
        CharListenerList.addGlobal(INSTANCE);
    }

    @Override
    public void onReload() {
        logger.info("SubClassAnn script reloaded.");
        onShutdown();
        onLoad();
    }

    @Override
    public void onShutdown() {
        logger.info("SubClassAnn script unloaded.");
        CharListenerList.removeGlobal(INSTANCE);
    }
}
fa1thDEV/WaterColour

Cita de: fa1thDEV en Ene 27, 2025, 02:49 PMBuenas, estoy intentando crear un script de que cuando el jugador tira sub class avisa al mundo y cuando termina de completar las 3 subs, retumba el piso y se pone el cielo en rojo, alguno tiene idea de que hice mal aca?, porque el server me carga la script pero no sucede nada in game.

Codigo:

package services;

import l2.gameserver.listener.actor.player.OnSetActiveSubClassListener;
import l2.gameserver.model.Player;
import l2.gameserver.model.actor.listener.CharListenerList;
import l2.gameserver.network.l2.components.ChatType;
import l2.gameserver.network.l2.s2c.Earthquake;
import l2.gameserver.network.l2.s2c.ExRedSky;
import l2.gameserver.network.l2.s2c.L2GameServerPacket;
import l2.gameserver.network.l2.s2c.Say2;
import l2.gameserver.scripts.ScriptFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SubClassAnn implements OnSetActiveSubClassListener, ScriptFile {
    private static final SubClassAnn INSTANCE = new SubClassAnn();
    private static final Logger logger = LoggerFactory.getLogger(SubClassAnn.class);

    @Override
    public void onSetActiveSub(Player player, int idk) {
        if (player == null) {
            logger.debug("Player is null, returning.");
            return;
        }

        int subclassCount = player.getSubClasses().size() - 1;
        logger.debug("Player {} has {} subclasses.", player.getName(), subclassCount);

        String announcement = switch (subclassCount) {
            case 1 -> "The " + player.getName() + " has made their first subclass!";
            case 2 -> "The " + player.getName() + " has made their second subclass!";
            case 3 -> player.getName() + " has made their third subclass, congratulations!";
            default -> null;
        };

        if (announcement != null) {
            logger.debug("Announcement: {}", announcement);
            Say2 globalAnnouncement = new Say2(0, ChatType.ANNOUNCEMENT, "", announcement);
            player.sendPacket(globalAnnouncement);
            player.broadcastPacket(new L2GameServerPacket[] {new ExRedSky(10)});
            player.broadcastPacket(new L2GameServerPacket[] {new Earthquake(player.getLoc(), 30, 12)});
        } else {
            logger.debug("No announcement to make.");
        }
    }

    @Override
    public void onLoad() {
        logger.info("SubClassAnn script loaded.");
        CharListenerList.addGlobal(INSTANCE);
    }

    @Override
    public void onReload() {
        logger.info("SubClassAnn script reloaded.");
        onShutdown();
        onLoad();
    }

    @Override
    public void onShutdown() {
        logger.info("SubClassAnn script unloaded.");
        CharListenerList.removeGlobal(INSTANCE);
    }
}

Te apareció algo en consola? algun error o algo?

Recomiendo debuggear el codigo, todos los "logger.debug" que tengas pasalos a "logger.info", eso te va a mostrar los logs sin estar en modo debug.

Si no lees ningun log es porque ni siquiera se esta ejecutando el código de la clase y te falto configurar algo.

También vi que tenes algunos logger en "info", buscá esos logs también, deberías verlos en tu consola.
Java Backend Developer