[AGFC: Valley of Gothic] М: Уроки скриптологии

Страница 1 из 8 1 2345678
Поиск в этой теме:

Расширенный поиск
Старый 19.10.2004, 08:53   #1
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию М: Уроки скриптологии

Начинаем новую тему [glow=red,2,300]Уроки скриптологии[/glow]
Цель - изучение скриптов Готик.
Предлагается следующий вариант работы. Я выкладываю "некую информацию" по скриптам, проходит обсуждение, затем новая порция информации. Уроки, можно сказать, без учителя, так как я знаю не больше вашего, учиться предлагается друг у друга. Самое важное в изучении - диалог, чем больше будет вопросов и советов, тем быстрее будет и результат.

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

Тема первая: Типы переменных.
В скриптах используется всего несколько типов переменных:
VOID - "пустой" тип
INT - целое число
FLOAT - число с плавающей точкой
STRING - строка текста
CLASS - структура с внутренними типами и функциями
PROTOTYPE - обычно инициализация класса, но возможно и другое использование
INSTANCE - пока сказать нечего.
вот, кажется, и все типы.

Посмотрим, что у нас получится. *;) *:D
Ответить с цитированием
Старый 19.10.2004, 22:31   #2
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2TycoooN:
Это ж самый распространённый тип в скриптах.
Можешь прокомментировать два примера, желательно поподробнее.
INSTANCE self,other (C_NPC);
INSTANCE Demon (Mst_Default_Demon)
{
* * *Set_Demon_Visuals();
* * *Npc_SetToFistMode(self);
};

Просто в языке С такого типа нет, хотелось бы полностью выяснить его применение.

Есть еще один тип переменной, мною пропущенный, это
FUNC - просто функция
Ответить с цитированием
Старый 20.10.2004, 09:18   #3
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

По первой теме можно добавить следующее:
Типы переменных делятся на простые типы - INT, FLOAT, STRING и сложные (производные) типы - CLASS, PROTOTYPE, INSTANCE. Особняком стоит тип VOID, я нашел всего одно его применение - при объявлениии функции указывает, что функция не имеет возвращаемого значения.
К сложным типам мы еще вернемся позже.

Тема вторая: Операции над данными.

Существует несколько типов операций: арифметические, присваивания, отношения, логические, побитовые, над массивами, операции с членами классов.
В основном, все операции применимы только к простым типам, за исключением типа STRING.

1. Арифметические операции.
+ - простое сложение
- - простое вычитание
* - простое умножение
/ - простое деление (результат целая часть)
% - простое деление (результат остаток)
Здесь должно быть все понятно - без комментариев.

2. Операции присваивания.
= - простое присваивание
+= - сложение с приваиванием
-= - вычитание с присваиванием
*= - умножение с присваиванием
/= - деление с приваиванием (целая часть)
Здесь тоже все понятно - без комментариев.

3. Операции отношения.
< - истина, если меньше
> - истина, если больше
<= - истина, если меньше или равно
>= - истина, если больше или равно
== - истина, если равно
!= - истина, если не равно
Здесь тоже все понятно - без комментариев.

(продолжение следует)
Ответить с цитированием
Старый 20.10.2004, 10:32   #4
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

4. Логические операции.
! - истина, если выражение ложно
две вертикальные палочки - истина, если истинно значение первого или второго операнда
&& - истина, если истинно значение первого и второго операнда
Операция ! является только префиксной операцией (пример !операнд)

5. Побитовые операции.
~ - инверсия операнда (префиксная операция)
>> - логический сдвиг вправо операнда1 на величину операнда2
<< - логический сдвиг влево операнда1 на величину операнда2
вертикальная палочка - побитовая операция ИЛИ
& - побитовая операция И
^ - побитовая операция исключающее ИЛИ

6. Операции над массивами.
[] - получение или задание элемента массива по индексу (при инициализации массива задание его размерности)

7. Операции с членами классов.
. - обращение к элементу класса
Пример: аа.бб , где аа - имя класса, бб - имя переменной класса

8. Другие операции.
() - вызов функции с аргументами

Вот, пожалуй и все, что я знаю по этой теме. *:D

ЗЫ: Столкнулся с проблемой отображения в тексте вертикальных палочек (выглядит |). Может кто знает как ее решить?
Ответить с цитированием
Старый 20.10.2004, 21:50   #5
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Killer-XXX:
Что мы не услышим из твоих уст учения по "функциям"
Функции будем разбирать позже, когда освоим правила построения скриптов. Я имел в виду, что мне известно по второй теме.

2TycoooN:
Об INSTANCE self,other (C_NPC); единственное упоминание в скриптах - в файле classes.d, так что неважно что это такое
Это очень даже важно, чтобы создавть новые типы INSTANCE надо знать правила их описания и происхождение, иначе можно только использовать готовые.
В моем понимании INSTANCE это производный тип от CLASS и (или) PROTOTYPE.
Об INSTANCE self,other (C_NPC); можно сказать, что
C_NPC - базовый класс, от которого произведены две INSTANCE с именами self и other
INSTANCE Demon (Mst_Default_Demon)
{
* * Set_Demon_Visuals();
* * Npc_SetToFistMode(self);
};

В этом примере от базового класса Mst_Default_Demon произведена INSTANCE c именем Demon, которая в дополнение к функциям класса (если они есть), добавляет две новые функции. Во второй функции параметром является INSTANCE self, объявленная ранее.
Декларацией второй функции будет строка FUNC VOID Npc_SetToFistMode(VAR C_NPC self);
Если сравнивать с языком С, то тип INSTANCE очень похож на тип ссылки, только ссылка не добавляет новых возможностей класса, а декларация INSTANCE похоже добавляет. Что можно добавить и(или) переопределить нуждается в дальнейшем изучении. Это самый сложный тип в скриптах.
Ответить с цитированием
Старый 21.10.2004, 08:58   #6
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Тема третья: Операторы и идентификаторы типа.

1. Операторы.
Операторов в скриптах реализовано очень мало:
{ выражение(я) }; - оператор блок, после закрывающей фигурной скобки обязательна точка с запятой.
Блоки допускают вложения друг в друга.
IF (условие(я)) блок - оператор условного выполнения. Если условие истина, то выполняется блок, исли условие ложно, то блок пропускается. Возможна и другая реализация:
IF (условие(я)) блок ELSE блок - если условие истина, выполняется только блок IF, если условие ложь, то выполняется только блок ELSE. Возможно вложение операторов IF друг в друга.
RETURN - оператор выхода из функции, может возвращать значение.

2. Идентификаторы типа.
Существуют два идентификатора типа:
CONST - определяет тип константы
VAR - определяет тип переменной
Оба идентификатора типа применимы к следующим типам: INT, FLOAT, STRING, FUNC.
Идентификатор VAR может использоваться только внутри блока.

Конец темы.
Ответить с цитированием
Старый 21.10.2004, 11:34   #7
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Познакомившись со всеми основными элементами языка скриптов переходим к новой теме:

Тема четвертая: Грамматика скриптов.

Текст скриптов состоит из файлов с расширением .D, файлы желательно располагать по определенным темам, согласно директорий, можно создавать любое кол-во файлов и директорий с произвольными именами.
Процесс компиляции начинается с файла с расширением .SRC, в нем записывается порядок, в котором будут компилироваться файлы .D. Допускается вложенность файлов .SRC.

Одно общее правило: прежде чем использовать какую-либо переменную, она должна быть декларирована. Декларация переменной с определенным именем во всех скриптах должна быть одна. Декларация (объявление) может быть с инициализацией или без нее.
Формат .D файла прост: любая декларация должна начинаться с одного из ключевых слов: CONST, VAR, FUNC, CLASS, INSTANCE, PROTOTYPE. Идентификатор VAR, как говорилось ранее, может быть использован только в блоке.
Компилятор одинаково распознает как заглавные буквы, так и строчные буквы, поэтому имена Аааа и аааа, это одно и тоже.
Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.

Вот, вроде и все о грамматике, можете задавать вопросы, постараюсь на все ответить.

ЗЫ: Хотелось бы получить ответ, устраивает ли материал в такой форме, может надо что-то изменить, жду предложений. *;)
Ответить с цитированием
Старый 21.10.2004, 13:20   #8
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

По умолчанию Re: Уроки скриптологии

2Vam:
Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.
С комментариями не все так просто.
Фактически они остаются в Gothic.dat и в Ou.bin (Ou.csl).
Точнее не все комментарии - // - комментарии.

Изложение выше всяких похвал - все очень понятно.

Ответить с цитированием
Старый 21.10.2004, 13:32   #9
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Pa:
С комментариями не все так просто.
Фактически они остаются в Gothic.dat и в Ou.bin (Ou.csl).
Да, есть одна особенность комментариев. В *.dat файлах их точно нет, а вот в OU.* файлы они включаются, но только те, которые продолжают строку за этими функциями:
AI_Output(VAR C_NPC self,VAR C_NPC target,VAR STRING outputName) //комментарий
AI_OutputSVM(VAR C_NPC self,VAR C_NPC target,VAR STRING svmname) //комментарий
AI_OutputSVM_Overlay (VAR C_NPC self,VAR C_NPC target,VAR STRING svmname) //комментарий
Ответить с цитированием
Старый 22.10.2004, 09:19   #10
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Новых предложений нет, значит продолжим.

Дополнение к четвертой теме:
Существует несколько главных файлов .SRC, их имена изменять нельзя. Это в папке Content - gothic.src и fight.src, а в папке System - camera.src, menu.src, music.src, sfx.src, visualfx.src и particlefx.src - из них компилируются соответствующие *.dat файлы.
Дальше будем рассматривать базовые классы и функции. Все конкретные классы и функции будут относиться только к скриптам gothic.src. Остальные скрипты пока рассматривать не будем, может потом в этом появится необходимость.
Небольшое замечание: В скриптах кол-во локальных переменных в блоке и размерность любого массива ограничены числом 4095.

Тема пятая: Классы.

Структура класса должна быть всем понятна, (если нет, то спрашивайте), поэтому перейдем к рассмотрению базовых классов. Их всего девять - C_NPC, C_ITEM, C_MISSION, C_SPELL, C_INFO, C_SVM, C_FOCUS, C_ITEMREACT, C_GILVALUES. Из названий большинства из них, понятно, что они описывают.

Рассмотрим класс C_NPC, который описывает параметры всех npc в игре, включая ГГ.

CLASS C_NPC
{
*VAR INT * * *id; * * * * * * * * * * * * //идентификатор, у каждого npc свой
* * *//absolute ID des NPCs
*VAR STRING * name[5]; * * * * * * * * * *//массив из 5 имен
* * *//Namen des NPC
*VAR STRING * slot; * * * * * * * * *
*VAR INT * * *npcType; * * * * * * * * * *//тип
*VAR INT * * *flags; * * * * * * * * * * *//флаги ??? * * *
*VAR INT * * *attribute[ATR_INDEX_MAX]; * //атрибуты (8 максимум) * * * * * *
*VAR INT * * *protection[PROT_INDEX_MAX]; //защита (кол-во защит зависит от видов урона)
*VAR INT * * *damage[DAM_INDEX_MAX] ; * * //урон
*VAR INT * * *damagetype; * * * * * * * * //тип урона
*VAR INT * * *guild,level; * * * * * * * *//гильдия и уровень
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*VAR FUNC * * mission[MAX_MISSIONS]; * * *//миссии (5 максимум)
*VAR INT * * *fight_tactic; * * * * * * * //тактика владения оружием
*VAR INT * * *weapon; * * * * * * * * * * //выбранное оружие
*VAR INT * * *voice; * * * * * * * * * * *//номер голоса
*VAR INT * * *voicePitch; * * * * * * * * //тон голоса
*VAR INT * * *bodymass; * * * * * * * * * //вес тела ??? * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*VAR FUNC * * aily_routine; * * * * * * * //какая-то ежедневная функция ???
* * *//Tagesablauf
*VAR FUNC * * start_aistate; * * * * * * *//функция начального AI состояния ???
* * *//Zustandsgesteuert
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// ********************** * * * * * * * * * * * * * * *
* * *// Spawn * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
*VAR STRING * spawnPoint; * * * * * * * * //место рождения ???
* * *//Beim Tod, wo respawnen ?
*VAR INT * * *spawnDelay; * * * * * * * * // ???
* * *//Mit Delay in (Echtzeit)-Sekunden
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
* * *// SENSES * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
*VAR INT * * *senses; * * * * * * * * * * //чувствительность ???
* * *//Sinne
*VAR INT * * *senses_range; * * * * * * * //диапазон чувствительности
* * *//Reichweite der Sinne in cm
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
* * *// Feel free to use * * * * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
*VAR INT * * *aivar[50]; * * * * * * * * *//массив AI переменных * * * * * * * * * * * * * * * * * * *
*VAR STRING * wp; * * * * * * * * * * * * //точка привязки
* * *
* * *// ********************** * * * * * * * * * * * * * * *
* * *// Experience dependant * * * * * * * * * * * * * * * * * *
* * *// ********************** * * * * * * * * * * * * * * *
*VAR INT * * *exp; * * * * * * * * * * * *//текущая экспа
* * *//EXerience Points
*VAR INT * * *exp_next; * * * * * * * * * //сколько нужно экспы до следующего уровня
* * *//EXerience Points needed to advance to next level
*VAR INT * * *lp; * * * * * * * * * * * * //кол-во очков обучения
* * *//Learn Points * * * * * *
};

Примечание: Свои комментарии я буду располагать в строке с переменной, а комментарии на немецком языке (если они есть), в следующей строке. Если я буду в чем-то ошибаться, то поправляйте, если немецкий комментарий более подробно описывает переменную, то его желательно перевести (может уже у кого-то есть переведенные или кто-нибудь сможет переводить по ходу дела). Я немецкий абсолютно не понимаю (он меня раздражает *>:(). Если про переменную ничего не сказано, значит мне пока про нее сказать нечего.
То, что помечается ??? требует дополнительных комментариев.

ЗЫ: Мучился, мучился, но так и не понял, как правильно форматировать текст? *::)
Ответить с цитированием
Старый 22.10.2004, 23:26   #11
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Вашему вниманию предлагается следующий класс C_ITEM, описывающий все предметы в игре.

CLASS C_Item
{
* * //F№r alle Items
VAR INT * * id; * * * * * * * * * * //идентификатор предмета
VAR STRING *name,nameID; * * * * * *//имя, имя ID
VAR INT * * hp,hp_max; * * * * * * *// ???

VAR INT * * mainflag,flags; * * * * //категория предмета, ???
* * //Hauptflag und weitere Flags
VAR INT * * weight,value; * * * * * //вес, ???

* * //F№r Waffen
VAR INT * * damageType; * * * * * * //тип урона
* * //Welche Schadensarten
VAR INT * * damageTotal; * * * * * *//суммарный урон
VAR INT * * damage[DAM_INDEX_MAX]; *//урон по типам

* * //F№r R№stungen
VAR INT * * wear; * * * * * * * * * //на какое место одевать
VAR INT * * protection[PROT_INDEX_MAX]; //защита по типам

* * //F№r Nahrung
VAR INT * * nutrition; * * * * * * *// ???
* * //HP-Steigerung bei Nahrung

* * //BenЎtigte Attribute zum Benutzen des Items
VAR INT * * cond_atr[3]; * * * * * *//атрибут, требуемый для примениения
VAR INT * * cond_value[3]; * * * * *//значение требуемого атрибута

* * //Attribute, die bei anlegen des Items verфndert werden
VAR INT * * change_atr[3]; * * * * *// ???
VAR INT * * change_value[3]; * * * *// ???

* * //Parserfunktionen
VAR FUNC * *magic; * * * * * * * * *// ???
* * //Parserfunktion zum "Magie Header"
VAR FUNC * *on_equip; * * * * * * * //функция одевания
* * //Parserfunktion, wenn Item equipped wird.
VAR FUNC * *on_unequip; * * * * * * //функция снятия
* * //Parserfunktion, wenn Item unequipped wird.
VAR FUNC * *on_state[4]; * * * * * *//пользовательские функции

* * //Besitzer
VAR FUNC * *owner; * * * * * * * * *//кому принадлежит
* * //Besitzer : Instanz-Name
VAR INT * * ownerGuild; * * * * * * //гильдия - собственник
* * //Besitzer : Gilde
VAR INT * * disguiseGuild; * * * * *// ???
* * //Zur Schau getragene Gilde durch Verkleidung

* * //Die 3DS-Datei
VAR STRING *visual; * * * * * * * * //файл текстур

* * //Verфnderung des NSC-Meshes beim Anlegen dieses Gegenstandes
VAR STRING *visual_change; * * * * *//какой-то .asc файл ???
* * //ASC - File
VAR INT * * visual_skin; * * * * * *// ???

VAR STRING *scemeName; * * * * * * *// ???
VAR INT * * material; * * * * * * * //материал предмета
* * //VAR STRING *pfx;
* * //Magic Weapon PFX
VAR INT * * munition; * * * * * * * //оружейное снаряжение (стрелы, болты)
* * //Instance of Munition

var int * * spell; * * * * * * * * *//тип заклинания
var int * * range; * * * * * * * * *// ???

var int * * mag_circle; * * * * * * //круг магии

VAR STRING *description; * * * * * *//имя описания предмета
VAR STRING *text[ITM_TEXT_MAX]; * * //текст описания (мах 6 строк)
VAR INT * * count[ITM_TEXT_MAX]; * *//числовые значения для описания
};


Ребята, получается монолог вместо диалога, так мы много не изучим. Может стоит закрыть тему? *:(
Ответить с цитированием
Старый 23.10.2004, 01:04   #12
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

VAR FUNC * * aily_routine; * * * * * * * //какая-то ежедневная функция ???
Распорядок дня.

VAR INT * * weight,value; * * * * * //вес, ???
Возможно, стоимость.

VAR INT * * wear; * * * * * * * * * //на какое место одевать
Не уверен...
Пример:
wear * * * * * * * * * * * *= * * *WEAR_EFFECT;
effect * * * * * * * * * * * *= * * *"SPELLFX_CROSSBOW";
Это из файла It_addon_weapons.d
Эти две строки накладывают на арбалет эффект SPELLFX_CROSSBOW (магический арбалет)

VAR INT * * change_atr[3]; * * * * *// ???
VAR INT * * change_value[3]; * * * *// ???
Изменение определенного атрибута.
На сколько изменится атрибут.
В этом не уверен, но можно поэксперементировать сегодня.
Например, при "одевании" какого-нить меча сила изменится на определенное количество.

var int * * range; * * * * * * * * *// ???
Это радиус поражения.
Ответить с цитированием
Старый 23.10.2004, 05:12   #13
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

AR INT     change_atr[3];          // ???
VAR INT     change_value[3];        // ???
Изменение определенного атрибута.
На сколько изменится атрибут.
В этом не уверен, но можно поэксперементировать сегодня.
Например, при "одевании" какого-нить меча сила изменится на определенное количество.
Поэксперементировал... Я ошибся... В таком случае, понятия не имею, к чему это...
Ответить с цитированием
Старый 23.10.2004, 06:12   #14
finch

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

А вот и не ошибся! *;D
Вот пример скрипта обычного меча с добавлением двух строк. При "одевании" его сила увеличивается на 50 единиц.

INSTANCE ItMW_Addon_Knife01 (C_Item)
{ * * *
* * *name ** * * * * * * * * * * *= * * *"Wolfsmesser"; *

* * *mainflag ** * * * * * * * *= * * *ITEM_KAT_NF;
* * *flags ** * * * * * * * * * * *= * * *ITEM_SWD; * * *
* * *material ** * * * * * * * *= * * *MAT_METAL;

* * *value ** * * * * * * * * * * *= * * *Value_Wolfsmesser;

* * *damageTotal * * * * * * *= ** * *Damage_Wolfsmesser;
* * *damagetype ** * * * * * * * *= * * *DAM_EDGE;
* * *range * * * * * * * * * * *= * * * *Range_Wolfsmesser; * * * * * *
* * *
* * *on_equip * * * * * * * * *= * * *Equip_1H_03;
* * *on_unequip * * * * * * * * *= * * *UnEquip_1H_03;
* * *
* * *cond_atr[2] * ** * * * * *= * * *ATR_STRENGTH;
* * *cond_value[2] * * * * * * *= * * *Condition_Wolfsmesser;
* * *visual ** * * * * * * * * * * *= * * *"ItMw_012_1h_Knife_02.3DS";

* *change_atr[2] * * * * * *= ** * *ATR_STRENGTH;
* *change_value[2] * * * * * *= * * *50;


* * *description * * * * * * * * *= * name;
* * *
* * *TEXT[2] * * * * * * * * * * * *= NAME_Damage; * * * * * * * * * * * * * * *COUNT[2] * * *= damageTotal;
* * *TEXT[3] ** * * * * * * * *= NAME_Str_needed; * * * * * * * * * * * *COUNT[3] * * *= cond_value[2];
* * *TEXT[4] * * * * * * * * * * * *= NAME_ADDON_BONUS_1H; * * * * * * * * *COUNT[4] * * *= Waffenbonus_03;
* * *TEXT[5] * * * * * * * * * * * *= NAME_Value; * * * * * * * * * * * * * * *COUNT[5] * * *= value;

Хотя добиться того же самого эффекта можно и по-другому.
Ответить с цитированием
Старый 23.10.2004, 13:40   #15
Irwin1138
Строители Миртаны
  Аватар для Irwin1138
 
 
Регистрация: 22.07.2004
Сообщений: 74
Irwin1138 вне форума

По умолчанию Re: Уроки скриптологии

VAR STRING * name[5]; * * * * * * * * * *//массив из 5 имен
Скорее всего просто имя 8)
VAR FUNC * * aily_routine; * * * * * * * //какая-то ежедневная функция ???
Это распорядок дня. У каждого НПС свой.
VAR STRING * spawnPoint; * * * * * * * * //место рождения ???
Место возрождения НПС в случае убиения оного.
VAR INT * * *spawnDelay; * * * * * * * * // ???
Реальное время в секундах проходящее между убиением и возрождением.
VAR INT * * *senses; * * * * * * * * * * //чувствительность ???
Чувства.
VAR STRING *visual; * * * * * * * * //файл текстур
Это 3DS файл с моделькой предмета.
VAR STRING *visual_change; * * * * *//какой-то .asc файл ???
Это связано с анимацией. .ASC файл получается при экспорте анимации из 3DS Max'a с помощью специального плагина. После запуска Г, игра конвертирует и 3DS и ASC в свой личный формат. Скорее всего у лука и арбалета есть такая фишка.
var int * * range; * * * * * * * * *// ???
Дальность заклинания.

ОФФТОП
2Vam:
Насчет конвертера анимации Г. Проблема в том что есть 4 типа анимации которые можно выбрать при экспорте, и они конвертируются х знает во что. То есть по идее они конвертятся каждый в свой, вот только поди разберись что во что конвертится. На Rpgdot есть тренировки связанные с анимацией. Вот здесь http://gothic.rpgdot.com/index.php?h...ding&infoID=83
КОНЕЦ ОФФТОПА

ЕЩЕ ОДИН ОФФТОП (ДА ПРОСТЯТ МЕНЯ МОДЕРАТОРЫ)
Как сделать так, чтобы к какому-нить слову была привязяна ссылка? То есть вместо того чтобы выводить всю ссылку, выводится только слова, при клике на него выполняется ссылка. Обьясните новичку 8)
КОНЕЦ ОФФТОПА
Отправить личное сообщение для Ответить с цитированием
Старый 23.10.2004, 15:54   #16
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Владимир Ильич:
Слушай, лучше надыбай мне исходники движка. Я хочу шейдеры в Готику запихнуть. Помочь не хочешь?
Исходников, к сожалению, у меня нет, сам восстанавливаю из экзешника. А это требует уйму времени, так что извини! *:)

2Всем:
Вот это уже неплохо, сколько всего сразу выяснилось, осталось немного обобщить.
2finch: Насчет изменения атрибутов при владении предметом, очень хорошо подмечено.
2Irwin1138: Очень правильная трактовка spawn параметров npc.
От себя могу добавить, что
VAR INT * * *senses; * * * * * * * //чувствительность ???
VAR INT * * *senses_range; * * //диапазон чувствительности
трактуются как чувствительность на запах, звук, визуальная и расстояние, на котором npc может что-то заметить, услышать или унюхать.
Ответить с цитированием
Старый 23.10.2004, 18:27   #17
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Несколько дополнений по классу C_ITEM
VAR INT * * nutrition; * * //увеличение HP при употреблении
VAR INT * * visual_skin; * //номер mesh-текстуры
VAR STRING *scemeName; * * //внутреннее имя предмета в скриптах

Класс C_INFO используется для создания различных диалогов

CLASS C_INFO
{
*VAR INT * * npc; * * * * *//id npc, участвующего в диалоге
*VAR INT * * nr; * * * * * // ???
*VAR INT * * important; * *//кто начинает диалог (0-ты, 1-с тобой)
* * *//Wichtig Flag -> ansprechen
*VAR FUNC * *condition; * *//функция условий диалога
*VAR FUNC * *information; *//функция самого диалога
*VAR STRING *description; *//строка описания
*VAR INT * * trade; * * * *//возможность торговли (1-да, 0-нет)
*VAR INT * * permanent; * *//постоянность диалога (1-постоянный, 0-однократный)
};

Классы C_MISSION, C_ITEMREACT в скриптах не используются, мне о них сказать пока нечего.
Класс C_FOCUS используется для задания фокуса камеры при различных ситуациях, предлагаю его пока не рассматривать. :D
Ответить с цитированием
Старый 23.10.2004, 20:43   #18
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Класс C_SPELL используется для создания заклинаний

CLASS C_Spell
{
VAR FLOAT *time_per_mana; * * * * * //требуемое время на единицу маны (мс)
* * // Zeit pro investierten Manapunkt (ms)
VAR INT * *damage_per_level; * * * *//наносимый урон на уровень заклинания
* * // Schaden pro Level
VAR INT * *damageType; * * * * * * *//тип урона
* * // CAN BE ONLY ONE DAMAGE TYPE
VAR INT * *spellType; * * * * * * * //тип заклинания
* * // Good, Neutral or Bad
VAR INT * *canTurnDuringInvest; * * //возможность поворота при кастовании
VAR INT * *canChangeTargetDuringInvest; //возможность выбора цели при кастовании
VAR INT * *isMultiEffect; * * * * * //множественные эффекты заклинания
* * // Effect Class is oCVisFX_MultiTarget if set to 1 (e.g. the effect can have multiple trajectorys (massdeath)
VAR INT * *targetCollectAlgo; * * * //кто или что является целью (тип выбора цели)
VAR INT * *targetCollectType; * * * //тип цели (предмет, npc и т.д.)
VAR INT * *targetCollectRange; * * *//дальность
VAR INT * *targetCollectAzi; * * * *//азимут
VAR INT * *targetCollectElev; * * * // ???
};

Следующий класс C_SVM подробно описан в файле svm.d (но, к сожалению, на немецком языке). В нем находится все то, о чем болтают неписи между собой. Рассматривать не будем.
Ответить с цитированием
Старый 25.10.2004, 10:02   #19
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Класс C_GILVALUES описывает параметры всех типов людей и монстров

CLASS C_GILVALUES
{
VAR INT * * *WATER_DEPTH_KNEE[GIL_MAX]; * * * * *// ???
VAR INT * * *WATER_DEPTH_CHEST[GIL_MAX]; * * * * // ???
VAR INT * * *JUMPUP_HEIGHT[GIL_MAX]; * * * * * * //высота прыжка
* * // * * *DEFAULT = 200;
//VAR INT * * * JUMPUP_FORCE[GIL_MAX];
VAR INT * * *SWIM_TIME[GIL_MAX]; * * * * * * * * //время плавания (пока не утонет)
VAR INT * * *DIVE_TIME[GIL_MAX]; * * * * * * * * //время пребывания под водой
VAR INT * * *STEP_HEIGHT[GIL_MAX]; * * * * * * * //размер шага
VAR INT * * *JUMPLOW_HEIGHT[GIL_MAX]; * * * * * *// ???
VAR INT * * *JUMPMID_HEIGHT[GIL_MAX]; * * * * * *// ???
VAR INT * * *SLIDE_ANGLE[GIL_MAX]; * * * * * * * //угол начала скольжения по наклонной плоскости
VAR INT * * *SLIDE_ANGLE2[GIL_MAX]; * * * * * * *// ???
VAR INT * * *DISABLE_AUTOROLL[GIL_MAX]; * * * * *// ???
* * // * * *DEFAULT = 0 * * *;0 = Autoroll *enabled */1 = Autoroll *disabled
VAR INT * * *SURFACE_ALIGN[GIL_MAX]; * * * * * * // ???
* * // * * *DEFAULT = 0 * * ;0 = Alignment disabled * * */1 = Alignment enabled
VAR INT * * *CLIMB_HEADING_ANGLE[GIL_MAX]; * * * //какие-то углы подъема
VAR INT * * *CLIMB_HORIZ_ANGLE[GIL_MAX]; * * * * //
VAR INT * * *CLIMB_GROUND_ANGLE[GIL_MAX]; * * * *//
VAR INT * * *FIGHT_RANGE_BASE[GIL_MAX]; * * * * *//какие-то диапазоны борьбы
VAR INT * * *FIGHT_RANGE_FIST[GIL_MAX]; * * * * *//
VAR INT * * *FIGHT_RANGE_1HS[GIL_MAX]; * * * * * //
VAR INT * * *FIGHT_RANGE_1HA[GIL_MAX]; * * * * * //
VAR INT * * *FIGHT_RANGE_2HS[GIL_MAX]; * * * * * //
VAR INT * * *FIGHT_RANGE_2HA[GIL_MAX]; * * * * * //
VAR INT * * *FALLDOWN_HEIGHT[GIL_MAX]; * * * * * //высота падения без повреждения
* * // * * *Wie tief Fallen ohne Schaden ?
VAR INT * * *FALLDOWN_DAMAGE[GIL_MAX]; * * * * * //повреждение от падения с высоты
* * // * * *Schaden f№r jeden weiteren angefangenen Meter.
VAR INT * * *BLOOD_DISABLED[GIL_MAX]; * * * * * *//уровень показа крови
* * // * * *DEFAULT = 0 * * ;Blut ganz ausschalten (z.B. bei Sekletten) ?
VAR INT * * *BLOOD_MAX_DISTANCE[GIL_MAX]; * * * *//макс. радиус брызг крови
* * // * * *DEFAULT = 1000 * * *;Wie weit spritzt das Blut (in cm) ?
VAR INT * * *BLOOD_AMOUNT[GIL_MAX]; * * * * * * *//кол-во крови
* * // * * *DEFAULT = 10 * *;Wie viel Blut ?
VAR INT * * *BLOOD_FLOW[GIL_MAX]; * * * * * * * *// ???
* * // * * *DEFAULT = 0 * * ;Soll es sich langsam ausbreiten ?
VAR STRING * BLOOD_EMITTER[GIL_MAX]; * * * * * * //источник крови
* * // * * *DEFAULT = "PFX_BLOOD" * * * * *;Welcher Partikel-Emitter ?
VAR STRING * BLOOD_TEXTURE[GIL_MAX]; * * * * * * //текстура крови
* * // * * *DEFAULT = "ZBLOODSPLAT2.TGA" * ;Welche Textur ?
VAR INT * * *TURN_SPEED[GIL_MAX]; * * * * * * * *//скорость разворота
* * // * * *DEFAULT = 150;
};

Вот, в принципе и все, что мне известно о классах.  :D
Ответить с цитированием
Старый 26.10.2004, 10:08   #20
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Тема шестая: Функции.

Несколько общих замечаний:
1. Функции могут возвращать значения только этих типов - VOID, INT, FLOAT, STRING, INSTANCE.
2. Рассматривать будем пока только базовые функции, которые реализованы в екзешнике.
3. Большинство базовых функций описано в файле externals.d, но в нем есть ошибки (этот файл приведен только для справки, он не компилируется), о них буду говорить по мере разбора функций, и отмечать значком ****.
4. Идентификаторы FUNC (при объявлении функции) и VAR (как идентификатор аргументов) для простоты приводить не буду.

1. Функции вывода текста.

VOID Print(STRING s0); - выводит на экран строку текста s0, как OutputUnits текст (аналогично выводу из OU файла).
VOID PrintMulti(STRING s0,STRING s1,STRING s2,STRING s3,STRING s4); - выводит текст на экран, объединяя строки параметров s0-s4 в одну строку.
INT PrintScreen(STRING msg,INT posx,INT posy,STRING font,INT timeSec); - выводит на экран строку текста msg (имя шрифта – font) с координатами posx, posy (диапазон от 0 до 99% размера экрана, -1 означает вывод по центру соответствующей оси экрана) на время timeSec (в секундах). *Возвращаемое значение всегда = 0. ***
VOID PrintDebug(STRING s); - выводит текст строки s через zSpy или в лог. файл, работает только в отладочном режиме (включается (Alt+D))

Продолжение следует. *;)
Ответить с цитированием
Старый 26.10.2004, 13:24   #21
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

В завершение первого раздела привожу еще 4 функции:

void PrintDebugInst(String text); - выводит текст строки text через zSpy или в лог. файл для ссылки self *в отладочном режиме.
void PrintDebugInstCh(int ch,String text); - выводит текст строки text через zSpy или в лог. файл для ссылки self канала ch *в отладочном режиме (каналы определены в файле PrintDebug.d).
void PrintDebugCh(int ch, String text); - выводит текст строки text через zSpy или в лог. файл для канала ch *в отладочном режиме
INT PrintDialog(INT dialogNr,STRING msg,INT posx,INT posy,STRING font,INT timeSec); - работает аналогично функции PrintScreen, только вывод осуществляется в окно диалога c номером dialogNr (координаты в % действуют внутри окна диалога). ***

Ответить с цитированием
Старый 27.10.2004, 14:03   #22
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2. Функции преобразования типов.

string IntToString(int x); - преобразовывает целое число x в строку.
string FloatToString(float x); - преобразовывает число с плавающей точкой x в строку. ***
int FloatToInt(float x); - преобразовывает число с плавающей точкой x в целое число.
float IntToFloat(int x); - преобразовывает целое число х в число с плавающей точкой.
string ConcatStrings(string str1,string str2); - результирующей строкой является объединение двух строк str1 и str2.

Ответить с цитированием
Старый 27.10.2004, 15:22   #23
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Кто-нибудь знает расшифровку общеупотребимых сокращений в скриптах AI, VOB, SC, NSC? (Желательно на английском!)  ;)
Ответить с цитированием
Старый 28.10.2004, 08:18   #24
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

3. Функции работы со звуком.

void Snd_Play(string s0); - воспроизвести звуковой файл с именем s0.
void Snd_Play3D(c_npc n0,string s1); - воспроизвести звуковой файл с именем s0 для npc n0.
int Snd_IsSourceNpc(c_npc self); - проверить, является ли npc self источником звука (return > 0) и установить ссылку other на этого npc.
int Snd_IsSourceItem(c_npc self); - проверить, является ли у npc self предмет источником звука (return > 0) и установить ссылку item на этот предмет
int Snd_GetDistToSource(c_npc self); - выдать расстояние в сантиметрах до источника звука от npc self.
Ответить с цитированием
Старый 29.10.2004, 00:56   #25
Killer-XXX
Строители Миртаны
 
 
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
Killer-XXX вне форума

По умолчанию Re: Уроки скриптологии

2Vam:
Так держать! :)

Кто-нибудь знает расшифровку общеупотребимых сокращений в скриптах AI, VOB, SC, NSC? (Желательно на английском!)
Смею предположить (но это только лишь догадки):
AI - artificial intelligence - искусственный интеллект (by Lingvo 8.0, хотя и сам хотел что то подобное придумать:))
VOB - virtual object - виртуальный обьект
SC - system control - системное управление (by Lingvo 8.0, но были еще варианты "шкала", "диспетчерское управление")
NSC - незнаю, но предполагаю, что вероятно это N
system control - системное управление
, вот только какая система управления...

Думаю, хоть что нибудь, да угадал :)
Ответить с цитированием
Старый 29.10.2004, 10:03   #26
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Killer-XXX:
2DimaD:
Возможно вы и правы, разберемся по ходу дела. Для VOB у меня тоже есть расшифровка - visual object.
Есть еще одно сокращение - MOB, каковы его толкования?

4. Вспомогательные функции.

int Hlp_Random(int n0); - сгенерить случайное целое число в диапазоне от 0 до n0-1.
int Hlp_StrCmp(string s1,string s2); - сравнивает две строки s1 и s2, возвращает true при равенстве строк или false при неравенстве.
int Hlp_IsValidNpc(c_npc self); - если NSC ссылка на npc self существует, то возвращает true, иначе – false.
int Hlp_IsValidItem(c_itm item); - если ссылка на предмет item существует, то возвращает true, иначе – false.
int Hlp_IsItem(c_item item,int instanceName); - проверяет принадлежность предмета item к соответствующему типу instanceName, возвращает true при соответствии, иначе – false.
c_npc Hlp_GetNpc(int instanceName); - возвращает ссылку на npc, принадлежащему к типу *instanceName.
int Hlp_GetInstanceID(c_npc npc); - получить ID номер npc по ссылке на класс npc.
int Hlp_GetInstanceID(c_item item); *- получить ID номер предмета по ссылке на класс item.

Ответить с цитированием
Старый 31.10.2004, 10:16   #27
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

5. Функции работы с документами (свитки, книги, записки, карты).

int Doc_Create(); - создает новый документ и возвращает номер его обработчика.
int Doc_CreateMap(); - создает новую карту и возвращает номер её обработчика. ***
void Doc_SetLevel(int handle,string world); - устанавливает уровень world (формат ZEN) для документа handle. *** (Не знаю, что конкретно делает эта функция).
void Doc_SetPages(int handle,int pages); - задает кол-во отображаемых страниц pages для документа handle.
void Doc_SetPage(int handle,int page,string pageimage,int scale); - устанавливает параметры страницы page (если параметр page = -1, то применяется ко всем страницам) документа handle: pageimage – имя файла изображения страницы в формате TGA, scale = 0 - применять масштабируемось, scale = 1 - не использовать масштабируемость (применяется для карт).
void Doc_SetFont(int handle,int page,string fontname); - задать шрифт для страницы page документа handle, где fontname – имя файла шрифта в формате TGA.
void Doc_SetMargins(int handle,int page,int leftMargin,int topMargin,int rightMargin,int bottomMargin,int pixel); - установить границы вывода текста на странице page документа handle, где leftMargin, topMargin, rightMargin, bottomMargin – соответственно левая, верхняя, правая и нижняя границы, pixel – кол-во пикселей на единицу границы.
void Doc_PrintLine(int handle,int page,string text); - выводит строку текста text на странице page документа handle.
void Doc_PrintLines(int handle,int page,string text); - выводит текст text в несколько строк на странице page документа handle.
void Doc_Show(int handle); - выводит созданный документ handle на экран.

Продолжение следует. *;)
Ответить с цитированием
Старый 01.11.2004, 11:05   #28
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

void Doc_Open(string picName); - открывает документ с именем picName, как рисунок на заднем плане (в скриптах не используется).
void Doc_Font(string fontName); - задает для документа шрифт fontName (в скриптах не используется).
void Doc_Print(string text); - выводит текст text документа на экран (в скриптах не используется).
void Doc_MapCoordinates(string levelName,float gamex1,float gamey1,float pixelx1,float pixely1,float gamex2,float gamey2,float pixelx2,float pixely2); -инициализирует карту с именем уровня levelName, где gamex1, gamey1, gamex2, gamey2 – координаты углов карты, соответствующие координатам уровня, *а pixelx1, pixely1, pixelx2, pixely2 – соответственно коодинаты пикселей углов карты (в скриптах не используется).
Ответить с цитированием
Старый 02.11.2004, 10:15   #29
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

6. Функции работы с журналом квестов.

void Log_CreateTopic(string name,int section); - создать в журнале тему с именем name в разделе section (предопределены два раздела LOG_MISSION или LOG_NOTE).
void Log_SetTopicStatus(string name,int status); - установить статус status темы с именем name (предопределены следующие статусы - LOG_RUNNING, LOG_SUCCESS, LOG_FAILED, LOG_OBSOLETE).
void Log_AddEntry(string topic,string entry); - записать в тему topic текст из строки entry.

Ответить с цитированием
Старый 02.11.2004, 12:40   #30
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

7. Функции работы с миссиями.

void Mis_SetStatus(int missionName,int newStatus); - установить статус newStatus миссии *missionName (предопределены следующие статусы RUNNING, SUCCESS, FAILED и т.д.)
int Mis_GetStatus(int missionName); - получить статус миссии missionName.
int Mis_OnTime(int missionName); - проверка миссии, возвращает true, если миссия активна, т.е. не завершена. Примечание: данная функция в экзешнике реализована неверно, она ничего не возвращает (лучше ее не использовать).
void Mis_AddMissionEntry(c_mission miss,string name); - добавить в список миссий новую миссию miss под именем name. ***
void Mis_RemoveMission(c_mission miss); - удалить из списка миссий миссию miss. ***
Ответить с цитированием
Старый 03.11.2004, 09:43   #31
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

8. Функции работы с инвентарем.

void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.
void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.
void EquipItem(c_npc n0,int n1); - экипировать npc n0 предметом с ID n1.
void Mob_CreateItems(string mobName,int itemInstance,int amount); - создает в контейнере с именем mobName (например сундук) предметы с ID itemInstance количеством amount.
int Mob_HasItems(string mobName,int itemInstance); - получить количество предметов с ID itemInstance, находящихся в контейнере с именем mobName.
Ответить с цитированием
Старый 04.11.2004, 11:03   #32
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Всем:
Спасибо за отзывчивость, но критика тоже бы не помешала.
Всем слушателям (читателям) по *:pivo:
Продолжаем уроки.

9. Функции анимации.

void Mdl_ApplyOverlayMds(c_npc n0,string s1); - запустить файл анимации s1 с расширением mds для npc n0.
void Mdl_RemoveOverlayMDS(c_npc self,string overlayName); - отключить от npc self файл анимации overlayName.
void Mdl_ApplyOverlayMDSTimed(c_npc self,string overlayname,int timeTicks); - запустить файл анимации overlayname для npc self на время timeTicks. ***
void Mdl_ApplyRandomAni(c_npc n0,string s1,string s2); - запустить случайные анимации s1 для npc n0 в последовательности анимационных состояний s2.
void Mdl_ApplyRandomAniFreq(c_npc n0,string s1,float f2); - устанавливает частоту выборки f2 случайных анимационных состояний s1 для npc n0.
void Mdl_StartFaceAni(c_npc self,string name,float intensity,float holdTime); - запускает файл name анимации лица для npc self с интенсивностью intensity (в %, 1 – 100%) и временем удержания holdTime (1 – постоянно).
void Mdl_ApplyRandomFaceAni(c_npc self,string name,float timeMin,float timeMinVar,float timeMax,float timeMaxVar,float probMin); - запускает файл случайной анимации лица name для npc self со следующими параметрами: timeMin, timeMax – диапазон времени воспроизведения анимации в сек, timeMinVar, timeMaxVar – отклонения от значений timeMin, timeMax в сек, probMin – вероятность использования отклонения (от 0 до 1) от нижней до верхней границы.

Продолжение следует.
Ответить с цитированием
Старый 04.11.2004, 16:27   #33
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Внимание: возможен потенциальный глюк!

В посте #18 я писал, что макс. размерность массива = 4095, это не так. Компилятор скриптов в GothicMod.exe поддерживает массивы с размерностью до 255 и не больше. Модмейкеры - будьте осторожны! *;)
Ответить с цитированием
Старый 05.11.2004, 10:57   #34
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

продолжение:

void Mdl_SetVisual(c_npc self,string fileMds); - задать для npc self файл изображения с именем fileMds (формат MDS). ***
void Mdl_SetVisualBody(c_npc self,string body,int bodytex,int color,string head,int htex,int ttex,int armor); - установить параметры изображения npc self, где: body – имя mesh файла изображения тела, bodytex – номер текстуры тела, color – номер палитры цвета кожи, head – имя MMS файла изображения головы, htex – номер текстуры головы, ttex – номер текстуры зубов, armor – номер одетой брони (-1 – брони нет). ***
void Mdl_SetModelScale(c_npc self,float x,float y,float z); - установить масштаб mesh изображения модели npc self по координатам x,y,z в % (1 - 100%).
void Mdl_SetModelFatness(c_npc self,float fatness); - установить жирность mesh изображения модели npc self в % (1 - 100%). Может кто-нибудь пояснить, что это за функция?

Просьба: если кто знает, скажите, что такое mesh?
Ответить с цитированием
Старый 05.11.2004, 18:22   #35
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Благодарю за понимание, продолжим...

10. Функции распорядка дня.

void TA_Min(c_npc self,int start_h, int start_m,int stop_h, int stop_m,func state,string waypoint); - для npc self задается функция распорядка дня state, где start_h и start_m – время в часах и минутах начала выполнения функции, stop_h и stop_m – соответственно время окончания функции, waypoint – имя точки, в которой выполняется функция.
void TA(c_npc self,int start_h,int stop_h,func state,string waypoint); - выполняет все то, что и предыдущая функция, только без привязки к минутам.
void TA_CS(c_npc self,string csName,string roleName); - функция, выполняемая последней в списке функций распорядка дня для npc self, где csName – имя файла CS (Cutscene), roleName – роль NSC, которая должна выполняться. (частично не понял)
void TA_BeginOverlay(c_npc self); - начать выполнять заявленный распорядок дня для npc self.
void TA_EndOverlay(c_npc self); - закончить выполнять заявленный распорядок дня для npc self.
void TA_RemoveOverlay(c_npc self); - удалить заявленный распорядок дня для npc self.
Ответить с цитированием
Старый 06.11.2004, 13:26   #36
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

11. Функции работы с диалогами.

int InfoManager_HasFinished(); - показывает, завершен ли диалог (возвращает 0 во время диалога и 1 после окончания диалога). ***
void Info_AddChoice(c_info menu,string text,func fn); - добавляет в меню диалога menu строку выбора действия *text, fn – функция, которая активируется при выборе данного пункта меню. ***
void Info_ClearChoices(c_info menu); - удалить тему диалога menu. ***
Ответить с цитированием
Старый 07.11.2004, 10:23   #37
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

12. Функции различного назначения.

void ExitGame(); - просто закончить игру. ***
int PlayVideo(string video); - показать видео файл video (c расширением BIK), возвращает 1, если видео показано, 0 – в случае ошибки. ***
void SetPercentDone(int perc); - установить процент perc отображения полоски в окне загрузки (ProgressBar), значение от 0 до 100. ***
void IntroduceChapter(string chapter,string name,string file,string sound,int time); - вывести на экран окно новой главы, где chapter – номер главы, name – название главы, file – файл заставки главы (формат TGA), sound – звуковой файл (формат WAV), time – время показа заставки. ***
void Tal_Configure(int tal,int value); - переопределить значение таланта value для константы tal (например, определены константы NPC_TALENT_PICKLOCK, NPC_TALENT_MAGE и т.д.). ***
void Perc_SetRange(int percID,int range); - устанавливает дальность действия range *пассивного восприятия percID в сантиметрах.
void Rtn_Exchange(string oldRoutine,string newRoutine); - заменяет функции oldRoutine распорядка дня NSC self на новые функции newRoutine. (Имя функции должно начинаться с RTN_ и заканчиваться идентификатором NSC скрипта).
int Hlp_CutscenePlayed(string csName); - информирует, игралась ли Cutscene с именем csName (0 – нет, 1 – да).
Ответить с цитированием
Старый 08.11.2004, 12:20   #38
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Замечание: точная расшифровка NSC – ближайший SC (Nearest SC). *:D (SC пока не знаю).

13. Функции работы с миром Готики.

int Wld_DetectNpc(c_npc self,int instance,func aiState,int guild); - эта функция инициализирует глобальную переменную скриптов other, отличную от NSC self, где instance – производная от класса c_npc, которая должна быть найдена и проинициализирована (-1 – любая производная), guild – гильдия, членом которой должен быть искомый NSC (-1 – любая гильдия), aiState – функция AI состояния, в котором должен находится искомый NSC (NOFUNC – любое AI состояние). Функция возвращает 1 в случае успешного завершения (other инициализирован найденным NSC), 0 – неудача (other не определен).
int Wld_DetectNpcEx(c_npc self,int instance,func aiState,int guild,int detectPlayer); - выполняет все тоже, что и предыдущая функция, дополнительный параметр detectPlayer указывает, исключить ли игрока (ГГ) из поиска (0 – исключить, 1 – нет).
int Wld_DetectItem(c_npc self,int flags); - эта функция инициализирует глобальную переменную скриптов item предметом, возможно находящимся у npc self и имеющим флаг flags, возвращает 1 при успешном поиске и инициализации, иначе – 0.
int Wld_DetectPlayer(c_npc self); - возвращает 1, если ГГ есть npc self, иначе – 0.

Продолжение следует.
Ответить с цитированием
Старый 09.11.2004, 11:29   #39
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

void Wld_SetGuildAttitude(int guild1,int attitude,int guild2); - установить отношение между гильдиями, где guild1, guild2 – гильдии, между которыми устанавливается отношение, attitude – отношение между гильдиями (определены отношения ATT_HOSTILE, ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY).
int Wld_GetGuildAttitude(int guild1,int guild2); - получить отношение между гильдиями guild1 и guild2.
int Wld_IsMobAvailable(c_npc self,string schemeName); - проверяет, есть ли MOB с именем schemeName в окрестности 10 метров от npc self, возвращает TRUE, если MOB существует и свободен, иначе FALSE.
int Wld_GetMobState(c_npc self,string schemeName); - определяет состояние MOB с именем schemeName для npc self, возвращает состояние или -1, если MOB не найден.
int Wld_IsFPAvailable(c_npc self,string fpName); - проверяет, есть ли FP (Freepoint) с именем fpName в окрестности 20 метров от npc self, возвращает TRUE, если FP существует и свободна, иначе FALSE.
int Wld_IsNextFPAvailable(c_npc self,string fpName); - работает аналогично предыдущей функции, но проверится ближайшая точка, если fpName блокирована.

Продолжение следует.
Ответить с цитированием
Старый 09.11.2004, 19:31   #40
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию Re: Уроки скриптологии

2Vam:
ATT_HOSTILE, ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY
А нельзя ли поподробнее? Что конкретно значат эти отношения?
Отправить личное сообщение для Ответить с цитированием
Страница 1 из 8 1 2345678


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 15:42. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика