Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P aCis_gameserver
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 1)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
- @@ -1,25 +1,46 @@
- package net.sf.l2j.gameserver.network.clientpackets;
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.util.Collection;
- import java.util.StringTokenizer;
- import java.util.logging.Logger;
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- +import net.sf.l2j.commons.lang.StringUtil;
- +import net.sf.l2j.commons.util.GmInfo;
- +
- import net.sf.l2j.Config;
- +import net.sf.l2j.L2DatabaseFactory;
- import net.sf.l2j.gameserver.communitybbs.CommunityBoard;
- +import net.sf.l2j.gameserver.data.sql.PlayerInfoTable;
- import net.sf.l2j.gameserver.data.xml.AdminData;
- import net.sf.l2j.gameserver.handler.AdminCommandHandler;
- import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
- +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditChar;
- +import net.sf.l2j.gameserver.model.L2Skill;
- import net.sf.l2j.gameserver.model.World;
- import net.sf.l2j.gameserver.model.WorldObject;
- import net.sf.l2j.gameserver.model.actor.Npc;
- import net.sf.l2j.gameserver.model.actor.instance.OlympiadManagerNpc;
- import net.sf.l2j.gameserver.model.actor.instance.Player;
- +import net.sf.l2j.gameserver.model.base.Sex;
- import net.sf.l2j.gameserver.model.entity.Hero;
- +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- +import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
- +import net.sf.l2j.gameserver.model.olympiad.Olympiad;
- import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
- +import net.sf.l2j.gameserver.network.CloseGame;
- import net.sf.l2j.gameserver.network.FloodProtectors;
- import net.sf.l2j.gameserver.network.FloodProtectors.Action;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- +import net.sf.l2j.gameserver.network.serverpackets.ConfirmDlg;
- +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
- +import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
- import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- +import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
- +import net.sf.l2j.gameserver.templates.StatsSet;
- public final class RequestBypassToServer extends L2GameClientPacket
- {
- @@ -174,5 +195,780 @@
- final int arenaId = Integer.parseInt(_command.substring(12).trim());
- player.enterOlympiadObserverMode(arenaId);
- }
- + else if (this._command.startsWith("classe_change"))
- + {
- + StringTokenizer st = new StringTokenizer(this._command);
- + st.nextToken();
- + String type = null;
- + type = st.nextToken();
- + try
- + {
- + if (player.getBaseClass() != player.getClassId().getId())
- + {
- + player.sendMessage("SYS: Voce precisa estar com sua Classe Base para usar este item.");
- + player.sendPacket(new ExShowScreenMessage("You is not with its base class.", 6000, 2, true));
- + return;
- + }
- + if (player.isInOlympiadMode())
- + {
- + player.sendMessage("This Item Cannot Be Used On Olympiad Games.");
- + return;
- + }
- + ClassChangeCoin(player, type);
- + }
- + catch (StringIndexOutOfBoundsException localStringIndexOutOfBoundsException) {}
- + }
- + else if (this._command.startsWith("classe_index"))
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + html.setFile("data/html/mods/ChangeClasses/classes.htm");
- + player.sendPacket(html);
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- + else if (this._command.startsWith("classe_aviso"))
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + html.setFile("data/html/mods/ChangeClasses/aviso.htm");
- + player.sendPacket(html);
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- }
- +
- + private static void ClassChangeCoin(Player player, String command)
- + {
- + String nameclasse = player.getTemplate().getClassName();
- +
- + String type = command;
- + if (type.equals("---SELECIONE---"))
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + html.setFile("data/html/mods/ChangeClasses/classes.htm");
- + player.sendPacket(html);
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + player.sendMessage("Por favor, Selecione a Classe desejada para continuar.");
- + }
- + if (type.equals("Duelist"))
- + {
- + if (player.getClassId().getId() == 88)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(88);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(88);
- +
- + Finish(player);
- + }
- + if (type.equals("DreadNought"))
- + {
- + if (player.getClassId().getId() == 89)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(89);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(89);
- +
- + Finish(player);
- + }
- + if (type.equals("Phoenix_Knight"))
- + {
- + if (player.getClassId().getId() == 90)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(90);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(90);
- +
- + Finish(player);
- + }
- + if (type.equals("Hell_Knight"))
- + {
- + if (player.getClassId().getId() == 91)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(91);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(91);
- +
- + Finish(player);
- + }
- + if (type.equals("Sagittarius"))
- + {
- + if (player.getClassId().getId() == 92)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(92);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(92);
- +
- + Finish(player);
- + }
- + if (type.equals("Adventurer"))
- + {
- + if (player.getClassId().getId() == 93)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(93);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(93);
- +
- + Finish(player);
- + }
- + if (type.equals("Archmage"))
- + {
- + if (player.getClassId().getId() == 94)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(94);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(94);
- +
- + Finish(player);
- + }
- + if (type.equals("Soultaker"))
- + {
- + if (player.getClassId().getId() == 95)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(95);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(95);
- +
- + Finish(player);
- + }
- + if (type.equals("Arcana_Lord"))
- + {
- + if (player.getClassId().getId() == 96)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(96);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(96);
- +
- + Finish(player);
- + }
- + if (type.equals("Cardinal"))
- + {
- + if (player.getClassId().getId() == 97)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(97);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(97);
- +
- + Finish(player);
- + }
- + if (type.equals("Hierophant"))
- + {
- + if (player.getClassId().getId() == 98)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(98);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(98);
- +
- + Finish(player);
- + }
- + if (type.equals("Eva_Templar"))
- + {
- + if (player.getClassId().getId() == 99)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(99);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(99);
- +
- + Finish(player);
- + }
- + if (type.equals("Sword_Muse"))
- + {
- + if (player.getClassId().getId() == 100)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(100);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(100);
- +
- + Finish(player);
- + }
- + if (type.equals("Wind_Rider"))
- + {
- + if (player.getClassId().getId() == 101)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(101);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(101);
- +
- + Finish(player);
- + }
- + if (type.equals("Moonli_Sentinel"))
- + {
- + if (player.getClassId().getId() == 102)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(102);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(102);
- +
- + Finish(player);
- + }
- + if (type.equals("Mystic_Muse"))
- + {
- + if (player.getClassId().getId() == 103)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(103);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(103);
- +
- + Finish(player);
- + }
- + if (type.equals("Elemental_Master"))
- + {
- + if (player.getClassId().getId() == 104)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(104);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(104);
- +
- + Finish(player);
- + }
- + if (type.equals("Eva_Saint"))
- + {
- + if (player.getClassId().getId() == 105)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(105);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(105);
- +
- + Finish(player);
- + }
- + if (type.equals("Shillien_Templar"))
- + {
- + if (player.getClassId().getId() == 106)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(106);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(106);
- +
- + Finish(player);
- + }
- + if (type.equals("Spectral_Dancer"))
- + {
- + if (player.getClassId().getId() == 107)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(107);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(107);
- +
- + Finish(player);
- + }
- + if (type.equals("Ghost_Hunter"))
- + {
- + if (player.getClassId().getId() == 108)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(108);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(108);
- +
- + Finish(player);
- + }
- + if (type.equals("Ghost_Sentinel"))
- + {
- + if (player.getClassId().getId() == 109)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(109);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(109);
- +
- + Finish(player);
- + }
- + if (type.equals("Storm_Screamer"))
- + {
- + if (player.getClassId().getId() == 110)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(110);
- + if (!player.isSubClassActive())
- + player.setBaseClass(110);
- +
- + Finish(player);
- + }
- + if (type.equals("Spectral_Master"))
- + {
- + if (player.getClassId().getId() == 111)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(111);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(111);
- +
- + Finish(player);
- + }
- + if (type.equals("Shillen_Saint"))
- + {
- + if (player.getClassId().getId() == 112)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(112);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(112);
- +
- + Finish(player);
- + }
- + if (type.equals("Titan"))
- + {
- + if (player.getClassId().getId() == 113)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(113);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(113);
- +
- + Finish(player);
- + }
- + if (type.equals("Grand_Khauatari"))
- + {
- + if (player.getClassId().getId() == 114)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- +
- + RemoverSkills(player);
- +
- + player.setClassId(114);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(114);
- +
- + Finish(player);
- + }
- + if (type.equals("Dominator"))
- + {
- + if (player.getClassId().getId() == 115)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(115);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(115);
- +
- + Finish(player);
- + }
- + if (type.equals("Doomcryer"))
- + {
- + if (player.getClassId().getId() == 116)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(116);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(116);
- +
- + Finish(player);
- + }
- + if (type.equals("Fortune_Seeker"))
- + {
- + if (player.getClassId().getId() == 117)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(117);
- + if (!player.isSubClassActive())
- + player.setBaseClass(117);
- +
- + Finish(player);
- + }
- + if (type.equals("Maestro"))
- + {
- + if (player.getClassId().getId() == 118)
- + {
- + player.sendMessage("Sorry, you're already in the Classroom. " + nameclasse + ".");
- + return;
- + }
- + RemoverSkills(player);
- +
- + player.setClassId(118);
- +
- + if (!player.isSubClassActive())
- + player.setBaseClass(118);
- +
- + Finish(player);
- + }
- + }
- +
- + private static void RemoverSkills(Player activeChar)
- + {
- + Collection<L2Skill> skills = activeChar.getSkills().values();
- + for (L2Skill skill : skills)
- + activeChar.removeSkill(skill.getId(), true);
- +
- + activeChar.destroyItemByItemId("Classe Change", activeChar.getClassChangeItemId(), 1, null, true);
- + }
- +
- + private static void Finish(Player activeChar)
- + {
- + String newclass = activeChar.getTemplate().getClassName();
- + activeChar.sendMessage(activeChar.getName() + " is now a " + newclass + ".");
- + activeChar.sendPacket(new ExShowScreenMessage("Congratulations. You is now a " + newclass + ".", 6000, 2, true));
- + activeChar.refreshOverloaded();
- + activeChar.store();
- + activeChar.broadcastUserInfo();
- + activeChar.sendSkillList();
- + activeChar.sendPacket(new PlaySound("ItemSound.quest_finish"));
- +
- + if (activeChar.isNoble())
- + {
- + StatsSet playerStat = Olympiad.getNobleStats(activeChar.getObjectId());
- + if (playerStat != null)
- + {
- + AdminEditChar.updateClasse(activeChar);
- + AdminEditChar.DeleteHero(activeChar);
- + activeChar.sendMessage("You now has " + Olympiad.getInstance().getNoblePoints(activeChar.getObjectId()) + " Olympiad points.");
- + }
- + }
- + try (Connection con = L2DatabaseFactory.getInstance().getConnection())
- + {
- + PreparedStatement statement = con.prepareStatement("DELETE FROM character_hennas WHERE char_obj_id=? AND class_index=?");
- + statement.setInt(1, activeChar.getObjectId());
- + statement.setInt(2, 0);
- + statement.execute();
- + statement.close();
- + }
- + catch (Exception e)
- + {
- + LOGGER.warn("Class Item: " + e);
- + }
- + ThreadPool.schedule(new CloseGame(activeChar, 5), 0L);
- + }
- +
- + public static void sleep(Player activeChar, int seconds)
- + {
- + try
- + {
- + Thread.sleep(seconds * 1000);
- + }
- + catch (InterruptedException e)
- + {
- + e.printStackTrace();
- + }
- + }
- }
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/model/actor/instance/Player.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/actor/instance/Player.java (revision 1)
- +++ java/net/sf/l2j/gameserver/model/actor/instance/Player.java (working copy)
- @@ -10298,9 +10303,43 @@
- }
- }
- }
- +
- + private int _classChangeItemId = 0;
- + public int getClassChangeItemId()
- + {
- + return _classChangeItemId;
- + }
- +
- + public void setClassChangeItemId(int itemId)
- + {
- + _classChangeItemId = itemId;
- + }
- }
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/handler/ItemHandler.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/ItemHandler.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/ItemHandler.java (working copy)
- @@ -9,6 +9,11 @@
- import net.sf.l2j.gameserver.handler.itemhandlers.BlessedSpiritShot;
- import net.sf.l2j.gameserver.handler.itemhandlers.Book;
- import net.sf.l2j.gameserver.handler.itemhandlers.Calculator;
- +import net.sf.l2j.gameserver.handler.itemhandlers.ChangeClass;
- import net.sf.l2j.gameserver.handler.itemhandlers.Elixir;
- import net.sf.l2j.gameserver.handler.itemhandlers.EnchantScrolls;
- import net.sf.l2j.gameserver.handler.itemhandlers.FishShots;
- @@ -44,6 +51,11 @@
- registerHandler(new BlessedSpiritShot());
- registerHandler(new Book());
- registerHandler(new Calculator());
- + registerHandler(new ChangeClass());
- registerHandler(new Elixir());
- registerHandler(new EnchantScrolls());
- registerHandler(new FishShots());
- Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (revision 1)
- +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (working copy)
- @@ -3,6 +3,7 @@
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.util.ArrayList;
- +import java.util.Collection;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.HashMap;
- @@ -9,10 +10,14 @@
- import java.util.List;
- import java.util.Map;
- import java.util.StringTokenizer;
- +import java.util.logging.Level;
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- import net.sf.l2j.commons.lang.StringUtil;
- +import net.sf.l2j.commons.logging.CLogger;
- import net.sf.l2j.commons.math.MathUtil;
- +import net.sf.l2j.Config;
- import net.sf.l2j.L2DatabaseFactory;
- import net.sf.l2j.gameserver.data.manager.CastleManager;
- import net.sf.l2j.gameserver.data.sql.PlayerInfoTable;
- @@ -20,6 +25,7 @@
- import net.sf.l2j.gameserver.data.xml.PlayerData;
- import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
- import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
- +import net.sf.l2j.gameserver.model.L2Skill;
- import net.sf.l2j.gameserver.model.World;
- import net.sf.l2j.gameserver.model.WorldObject;
- import net.sf.l2j.gameserver.model.actor.Npc;
- @@ -29,17 +35,25 @@
- import net.sf.l2j.gameserver.model.base.ClassId;
- import net.sf.l2j.gameserver.model.base.Sex;
- import net.sf.l2j.gameserver.model.group.Party;
- +import net.sf.l2j.gameserver.model.olympiad.Olympiad;
- import net.sf.l2j.gameserver.model.pledge.Clan;
- +import net.sf.l2j.gameserver.network.CloseGame;
- import net.sf.l2j.gameserver.network.L2GameClient;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.AbstractNpcInfo.NpcInfo;
- +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
- import net.sf.l2j.gameserver.network.serverpackets.GMViewItemList;
- import net.sf.l2j.gameserver.network.serverpackets.HennaInfo;
- import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- +import net.sf.l2j.gameserver.templates.StatsSet;
- public class AdminEditChar implements IAdminCommandHandler
- {
- private static final int PAGE_LIMIT = 20;
- + private static final CLogger LOGGER = new CLogger(AdminEditChar.class.getName());
- private static final String[] ADMIN_COMMANDS =
- {
- @@ -103,7 +117,7 @@
- {
- try (Connection con = L2DatabaseFactory.getInstance().getConnection();
- PreparedStatement ps = con.prepareStatement("UPDATE characters SET accesslevel=? WHERE char_name=?"))
- - {
- + {
- ps.setInt(1, lvl);
- ps.setString(2, name);
- ps.execute();
- @@ -113,7 +127,7 @@
- activeChar.sendMessage("Player can't be found or access level unaltered.");
- else
- activeChar.sendMessage("Player's access level is now set to " + lvl);
- - }
- + }
- catch (Exception e)
- {
- }
- @@ -252,6 +266,120 @@
- else
- return false;
- + Collection<L2Skill> skills = activeChar.getSkills().values();
- + for (L2Skill skill : skills)
- + activeChar.removeSkill(skill.getId(), true);
- +
- + if ((player.getBaseClass() != player.getClassId().getId()) && (!player.isGM()))
- + {
- + activeChar.sendPacket(new ExShowScreenMessage("Player is not with its base class.", 6000, 2, true));
- + return false;
- + }
- boolean valid = false;
- final int classidval = Integer.parseInt(command.substring(15));
- @@ -258,7 +386,7 @@
- for (ClassId classid : ClassId.VALUES)
- if (classidval == classid.getId())
- valid = true;
- -
- +
- if (valid && (player.getClassId().getId() != classidval))
- {
- player.setClassId(classidval);
- @@ -271,16 +399,39 @@
- player.store();
- player.sendPacket(new HennaInfo(player));
- player.broadcastUserInfo();
- + player.sendSkillList();
- // Messages
- if (player != activeChar)
- player.sendMessage("A GM changed your class to " + newclass + ".");
- activeChar.sendMessage(player.getName() + " is now a " + newclass + ".");
- +
- + if (!player.isGM())
- + ThreadPool.schedule(new CloseGame(player, 5), 0L);
- +
- + if (player.isNoble())
- + {
- + StatsSet playerStat = Olympiad.getNobleStats(player.getObjectId());
- + if (playerStat == null)
- + {
- + activeChar.sendMessage("Oops! This player hasn't played on Olympiad yet!");
- + return false;
- + }
- + updateClasse(player);
- + DeleteHero(player);
- +
- + activeChar.sendMessage("Player " + player.getName() + " now has " + Olympiad.getInstance().getNoblePoints(player.getObjectId()) + " Olympiad points.");
- + }
- + else
- + {
- + activeChar.sendMessage("Oops! This player is not noblesse!");
- + return false;
- + }
- }
- else
- activeChar.sendMessage("Usage: //setclass <valid classid>");
- }
- - catch (Exception e)
- + catch (StringIndexOutOfBoundsException e)
- {
- AdminHelpPage.showHelpPage(activeChar, "charclasses.htm");
- }
- @@ -975,13 +1126,13 @@
- List<String> keys = new ArrayList<>(dualboxIPs.keySet());
- Collections.sort(keys, new Comparator<String>()
- - {
- + {
- @Override
- public int compare(String left, String right)
- {
- return dualboxIPs.get(left).compareTo(dualboxIPs.get(right));
- }
- - });
- + });
- Collections.reverse(keys);
- final StringBuilder sb = new StringBuilder();
- @@ -1031,6 +1182,50 @@
- activeChar.sendPacket(html);
- }
- + public static void updateClasse(Player player)
- + {
- + if (player == null)
- + return;
- +
- + try(Connection con = L2DatabaseFactory.getInstance().getConnection())
- + {
- + PreparedStatement stmt = con.prepareStatement("UPDATE olympiad_nobles SET class_id=?, olympiad_points=?, competitions_done=?, competitions_won=?, competitions_lost=?, competitions_drawn=? WHERE char_Id=?");
- +
- + stmt.setInt(1, player.getClassId().getId());
- + stmt.setInt(2, 18);
- + stmt.setInt(3, 0);
- + stmt.setInt(4, 0);
- + stmt.setInt(5, 0);
- + stmt.setInt(6, 0);
- + stmt.setInt(7, player.getObjectId());
- + stmt.execute();
- + stmt.close();
- + stmt = null;
- + }
- + catch (Exception e)
- + {
- + if (Config.DEBUG)
- + e.printStackTrace();
- +
- + LOGGER.info(Level.SEVERE, "[Class Coin]: Error updating Class: ", e);
- + }
- + }
- +
- + public static void DeleteHero(Player player)
- + {
- + try (Connection con = L2DatabaseFactory.getInstance().getConnection())
- + {
- + PreparedStatement statement = con.prepareStatement("DELETE FROM heroes WHERE char_id=?");
- + statement.setInt(1, player.getObjectId());
- + statement.execute();
- + statement.close();
- + }
- + catch (Exception e)
- + {
- + LOGGER.warn("could not clear char Hero: " + e);
- + }
- + }
- +
- @Override
- public String[] getAdminCommandList()
- {
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/handler/itemhandlers/ChangeClass.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/itemhandlers/ChangeClass.java (revision 0)
- +++ java/net/sf/l2j/gameserver/handler/itemhandlers/ChangeClass.java (working copy)
- @@ -0,0 +1,35 @@
- +package net.sf.l2j.gameserver.handler.itemhandlers;
- +
- +import net.sf.l2j.gameserver.handler.IItemHandler;
- +import net.sf.l2j.gameserver.model.actor.Playable;
- +import net.sf.l2j.gameserver.model.actor.instance.Player;
- +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- +import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
- +
- +/**
- + * @author Williams
- + *
- + */
- +public class ChangeClass implements IItemHandler
- +{
- + @Override
- + public void useItem(Playable playable, ItemInstance item, boolean forceUse)
- + {
- + if (!(playable instanceof Player))
- + return;
- +
- + Player activeChar = (Player)playable;
- + if (activeChar.isInOlympiadMode())
- + {
- + activeChar.sendMessage("SYS: You can not do that.");
- + return;
- + }
- + activeChar.setClassChangeItemId(item.getItemId());
- +
- + NpcHtmlMessage html = new NpcHtmlMessage(0);
- + html.setFile("data/html/mods/ChangeClasses/aviso.htm");
- + activeChar.sendPacket(html);
- + activeChar.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- +}
- Index: java/net/sf/l2j/gameserver/network/CloseGame.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/CloseGame.java (revision 0)
- +++ java/net/sf/l2j/gameserver/network/CloseGame.java (working copy)
- @@ -0,0 +1,72 @@
- +package net.sf.l2j.gameserver.network;
- +
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- +
- +import net.sf.l2j.gameserver.model.actor.instance.Player;
- +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
- +
- +public class CloseGame implements Runnable
- +{
- + private final Player _player;
- + private int _time;
- +
- + public CloseGame(Player player, int time)
- + {
- + _time = time;
- + _player = player;
- + }
- +
- + @Override
- + public void run()
- + {
- + if (_player.isOnline())
- + {
- + switch (_time)
- + {
- + case 60:
- + case 120:
- + case 180:
- + case 240:
- + case 300:
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time / 60 + " minute(s) ..");
- + break;
- + case 20:
- + case 30:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 3000));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 15:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 3000));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 10:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 3000));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 5:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 1500));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 4:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 1500));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 3:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 1500));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 2:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 1500));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + break;
- + case 1:
- + _player.sendPacket(new ExShowScreenMessage("" + _time + " ..", 1500));
- + _player.sendChatMessage(0, 0, "SYS", "Desconecting in " + _time + " second(s) ..");
- + ThreadPool.schedule(() -> _player.logout(false), _time);
- + }
- +
- + if (_time > 1)
- + ThreadPool.schedule(new CloseGame(_player, _time - 1), 1000L);
- + }
- + }
- +}
- \ No newline at end of file
- #P aCis_datapack
- Index: data/html/mods/ChangeClasses/aviso.htm
- ===================================================================
- --- data/html/mods/ChangeClasses/aviso.htm (revision 0)
- +++ data/html/mods/ChangeClasses/aviso.htm (working copy)
- @@ -0,0 +1,92 @@
- +<html><title>Change Class</title><body>
- +<center>
- +<img src="l2font-e.replay_logo-e" width=250 height=65>
- +<table><tr><td height=7>
- +<img src="L2UI.SquareGray" width=220 height=1>
- +</td></tr></table>
- +<img src="L2UI.SquareGray" width=295 height=1>
- +<table bgcolor=000000 width=300>
- + <tr>
- + <td><center><font color="CD6339">: TERMOS DE USO :</font></center></td>
- + </tr>
- +</table>
- +<table><tr><td height=7>
- +<img src="L2UI.SquareGray" width=295 height=1>
- +</td></tr></table>
- +<img src="L2UI.SquareGray" width=220 height=1>
- +<br>
- +<img src="l2ui_ch3.herotower_deco" width=256 height=32>
- +<br>
- +<font color="ff9900" align="center">Requisitos:</font>
- +<br1>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +<br1>
- +</center>
- +<table width=300>
- + <tr>
- + <td><img src="L2UI.bbs_boardmaster" width=16 height=16></td>
- + <td> - <font color="00ffe6">Classe Base</font>: Esteja com sua classe Base.</td>
- + </tr>
- +</table>
- +<center>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +</center>
- +
- +<center>
- +<br>
- +<font color="ff9900" align="center">Consequencias:</font>
- +<br1>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +<br1>
- +</center>
- +<table width=300>
- + <tr>
- + <td><img src="L2UI.bbs_boardmaster" width=16 height=16></td>
- + <td> - <font color="00ffe6">Skills</font>: Todas as Skills da classe base serao deletas.</td>
- + </tr>
- +</table>
- +<br1>
- +<center>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +</center>
- +<table width=300>
- + <tr>
- + <td><img src="L2UI.bbs_boardmaster" width=16 height=16></td>
- + <td> - <font color="00ffe6">Hero de Olympiad</font>: Seu HERO sera removido.</td>
- + </tr>
- +</table>
- +<center>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +</center>
- +
- +<table width=300>
- + <tr>
- + <td><img src="L2UI.bbs_boardmaster" width=16 height=16></td>
- + <td> - <font color="00ffe6">Pontos Olympiad</font>: Seus pontos serao removidos.</td>
- + </tr>
- +</table>
- +<center>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +</center>
- +
- +<table width=300>
- + <tr>
- + <td><img src="L2UI.bbs_boardmaster" width=16 height=16></td>
- + <td> - <font color="00ffe6">Lutas Olympiad</font>: Suas participacoes serao removidas.</td>
- + </tr>
- +</table>
- +
- +<center>
- +
- +<br1>
- +<img src="L2UI.SquareGray" width=230 height=1>
- +<br>
- +<br>
- +<table>
- +<tr>
- +<td align=><button value="" action="" width=32 height=16 back="" fore=""></td><td><button value="Continue" action="bypass -h classe_index" width=75 height=21 back="L2UI_CH3.Btn1_normalDisable" fore="L2UI_CH3.Btn1_normalDisable"></td><td align=><button value="" action="" width=32 height=16 back="L2UI_CH3.tutorial_pointer" fore="L2UI_CH3.tutorial_pointer"></td>
- +</tr>
- +</table>
- +<br>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/html/mods/ChangeClasses/classes.htm
- ===================================================================
- --- data/html/mods/ChangeClasses/classes.htm (revision 0)
- +++ data/html/mods/ChangeClasses/classes.htm (working copy)
- @@ -0,0 +1,59 @@
- +<html><body><center>
- +Select a new class:
- +<img src="L2UI.SquareWhite" width=270 height=1><img src="L2UI.SquareBlank" width=1 height=3>
- +<table width=270 border=0 bgcolor="000000">
- + <tr>
- + <td><a action="bypass -h classe_change Duelist"><center>Duelist</center></a></td>
- + <td><a action="bypass -h classe_change Dreadnought"><center>Dreadnought</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Phoenix_Knight"><center>Phoenix Knight</center></a></td>
- + <td><a action="bypass -h classe_change Hell_Knight"><center>Hell Knight</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Sagittarius"><center>Sagittarius</center></a></td>
- + <td><a action="bypass -h classe_change Adventurer"><center>Adventurer</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Archmage"><center>Archmage</center></a></td>
- + <td><a action="bypass -h classe_change Soultaker"><center>Soultaker</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Arcana_Lord"><center>Arcana Lord</center></a></td>
- + <td><a action="bypass -h classe_change Cardinal"><center>Cardinal</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Hierophant"><center>Hierophant</center></a></td>
- + <td><a action="bypass -h classe_change Eva_Templar"><center>Eva's Templar</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Sword_Muse"><center>Sword Muse</center></a></td>
- + <td><a action="bypass -h classe_change Wind_Rider"><center>Wind Rider</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Moonli_Sentinel"><center>Moonlight Sentinel</center></a></td>
- + <td><a action="bypass -h classe_change Mystic_Muse"><center>Mystic Muse</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Elemental_Master"><center>Elemental Master</center></a></td>
- + <td><a action="bypass -h classe_change Eva_Saint"><center>Eva's Saint</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Shillien_Templar"><center>Shillien Templar</center></a></td>
- + <td><a action="bypass -h classe_change Spectral_Dancer"><center>Spectral Dancer</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Ghost_Hunter"><center>Ghost Hunter</center></a></td>
- + <td><a action="bypass -h classe_change Ghost_Sentinel"><center>Ghost Sentinel</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Storm_Screamer"><center>Storm Screamer</center></a></td>
- + <td><a action="bypass -h classe_change Spectral_Master"><center>Spectral Master</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Shillien_Saint"><center>Shillien Saint</center></a></td>
- + <td><a action="bypass -h classe_change Titan"><center>Titan</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Grand_Khavatari"><center>Grand Khavatari</center></a></td>
- + <td><a action="bypass -h classe_change Dominator"><center>Dominator</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Doomcryer"><center>Doomcryer</center></a></td>
- + <td><a action="bypass -h classe_change Fortune_Seeker"><center>Fortune Seeker</center></a></td>
- + </tr><tr>
- + <td><a action="bypass -h classe_change Maestro"><center>Maestro</center></a></td>
- + </tr>
- +</table>
- +<img src="L2UI.SquareWhite" width=270 height=1> <img src="L2UI.SquareBlank" width=1 height=3>
- +<br>
- +<br>
- +<a action="bypass -h classe_aviso">What will happen if I change my class?</a>
- +<br>
- +</center></body></html>
- \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement