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

использовать что-то раз в n секунд

тут можно задать вопрос по скриптингу
Post Reply
L'inconnu
Novice
Novice
Posts: 73
Joined: 03.02.2006 8:46
Contact:

использовать что-то раз в n секунд

Post by L'inconnu »

скажем надо раз в 30 секунд что-то сделать, обычно я запоминаю текущее время в какой-нибудь переменной, и по ходу скрипта проверяю не стало ли текущее время больше переменной + n
а тут что-то я запустался, вот пример:

program Time;
var my_timer : TDateTime;
Begin

AddToSystemJournal(TimeToStr(Time));
my_timer := Time + 60/86400;
AddToSystemJournal(TimeToStr(my_timer));

End.

дни вроде бы накручивает, а вот секунды ну никак, выводит одно и то же время:
12:10:42: 12:10:42
12:10:42: 12:10:42
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Используй лучше Timer.
Например так:

Code: Select all

program Time;
var ItemIDTime : Cardinal;
Dager : Cardinal;

{$Include 'all.inc'}

Begin
WaitConnection(3000); 
Dager := FindType($0F51, BackPack);
if (Dager = 0) then
    begin
    AddToSystemJournal('Dager not finded');
    Exit;
    end;
SetARStatus(true);
ItemIDTime := 0;


while true do
begin
WaitConnection(3000); 

{Item ID by timer} 
if ((Timer > (ItemIDTime + (11 * 1000))) or (ItemIDTime = 0)) then 
   begin 
   UseSkill('item identification');
   WaitTargetObject(Dager);
   ItemIDTime :=Timer; 
   end; 

wait(500);
end;


End.
Last edited by Miralex on 27.02.2006 13:11, edited 1 time in total.
L'inconnu
Novice
Novice
Posts: 73
Joined: 03.02.2006 8:46
Contact:

Post by L'inconnu »

сенькс, в шпаргалке "попытка создать полный список всего чего может стелс" его не нашел просто.
Acronym
Novice
Novice
Posts: 114
Joined: 10.05.2005 18:42
Location: Odessa, NDW
Contact:

Post by Acronym »

Timer : Cardinal - Число, меняющееся каждую миллисекунду.

Каково происхождение этого числа?
Выводил в AddToSystemJournal его значения,
числа порядка - 22895921.


ПС. К самой функции претензий не имею, за равные промежутки времени
значение изменялось на равные значения.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

воспринимай его просто как число которое меняеться :)
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Acronym wrote: Каково происхождение этого числа?
http://msdn.microsoft.com/library/defau ... kcount.asp
Acronym
Novice
Novice
Posts: 114
Joined: 10.05.2005 18:42
Location: Odessa, NDW
Contact:

Post by Acronym »

Спасибо, Miralex, обязательно прочитаю.

Меня интересовала средняя продолжительность цикла в тех или иных скриптах, а как сделать через timer я не понял. Придумалось конвертировать системное время в секунды, фиксировать значения и пользовать полученную разницу.

Время конвертировал следующим:

Code: Select all

procedure TimeInSeconds(out t : Integer);
var
TL : TStringList;

begin
TL := TStringList.Create;
StrBreakApart(TimeToStr(Now), ':', TL);
if TL.Count > 0 then
    begin
t := ((StrToInt(TL.Strings[0]) * 3600) + (StrToInt(TL.Strings[1]) * 60) + (StrToInt(TL.Strings[2]))); 
    end;
TL.Free;
end;
На выходе получал t : Integer в секундах.
Если не использовать на смене суток, то получаем более менее точные данные.

PS. Это случайно не придумывание велосипеда?
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Это велосипед.

Легче запомнить состояние таймера до тестируемого блока и после. Дальше вычислишь разность - это и будет время работы (мс) твоего тестируемого блока.
Post Reply