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

Восстановление уроков по Stealth

тут можно задать вопрос по скриптингу
DowOrc
Posts: 1
Joined: 14.02.2008 23:35

Восстановление уроков по Stealth

Post by DowOrc »

Начнинаю восстановление уроков по Stealth, которые я начал писать ранее :) Выкладываю первые 3 урока

Урок 1. Основы скриптования.

В данном кратком руководстве мы попытаемся изучить основные возможности Stealth клиента, а также в деталях рассмотрим процесс написания скриптов, их отладки и тестирования. Я постарался составить данное руководсво так, чтобы в нем мог разобраться даже человек до этого не слышавший о программировании. Получилось это или нет, судить вам.

Stealth представляет собой текстовой клиент для Ультимы Онлайн с поистине уникальными возможностями реализации действий игрока практически любой степени сложности. Для этих задач он использует написанные на языке Object Pascal различные подпрограммы. Итак, для начала попробуем разобраться, что же такое скриптовая программа или проще говоря скрипт. Скрипт – это некая последовательность действий реализована в коде, которые мы хотим выполнить.

Строго говоря процесс разработки скрипта делится на следующие этапы:

1. Определение цели

Здесь нам необходимо понять, что же мы хотим сделать. Например, написать скрипт на ламбер или на прокачку магии. С этим все более-менее понятно.

2. Разработка алгоритма.

На этом этапе необходимо определить последовательность наших действий, которые надо выполнить для получения результата. Если наша задача может быть решена несколькими способами, то мы используем какой-либо критерий, например, скорость выполнения, в соответствии с чем выбираем наиболее подходящее решение. Результатом этого этапа является подробное словесное описание алгоритма, либо его блок-схема.

Например, мы хотим сковать даггер. Наши действия будут примерно такими:

1) Подойти к сундуку.
2) Взять 10 ингов
3) Подойти к плавильне
4) Взять молоток в руки
5) Даблклик на молотке
6) Как только появился прицел, даблклик на ингах
6) Ждем выполнения работы
7) Переходим к пункту 5.

В этом алгоритме сразу заметно несколько слабых мест. К примеру, что произойдет если мы сковали очередной даггер и у наз перегруз, т.е. следующий за ним даггер просто окажется под ногами? Или что если у нас закончились все инги?

Все эти моменты желательно определить и описать еще на этапе составления алгоритма. Даже если вы его не записываете, то в уме все равно составляете подобный план и чем он будет подробнее, тем легче вам будет закодировать его действия в Стелсе.

3. Кодирование

После того как определены требования к скрипту и составлен план его работы, мы просто записываем его на языке программирования. В результате получается так называемый исходный код. Если вы подумали, что на этом написание скрипта заканчивается, то вы глубоко ошибаетесь. Далее следует не менее важный этап, а именно

4. Отладка и Тестирование.

Отладка – это процесс поиска и устранения ошибок. Ошибки в скриптах могут разделяться на 2 категории – это синтаксические (ошибки в тексте) и алгоритмические. Синтаксические – это наиболее легко устранимые типы ошибок. Алгоритмические обнаружить труднее.

Успешно запущенный скрипт может говорить лишь об отсутствии в тектсте программы синтаксических ошибок. Убедиться в правильности его работы можно только во время тестирования – пробных запусках и изучении процесса выполнения действий вашим чаром. Позже мы рассмотрим более детально этот процесс.

Итак, на данном уроке мы познакомились с основой программирования, которая применима практически к любым языкам. В дальнейших уроках мы подробнее остановимся на языке программирования Стелса – Object Pascal`e и составим нашу первую скриптовую программу.

Урок 2. Первый скрипт – ‘Привет, Ультима!’

Теперь попробуем написать простейший скрипт. Предположим, нам нужно, чтобы чар сказал слова приветствия. Для этого мы используем программу Say. Откройте свой любимый текстовой редактор и скопируйте туда следующий код:

Code: Select all

program Say;
 const
  Hello = 'Привет,';
 var
   World : String;
 Begin
     World := 'Ультима!';
     UOSay(Hello + ' ' + World);
 End.
Сохраните его с расширением sc, например say.sc, потом загрузите Stealth, подключитесь к вашему шарду и запустите получившийся скрипт.

После запуска скрипта ваш чар произнесет фразу ‘Привет, Ультима!’. Поздравляем! Вы только что создали и запустили ваш первый скрипт. Теперь давайте подробнее рассмотрим его в деталях.

Каждый скрипт начинается с ключевого слова program, за которым идет название скрипта. (В нашем случае – это Say) После чего следует знак ;, пропуск его является синтаксической ошибкой.

Заметка. Регистр букв.
В каком регистре написаны ключевые слова особого значения не имеет, Object Pascal позволяет использовать и такую запись:
pRoGraM Say;
Но злоупотреблять этим определенно не стоит, из-за этого программу становится гораздо труднее понять.


После program Say; в нашем примере идет ключевое слово const, после которого идут константы. Более подробно мы обратимся к ним на следующих уроках, а пока скажем, что мы используем так называемую именованную константу, т.е. идентификатор (в нашем случае Hello) который в программе заменяется самой константой (в нашем случае строкой 'Привет,'). В конце ставится ;.

Далее идет ключевое слово var. Которое предваряет область определения так называемых переменных. Переменная – это облась памяти, в которой находятся данные, с которыми соответственно оперирует наш скрипт. В Object Pascal каждая переменная перед использованием должна быть объявлена. С помощью объявления устанавливается не только факт существования переменной, но и задается ее тип. В нашем случае объявление переменной выглядит следующим образом: World : String;. World – это название переменной, по которому мы ее идентифицируем, а String – это строковой тип, который позволяет помещать в переменную текстовые данные.

Заметка. Отличие констант от переменных.
Константы отличаются от переменных тем, что их значение четко определено еще в самом начале программы. Т.е. в нашем случае мы не можем далее в программе присвоить идентификатору Hello другую текстовую строчку. Переменные же мы можем менять на протяжении всего выполнения программы, единственное ограничение – значение которое мы им присваиваем должно четко соответствовать типу переменной определенному в начале программы.


Далее следует ключевое слово Begin. И вплоть до End идет код тела программы. Обратите внимание, что за словом Begin не ставится знак ;.
Чтобы программа могла обратиться к переменной, например для того чтобы получить текстовую строку (в нашем случае, 'Ультима!'), мы должны сделать следующее - World := 'Ультима!';.
Последовательность символов := является так называемой инструкцией присваивания. Она сообщает компилятору, что мы хотим присвоить переменной World строку 'Ультима!'.

Для выполнения часто встречающихся действий в Ультиме Stealth предоставляет ряд процедур. Одна из них UOSay, которую мы используем, позволяет нам общаться в мире Ультимы. В скобках ( ) находится строка, которую мы хотим произнести. В качестве этой строки может выступать как константа, так и переменная соответствующего типа. В нашем случае мы объединяем два слова Привет и Ультима в одну строку оператором +.

Попробуйте поменять в нашей программе строку UOSay(Hello + ' ' + World); на UOSay(World + ' ' + Hello); и запустить скрипт. На этот раз чар произнесет слова «Ультима! Привет,». Таким образом комбинируя разные строковые переменные мы добиваемся того чтобы чар произносил разные предложения. Также в процедуре UOSay можно задавать строку открытым текстом, например UOSay('Привет, Ультима!');. В нашем случае мы задали открытым тестом только пробел ' '.
Попробуйте поэкспериментировать с тем, чтобы чар произносил разные фразы. Главное, не забывайте в конце строки ставить знак ;, это самая распространенная ошибка.

Итак, на этом уроке мы написали с вами первый простейший скрипт и подробно рассмотрели каждую его строчку. В дальнейшем мы узнаем более подробнее о процедурах и даже напишем одну из них самостоятельно. Также вы узнаете, что кроме процедур существуют и функции. Оставайтесь с нами =)

Урок 3. Язык программирования Object Pascal

В данном уроке будет сделана попытка вкратце рассказать о языке Pascal, охватив несколько его важных аспектов. Конечно, он не заменит полностью большие руководства по языку программирования, но сможет познакомить вас с базовыми понятиями необходимыми для успешного понимания механизма действия скриптов для Stealth.

Скрипт, записанный на языке Object Pascal, представляет собой последовательность инструкций, которые довольно часто называют операторами. Одна инструкция от другой отделяется точкой с запятой. Каждая инструкция состоит из слов (идентификаторов). Идентификатор может обозначать:

• инструкцию языка (:=, if, while, procedure)
• переменную (ячейку памяти)
• подпрограмму (процедуру или функцию)
• арифметическую (+,-,*,/) или логическую (and, or, not) операцию
• отмечать начало или конец программы
• константу и т.д.

Программы на Object Pascal могут оперировать с различными типами данных: целыми и дробными числами, символами, строками символов, логическими величинами. Подробнее узнать о различных типах и их представлении вы можете в любом справочнике по программированию. Мы же остановимся на основных, которые наиболее часто используются при написании скриптов в Стелсе.

1) Целые типы: Integer и Cardinal
2) Вещественные: Single и Double
3) Строковой String
4) Логический Boolean

Переменные

Теперь расскажем немного подробнее о переменных. Как уже упоминалось на прошлых уроках - Переменная – это область памяти, в которой находятся данные, с которыми оперирует программа. Чтобы программа могла обратиться к переменной, она должна иметь имя. Имя переменной придумывает сам программист.

В качестве имени переменной можно использовать последовательность из букв латинского алфавита, цифр и некоторых специальных символов. Первым символом в имени переменной должна быть буква. Желательно, чтобы имя переменной было логически связано с ее названием. Например, переменной в которой хранится кол-во ингов в Ультиме, можно назначить имя ingots, логам – logs и т.п.

Заметка. Учтите, что в имени переменной нельзя использовать пробел. Вместо него обычно используют знак подчеркивания _ .


Каждая переменная перед использованием должна быть объявлена. С помощью объявления также задается тип переменной, тем самым указывается диапазон допустимых значений.

Приведем пример:

Code: Select all

 Player : String;
Здесь, Player – это имя переменой, а String – ее тип.
Объявление каждой переменной, как правило, помещается на отдельной строке, но если в скрипте имеются несколько переменных принадлежащих к одному типу, то имена этих переменных можно перечислить в одной строке через запятую, а тип указать после последней строки через двоеточие, например:

Code: Select all

Log, ingot, enemy : Integer;
Константы

В Object Pascal существует 2 типа констант – обычные и именованные. Обычные – это целое или дробное число, строка символов, отдельный символ или логическое значение.

Примеры числовых констант:
2
-34
34.5

Примеры строковых (символьных) констант:
‘Stealth делает Inject’
‘Минер атакован’
‘Попытка №5’

Логических констант всего две - true (истина) и false (ложь).

Именованная константа – это имя, которое используется в скрипте вместо самой константы. Мы уже встречались с ней на 2м уроке.

Приведем еще несколько примеров:

Code: Select all

User = 'Шахтер';
Popitok = 5;
Number = $4DFFD;
Инструкция присваивания

Инструкция присваивания является основной вычислительной инструкцией. Ее нужно использовать в том случае, когда в скрипте необходимо произвести некоторые вычисления. В результате ее выполнения значение переменной меняется, ей присваивается значение.

Допустим, нам нужно вычислить количество регов найтшейда, которые мы хотим купить:

Code: Select all

Kolichestvo := summa / cena;
Здесь Kolichestvo – это переменная, значение которой изменяется в результате вычисления.

:= - это символ инструкции присваивания.

summa / cena – это выражение, которое мы хотим вычислить. В данном случае мы делим (оператор /) сумму нашего капитала, которая находится в переменной summa, на цену 1 реагента, которая в свою очередь записана в переменной cena.

Заметка. В данном примере подразумевается, что переменные Kolichestvо, summa и cena – имеют одинаковый тип

Выражения.

Выражение состоит из операторов и операндов. Операторы находятся между операндами и обозначают действия, которые выполняются над операндами. В качестве операндов выражения можно использовать переменную, константу, функцию или другое выражение. Основные операторы - *, /, +, -. Соответственно это умножение, деление, сложение, вычитание. Также в написании скриптов вам могут пригодиться операторы – DIV и MOD. Первый используется для деления нацело, а второй для вычисления остатка от деления.
Чтобы в яснее поняли их суть, приведем примеры:

Code: Select all

A := 5 MOD 2;
B := 5 DIV 2;
В результате этих вычислений переменная A примет значение 1, а переменная B значение 2.

Заметка. Приоритет операций.
При математических вычислениях в Object Pascal используется следующий приоритет: Вначале вычисляются выражения с операторами * и /, потом + и -. Также для увеличения приоритета операции можно использовать скобки. Допустим, у нас есть выражение c := (7+b)+(a/b)*(a-1);. Паскаль вначале вычислит значение a/b, потом 7+b, далее a-1. После вычисления значения скобок будут выполнены действия * и + вне скобок.


Тип выражения определяется типом операндов, входящих в выражение, и зависит от операций, выполняемых над ними. Например, если оба операнда, над которыми выполняется операция сложения, целые, то очевидно, что результат тоже является целым. А если хотя бы один дробный, то все выражение становится дробным, даже если дробная часть равна 0.

При определении типа выражения следует иметь в виду, что тип константы определяется ее видом, а тип переменной задается в инструкции объявления. Например, константы 5, 7, 9, -60 – целого (integer) типа, а константы 1, 0, 3.5E-05 – вещественного типа (real).

Приведем еще один пример. Переменные I и n имеют тип integer, а переменная d – тип real, тогда инструкции:

Code: Select all

I:=n/10;
I:=1.0;
неправильные, а инструкция

Code: Select all

D := i+1;
правильная.

Во время запуска скрипта всегда выполняется проверка типа выражения и переменной. Если они не соответствуют, то Stealth выводит сообщение об ошибке:

Incompatibles types …

В случае ее возникновения необходимо еще раз просмотреть код скрипта на несоотвествие типов.

В случае, когда вам действительно необходимо использовать переменные с разными типами в одном выражении, в Object Pascal существуют встроенные функции преобразования, например, StrToInt(n) – преобразование строкового типа в целое число. Где n – строковая переменная либо константа.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Прилепил. Когда автор закончит - перенесу в раздел FAQ.

А пока некоторые замечания.

1. Константы и переменные. Уроки пишутся для чайников, поэтому нагружать их вот таким: "что мы используем так называемую именованную константу, т.е. идентификатор (в нашем случае Hello)" не стоит, это их только запутает. Если уж так хочется - то вынести это куда-нибудь в конец уроков, когда народ уже "подтянется". А вот само определение константы (что это и зачем) надо дать прямо здесь. Тем более что несколькими строками ниже ты объясняешь разницу между константой и переменной. Чтобы понять разницу люди должны узнать сначала что есть что. То есть определения для обоих видов.

Далее, тут же. Пример. В этом примере никак не иллюстрируется разница между константами и переменными. Я бы добавил еще пару строк, где переменной присваивается новое значение и выводится еще одно сообщение уже с новым приветствием. Тогда разница между константой и переменной будет хорошо проиллюстрирована.

2. После описания что такое переменная лучше всего поместить перечисление основных типов данных. Тут это к месту. Нет необходимости давать все типы, дать только те самые простые. В дальнейшем при необходимости можно уже добавлять новые типы (описывать).

Про Begin и End написать внятнее. Типа:

Любой скрипт состоит из двух частей: "шапки" (объявления констант, переменных, вспомогательных функций и процедур) и "тела". Тело скрипта - это и есть тот код, который вам надо написать, а все начальные данные, которые вы будете задавать, выносятся в "шапку". Тело скрипта должно всегда начинаться с 'Begin' и заканчиваться 'End.' Чтобы отличать эти begin и end от других, которые вы будете использовать в скрипте, их принято писать (но совсем не обязательно) с заглавных букв. Кроме того, обратите внимание, что последним знаком в скрипте должна быть точка!

Писал текст, не задумываясь, глянь внимательно, я мог и напортачить в чем-то. Кроме того, счас уже не могу вспомнить как "шапку" правильно называть-то... Тело - это так и зовется, а вот шапка как-то по-другому звалась... Склерос-с-с-с...

3. Насчет точек с запятой я бы написал отдельно, позже, где-нибудь в конце урока. Типа:

Правила написания скриптов в стелсе требуют, чтобы каждый значимый оператор (то есть строка или несколько строк, которые выполняют какое-нибудь одно действие) отделялся от других точкой с запятой. Именно поэтому мы ставим после uosay(...) точку с запятой, ведь эа команда (вызов процедуры) как раз и выполняет одно действие - выводит на экран сообщение. Позже, при описании условных операторов и циклов, мы еще вернемся к использованию точки с запятой, но одну вещь надо объяснить сразу. В Паскале можно создавать блоки из нескольких операторов, примеров использования таких блоков вам встретится еще много, а пока упомянем только один такой блок - это "тело" программы. Любой блок начинается с оператора begin и заканчивается оператором end, при этом, с точки зрения паскаля, точку с запятой в этом случае надо ставить после оператора end (Как уже ранее упоминалось, в конце файла скрипта, после последнего оператора End эту точку с запятой надо заменить на точку).

4. Функции и процедуры, которые "предоставляет" стелс, я бы везде по тексту называл бы "системными", чтобы люди не путали их с теми, которые будут писать сами в уроках. Кроме того, Неплохо бы прежде чем рассказывать про процедуру UOSay рассказать что такое процедуры и функции и в чем их отличие.

Насчет "Оставайтесь с нами" процитирую небезызвестный фильм: "Ну, это лишнее..."

Урок 3 почитаю завтра.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Счас подумал и понял, что если бы я писал эти уроки, я бы про структуру скрипта в паскаль скрипте написал бы еще подробнее, просто разжевал бы, потому как это основа основ и многие именно в этом путаются и "пугаются" скриптов стелса...

Даже, наверное, "нарисовал" бы:
program название;
...
... это "шапка скрипта" - здесь мы объявляем константы,
... переменные, пишем свои функции и процедуры
...
Begin
...
... это тело скрипта, то есть его главный код. Он начинается с Begin
... и заканчивается End с точкой
...
End.
Обязательные к употреблению операторы здесь выделены большим жирным шрифтом.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

я бы обьяснил на примере типа

Code: Select all

program harvesting; // обязательный заголовок программы

{$Include 'all.inc'}  // оператор подключения отдельных "инклюдов", т.е. отдельных программных модулей

type // обьявление своих типов
 FishR = record 
   tile:word; 
   px,py,pz:integer; 
end; 

ArrayType = Array[0..300] of Cardinal; 

var  // обьявление переменых, общих для всего скрипта.
A : ArrayType;


const // константы - фиксированные значения
RBID_MY = $4A8BD2CE;

procedure test(enemy: Cardinal); // процедура, в скобках - передаваемые параметры с их типами
begin
....
end;

function 123 : Boolean; //та же процедура(выше), только по выполнении возвращает результат заданного типа (тут - Boolean)
begin
...
result := ...;  // а  это и есть установка возвращаемого значения
end;

BEGIN // начало основного скрипта
...
end. // конец основного скрипта - обязательно end с точкой
Для того, чтобы не особо шарящие в скриптах люди хотя бы знали куда смотреть и где что располагается из основного кода и могли хотя б править их
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Переношу в раздел Help. Автор этого учебника явно к работе возвращаться не собирается, может кто-то другой возьмет за основу и доработает.
Faxford
Neophyte
Neophyte
Posts: 10
Joined: 21.08.2009 1:48

Post by Faxford »

Вот блин. :)
Что на инжектском форуме не доделали все запланированный уроки, что тут. :) А я вот научится хотел. :lol:
dess
Neophyte
Neophyte
Posts: 20
Joined: 06.02.2011 18:17

Post by dess »

реализуйте скрипт по 1му посту со всеми коментами плиз)))
момент 3.3.0 release 8
А я ему говорю: -Пойдём кудяпликов настреляем! Пожарим их и сожрём! А он мне: - Да! Хочу! Хочу кудяпликов!!! (с) Аццкая белко
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Code: Select all

program Say; 
 const 
  Hello = 'Привет,'; 
 var 
   World : String; 
 Begin 
     World := 'Ультима!'; 
     UOSay(Hello + ' ' + World); 
 End.
чем тебя это не устраивает?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
dess
Neophyte
Neophyte
Posts: 20
Joined: 06.02.2011 18:17

Post by dess »

с Хелло Ультима вопросов не возникло =)

а по этим пунктам:
1) Подойти к сундуку.
2) Взять 10 ингов
3) Подойти к плавильне
4) Взять молоток в руки
5) Даблклик на молотке
6) Как только появился прицел, даблклик на ингах
6) Ждем выполнения работы
7) Переходим к пункту 5.

можно использовать как пример поиска, использования, перемещения, работа с прицелом, работа с гампом и рабока с таблицей...

Вообщем удачный пример что бы обьединить основняк для бытовухи... и использовать коды как шаблон...

мне как ньюбу сприптинга проще разбераться с готовым кодом, особенно с каментами... имхо
момент 3.3.0 release 8
А я ему говорю: -Пойдём кудяпликов настреляем! Пожарим их и сожрём! А он мне: - Да! Хочу! Хочу кудяпликов!!! (с) Аццкая белко
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Восстановление уроков по Stealth

Post by shinma »

Ок в следствии последних событий продолжим уроки для нубов.

Начнем с простого:
1) задавая вопрос выпишите свой код с правилами отступа и комментариями в каждой строке.
как это делается

Code: Select all

program Say; //начало программы всегда должно начинатся с этих двух слов. program пробел название программы точка с запятой.
//

// колличество пустых строк не имеет занчения
 Begin// начало программы

     UOSay('Hello World'); // тело программы, в данном случае мы используем функцию сказать в игре Hello World. 
// эту функцию я проситал вот тут http://stealth.od.ua/Doc:RU/Api/U

 End. //конец программы, обратите внимание - конец программы заканчивается точкой.
без таких комментариев нам не охото разбираться в вашем коде, а вам никогда не понять что вы написали.

2) Поехали дальше. Вверху автор предлогал показать как делаются простые действия в игре. Ну продолжим его уроки.
а именно опишем программу
1) Подойти к сундуку.
2) Взять 10 ингов
3) Подойти к плавильне
4) Взять молоток в руки
5) Даблклик на молотке
6) Как только появился прицел, даблклик на ингах
6) Ждем выполнения работы
с начало по частям, а потом все вместе.
----------------------------------------------------------------------------------------------------------------------
Подойти к сундуку.

Чтобы узнать информацию о сундуке в игре введите команду ,info . если у вас RunUO запятая там занята, поэтому выставьте в настройках стелса другой префикс, например знак [. тогда в клиенте можно написать [info. кликните на сундук и позади окна UO появится текстовое окно с информацией о сундуке. в данном случае нам надо только его X и Y.

Code: Select all

program Say; //начало программы всегда должно начинатся с этих двух слов. program пробел название программы точка с запятой.
//

// колличество пустых строк не имеет занчения
 Begin// начало программы

//     NewMoveXY(X_сундука, Y_сундука,всегда 1, за сколько точек от ху остановится, бежать или идти) ;
// эту функцию я проситал вот тут http://stealth.od.ua/Doc:RU/Manual/Reference/PathFinding

NewMoveXY(1234, 4321,1, 1, 1) ;//идти в 1234, 4321, остановится за 1 квадрат до подхода, бегом.

 End. //конец программы, обратите внимание - конец программы заканчивается точкой.
--------------------------------------------------------------------------------------------------------------------

открыть сундук

итак теперь опять используем команду Info на сундуке , нам надо получить его ID, это будет чтото ввиде ID: $12345678

Code: Select all

program Say; //начало программы всегда должно начинатся с этих двух слов. program пробел название программы точка с запятой.
//

// колличество пустых строк не имеет занчения
 Begin// начало программы

UseObject ($12345678); //кликнуть два раза по объекту $12345678
//http://stealth.od.ua/Doc:RU/Manual/Reference/Object

 End. //конец программы, обратите внимание - конец программы заканчивается точкой.
--------------------------------------------------------------------------------------------------------------------
Last edited by shinma on 22.10.2013 8:03, edited 1 time in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Восстановление уроков по Stealth

Post by shinma »

взять 10 ингов

Итак сундук открыт, надо взять из него 10 ингов. примените команду info на стак инготов в сундуке и получите его ID.
допустим ID который вы получили ID: $00001234

Code: Select all

program Say; //начало программы всегда должно начинатся с этих двух слов. program пробел название программы точка с запятой.
//

// колличество пустых строк не имеет занчения
 Begin// начало программы


//MoveItem(ItemID : Cardinal; Count : Integer; MoveIntoID : Cardinal; X,Y,Z : Integer) : Boolean
//MoveItem(ID предмета который переносим,кол-во предметов в стопке из стопки,куда класть,  X,Y,Z -координаты в контейнере куда кладем);
//ItemID - это ID того стака инотов который вы должны были получить в начале этого урока
//Count  - кол-во ,сколько возьмем из стака, нам надо указать 10
//MoveIntoID - id контейнера куда кладем, сразу небольшой комментарий .
//В стелсе есть уже встроенные постоянные переменные, для которых ненадо применять команду ID т.к. они уже определены стелсом, Наример
//сумка персонажа всегда является словом backpack. вы конечно можете применить на неё команду info и узнать ее ID но зачем вам это надо если стелс уже за вас
// знает о ней если вы примените слово backpack
//X,Y,Z - координаты в каком месте положить итемы в сумку, не заморачивайтесь просто ставьте 0,0,0

MoveItem($00001234, 10, backpack, 0,0,0);

//http://stealth.od.ua/Doc:RU/Manual/Reference/Object_Move

End. //конец программы, обратите внимание - конец программы заканчивается точкой.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Восстановление уроков по Stealth

Post by Vizit0r »

shinma wrote:Чтобы узнать информацию о сундуке в игре введите команду ,info . если у вас RunUO запятая там занята, поэтому выставьте в настройках стелса другой префикс, например знак [. тогда в клиенте можно написать [info. кликните на сундук и позади окна UO появится текстовое окно с информацией о сундуке. в данном случае нам надо только его X и Y.
Капитан Очевидность намекает, что не у всех есть клиент (или, как минимум, не все знают на этом этапе как его запускать из стелса), зато вкладка World есть у всех.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Восстановление уроков по Stealth

Post by shinma »

Подойти к плавильне

т.к. один вид подхода я показал в пункте " Подойти к сундуку."
Рассмотрим друой вариант. но сам код при этом остенется тот же. вы просто можете подойти к плавильне открыть окно стелса, и там сверху увидете
ваши текущие координаты,

вот их и запишите

NewMoveXY(1111, 2222,1, 1, 1) ;//идти в 1234, 4321, остановится за 1 квадрат до подхода, бегом.
я везде ставлю подход к точке 1 а не ноль т.к. если поставить ноль то чар должен будет встать в эту точку. и если она кем то занята он в неё не пойдет. есть много вариантов решения этого ребуса, но на данный момент вам хватит одного самого простого, просто подходите к точке не в 0 а в 1, или сделайте две
команды NewMoveXY с точками рядом
пример

NewMoveXY(1111, 2222,1, 1, 1) ;//подойти к точке хотябы в пределах 1 клетки вокруг нее
NewMoveXY(1111, 2222,1, 0, 1) ;//попытаться встать в саму точку

вот в таком случае персонаж наверняка встанет в точку или рядом с ней. Но есть и более тонкие методы решения этой задачи.
Last edited by shinma on 22.10.2013 6:40, edited 1 time in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Восстановление уроков по Stealth

Post by shinma »

Vizit0r wrote:
shinma wrote:Чтобы узнать информацию о сундуке в игре введите команду ,info . если у вас RunUO запятая там занята, поэтому выставьте в настройках стелса другой префикс, например знак [. тогда в клиенте можно написать [info. кликните на сундук и позади окна UO появится текстовое окно с информацией о сундуке. в данном случае нам надо только его X и Y.
Капитан Очевидность намекает, что не у всех есть клиент (или, как минимум, не все знают на этом этапе как его запускать из стелса), зато вкладка World есть у всех.
курс молодого бойца - как запустить стелс, не к разделу где начали изучать паскаль константы и скрипты.
P.S. я вообще если честно никогда вкладкой word не пользовался)))
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Восстановление уроков по Stealth

Post by shinma »

Взять молоток в руки

если честно я хз зачем ему молоток в руках, но раз есть то пусть будет. возьмем молот в руки и ударим по беззаконью ГМов.
как всегда применяем info на молотке узнаем его id. id молотка будет $12340000

Code: Select all

program Say; //начало программы всегда должно начинатся с этих двух слов. program пробел название программы точка с запятой.
//

// колличество пустых строк не имеет занчения
 Begin// начало программы

//Equipt(RhandLayer,tweapon); 
//Equipt(куда_одеть,что_одеть); 
//http://stealth.od.ua/Doc:RU/Manual/Reference/Dress_Layers

Equipt(RhandLayer,$12340000); 

 End. //конец программы, обратите внимание - конец программы заканчивается точкой.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
Post Reply