Page 1 of 1

FindType

Posted: 10.01.2010 20:13
by NoSilence
Как работает данная функция? Отправляется запрос на сервер либо производит поиск в уже отправленных итемах клиенту?

Дело в том, что я написал недавно скрипт. И по словам ГМа логи забиты моим флудом. Выяснилось, что данный флуд вызывает хил.

Code: Select all

if HealSelf then begin
  FindTypeEx($0E21, $0000, BackPack, false);
  if FindCount > 0 then
    Heal(FindItem, Self)
  else begin
    FindDistance:= 2;
    FindTypeEx($0E21, $0000, Ground, false);
    if FindCount > 0 then 
      Grab(FindItem, 200)
    else
      UOSay('No bandages were found.') end end;

Re: FindType

Posted: 10.01.2010 20:53
by CFA
Никаких запросов на сервер findType не вызывает, поиск идет среди тех итемов, которые отправил сам сервер.

Heal(FindItem, Self) в студию

Posted: 10.01.2010 21:12
by NoSilence

Code: Select all

function Heal(Bandage, Target: cardinal):boolean;
var
  heal_lasttime: tdatetime;
  heal_ercounter: byte;
begin
result:= false;
if GetQuantity(Bandage) < 1 then exit;
heal_lasttime:= Now;
heal_ercounter:= 0;
UseObject(Bandage);
repeat
  wait(100)
  if InJournalBetweenTimes(Heal_HealMsg, heal_lasttime, Now) >= 0 then begin
    TargetToObject(Target);
    result:= true;
    exit end;
  if InJournalBetweenTimes(Heal_ExitMsg, heal_lasttime, Now) >= 0 then exit;
  heal_ercounter:= heal_ercounter + 1;
until heal_ercounter >= Heal_MaxErrorTime;
end;

Posted: 10.01.2010 21:22
by Wonder Pooh
я так понял repeat until ты используешь чтобы дождаться таргета от бинта? может тогда так проще?

Code: Select all

function Heal(Bandage, Target: cardinal):boolean;
begin
result:= false;
if GetQuantity(Bandage) < 1 then exit;
if targetpresent then canceltarget;
UseObject(Bandage);
waitfortarget(5000);
if targetpresent then begin
  targettoobject(target);
  result := true;
  exit;
end;
end;

Posted: 10.01.2010 23:27
by NoSilence
Wonder Pooh wrote:я так понял repeat until ты используешь чтобы дождаться таргета от бинта? может тогда так проще?
Нет, смысл вот в чем: если бинты уже используется, то указатель не появится и waitfortarget(5000) будет ждать 5 секунд, а мне нужно это время свести к минимуму. Если же поставить меньше waitfortarget(1000), есть шанс, что при лаге таргет появится позже и будет сброшен при дальнейшей работе скрипта.

кст, про targetpresent как он работает? (ну, т.е. опять же, где-то сохраняется присутствие таргета или отправляется запрос на сервер) :)

Posted: 10.01.2010 23:43
by Wonder Pooh
NoSilence wrote:если бинты уже используется, то указатель не появится
ну зацикливать явно лишнее.. тотже чеклаг срабатывает 100%, если пришел результат от тыкания по бэкпаку, значит сообщения от бинтов уже получено.. потом динамические паузы, либо следить за журналом с успешными, неуспешным или прерваным лечением, или за количеством бинтов.. сколько пользовался, сбоев никогда не было :)
NoSilence wrote:кст, про targetpresent как он работает? (ну, т.е. опять же, где-то сохраняется присутствие таргета или отправляется запрос на сервер) :)
а какая разница? в любом случае, либо сервер сам тебе отправляет эту информацию, либо он это делает по твоему запросу.. ни о каком флуде тут явно речи нету :)

Posted: 10.01.2010 23:48
by NoSilence
Да я уже не знаю где искать, только одна зацепка на хил (стояло два чара на одном скрипте, а флуд шел только от хилящегося). Хм, а идея с сообщением об удачном/неудачном хиле хорошая. Переделаю, посмотрю.

Всем спасибо.

Posted: 10.01.2010 23:58
by Wonder Pooh
NoSilence wrote:Да я уже не знаю где искать
Имхо, искать надо в логах сферы :) Оттуда будет видно, какое твое действие вызывает флуд. А потом уже смотреть где оно встречается в твоих скриптах.

А вообще, сейчас мысль мелькнула, скорее это кривые скрипты сферы.. Тот же хила переписали криво, и когда персонаж лечится, сфера пишет ошибочку.. А скрипт просто повторяет это регулярно :)

Posted: 11.01.2010 1:33
by Vizit0r

Code: Select all

    exit end;
красиво, да.

завтра гляну скрипты

Posted: 14.01.2010 13:55
by NoSilence
Vizit0r wrote:

Code: Select all

    exit end;
красиво, да.
Бывает парсер выдает ошибку, что перед until нету ;
Эстетика кодописания :D

Posted: 14.01.2010 14:04
by Vizit0r
это не эстетика, это правильный синтаксис называется.