Secret Experience

Secret Experience (https://secretexperience.net/index.php)
-   [Lineage] Java Mods (https://secretexperience.net/forumdisplay.php?f=636)
-   -   [L2JFree] Trocar de Classe Sem Ir Ao Gato (https://secretexperience.net/showthread.php?t=13011)

BioHazard 12-09-2009 03:28 PM

Trocar de Classe Sem Ir Ao Gato
 
Com isso, será como se você vai para o classmaster.
Em cada nível de mudança de classe (20, 40, 76) uma janela irá aparecer pedindo para você escolher a sua classe. No gato desova necessário. Você pode até deixar ALLOW_CLASS_MASTERS= false, se quiser.
Core:
Código:

Index: /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
===================================================================
--- /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java        (revision 2797)
+++ /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java        (working copy)
@@ -27,6 +27,7 @@
 import net.sf.l2j.gameserver.model.L2CharPosition;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2World;
+import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.entity.L2Event;
@@ -116,7 +117,7 @@
                                        L2Object object = L2World.getInstance().findObject(Integer.parseInt(id));
 
                                        if (_command.substring(endOfId+1).startsWith("event_participate")) L2Event.inscribePlayer(activeChar);
-                                        else if (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false))
+                                        else if ((Config.ALLOW_CLASS_MASTERS && object instanceof L2ClassMasterInstance) || (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false)))
                                        {
                                                ((L2NpcInstance)object).onBypassFeedback(activeChar, _command.substring(endOfId+1));
                                        }
Index: /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java        (revision 2797)
+++ /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java        (working copy)
@@ -46,7 +46,10 @@
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.L2Effect;
 import net.sf.l2j.gameserver.model.L2World;
+import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.model.base.ClassLevel;
+import net.sf.l2j.gameserver.model.base.PlayerClass;
 import net.sf.l2j.gameserver.model.entity.ClanHall;
 import net.sf.l2j.gameserver.model.entity.Couple;
 import net.sf.l2j.gameserver.model.entity.Fort;
@@ -340,6 +343,23 @@
        activeChar.onPlayerEnter();
       
        sendPacket(new SkillCoolTime(activeChar));
+       
+                if(Config.ALLOW_CLASS_MASTERS)
+                        {
+                                ClassLevel lvlnow = PlayerClass.values()[activeChar.getClassId().getId()].getLevel();
+                                if(activeChar.getLevel() >= 20 && lvlnow == ClassLevel.First)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                                else if(activeChar.getLevel() >= 40 && lvlnow == ClassLevel.Second)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                                else if(activeChar.getLevel() >= 76 && lvlnow == ClassLevel.Third)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                        }
 
        if (Olympiad.getInstance().playerInStadia(activeChar))
        {
Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java
===================================================================
--- /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java        (revision 2797)
+++ /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java        (working copy)
@@ -16,18 +16,17 @@
 
 import javolution.text.TextBuilder;
 import net.sf.l2j.Config;
-import net.sf.l2j.gameserver.ai.CtrlIntention;
 import net.sf.l2j.gameserver.datatables.CharTemplateTable;
+import net.sf.l2j.gameserver.datatables.NpcTable;
+import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.base.ClassId;
 import net.sf.l2j.gameserver.model.base.ClassLevel;
 import net.sf.l2j.gameserver.model.base.PlayerClass;
 import net.sf.l2j.gameserver.model.quest.Quest;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
-import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected;
 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
-import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation;
 import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
 
 /**
@@ -40,6 +39,12 @@
        //private static Logger _log = Logger.getLogger(L2ClassMasterInstance.class.getName());
        private static final int[] SECONDN_CLASS_IDS = {2,3,5,6,9,8,12,13,14,16,17,20,21,23,24,27,
                                                                                                        28,30,33,34,36,37,40,41,43,46,48,51,52,55,57};
+       
+                public static L2ClassMasterInstance ClassMaster = new L2ClassMasterInstance(31228, NpcTable.getInstance().getTemplate(31228));
+                static
+                {
+                        L2World.getInstance().storeObject(ClassMaster);
+                }
 
        /**
          * @param template
@@ -52,109 +57,90 @@
        @Override
        public void onAction(L2PcInstance player)
        {
-                if (!canTarget(player)) return;
+                if (Config.DEBUG)
+                _log.fine("ClassMaster activated");
 
-                // Check if the L2PcInstance already target the L2NpcInstance
-                if (getObjectId() != player.getTargetId())
-                {
-                        // Set the target of the L2PcInstance player
-                        player.setTarget(this);
+                ClassId classId = player.getClassId();
 
-                        // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-                        player.sendPacket(new MyTargetSelected(getObjectId(), 0));
-
-                        // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-                        player.sendPacket(new ValidateLocation(this));
+                                int jobLevel = 0;
+                                int level = player.getLevel();
+                                ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel();
+                                switch (lvl)
+                                {
+                                        case First:
+                                                jobLevel = 1;
+                                                break;
+                                        case Second:
+                                                jobLevel = 2;
+                                                break;
+                                        case Third:
+                                                jobLevel = 3;
+                                                break;
+                                        default:
+                                                jobLevel = 4;
                }
-                else
+                                                       
+                                                if (!Config.ALLOW_CLASS_MASTERS)
+                                                        jobLevel = 3;
+                               
+                                                if(player.isGM())
                {
-                        if (!canInteract(player))
+                                                                                showChatWindowChooseClass(player);
+                                                                        }
+                                                                        else if (((level >= 20 && jobLevel == 1 ) ||
+                                                                                (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS)
+                                                                        {
+                                                                                showChatWindow(player, classId.getId());
+                                                                        }
+                                                                        else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88)
+                                                                        {
+                                                                                for (int i = 0; i < SECONDN_CLASS_IDS.length; i++)
                        {
-                                player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
-                                return;
+                                                                                                                        if (classId.getId() == SECONDN_CLASS_IDS[i])
+                                                                                                                        {
+                                                                                                                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+                                                                                                            TextBuilder sb = new TextBuilder();
+                                                                                                            sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br><font color=AAAAAA>Please choose from the list of classes below...</font><br><br>");
+                                                                                                            sb.append("<a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a><br>");
+                                                                                                            sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
+                                                                                                            html.setHtml(sb.toString());
+                                                                                                            player.sendPacket(html);
+                                                                                                            break;
+                                                                                                                        }
                        }
 
-                        if (Config.DEBUG)
-                                _log.fine("ClassMaster activated");
-
-                        ClassId classId = player.getClassId();
-
-                        int jobLevel = 0;
-                        int level = player.getLevel();
-                        ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel();
-                        switch (lvl)
+                                                                                                }
+                                                                                else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer
+                                                                                {
+                                                                                        showChatWindow(player, classId.getId());
+                                                                                }
+                                                                                else
+                                                                                        {
+                                                                                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+                                                                                        TextBuilder sb = new TextBuilder();
+                                                                                                sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
+                                                                                                switch (jobLevel)
                        {
-                                case First:
-                                        jobLevel = 1;
+                                case 1:
+                                    sb.append("Come back here when you reach level 20 to change your class.<br>");
                                        break;
-                                case Second:
-                                        jobLevel = 2;
+                                case 2:
+                                        sb.append("Come back here when you reach level 40 to change your class.<br>");
                                        break;
-                                default:
-                                        jobLevel = 3;
+                                case 3:
+                                        sb.append("Come back here when you reach level 76 to change your class.<br>");
+                                        break;
+                                case 4:
+                                        sb.append("There are no more class changes for you.<br>");
+                                        break;
                        }
 
-                        if (!Config.ALLOW_CLASS_MASTERS)
-                                jobLevel = 3;
+                        for (Quest q : Quest.findAllEvents())
+                                sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>");
 
-                        if(player.isGM())
-                        {
-                                showChatWindowChooseClass(player);
-                        }
-                        else if (((level >= 20 && jobLevel == 1 ) ||
-                                (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS)
-                        {
-                                showChatWindow(player, classId.getId());
-                        }
-                        else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88)
-                        {
-                                for (int i = 0; i < SECONDN_CLASS_IDS.length; i++)
-                                {
-                                        if (classId.getId() == SECONDN_CLASS_IDS[i])
-                                        {
-                        NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-                        TextBuilder sb = new TextBuilder();
-                        sb.append("<html><body<table width=200>");
-                        sb.append("<tr><td><center>"+CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId())+" Class Master:</center></td></tr>");
-                        sb.append("<tr><td><br></td></tr>");
-                        sb.append("<tr><td><a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a></td></tr>");
-                        sb.append("<tr><td><br></td></tr>");
-                        sb.append("</table></body></html>");
-                        html.setHtml(sb.toString());
-                        player.sendPacket(html);
-                        break;
-                                        }
-                                }
-                        }
-            else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer
-            {
-                showChatWindow(player, classId.getId());
-            }
-                        else
-                        {
-                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-                                TextBuilder sb = new TextBuilder();
-                                sb.append("<html><body>");
-                                switch (jobLevel)
-                                {
-                                        case 1:
-                                                sb.append("Come back here when you reach level 20 to change your class.<br>");
-                                                break;
-                                        case 2:
-                                                sb.append("Come back here when you reach level 40 to change your class.<br>");
-                                                break;
-                                        case 3:
-                                                sb.append("There are no more class changes for you.<br>");
-                                                break;
-                                }
-
-                                for (Quest q : Quest.findAllEvents())
-                                        sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>");
-
-                                sb.append("</body></html>");
-                                html.setHtml(sb.toString());
-                                player.sendPacket(html);
-                        }
+                                                sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
+                                                html.setHtml(sb.toString());
+                                                player.sendPacket(html);
                }
                player.sendPacket(ActionFailed.STATIC_PACKET);
        }
@@ -219,9 +205,9 @@
 
                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
                TextBuilder sb = new TextBuilder();
-                sb.append("<html><body>");
+                sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
                sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>.");
-                sb.append("</body></html>");
+                sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
 
                html.setHtml(sb.toString());
                player.sendPacket(html);
@@ -280,9 +266,9 @@
 
            NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
            TextBuilder sb = new TextBuilder();
-            sb.append("<html><body>");
+            sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
            sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>.");
-            sb.append("</body></html>");
+            sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
 
            html.setHtml(sb.toString());
            player.sendPacket(html);
Index: /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java
===================================================================
--- /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java        (revision 2797)
+++ /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java        (working copy)
@@ -16,9 +16,12 @@
 
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.model.L2Character;
+import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
+import net.sf.l2j.gameserver.model.base.ClassLevel;
 import net.sf.l2j.gameserver.model.base.Experience;
+import net.sf.l2j.gameserver.model.base.PlayerClass;
 import net.sf.l2j.gameserver.model.quest.QuestState;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
@@ -152,6 +155,24 @@
                if (getLevel() + value > Experience.MAX_LEVEL - 1) return false;
 
        boolean levelIncreased = super.addLevel(value);
+       
+             
+                if(Config.ALLOW_CLASS_MASTERS)
+                {
+                        ClassLevel lvlnow = PlayerClass.values()[getActiveChar().getClassId().getId()].getLevel();
+                        if(getLevel() >= 20 && lvlnow == ClassLevel.First)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                        else if(getLevel() >= 40 && lvlnow == ClassLevel.Second)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                        else if(getLevel() >= 76 && lvlnow == ClassLevel.Third)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                }
        if (levelIncreased)
        {

DP:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]

Screenshot:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]

Creditos:poltomb(l2jserver)

nois 12-09-2009 04:10 PM

gostei mais nao sei mexe com coplacao nao sei nem se e isso q faz pra coloca no serve se alguem pude fazer esse favor pra mim agradesso desde ja
uso o pack do sound
para todos os moderadores do sit: se puder me ajuda agradesso pq aqui muita gente ja me ajudo e so muito grato a tantas pessoas bacanas q esta aqui no secret aqui tudo de bom:laugh:
e estao todos de parabens

Loki 12-09-2009 05:48 PM

mano se tem ele para l2emu pois coloquei ele em l2jserver
e
uma mao na roda so que em l2emu que e a rev que eu uso nao funfa
e sim gracia final

Dandilo 14-09-2009 07:00 PM

Tem como colocar o core pra baixar não?

CavaleiroNegro 15-09-2009 03:08 AM

@nois :

Não da para mexer no JAVA do pack de alguém ja copilado amigo....

@Loki :

Amigo,pq vc não busca os caminhos de referencias e adpta para sua rev eu mesmo não utilizo rev JFREE e vo add esse código com as alterações que precisar para minha rev.(Dependeno é só seguir os arquivo .java e adicionar as linhas)

Aquilis 15-09-2009 09:55 PM

Aqui rodo perfeitamente para l2emu. Amanhã eu posto para você.

Loki 16-09-2009 11:39 PM

cavaleiro pow mano vlw mesmo ae eu fiz tudo isso so que ta dando erro na hora de compila e alias nem cheguei a compilar pois o arquivo la nao e compativel e as linhas que usei de reerencia nao funfa elas nao batem com a do script diff

aquilis cara por favor master posta ae seu arquivo ae eu vejo o seu e faço na boa para o meu e se vc tiver um sistema vio ficaria mais gratoa ainda se me arrumasse
um que diferencie o nick dos chars vips que eu coloque os dias e tal e num dia acabe o vip dele
sabe ajuda ae brigado a todos

Aquilis 17-09-2009 12:17 PM

O L2 Emu é o melhor pack que vi até agora. Você está usando l2jserver?

Loki 17-09-2009 05:51 PM

mano eu to usando l2emu versao 1438 e a melhor ate agora eu to ela e so tenho novidades add varias coisas e resolvi alguns bugs safadinhos nela mais e a melhor as outras encontrei varios bugs ae to querendo apenas isso para completar meu server
essa parada ae de mudar a classe pop - up e um sistema de vip donate tipo que mude a cor do nick dos donates esero que se vc puder postar ae mano a diff do seu classe por janela e um sistema de mudar a cor eu add aqui no meu obrigado

Aquilis 18-09-2009 02:56 PM

Pronto, a DP continua a mesma. Se não der para aplicar pelo path aplique manualmente.

Core:
Código:

Index: /java/com/l2emu/gameserver/network/clientpackets/RequestBypassToServer.java
===================================================================
--- /java/com/l2emu/gameserver/network/clientpackets/RequestBypassToServer.java        (revision 2797)
+++ /java/com/l2emu/gameserver/network/clientpackets/RequestBypassToServer.java        (working copy)
@@ -27,6 +27,7 @@
 import com.l2emu.gameserver.model.L2CharPosition;
 import com.l2emu.gameserver.model.L2Object;
 import com.l2emu.gameserver.model.L2World;
+import com.l2emu.gameserver.model.actor.instance.L2ClassMasterInstance;
 import com.l2emu.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2emu.gameserver.model.actor.instance.L2PcInstance;
 import com.l2emu.gameserver.model.entity.L2Event;
@@ -116,7 +117,7 @@
                                        L2Object object = L2World.getInstance().findObject(Integer.parseInt(id));
 
                                        if (_command.substring(endOfId+1).startsWith("event_participate")) L2Event.inscribePlayer(activeChar);
-                                        else if (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false))
+                                        else if ((Config.ALLOW_CLASS_MASTERS && object instanceof L2ClassMasterInstance) || (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false)))
                                        {
                                                ((L2NpcInstance)object).onBypassFeedback(activeChar, _command.substring(endOfId+1));
                                        }
Index: /java/com/l2emu/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- /java/com/l2emu/gameserver/network/clientpackets/EnterWorld.java        (revision 2797)
+++ /java/com/l2emu/gameserver/network/clientpackets/EnterWorld.java        (working copy)
@@ -46,7 +46,10 @@
 import com.l2emu.gameserver.model.L2Clan;
 import com.l2emu.gameserver.model.L2Effect;
 import com.l2emu.gameserver.model.L2World;
+import com.l2emu.gameserver.model.actor.instance.L2ClassMasterInstance;
 import com.l2emu.gameserver.model.actor.instance.L2PcInstance;
+import com.l2emu.gameserver.model.base.ClassLevel;
+import com.l2emu.gameserver.model.base.PlayerClass;
 import com.l2emu.gameserver.model.entity.ClanHall;
 import com.l2emu.gameserver.model.entity.Couple;
 import com.l2emu.gameserver.model.entity.Fort;
@@ -340,6 +343,23 @@
        activeChar.onPlayerEnter();
       
        sendPacket(new SkillCoolTime(activeChar));
+       
+                if(Config.ALLOW_CLASS_MASTERS)
+                        {
+                                ClassLevel lvlnow = PlayerClass.values()[activeChar.getClassId().getId()].getLevel();
+                                if(activeChar.getLevel() >= 20 && lvlnow == ClassLevel.First)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                                else if(activeChar.getLevel() >= 40 && lvlnow == ClassLevel.Second)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                                else if(activeChar.getLevel() >= 76 && lvlnow == ClassLevel.Third)
+                                {
+                                        L2ClassMasterInstance.ClassMaster.onAction(activeChar);
+                                }
+                        }
 
        if (Olympiad.getInstance().playerInStadia(activeChar))
        {
Index: /java/com/l2emu/gameserver/model/actor/instance/L2ClassMasterInstance.java
===================================================================
--- /java/com/l2emu/gameserver/model/actor/instance/L2ClassMasterInstance.java        (revision 2797)
+++ /java/com/l2emu/gameserver/model/actor/instance/L2ClassMasterInstance.java        (working copy)
@@ -16,18 +16,17 @@
 
 import javolution.text.TextBuilder;
 import com.l2emu.Config;
-import com.l2emu.gameserver.ai.CtrlIntention;
 import com.l2emu.gameserver.datatables.CharTemplateTable;
+import com.l2emu.gameserver.datatables.NpcTable;
+import com.l2emu.gameserver.model.L2World;
 import com.l2emu.gameserver.model.base.ClassId;
 import com.l2emu.gameserver.model.base.ClassLevel;
 import com.l2emu.gameserver.model.base.PlayerClass;
 import com.l2emu.gameserver.model.quest.Quest;
 import com.l2emu.gameserver.network.SystemMessageId;
 import com.l2emu.gameserver.network.serverpackets.ActionFailed;
-import com.l2emu.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2emu.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2emu.gameserver.network.serverpackets.SystemMessage;
-import com.l2emu.gameserver.network.serverpackets.ValidateLocation;
 import com.l2emu.gameserver.templates.chars.L2NpcTemplate;
 
 /**
@@ -40,6 +39,12 @@
        //private static Logger _log = Logger.getLogger(L2ClassMasterInstance.class.getName());
        private static final int[] SECONDN_CLASS_IDS = {2,3,5,6,9,8,12,13,14,16,17,20,21,23,24,27,
                                                                                                        28,30,33,34,36,37,40,41,43,46,48,51,52,55,57};
+       
+                public static L2ClassMasterInstance ClassMaster = new L2ClassMasterInstance(31228, NpcTable.getInstance().getTemplate(31228));
+                static
+                {
+                        L2World.getInstance().storeObject(ClassMaster);
+                }
 
        /**
          * @param template
@@ -52,109 +57,90 @@
        @Override
        public void onAction(L2PcInstance player)
        {
-                if (!canTarget(player)) return;
+                if (Config.DEBUG)
+                _log.fine("ClassMaster activated");
 
-                // Check if the L2PcInstance already target the L2NpcInstance
-                if (getObjectId() != player.getTargetId())
-                {
-                        // Set the target of the L2PcInstance player
-                        player.setTarget(this);
+                ClassId classId = player.getClassId();
 
-                        // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-                        player.sendPacket(new MyTargetSelected(getObjectId(), 0));
-
-                        // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-                        player.sendPacket(new ValidateLocation(this));
+                                int jobLevel = 0;
+                                int level = player.getLevel();
+                                ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel();
+                                switch (lvl)
+                                {
+                                        case First:
+                                                jobLevel = 1;
+                                                break;
+                                        case Second:
+                                                jobLevel = 2;
+                                                break;
+                                        case Third:
+                                                jobLevel = 3;
+                                                break;
+                                        default:
+                                                jobLevel = 4;
                }
-                else
+                                                       
+                                                if (!Config.ALLOW_CLASS_MASTERS)
+                                                        jobLevel = 3;
+                               
+                                                if(player.isGM())
                {
-                        if (!canInteract(player))
+                                                                                showChatWindowChooseClass(player);
+                                                                        }
+                                                                        else if (((level >= 20 && jobLevel == 1 ) ||
+                                                                                (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS)
+                                                                        {
+                                                                                showChatWindow(player, classId.getId());
+                                                                        }
+                                                                        else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88)
+                                                                        {
+                                                                                for (int i = 0; i < SECONDN_CLASS_IDS.length; i++)
                        {
-                                player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
-                                return;
+                                                                                                                        if (classId.getId() == SECONDN_CLASS_IDS[i])
+                                                                                                                        {
+                                                                                                                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+                                                                                                            TextBuilder sb = new TextBuilder();
+                                                                                                            sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br><font color=AAAAAA>Please choose from the list of classes below...</font><br><br>");
+                                                                                                            sb.append("<a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a><br>");
+                                                                                                            sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
+                                                                                                            html.setHtml(sb.toString());
+                                                                                                            player.sendPacket(html);
+                                                                                                            break;
+                                                                                                                        }
                        }
 
-                        if (Config.DEBUG)
-                                _log.fine("ClassMaster activated");
-
-                        ClassId classId = player.getClassId();
-
-                        int jobLevel = 0;
-                        int level = player.getLevel();
-                        ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel();
-                        switch (lvl)
+                                                                                                }
+                                                                                else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer
+                                                                                {
+                                                                                        showChatWindow(player, classId.getId());
+                                                                                }
+                                                                                else
+                                                                                        {
+                                                                                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+                                                                                        TextBuilder sb = new TextBuilder();
+                                                                                                sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
+                                                                                                switch (jobLevel)
                        {
-                                case First:
-                                        jobLevel = 1;
+                                case 1:
+                                    sb.append("Come back here when you reach level 20 to change your class.<br>");
                                        break;
-                                case Second:
-                                        jobLevel = 2;
+                                case 2:
+                                        sb.append("Come back here when you reach level 40 to change your class.<br>");
                                        break;
-                                default:
-                                        jobLevel = 3;
+                                case 3:
+                                        sb.append("Come back here when you reach level 76 to change your class.<br>");
+                                        break;
+                                case 4:
+                                        sb.append("There are no more class changes for you.<br>");
+                                        break;
                        }
 
-                        if (!Config.ALLOW_CLASS_MASTERS)
-                                jobLevel = 3;
+                        for (Quest q : Quest.findAllEvents())
+                                sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>");
 
-                        if(player.isGM())
-                        {
-                                showChatWindowChooseClass(player);
-                        }
-                        else if (((level >= 20 && jobLevel == 1 ) ||
-                                (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS)
-                        {
-                                showChatWindow(player, classId.getId());
-                        }
-                        else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88)
-                        {
-                                for (int i = 0; i < SECONDN_CLASS_IDS.length; i++)
-                                {
-                                        if (classId.getId() == SECONDN_CLASS_IDS[i])
-                                        {
-                        NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-                        TextBuilder sb = new TextBuilder();
-                        sb.append("<html><body<table width=200>");
-                        sb.append("<tr><td><center>"+CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId())+" Class Master:</center></td></tr>");
-                        sb.append("<tr><td><br></td></tr>");
-                        sb.append("<tr><td><a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a></td></tr>");
-                        sb.append("<tr><td><br></td></tr>");
-                        sb.append("</table></body></html>");
-                        html.setHtml(sb.toString());
-                        player.sendPacket(html);
-                        break;
-                                        }
-                                }
-                        }
-            else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer
-            {
-                showChatWindow(player, classId.getId());
-            }
-                        else
-                        {
-                                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-                                TextBuilder sb = new TextBuilder();
-                                sb.append("<html><body>");
-                                switch (jobLevel)
-                                {
-                                        case 1:
-                                                sb.append("Come back here when you reach level 20 to change your class.<br>");
-                                                break;
-                                        case 2:
-                                                sb.append("Come back here when you reach level 40 to change your class.<br>");
-                                                break;
-                                        case 3:
-                                                sb.append("There are no more class changes for you.<br>");
-                                                break;
-                                }
-
-                                for (Quest q : Quest.findAllEvents())
-                                        sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>");
-
-                                sb.append("</body></html>");
-                                html.setHtml(sb.toString());
-                                player.sendPacket(html);
-                        }
+                                                sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
+                                                html.setHtml(sb.toString());
+                                                player.sendPacket(html);
                }
                player.sendPacket(ActionFailed.STATIC_PACKET);
        }
@@ -219,9 +205,9 @@
 
                NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
                TextBuilder sb = new TextBuilder();
-                sb.append("<html><body>");
+                sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
                sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>.");
-                sb.append("</body></html>");
+                sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
 
                html.setHtml(sb.toString());
                player.sendPacket(html);
@@ -280,9 +266,9 @@
 
            NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
            TextBuilder sb = new TextBuilder();
-            sb.append("<html><body>");
+            sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>");
            sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>.");
-            sb.append("</body></html>");
+            sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>");
 
            html.setHtml(sb.toString());
            player.sendPacket(html);
Index: /java/com/l2emu/gameserver/model/actor/stat/PcStat.java
===================================================================
--- /java/com/l2emu/gameserver/model/actor/stat/PcStat.java        (revision 2797)
+++ /java/com/l2emu/gameserver/model/actor/stat/PcStat.java        (working copy)
@@ -16,9 +16,12 @@
 
 import com.l2emu.Config;
 import com.l2emu.gameserver.model.L2Character;
+import com.l2emu.gameserver.model.actor.instance.L2ClassMasterInstance;
 import com.l2emu.gameserver.model.actor.instance.L2PcInstance;
 import com.l2emu.gameserver.model.actor.instance.L2PetInstance;
+import com.l2emu.gameserver.model.base.ClassLevel;
 import com.l2emu.gameserver.model.base.Experience;
+import com.l2emu.gameserver.model.base.PlayerClass;
 import com.l2emu.gameserver.model.quest.QuestState;
 import com.l2emu.gameserver.network.SystemMessageId;
 import com.l2emu.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
@@ -152,6 +155,24 @@
                if (getLevel() + value > Experience.MAX_LEVEL - 1) return false;
 
        boolean levelIncreased = super.addLevel(value);
+       
+             
+                if(Config.ALLOW_CLASS_MASTERS)
+                {
+                        ClassLevel lvlnow = PlayerClass.values()[getActiveChar().getClassId().getId()].getLevel();
+                        if(getLevel() >= 20 && lvlnow == ClassLevel.First)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                        else if(getLevel() >= 40 && lvlnow == ClassLevel.Second)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                        else if(getLevel() >= 76 && lvlnow == ClassLevel.Third)
+                        {
+                                L2ClassMasterInstance.ClassMaster.onAction(getActiveChar());
+                        }
+                }
        if (levelIncreased)
        {



Horários baseados na GMT -3. Agora são 12:32 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.