Hide skill

Статус
В этой теме нельзя размещать новые ответы.

Horyon

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

I need to give a status to players but dont want that the skill show in passives.

Ty in advance!!
 
Решение
Hi guys... there is a way to hide a learned skill?

I need to give a status to players but dont want that the skill show in passives.

Ty in advance!!
Example:
Java:
package org.l2jmobius.gameserver.network.serverpackets;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.network.OutgoingPackets;

public class SkillList implements IClientOutgoingPacket
{
    // list ids skills to hide
    private static final int[] HIDE_IDS = {1040,1204};

    private final List<Skill> _skills = new ArrayList<>();
    private int _lastLearnedSkillId = 0;
    
    static class Skill...
dont add it to skillgrp
 
try set in SkillGrp.dat IconType = 50 and test
по идее можно глянуть те скиллы, которые клиент прячет в окне скиллов, хотя они у игрока есть и аналогично по параметрам сделать.
это скиллы системы способностей к примеру.

правда в клиенте вполне может быть тупо хардкод на определенные диапазоны для скрытия.
 
по идее можно глянуть те скиллы, которые клиент прячет в окне скиллов, хотя они у игрока есть и аналогично по параметрам сделать.
это скиллы системы способностей к примеру.

правда в клиенте вполне может быть тупо хардкод на определенные диапазоны для скрытия.
Объективности ради, тут действительно идёт упоминание 50-го типа, как исключающего.

Но стоит уточнить что именно пассивных умений, активные вообще не имеют никаких спец-кейзов в uc. Так что либо допил в интерфейсе, либо просто удалять скилл с skillgrp и терять его навсегда и везде.
1676618380360.png
 
В целом можно конечно и на стороне сервера еще скрывать некоторые скиллы при отправке списка скиллов в SkillList, заведя для этого отдельный параметр и фильтруя по нему в пакете.
Ну типа так формируя список для отправки
Java:
_skills = player.getAllSkills().stream().filter(skill -> !skill.isHideInSkillList()).collect(Collectors.toList());
 
Объективности ради, тут действительно идёт упоминание 50-го типа, как исключающего.

Но стоит уточнить что именно пассивных умений, активные вообще не имеют никаких спец-кейзов в uc. Так что либо допил в интерфейсе, либо просто удалять скилл с skillgrp и терять его навсегда и везде.
Посмотреть вложение 48050
Посмотри что проверяет isActiveSkill, я не смотрел что под капотом, но сомневаюсь что 50 тип иконки входит в список активных умений :)
 
For the sake of objectivity, there is indeed a mention of type 50 as an exclusive.

But it is worth clarifying that it is passive skills, active ones do not have any special cases in uc at all. So either finished in the interface, or just remove the skill with skillgrp and lose it forever and everywhere.
Посмотреть вложение 48050
I try lf this lines... "Info.IconType" dont exist in mobius source... what is the file u find it? maybe have write diff cause its not PTS but java.
 
My friend i mean this one default_npc,

1676618380360-png.48050


I know the file... its open for 2 days in my pc... i want to know about this piece of code.

I think dont exist this 50 icon type variable for get it invisible in Alt K in mobius source... i try lf it and get 0 returns
 
Код:
skill_begin skill_id=1 skill_level=1 skill_sublevel=0 operate_type=0 resist_cast=0 MagicType=default mp_consume=42 cast_range=40 cast_style=9 hit_time=1.733 cool_time=0.5 reuse_delay=3.0 effect_point=-213 is_magic=0 origin_skill=0 is_double=0 animation={[Mix05]} skill_visual_effect={[1]} icon=[icon.skill0001] icon_panel=[None] debuff=0 icon_type=0 enchant_skill_level=0 enchant_icon=[None] hp_consume= 0 rumble_self=9 rumble_target=11 level_hide=0 dp_consume=0 energy_consume=0 trait_type=0 abnormal_time=0 target_type=0 affect_scope=1 dbdelete=1 skill_end

This is a line in skillgrp...

Java:
if(Info.IconType != 50)
{
m_Item_p[getItemTypeIndex(Info.IconType)]. AddItem(
}

And this lines in code...

I dont understand where i write so wrong to u dont understand :)

But... in the end i will not use this anymore... but i appreciate the help!!
 
Hi guys... there is a way to hide a learned skill?

I need to give a status to players but dont want that the skill show in passives.

Ty in advance!!
Example:
Java:
package org.l2jmobius.gameserver.network.serverpackets;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.network.OutgoingPackets;

public class SkillList implements IClientOutgoingPacket
{
    // list ids skills to hide
    private static final int[] HIDE_IDS = {1040,1204};

    private final List<Skill> _skills = new ArrayList<>();
    private int _lastLearnedSkillId = 0;
    
    static class Skill
    {
        public int id;
        public int reuseDelayGroup;
        public int level;
        public int subLevel;
        public boolean passive;
        public boolean disabled;
        public boolean enchanted;
        
        Skill(int pId, int pReuseDelayGroup, int pLevel, int pSubLevel, boolean pPassive, boolean pDisabled, boolean pEnchanted)
        {
            id = pId;
            reuseDelayGroup = pReuseDelayGroup;
            level = pLevel;
            subLevel = pSubLevel;
            passive = pPassive;
            disabled = pDisabled;
            enchanted = pEnchanted;
        }
    }
    
    public void addSkill(int id, int reuseDelayGroup, int level, int subLevel, boolean passive, boolean disabled, boolean enchanted)
    {
        for(int i : HIDE_IDS)
            if(i == id)
                return;
        _skills.add(new Skill(id, reuseDelayGroup, level, subLevel, passive, disabled, enchanted));
    }
    
    public void setLastLearnedSkillId(int lastLearnedSkillId)
    {
        _lastLearnedSkillId = lastLearnedSkillId;
    }
    
    @Override
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.SKILL_LIST.writeId(packet);
        _skills.sort(Comparator.comparing(s -> SkillData.getInstance().getSkill(s.id, s.level, s.subLevel).isToggle() ? 1 : 0));
        packet.writeD(_skills.size());
        for (Skill temp : _skills)
        {
            packet.writeD(temp.passive ? 1 : 0);
            packet.writeH(temp.level);
            packet.writeH(temp.subLevel);
            packet.writeD(temp.id);
            packet.writeD(temp.reuseDelayGroup); // GOD ReuseDelayShareGroupID
            packet.writeC(temp.disabled ? 1 : 0); // iSkillDisabled
            packet.writeC(temp.enchanted ? 1 : 0); // CanEnchant
        }
        packet.writeD(_lastLearnedSkillId);
        return true;
    }
}
 
  • Мне нравится
Реакции: Rolo
Решение
Will test it ty Tatao

Example:
Java:
package org.l2jmobius.gameserver.network.serverpackets;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.network.OutgoingPackets;

public class SkillList implements IClientOutgoingPacket
{
list ids skills to hide
    private static final int[] HIDE_IDS = {1040,1204};

    private final List<Skill> _skills = new ArrayList<>();
    private int _lastLearnedSkillId = 0;
   
    static class Skill
    {
        public int id;
        public int reuseDelayGroup;
        public int level;
        public int subLevel;
        public boolean passive;
        public boolean disabled;
        public boolean enchanted;
       
        Skill(int pId, int pReuseDelayGroup, int pLevel, int pSubLevel, boolean pPassive, boolean pDisabled, boolean pEnchanted)
        {
            id = pId;
            reuseDelayGroup = pReuseDelayGroup;
            level = pLevel;
            subLevel = pSubLevel;
            passive = pPassive;
            disabled = pDisabled;
            enchanted = pEnchanted;
        }
    }
   
    public void addSkill(int id, int reuseDelayGroup, int level, int subLevel, boolean passive, boolean disabled, boolean enchanted)
    {
        for(int i : HIDE_IDS)
            if(i == id)
                return;
        _skills.add(new Skill(id, reuseDelayGroup, level, subLevel, passive, disabled, enchanted));
    }
   
    public void setLastLearnedSkillId(int lastLearnedSkillId)
    {
        _lastLearnedSkillId = lastLearnedSkillId;
    }
   
    @Override
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.SKILL_LIST.writeId(packet);
        _skills.sort(Comparator.comparing(s -> SkillData.getInstance().getSkill(s.id, s.level, s.subLevel).isToggle() ? 1 : 0));
        packet.writeD(_skills.size());
        for (Skill temp : _skills)
        {
            packet.writeD(temp.passive ? 1 : 0);
            packet.writeH(temp.level);
            packet.writeH(temp.subLevel);
            packet.writeD(temp.id);
packet.writeD(temp.reuseDelayGroup); GOD ReuseDelayShareGroupID
packet.writeC(temp.disabled ? 1 : 0); iSkillDisabled
packet.writeC(temp.enchanted ? 1 : 0); CanEnchant
        }
        packet.writeD(_lastLearnedSkillId);
        return true;
    }
}

Work 100%... skill do not show in Alt+K.

But in the other window show normaly.

Ty Tatao
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу