Показать сообщение отдельно
Непрочитано 26.11.2015, 05:51   #221
Пользователь

По умолчанию Re: Работа над Goddess of Destruction (part 7)

i have problem with new enchant system in IO

i use that patch from packet but in game no work
Цитата:
Сообщение от Bonux Посмотреть сообщение
Код:
package l2s.gameserver.network.l2.s2c;

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

import l2s.gameserver.data.xml.holder.SkillHolder;
import l2s.gameserver.model.Skill;
import l2s.gameserver.utils.SkillUtils;

public class ExEnchantSkillInfoPacket extends L2GameServerPacket
{
	private List<Integer> _routes;

	private int _id, _level, _canAdd, canDecrease;

	public ExEnchantSkillInfoPacket(int id, int level)
	{
		_routes = new ArrayList<Integer>();
		_id = id;
		_level = level;

		// skill already enchanted?
		if(SkillUtils.isEnchantedSkill(_level))
		{
			// get detail for next level
			int skillLevel = SkillUtils.getSkillLevelFromMask(_level);
			int subSkillLevel = SkillUtils.getSubSkillLevelFromMask(_level) + 1;
			int skillLevelMask = SkillUtils.getSkillLevelMask(skillLevel, subSkillLevel);
			Skill skill = SkillHolder.getInstance().getSkill(_id, skillLevelMask);
			// if it exists add it
			if(skill != null)
			{
				addEnchantSkillDetail(skill.getLevel());
				_canAdd = 1;
			}

			for(Skill temp : SkillUtils.getSkillsForChangeEnchant(_id, _level))
				addEnchantSkillDetail(temp.getLevel());
		}
		else
		{
			// not already enchanted
			for(Skill temp : SkillUtils.getSkillsForFirstEnchant(_id, _level))
			{
				addEnchantSkillDetail(temp.getLevel());
				_canAdd = 1;
			}
		}
	}

	public void addEnchantSkillDetail(int level)
	{
		_routes.add(level);
	}

	@Override
	protected void writeImpl()
	{
		writeD(_id);
		writeD(_level);
		writeD(_canAdd); // can add enchant
		writeD(canDecrease); // can decrease enchant

		writeD(_routes.size());
		for(Integer route : _routes)
			writeD(route);
	}
}
all have black icon and no see icons from routes

my code

ExEnchantSkillInfoDetail
Цитата:
Код:
package zgts.gameserver.network.l2.s2c;

import zgts.gameserver.data.xml.holder.SkillHolder;
import zgts.gameserver.model.Skill.EnchantType;

public class ExEnchantSkillInfoDetailPacket extends L2GameServerPacket
{
	private final int _unk = 0;
	private final EnchantType _type;
	private final int _skillId;
	private final int _skillLvl;
	private final int _maxlvl;
	private final int _sp;
	private final int _chance;
	private final int _bookId;
	private final int _bookCount;
	private final int _adenaCount;
	
	public ExEnchantSkillInfoDetailPacket(final EnchantType type, final int skillId, final int skillLvl, final int sp, final int chance, final int bookId, final int bookCount, final int adenaCount)
	{
		_type = type;
		_skillId = skillId;
		_skillLvl = skillLvl;
		_maxlvl = SkillHolder.getInstance().getMaxLevel(skillId);
		_sp = sp;
		_chance = chance;
		_bookId = bookId;
		_bookCount = bookCount;
		_adenaCount = adenaCount;
	}
	
	@Override
	protected void writeImpl()
	{
		writeD(_type.ordinal());
		writeD(_skillId);
		// writeH(_maxlvl);
		writeD(_skillLvl); // TODO TEST
		writeQ(_sp);
		writeD(_chance);
		writeD(0x02);
		writeD(57);
		writeD(_adenaCount);
		writeD(_bookId);
		writeD(_bookCount);
	}
}
ExEnchantSkillInfo
Цитата:
Код:
package zgts.gameserver.network.l2.s2c;

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

import zgts.gameserver.data.xml.holder.SkillHolder;
import zgts.gameserver.model.Skill;
import zgts.gameserver.utils.SkillUtils;

public class ExEnchantSkillInfoPacket extends L2GameServerPacket
{
	private final List<Integer> _routes = new ArrayList<>();
	private final int _id;
	private final int _level;
	private final int _maxlvl;
	private int _canAdd;
	private int canDecrease;
	
	public ExEnchantSkillInfoPacket(final int id, final int level)
	{
		_id = id;
		_level = level;
		_maxlvl = SkillHolder.getInstance().getMaxLevel(_id);
		
		if (SkillUtils.isEnchantedSkill(_level))
		{
			// canDecrease = 1;
			// Get detail for next level
			int skillLevel = SkillUtils.getSkillLevelFromMask(_level);
			int subSkillLevel = SkillUtils.getSubSkillLevelFromMask(_level) + 1;
			int skillLevelMask = SkillUtils.getSkillLevelMask(skillLevel, subSkillLevel);
			final Skill skill = SkillHolder.getInstance().getSkill(_id, skillLevelMask);
			if (skill != null)
			{
				addEnchantSkillDetail(skill.getLevel());
				_canAdd = 1;
			}
			for (final Skill temp : SkillUtils.getSkillsForChangeEnchant(_id, _level))
			{
				addEnchantSkillDetail(temp.getLevel());
			}
		}
		else
		{
			for (final Skill temp2 : SkillUtils.getSkillsForFirstEnchant(_id))
			{
				addEnchantSkillDetail(temp2.getLevel());
				_canAdd = 1;
			}
		}
	}
	
	public void addEnchantSkillDetail(final int level)
	{
		_routes.add(level);
	}
	
	@Override
	protected void writeImpl()
	{
		writeD(_id);
		writeD(_level);
		writeD(_canAdd);
		writeD(canDecrease);
		writeD(_routes.size());
		for (Integer route : _routes)
		{
			writeH(route);
		}
	}
}
that Vars in SkillUtils
int skillLevel = SkillUtils.getSkillLevelFromMask(_level);
int subSkillLevel = SkillUtils.getSubSkillLevelFromMask(_level) + 1;
int skillLevelMask = SkillUtils.getSkillLevelMask(skillLevel, subSkillLevel);

Цитата:
Код:
	public static int getSkillLevelFromMask(final int level)
	{
		return level;
		
	}
	
	public static int getSkillLevelMask(int level, final int level2)
	{
		if (level < 100)
		{
			return level;
		}
		else
		{
			level = level2 >> 16;
			return level;
		}
	}
	
	public static int getSubSkillLevelFromMask(final int level)
	{
		return level;
		
	}
please help me T.T

sorry for my Bad Enghlis
nache вне форума Ответить с цитированием