Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Лаги при взятии профы или смене саба
#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;
    }
Ответ
#2
Сборка чья? Или на лыже пилим?
Ответ
#3
Silvern Написал:Сборка чья? Или на лыже пилим?

SkillTreesData.java - L2J SVN
метод загуглить тяжело? :redlol:
Ответ
#4
Сборка L2jserver.com Freya
Ответ
#5
Скилы которые должны быть выучены находяться в хмл файле.
У гладиатора к примеру у скила "Трипл соник слеш" 22 уровня, при взятии второй профы учаться все 22 лвла подряд.
Можно ли сделать так что бы учился 22рой лвл без выученого 21вого?
Если я оставляю в хмл файлле только 22рой лвл без предыдущих - скил не изучаеться.
Когда я убрал проверку
Код:
if (oldSkills[j].getLevel() == (temp.getSkillLevel() - 1))
                        {
                            // This is the next level of a known skill:
                            result.add(temp);
                        }
и вписал вместо этого кода - просто
Код:
result.add(temp)
-при создании персонажа сервер зависает с ошибкой.
Ответ
#6
Много пакетов идет на клиент тяжелых, поэтому и лаг в клиенте получается.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Задержки, фризы, лаги... vokforever 7 2,724 08-03-2015, 09:38 PM
Последний пост: n3k0nation
  Лаги в академии и дв HF Laguerro 9 2,439 06-03-2014, 11:33 PM
Последний пост: Laguerro
  Скилы 4 профы KpoIIIuK 11 3,510 03-06-2013, 11:16 PM
Последний пост: Daan Raven
  Лаги на осаде Den95 0 1,209 02-07-2012, 07:18 PM
Последний пост: Den95
  задержка между покупкой\меной саба brian91 2 2,334 03-09-2011, 09:37 PM
Последний пост: brian91
  NPC: ГМ-шоп,Бафер,Профы!!! akaRoyal 12 22,972 07-18-2009, 02:03 AM
Последний пост: undamend

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)