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

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

тут можно задать вопрос по скриптингу
Post Reply
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

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

Post by Unholy »

Hello World

И так. Начнем с самого простого! С основы любого скрипта.
Всякий скрипт должен иметь вид:

Code: Select all

Program NameOfProgram;

begin

end.
В строке:

Code: Select all

Program Name_of_Program;
Вместо Name_of_Program пишем любое слово (Латиницей, Вместо пробелов _ .) и завершаем эту строку символом

Code: Select all

;


После этой строки вписываем (если нужно): (О них будет рассказано позже.)

После чего сообщаем о начале программы. Пишем сам Алгоритм скрипта. И заканчиваем скрипт строчкой

Code: Select all

End.
Все кажеться очень сложным, но поверьте это не так. Да[/code]вайте сами попробуем написать простенький скрипт.
Примерно такого типа:

Code: Select all

Program Hello_World;
Begin
addtosystemjournal('Hello World!!! =-)');
end.
Вписываем этот скрипт в блокнот, сохраняем в папку Scripts, с росширением
.sc
Можно конечно и
.txt
можно и
.abrbyrik
Стелс все-равно не отсеивает типы файлов (при их открытии)

Открываем стелс, заходим каким-нибудь чаром. Открываем этот скрипт. И... О чудо :D

В данном скрипте мы использовали Функцию:

Code: Select all

addtosystemjournal('Text');
Она вписывает в системный журнал (журнал Стелса) Какой-либо текст. Она очень удобна если вы хотите знать Что в данный момент делает ваш чар. Подробнее мы ее рассмотрим позже.
Last edited by Unholy on 17.07.2008 1:15, edited 3 times in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Переменные

Что такое переменные? Мне очень понравилось обьяснение моей учительницы по паскалю:
Представьте себе оперативную память. Так вот переменная - маленькая ячейка в оперативной памяти. Объявляя переменную мы выделяем в оперативной памяти ячейку, и присваиваем ей определенный тип. Данная переменная может быть числовой (содержать в себе число), текстовой (содержать в себе текст) и др....
Очень красиво сказала! Золотые слова!

И так в стелсе существуют следующие типы переменных:
Integer - Целое число. В диапазоне -32768...32767
Cardinal - Целое большое число. Обычно используется для записи ID предметов.
Boolean - Логическая переменная (1/0) (True/False) (Истинна/Ложь)
Byte - Целые числа 0..255
Word - Целое число 0..65535
String - Строчка текста.

Как объявлять переменные?

1. Нам нужно обьявить одну переменную одного типа.

Code: Select all

Var i : integer;
2. Нам нужно обьявить две переменные одного типа.

Code: Select all

Var a, b : Byte;
mas : String;
3. Нам нужно обьявить одну переменную одного типа, 2 переменные второго типа, и четыре переменные третьего типа.

Code: Select all

Var i : integer;
Mes, mes2 : String;
Bag, lopata, runka, syndyk : Cardinal;
Думаю здесь все понятно... Добавлю лишь что переменные вы можите называть как хотите (но их названия не должны начинаться с цифр, они не должны называться именами функций, использовать символы кроме _ , и превышать по длине 255 символов). Хоть:

Code: Select all

Var i, gy : integer;
Хоть:

Code: Select all

Var Kolichestvo_irona_v_syndyke, Kol_logov_v_syndyke : integer;
Тут вопрос только в том - как вам будет удобнее.

Ну и давайте в заключение познакомимся с переменными на практике.

Code: Select all

Program Hello_World;
Var hello : String;
gyka : Integer;
Lopata : Cardinal;
Begin
Hello := 'Привет мир! =-)';
Gyka := 3545;
Lopata := $0045CC44;
addtosystemjournal(Hello);
end. 
Обратите внимание на то как задается каждый тип переменной, и на то что в функции addtosystemjournal() мы используем е текст, а переменную. Если изменить эту строку на

Code: Select all

addtosystemjournal('Hello');
То стелс воспримет Hello не как переменную, а как обычный текст, и просто напишет Hello.

Также в этой функции можно использовать одновременно и переменные и текст.

Code: Select all

Program Hello_World;
Var hello : String;
gyka : Integer;
Lopata : Cardinal;
Begin
Hello := 'Привет мир! =-)';
Gyka := 3545;
Lopata := $0045CC44;
addtosystemjournal('Hello = '+Hello);
end. 
Или

