|
|
19.10.2004, 09:53
|
#1
|
|
М: Уроки скриптологии
Начинаем новую тему [glow=red,2,300]Уроки скриптологии[/glow] Цель - изучение скриптов Готик. Предлагается следующий вариант работы. Я выкладываю "некую информацию" по скриптам, проходит обсуждение, затем новая порция информации. Уроки, можно сказать, без учителя, так как я знаю не больше вашего, учиться предлагается друг у друга. Самое важное в изучении - диалог, чем больше будет вопросов и советов, тем быстрее будет и результат.
Весь рассматриваемый материал предлагаю разбить на темы: типы переменных, операторы, синтаксис скриптов, базовые функции и т.д. Названия и порядок тем будут рождаться по ходу дела. На самом деле язык скриптов не очень сложный, очень похож на язык С с упрощениями, так что, кто знает С, тому не составит особого труда разобраться и в скриптах.
Тема первая: Типы переменных. В скриптах используется всего несколько типов переменных: VOID - "пустой" тип INT - целое число FLOAT - число с плавающей точкой STRING - строка текста CLASS - структура с внутренними типами и функциями PROTOTYPE - обычно инициализация класса, но возможно и другое использование INSTANCE - пока сказать нечего. вот, кажется, и все типы.
Посмотрим, что у нас получится. *;) *:D
|
|
|
19.10.2004, 23:31
|
#2
|
|
Re: Уроки скриптологии
2TycoooN:
Это ж самый распространённый тип в скриптах.
|
Можешь прокомментировать два примера, желательно поподробнее. INSTANCE self,other (C_NPC); INSTANCE Demon (Mst_Default_Demon) { * * *Set_Demon_Visuals(); * * *Npc_SetToFistMode(self); }; Просто в языке С такого типа нет, хотелось бы полностью выяснить его применение. Есть еще один тип переменной, мною пропущенный, это FUNC - просто функция
|
|
|
20.10.2004, 10:18
|
#3
|
|
Re: Уроки скриптологии
По первой теме можно добавить следующее: Типы переменных делятся на простые типы - INT, FLOAT, STRING и сложные (производные) типы - CLASS, PROTOTYPE, INSTANCE. Особняком стоит тип VOID, я нашел всего одно его применение - при объявлениии функции указывает, что функция не имеет возвращаемого значения. К сложным типам мы еще вернемся позже.
Тема вторая: Операции над данными.
Существует несколько типов операций: арифметические, присваивания, отношения, логические, побитовые, над массивами, операции с членами классов. В основном, все операции применимы только к простым типам, за исключением типа STRING.
1. Арифметические операции. + - простое сложение - - простое вычитание * - простое умножение / - простое деление (результат целая часть) % - простое деление (результат остаток) Здесь должно быть все понятно - без комментариев.
2. Операции присваивания. = - простое присваивание += - сложение с приваиванием -= - вычитание с присваиванием *= - умножение с присваиванием /= - деление с приваиванием (целая часть) Здесь тоже все понятно - без комментариев.
3. Операции отношения. < - истина, если меньше > - истина, если больше <= - истина, если меньше или равно >= - истина, если больше или равно == - истина, если равно != - истина, если не равно Здесь тоже все понятно - без комментариев.
(продолжение следует)
|
|
|
20.10.2004, 22:50
|
#5
|
|
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, 09:58
|
#6
|
|
Re: Уроки скриптологии
Тема третья: Операторы и идентификаторы типа.
1. Операторы. Операторов в скриптах реализовано очень мало: { выражение(я) }; - оператор блок, после закрывающей фигурной скобки обязательна точка с запятой. Блоки допускают вложения друг в друга. IF (условие(я)) блок - оператор условного выполнения. Если условие истина, то выполняется блок, исли условие ложно, то блок пропускается. Возможна и другая реализация: IF (условие(я)) блок ELSE блок - если условие истина, выполняется только блок IF, если условие ложь, то выполняется только блок ELSE. Возможно вложение операторов IF друг в друга. RETURN - оператор выхода из функции, может возвращать значение.
2. Идентификаторы типа. Существуют два идентификатора типа: CONST - определяет тип константы VAR - определяет тип переменной Оба идентификатора типа применимы к следующим типам: INT, FLOAT, STRING, FUNC. Идентификатор VAR может использоваться только внутри блока.
Конец темы.
|
|
|
21.10.2004, 12:34
|
#7
|
|
Re: Уроки скриптологии
Познакомившись со всеми основными элементами языка скриптов переходим к новой теме:
Тема четвертая: Грамматика скриптов.
Текст скриптов состоит из файлов с расширением .D, файлы желательно располагать по определенным темам, согласно директорий, можно создавать любое кол-во файлов и директорий с произвольными именами. Процесс компиляции начинается с файла с расширением .SRC, в нем записывается порядок, в котором будут компилироваться файлы .D. Допускается вложенность файлов .SRC.
Одно общее правило: прежде чем использовать какую-либо переменную, она должна быть декларирована. Декларация переменной с определенным именем во всех скриптах должна быть одна. Декларация (объявление) может быть с инициализацией или без нее. Формат .D файла прост: любая декларация должна начинаться с одного из ключевых слов: CONST, VAR, FUNC, CLASS, INSTANCE, PROTOTYPE. Идентификатор VAR, как говорилось ранее, может быть использован только в блоке. Компилятор одинаково распознает как заглавные буквы, так и строчные буквы, поэтому имена Аааа и аааа, это одно и тоже. Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.
Вот, вроде и все о грамматике, можете задавать вопросы, постараюсь на все ответить.
ЗЫ: Хотелось бы получить ответ, устраивает ли материал в такой форме, может надо что-то изменить, жду предложений. *;)
|
|
|
21.10.2004, 14:20
|
#8
|
|
|
|
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
|
|
|
|
Re: Уроки скриптологии
2Vam:
Комментарии могут быть любые и в любом месте файла, они начинаются с // и до конца строки, или выделяются конструкцией /* комментарий */ и могуть включать несколько строк.
|
С комментариями не все так просто. Фактически они остаются в Gothic.dat и в Ou.bin (Ou.csl). Точнее не все комментарии - // - комментарии. Изложение выше всяких похвал - все очень понятно.
|
|
|
21.10.2004, 14:32
|
#9
|
|
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, 10:19
|
#10
|
|
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 * * * * * * };
Примечание: Свои комментарии я буду располагать в строке с переменной, а комментарии на немецком языке (если они есть), в следующей строке. Если я буду в чем-то ошибаться, то поправляйте, если немецкий комментарий более подробно описывает переменную, то его желательно перевести (может уже у кого-то есть переведенные или кто-нибудь сможет переводить по ходу дела). Я немецкий абсолютно не понимаю (он меня раздражает *>:(). Если про переменную ничего не сказано, значит мне пока про нее сказать нечего. То, что помечается ??? требует дополнительных комментариев.
ЗЫ: Мучился, мучился, но так и не понял, как правильно форматировать текст? *::)
|
|
|
23.10.2004, 00:26
|
#11
|
|
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, 02:04
|
#12
|
|
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, 06:12
|
#13
|
|
Re: Уроки скриптологии
AR INT change_atr[3]; // ??? VAR INT change_value[3]; // ??? Изменение определенного атрибута. На сколько изменится атрибут. В этом не уверен, но можно поэксперементировать сегодня. Например, при "одевании" какого-нить меча сила изменится на определенное количество.
|
Поэксперементировал... Я ошибся... В таком случае, понятия не имею, к чему это...
|
|
|
23.10.2004, 14:40
|
#15
|
|
|
|
|
Регистрация: 22.07.2004
Сообщений: 74
|
|
|
|
|
|
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, 16:54
|
#16
|
|
Re: Уроки скриптологии
2Владимир Ильич:
Слушай, лучше надыбай мне исходники движка. Я хочу шейдеры в Готику запихнуть. Помочь не хочешь?
|
Исходников, к сожалению, у меня нет, сам восстанавливаю из экзешника. А это требует уйму времени, так что извини! *:) 2Всем:Вот это уже неплохо, сколько всего сразу выяснилось, осталось немного обобщить. 2finch: Насчет изменения атрибутов при владении предметом, очень хорошо подмечено. 2Irwin1138: Очень правильная трактовка spawn параметров npc. От себя могу добавить, что
VAR INT * * *senses; * * * * * * * //чувствительность ???
|
VAR INT * * *senses_range; * * //диапазон чувствительности
|
трактуются как чувствительность на запах, звук, визуальная и расстояние, на котором npc может что-то заметить, услышать или унюхать.
|
|
|
26.10.2004, 11:08
|
#20
|
|
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))
Продолжение следует. *;)
|
|
|
29.10.2004, 01:56
|
#25
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
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, 11:03
|
#26
|
|
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
|
|
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
|
|
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 – соответственно коодинаты пикселей углов карты (в скриптах не используется).
|
|
|
04.11.2004, 11:03
|
#32
|
|
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) от нижней до верхней границы.
Продолжение следует.
|
|
|
05.11.2004, 10:57
|
#34
|
|
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
|
|
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.
|
|
|
07.11.2004, 10:23
|
#37
|
|
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
|
|
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
|
|
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
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Уроки скриптологии
2Vam:
ATT_HOSTILE, ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY
|
А нельзя ли поподробнее? Что конкретно значат эти отношения?
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 23:19. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|