AGFC
Страница 1 из 8 1 2345678

AGFC (http://agfc.ru/index.php)
-   AGFC: Valley of Gothic (http://agfc.ru/forumdisplay.php?f=46)
-   -   М: Уроки скриптологии (http://agfc.ru/showthread.php?t=1098161614)

19.10.2004 08:53

М: Уроки скриптологии
 
Начинаем новую тему [glow=red,2,300]Уроки скриптологии[/glow]<br>Цель - изучение скриптов Готик.<br>Предлагается следующий вариант работы. Я выкладываю &quot;некую информацию&quot; по скриптам, проходит обсуждение, затем новая порция информации. Уроки, можно сказать, без учителя, так как я знаю не больше вашего, учиться предлагается друг у друга. Самое важное в изучении - диалог, чем больше будет вопросов и советов, тем быстрее будет и результат.<br><br>Весь рассматриваемый материал предлагаю разбить на темы: типы переменных, операторы, синтаксис скриптов, базовые функции и т.д. Названия и порядок тем будут рождаться по ходу дела.<br>На самом деле язык скриптов не очень сложный, очень похож на язык С с упрощениями, так что, кто знает С, тому не составит особого труда разобраться и в скриптах.<br><br>Тема первая: Типы переменных.<br>В скриптах используется всего несколько типов переменных:<br>VOID - &quot;пустой&quot; тип<br>INT - целое число<br>FLOAT - число с плавающей точкой<br>STRING - строка текста<br>CLASS - структура с внутренними типами и функциями<br>PROTOTYPE - обычно инициализация класса, но возможно и другое использование<br>INSTANCE - пока сказать нечего.<br>вот, кажется, и все типы.<br><br>Посмотрим, что у нас получится. *;) *:D

19.10.2004 22:31

Re: Уроки скриптологии
 
2TycoooN:<br>
Цитата:

Это ж самый распространённый тип в скриптах.
<br>Можешь прокомментировать два примера, желательно поподробнее.<br>INSTANCE self,other (C_NPC);<br>INSTANCE Demon (Mst_Default_Demon)<br>{<br> * * *Set_Demon_Visuals();<br> * * *Npc_SetToFistMode(self);<br>};<br><br>Просто в языке С такого типа нет, хотелось бы полностью выяснить его применение.<br><br>Есть еще один тип переменной, мною пропущенный, это<br>FUNC - просто функция<br>

20.10.2004 09:18

Re: Уроки скриптологии
 
По первой теме можно добавить следующее:<br>Типы переменных делятся на простые типы - INT, FLOAT, STRING и сложные (производные) типы - CLASS, PROTOTYPE, INSTANCE. Особняком стоит тип VOID, я нашел всего одно его применение - при объявлениии функции указывает, что функция не имеет возвращаемого значения.<br>К сложным типам мы еще вернемся позже.<br><br>Тема вторая: Операции над данными.<br><br>Существует несколько типов операций: арифметические, присваивания, отношения, логические, побитовые, над массивами, операции с членами классов.<br>В основном, все операции применимы только к простым типам, за исключением типа STRING.<br><br>1. Арифметические операции.<br>+ - простое сложение<br>- - простое вычитание<br>* - простое умножение<br>/ - простое деление (результат целая часть)<br>% - простое деление (результат остаток)<br>Здесь должно быть все понятно - без комментариев.<br><br>2. Операции присваивания.<br>= - простое присваивание<br>+= - сложение с приваиванием<br>-= - вычитание с присваиванием<br>*= - умножение с присваиванием<br>/= - деление с приваиванием (целая часть)<br>Здесь тоже все понятно - без комментариев.<br><br>3. Операции отношения.<br>&lt; - истина, если меньше<br>&gt; - истина, если больше<br>&lt;= - истина, если меньше или равно<br>&gt;= - истина, если больше или равно<br>== - истина, если равно<br>!= - истина, если не равно<br>Здесь тоже все понятно - без комментариев.<br><br>(продолжение следует)

20.10.2004 10:32

Re: Уроки скриптологии
 
4. Логические операции.<br>! - истина, если выражение ложно<br>две вертикальные палочки - истина, если истинно значение первого или второго операнда<br>&amp;&amp; - истина, если истинно значение первого и второго операнда<br>Операция ! является только префиксной операцией (пример !операнд)<br><br>5. Побитовые операции.<br>~ - инверсия операнда (префиксная операция)<br>&gt;&gt; - логический сдвиг вправо операнда1 на величину операнда2<br>&lt;&lt; - логический сдвиг влево операнда1 на величину операнда2<br>вертикальная палочка - побитовая операция ИЛИ<br>&amp; - побитовая операция И<br>^ - побитовая операция исключающее ИЛИ<br><br>6. Операции над массивами.<br>[] - получение или задание элемента массива по индексу (при инициализации массива задание его размерности)<br><br>7. Операции с членами классов.<br>. - обращение к элементу класса<br>Пример: аа.бб , где аа - имя класса, бб - имя переменной класса <br><br>8. Другие операции.<br>() - вызов функции с аргументами<br><br>Вот, пожалуй и все, что я знаю по этой теме. *:D<br><br>ЗЫ: Столкнулся с проблемой отображения в тексте вертикальных палочек (выглядит |). Может кто знает как ее решить?

20.10.2004 21:50

Re: Уроки скриптологии
 
2Killer-XXX:<br>
Цитата:

Что мы не услышим из твоих уст учения по &quot;функциям&quot;
<br>Функции будем разбирать позже, когда освоим правила построения скриптов. Я имел в виду, что мне известно по второй теме.<br><br>2TycoooN:<br>
Цитата:

Об INSTANCE self,other (C_NPC); единственное упоминание в скриптах - в файле classes.d, так что неважно что это такое
<br>Это очень даже важно, чтобы создавть новые типы INSTANCE надо знать правила их описания и происхождение, иначе можно только использовать готовые.<br>В моем понимании INSTANCE это производный тип от CLASS и (или) PROTOTYPE.<br>Об INSTANCE self,other (C_NPC); можно сказать, что<br>C_NPC - базовый класс, от которого произведены две INSTANCE с именами self и other<br>INSTANCE Demon (Mst_Default_Demon)<br>{<br> * * Set_Demon_Visuals();<br> * * Npc_SetToFistMode(self);<br>};<br>В этом примере от базового класса Mst_Default_Demon произведена INSTANCE c именем Demon, которая в дополнение к функциям класса (если они есть), добавляет две новые функции. Во второй функции параметром является INSTANCE self, объявленная ранее.<br>Декларацией второй функции будет строка FUNC VOID Npc_SetToFistMode(VAR C_NPC self);<br>Если сравнивать с языком С, то тип INSTANCE очень похож на тип ссылки, только ссылка не добавляет новых возможностей класса, а декларация INSTANCE похоже добавляет. Что можно добавить и(или) переопределить нуждается в дальнейшем изучении. Это самый сложный тип в скриптах.<br>

21.10.2004 08:58

Re: Уроки скриптологии
 
Тема третья: Операторы и идентификаторы типа.<br><br>1. Операторы.<br>Операторов в скриптах реализовано очень мало:<br>{ выражение(я) }; - оператор блок, после закрывающей фигурной скобки обязательна точка с запятой.<br>Блоки допускают вложения друг в друга.<br>IF (условие(я)) блок - оператор условного выполнения. Если условие истина, то выполняется блок, исли условие ложно, то блок пропускается. Возможна и другая реализация:<br>IF (условие(я)) блок ELSE блок - если условие истина, выполняется только блок IF, если условие ложь, то выполняется только блок ELSE. Возможно вложение операторов IF друг в друга.<br>RETURN - оператор выхода из функции, может возвращать значение.<br><br>2. Идентификаторы типа.<br>Существуют два идентификатора типа:<br>CONST - определяет тип константы<br>VAR - определяет тип переменной<br>Оба идентификатора типа применимы к следующим типам: INT, FLOAT, STRING, FUNC.<br>Идентификатор VAR может использоваться только внутри блока.<br><br>Конец темы.<br>

21.10.2004 11:34

Re: Уроки скриптологии
 
Познакомившись со всеми основными элементами языка скриптов переходим к новой теме:<br><br>Тема четвертая: Грамматика скриптов.<br><br>Текст скриптов состоит из файлов с расширением .D, файлы желательно располагать по определенным темам, согласно директорий, можно создавать любое кол-во файлов и директорий с произвольными именами.<br>Процесс компиляции начинается с файла с расширением .SRC, в нем записывается порядок, в котором будут компилироваться файлы .D. Допускается вложенность файлов .SRC.<br><br>Одно общее правило: прежде чем использовать какую-либо переменную, она должна быть декларирована. Декларация переменной с определенным именем во всех скриптах должна быть одна. Декларация (объявление) может быть с инициализацией или без нее.<br>Формат .D файла прост: любая декларация должна начинаться с одного из ключевых слов: CONST, VAR, FUNC, CLASS, INSTANCE, PROTOTYPE. Идентификатор VAR, как говорилось ранее, может быть использован только в блоке.<br>Компилятор одинаково распознает как заглавные буквы, так и строчные буквы, поэтому имена Аааа и аааа, это одно и тоже.<br>Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.<br><br>Вот, вроде и все о грамматике, можете задавать вопросы, постараюсь на все ответить. <br><br>ЗЫ: Хотелось бы получить ответ, устраивает ли материал в такой форме, может надо что-то изменить, жду предложений. *;)

PA 21.10.2004 13:20

Re: Уроки скриптологии
 
2Vam:<br>
Цитата:

Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.
<br><br>С комментариями не все так просто.<br>Фактически они остаются в Gothic.dat и в Ou.bin (Ou.csl).<br>Точнее не все комментарии - // - комментарии.<br><br>Изложение выше всяких похвал - все очень понятно.<br><br>

21.10.2004 13:32

Re: Уроки скриптологии
 
2Pa:<br>
Цитата:

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

22.10.2004 09:19

Re: Уроки скриптологии
 
Новых предложений нет, значит продолжим.<br><br>Дополнение к четвертой теме:<br>Существует несколько главных файлов .SRC, их имена изменять нельзя. Это в папке Content - gothic.src и fight.src, а в папке System - camera.src, menu.src, music.src, sfx.src, visualfx.src и particlefx.src - из них компилируются соответствующие *.dat файлы.<br>Дальше будем рассматривать базовые классы и функции. Все конкретные классы и функции будут относиться только к скриптам gothic.src. Остальные скрипты пока рассматривать не будем, может потом в этом появится необходимость.<br>Небольшое замечание: В скриптах кол-во локальных переменных в блоке и размерность любого массива ограничены числом 4095.<br><br>Тема пятая: Классы.<br><br>Структура класса должна быть всем понятна, (если нет, то спрашивайте), поэтому перейдем к рассмотрению базовых классов. Их всего девять - C_NPC, C_ITEM, C_MISSION, C_SPELL, C_INFO, C_SVM, C_FOCUS, C_ITEMREACT, C_GILVALUES. Из названий большинства из них, понятно, что они описывают.<br><br>Рассмотрим класс C_NPC, который описывает параметры всех npc в игре, включая ГГ.<br><br>CLASS C_NPC <br>{<br> *VAR INT * * *id; * * * * * * * * * * * * //идентификатор, у каждого npc свой<br> * * *//absolute ID des NPCs<br> *VAR STRING * name[5]; * * * * * * * * * *//массив из 5 имен<br> * * *//Namen des NPC<br> *VAR STRING * slot; * * * * * * * * *<br> *VAR INT * * *npcType; * * * * * * * * * *//тип<br> *VAR INT * * *flags; * * * * * * * * * * *//флаги ??? * * *<br> *VAR INT * * *attribute[ATR_INDEX_MAX]; * //атрибуты (8 максимум) * * * * * *<br> *VAR INT * * *protection[PROT_INDEX_MAX]; //защита (кол-во защит зависит от видов урона)<br> *VAR INT * * *damage[DAM_INDEX_MAX] ; * * //урон <br> *VAR INT * * *damagetype; * * * * * * * * //тип урона<br> *VAR INT * * *guild,level; * * * * * * * *//гильдия и уровень<br> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> *VAR FUNC * * mission[MAX_MISSIONS]; * * *//миссии (5 максимум)<br> *VAR INT * * *fight_tactic; * * * * * * * //тактика владения оружием<br> *VAR INT * * *weapon; * * * * * * * * * * //выбранное оружие<br> *VAR INT * * *voice; * * * * * * * * * * *//номер голоса<br> *VAR INT * * *voicePitch; * * * * * * * * //тон голоса<br> *VAR INT * * *bodymass; * * * * * * * * * //вес тела ??? * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> *VAR FUNC * * aily_routine; * * * * * * * //какая-то ежедневная функция ???<br> * * *//Tagesablauf<br> *VAR FUNC * * start_aistate; * * * * * * *//функция начального AI состояния ???<br> * * *//Zustandsgesteuert<br> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// ********************** * * * * * * * * * * * * * * *<br> * * *// Spawn * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> *VAR STRING * spawnPoint; * * * * * * * * //место рождения ??? <br> * * *//Beim Tod, wo respawnen ?<br> *VAR INT * * *spawnDelay; * * * * * * * * // ???<br> * * *//Mit Delay in (Echtzeit)-Sekunden<br> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> * * *// SENSES * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> *VAR INT * * *senses; * * * * * * * * * * //чувствительность ???<br> * * *//Sinne<br> *VAR INT * * *senses_range; * * * * * * * //диапазон чувствительности<br> * * *//Reichweite der Sinne in cm<br> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> * * *// Feel free to use * * * * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> *VAR INT * * *aivar[50]; * * * * * * * * *//массив AI переменных * * * * * * * * * * * * * * * * * * *<br> *VAR STRING * wp; * * * * * * * * * * * * //точка привязки<br> * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> * * *// Experience dependant * * * * * * * * * * * * * * * * * *<br> * * *// ********************** * * * * * * * * * * * * * * *<br> *VAR INT * * *exp; * * * * * * * * * * * *//текущая экспа<br> * * *//EXerience Points<br> *VAR INT * * *exp_next; * * * * * * * * * //сколько нужно экспы до следующего уровня<br> * * *//EXerience Points needed to advance to next level<br> *VAR INT * * *lp; * * * * * * * * * * * * //кол-во очков обучения<br> * * *//Learn Points * * * * * *<br>};<br><br>Примечание: Свои комментарии я буду располагать в строке с переменной, а комментарии на немецком языке (если они есть), в следующей строке. Если я буду в чем-то ошибаться, то поправляйте, если немецкий комментарий более подробно описывает переменную, то его желательно перевести (может уже у кого-то есть переведенные или кто-нибудь сможет переводить по ходу дела). Я немецкий абсолютно не понимаю (он меня раздражает *&gt;:(). Если про переменную ничего не сказано, значит мне пока про нее сказать нечего.<br>То, что помечается ??? требует дополнительных комментариев.<br><br>ЗЫ: Мучился, мучился, но так и не понял, как правильно форматировать текст? *::)

22.10.2004 23:26

Re: Уроки скриптологии
 
Вашему вниманию предлагается следующий класс C_ITEM, описывающий все предметы в игре.<br><br>CLASS C_Item<br>{<br> * * //F№r alle Items<br> VAR INT * * id; * * * * * * * * * * //идентификатор предмета<br> VAR STRING *name,nameID; * * * * * *//имя, имя ID<br> VAR INT * * hp,hp_max; * * * * * * *// ???<br><br> VAR INT * * mainflag,flags; * * * * //категория предмета, ???<br> * * //Hauptflag und weitere Flags<br> VAR INT * * weight,value; * * * * * //вес, ???<br><br> * * //F№r Waffen<br> VAR INT * * damageType; * * * * * * //тип урона<br> * * //Welche Schadensarten<br> VAR INT * * damageTotal; * * * * * *//суммарный урон<br> VAR INT * * damage[DAM_INDEX_MAX]; *//урон по типам<br><br> * * //F№r R№stungen<br> VAR INT * * wear; * * * * * * * * * //на какое место одевать<br> VAR INT * * protection[PROT_INDEX_MAX]; //защита по типам<br><br> * * //F№r Nahrung<br> VAR INT * * nutrition; * * * * * * *// ???<br> * * //HP-Steigerung bei Nahrung<br><br> * * //BenЎtigte Attribute zum Benutzen des Items<br> VAR INT * * cond_atr[3]; * * * * * *//атрибут, требуемый для примениения<br> VAR INT * * cond_value[3]; * * * * *//значение требуемого атрибута<br><br> * * //Attribute, die bei anlegen des Items verфndert werden<br> VAR INT * * change_atr[3]; * * * * *// ???<br> VAR INT * * change_value[3]; * * * *// ???<br><br> * * //Parserfunktionen<br> VAR FUNC * *magic; * * * * * * * * *// ???<br> * * //Parserfunktion zum &quot;Magie Header&quot;<br> VAR FUNC * *on_equip; * * * * * * * //функция одевания<br> * * //Parserfunktion, wenn Item equipped wird.<br> VAR FUNC * *on_unequip; * * * * * * //функция снятия<br> * * //Parserfunktion, wenn Item unequipped wird.<br> VAR FUNC * *on_state[4]; * * * * * *//пользовательские функции<br><br> * * //Besitzer<br> VAR FUNC * *owner; * * * * * * * * *//кому принадлежит<br> * * //Besitzer : Instanz-Name<br> VAR INT * * ownerGuild; * * * * * * //гильдия - собственник<br> * * //Besitzer : Gilde<br> VAR INT * * disguiseGuild; * * * * *// ???<br> * * //Zur Schau getragene Gilde durch Verkleidung<br><br> * * //Die 3DS-Datei<br> VAR STRING *visual; * * * * * * * * //файл текстур<br><br> * * //Verфnderung des NSC-Meshes beim Anlegen dieses Gegenstandes<br> VAR STRING *visual_change; * * * * *//какой-то .asc файл ???<br> * * //ASC - File<br> VAR INT * * visual_skin; * * * * * *// ???<br><br> VAR STRING *scemeName; * * * * * * *// ???<br> VAR INT * * material; * * * * * * * //материал предмета<br> * * //VAR STRING *pfx;<br> * * //Magic Weapon PFX<br> VAR INT * * munition; * * * * * * * //оружейное снаряжение (стрелы, болты)<br> * * //Instance of Munition<br><br> var int * * spell; * * * * * * * * *//тип заклинания<br> var int * * range; * * * * * * * * *// ???<br><br> var int * * mag_circle; * * * * * * //круг магии<br><br> VAR STRING *description; * * * * * *//имя описания предмета<br> VAR STRING *text[ITM_TEXT_MAX]; * * //текст описания (мах 6 строк)<br> VAR INT * * count[ITM_TEXT_MAX]; * *//числовые значения для описания<br>};<br><br><br>Ребята, получается монолог вместо диалога, так мы много не изучим. Может стоит закрыть тему? *:(

23.10.2004 01:04

Re: Уроки скриптологии
 
Цитата:

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

VAR INT * * weight,value; * * * * * //вес, ???
<br>Возможно, стоимость.<br><br>
Цитата:

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

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

var int * * range; * * * * * * * * *// ???
<br>Это радиус поражения.

23.10.2004 05:12

Re: Уроки скриптологии
 
Цитата:

AR INT &nbsp; &nbsp; change_atr[3]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ???<br>VAR INT &nbsp; &nbsp; change_value[3]; &nbsp; &nbsp; &nbsp; &nbsp;// ???<br>Изменение определенного атрибута.<br>На сколько изменится атрибут.<br>В этом не уверен, но можно поэксперементировать сегодня.<br>Например, при &quot;одевании&quot; какого-нить меча сила изменится на определенное количество.
<br><br>Поэксперементировал... Я ошибся... В таком случае, понятия не имею, к чему это...

23.10.2004 06:12

Re: Уроки скриптологии
 
А вот и не ошибся! *;D<br>Вот пример скрипта обычного меча с добавлением двух строк. При &quot;одевании&quot; его сила увеличивается на 50 единиц.<br><br>INSTANCE ItMW_Addon_Knife01 (C_Item)<br>{ * * *<br> * * *name ** * * * * * * * * * * *= * * *&quot;Wolfsmesser&quot;; *<br><br> * * *mainflag ** * * * * * * * *= * * *ITEM_KAT_NF;<br> * * *flags ** * * * * * * * * * * *= * * *ITEM_SWD; * * *<br> * * *material ** * * * * * * * *= * * *MAT_METAL;<br><br> * * *value ** * * * * * * * * * * *= * * *Value_Wolfsmesser;<br><br> * * *damageTotal * * * * * * *= ** * *Damage_Wolfsmesser;<br> * * *damagetype ** * * * * * * * *= * * *DAM_EDGE;<br> * * *range * * * * * * * * * * *= * * * *Range_Wolfsmesser; * * * * * *<br> * * *<br> * * *on_equip * * * * * * * * *= * * *Equip_1H_03;<br> * * *on_unequip * * * * * * * * *= * * *UnEquip_1H_03;<br> * * *<br> * * *cond_atr[2] * ** * * * * *= * * *ATR_STRENGTH;<br> * * *cond_value[2] * * * * * * *= * * *Condition_Wolfsmesser;<br> * * *visual ** * * * * * * * * * * *= * * *&quot;ItMw_012_1h_Knife_02.3DS&quot;;<br><br> * *change_atr[2] * * * * * *= ** * *ATR_STRENGTH;<br> * *change_value[2] * * * * * *= * * *50;<br><br> * * *description * * * * * * * * *= * name;<br> * * *<br> * * *TEXT[2] * * * * * * * * * * * *= NAME_Damage; * * * * * * * * * * * * * * *COUNT[2] * * *= damageTotal;<br> * * *TEXT[3] ** * * * * * * * *= NAME_Str_needed; * * * * * * * * * * * *COUNT[3] * * *= cond_value[2];<br> * * *TEXT[4] * * * * * * * * * * * *= NAME_ADDON_BONUS_1H; * * * * * * * * *COUNT[4] * * *= Waffenbonus_03;<br> * * *TEXT[5] * * * * * * * * * * * *= NAME_Value; * * * * * * * * * * * * * * *COUNT[5] * * *= value;<br><br>Хотя добиться того же самого эффекта можно и по-другому.

Irwin1138 23.10.2004 13:40

Re: Уроки скриптологии
 
Цитата:

VAR STRING * name[5]; * * * * * * * * * *//массив из 5 имен
<br>Скорее всего просто имя 8)<br>
Цитата:

VAR FUNC * * aily_routine; * * * * * * * //какая-то ежедневная функция ???
<br>Это распорядок дня. У каждого НПС свой.<br>
Цитата:

VAR STRING * spawnPoint; * * * * * * * * //место рождения ???
<br>Место возрождения НПС в случае убиения оного.<br>
Цитата:

VAR INT * * *spawnDelay; * * * * * * * * // ???
<br>Реальное время в секундах проходящее между убиением и возрождением.<br>
Цитата:

VAR INT * * *senses; * * * * * * * * * * //чувствительность ???
<br>Чувства.<br>
Цитата:

VAR STRING *visual; * * * * * * * * //файл текстур
<br>Это 3DS файл с моделькой предмета.<br>
Цитата:

VAR STRING *visual_change; * * * * *//какой-то .asc файл ???
<br>Это связано с анимацией. .ASC файл получается при экспорте анимации из 3DS Max'a с помощью специального плагина. После запуска Г, игра конвертирует и 3DS и ASC в свой личный формат. Скорее всего у лука и арбалета есть такая фишка.<br>
Цитата:

var int * * range; * * * * * * * * *// ???
<br>Дальность заклинания.<br><br>ОФФТОП<br>2Vam: <br>Насчет конвертера анимации Г. Проблема в том что есть 4 типа анимации которые можно выбрать при экспорте, и они конвертируются х знает во что. То есть по идее они конвертятся каждый в свой, вот только поди разберись что во что конвертится. На Rpgdot есть тренировки связанные с анимацией. Вот здесь http://gothic.rpgdot.com/index.php?h...&amp;infoID=83<br>КОНЕЦ ОФФТОПА<br><br>ЕЩЕ ОДИН ОФФТОП (ДА ПРОСТЯТ МЕНЯ МОДЕРАТОРЫ)<br>Как сделать так, чтобы к какому-нить слову была привязяна ссылка? То есть вместо того чтобы выводить всю ссылку, выводится только слова, при клике на него выполняется ссылка. Обьясните новичку 8)<br>КОНЕЦ ОФФТОПА

23.10.2004 15:54

Re: Уроки скриптологии
 
2Владимир Ильич:<br>
Цитата:

Слушай, лучше надыбай мне исходники движка. Я хочу шейдеры в Готику запихнуть. Помочь не хочешь?
<br>Исходников, к сожалению, у меня нет, сам восстанавливаю из экзешника. А это требует уйму времени, так что извини! *:)<br><br>2Всем:<br>Вот это уже неплохо, сколько всего сразу выяснилось, осталось немного обобщить.<br>2finch: Насчет изменения атрибутов при владении предметом, очень хорошо подмечено.<br>2Irwin1138: Очень правильная трактовка spawn параметров npc.<br>От себя могу добавить, что<br>
Цитата:

VAR INT * * *senses; * * * * * * * //чувствительность ???
<br>
Цитата:

VAR INT * * *senses_range; * * //диапазон чувствительности
<br>трактуются как чувствительность на запах, звук, визуальная и расстояние, на котором npc может что-то заметить, услышать или унюхать.

23.10.2004 18:27

Re: Уроки скриптологии
 
Несколько дополнений по классу C_ITEM<br> VAR INT * * nutrition; * * //увеличение HP при употреблении<br> VAR INT * * visual_skin; * //номер mesh-текстуры<br> VAR STRING *scemeName; * * //внутреннее имя предмета в скриптах<br><br>Класс C_INFO используется для создания различных диалогов<br><br>CLASS C_INFO<br>{<br> *VAR INT * * npc; * * * * *//id npc, участвующего в диалоге<br> *VAR INT * * nr; * * * * * // ???<br> *VAR INT * * important; * *//кто начинает диалог (0-ты, 1-с тобой)<br> * * *//Wichtig Flag -&gt; ansprechen<br> *VAR FUNC * *condition; * *//функция условий диалога<br> *VAR FUNC * *information; *//функция самого диалога<br> *VAR STRING *description; *//строка описания<br> *VAR INT * * trade; * * * *//возможность торговли (1-да, 0-нет)<br> *VAR INT * * permanent; * *//постоянность диалога (1-постоянный, 0-однократный)<br>};<br><br>Классы C_MISSION, C_ITEMREACT в скриптах не используются, мне о них сказать пока нечего.<br>Класс C_FOCUS используется для задания фокуса камеры при различных ситуациях, предлагаю его пока не рассматривать. :D

23.10.2004 20:43

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

25.10.2004 10:02

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

26.10.2004 10:08

Re: Уроки скриптологии
 
Тема шестая: Функции.<br><br>Несколько общих замечаний:<br>1. Функции могут возвращать значения только этих типов - VOID, INT, FLOAT, STRING, INSTANCE.<br>2. Рассматривать будем пока только базовые функции, которые реализованы в екзешнике.<br>3. Большинство базовых функций описано в файле externals.d, но в нем есть ошибки (этот файл приведен только для справки, он не компилируется), о них буду говорить по мере разбора функций, и отмечать значком ****.<br>4. Идентификаторы FUNC (при объявлении функции) и VAR (как идентификатор аргументов) для простоты приводить не буду.<br><br>1. Функции вывода текста.<br><br>VOID Print(STRING s0); - выводит на экран строку текста s0, как OutputUnits текст (аналогично выводу из OU файла).<br>VOID PrintMulti(STRING s0,STRING s1,STRING s2,STRING s3,STRING s4); - выводит текст на экран, объединяя строки параметров s0-s4 в одну строку.<br>INT PrintScreen(STRING msg,INT posx,INT posy,STRING font,INT timeSec); - выводит на экран строку текста msg (имя шрифта – font) с координатами posx, posy (диапазон от 0 до 99% размера экрана, -1 означает вывод по центру соответствующей оси экрана) на время timeSec (в секундах). *Возвращаемое значение всегда = 0. ***<br>VOID PrintDebug(STRING s); - выводит текст строки s через zSpy или в лог. файл, работает только в отладочном режиме (включается (Alt+D))<br><br>Продолжение следует. *;)<br>

26.10.2004 13:24

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

27.10.2004 14:03

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

27.10.2004 15:22

Re: Уроки скриптологии
 
Кто-нибудь знает расшифровку общеупотребимых сокращений в скриптах AI, VOB, SC, NSC? (Желательно на английском!) &nbsp;;)

