Page 1 of 8

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

Posted: 16.07.2008 23:23
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');
Она вписывает в системный журнал (журнал Стелса) Какой-либо текст. Она очень удобна если вы хотите знать Что в данный момент делает ваш чар. Подробнее мы ее рассмотрим позже.

Posted: 17.07.2008 0:09
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.

Posted: 17.07.2008 1:13
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 или Тип лопаты, топора, сундука и т. п.)

Posted: 17.07.2008 1:56
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 обьекта. Подробнее об нем можно прочесть здесь.

Posted: 17.07.2008 2:54
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.

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

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

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

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

Из не написанного, советую добавить про правильный стиль программирования (рассказать про табуляцию для читабельности скрипта, правильные конструкции в тех или иных ситуациях, про динамику, проверки, задержки и т.д.), а так же про Венгерскую нотацию.
А по моему Русским языком было написано чтоб ничего не писали в теме... :roll:
ИМХО ты не умеешь отправлять и читать ЛС Так как ЛС я отослал тебе сразу после твоего поста! Ну чтож выложу здесь!
1) По поводу логических операторов - спасибо. Просто термин забыл.
2)Я не считаю что я зря взялся за это дело. В плане того что терминология должна быть точной - не спорю, но имхо это не так уж сильно важно.
3)Это не пособие для будущих программистов! Это топик созданный познакомить человека с азами скриптинга в стелсе, и научить его читать скрипты. И писал я его МАКСИМАЛЬНО понятным рядовому пользователю языком! Я не ставлю перед собой задачу написать самоучитель по паскалю и сделать из человека программиста.
5)Не написанного там Еще ОЧЕНЬ И ОЧЕНЬ МНОГО.
6)И личная просьба - удали камент. Я хочу сделать этот топик с Только моими постами, чтоб можно было сделать нормальную навигацию по постам, и редактировать каждый из них.
P. S. Как и написано в топике - вопросы и предложения пжалуста пиши в личку.
И вообще по теме из всего что ты написал - было только про Логические Операторы.
Еще раз прошу удалить пост!

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

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

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

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

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

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

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

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

Posted: 25.08.2008 21:11
by huli
Ребята а типы обьектов нада брать с инжекта или можно как то по другому определять?

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

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

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

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

Posted: 05.08.2011 9:28
by Unholy
блин, а ведь мне тогда было 15 лет 8)

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

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

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

Posted: 05.08.2011 10:01
by MuDaCk
Молодец, расписал хорошо. И самое главное не напрягающим языком)))
Я в 15 лет не знал с какой стороны подойти к компу, чтобы он мне не вломил :oops: .

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

Posted: 05.08.2011 12:34
by Vizit0r
Unholy wrote:блин, а ведь мне тогда было 15 лет 8)

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

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

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

P.P.S. МАТ ЗАПРЕЩЕН

Re:

Posted: 07.08.2011 2:11
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. Да, и простите за мат.

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

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

а так вобщем-то да, все правильно.