У меня на пвп сервере автоматическое изучение скилов.
Когда игрок у нпц берет первую или вторую профу - он подвисает на 10-20 секунд.
Также это создает небольшие лаги на сервере.
Есть ли способ сделать автоизучение или смену саба без лагов?
Код
Добавлено через 1 минуту
	
	
	
	
	
Когда игрок у нпц берет первую или вторую профу - он подвисает на 10-20 секунд.
Также это создает небольшие лаги на сервере.
Есть ли способ сделать автоизучение или смену саба без лагов?
Код
Код:
public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
    {
        int unLearnable = 0;
        int skillCounter = 0;
        
        // Get available skills
        FastList<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
        
        while (skills.size() > unLearnable)
        {
            for (L2SkillLearn s: skills)
            {
                L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
                if (sk == null || (sk.getId() == L2Skill.SKILL_DIVINE_INSPIRATION && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !isGM()))
                {
                    unLearnable++;
                    continue;
                }
                
                if (getSkillLevel(sk.getId()) == -1)
                {
                    skillCounter++;
                }
                
                // fix when learning toggle skills
                if (sk.isToggle())
                {
                    L2Effect toggleEffect = getFirstEffect(sk.getId());
                    if (toggleEffect != null)
                    {
                        // stop old toggle skill effect, and give new toggle skill effect back
                        toggleEffect.exit();
                        sk.getEffects(this, this);
                    }
                }
                addSkill(sk, true);
            }
            
            //Get new available skills, some skills depend of previous skills to be available.
            skills = SkillTreesData.getInstance().getAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
        }
        
        sendMessage("You have learned " + skillCounter + " new skills.");
        return skillCounter;
    }
    
    /**
     * Give all available AutoGet skills to the player.<br>
     */
    public void giveAvailableAutoGetSkills()
    {
        // Get available skills
        final FastList<L2SkillLearn> autoGetSkills = SkillTreesData.getInstance().getAvailableAutoGetSkills(this);
        
        if ((autoGetSkills != null) && !autoGetSkills.isEmpty())
        {
            for (L2SkillLearn s: autoGetSkills)
            {
                final L2Skill skill = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
                if (skill != null)
                {
                    addSkill(skill, true);
                }
                else
                {
                    _log.warning("Skipped null autoGet Skill for player:" + getName() + "[" + getObjectId() + "]");
                }
            }
        }
    }
    
     public L2Skill addSkill(L2Skill newSkill, boolean store)
    {
        // Add a skill to the L2PcInstance _skills and its Func objects to the calculator set of the L2PcInstance
        L2Skill oldSkill = super.addSkill(newSkill);
        
        // Add or update a L2PcInstance skill in the character_skills table of the database
        if (store)
        {
            storeSkill(newSkill, oldSkill, -1);
        }
        return oldSkill;
    }Добавлено через 1 минуту
Код:
public FastList<L2SkillLearn> getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
    {
        final FastList<L2SkillLearn> result = new FastList<L2SkillLearn>();
        final FastMap<Integer, L2SkillLearn> skills = getCompleteClassSkillTree(classId);
        
        if (skills.isEmpty())
        {
            // The Skill Tree for this class is undefined.
            _log.warning(getClass().getSimpleName() + ": Skilltree for class " + classId + " is not defined!");
            return result;
        }
        
        final L2Skill[] oldSkills = player.getAllSkills();
        for (L2SkillLearn temp : skills.values())
        {
            if (((includeAutoGet && temp.isAutoGet()) || temp.isLearnedByNpc() || (includeByFs && temp.isLearnedByFS())) && (player.getLevel() >= temp.getGetLevel()))
            {
                boolean knownSkill = false;
                
                for (int j = 0; (j < oldSkills.length) && !knownSkill; j++)
                {
                    if (oldSkills[j].getId() == temp.getSkillId())
                    {
                        if (oldSkills[j].getLevel() == (temp.getSkillLevel() - 1))
                        {
                            // This is the next level of a known skill:
                            result.add(temp);
                        }
                        knownSkill = true;
                    }
                }
                
                if (!knownSkill && (temp.getSkillLevel() == 1))
                {
                    // This is a new skill:
                    result.add(temp);
                }
            }
        }
        return result;
    }
 
 

 