28.10.2004 08:18

Re: Уроки скриптологии
 
3. Функции работы со звуком.<br><br>void Snd_Play(string s0); - воспроизвести звуковой файл с именем s0. <br>void Snd_Play3D(c_npc n0,string s1); - воспроизвести звуковой файл с именем s0 для npc n0. <br>int Snd_IsSourceNpc(c_npc self); - проверить, является ли npc self источником звука (return &gt; 0) и установить ссылку other на этого npc.<br>int Snd_IsSourceItem(c_npc self); - проверить, является ли у npc self предмет источником звука (return &gt; 0) и установить ссылку item на этот предмет<br>int Snd_GetDistToSource(c_npc self); - выдать расстояние в сантиметрах до источника звука от npc self.<br>

Killer-XXX 29.10.2004 00:56

Re: Уроки скриптологии
 
2Vam:<br>Так держать! :)<br><br>
Цитата:

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

system control - системное управление
, вот только какая система управления...<br><br>Думаю, хоть что нибудь, да угадал :)

29.10.2004 10:03

Re: Уроки скриптологии
 
2Killer-XXX:<br>2DimaD:<br>Возможно вы и правы, разберемся по ходу дела. Для VOB у меня тоже есть расшифровка - visual object.<br>Есть еще одно сокращение - MOB, каковы его толкования?<br><br>4. Вспомогательные функции.<br><br>int Hlp_Random(int n0); - сгенерить случайное целое число в диапазоне от 0 до n0-1.<br>int Hlp_StrCmp(string s1,string s2); - сравнивает две строки s1 и s2, возвращает true при равенстве строк или false при неравенстве.<br>int Hlp_IsValidNpc(c_npc self); - если NSC ссылка на npc self существует, то возвращает true, иначе – false.<br>int Hlp_IsValidItem(c_itm item); - если ссылка на предмет item существует, то возвращает true, иначе – false.<br>int Hlp_IsItem(c_item item,int instanceName); - проверяет принадлежность предмета item к соответствующему типу instanceName, возвращает true при соответствии, иначе – false.<br>c_npc Hlp_GetNpc(int instanceName); - возвращает ссылку на npc, принадлежащему к типу *instanceName.<br>int Hlp_GetInstanceID(c_npc npc); - получить ID номер npc по ссылке на класс npc.<br>int Hlp_GetInstanceID(c_item item); *- получить ID номер предмета по ссылке на класс item.<br><br>

31.10.2004 10:16

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

01.11.2004 11:05

Re: Уроки скриптологии
 
void Doc_Open(string picName); - открывает документ с именем picName, как рисунок на заднем плане (в скриптах не используется).<br>void Doc_Font(string fontName); - задает для документа шрифт fontName (в скриптах не используется).<br>void Doc_Print(string text); - выводит текст text документа на экран (в скриптах не используется).<br>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 – соответственно коодинаты пикселей углов карты (в скриптах не используется).<br>

02.11.2004 10:15

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

02.11.2004 12:40

Re: Уроки скриптологии
 
7. Функции работы с миссиями.<br><br>void Mis_SetStatus(int missionName,int newStatus); - установить статус newStatus миссии *missionName (предопределены следующие статусы RUNNING, SUCCESS, FAILED и т.д.)<br>int Mis_GetStatus(int missionName); - получить статус миссии missionName.<br>int Mis_OnTime(int missionName); - проверка миссии, возвращает true, если миссия активна, т.е. не завершена. Примечание: данная функция в экзешнике реализована неверно, она ничего не возвращает (лучше ее не использовать).<br>void Mis_AddMissionEntry(c_mission miss,string name); - добавить в список миссий новую миссию miss под именем name. ***<br>void Mis_RemoveMission(c_mission miss); - удалить из списка миссий миссию miss. ***<br>

03.11.2004 09:43

Re: Уроки скриптологии
 
8. Функции работы с инвентарем.<br><br>void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.<br>void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.<br>void EquipItem(c_npc n0,int n1); - экипировать npc n0 предметом с ID n1.<br>void Mob_CreateItems(string mobName,int itemInstance,int amount); - создает в контейнере с именем mobName (например сундук) предметы с ID itemInstance количеством amount.<br>int Mob_HasItems(string mobName,int itemInstance); - получить количество предметов с ID itemInstance, находящихся в контейнере с именем mobName.<br>

04.11.2004 11:03

Re: Уроки скриптологии
 
2Всем:<br>Спасибо за отзывчивость, но критика тоже бы не помешала.<br>Всем слушателям (читателям) по *:pivo:<br>Продолжаем уроки.<br><br>9. Функции анимации.<br><br>void Mdl_ApplyOverlayMds(c_npc n0,string s1); - запустить файл анимации s1 с расширением mds для npc n0.<br>void Mdl_RemoveOverlayMDS(c_npc self,string overlayName); - отключить от npc self файл анимации overlayName.<br>void Mdl_ApplyOverlayMDSTimed(c_npc self,string overlayname,int timeTicks); - запустить файл анимации overlayname для npc self на время timeTicks. ***<br>void Mdl_ApplyRandomAni(c_npc n0,string s1,string s2); - запустить случайные анимации s1 для npc n0 в последовательности анимационных состояний s2.<br>void Mdl_ApplyRandomAniFreq(c_npc n0,string s1,float f2); - устанавливает частоту выборки f2 случайных анимационных состояний s1 для npc n0.<br>void Mdl_StartFaceAni(c_npc self,string name,float intensity,float holdTime); - запускает файл name анимации лица для npc self с интенсивностью intensity (в %, 1 – 100%) и временем удержания holdTime (1 – постоянно).<br>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) от нижней до верхней границы.<br><br>Продолжение следует.

04.11.2004 16:27

Re: Уроки скриптологии
 
Внимание: возможен потенциальный глюк!<br><br>В посте #18 я писал, что макс. размерность массива = 4095, это не так. Компилятор скриптов в GothicMod.exe поддерживает массивы с размерностью до 255 и не больше. Модмейкеры - будьте осторожны! *;)

05.11.2004 10:57

Re: Уроки скриптологии
 
продолжение:<br><br>void Mdl_SetVisual(c_npc self,string fileMds); - задать для npc self файл изображения с именем fileMds (формат MDS). ***<br>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 – брони нет). ***<br>void Mdl_SetModelScale(c_npc self,float x,float y,float z); - установить масштаб mesh изображения модели npc self по координатам x,y,z в % (1 - 100%).<br>void Mdl_SetModelFatness(c_npc self,float fatness); - установить жирность mesh изображения модели npc self в % (1 - 100%). Может кто-нибудь пояснить, что это за функция?<br><br>Просьба: если кто знает, скажите, что такое mesh?<br>

05.11.2004 18:22

Re: Уроки скриптологии
 
Благодарю за понимание, продолжим...<br><br>10. Функции распорядка дня.<br><br>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 – имя точки, в которой выполняется функция.<br>void TA(c_npc self,int start_h,int stop_h,func state,string waypoint); - выполняет все то, что и предыдущая функция, только без привязки к минутам.<br>void TA_CS(c_npc self,string csName,string roleName); - функция, выполняемая последней в списке функций распорядка дня для npc self, где csName – имя файла CS (Cutscene), roleName – роль NSC, которая должна выполняться. (частично не понял)<br>void TA_BeginOverlay(c_npc self); - начать выполнять заявленный распорядок дня для npc self.<br>void TA_EndOverlay(c_npc self); - закончить выполнять заявленный распорядок дня для npc self.<br>void TA_RemoveOverlay(c_npc self); - удалить заявленный распорядок дня для npc self.<br>

06.11.2004 13:26

Re: Уроки скриптологии
 
11. Функции работы с диалогами.<br><br>int InfoManager_HasFinished(); - показывает, завершен ли диалог (возвращает 0 во время диалога и 1 после окончания диалога). ***<br>void Info_AddChoice(c_info menu,string text,func fn); - добавляет в меню диалога menu строку выбора действия *text, fn – функция, которая активируется при выборе данного пункта меню. ***<br>void Info_ClearChoices(c_info menu); - удалить тему диалога menu. ***<br>

07.11.2004 10:23

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

08.11.2004 12:20

Re: Уроки скриптологии
 
Замечание: точная расшифровка NSC – ближайший SC (Nearest SC). *:D (SC пока не знаю).<br><br>13. Функции работы с миром Готики.<br><br>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 не определен).<br>int Wld_DetectNpcEx(c_npc self,int instance,func aiState,int guild,int detectPlayer); - выполняет все тоже, что и предыдущая функция, дополнительный параметр detectPlayer указывает, исключить ли игрока (ГГ) из поиска (0 – исключить, 1 – нет).<br>int Wld_DetectItem(c_npc self,int flags); - эта функция инициализирует глобальную переменную скриптов item предметом, возможно находящимся у npc self и имеющим флаг flags, возвращает 1 при успешном поиске и инициализации, иначе – 0.<br>int Wld_DetectPlayer(c_npc self); - возвращает 1, если ГГ есть npc self, иначе – 0.<br><br>Продолжение следует.<br>

09.11.2004 11:29

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

TycoooN 09.11.2004 19:31

Re: Уроки скриптологии
 
2Vam: <br>
Цитата:

ATT_HOSTILE, ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY
<br>А нельзя ли поподробнее? Что конкретно значат эти отношения?


Текущее время: 21:33. Часовой пояс GMT +4.
Страница 1 из 8 1 2345678

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

AGFC: Valley of Gothic © 2004-2022