Search the Community

Search Filters


 Search Filters

Content tagged 'scripting'

Found 2 results


Results

  1. Статья еще надописана, ознакомиться с инфой по теме можете по ссылкам:
    http://learnpascal.ru/vvedenie-v-paskal/matematica-v-pasca.html
    http://learnpascal.ru/vvedenie-v-paskal/procedure-and-function-pascal.html
    Функции и процедуры - это фундамент любых скриптов \ программ. Для того, чтобы писать хорошие скрипты Вам обязательно нужно разбираться в данной теме. 
    Что это такое?
    Функции и процедуры - это мини программы, которые выполняют некоторую последовательность действий. Потом, чтобы вызвать в нужном месте выполнение некоторой функции\процедуры, Вам будет достаточно лишь вызвать ее по ее названию.
    В чем отличие процедуры от функции?
    Процедура просто выполняет действия, описанные в ней. А вот главная суть функции - в том, что она возвращает какой-нибудь результат (дает нам некоторый ответ).
    Ярким примером функции из жизни будет функция возведения числа в квадрат - мы берем некоторое число (аргумент), делаем что-то с ним, получаем ответ (результат).
    Процедура же в свою очередь просто выполняет некоторую последовательность действий.
    Чтобы было легче понять, вот вам несколько абстрактных примеров из игр (они могут не совпадать с реалиями скрипт движка, главное поймите идею):
    Процедуры: Воскреснуть, Пойти в некоторую точку, Использовать умение, Использовать предмет и тдФункции: Проверка смерти, Проверка кол-ва предметов в инвентаре, Проверка стадии квеста и тдТ.е. еще раз: в процедурах мы просто делаем что-нибудь, а в функциях нам важен некий результат действий.
    В описании скрипт движков ArcheBox и Adrenaline Вы как раз везде можете видеть ключевые слова procedure и function:

     
    Как этим пользоваться?
    Общая суть состоит в том, что вы выделяете некие отдельные блоки действий вот в такие подпрограммы, после чего вызываете их у себя в скрипте когда вам это нужно.
    Во-первых, это помогает экономить место, ведь часто некоторые действия повторяются очень часто, и благодаря функциям\процедурам Вам не нужно будет каждый раз дублировать код.
    Во-вторых, это помогает создавать некоторые универсальные блоки кода, которые будут делать почти одно и тоже, но с небольшими отличиями: например, Вам нужно найти ближайшего моба с нужным именем - Вы можете создать функцию, которая будет принимать аргумент - имя моба, и в зависимости от переданного ей имени будет находить ближайшего моба.
    Аргументы - это некоторый набор параметров, который мы передаем в функцию или процедуру. Помните пример с квадратом числа? Когда мы возводим число в квадрат мы должны знать, что это за число, ведь от этого зависит результат. Так, например, когда мы возводим в квадрат число 3, мы получаем ответ 9. В данном примере 3 - это подаваемый аргумент, а 9 - результат работы функции.
  2. Прежде чем начать, нам нужно "определиться с определениями", хотя бы с основными. Изложены они будут кухонным языком, дабы вникнуть в них могли люди, которые совершенно не сталкивались с программированием прежде. Если после прочтения информация более-менее уложится в голове, то можно смело идти гуглить глубже.
    Для начала нужно ответить на вопрос, как это вообще устроено? 
    У нас есть скрипт - файл (в нашем случае как правило txt) в котором написан программный код. Сей программный код "говорит" компилятору, что нужно делать, т.е. представляет собой логическую или не очень последовательность действий. Компилятор -  грубо говоря и не вдаваясь в подробности это сама программа (Adrenalin или ASI WIN ArheAge). Софт "читает" ваш код, компилирует его (компиляция — это процесс создания исполняемого файла, основываясь на указанном компилятору программном коде) и выполняет то, что там написано. 
    Итак, давайте посмотрим, как будет выглядеть структура скрипта, в котором объявлены основные разделы:
    uses SysUtils; // раздел uses, тут подключаются библиотеки const // описание констант text = 'yo ku ya glad'; ID = 12494; var // описание переменных flag: boolean; procedure wait(); // описание процедуры begin Delay(5555); end; begin // основной код скрипта Print(text); wait(); end.Итак, мы видим, что все разноцветное - это явление называется подстветка синтаксиса, нужна она для более удобной навигации Ваших глаз в коде.
    Обратите внимание на ключевые слова uses, const, var и тд. все они что-то "говорят" компилятору. Рассмотрим что здесь написано подробней:
    uses SysUtils; Раздел uses сообщает, что мы используем в нашем скрипте. А использовать мы можем библиотеки или модули (юниты). Каждая библиотека дает нам доступ к набору функций, например SysUtils содержит в себе функции, которые приводят численные значения к строковым и наоборот, Вам, поверьте мне, придется их очень часто использовать в будущем.
    Разделы const и var отвечают за объявление констант и переменных. Что значит объявление?
    Чтобы компилятор понимал запись вида tmp_string:= s1 + s2; нужно объяснить ему в начале, что эти переменные из себя представляют, какой это тип данных? строки \ цифры \ логические переменные? Потому что нельзя, например, сложить цифру "2" и строку "Вася". Подробнее об этом будет в других уроках, сейчас просто отметьте для себя, что прежде чем использовать какие-либо переменные, они должны быть объявлены (указан их тип).

    Далее как правило идет описание процедур и функций, ключевые слова procedure \ function. Что это такое? По сути и то и другое представляет собой небольшую подпрограмму, обособленную последовательность действий, которую потом можно вызвать просто написав ее название в скрипте. Нужно это например для того, чтобы не писать один и тот же код много раз.
    Предположим в ArcheAge после использования умения нужно ждать пока пройдет откат умения и ГКД:
    procedure wait_gcd; begin while (User.Cast.EndTime <> 0) or (User.GlobalCoolDown <> 0) do delay(1000); end;Описав один раз такую процедуру, можно будет в своем скрипте вызывать ее после каждого использования умения:
    if Engine.UseSkill('Ледяная стрела') then wait_gcd;Еще один важный вопрос: в чем отличие процедуры от функции? Функция возвращает результат после своего выполнения, а процедура нет. Все со школы должны помнить тригонометрические функции, например синус. sin(x) = чему-нибудь, т.е. в зависимости, что мы подадим на вход этой функции, мы будем получать разные результаты. Или функция сложения - в зависимости от того, какие слагаемые были поданы на вход, результат (их сумма) будет отличаться.
    А процедура это просто последовательность каких-нибудь действий без лишних заморочек.

    Ну и наконец основное тело скрипта - это все то, что заключено между begin и end. (заметьте, что у этого end на конце ставится именно точка, в отличие от остальных случаев, где мы видим точку с запятой). При запуске скрипта компилятор начнет выполнять код, написанный между этими begin \ end. используя инфу об объявленных ранее константах\переменных\процедурах\функциях.

    Надеюсь общее представление о том, как выглядит скрипт сложилось, поэтому переходите к следующим урокам