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: