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

Рекол, помогите разобрать

тут можно задать вопрос по скриптингу
Post Reply
Ragnes
Posts: 5
Joined: 29.07.2006 12:19

Рекол, помогите разобрать

Post by Ragnes »

Вот код процедуры рекола
помогите пожалуйста сделать денамическое ожидание в строке * но так что бы она завершала свою работу через N секунд(т.е. в случаи дисконекта в этот момент не замерала там навсегда)
Скрипт выполняет:
- проверка на ману. пока мана не будет полной т.е. = Int он будет медитировать(процедура есть)
- пытается срыколится по номеру руны, до тех пор пока текущее значение маны не станет меньше значения manna(фиксируется перед каждой попыткой рекола) и в журнале не будет сообщения о физле каста
- если нет реагентов чар попытается среколится по заряду, на лодку и там взять реги.
- если заряда нет фулдисконект.

по возможности прошу указать на сделаные мной ошибки :!:

Code: Select all

Const
   RuneBook = ID;
   NumberHomeRune = 9;
........................................................

Procedure Recal(RuneNumber:Integer);
var
   manna:Integer;
   cTimeRecal:TDateTime;
   RecalTimer:Cardinal;
begin
if not Dead then
   Disarm;
   wait(800);
   CheckMana;
   RecalTimer:=Timer;
   repeat
      cTimeRecal:=now;
      UseObject(RuneBook);
      manna:=Mana
      WaitGump(IntToStr(600 + RuneNumber));
      wait(5000); //*
      if (InJournalBetweenTimes("You don't have enough reagents to cast that spell",cTimeRecal,now)>=0) then
      begin
         UseObject(RuneBook);
         WaitGump(IntToStr(2 * NumberHomeRune));
         wait(5000); //*
         if (InJournalBetweenTimes('is out of charges.',cTimeRecal,now)>=0) then
         begin
            AddToSystemJournal ('Sorry... But I am not have reagents and charges for recal. Script stop.');
            FullDisconnect;
         end
         FuncOnBoad;
         wait(200);
         manna:=Mana;
      end
   until ((not InJournalBetweenTimes('The spell fizzles',cTimeRecal,now)>=0) and (manna>Mana)) or (Timer>(RecalTimer+(2*60*1000))
end
end;
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Много неточностей.
Сравни с нижеприведенным скриптом и сам уже решай:

Code: Select all

function RecallRB(RBID : Cardinal; RuneNumber : Integer) : Boolean;
var CurMana : Integer;
    Recalled : Boolean;
    c,d,e,f : Integer;
    stime : TDateTime;
    LastX, LastY : Integer;
begin
wait(500);
AddToSystemJournal('function RecallRB started');
WaitConnection(3000);
CheckSave;
CheckTargetError(5, 2);
WaitConnection(3000);
CheckSave;
CheckDead;
LastX := GetX(Self);
LastY := GetY(Self);
Recalled := false;
while (not Recalled) do
begin
WaitConnection(3000);
CheckSave;
CheckTargetError(5, 2);
WaitConnection(3000);
CheckSave;
CheckDead;
{Если в руках чтото есть, то снимаем}
if ObjAtLayer(RhandLayer) <> 0 then
    begin
    disarm;
    wait(1000);
    end;
{Ждем пока восстановиться мана, если она не полная}
while Mana < MaxMana do
    begin
    UseSkill('Meditation');
    wait(8000);
    end;
wait(500);
stime := Now;
CurMana := Mana;
{Если нету регов на рекол, то реколимся по заряду}
if (Count(BP) > 0) and (Count(MR) > 0) and (Count(BM) > 0) then
    begin
    {Recall используя реги}
    UseObject(RBID);
    WaitGump(IntToStr(600 + RuneNumber));
    end
else
    begin
    {Recall используя заряд РБ}
    AddToSystemJournal('Регов нету! Recall по заряду!');
    UseObject(RBID);
    WaitGump(IntToStr(2 * RuneNumber));
    end;
AddToSystemJournal('Try to recall');
repeat
   c := InJournalBetweenTimes('perform|doing', stime, Now); 
   d := InJournalBetweenTimes('fizzles', stime, Now); 
   e := InJournalBetweenTimes('cast with things in your hands', stime, Now); 
   f := InJournalBetweenTimes('your book is out of charges', stime, Now); 
   wait(500); 
until (c >= 0) or (d >= 0) or (e >= 0) or (Mana < CurMana) or (Now > stime + (1.0/1440));
wait(500);
{Если шард говорит что нету зарядов, то полный дисконнект, пока не забросят вручную заряды}
if (f >= 0) then
    begin
    AddToSystemJournal('Нету зарядов!');
    FullDisconnect;
    wait(2000);
    WaitConnection(3000);
    CheckSave;
    CheckTargetError(5, 2);
    WaitConnection(3000);
    CheckSave;
    CheckDead;
    end;
{Если среколились, то Recalled := true;}
if (Mana < CurMana) then Recalled := true;
end; {End while not Recalled}
if Recalled then result := true
else Result := false;
end;
Цикл с динамическим ожиданием есть. Смотри блок:

Code: Select all

repeat
......
until ****** or (Now > stime + (1.0/1440));
Acronym
Novice
Novice
Posts: 114
Joined: 10.05.2005 18:42
Location: Odessa, NDW
Contact:

Post by Acronym »

У меня в общих чертах так:

Code: Select all

procedure Recall(NGump : String; RB : Cardinal);

***

while ((x = GetX(Self)) and (y = GetY(Self))) do
	begin
		while ObjAtLayer(RhandLayer) > 0 do
			begin
				UnEquip(RHandLayer);
				Wait(1000);
			end;
		WaitGump(NGump);
		sTime := Now; 
		UseObject(RB);
		WaitJournalLine( Now, CharName+': The spell fizzles', 6000 );
	end;

***

а так вызываем из самого скрипта:

Code: Select all


***

RBM : Cardinal;
RNum : String;

***

RBM:= $0000000;

***

for i:= 601 to 606 do
   begin 
      RNum:=inttostr(i);

      ***

      Recall(RNum,RBM);

      ***
Почему for i:= 601 to 606 do? - у меня 6 точек в книге...
Почему вообще именно так? - по другому если можно - мозги не дошли...

И вообще у меня на шарде сам тайл в шахтах - вроде одинаков - 400

Code: Select all

***

   for x:=-2 to 2 do 
   begin 
      for y:=-2 to 2 do 
      begin 

***

WaitTargetTile( 400,( GetX( Self ) + x ),( GetY( Self ) + y ),GetZ( Self ));
а можно там копать или нельзя - определяем из журнала.
Dani
Neophyte
Neophyte
Posts: 30
Joined: 17.03.2005 15:43
Contact:

Post by Dani »

подскажыте как правильно сдерать значение гампы?
вот нашел кнопку например:
37] utton 270 275 2271 2271 1 0 2 - рекол
38] utton 320 275 2291 2291 1 0 3 - гейт
39] utton 303 330 4005 4006 1 0 4 - вынуть руну
где тут значение из этого хлама :roll:
иль я неправильно вообще рассматриваю эти кнопки?
первые 2 цифры ет как я понял координаты этих кнопок, а вот все остальное непойму, подскажите плс :oops:
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Последняя цифра - ID кнопки :wink:
Dani
Neophyte
Neophyte
Posts: 30
Joined: 17.03.2005 15:43
Contact:

Post by Dani »

Miralex wrote:Последняя цифра - ID кнопки :wink:
эээ... ет канешна гуд но как бароцца с таким вот:

35] age
36] roppedtext 255 235 125 20 105
37] utton 270 275 2271 2271 1 0 2
38] utton 320 275 2291 2291 1 0 3
39] utton 303 330 4005 4006 1 0 4
40] ext 262 350 80 1
41] roppedtext 420 235 125 20 105 1
42] utton 435 275 2271 2271 1 0 2
43] utton 485 275 2291 2291 1 0 3
44] utton 468 330 4005 4006 1 0 4

это 2 страницы рунабуки, айди одинаковые, а как их разлечать? :lol:
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Скинь картинку с этими страницами и полный Gump Info.
Dani
Neophyte
Neophyte
Posts: 30
Joined: 17.03.2005 15:43
Contact:

Post by Dani »

_____infogump_______
serial 0x4003421f
gumpid 0x000003ef
X 0
Y 0
1616 packet size
0 reply packet size
Buttons: ________
Checks&Radios: __
Entryes: ________
All commands: ____
1] umppic 225 200 220
2] utton 255 375 2225 2225 0 2
3] age
4] umppic 250 220 5
5] umppic 280 220 5
6] umppic 290 220 5
7] umppic 300 220 5
8] umppic 310 220 5
9] umppic 320 220 5
10] umppic 330 220 5
11] umppic 340 220 5
12] umppic 355 220 5
13] umppic 415 220 5
14] umppic 445 220 5
15] umppic 455 220 5
16] umppic 465 220 5
17] umppic 475 220 5
18] umppic 485 220 5
19] umppic 495 220 5
20] umppic 505 220 5
21] umppic 520 220 5
22] ext 280 205 90
23] ext 428 205 100
24] ext 490 205 0
25] utton 410 260 2472 2473 1 0
26] ext 440 262 80
27] utton 410 290 2472 2473 1 0
28] ext 440 292 80
29] ext 415 335 100
30] ext 415 355 100
31] utton 255 238 2118 2117 1 0 1
32] roppedtext 273 235 115 20 105
33] utton 255 253 2118 2117 1 0 1
34] roppedtext 273 250 115 20 105
35] age
36] roppedtext 255 235 125 20 105
37] utton 270 275 2271 2271 1 0 2
38] utton 320 275 2291 2291 1 0 3
39] utton 303 330 4005 4006 1 0 4
40] ext 262 350 80 1
41] roppedtext 420 235 125 20 105 1
42] utton 435 275 2271 2271 1 0 2
43] utton 485 275 2291 2291 1 0 3
44] utton 468 330 4005 4006 1 0 4
45] ext 427 350 80 1
46] utton 248 204 2205 2205 0 1
Text: ____________
0] Книга Рун
1] Заряды:
2] 10 (10)
3] Перезарядка
4] Добавить руну
5] Максимум рун: 9
6] Всего рун: 2
7] Rune to:Test1
8] Rune to:Test2
9] Rune to:Test1
10] Вытащить руну
11] Rune to:Test2
12] Вытащить руну

Image
Image
Post Reply