Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
LastCorpse
LastCorpse
Как получить ИД последнего трупа?
Re: LastCorpse
Труп он последний потому, что появился в окне клиента последним.VeL wrote:Как получить ИД последнего трупа?
Значит происходит событие когда сервер присылает пакет появления нового объекта, на которое можно прицепить обработчик и смотреть если тип объекта такой как вам нужен запоминать в глобальные переменные.
Пришлось написать такую функцию:
А вообще не понятно почему этого нет в стелсе, т.к. где присутствует лут, ИД последнего появившегося трупа знать просто необходимо.
Code: Select all
function LastCorpse: Cardinal;
begin
repeat
Result := FindType(Corpse, Ground);
Ignore(FindItem)
until FindType(Corpse, Ground) = 0;
IgnoreReset
end;
Потому что труп для стелса ничем от обычного предмета не отличается. А вместо перебора всех трупов и забивания/очистки игнор-листа можно было использовать:VeL wrote:А вообще не понятно почему этого нет в стелсе, т.к. где присутствует лут, ИД последнего появившегося трупа знать просто необходимо.
Code: Select all
function GetFindedList(var UserList: TStringList): Boolean;
Code: Select all
function GetLastCorpse: Cardinal;
var
FindedList: TStringList;
begin
Result := FindType(Corpse, Ground);
if Result > 0 then
begin
FindedList := TStringList.Create;
try
if GetFindedList(FindedList) then Result := IntToStr('$' + FindedList.Strings[FindedList.Count - 1]);
finally
FindedList.Free;
end;
end;
end;
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Исправить? Даже не знаю. Это для тебя "список не в том порядке в котором надо". Используй метод, который советовал Macks. Если веришь, что ID трупам выдаются в правильном порядке (в чем я мал-мал сомневаюсь) - можешь искать трупы с максимальным ID.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
тогда обьясни, что есть "тот порядок, в котором надо"VeL wrote:Эта функция работает не так как надо, возвращает ID трупов как попало... Скорее всего из за того, что GetFindedList загружает список не в том порядке в котором надо... Можно как то исправить?Fenix wrote:GetLastCorpse: Cardinal;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
А так же можно перебрать по айди и найти с минимальным от чара расстоянием.Fenix wrote:Исправить? Даже не знаю. Это для тебя "список не в том порядке в котором надо". Используй метод, который советовал Macks. Если веришь, что ID трупам выдаются в правильном порядке (в чем я мал-мал сомневаюсь) - можешь искать трупы с максимальным ID.
Хорошо, пытаемся модифицировать GetLastCorpse:
Code: Select all
function GetLastCorpse: Cardinal;
var
FindedList: TStringList;
begin
Result := FindType(Corpse, Ground);
if Result > 0 then
begin
FindedList := TStringList.Create;
try
if GetFindedList(FindedList) then Result := IntToStr('$' + FindedList.Strings[0]);
finally
FindedList.Free;
end;
end;
end;
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Темболее не то, мне не нужны первый или последний элементы списка, мне надо чтобы ИД в списке были в том порядке, в котором они пришли от сервера, для того чтобы уже оттуда извлечь последний элемент, который в свою очередь должен содержать последний ИД трупа...Fenix wrote:Хорошо, пытаемся модифицировать GetLastCorpse: