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
красиво, да.
завтра гляну скрипты
Posted: 14.01.2010 13:55
by NoSilence
Vizit0r wrote:
красиво, да.
Бывает парсер выдает ошибку, что перед until нету ;
Эстетика кодописания

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