чото вы напутали с этими пропертями и суффиксами. вообще говоря проперти это некое ID, которое вроде даже где то в дбц было в виде вариаций. и грубо говоря это ID от нуля до некоего конечного числа, типа 100 или может 1000, не помню.
а те громадные числа я перевел в hex и оно мне TimeStamp больше напоминает. да и откуда вы взяли рандом проперти поле в SMSG_ITEM_QUERY_SINGLE_RESPONSE, его там от родясь никогда не было. это апдейт поле итема:
ITEM_FIELD_RANDOM_PROPERTIES_ID = 59; // 001 - [1] Integer - [001] PUBLIC
вот еще есть поле ITEM_FIELD_PROPERTY_SEED, вот тут более вероятно встретить таймстап, кажется это он и есть (не помню уж). но опять же, это А9, а не SMSG_ITEM_QUERY_SINGLE_RESPONSE.
покажите дамп всего пакета.
но вообще не о том говорим. и да, если апдейт поле цельное (не составные байты или слова), если оно integer и если оно равно нулю, то такое поле не передается в апдейтпакете. это такое правило. нельзя передавать зануленные поля.
я чесно говоря потерял нить проблемы, напомните плиз. клиент не воспринимает SMSG_LOOT_RESPONSE, сформированный вами? судя по вашему разобранному представлению этот пакет не менялся со времен царя гороха. вот у меня что:
Код:
// лут-лист
pkt := TPkt.InitCmd(SMSG_LOOT_RESPONSE);
pkt.AddInt64(LootObject.woGuid);
// LOOT_TYPE_CORPSE = 1;
// LOOT_TYPE_SKINNING = 2;
// LOOT_TYPE_FISHING = 3;
pkt.AddByte(L.LootType); // тип лута
pkt.AddLong(L.Coinage); // деньги
pkt.AddByte(count); // сколько итемов в списке
count:=0;
for i:=1 to MAX_LOOT_ITEMS do
if (L.Slot[i].Entry<>0)and(ItemTPL[L.Slot[i].Entry]<>nil) then
begin
pkt.AddByte(count); // номер итема по порядку, он потом будет фигурировать в лут-пакетах рассылки
inc(count);
pkt.AddLong(L.Slot[i].Entry); // item_id
k:=random(ItemTPL[L.Slot[i].Entry].itMaxStackCount);
if k<1 then k:=1;
if k>ItemTPL[L.Slot[i].Entry].itMaxStackCount then k:=ItemTPL[L.Slot[i].Entry].itMaxStackCount;
pkt.AddLong(k); // item_count
pkt.AddLong(ItemTPL[L.Slot[i].Entry].itDisplayInfoID); // item_model
pkt.AddLong(L.Slot[i].PropertySEED); // seed
pkt.AddLong(L.Slot[i].RandomPropertyID); // RandomPropertyID
// 0 - norm
// 1 - that item is still being rolled for
// 2 - нет опкода, нет сообщения, нельзя взять предмет
// 1. статус итема может быть установлен командой "START ROLL"
// 2. нужно выставить статус 2, если этот итем >=Trashold,
// что бы итем невозможно было просто взять,
// а можно передевать только через список плееров у мастерлутера или через розыгрыш need/greed
pkt.AddByte(L.Slot[i].Status);
end;
sender.SockSend(pkt);