Help to ask for quest itens

Horyon

Пляшущий с бубном
Участник
Сообщения
182
Розыгрыши
0
Решения
4
Репутация
53
Реакции
68
Баллы
273
Хроники
  1. Prologue: Prelude of War
Исходники
Присутствуют
Сборка
L2jMobius Master class ch2
Hi guys.

I need some help here. My idea is that Window that show with just 1 click ask for a item ID. So it can manage to ask for first class item to change, or the 3 test itens for 2 class.

If i not totally wrong here is the code

Java:
package org.l2jmobius.gameserver.network.clientpackets.classchange;


import java.util.EnumMap;
import java.util.Map;
import java.util.Map.Entry;


import org.l2jmobius.Config;
import org.l2jmobius.commons.network.ReadablePacket;
import org.l2jmobius.gameserver.data.xml.CategoryData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.data.xml.SkillTreeData;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.SkillLearn;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger;
import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExClassChangeSetAlarm;


/**
 * @author Mobius
 */
public class ExRequestClassChange implements ClientPacket
{
    private int _classId;
    private static final String AWAKE_POWER_REWARDED_VAR = "AWAKE_POWER_REWARDED";
  Reward
    private static final int CHAOS_POMANDER = 37374;
    private static final int VITALITY_MAINTAINING_RUNE = 80712;
    private static final int AWAKE_POWER_EVIS = 40268;
    private static final int AWAKE_POWER_SAYHA = 40269;
    private static final Map<CategoryType, Integer> AWAKE_POWER = new EnumMap<>(CategoryType.class);
    static
    {
        AWAKE_POWER.put(CategoryType.SIXTH_SIGEL_GROUP, 32264);
        AWAKE_POWER.put(CategoryType.SIXTH_TIR_GROUP, 32265);
        AWAKE_POWER.put(CategoryType.SIXTH_OTHEL_GROUP, 32266);
        AWAKE_POWER.put(CategoryType.SIXTH_YR_GROUP, 32267);
        AWAKE_POWER.put(CategoryType.SIXTH_FEOH_GROUP, 32268);
        AWAKE_POWER.put(CategoryType.SIXTH_WYNN_GROUP, 32269);
        AWAKE_POWER.put(CategoryType.SIXTH_IS_GROUP, 32270);
        AWAKE_POWER.put(CategoryType.SIXTH_EOLH_GROUP, 32271);
    }
    
    @Override
    public void read(ReadablePacket packet)
    {
        _classId = packet.readInt();
    }
    
    @Override
    public void run(GameClient client)
    {
        final Player player = client.getPlayer();
        if (player == null)
        {
            return;
        }
        
  Check if class id is valid.
        boolean canChange = false;
        for (ClassId cId : player.getClassId().getNextClassIds())
        {
            if (cId.getId() == _classId)
            {
                canChange = true;
                break;
            }
        }
        if (!canChange //
            && (_classId != 170) && (player.getClassId().getId() != 133)) // Female Soul Hound fix.
        {
            PacketLogger.warning(player + " tried to change class from " + player.getClassId() + " to " + ClassId.getClassId(_classId) + "!");
            return;
        }
        
  Check for player proper class group and level.
        canChange = false;
        final int playerLevel = player.getLevel();
        if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP) && (playerLevel >= 18))
        {
            canChange = CategoryData.getInstance().isInCategory(player.getRace() == Race.ERTHEIA ? CategoryType.THIRD_CLASS_GROUP : CategoryType.SECOND_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.FOURTH_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (playerLevel >= 85))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.SIXTH_CLASS_GROUP, _classId);
        }
        
  Change class.
        if (canChange)
        {
            player.setClassId(_classId);
            if (player.isSubClassActive())
            {
                player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass());
            }
            else
            {
                player.setBaseClass(player.getActiveClass());
            }
            
            if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
            {
 SkillTreeData.getInstance().cleanSkillUponChangeClass(player);  TODO: Move to skill learn method?
                for (SkillLearn skill : SkillTreeData.getInstance().getRaceSkillTree(player.getRace()))
                {
                    player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
                }
                
                if (Config.DISABLE_TUTORIAL && !player.getVariables().getBoolean(AWAKE_POWER_REWARDED_VAR, false))
                {
                    player.addItem("awake", VITALITY_MAINTAINING_RUNE, 1, player, true);
                    player.addItem("awake", CHAOS_POMANDER, 2, player, true);
                    if (player.getRace() == Race.ERTHEIA)
                    {
                        if (player.getClassId() == ClassId.EVISCERATOR)
                        {
                            player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                            player.addItem("awake", AWAKE_POWER_EVIS, 1, player, true);
                        }
                        if (player.getClassId() == ClassId.SAYHA_SEER)
                        {
                            player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                            player.addItem("awake", AWAKE_POWER_SAYHA, 1, player, true);
                        }
                    }
                    else
                    {
                        for (Entry<CategoryType, Integer> ent : AWAKE_POWER.entrySet())
                        {
                            if (player.isInCategory(ent.getKey()))
                            {
                                player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                                player.addItem("awake", ent.getValue().intValue(), 1, player, true);
                                break;
                            }
                        }
                    }
                }
            }
            
            if (Config.AUTO_LEARN_SKILLS)
            {
                player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS);
            }
            
 player.store(false);  Save player cause if server crashes before this char is saved, he will lose class.
            player.broadcastUserInfo();
            player.sendSkillList();
            player.sendPacket(new PlaySound("ItemSound.quest_fanfare_2"));
            
            if (Config.DISABLE_TUTORIAL && !player.isInCategory(CategoryType.SIXTH_CLASS_GROUP) //
                && ((player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38)) //
                    || (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76)) //
                    || (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (playerLevel >= 85))))
            {
                player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
            }
        }
    }
}

Probably need add stuff to check classID and depending on ID ask for a different itemID.

Ty for any help.
 

Java:
else
            {
                if ((_classId == WARRIOR) && (player.getClassId() == ClassId.FIGHTER) && player.getInventory.getObjectId(MEDALLION_OF_WARRIOR))
                {
                    player.setBaseClass(player.getActiveClass());
                }
               
            }

I close(i think)... but i dont find a way to check the item declared as INT, like the warrior item medallion of warrior.

"player.getInventory.getObjectId(MEDALLION_OF_WARRIOR)" this part is not valid.

How to get a valid check in players inventory for search the item?

Ty
 
Java:
 (player.getInventory().getItemByItemId(YOUR_ITEM_ID) != null)

How?... i so noob... i get so many errors cause i getting item as INT... and with "!= null" works... hahaha

Ty for ur help... i'll test

ok... it is working... but i have 1 issue left... i dont know how to remove the item... this way i try get errors also

Java:
if ((player.getClassId() == ClassId.FIGHTER) && (player.getInventory().getItemByItemId(SWORD_OF_RITUAL) != null))
                        {
                            takeItems(player, SWORD_OF_RITUAL, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }

this "takeItems" dont work from this ExRequestClassChange.java file
 
Replace with:
Java:
player.destroyItemByItemId("Change_class", SWORD_OF_RITUAL, 1, player, true);

Ty i make it work but with muuuch more code.


Java:
package org.l2jmobius.gameserver.network.clientpackets.classchange;


import java.util.EnumMap;
import java.util.Map;
import java.util.Map.Entry;


import org.l2jmobius.Config;
import org.l2jmobius.commons.network.ReadablePacket;
import org.l2jmobius.gameserver.data.xml.CategoryData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.data.xml.SkillTreeData;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.SkillLearn;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger;
import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExClassChangeSetAlarm;


/**
 * @author Mobius
 */
public class ExRequestClassChange implements ClientPacket
{
    // Items
    private static final int MEDALLION_OF_WARRIOR = 1145; // Warrior
    private static final int SWORD_OF_RITUAL = 1161; // Knight
    private static final int BEZIQUES_RECOMMENDATION = 1190; // Rogue
    private static final int ELVEN_KNIGHT_BROOCH = 1204; // Elven Knight
    private static final int REISAS_RECOMMENDATION = 1217; // Elven Scout
    private static final int MARK_OF_FAITH = 1201; // Cleric
    private static final int ETERNITY_DIAMOND = 1230; // Elven Wizard
    private static final int LEAF_OF_ORACLE = 1235; // Elven Oracle
    private static final int BEAD_OF_SEASON = 1292; // Wizard
    private static final int GAZE_OF_ABYSS = 1244; // Palus Knight
    private static final int IRON_HEART = 1252; // Assassins
    private static final int JEWEL_OF_DARKNESS = 1261; // Dark Wizard
    private static final int ORB_OF_ABYSS = 1270; // Shillien Oracle
    private static final int MARK_OF_RAIDER = 1592; // Orc Raider
    private static final int KHAVATARI_TOTEM = 1615; // Orc Monk
    private static final int MASK_OF_MEDIUM = 1631; // Orc Shamman
    private static final int RING_OF_RAVEN = 1642; // Scavenger
    private static final int FINAL_PASS_CERTIFICATE = 1635; // Artisan
    // Classes
    private static final int WARRIOR = 1;
    private static final int KNIGHT = 4;
    private static final int ROGUE = 7;
    private static final int ELVEN_KNIGHT = 19;
    private static final int ELVEN_SCOUT = 22;
    private static final int WIZARD = 11;
    private static final int CLERIC = 15;
    private static final int ELVEN_WIZARD = 26;
    private static final int ORACLE = 29;
    private static final int PALUS_KNIGHT = 32;
    private static final int ASSASSIN = 35;
    private static final int DARK_WIZARD = 39;
    private static final int SHILLIEN_ORACLE = 42;
    private static final int ORC_RAIDER = 45;
    private static final int MONK = 47;
    private static final int ORC_SHAMMAN = 50;
    private static final int SCAVENGER = 54;
    private static final int ARTISAN = 56;
   
    private int _classId;
    private static final String AWAKE_POWER_REWARDED_VAR = "AWAKE_POWER_REWARDED";
    // Reward
    private static final int CHAOS_POMANDER = 37374;
    private static final int VITALITY_MAINTAINING_RUNE = 80712;
    private static final int AWAKE_POWER_EVIS = 40268;
    private static final int AWAKE_POWER_SAYHA = 40269;
    private static final Map<CategoryType, Integer> AWAKE_POWER = new EnumMap<>(CategoryType.class);
    static
    {
        AWAKE_POWER.put(CategoryType.SIXTH_SIGEL_GROUP, 32264);
        AWAKE_POWER.put(CategoryType.SIXTH_TIR_GROUP, 32265);
        AWAKE_POWER.put(CategoryType.SIXTH_OTHEL_GROUP, 32266);
        AWAKE_POWER.put(CategoryType.SIXTH_YR_GROUP, 32267);
        AWAKE_POWER.put(CategoryType.SIXTH_FEOH_GROUP, 32268);
        AWAKE_POWER.put(CategoryType.SIXTH_WYNN_GROUP, 32269);
        AWAKE_POWER.put(CategoryType.SIXTH_IS_GROUP, 32270);
        AWAKE_POWER.put(CategoryType.SIXTH_EOLH_GROUP, 32271);
    }
   
    // code by Horyon
    public static long getQuestItemsCount(Player player, int itemId)
    {
        return player.getInventory().getInventoryItemCount(itemId, -1);
    }
   
    public static boolean hasQuestItems(Player player, int itemId)
    {
        return player.getInventory().getItemByItemId(itemId) != null;
    }
   
    protected static boolean hasItem(Player player, ItemHolder item)
    {
        return hasItem(player, item, true);
    }
   
    protected static boolean hasItem(Player player, ItemHolder item, boolean checkCount)
    {
        if (item == null)
        {
            return false;
        }
        if (checkCount)
        {
            return getQuestItemsCount(player, item.getId()) >= item.getCount();
        }
        return hasQuestItems(player, item.getId());
    }
   
    public static boolean takeItems(Player player, int itemId, long amountValue)
    {
        if (player.isSimulatingTalking())
        {
            return false;
        }
       
        // Get object item from player's inventory list
        final Item item = player.getInventory().getItemByItemId(itemId);
        if (item == null)
        {
            return false;
        }
       
        // Tests on count value in order not to have negative value
        long amount = amountValue;
        if ((amountValue < 0) || (amountValue > item.getCount()))
        {
            amount = item.getCount();
        }
       
        // Destroy the quantity of items wanted
        if (item.isEquipped())
        {
            final InventoryUpdate iu = new InventoryUpdate();
            for (Item itm : player.getInventory().unEquipItemInBodySlotAndRecord(item.getTemplate().getBodyPart()))
            {
                iu.addModifiedItem(itm);
            }
            player.sendInventoryUpdate(iu);
            player.broadcastUserInfo();
        }
       
        return player.destroyItemByItemId("Quest", itemId, amount, player, true);
    }
    // code by Horyon
   
    @Override
    public void read(ReadablePacket packet)
    {
        _classId = packet.readInt();
    }
   
    @Override
    public void run(GameClient client)
    {
        final Player player = client.getPlayer();
        if (player == null)
        {
            return;
        }
       
        // Check if class id is valid.
        boolean canChange = false;
        for (ClassId cId : player.getClassId().getNextClassIds())
        {
            if (cId.getId() == _classId)
            {
                canChange = true;
                break;
            }
        }
        if (!canChange //
            && (_classId != 170) && (player.getClassId().getId() != 133)) // Female Soul Hound fix.
        {
            PacketLogger.warning(player + " tried to change class from " + player.getClassId() + " to " + ClassId.getClassId(_classId) + "!");
            return;
        }
       
        // Check for player proper class group and level.
        canChange = false;
        final int playerLevel = player.getLevel();
        if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP) && (playerLevel >= 20))
        {
            canChange = CategoryData.getInstance().isInCategory(player.getRace() == Race.ERTHEIA ? CategoryType.THIRD_CLASS_GROUP : CategoryType.SECOND_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 40))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.FOURTH_CLASS_GROUP, _classId);
        }
        else if (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (playerLevel >= 85))
        {
            canChange = CategoryData.getInstance().isInCategory(CategoryType.SIXTH_CLASS_GROUP, _classId);
        }
       
        // Change class.
        if (canChange)
        {
            if (player.isSubClassActive())
            {
                player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass());
            }
            else
            {
                switch (_classId)
                {
                    case WARRIOR:
                        if ((player.getClassId() == ClassId.FIGHTER) && hasQuestItems(player, MEDALLION_OF_WARRIOR))
                        {
                            takeItems(player, MEDALLION_OF_WARRIOR, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case KNIGHT:
                        if ((player.getClassId() == ClassId.FIGHTER) && hasQuestItems(player, SWORD_OF_RITUAL))
                        {
                            takeItems(player, SWORD_OF_RITUAL, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ROGUE:
                        if ((player.getClassId() == ClassId.FIGHTER) && hasQuestItems(player, BEZIQUES_RECOMMENDATION))
                        {
                            takeItems(player, BEZIQUES_RECOMMENDATION, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ELVEN_KNIGHT:
                        if ((player.getClassId() == ClassId.ELVEN_FIGHTER) && hasQuestItems(player, ELVEN_KNIGHT_BROOCH))
                        {
                            takeItems(player, ELVEN_KNIGHT_BROOCH, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ELVEN_SCOUT:
                        if ((player.getClassId() == ClassId.ELVEN_FIGHTER) && hasQuestItems(player, REISAS_RECOMMENDATION))
                        {
                            takeItems(player, REISAS_RECOMMENDATION, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case WIZARD:
                        if ((player.getClassId() == ClassId.MAGE) && hasQuestItems(player, BEAD_OF_SEASON))
                        {
                            takeItems(player, BEAD_OF_SEASON, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case CLERIC:
                        if ((player.getClassId() == ClassId.MAGE) && hasQuestItems(player, MARK_OF_FAITH))
                        {
                            takeItems(player, MARK_OF_FAITH, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ELVEN_WIZARD:
                        if ((player.getClassId() == ClassId.ELVEN_MAGE) && hasQuestItems(player, ETERNITY_DIAMOND))
                        {
                            takeItems(player, ETERNITY_DIAMOND, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ORACLE:
                        if ((player.getClassId() == ClassId.ELVEN_MAGE) && hasQuestItems(player, LEAF_OF_ORACLE))
                        {
                            takeItems(player, LEAF_OF_ORACLE, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case PALUS_KNIGHT:
                        if ((player.getClassId() == ClassId.DARK_FIGHTER) && hasQuestItems(player, GAZE_OF_ABYSS))
                        {
                            takeItems(player, GAZE_OF_ABYSS, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ASSASSIN:
                        if ((player.getClassId() == ClassId.DARK_FIGHTER) && hasQuestItems(player, IRON_HEART))
                        {
                            takeItems(player, IRON_HEART, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case DARK_WIZARD:
                        if ((player.getClassId() == ClassId.DARK_MAGE) && hasQuestItems(player, JEWEL_OF_DARKNESS))
                        {
                            takeItems(player, JEWEL_OF_DARKNESS, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case SHILLIEN_ORACLE:
                        if ((player.getClassId() == ClassId.DARK_MAGE) && hasQuestItems(player, ORB_OF_ABYSS))
                        {
                            takeItems(player, ORB_OF_ABYSS, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ORC_RAIDER:
                        if ((player.getClassId() == ClassId.ORC_FIGHTER) && hasQuestItems(player, MARK_OF_RAIDER))
                        {
                            takeItems(player, MARK_OF_RAIDER, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case MONK:
                        if ((player.getClassId() == ClassId.ORC_FIGHTER) && hasQuestItems(player, KHAVATARI_TOTEM))
                        {
                            takeItems(player, KHAVATARI_TOTEM, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ORC_SHAMMAN:
                        if ((player.getClassId() == ClassId.ORC_MAGE) && hasQuestItems(player, MASK_OF_MEDIUM))
                        {
                            takeItems(player, MASK_OF_MEDIUM, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case SCAVENGER:
                        if ((player.getClassId() == ClassId.DWARVEN_FIGHTER) && hasQuestItems(player, RING_OF_RAVEN))
                        {
                            takeItems(player, RING_OF_RAVEN, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    case ARTISAN:
                        if ((player.getClassId() == ClassId.DWARVEN_FIGHTER) && hasQuestItems(player, FINAL_PASS_CERTIFICATE))
                        {
                            takeItems(player, FINAL_PASS_CERTIFICATE, 1);
                            player.setClassId(_classId);
                            player.setBaseClass(player.getActiveClass());
                        }
                        else
                        {
                            player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
                        }
                        break;
                    default:
                        player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET); // default action if _classId doesn't match any of the above cases
                        break;
                }
            }
           
            if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
            {
                SkillTreeData.getInstance().cleanSkillUponChangeClass(player); // TODO: Move to skill learn method?
                for (SkillLearn skill : SkillTreeData.getInstance().getRaceSkillTree(player.getRace()))
                {
                    player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
                }
               
                if (Config.DISABLE_TUTORIAL && !player.getVariables().getBoolean(AWAKE_POWER_REWARDED_VAR, false))
                {
                    player.addItem("awake", VITALITY_MAINTAINING_RUNE, 1, player, true);
                    player.addItem("awake", CHAOS_POMANDER, 2, player, true);
                    if (player.getRace() == Race.ERTHEIA)
                    {
                        if (player.getClassId() == ClassId.EVISCERATOR)
                        {
                            player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                            player.addItem("awake", AWAKE_POWER_EVIS, 1, player, true);
                        }
                        if (player.getClassId() == ClassId.SAYHA_SEER)
                        {
                            player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                            player.addItem("awake", AWAKE_POWER_SAYHA, 1, player, true);
                        }
                    }
                    else
                    {
                        for (Entry<CategoryType, Integer> ent : AWAKE_POWER.entrySet())
                        {
                            if (player.isInCategory(ent.getKey()))
                            {
                                player.getVariables().set(AWAKE_POWER_REWARDED_VAR, true);
                                player.addItem("awake", ent.getValue().intValue(), 1, player, true);
                                break;
                            }
                        }
                    }
                }
            }
           
            if (Config.AUTO_LEARN_SKILLS)
            {
                player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, Config.AUTO_LEARN_FP_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS);
            }
           
            player.store(false); // Save player cause if server crashes before this char is saved, he will lose class.
            player.broadcastUserInfo();
            player.sendSkillList();
            player.sendPacket(new PlaySound("ItemSound.quest_fanfare_2"));
           
            if (Config.DISABLE_TUTORIAL && !player.isInCategory(CategoryType.SIXTH_CLASS_GROUP) //
                && ((player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38)) //
                    || (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76)) //
                    || (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (playerLevel >= 85))))
            {
                player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
            }
        }
    }
}

Everything beetwen code by horyon to code by horyon will be deleted now. Much more clean code.

I'll post in a separated post for who want it(just need some minutes to replace to smaller code). Ty for help!
 
Назад
Сверху Снизу