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:


