Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

FindType

тут можно задать вопрос по скриптингу
Post Reply
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

FindType

Post 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;
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: FindType

Post by CFA »

Никаких запросов на сервер findType не вызывает, поиск идет среди тех итемов, которые отправил сам сервер.

Heal(FindItem, Self) в студию
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

Post 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;
Wonder Pooh
Neophyte
Neophyte
Posts: 11
Joined: 10.01.2010 19:28

Post 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;
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

Post by NoSilence »

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

кст, про targetpresent как он работает? (ну, т.е. опять же, где-то сохраняется присутствие таргета или отправляется запрос на сервер) :)
Wonder Pooh
Neophyte
Neophyte
Posts: 11
Joined: 10.01.2010 19:28

Post by Wonder Pooh »

NoSilence wrote:если бинты уже используется, то указатель не появится
ну зацикливать явно лишнее.. тотже чеклаг срабатывает 100%, если пришел результат от тыкания по бэкпаку, значит сообщения от бинтов уже получено.. потом динамические паузы, либо следить за журналом с успешными, неуспешным или прерваным лечением, или за количеством бинтов.. сколько пользовался, сбоев никогда не было :)
NoSilence wrote:кст, про targetpresent как он работает? (ну, т.е. опять же, где-то сохраняется присутствие таргета или отправляется запрос на сервер) :)
а какая разница? в любом случае, либо сервер сам тебе отправляет эту информацию, либо он это делает по твоему запросу.. ни о каком флуде тут явно речи нету :)
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

Post by NoSilence »

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

Всем спасибо.
Wonder Pooh
Neophyte
Neophyte
Posts: 11
Joined: 10.01.2010 19:28

Post by Wonder Pooh »

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

А вообще, сейчас мысль мелькнула, скорее это кривые скрипты сферы.. Тот же хила переписали криво, и когда персонаж лечится, сфера пишет ошибочку.. А скрипт просто повторяет это регулярно :)
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Code: Select all

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

завтра гляну скрипты
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

Post by NoSilence »

Vizit0r wrote:

Code: Select all

    exit end;
красиво, да.
Бывает парсер выдает ошибку, что перед until нету ;
Эстетика кодописания :D
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

это не эстетика, это правильный синтаксис называется.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply