public class ExAcquireSkillInfo extends ServerPacket
{
private final int _id;
private final int _level;
private final int _dualClassLevel;
private final long _spCost;
private final int _minLevel;
private final Set<ItemHolder> _itemReq;
private final List<Skill> _skillRem = new LinkedList<>();
/**
* Special constructor for Alternate Skill Learning system.<br>
* Sets a custom amount of SP.
* @param player
* @param skillLearn the skill learn.
*/
public ExAcquireSkillInfo(Player player, SkillLearn skillLearn)
{
_id = skillLearn.getSkillId();
_level = skillLearn.getSkillLevel();
_dualClassLevel = skillLearn.getDualClassLevel();
_spCost = skillLearn.getLevelUpSp();
_minLevel = skillLearn.getGetLevel();
_itemReq = skillLearn.getRequiredItems();
for (int id : skillLearn.getRemoveSkills())
{
final Skill removeSkill = player.getKnownSkill(id);
if (removeSkill != null)
{
_skillRem.add(removeSkill);
}
}
}
@Override
public void write()
{
ServerPackets.EX_ACQUIRE_SKILL_INFO.writeId(this);
writeInt(_id);
writeInt(_level);
writeLong(_spCost);
writeShort(_minLevel);
writeShort(_dualClassLevel);
writeInt(_itemReq.size());
for (ItemHolder holder : _itemReq)
{
writeInt(holder.getId());
writeLong(holder.getCount());
}
writeInt(_skillRem.size());
for (Skill skill : _skillRem)
{
writeInt(skill.getId());
writeInt(skill.getLevel());
}
}
}
Ну если его устраивает случай - сначала добавить скил в изучаемые для чара, а потом игроку просто прилетит апдейт, что надо скил выучить и он откроет умения и увидит, что в learning есть то что ему нужно и кликнет. А там уже пакет с инфой придёт.Ну ему вроде все равно придется как-то вызывать для начала это окно в интрефейсе - пакет с сервера, если я не ошибаюсь, просто его заполняет, но не вызывает.
С dat вроде нет, там только какие-то id итемов можно вставлять, чтобы подтягивалось имя и мб что-то еще.Не совсем подходит вариант через SkillList, потому что умения не из классовых SkillTree, а изучаются отдельно от них(.
А можно вывести эту же информацию (из skillname.dat) в community board? Прямо из клиента?
Ну и если это окно не используется(типа хф на клиенте сальвы), то в интерфейсе можно отвязать его от проверок, на открытое окно скилов и вызывать сразу ппакетом. Если внешне окно подходит, то это самый малокровный путь через интерфейспакет с сервера, если я не ошибаюсь, просто его заполняет, но не вызывает.
С dat вроде нет, там только какие-то id итемов можно вставлять, чтобы подтягивалось имя и мб что-то еще.
Если у вас есть разраб, как вы пишите - то пусть добавит поле описания для скилов(в xml). И где вам нужно будет, то в КБ подтягивать все из датапака. Чтобы показать в кб никакие правки в клиенте не нужны.
Ну а по хорошему - это все делается как отдельный мод c xml конфигом, где можно вписывать что угодно и как нужно. Полагаю, если вы так хотите "продавать" скилл, то у вас уже что-то подобное есть, думаю не проблема туда добавить что нужно
Конечно же отдельным окном все это можно сделать как вы и хотели, но стоит ли игра свеч - хз.
Ну и если это окно не используется(типа хф на клиенте сальвы), то в интерфейсе можно отвязать его от проверок, на открытое окно скилов и вызывать сразу ппакетом. Если внешне окно подходит, то это самый малокровный путь через интерфейс
if (!GetWindowHandle("MagicSkillWnd").IsShowWindow() || !MagicSkillWndScript.isSkillLearnTab())
{
Me.HideWindow();
}
if (RequiredItemTotalCnt > 0)
{
ParseInt(param, "requiredItemID1", requiredItemID);
ParseInt(param, "requiredItemCnt1", requiredItemCnt);
strIconName = class'UIDATA_ITEM'.static.GetItemName(GetItemID(requiredItemID)) $ "x" $string(requiredItemCnt);
for (i = 2; i <= RequiredItemTotalCnt; ++i)
{
ParseInt(param, "requiredItemID"$i, requiredItemID);
ParseInt(param, "requiredItemCnt"$i, requiredItemCnt);
strIconName = strIconName $ ", " $ class'UIDATA_ITEM'.static.GetItemName(GetItemID(requiredItemID)) $ "x" $string(requiredItemCnt);
}
txtNeedItemName.SetText(strIconName);
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?