Page 1 of 1
проблема с журналом
Posted: 11.10.2011 11:15
by Tiger89
Code: Select all
Function CarveTarget(CorpseID: Cardinal): Boolean;
Var
sTime: TDateTime;
Begin
sTime := Now;
Repeat
Wait(100);
UseType($0EC3, $FFFF);
TargetObject(CorpseID);echo(i2s(LineCount));
While (InJournalBetweenTimes('You carve away some meat.|You carve the corpse but find nothing usefull.', sTime, Now) = -1) And (Now < sTime + (5/86400)) Do Wait(100);
Until (LineCount > 0) Or (Now > sTime + (15/86400));
If (LineCount > 0) Then
Begin
Echo('Труп порезан');
Loot(CorpseID);
Inc(KilledTargets);//Увеличиваем счетчик убитых птиц
End
Else Echo('Труп недоступен');
Result:= True;
End;
причем сообщение в журнале появляется программа из цикла выходит
Re: проблема с журналом
Posted: 11.10.2011 12:05
by Fenix
А теперь вопрос... Собственно где вопрос? Или ты просто информацией поделился?
Учимся писать красиво:
Code: Select all
function CarveTarget(CorpseID: Cardinal): Boolean;
var
Counter: Cardinal;
STime: TDateTime;
Knife: Cardinal;
begin
Knife := FindType(Backpack, $0EC3);
if Knife > 0 then begin
Counter := 0;
STime := Now;
while Counter > 3 do begin//Число попыток
Inc(Counter);
Wait(100);
if TargetPresent() then CancelTarget();
UseObject(Knife);
CheckLag(15000);
WaitForTarger(3000);
if TargetPresent() then begin
TargetToObject(CorpseID);
CheckLag(15000);
repeat
if InJournalBetweenTimes('You carve away some meat.|You carve the corpse but find nothing usefull.', sTime, Now) >= 0 then begin
AddToSystemJournal("Порезали труп");
Result := True;
Exit;
end else begin
Wait(100);
end;
until Now > sTime + Counter * 5/86400 do begin// sTime + Counter * 5/86400 - Учитываем число попыток для ожидания
end;
AddToSystemJournal("Превышено время ожидания. Переходим к следующей попытке.");
end;
AddToSystemJournal("Превышено число попыток.");
end else begin
AddToSystemJournal("Инструмент для разделки не найден.");
end;
Result := False;
end;
Единственное замечание - данный код не учитывает продолжительность сейвов, лагов и дисконектов.
Соответсвенно убран инкремент порезаных тушек и вызов метода лута из трупа. На мой взгляд, эти методы следует вызывать из другого места, следом за успешным вызовом CarveTarget (хотя это уже на вкус программиста).
Re: проблема с журналом
Posted: 11.10.2011 17:34
by Tiger89
Дело в том что он иногда не лутает труп, вроде режет но не лутает.
LineCount
возвращает ноль но почему то до этого
While (InJournalBetweenTimes('You carve away some meat.|You carve the corpse but find nothing usefull.', sTime, Now) = -1) And (Now < sTime + (5/86400)) Do Wait(100);
из цикла выходит как раз после этого сообщения
Re: проблема с журналом
Posted: 11.10.2011 17:35
by Tiger89
удалено
Re: проблема с журналом
Posted: 11.10.2011 17:54
by Fenix
Возможно, что LineCount и не используется. Попробуй ограничиться использованием InJournalBetweenTimes.
Re: проблема с журналом
Posted: 11.10.2011 17:56
by Tiger89
ну в моем скрипте надо было так, просто у нас на шарде когда живка дохнет, то падает на землю 2 трупа, 1 из них исчезает быстро и поэтому выходят конфликты