Code: Select all

Program Hello_World;
Var hello : String;
gyka : Integer;
Lopata : Cardinal;
Begin
Hello := 'Привет мир! =-)';
Gyka := 3545;
Lopata := $0045CC44;
addtosystemjournal('Hello = '+Hello+' - не правильный смайл, правильно :-)');
end. 
Или даже

Code: Select all

Program Hello_World;
Var hello : String;
gyka : Integer;
Lopata : Cardinal;
Begin
Hello := 'Привет мир! =-)';
Gyka := 3545;
Lopata := $0045CC44;
addtosystemjournal('Hello = '+Hello+', Gyka = '+IntToStr(Gyka)+'ID Лопаты = '+ IntToStr(Lopata));
end. 

Обратите внимание: Все числовые типы переменных обрабатываются функцией

Code: Select all

IntToStr()
Эта функция преобразует число в текст.
Пример (и вы все поймете):

Code: Select all

Program about_intToStr;
Var  a_plus_b_with : string;
a, b, a_plus_b_without  : integer;
Begin
a:= 123;
b:= 456; 
a_plus_b_without := a + b;
a_plus_b_with := IntToStr(a) + IntToStr(b)
addtosystemjournal('a_plus_b_without = '+IntToStr(a_plus_b_without));
addtosystemjournal('a_plus_b_with = '+a_plus_b_with);
end.
Last edited by Unholy on 17.07.2008 0:53, edited 2 times in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Константы.
Грубо говоря константы - это переменные для которых сам определяет тип. Их значение задеться сразу по их объявлению, и в этом их главная прелесть. К примеру:

Code: Select all

Program Hello_World;
Const hello = 'Привет мир';
Begin
addtosystemjournal(Hello);
end. 
или (несколько констант)

Code: Select all

Program Hello_World;
Const Hello = 'Привет мир! =-)';
Gyka = 3545;
Lopata = $0045CC44;
Begin
addtosystemjournal('Hello = '+Hello+', Gyka = '+IntToStr(Gyka)+'ID Лопаты = '+ IntToStr(Lopata));
end.
А вот так объявляются константы и переменные:

Code: Select all

Program Love;
Const Message = 'Цемаю тебя ';
a = 300;
var b,c : Integer;
kolichestvo_pocelyev :  word;
Begin
b:= 123;
c:= 321;
kolichestvo_pocelyev := a+(b + c);
addtosystemjournal(Message + IntToStr(kolichestvo_pocelyev) + ' рас.');
end.
Чаще всего константы используются для объявления переменных которые не будут меняться на протяжении всего хода выполнения скрипта (ID или Тип лопаты, топора, сундука и т. п.)
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Научим скрипт думать
В данном посте речь пойдет о таких вещах как

Code: Select all

If then else
и

Code: Select all

case of
1. If then else.
К примеру:

Code: Select all

Program what_is_i;
Const i = 7;
var mes : String;
begin
if i > 0 then
mes := 'Переменная i - натуральное число' else mes := 'Переменная i - не натуральное число' ;
addtosystemjournal(Mes);
end.
Переводим на человеческий:

Code: Select all

Программа what_is_i;
Константа i равна 7;
Переменная mes - Строчка;
Начали
Если i больше 0 тогда переменной mes присваивается значение 'Переменная i - натуральное число' в других случаях mes присваивается значение 'Переменная i - не натуральное число';
Конец.
Думаю здесь все ясно. Добавлю лишь что else - не обязательно задавать.
Существуют случаи когда не нужно задавать Else, тогда код выглядит примерно так:

Code: Select all

Program what_is_if;
Const mes = 'Чар абсолютно здоров!';
begin
if (HP = MaxHP) then
addtosystemjournal(Mes);
end.
(В данном скрипте использовались переменные чара а именно HP (Очки жизни чара) и MaxHP (Максимально возможное кол-во очков жизни вашего персонажа) подробнее о переменных чара вы сможете узнать здесь.)

Думаю это понятно.
Бывают так же случаи когда при определенном условии нужно выполнить 2 или 3 или 4 или 100 функций.
Вот как это делается:

Code: Select all

Program what_is_if;
Const mes_norm = 'Шас я их роздрозню.';
mes_bad = 'Меня атакуют!';
begin
if (HP < MaxHP) then
   begin
   AddToSystemJournal(mes_bad);
   uosay('Guards');
   end
else
   Begin
   AddToSystemJournal(mes_norm);
   uosay('Ну же, нападите на меня! Я вас не боюсь.');
   end;
 end.
(Помимо всего прочего обратите внимание на функцию uosay(); - с ней можно работать так-же как и с AddToSystemJournal();. Но разница в том что функция uosay(); - отправляет сообщение серверу, то есть грубо говоря ваш чар скажет в игре что что вы написали в функции uosay();. Подробнее об этих двух ф-иях можно узнать здесь

В принципе и в данном скрипте вполне можно обойтись без Else.
Вот:

Code: Select all

Program what_is_if;
Const mes_bad = 'Меня атакуют!';
begin
if (HP < MaxHP) then
   begin
   AddToSystemJournal(mes_bad);
   uosay('Guards');
   end;
 end.
Думаю с этим разобрались.

Идем дальше.

2. Case of
Иногда (редко но всеже) Постает задача типа

Code: Select all

Если I = 1 тогда ...
Если I = 2 тогда ...
Если I = 3 тогда ...
Если I = 4 тогда ...
Если I = 5 тогда ...
Если I = 6 тогда ...
Если I = 7 тогда ...
Если I = 8 тогда ...
Если I = 9 тогда ...
Если I = 10 тогда ...
Если I = 11 тогда ...
Если I = 12 тогда ...
Если I = 13 тогда ...
Если I = 14 тогда ...
Если I = 15 тогда ...
Если I = 16 тогда ...
Если I = 17 тогда ...
Если I = 18 тогда ...
Если I = 19 тогда ...
Если I = 20 тогда ...
И сами понимаете насколько долго это писать! Но вот на помощь приходит Case of. Вот таким вот образом:

Code: Select all

Program test_case_of;
const i = 2;
begin
   case i of
   1 : AddToSystemJournal('i = 1'); // Пишим в журнал что I = 1
   2 : AddToSystemJournal('i = 2'); // Пишим в журнал что I = 2
   3 : AddToSystemJournal('i = 3'); // Пишим в журнал что I = 3
   end;
end.
(Обратите внимание на то что в скрипте стоят коментарии - // Это очень удобно при написании больших скриптов (чтоб не заблудиться в том что написал), и вообще, для пометок, подробнее вы увидите в следующем скрипте)
(Это простейший пример, понятное дело что этот же скрипт можно переписать. Но предназначение именно этого скрипта - познакомить с Case of.)

Дальше - больше. Представьте себе - У вас в бекпаке лежат 3 каких либо вещи которые нужно будет юзать по очереди (включите фантазию, я хз какой вам еще простой пример привести).

Code: Select all

Program test_case_of;
//Фантазия в 4 ночи работает плохо!
//Короче скрипт.
//У вас в паке есть 3 контейнера (Сундук, пак (не бекпак персонажа), 
//и мешочек)
// один из которых он откроет
//Вписываем число 1-3
const  i = 3 ;  //Введите сюда число 1, 2 или 3
//Вписываем их ID
Syndyk = $400BB88D; // ID сундука
Pack = $400BB88D;  // ID Пака
bag = $400BB88D; // ID мешка
begin
   case i of
   1 :
begin
UseObject(Syndyk); //Открываем сундук
AddToSystemJournal('i = 1');
end;
   2 : 
begin
UseObject(Pack); //Открываем пак
AddToSystemJournal('i = 2');
end;
   3 : 
begin
UseObject(bag); //Открываем мешочек
AddToSystemJournal('i = 3');
end;
   end;
end.
(Вы познакомились с новой функцией UseObject(). Єта функция используется для использования (Двойной щелчок левой кнопки миши) объектов. Записываться UseObject('$400BB88D') где $400BB88D - ID обекта, или UseObject(obj) где obj - Переменная типа Cardinal в которой записан ID обьекта. Подробнее об нем можно прочесть здесь.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

Циклы

И так что есть цикл:
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Грубо говоря: Повторение одного и того же алгоритма.

В Стелсе существует 3 типа циклов.
Просмотрим их по порядку.
1. While do
Это цикл который выполняет алгоритм пока действительно какое-либо условие.
Пример:

Code: Select all

Program contrl_of_denger;
begin
 while Dead = false do //Пока "Мертвость" чара - ложь делать
  begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
  end; //Конец цикла
end.
(Новая ф-ия Wait() - Он используется для задержки выполнения скрипта. Длинна задаеться в Мили Секундах.)
Данный пример - простейший скрипт. Чар будет просто стоять (пока он будет жив, Тоесть значение переменной чара Мертвость(Dead) = Ложи (False)), ничего не делать, но если его жизнь станет меньше чем его максимально возможная жизнь - он позовет охрану (скажет Guards).
Данный цикл используется чаще всего. Ведь главная задача практически любого (полезного) скрипта - Повторение одной и той же задачи.

2. Repeat until
Дословно можно перевести
Повторять до тех пор пока не ...
К примеру. Вот приведенный выше скрипт с использованием данного цикла:

Code: Select all

Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead;
end.
Вот и вся разница. То есть While do работает только тогда когда значение условия равно Истине (True), а Repeat until только когда значение условия равно Лжи (False). Разберемся подробнее.

Code: Select all

while Dead = false do
В данном случае Условие - Dead = false (то есть - мертвость чара - ложь) так как то что мертвость чара - ложь является истинной цикл выполняться.
В следующем перемере

Code: Select all

Until Dead;
Так как Мертвость - Ложь то этот цикл выполняеться.

Переменная Dead это Логическая (Boolean) Переменная чара. Которая отображает жив ли чар. Подробнее об этой и других переменных чара вы узнаете здесь.

Существуют еще несколько логических операторов которые можно применить в цикле это:

Not (не) - Изменяет значение на противоположное к примеру:

Code: Select all

while not Dead  do
Значит абсолютно то-же самое что и:

Code: Select all

while Dead = false do
Or(или) - В While do

Code: Select all

Program contrl_of_denger;
begin
 while not Dead or not Poisoned do //Пока "Мертвость" чара - ложь делать или он не отравлен делать.
  begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
  end; //Конец цикла
end.
(Переменная Poisoned это Логическая (Boolean) Переменная чара. Которая отображает отравлен ли чар. Подробнее об этой и других переменных чара вы узнаетездесь.
Данный скрипт (как следует из комментариев) - Выполняется пока чар Жив или не отравлен.
То есть Этот цикл - зациклен (не имеет логического конца, так как чар не может быть и мертв и отравлен одновременно, следовательно цикл не может прекратиться).
То же самое с Until

Code: Select all

Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead or Poisoned;
end.
And (и)
В While do

Code: Select all

Program contrl_of_denger;
begin
 while not Dead and not Poisoned do //Пока "Мертвость" чара - ложь и он не отравлен делать.
  begin //Начало цикла
if (HP < MaxHP) then uosay('Guards');
wait(1000);// Задержка 1000мс (1 секунда)
  end; //Конец цикла
end.
То же самое с Until

Code: Select all

Program contrl_of_denger;
begin
Repeat
if (HP < MaxHP) then uosay('Guards');
wait(5000);// Задержка 1000мс (1 секунда)
Until Dead and Poisoned;
end.
Думаю с этим все понятно.

3. For to do
Поочередно пошаговый цикл. Пример:

Code: Select all

Program contrl_of_denger;
Const mes = 'I = ';
var i : integer;
begin
For i := 1 to 10 do addtosystemjournal(mes +IntToStr(i)); 
end.
Как видно из данного скрипта этот цикл поочередно добавляет к переменной и 1, В начале присваивая ей значение 1, а после этого добавляет каждый раз еще по 1. Данный цикл удобно использовать если вам нужно какое-либо действие производить определенное количество рас.
Так же этим циклом удобно пользоваться при Обкапывании, ловле рыбы (вокруг себя), и других действий в которых значение некоторых переменных нужно использовать с шагом в 1. Пример:
Создадим программу, которая выдаст таблицу умножения и таблицу добавления / Отнимания от 1 до 10 (перед каждым действием - задержка в 1 секунду, чтоб пользователь успевал следить за ходом выполнения скрипта).

Code: Select all

Program contrl_of_denger;
var a, b : integer;
begin
for a := 1 to 10 do
 for b := 1 to 10 do
 addtosystemjournal(IntToStr(a)+' * '+IntToStr(b)+' = ' + IntToStr( a * b ));
addtosystemjournal('Ждем 10 секунд.');
Wait(10000);// Подождем 10 секунд, чтоб вы успели посмотреть как 

выполнился скрипт
for a := 1 to 10 do
 for b := 1 to 10 do
Begin
 addtosystemjournal(IntToStr(a)+' + '+IntToStr(b)+' = ' + IntToStr( a + b ));
Wait(1000);
 addtosystemjournal(IntToStr(a)+' - '+IntToStr(b)+' = ' + IntToStr( a - b ));
Wait(1000);
End;
end.
Last edited by Unholy on 18.07.2008 0:52, edited 2 times in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

:!: :!: :!:
Очень большая просьба - Ничего не писать в этом топе!
Завтра еще допишу. Если вы заметили какое-то несоответствие\погрешность - напишите в личку. но не в топик. Заранее благодарен!
:!: :!: :!:
Scripts Writer wrote:Всё не читал, но из того что бросилось в глаза- NOT, OR, AND-это не условия цикла,-это логические операторы.

По поводу информации которую ты здесь выложил,-зря ты взялся за то, к чему не склонен. Каждое слово должно иметь смысловую нагрузку, и все понятия в алгоритмизации очень точные, и варьировать ими нельзя направо и налево, тем более это пособие для новичков.

По поводу не дописанного, советую лучше начать своё повествование с внутреннего строения переменных:
Что переменная, это именованная ячейка памяти. Все данные хранятся в двоичных кодах, рассказать почему у переменной int значения -32768...32767, рассказать что символьные переменные представляют из себя ASCII коды, которые так же представлены в виде двоичных чисел, что "строка текста", как ты выразился, есть не что иное, как символьный массив, рассказать про логические операторы (и, или, не), показать по таблице истинности их отличия и сходства, сделать несколько скобочных разборов чтобы человек понял и т.д. и т.п.. Но сделать это так, чтоб человек раз и навсегда уяснил, и больше никогда ему не приходилось переучиваться из-за не профессианальной грамотности обучающего.

До программирования там ещё очень и очень далеко.

Из не написанного, советую добавить про правильный стиль программирования (рассказать про табуляцию для читабельности скрипта, правильные конструкции в тех или иных ситуациях, про динамику, проверки, задержки и т.д.), а так же про Венгерскую нотацию.
А по моему Русским языком было написано чтоб ничего не писали в теме... :roll:
ИМХО ты не умеешь отправлять и читать ЛС Так как ЛС я отослал тебе сразу после твоего поста! Ну чтож выложу здесь!
1) По поводу логических операторов - спасибо. Просто термин забыл.
2)Я не считаю что я зря взялся за это дело. В плане того что терминология должна быть точной - не спорю, но имхо это не так уж сильно важно.
3)Это не пособие для будущих программистов! Это топик созданный познакомить человека с азами скриптинга в стелсе, и научить его читать скрипты. И писал я его МАКСИМАЛЬНО понятным рядовому пользователю языком! Я не ставлю перед собой задачу написать самоучитель по паскалю и сделать из человека программиста.
5)Не написанного там Еще ОЧЕНЬ И ОЧЕНЬ МНОГО.
6)И личная просьба - удали камент. Я хочу сделать этот топик с Только моими постами, чтоб можно было сделать нормальную навигацию по постам, и редактировать каждый из них.
P. S. Как и написано в топике - вопросы и предложения пжалуста пиши в личку.
И вообще по теме из всего что ты написал - было только про Логические Операторы.
Еще раз прошу удалить пост!
Last edited by Unholy on 23.07.2008 13:38, edited 1 time in total.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Post by Scripts Writer »

Всё не читал, но из того что бросилось в глаза- NOT, OR, AND-это не условия цикла,-это логические операторы.

По поводу информации которую ты здесь выложил,-зря ты взялся за то, к чему не склонен. Каждое слово должно иметь смысловую нагрузку, и все понятия в алгоритмизации очень точные, и варьировать ими нельзя направо и налево, тем более это пособие для новичков.

По поводу не дописанного, советую лучше начать своё повествование с внутреннего строения переменных:
Что переменная, это именованная ячейка памяти. Все данные хранятся в двоичных кодах, рассказать почему у переменной int значения -32768...32767, рассказать что символьные переменные представляют из себя ASCII коды, которые так же представлены в виде двоичных чисел, что "строка текста", как ты выразился, есть не что иное, как символьный массив, рассказать про логические операторы (и, или, не), показать по таблице истинности их отличия и сходства, сделать несколько скобочных разборов чтобы человек понял и т.д. и т.п.. Но сделать это так, чтоб человек раз и навсегда уяснил, и больше никогда ему не приходилось переучиваться из-за не профессианальной грамотности обучающего.

До программирования там ещё очень и очень далеко.

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

Post by Edred »

Unholy
Не дергайся. Пусть люди пишут замечания в этом топике. Ты просто учитывай все дельные и продолжай. Я потом все "лишние" посты удалю.

И вообще. Перенес в этои же раздел тему "Восстановление уроков по Стелсу", там у автора явно энтузиазма не хватило продолжать, а написано было довольно толково (с учетом замечаний). Если ты готов заниматься этим делом - возьми на вооружение тот материал.
huli
Posts: 3
Joined: 25.08.2008 21:02

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

Post by huli »

Ребята а типы обьектов нада брать с инжекта или можно как то по другому определять?
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

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

Post by Edred »

huli wrote:Ребята а типы обьектов нада брать с инжекта или можно как то по другому определять?
Способов много. Просто инжект, наверное, самый удобный. Если инжект не запустить - попробуй использовать InsideUO. Открываешь в нем verdata.mul, смотришь номер соответствующей картинки - это и есть тип. Еще можно попробовать использовать EasyUO, а потом ее тип сконвертить в инжектный (у Йоко была утилитка для этого, поищи на сайте инжекта).

Ну и, наконец, можно просто написать небольшой скриптик, который будет выводить в журнал или файл типы всех объектов в каком-нибудь контейнере с их названиями. Скрипт очень легкий - просто поиск всех объектов в контейнере, по каждому найденному выводить тип и название. А лучше еще и цвет. И меня терзает четкое дежавю, что эта тема на форуме уже подымалась и скрипт такой приводился.
RaTaMaHaTTa wrote:А чем тебе с инжекта не устраивает ?
Если не знаешь, что ответить на заданный вопрос - лучше промолчать. О шардах, где инжект запрещен, ты, похоже, даже и не слышал.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

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

Post by Unholy »

блин, а ведь мне тогда было 15 лет 8)

В топике просил не отписываться потому-что не мог редактировать свои посты (после того как кто-то добавит пост - редактирование предыдущих - становится(лось) не возможным...), и ссылки бились :roll:

Кто-то захотел [грыз] интеллектом, это и погубило и энтузиазм и тему. :wink: а могло получится что-то действительно стоящее :)
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

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

Post by MuDaCk »

Молодец, расписал хорошо. И самое главное не напрягающим языком)))
Я в 15 лет не знал с какой стороны подойти к компу, чтобы он мне не вломил :oops: .
My name is Игорёшка Image
Пишу скрипты за едуImage
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

Unholy wrote:блин, а ведь мне тогда было 15 лет 8)

В топике просил не отписываться потому-что не мог редактировать свои посты (после того как кто-то добавит пост - редактирование предыдущих - становится(лось) не возможным...), и ссылки бились :roll:

Кто-то захотел [грыз] интеллектом, это и погубило и энтузиазм и тему. :wink: а могло получится что-то действительно стоящее :)
а сейчас на этом движке форума ты можешь свои прошлые сообщения редактировать? по идее должно работать.

P.S. малеха почистил топик

P.P.S. МАТ ЗАПРЕЩЕН
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re:

Post by Unholy »

Scripts Writer wrote:Всё не читал, но из того что бросилось в глаза- NOT, OR, AND-это не условия цикла,-это логические операторы.

По поводу информации которую ты здесь выложил,-зря ты взялся за то, к чему не склонен. Каждое слово должно иметь смысловую нагрузку, и все понятия в алгоритмизации очень точные, и варьировать ими нельзя направо и налево, тем более это пособие для новичков.

По поводу не дописанного, советую лучше начать своё повествование с внутреннего строения переменных:
Что переменная, это именованная ячейка памяти. Все данные хранятся в двоичных кодах, рассказать почему у переменной int значения -32768...32767, рассказать что символьные переменные представляют из себя ASCII коды, которые так же представлены в виде двоичных чисел, что "строка текста", как ты выразился, есть не что иное, как символьный массив, рассказать про логические операторы (и, или, не), показать по таблице истинности их отличия и сходства, сделать несколько скобочных разборов чтобы человек понял и т.д. и т.п.. Но сделать это так, чтоб человек раз и навсегда уяснил, и больше никогда ему не приходилось переучиваться из-за не профессианальной грамотности обучающего.

До программирования там ещё очень и очень далеко.

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

1. "Это логические операторы" - да, круто, это многое объясняет начинающим программистам...
2. "зря ты взялся за то, к чему не склонен" - как показала практика - ты не прав :D
3. "с внутреннего строения переменных..." - да, отличный совет! Это имело-бы огромный смысл... если-бы мы говорили о ассемблере. Для тех кто только начинает осваивать интерпритатор (какой-либо) "как это все работает" - второстепенный вопрос. Первостепенный "как сделать чтоб все работало"! Именно об этом я и хотел рассказать.
4. "Но сделать это так, чтоб человек раз и навсегда уяснил, и больше никогда..." - с таким подходом он уяснит "это не мое" и больше никогда не будет пытаться понять что-либо, будет бесконечое кол-во тем с заголовком "а где мне вписать id кирки, и что такое id, и где его взять????"...
5. "До программирования там ещё очень и очень далеко" - *лицорука* как-бы никто ничего и не писал о программировании :roll:. Писали о скриптах.
6. "Из не написанного..." - о да... такое ощущение что автор поста работает преподавателем в каком-то вузе (или школе о_О). Ладно табуляция (выделяем скрипты и логику (TAB-ом) чтоб было понятнее где он начинается и где заканчивается [вот собственно и рассказал :mrgreen:]), но про венгерскую нотацию??? ТЫ СЕРЬЕЗНО? Этим нужно забивать голову людям которые не знают что такое переменная? [в двух словах о в. н. представьте себе что нужно взять переменную для цикла "for"... нормальный человек напишет var i : integer; и будет его использовать в программе. Так вот, в венгерской нотации мы должны объявить эту переменную как var intTempVarForCycleFor : integer;.] Не сказал-бы что это абсолютно не нужная вещь. На практиктике она действительно применяется, но только когда идет речь о очень больших проектах (в свое время я участвовал в проекте над которым трудилось 7 человек, по мимо венгерской нотации нам к каждой переменной нужно было добавлять свой номер, дабы когда все ф-ии склеят воедино переменные не повторялись). Когда речь идет о скрипте для прокачки ItemsID - все(!) о чем ты написал - не имеет никакого смысла, и абсолютно не нужно. Все это можно вместить в 10 слов "Называйте переменные так, чтоб вы понимали что в них хранится.", еще можно добавить чтоб вам было удобно их использовать... ты вообще читал какие скрипты пишут люди? "LogType" и все! это не "PublicCardinalConstTypeOfLogs", это просто "LogType", и автору это понятно, и юзерам это понятно! Тогда в чем проблема?

P. S. Действительно складывается впечатление что автор - типичный школьный учитель по информатике. Который учит по "заученной до дыр" схеме которую он описал (то есть учим что существуют переменные и ф-ии, ковыряем их до тех пор пока не расберемся что все это 0 и 1 и пока не поймем что из себя представляют), по этой схеме нас учили в школе паскалю (благо я это уже знал), по этой схеме нас в универе учили C++ (и даже я ничего не понял, не говоря уже о остальных). Именно из-за такой схемы преподавания я организовал другую и создал факультатив (в своем универе) по С++ (после того как в нем разобрался) и HTML (да, подобные автору интеллектуалы умудрились запороть даже этот плевый предмет). И к стати это принесло великолепные результаты. Все все поняли. А секрет прост - начинаем не с переменных (и того что это такое) а с конкретных примеров (например того-же "Hello, world!"), так проще... по крайней мере я с этого начинал (в 12 лет)...

P. P. S. Времени сейчас мало (работа все-таки + своими проэктами занимаюсь), но сейчас возвращаюсь в UO, так-что впролне возможно что тема будет продолжена.

P. P. S. Да, и простите за мат.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

нафиг венгерские нотации. но хотя бы как-то пользоваться табом надо, иначе при виде скрипта с 1-2 десятками begin-end без единого отступа выть хочется.

а так вобщем-то да, все правильно.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply