Застрял на данном пакете. Ковыряясь в разных сурсах понял что структура следующая.
Дебаггером смотрел все данные, ид предмета и кол-во записываются в пакет верно и в правильном порядке, но клиент все равно их не видит.
вывод клиента Присвоено: ( шт.).
Уже 4й час мучаю данный пакет и никак не могу понять где я ошибся.
добавляю к пакету параметры следующими методами
Добавлено через 16 минут
Вот почему как только стоит создать тему сразу находишь ошибку... Бред тему можно закрыть
WByte((byte)param.ParamType); заменить на WInt((int)param.ParamType);
Код:
public MsgParams[] Params { get; set; } -[B] Тут храним параметры[/B]
public struct MsgParams
{
public MsgParams(ParamType paramType, object firstValue, object secondValue, object thirdValue)
{
ParamType = paramType;
FirstValue = firstValue;
SecondValue = secondValue;
ThirdValue = thirdValue;
}
public ParamType ParamType { get; }
private object FirstValue { get; }
private object SecondValue { get; }
private object ThirdValue { get; }
public int GetTargetObjId => (int) FirstValue;
public int GetObjId => (int) SecondValue;
public int GetDmg => (int)ThirdValue;
public string GetStringValue() => (string)FirstValue;
public int GetIntValue => (int)FirstValue;
public long GetLongValue => (long)FirstValue;
public int[] GetIntArrayValue => (int[])FirstValue;
}
public enum ParamType:byte
{
Text = 0, Number = 1, NpcName = 2,
ItemName = 3, SkillName = 4,
CastleName = 5, ItemCount = 6,
ZoneName = 7, ItemNameWithAugmentation = 8,
ElementName = 9, InstanceName = 10,
StaticObjectName = 11, PlayerName = 12,
SystemString = 13
}
------ структура пакета -----------------
WByte(Opcode); пример: 0x62
WInt((int)_msgId); - пример: 53 Присвоено: $s1 ($s2 шт.)
WInt(Params.Length);пример: 2 //Кол-во параметров
foreach (var param in Params)
{
WByte((byte)param.ParamType);
// ReSharper disable once SwitchStatementMissingSomeCases
switch (param.ParamType)
{
[color=SeaGreen]<часть кейсов убрано. интересует только ItemCount и ItemName>[/color]
case ParamType.ItemCount:
WLong(param.GetLongValue);
break;
case ParamType.ItemName:
WInt(param.GetIntValue);
break;
}
Дебаггером смотрел все данные, ид предмета и кол-во записываются в пакет верно и в правильном порядке, но клиент все равно их не видит.
вывод клиента Присвоено: ( шт.).
Уже 4й час мучаю данный пакет и никак не могу понять где я ошибся.
добавляю к пакету параметры следующими методами
Код:
public static MsgParams GetParamItemName(int itemId)
{
return new MsgParams(ParamType.ItemName, itemId, null, null);
}
public static MsgParams GetParamItemCount(long itemCount)
{
return new MsgParams(ParamType.ItemCount, itemCount, null, null);
}
Добавлено через 16 минут
Вот почему как только стоит создать тему сразу находишь ошибку... Бред тему можно закрыть
WByte((byte)param.ParamType); заменить на WInt((int)param.ParamType);