Полная Версия: Редактирование скриптов
Страницы: 1, 2
wifyxf
Скачал UltraEdition, как посоветовали в докуметации теамХ для открытия и написания, редактирования скриптов!! Но он открылся в каком-то нечитаемом тексте — похожим 16-ричный код и еще какие-то точки с символами!?!!!!!

Что-то не хватает!?! можете подсказать, начсет текстового редактора
Nordan
Исходники скриптов — это обычные текстовые файлы, так что можешь использовать любой текстовый редактор, который тебе больше нравится. Главное чтоб расширение у файлов было *.ssl.

А вообще, я бы тебе посоветовал использовать специальные программы для написания скриптов к Ф2. В них есть все для работы, в том числе и компилятор, так что не нужно возиться с батниками. Лично я использую FSE (Fallout Script Editor), очень удобный в работе. Есть еще FGECK, с помощью него можно легко составлять скрипты, т.к. все команды вынесены в отдельное место, остается только найти нужную и перетащить.

QUOTE
Но он открылся в каком-то нечитаемом тексте

По ходу, ты открываешь не исходники, а сами скрипты. Файлы *.int — это готовые, скомпилированные скрипты; *.ssl — исходники скриптов, т.е. то что нужно редактировать, а только потом компилировать в *.int.
wifyxf
QUOTE
Исходники скриптов — это обычные текстовые файлы, так что можешь использовать любой текстовый редактор, который тебе больше нравится. Главное чтоб расширение у файлов было *.ssl.

А вообще, я бы тебе посоветовал использовать специальные программы для написания скриптов к Ф2. В них есть все для работы, в том числе и компилятор, так что не нужно возиться с батниками. Лично я использую FSE (Fallout Script Editor), очень удобный в работе. Есть еще FGECK, с помощью него можно легко составлять скрипты, т.к. все команды вынесены в отдельное место, остается только найти нужную и перетащить.

В таемХ вот, что было написано, относительно этого редактора:

Если вы используете редактор Ultra Edit (рекомендую), то можно сделать так, чтобы описание команды появлялось автоматически при выделении команды и нажатии определённой кнопки.
Жмём Help->Add help files. Выбираем местонахождение funcbis.hlp, вводим имя. Далее Advanced->Configuration, закладка Key Mapping. Выбираем UserHelpFile1, в строке Press New Key давим нужную кнопку (F2 или что-нибудь другое. F1 лучше не переназначать). Все.
Попробуйте написать, например display_msg, выделить команду даблкликом и нажать F2. Должно появится её описание.


поэтому решил скачать!!

QUOTE
По ходу, ты открываешь не исходники, а сами скрипты. Файлы *.int — это готовые, скомпилированные скрипты; *.ssl — исходники скриптов, т.е. то что нужно редактировать, а только потом компилировать в *.int.


да в int открываю, а их значит нужно переконвентировать и тогда нормально запустится!?
Nordan
Опять же говорю: "можешь использовать любой текстовый редактор, который тебе больше нравится".

QUOTE
да в int открываю, а их значит нужно переконвентировать и тогда нормально запустится!?

Не нужно их декомпилировать, исходники и так есть, скачай их на Team X.
Официальные исходники.
Исходники для версии 1.02d.
Сначала качаешь официальные, потом на них ставишь исходники для версии 1.02d.
wifyxf
QUOTE
Не нужно их декомпилировать, исходники и так есть, скачай их на Team X.
Официальные исходники.
Исходники для версии 1.02d.
Сначала качаешь официальные, потом на них ставишь исходники для версии 1.02d.



спасибо за ссылки — а почему там скрипты по локациям распределены — в папке самой игры ведь не так!? там точно все скрипты!?

Отправлено: 27 мая 13 22:19
а в файле command дан весь список скриптов Фоллаута с описанием!?
Nordan
QUOTE
а почему там скрипты по локациям распределены

Сам не знаю, может "кому-то" так удобней ориентироваться? :)

QUOTE
там точно все скрипты или только относящиеся к картам!?!!

Там все скрипты, и не только к локациям, в папке "MAIN" находится скрипт самого Чуза и главных НПС.

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

QUOTE
а в файле command дан весь список скриптов Фоллаута с описанием!?
wifyxf
Спасибо за ссылки!!!! а файлы MC-DOS в каждой папке исходников что означают!? — это типа файлов lst в папках игры?!
Nordan
Те что в корне(compile.exe, DOS4GW.exe, P.bat) — это компилятор. Остальные батники (*.bat) — это что-то вроде рудиментов. Может они использовались когда-то для чего-то, но сейчас они не нужны. По крайней мере я их не для чего еще не использовал.
Wasteland Ghost
Это не рудименты, это бат-файлы для быстрой компиляции всех скриптов в папке.
Nordan
QUOTE
Это не рудименты, это бат-файлы для быстрой компиляции всех скриптов в папке.

Ах, ну да, точно, че то я не посмотрел в них... :)
CODE
call ..\p ACBRAHMN
call ..\p ACDOG
call ..\p ACERIC
call ..\p ACFIST
call ..\p ACGECKO
...


Кстати о пакетных файлах.
wifyxf, иногда в процессе создания мода приходится выпонять массу однообразных действий (например: чтоб сделать картинку в фоле нужно сначала исходное изображение копировать в конвертор, потом переконвертированное изображение копировать в арты, потом все это дело еще записать в *.lst файл; и так множество раз...). В таких случаях имеет смысл сделать бат-файл, который все это будет делать за тебя.
Вот в этой статейке хорошо описана работа с бат-файлами (да и вообще с командной строкой).

Конечно, синтаксис командной строки и синтаксис фоловских скриптов достаточно сильно отличаются друг от друга, но, как и в любых языках программирования, там есть общие характерные черты. Так что создание бат-файлов будет только поднимать скилл скриптора. :)
wifyxf
Спасибо!
jordan
Мне кажется FSE, слишком нафичёвана. Проще в блокноте написать, чем разбираться, в этих окошках. Это моё ИМХО.

Советую для работы со скриптами, использовать Fgeck за авторством Технократа.

http://www.teamx.ru/site_arc/utils/fgeck.7z

Или NotePad, в меню можно выбрать синтаксис. Выбирайте pascal.

И удачи, а так же терпения, в освоении моддинга. Я лично работал только со скриптами. Ну и чуть карты правил.

Отправлено: 29 мая 13 14:06
wifyxf у вас получилось откомпилировать скрипт? Когда я только изучал скрипты, для меня было камнем преткновения, чёрное окошко под названием консоль.
wifyxf
QUOTE
wifyxf у вас получилось откомпилировать скрипт? Когда я только изучал скрипты, для меня было камнем преткновения, чёрное окошко под названием консоль.


честно говоря, не хвастаясь — я "вроде" как не компилировал — ведь компилирование — это проверка правильности написания скрипта!?!! — но как я его мог компилировать, если даже не писал!?! Я кажется "конвертировал" скрипт с формата int в ssl.. ну вообщем результат был такой — или это называется компилирование, а что же тогда первое!?
Nordan
Компиляция — перевод текстовой информации (исходного кода, который понятен человеку, но не понятен компу) в машинный код (который понятен компу, но непонятен человеку).
Декомпиляция — "де" указывает на обратность процедуры, т.е. перевод из машинного кода в исходный.

Язык программирования (ЯП) — это только "оболочка". Под каждым словом написанным в исходном коде подразумевается определенный "кусочек" кода. Задача ЯП: упростить процесс написания кода и наиболее наглядно показать "картину" того, что происходит. Ну или как то так, если не так — извиняйте, я не проггер. :)

QUOTE
Проще в блокноте написать, чем разбираться, в этих окошках.

Интерфейс FSE такой же как и в FGECK, только нет окна со списком функций. Вместо этого FSE сам анализирует вводимый текст и пытается "угадать" какая функция вводится (появляется окошко под курсором со списком всех подходящих под введенный текст функций). Мне этого достаточно. А вообще это все вопрос вкуса, попробовать стоит все редакторы.

А на счет блокнота: лучше скачать Notepad++. Он бесплатный и функционал радует.
wifyxf
И насчет компилирования!! — не получается скомпилировать исходник — обратно с INT и SSL в каком-то компиляторе-декомпиляторе делал, а вот в INT не выходит — ни в BIS, ни где!?!

Как компилировать, кто знает.. насчет "доки"

Там написано:

Проверим его работу. Для начала нам нужно откомпилировать скрипт (перевести его из текстового формата, понимаемого человеком, в двоичный формат, понимаемый игрой). Для это нам нужны две программы (вообще говоря, три. Но пока — две): dos4gw.exe и compile.exe. Они постовляются с Мапером от БИС и должны у вас быть. Найти их можно в папке Mapper\Scripts. Скопируйте туда сохранённый скрипт.

Теперь нам нужно автоматизировать процесс компиляции. Создайте новый файл и пишите туда:
@echo off
dos4gw compile myscript.ssl

Сохраните в Mapper\Scripts как comp.bat. Всё, запускайте comp.bat. У вас должен появится файлик myscript.int — это и есть готовый для использования скрипт.


не понятно — у меня и в маппере таких папок нет и такой функции не предвижу и в самом Фоллауте нет папки Mapper/Scripts, да и если бы они были — что с этого!?!!

BIS пишет что файл отсутствует!, но он был!

кажется ни один компилятор "не находит" этих файлов-исходников!
Nordan
QUOTE
не понятно — у меня и в маппере таких папок нет

Это маленькая путаница. Дело в том, что изначально исходники шли в комплекте с мэппером, и находились как раз в папка Scripts в корне мэппера. Расположение компилятора роли никакой не играет (правда, если не умеешь работать с бат-файлами, то лучше делай по примеру, батник нужно создавать в корне исходников (там где лежит сам компилятор и папки с названиями городов)).

Теперь разберемся с бат-файлом:
CODE
@echo off
dos4gw compile myscript.ssl


Это означает то, что компилироваться должен файл myscript.ssl. Причем только он. Если имя будет другое — ничего не произойдет.

Вдобавок, такой командой можно компилировать только те скрипты, которые написаны на "исконно" фолловском языке. В большенстве случаев (да во всех, в принципе) помимо основного кода также используются директивы препроцессора (#define, #include и т.д.). С их момощь можно упростить процесс написания кода (например, можно делать макросы), но перед компиляцией такого кода, его (код) сначала нужно обработать препроцессором, а уж потом только компилировать. Так что скомпилировать какой-нибудь БИСовский исходник с помощью выше указанного бат-файла не получится.

Все, о чем повествуется в предыдущем абзаце, есть в этой "доке" (FScripts HOWTO). Просто читай внимательно и все поймешь.
wifyxf
QUOTE
Это означает то, что компилироваться должен файл myscript.ssl. Причем только он. Если имя будет другое — ничего не произойдет.

Вдобавок, такой командой можно компилировать только те скрипты, которые написаны на "исконно" фолловском языке. В большенстве случаев (да во всех, в принципе) помимо основного кода также используются директивы препроцессора (#define, #include и т.д.). С их момощь можно упростить процесс написания кода (например, можно делать макросы), но перед компиляцией такого кода, его (код) сначала нужно обработать препроцессором, а уж потом только компилировать. Так что скомпилировать какой-нибудь БИСовский исходник с помощью выше указанного бат-файла не получится.

Все, о чем повествуется в предыдущем абзаце, есть в этой "доке" (FScripts HOWTO). Просто читай внимательно и все поймешь.


я не нахожу ничего, чтобы мне могло помочь в компиляции по поводу препроцессоров!! я должен скачать какую-то программу!? или написать в каждом файле include и defaine, чтобы он скомпилировался!?! или нужно перевести написанное в блокноте с помощью программы "в фоловский шрифт"? или может еще что-то!
Nordan
QUOTE
я не нахожу ничего, тобы мне могло помочь в компиляции

Читай и делай все по примеру, не беги вперед. Информация дается по шагам: сначала общие принципы, потом частные.
Wasteland Ghost
wifyxf, ты хочешь всё и сразу. Так не выйдет. С нулевыми знаниями в области программирования изучать скриптинг придётся долго. Туториал по скриптам написан от элементарного к простому и далее к чуть более сложному. Простейшие скрипты не требуют препроцессора, не беги впереди паровоза, читай каждую строчку и каждую букву, каждый документ по ссылке. До препроцессора там дело дойдёт.

Подготовь Фол к модификации, разложи все файлы по папкам, как это сказано в FAQ и туториале по скриптам. И медленно и вдумчиво выполняй задания из туториала.

Препроцессор, когда он понадобится, можно взять в файловом архиве TeamX.
jordan
http://yadi.sk/d/-OdJs2gC5KvnE

Распакуйте этот архив в любую папку, в архиве уже есть скрипты, препроцессор и компилятор. Для компиляции зайдите в папку COMPILE и запустите 1.bat. В папке появится файл .int, его скопируйте в папку игры data\scripts

Просто копирeте в эту папку скрипты и запускайте 1.bat

Позже сделаю батник, для компиляции всех скриптов.
wifyxf
QUOTE
wifyxf, ты хочешь всё и сразу. Так не выйдет. С нулевыми знаниями в области программирования изучать скриптинг придётся долго. Туториал по скриптам написан от элементарного к простому и далее к чуть более сложному. Простейшие скрипты не требуют препроцессора, не беги впереди паровоза, читай каждую строчку и каждую букву, каждый документ по ссылке. До препроцессора там дело дойдёт.

Подготовь Фол к модификации, разложи все файлы по папкам, как это сказано в FAQ и туториале по скриптам. И медленно и вдумчиво выполняй задания из туториала.

Препроцессор, когда он понадобится, можно взять в файловом архиве TeamX.


в том-то и дело, что не "все и сразу" — у меня не компилировались даже простые скрипты! Фол к модификации я уже подготовил..

Отправлено: 30 мая 13 19:28
QUOTE
Распакуйте этот архив в любую папку, в архиве уже есть скрипты, препроцессор и компилятор. Для компиляции зайдите в папку COMPILE и запустите 1.bat. В папке появится файл .int, его скопируйте в папку игры data\scripts

Просто копирeте в эту папку скрипты и запускайте 1.bat

Позже сделаю батник, для компиляции всех скриптов.


Спасибо!! компилирует
jordan
Для обучения хватит скрипта acklint.ssl, так как этот скрипт клинта.

Пока не забивайте голову настройками, просто изучайте скрипты + доки. Изменили скрипт скомпилируйте, запустите игру, посмотрите изменения.


Отправлено: 30 мая 13 19:57
Откройте файл p.bat и удалите -P.

QUOTE

bin\mcpp %1.ssl %1.i
bin\sslc %1.i
del %1.i
pause 
Wasteland Ghost
QUOTE
Фол к модификации я уже подготовил..

Тогда откуда вопросы про папки? Пройдись по ресурсной базе Фола, прочти соответствующий документ. Разберись, что где лежит. Чтобы знать — вот тут скрипты, вот тут диалоги, тут картинки... Жить станет на порядок проще. :)
wifyxf
QUOTE
Тогда откуда вопросы про папки? Пройдись по ресурсной базе Фола, прочти соответствующий документ. Разберись, что где лежит. Чтобы знать — вот тут скрипты, вот тут диалоги, тут картинки... Жить станет на порядок проще. :)


я уже про структуру Фоллаута(где в общем что лежит....) вроде и не спрашивал..
jordan
Как успехи в освоении скриптов?
Wasteland Ghost
jordan, для личных вопросов существует личная почта.
The Master
x32 совместимый компилятор, допиленный для работы на современных ОС.
С исходниками. Автор доработки — Hexxx.
wifyxf
Насчет скриптов — попытался сделать все как по схеме в документации, т.е.

Первый скрипт

Ваше терпение вознаграждено. Пишем первый скрипт.

Итак, что он будет делать? Что выбрать в качестве точки входа? Помните, я говорил, что точками входа могут служить не только действия игрока — но и некие внутриигровые события. Эти события связаны с действиями игрока, но не так явно, как например попытка заговорить. К таким событиям относятся, например, заход игрока на карту, прошествие определённого временного интервала и т.д.

Пусть наш объект поприветствует Избранного, как только тот появится в локации.

Обрабатывается это событие с помощью процедуры map_enter_p_proc.

Пишем код:
procedure start begin
end

procedure map_enter_p_proc begin
display_msg("Hello");
end

Сохраняйте как myscript.ssl


скомпиллировал, поместил в папку со скриптами, прописал и в lst файле, но никакого эффекта нет — надписи "Привет" нигде не появляется

Почему!? что не так!? или скрипт неправильный!?!
The Master
А ты его повесил? В маппере это делается.
Можно на NPC, можно к карте.

display_msg пишет сообщение в окошко слева внизу, там высматривай.

Блин, я не знаю, там же всё просто, я 4-5 лет назад сначала просто очень много читал. Доков оказалось мало, интырнета своего не было, ходил к знакомым, быстро-быстро сохранял страницы форума на флешку, а потом дома с упоением читал.
На 3 день освоил интерфейсные функции и анимацию, делал прикольные интерактивные ролики на движке. Как правило, там всех разрывало в мясо и убивало, но ведь были и диалоги, и фразы цветные над головами! И никакого красноглазия, язык чуть сложнее Паскаля.
wifyxf
Да, действительно! Получилось — а я то все думал — как этот скрипт может работать, если там не слово о Клинте.. Но возник другой вопрос — myscript заменил другой скрипт и теперь это уже не клинт!?! — А что в маппере нельзя привязать более 1 скрипта!? то есть если я хочу сделать Клинта говорящим "Привет!", то мне нужно прописывать это в его скрипт, а не делать отдельный, так как второй скрипт нельзя привязать к одному нпс!?
Nordan
QUOTE
то есть если я хочу сделать Клинта говорящим "Привет!", то мне нужно прописывать это в его скрипт, а не делать отдельный, так как второй скрипт нельзя привязать к одному нпс!?

Именно. Просто берешь исходник скрипта Клинта и дописываешь его. Никакие "вторые" скрипты не нужны.
wifyxf
Насчет скриптов! хотел сделать скрипт перемещения в виде ходьбы для криттера в одном направлении и обратно, но не понял как и вообще с чего начать, ну судя по документации написал:

procedure start begin
end


потом вставил команду перемещения на указанный гекс

int move_to(ObjectPtr obj, int 19898, int 0)

- не знаю правильно или нет
потом


потом назад


int move_to(ObjectPtr obj, int 18573, int 0)

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

#define ANIM_walk(1)

вроде эта!?!

НО что с ней делать и с помощью какой команды применять и вообще про весь скрипт!?!

Но этот скрипт не скомпиллировался, видимо составлен не верно!?
The Master
Щас убью.

Не копипасти код НИКОГДА, всё пиши самостоятельно.
Что такое ObjectPtr? Что такое int перед числом?

procedure move_to(self_obj, 19898, 0)
за 0 я ничего не скажу, не помню что там должно быть, но надеюсь, суть ты понял. Доку по прежнему ты читаешь по диагонали.

QUOTE
#define ANIM_walk(1)

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

В animcomd.h все индексы анимаций написаны, можно взять оттуда.
Открывать блокнотом.
Nordan
Ребята, че-та-вы-мудрите... :)

QUOTE
int move_to(ObjectPtr obj, int tile_num, int elev) — переместить объект
Аргументы:
obj — указатель на объект
tile_num — номер гекса (связь с координатами x, y: hex = 200 * y + x)
elev — уровень (0, 1 или 2)
Возвращаемое значение:
0
Примечания:
обновляет экран

Это не анимация, это прямое перемещение объекта.

Для того, чтобы заставить криттера идти к гексу есть функция:
QUOTE
void animate_move_obj_to_tile(ObjectPtr who, int tile, int speed) — анимация перемещения объекта на заданный гекс
Аргументы:
who — указатель на объект
tile — номер гекса (связь с координатами x, y: hex = 200 * y + x)
speed — скорость:
ANIMATE_WALK (0) — идти
ANIMATE_RUN (1) — бежать
ANIMATE_INTERRUPT (16) — флаг "прервать текущую анимацию" (если установлен, то данная команда прервёт текущую анимацию)
Возвращаемое значение:
нет
Макросы:
animate_move_to_tile, animate_run_to_tile, animate_move_to_tile_force, animate_run_to_tile_force


К примеру, заставить криттера ходить по попытке заговорить с ним можно вот так:

CODE
variable start_hex;  //объявляем переменную со стартовым гексом

procedure start begin
end

procedure talk_p_proc begin  //попытка заговорить с криттером
start_hex:=tile_num(Self_obj); //записываем стартовый гекс
animate_move_obj_to_tile(self_obj,19898,0); //заставляем идти на гекс 19898
end

procedure critter_p_proc begin  //процедура обновления
if tile_contains_obj_pid(19898,0,obj_pid(self_obj)) then begin  //проверяем, дошел ли криттор до гекса
display_msg("должен идти обратно"); // это не обязательно писать
animate_move_obj_to_tile(self_obj,start_hex,0); //заставляем идти обратно
end

end
Wasteland Ghost
wifyxf, для новых вопросов заводи новые темы. А ещё лучше — сначала воспользуйся поиском и поищи старые. Ещё одна попытка свалить всё в одну кучу закончится жирным минусом в карме.

Разговор про прототипы вынесен в отдельную тему.
wifyxf
Спасибо Nordan проверю.....
а разве достаточно одной команды анимации для передвижения объекта!7 и зачем же нужа тогда команда — int move_to!?!

да.. и куда записывать сам код анимации — у тебя в примереи не нашел и как записывать — ANIMATE_WALK (0) — полностью или просто (0)

что идет после команды кода анимации и end —

procedure critter_p_proc begin //процедура обновления
if tile_contains_obj_pid(19898,0,obj_pid(self_obj)) then begin //проверяем, дошел ли криттор до гекса
display_msg("должен идти обратно"); // это не обязательно писать
animate_move_obj_to_tile(self_obj,start_hex,0); //заставляем идти обратно
end

end



проверка или нет!?

а зачем display_msg!?

и variable start_hex; пишется ДО procedure critter_p_proc begin!?
что вообще пишется до этой команды!?

Что записано за "/" и между "/" — не читается командой, а нужно лишь для скриптера, т.е. вообще не обязательно!?!

Nordan
Что-то ты не внимательно доки читаешь...

QUOTE
у тебя в примереи не нашел и как записывать — ANIMATE_WALK (0)

ANIMATE_WALK можно писать только когда используешь препроцессор. Это обычная замена. Просто не удобно держать в голове значения всех циферок. Для таких вещей и существуют header файлы, в них храняться как раз все эти замены . После обработки препроцессором "ANIMATE_WALK" заменится "0".

QUOTE
а зачем display_msg!?

Как я уже говорил, эту строчку можно не писать. Она сообщает, что условие выполнилось и криттер должен идти назад. Просто перестраховка, мало ли чего. :)

QUOTE
и variable start_hex; пишется ДО procedure critter_p_proc begin!?

Читай раздел "переменные" в доке, там все подробно расписано. Кратко могу сказать, что переменные объявленные вне процедур действуют во всех процедурах скрипта. А переменные объявленные в процедуре, действуют только в этой конкретной процедуре (где они объявлены).

QUOTE
что вообще пишется до этой команды!?

Вначале скрипта указываются директивы препроцессора, содержание процедур, ну и собственно переменные. Но в данном конкретном случае препроцессор не используется, поэтому и директивы не нужны. Обработчики (ака точки входа) все стандартные, поэтому и содержание тоже не нужно. Так что перед "variable start_hex;" в данном случае писать ничего не нужно, скрипт то элементарный.

QUOTE
Что записано за "/" и между "/" — не читается командой, а нужно лишь для скриптера, т.е. вообще не обязательно!?!

Это просто коментарии, они стираются при компиляции.

QUOTE
что идет после команды кода анимации и end —

Не понял тебя. Ну, ничего там не идет. Но если это означает "почему там два end", то есть простое правило "Сколько begin'ов, столько и end'ов". :) Там же после условия идут несколько функций, в таких случаях (когда эти функции относятся к этому условию) их нужно записывать в отдельный блок (begin...end).
wifyxf
что идет после команды кода анимации и end — — я вот это имел ввиду!

procedure critter_p_proc begin //процедура обновления
if tile_contains_obj_pid(19898,0,obj_pid(self_obj)) then begin //проверяем, дошел ли криттор до гекса
display_msg("должен идти обратно"); // это не обязательно писать
animate_move_obj_to_tile(self_obj,start_hex,0); //заставляем идти обратно
end


- что это!? и предположил, что это проверка — не обязательная процедура!?!

честно говоря не совсем понял что такое препроцессор и как пользоваться head-файлами и что это поточнее.. их в исходниках смотреть!? там переменные!?! а что еще!?
Nordan
QUOTE
честно говоря не совсем понял что такое препроцессор

Препроцессор просто заменяет/подставляет функции и значения (грубо говоря), использовать его не обязательно, но с ним легче писать скрипты.

Вот например #define ANIMATE_WALK (0). Означает просто что выражение "ANIMATE_WALK" должно замениться на "0". Т.е. изначально написанная функция "animate_move_obj_to_tile(self_obj,start_hex,ANIMATE_WALK);" после препроцессора будет выглядеть "animate_move_obj_to_tile(self_obj,start_hex,0);", только и всего. Компилятор БИС "не знает" что такое "ANIMATE_WALK", поэтому если не задействовать препроцессор, то такой скрипт просто не скомпилируется.

QUOTE
что идет после команды кода анимации и end

Ну это часть скрипта. Нельзя просто сказать криттеру "сходи туда и вернись", его можно направить к одному гексу, он дойдет до него и будет тупо стоять. Его надо направить назад. В этой процедуре стоит проверка на содержание конкретно этого криттера на конкретном гексе. Как только условие проходиться (т.е. криттер дошел до этого гекса), срабатывает функция, которая заставляет его идти в тот гекс где он находился сначала (его мы записывали в "start_hex").
wifyxf
Насчет препроцессора!? так а нельзя ли самому поставить "0" вместо animate_walk!?!!

Так коды анимации подставляются прямо в "скобки" после команды!?
Nordan
QUOTE
так а нельзя ли самому поставить "0" вместо animate_walk!?!!

Если ты не заметил, в этом примере я так и сделал.
QUOTE
Так коды анимации подставляются прямо в "скобки" после команды!?

В скобках пишутся вообще аргументы к функции. Не только коды анимации.
The Master
Ему нужны азы программирования и хоть какое-то представление о структуре тела программы и синтаксисе. Блок-схемы нарисуйте, чтоль :D
Nordan
QUOTE
Ему нужны азы программирования и хоть какое-то представление о структуре тела программы и синтаксисе.

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

А вообще, скриптинг похож на конструктор. Вот тебе детальки: функции и операторы. Ты представляешь что должно получиться в конце. Ну и собираешь все воедино. :)
wifyxf
variable start_hex; //объявляем переменную со стартовым гексом

procedure start begin
end

procedure talk_p_proc begin //попытка заговорить с криттером
start_hex:=tile_num(Self_obj); //записываем стартовый гекс
animate_move_obj_to_tile(self_obj,19898,0); //заставляем идти на гекс 19898
end

procedure critter_p_proc begin //процедура обновления
if tile_contains_obj_pid(19898,0,obj_pid(self_obj)) then begin //проверяем, дошел ли криттор до гекса
display_msg("должен идти обратно"); // это не обязательно писать
animate_move_obj_to_tile(self_obj,start_hex,0); //заставляем идти обратно
end

end


Попробовал выполнить этот скрипт — но он не скомпилировался.. значит что-то не так!?!
я не записывал только то, что было написано после "/", то есть по-русски
Nordan
Хм... Странно, у меня все компилируется. И через встроенный компилятор в FSE, и через тот что тебе давал jordan.
wifyxf
Хм... Странно, у меня все компилируется. И через встроенный компилятор в FSE, и через тот что тебе давал jordan.

постой... скомпилировался — просто я первый раз в "стартовый гекс" решил написать его значение!?!

А оказывается не надо!?!?!?


сейчас проверю его работу..

Отправлено: 15 июн 13 22:27
Работает! Спасибо за подсказку, только я хотел еще, чтобы он ходил всегда туда и обратно и начинал действия без моего участия — наверное мне нужно найти команду "при заходе на карту", т.е. , когда я захожу на эту карту тот криттер начинает ходить постоянно, НО чтобы ходил постоянно нужно ввести еще одну команду — может "цикл" или что-то вроде этого!? Кстати, а разве нужно опираться от чего-то, что бы нпс выполнял какие-то действия — можно его сделать изначально гуляющим с одного гекса на другой!? а вот — конечно не постоянно гуляющим, а по прошествию определенного количества времени(я так понял тиков или можно минут или секунд — но там свои!?!) — это кажется временные "команды", НО там, кажется, все-равно идет привязка к чему-то — к тому же самому заходу игрока на данную карту — с какого момента будут считаться минуты!?!?

кстати насчет времени в Фоллаут — как оно соотносится с реальным, либо с определенными действиями в игре, может зависит от перемещения по гексам, либо еще чего-то, но наверное все-таки приявязывается к "обычному времени" в каком-то соотношении!?!
Nordan
QUOTE
кстати насчет времени в Фоллаут — как оно соотносится с реальным

1 секунда — это 10 игровых тиков.
QUOTE
наверное мне нужно найти команду "при заходе на карту"

Именно. Обработчик map_enter_p_proc.
QUOTE
Кстати, а разве нужно опираться от чего-то, что бы нпс выполнял какие-то действия — можно его сделать изначально гуляющим с одного гекса на другой!?

Всегда должно быть какое то действие, провоцирующие выполнение команд, "просто так" ничего не делается. Хотя обработчик start выполняет записанные в него функции сразу, как только загружается карта. Это и может послужить "пинком". :)
Wasteland Ghost
QUOTE
Ему нужны азы программирования и хоть какое-то представление о структуре тела программы и синтаксисе. Блок-схемы нарисуйте, чтоль :D

Мы тут что, сильно похожи на камикадзе? :) Если человек не желает разбираться в базовых вещах, а кидается делать всё и сразу, блок-схемами тут не поможешь.

wifyxf, ответы на все заданные вопросы есть в доках по скриптам и туториалах. Не беги впереди паровоза, изучай материал последовательно. И обязательно ходи по ссылкам на дополнительные доки. И читай.
wifyxf
1 секунда — это 10 игровых тиков.

а в Фоллауте же вроде есть и минуты и часы и дни — в них определенное количество тиков!?

Хотя обработчик start выполняет записанные в него функции сразу, как только загружается карта. Это и может послужить "пинком". :)

так значит все-таки в командах можно ни на что не опираться!?
Wasteland Ghost
QUOTE
а в Фоллауте же вроде есть и минуты и часы и дни — в них определенное количество тиков!?

Умножь же. :)

1 секунда = 10 тиков
1 минута = 60 секунд = 600 тиков
1 час = 60 минут = 3600 секунд = 36000 тиков
1 день = 24 часа = 1440 минут = 86400 секунд = 864000 тиков

QUOTE
так значит все-таки в командах можно ни на что не опираться!?

http://www.teamx.ru/site_arc/docs/bis_help.rar, раздел "Стандартные обработчики".
Ваш ответ: