LastCorpse
Posted: 03.12.2010 18:25
Как получить ИД последнего трупа?
Труп он последний потому, что появился в окне клиента последним.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;
Эта функция работает не так как надо, возвращает ID трупов как попало... Скорее всего из за того, что GetFindedList загружает список не в том порядке в котором надо... Можно как то исправить?Fenix wrote:GetLastCorpse: Cardinal;
тогда обьясни, что есть "тот порядок, в котором надо"VeL wrote:Эта функция работает не так как надо, возвращает ID трупов как попало... Скорее всего из за того, что GetFindedList загружает список не в том порядке в котором надо... Можно как то исправить?Fenix wrote:GetLastCorpse: Cardinal;
А так же можно перебрать по айди и найти с минимальным от чара расстоянием.Fenix wrote:Исправить? Даже не знаю. Это для тебя "список не в том порядке в котором надо". Используй метод, который советовал Macks. Если веришь, что ID трупам выдаются в правильном порядке (в чем я мал-мал сомневаюсь) - можешь искать трупы с максимальным ID.
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;
Темболее не то, мне не нужны первый или последний элементы списка, мне надо чтобы ИД в списке были в том порядке, в котором они пришли от сервера, для того чтобы уже оттуда извлечь последний элемент, который в свою очередь должен содержать последний ИД трупа...Fenix wrote:Хорошо, пытаемся модифицировать GetLastCorpse: