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

Скриптинг в Stealth для чайников.

тут можно задать вопрос по скриптингу
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Re: Скриптинг в Stealth для чайников.

Post by Gauhar »

GeeZeR wrote:То ли я перегрелся то ли глюк, короче сохранил простой скрипт в файле Cast.sc

Code: Select all

PROGRAM Cast;
BEGIN
Cast('Cure');
END.
Пытаюсь запустить и мне выдаёт:

13:59:41:576 [UO Evolution (Drac)]: Compiling
13:59:41:626 [UO Evolution (Drac)]: Compiler: [Error] (Cast.sc at 3:12): Cannot apply () to "Cast" ;
Error line is: " Cast('Cure'); "
13:59:41:628 [UO Evolution (Drac)]: Compiling failed
13:59:41:629 [UO Evolution (Drac)]: Script Cast.sc stopped successfuly

Шард: UO Evolution
Клиент: 7.0.13.4
PROGRAM Cast; переименуйте в
PROGRAM Test; и проверьте еще раз.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

Gauhar wrote:
GeeZeR wrote:То ли я перегрелся то ли глюк, короче сохранил простой скрипт в файле Cast.sc

Code: Select all

PROGRAM Cast;
BEGIN
Cast('Cure');
END.
Пытаюсь запустить и мне выдаёт:

13:59:41:576 [UO Evolution (Drac)]: Compiling
13:59:41:626 [UO Evolution (Drac)]: Compiler: [Error] (Cast.sc at 3:12): Cannot apply () to "Cast" ;
Error line is: " Cast('Cure'); "
13:59:41:628 [UO Evolution (Drac)]: Compiling failed
13:59:41:629 [UO Evolution (Drac)]: Script Cast.sc stopped successfuly

Шард: UO Evolution
Клиент: 7.0.13.4
PROGRAM Cast; переименуйте в
PROGRAM Test; и проверьте еще раз.
ыы точно!
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

Ппц... Спасибо. А в чём соль - это уже фишки паскаля мне неведомые? Типа получилось неправильное обращение к свойствам самой программы "Cast" или как-то так?
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

GeeZeR wrote:Ппц... Спасибо. А в чём соль - это уже фишки паскаля мне неведомые? Типа получилось неправильное обращение к свойствам самой программы "Cast" или как-то так?
парсер не смог в название скрипта.
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

Ещё одна проблема появилась:
Выставлена точка как префикс для команд. Команда UOSay('.bandageself'); приводит к тому, что над чаром просто появляется строка ".bandageself" как если бы он просто что-то сказал, при этом лечения нет и получается пофиг, что точка стоит в начале. Если же в самом клиенте набрать ".bandageself", то происходит лечение бинтом.
Как победить? Нужно, чтобы лечение происходило постоянно именно при помощи UOSay('.bandageself'); в первом скрипте, так как в параллельно запущенном втором скрипте прицел используется на враждебном мобе и нужно хилиться на автомате + меня ещё и хил хилит. Если использовать что-то вроде

Code: Select all

useobject(bandages);
WaitTargetSelf;
то появляется прицел уже от программного клика на бинтах, а это недопустимо, прицел должен использовать только на мобе.
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

GeeZeR wrote:Ещё одна проблема появилась:
Выставлена точка как префикс для команд. Команда UOSay('.bandageself'); приводит к тому, что над чаром просто появляется строка ".bandageself" как если бы он просто что-то сказал, при этом лечения нет и получается пофиг, что точка стоит в начале. Если же в самом клиенте набрать ".bandageself", то происходит лечение бинтом.
Как победить? Нужно, чтобы лечение происходило постоянно именно при помощи UOSay('.bandageself'); в первом скрипте, так как в параллельно запущенном втором скрипте прицел используется на враждебном мобе и нужно хилиться на автомате + меня ещё и хил хилит. Если использовать что-то вроде

Code: Select all

useobject(bandages);
WaitTargetSelf;
то появляется прицел уже от программного клика на бинтах, а это недопустимо, прицел должен использовать только на мобе.
че че че?

Code: Select all

procedure ConsoleEntryReply(Text : String);
ConsoleEntryReply('.bandageself');
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

Нет, не пашет так. Мне нужно чтобы была имитация набора команды ".bandageself" в чате клиента, через UOSay() как в примере тут: http://stealth.od.ua/forum/viewtopic.ph ... andageself
В общем ещё раз: Если набрать в чате клиента ".bandageself", то чар хилится бинтами. Как из скрипта вызвать эту команду? Насколько я понимаю это команда самого стелса (Stealth-client DLL Form вкладка Hotkeys).

UOSay('.bandageself'); - не срабатывает. Вот такое получается:
Image
Stealth 8.10.2 | Клиент: 7.0.13.4
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скриптинг в Stealth для чайников.

Post by Vizit0r »

Code: Select all

PROGRAM Cast;  //<---- зло тут
BEGIN
Cast('Cure');
EN
название программы совпадает с названием функции, у названия программы приоритет, вот он и считает что ты не функцию вызываешь, а занимаешься приведением типов. Вывод - дай другое название скрипту (program XXX)

Оказывается название программы это (теперь) не просто ничего не значащая строка, я удивлен.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

Vizit0r, ну я ведь не так искушён в языке Паскаль как ты, я использую его для простого скриптинга. Помоги со вторым вопросом про ".bandageself", пожалуйста.
Stealth 8.10.2 | Клиент: 7.0.13.4
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скриптинг в Stealth для чайников.

Post by Vizit0r »

я тоже не знал, пришлось лезть в исходник пакса и выяснять причину.

насчет бандажселв, так это просто вызов двух скриптовых методов подряд
WaitTargetSelf;
UseType($0E21, $FFFF);

без проверок, без ничего.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

Vizit0r wrote:я тоже не знал, пришлось лезть в исходник пакса и выяснять причину.

насчет бандажселв, так это просто вызов двух скриптовых методов подряд
WaitTargetSelf;
UseType($0E21, $FFFF);

без проверок, без ничего.
ето команда серверу, к стелсу оно не имеет отношения никакого, на многих пиратках есть всякие команды типа такой.
И как оно может не срабатывать, хз хз, разве что то клилоктекст а то юникодспич
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

Vizit0r wrote: насчет бандажселв, так это просто вызов двух скриптовых методов подряд
WaitTargetSelf;
UseType($0E21, $FFFF);

без проверок, без ничего.
Погоди, тогда объясни пожалуйста что это за фишка с WaitTargetSelf; - ведь если просто написать: UseType($0E21, $FFFF);, то появляется курсор с прицелом.
1) Я не пойму как так может быть, что объект выбирается заранее, а потом к нему применяется команда UseType($0E21, $FFFF); без появления курсора с прицелом.
2) После UseType($0E21, $FFFF); курсор с прицелом всё-таки появляется на какую-то сотую долю секунды в окне клента, кликается на своего персонажа, но этого просто не замечаешь, или нет?

Допустим если запустить постоянно отдельным потоком скрипт:

Code: Select all

repeat
      WaitTargetSelf;
      UseType($0E21, $FFFF);
until false
Курсор с прицелом использовать для каста и клика по врагам. Допустим я кликнул по врагу, но за долю секунды в этом скрипте заюзалась команда UseType($0E21, $FFFF); и курсор с прицелом появился именно уже от неё и я кликнул по врагу и клиент подумает, что я хочу наложить на него бинты. Не будет ли такое? Или команда WaitTargetSelf; исключает появления самого курсора с прицелом в клиенте вообще?
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

GeeZeR wrote:
Vizit0r wrote: насчет бандажселв, так это просто вызов двух скриптовых методов подряд
WaitTargetSelf;
UseType($0E21, $FFFF);

без проверок, без ничего.
Погоди, тогда объясни пожалуйста что это за фишка с WaitTargetSelf; - ведь если просто написать: UseType($0E21, $FFFF);, то появляется курсор с прицелом.
1) Я не пойму как так может быть, что объект выбирается заранее, а потом к нему применяется команда UseType($0E21, $FFFF);.
2) После UseType($0E21, $FFFF); курсор с прицелом всё-таки появляется на какую-то сотую долю секунды в окне клента, кликается на своего персонажа, но этого просто не замечаешь, или нет?

Допустим если запустить постоянно отдельным потоком скрипт:

Code: Select all

repeat
      WaitTargetSelf;
      UseType($0E21, $FFFF);
until false
Курсор с прицелом использовать для каста и клика по врагам. Допустим я кликнул по врагу, но за долю секунды в этом скрипте заюзалась команда UseType($0E21, $FFFF); и курсор с прицелом появился именно уже от неё и я кликнул по врагу и клиент подумает, что я хочу наложить на него бинты. Не будет ли такое? Или команда WaitTargetSelf; исключает появления самого курсора с прицелом в клиенте вообще?
по идее исключает, но...
необходимо исключить возможность "запустить постоянно отдельным потоком скрипт:" - такого вообще никогда нельзя допускать, ибо будет все через сраку работать, стелс <--> сервер СИНХРОННАЯ СВЯЗЬ, и что то будет проходить а что то нет, потом вайн на форуме - а че не работает...
старайся таргеты и вообще уйти от контроля клиентом, то-есть просто "кино" смотреть можно, а выполнять действия и пытаться решать какие то задачи скриптом - утопия. Упрешься в недостаточный уровень контроля над объектами.
Пиши скрипт который сам будет ходить и выбирать таргеты и сам будет хилить и прочее, или если пользуешься дллкой то пиши автолоад основанный на событиях, тогда еще как то получится контролировтаь происходящее. Но и это будет недостаточная система.
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скриптинг в Stealth для чайников.

Post by GeeZeR »

drabadan, погоди, так по другому и не получается. Короче я объясню свою ситуацию.
Я тамлю Greater Dragon. Он слишком сильно бьёт, поэтому у меня есть альт - чисто хил. Во время тамминга хил стоит рядом в другом окне и как сумасшедший постоянно меня хилит нонстоп поочерёдно кастом и бинтами, т.е. этот срипт на время тамминга у него зациклен:

Code: Select all

PROGRAM HealTamer;

BEGIN
	repeat
		SetWarMode(false);
		cast('Greater Heal');
		WaitForTarget(5000);
		WaitTargetObject($0005E434); // ID тамера

		UseType($0E21,$FFFF); // Bandages Type
		WaitForTarget(5000);
		WaitTargetObject($0005E434); // ID тамера
		wait(3000);
	until false
END.
У меня же постоянно тоже зациклен спам тамминга, так как Greater Dragon очень упрямая тварь:

Code: Select all

PROGRAM GreaterDragonTaming;

BEGIN
	repeat
		SetWarMode(false);
		UseSkill('Animal Taming');
		WaitForTarget(2000);
		WaitTargetObject($001E6581); // ID дракона
	until false
END.
(Я тут использую именно ID конкретного дракона, но это не важно).
Поэтому я и спрашивал про ".bandageself" - если эту команду повесить на горячую клавишу, то курсор не появляется. Я могу лечить себя и одновременно тамить дракона, короче курсор с прицелом постоянно шлёпает по дракону и мне не нужно думать о том чей это курсор - команды UseSkill('Animal Taming'); или UseType($0E21,$FFFF); // Bandages Type. Но постоянно жамкать горячую клавишу c ".bandageself" в течении 15 минут стресса это жесть, поэтому я и спрашивал как ".bandageself" использовать в скрипте на спаме. Ведь можно ж во втором потоке пустить:

Code: Select all

repeat
      WaitTargetSelf;
      UseType($0E21, $FFFF);
      wait(3000);
until false
Теперь мне просто интересно как это происходит что вначале с помощью WaitTargetSelf; выбирается объект, а потом юзаются бинты и при этом не появляется курсор! Получается, что если эти 2 скрипта на одном чаре запустить в отдельном потоке для каждого, то будем стоять и "смотреть кино" :) Как ты ты и говорил.
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Скриптинг в Stealth для чайников.

Post by drabadan »

GeeZeR wrote:drabadan, погоди, так по другому и не получается. Короче я объясню свою ситуацию.
Я тамлю Greater Dragon. Он слишком сильно бьёт, поэтому у меня есть альт - чисто хил. Во время тамминга хил стоит рядом в другом окне и как сумасшедший постоянно меня хилит нонстоп поочерёдно кастом и бинтами, т.е. этот срипт на время тамминга у него зациклен:

Code: Select all

PROGRAM HealTamer;

BEGIN
	repeat
		SetWarMode(false);
		cast('Greater Heal');
		WaitForTarget(5000);
		WaitTargetObject($0005E434); // ID тамера

		UseType($0E21,$FFFF); // Bandages Type
		WaitForTarget(5000);
		WaitTargetObject($0005E434); // ID тамера
		wait(3000);
	until false
END.
У меня же постоянно тоже зациклен спам тамминга, так как Greater Dragon очень упрямая тварь:

Code: Select all

PROGRAM GreaterDragonTaming;

BEGIN
	repeat
		SetWarMode(false);
		UseSkill('Animal Taming');
		WaitForTarget(2000);
		WaitTargetObject($001E6581); // ID дракона
	until false
END.
(Я тут использую именно ID конкретного дракона, но это не важно).
Поэтому я и спрашивал про ".bandageself" - если эту команду повесить на горячую клавишу, то курсор не появляется. Я могу лечить себя и одновременно тамить дракона, короче курсор с прицелом постоянно шлёпает по дракону и мне не нужно думать о том чей это курсор - команды UseSkill('Animal Taming'); или UseType($0E21,$FFFF); // Bandages Type. Но постоянно жамкать горячую клавишу в течении 15 минут стресса это жесть, поэтому я и спрашивал как ".bandageself" использовать в скрипте на спаме. Ведь можно ж во втором потоке пустить:

Code: Select all

repeat
      WaitTargetSelf;
      UseType($0E21, $FFFF);
      wait(3000);
until false
Теперь мне просто интересно как это происходит что вначале с помощью WaitTargetSelf; выбирается объект, а потом юзаются бинты и при этом не появляется курсор! Получается, что если эти 2 скрипта на одном чаре запустить в отдельном потоке для каждого, то будем стоять и "смотреть кино" :) Как ты ты и говорил.
.bandageself - команда пиратки на которой ты играешь, которую можно выполнять "паралельно" ибо отсылается она текстом к серверу который принимается паралельно. Юзать объект веиттаргетселфом или чем угодно по другому будет вызывать wait to perform another action. Если используешь клиент то пропиши в клиенте, say .bandageself и забиндь на клавишу без стелса, в самом граф клиенте. Должно помочь.
Post Reply