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

Использование ловушек AutoMenu

тут можно задать вопрос по скриптингу
Post Reply
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Использование ловушек AutoMenu

Post by Fullmetal8ender »

Не получаеться работать с этой командой. И не пойму в чем причина.
Может кто нибудь кинет пару обьяснений в сторону использования этой команды?
Ловушку ставят перед использованием навыка или предмета?
Нужны ли задержки?
И какие вобще особенности?

Скрипт

Code: Select all

AutoMenu('circle','8'); 
AutoMenu('spell','Resurrection');
UseObject($40070B80);    

Должен рисовать свитки, но ничего не происходит. Ошибок тоже не выдает.
$40070B80 - ИД кисточки
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

попробуй наоборот

Code: Select all

UseObject($40070B80);    
AutoMenu('circle','8'); 
AutoMenu('spell','Resurrection'); 
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

кусок с моего скрипта столетней давности, но прекрасно работающего

Code: Select all

	While Mana > 30 do 
	begin
		if TargetPresent then CancelTarget;
		stime := Now;
		WaitTargetObject(blank)
		CheckSave;
		UseSkill('Inscription');
		repeat 
			CheckSave;
			InJournalBetweenTimes('spellbook|already|Targetting', stime, Now); 
			wait(100); 
		until (LineCount > 0) or (Now > stime + (3.0/1440)); 
		stime := Now;
		WaitForTarget(5000);
		if TargetPresent then TargetToObject(SB);
		repeat 
			CheckSave;
			InJournalBetweenTimes('create|fail|reach|Targetting', stime, Now); 
			wait(100); 
		until (LineCount > 0) or (Now > stime + (3.0/1440)); 
	end;
ловушки (что на меню, что на гампы, что на таргеты) - можно ставить как до юза, так и после. лучше ставить до, но это не аксиома.

задержка нужна после - для ожидания результата действия.

какие там еще особенности? непомню вроде таковых
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Vizit0r спасибо за кусочек. Попробую.
Просто интересовала возможность использования ловушки на меню...
Ведь должно ж работать?

ПС
Вот не понял момент.
Как вы выбираете какой свиток рисовать?
После if TargetPresent then TargetToObject(SB); уже идет рисование?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

незнаю как у вас, а ну нас при инскрипте всегда было 2 таргета - первый на бланкскроллы, второй на спеллбуку, и тогда появляется меню - первое с выбором круга, второе с выбором заклинания.

автоменю не вставил тогда.

вот полный скрипт.

Code: Select all

program Inscription;
var
time, blank,SB : Cardinal;
stime : TDateTime;
const writtenscroll = $1F60;

{$Include 'all.inc'}

procedure Dropscrolls(scroll:Word);
begin
	findtype(scroll,backpack);
	IF FindFullQuantity > 0 then
	begin
		Stack(scroll,$FFFF);
		Wait(300);  
	end;
end;

procedure Getscrolls(scroll:Word);
begin
	findtype(scroll,backpack);                    
	IF FindFullQuantity < 50 then		  
	begin
		Grab(findtype(scroll,ground),500); 
		wait(300)			  
	end;				  
end;

procedure GetReg(reg:Word);
begin
	Dropscrolls(writtenscroll);
	findtype(reg,backpack);
	IF FindFullQuantity < 50 then
	begin
		Grab(findtype(reg,ground),500); 
		wait(300)
	end;
end;

procedure RegsCheck(BMoss, MRoot, BPearl, GArlic, GSerg, SAsh, NShade, SSilk : Integer); 
begin
  IF BMoss  <> 0 then GetReg(BM);
  IF MRoot  <> 0 then GetReg(MR);
  IF BPearl <> 0 then GetReg(BP);
  IF GArlic <> 0 then GetReg(GA);
  IF GSerg  <> 0 then GetReg(GS);
  IF SAsh   <> 0 then GetReg(SA);
  IF NShade <> 0 then GetReg(NS);
  IF SSilk  <> 0 then GetReg(SS);
end;

Begin  // Main program start!!!

AutoMenu('circle','7');
AutoMenu('spell','Gate');
SB:=findtypeex($0EFA,0,backpack,false);

Hungry(1,$FFFFFFFF);
time :=Timer;
while true do
begin
	if Timer > Time + 10*60*1000 then
	begin
		Hungry(1,$FFFFFFFF);
		time :=Timer;
	end;
	blank:=findtype($E34,backpack);
	CheckTargetError(10,2);
	waitconnection(130000);
	stime := Now;
	while (blank = 0) and (Now < stime + (3.0/1440)) do
	begin
		wait(100);
		blank:=findtype($E34,backpack);
	end;
	if (Now > stime + (3.0/1440)) then 
	begin
		AddToSystemJournal('Finding blank timeout');
		Disconnect;
	end;
	While Mana > 30 do 
	begin
		if TargetPresent then CancelTarget;
		stime := Now;
		WaitTargetObject(blank)
		CheckSave;
		UseSkill('Inscription');
		repeat 
			CheckSave;
			InJournalBetweenTimes('spellbook|already|Targetting', stime, Now); 
			wait(100); 
		until (LineCount > 0) or (Now > stime + (3.0/1440)); 
		stime := Now;
		WaitForTarget(5000);
		if TargetPresent then TargetToObject(SB);
		repeat 
			CheckSave;
			InJournalBetweenTimes('create|fail|reach|Targetting', stime, Now); 
			wait(100); 
		until (LineCount > 0) or (Now > stime + (3.0/1440)); 
	end;
	while Mana < Int do
	begin
		CheckSave;
		UseSkill('Meditation');
		wait(3500);
	end;
	wait(7000);
	CheckSave;
	IF Weight > 300 then Dropscrolls(writtenscroll);
	RegsCheck(0,1,1,0,0,1,0,0);
	Getscrolls($E34);           // blank
end;

End.
кстати,
AutoMenu('circle','7');
AutoMenu('spell','Gate');
совсем не надо в цикле ставить, одного раза (как в скрипте приведенном) в начале - вполне достаточно, если не надо менять значения в меню
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

У нас просто после клика на СБ ничего не происходит.
Поэтому для вызова меню юзаем кисточку.

Вопрос по поводу автоменю
AutoMenu (Promt, Choice : String) - Тоже что и WaitMenu, только ловушка многоразовая.

Choice может быть задано одним из специальных указателей:
'(номер)' - Выбрать Choice с указанным номером.
'(first)' - Выбрать первый Choice.
'(last)' - Выбрать последний Choice.
'(random)' - Случайный выбор Choice.
'(cancel)' - Отмена меню.

Prompt может быть специальным указателем:
'(any)' - Ловушка будет срабатывать на любое меню, в случае, если Choice подходит по критериям.
Команда выполняеться с двумя параметрами.
Разберем ситуацию.
Я нажимаю на чернильницу и появляеться меню.
Раздел Categories и список кругов.
Что каком у параментру принадлежит?
Могу ли я для выбора 8-го круга ввести
AutoMenu(9) - только с одним параметром, т.к. 8-й круг идет 9-м в списке.
Дальше какими параметрами указать на свиток resurection?
В вашем примере AutoMenu('spell','Gate') что означает spell?
А еще возле resurection 2 кнопки, одна сразу делает - вторая выведет новое меню. На какую из них нажмет ловушка?

Скриншотик самого меню (мож пригодиться)
http://pic.ipicture.ru/uploads/090810/duVtvnlyTS.jpg
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

нуу, приехали.

это гамп, а не меню :)

автоменю здесь естественно не работает, и работать не будет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Засада. :oops:
А где же тогда можна увидеть меню? (ну что бы знать как отличить первое от второго) если клик на СБ ничего не дает.

Выходит тут надо использовать что-то типа
WaitGump('Eighth Circle')
WaitGump('Ressurection')

ПС прошу прощение за нубизну. в УО гамаю совсем недавно. :roll:
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Вот такой вот гамп

Code: Select all

Serial: 5C9B
GumpID: 77567887
X: 0028
Y: 0028
Pages: 2
Gump Options:

GumpPicTiled: X Y   Width   Height   Gump_ID
GumpPicTiled: 10  10  510  22  2624
GumpPicTiled: 10  292  150  45  2624
GumpPicTiled: 165  292  355  45  2624
GumpPicTiled: 10  342  510  85  2624
GumpPicTiled: 10  37  200  250  2624
GumpPicTiled: 215  37  305  250  2624

ResizePics: X   Y   ID   Width   Height   Page
0   ResizePic: 0  0  5054  530  437  0

XmfHTMLGumpColor: X   Y   Width   Height   ClilocID   Background   scrollbar   Hue
0   ResizePic: 10  12  510  2060969  0  0  32767
1   ResizePic: 10  37  200  2260970  0  0  32767
2   ResizePic: 215  37  305  2260971  0  0  32767
3   ResizePic: 10  302  150  2560972  0  0  32767
4   ResizePic: 50  405  150  1828401  0  0  32767
5   ResizePic: 305  405  150  1860973  0  0  32767
6   ResizePic: 305  365  150  1860977  0  0  32767
7   ResizePic: 50  63  150  1860974  0  0  32767
8   ResizePic: 50  83  150  1861329  0  0  32767
9   ResizePic: 50  103  150  1861330  0  0  32767
10   ResizePic: 50  123  150  1861331  0  0  32767
11   ResizePic: 50  143  150  1861332  0  0  32767
12   ResizePic: 50  163  150  1861333  0  0  32767
13   ResizePic: 50  183  150  1861334  0  0  32767
14   ResizePic: 50  203  150  1861335  0  0  32767
15   ResizePic: 50  223  150  1861336  0  0  32767
16   ResizePic: 50  243  150  1813101  0  0  32767
17   ResizePic: 50  263  150  1861254  0  0  32767
18   ResizePic: 255  63  220  1861397  0  0  32767
19   ResizePic: 255  83  220  1861398  0  0  32767
20   ResizePic: 255  103  220  1861399  0  0  32767
21   ResizePic: 255  123  220  1861400  0  0  32767
22   ResizePic: 255  143  220  1861401  0  0  32767
23   ResizePic: 255  163  220  1861402  0  0  32767
24   ResizePic: 255  183  220  1861403  0  0  32767
25   ResizePic: 255  203  220  1861404  0  0  32767

CheckerTrans: X   Y   Width   Height   Page
0   CheckerTrans: 10  10  510  417  0

GumpButtons: X   Y   Released_ID  Pressed_ID   Quit   Page_ID   Return_value   Page
0   GumpButton: 15  402  4017  4019  1  0  0  0
1   GumpButton: 270  402  4005  4007  1  0  21  0
2   GumpButton: 270  362  4005  4007  1  0  49  0
3   GumpButton: 15  60  4005  4007  1  0  28  0
4   GumpButton: 15  80  4005  4007  1  0  1  0
5   GumpButton: 15  100  4005  4007  1  0  8  0
6   GumpButton: 15  120  4005  4007  1  0  15  0
7   GumpButton: 15  140  4005  4007  1  0  22  0
8   GumpButton: 15  160  4005  4007  1  0  29  0
9   GumpButton: 15  180  4005  4007  1  0  36  0
10   GumpButton: 15  200  4005  4007  1  0  43  0
11   GumpButton: 15  220  4005  4007  1  0  50  0
12   GumpButton: 15  240  4005  4007  1  0  57  0
13   GumpButton: 15  260  4005  4007  1  0  64  0
14   GumpButton: 220  60  4005  4007  1  0  2  1
15   GumpButton: 480  60  4011  4012  1  0  3  1
16   GumpButton: 220  80  4005  4007  1  0  9  1
17   GumpButton: 480  80  4011  4012  1  0  10  1
18   GumpButton: 220  100  4005  4007  1  0  16  1
19   GumpButton: 480  100  4011  4012  1  0  17  1
20   GumpButton: 220  120  4005  4007  1  0  23  1
21   GumpButton: 480  120  4011  4012  1  0  24  1
22   GumpButton: 220  140  4005  4007  1  0  30  1
23   GumpButton: 480  140  4011  4012  1  0  31  1
24   GumpButton: 220  160  4005  4007  1  0  37  1
25   GumpButton: 480  160  4011  4012  1  0  38  1
26   GumpButton: 220  180  4005  4007  1  0  44  1
27   GumpButton: 480  180  4011  4012  1  0  45  1
28   GumpButton: 220  200  4005  4007  1  0  51  1
29   GumpButton: 480  200  4011  4012  1  0  52  1
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

В общем разобрался.
В WaitGump надо тыкать не №кнопки а её Return_value (предпоследний столбик)
Тогда все работает!
А еще выяснилось что WaitGump('0') - это почти всегда Закрыть гамп :idea:
Last edited by Fullmetal8ender on 11.08.2009 17:58, edited 1 time in total.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

нет, не всегда.
в большинстве случаев, но это не аксиома.

а насчет Return_Value - я был уверен что ты знаешь :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

я в силу своей наивности подставлял номер кнопки :lol:
Post Reply