Перейти к содержимому


Фотография

Редактирование скриптов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 75

#21 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 30 Май 2013 - 18:24

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

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

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


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

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

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

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


Спасибо!! компилирует


#22 jordan

jordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 142 сообщений

Отправлено 30 Май 2013 - 18:35

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

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


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

QUOTE

bin\mcpp %1.ssl %1.i
bin\sslc %1.i
del %1.i
pause 


#23 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 30 Май 2013 - 20:00

QUOTE
Фол к модификации я уже подготовил..

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


#24 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 30 Май 2013 - 20:28

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


я уже про структуру Фоллаута(где в общем что лежит....) вроде и не спрашивал..

Это сообщение отредактировано wifyxf - 30 мая 2013 | 21:29


#25 jordan

jordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 142 сообщений

Отправлено 07 Июнь 2013 - 10:49

Как успехи в освоении скриптов?


#26 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 07 Июнь 2013 - 13:38

jordan, для личных вопросов существует личная почта.


#27 The Master

The Master

    Чистосердечный зевака

  • Пользователи
  • PipPipPip
  • 2 167 сообщений

Отправлено 10 Июнь 2013 - 14:39

x32 совместимый компилятор, допиленный для работы на современных ОС.
С исходниками. Автор доработки — Hexxx.


#28 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 14 Июнь 2013 - 20:40

Насчет скриптов — попытался сделать все как по схеме в документации, т.е.

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

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

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

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

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

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

procedure map_enter_p_proc begin
display_msg("Hello");
end

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


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

Почему!? что не так!? или скрипт неправильный!?!

Это сообщение отредактировано wifyxf - 14 июня 2013 | 21:42


#29 The Master

The Master

    Чистосердечный зевака

  • Пользователи
  • PipPipPip
  • 2 167 сообщений

Отправлено 14 Июнь 2013 - 20:53

А ты его повесил? В маппере это делается.
Можно на NPC, можно к карте.

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

Блин, я не знаю, там же всё просто, я 4-5 лет назад сначала просто очень много читал. Доков оказалось мало, интырнета своего не было, ходил к знакомым, быстро-быстро сохранял страницы форума на флешку, а потом дома с упоением читал.
На 3 день освоил интерфейсные функции и анимацию, делал прикольные интерактивные ролики на движке. Как правило, там всех разрывало в мясо и убивало, но ведь были и диалоги, и фразы цветные над головами! И никакого красноглазия, язык чуть сложнее Паскаля.


Это сообщение отредактировано The Master - 14 июня 2013 | 21:58


#30 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 14 Июнь 2013 - 21:22

Да, действительно! Получилось — а я то все думал — как этот скрипт может работать, если там не слово о Клинте.. Но возник другой вопрос — myscript заменил другой скрипт и теперь это уже не клинт!?! — А что в маппере нельзя привязать более 1 скрипта!? то есть если я хочу сделать Клинта говорящим "Привет!", то мне нужно прописывать это в его скрипт, а не делать отдельный, так как второй скрипт нельзя привязать к одному нпс!?


#31 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 14 Июнь 2013 - 21:29

QUOTE
то есть если я хочу сделать Клинта говорящим "Привет!", то мне нужно прописывать это в его скрипт, а не делать отдельный, так как второй скрипт нельзя привязать к одному нпс!?

Именно. Просто берешь исходник скрипта Клинта и дописываешь его. Никакие "вторые" скрипты не нужны.


#32 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 14 Июнь 2013 - 23:55

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

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)

вроде эта!?!

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

Но этот скрипт не скомпиллировался, видимо составлен не верно!?

Это сообщение отредактировано wifyxf - 15 июня 2013 | 00:58


#33 The Master

The Master

    Чистосердечный зевака

  • Пользователи
  • PipPipPip
  • 2 167 сообщений

Отправлено 15 Июнь 2013 - 00:08

Щас убью.

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

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

QUOTE
#define ANIM_walk(1)

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

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


#34 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 15 Июнь 2013 - 01:00

Ребята, че-та-вы-мудрите... :)

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


Это сообщение отредактировано Nordan - 15 июня 2013 | 02:10


#35 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 15 Июнь 2013 - 07:15

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

Разговор про прототипы вынесен в отдельную тему.


#36 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 15 Июнь 2013 - 15:11

Спасибо 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!?
что вообще пишется до этой команды!?

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



#37 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 15 Июнь 2013 - 17:38

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

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).


#38 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 15 Июнь 2013 - 17:59

что идет после команды кода анимации и 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-файлами и что это поточнее.. их в исходниках смотреть!? там переменные!?! а что еще!?


#39 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 15 Июнь 2013 - 18:28

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").


#40 wifyxf

wifyxf

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 69 сообщений

Отправлено 15 Июнь 2013 - 18:36

Насчет препроцессора!? так а нельзя ли самому поставить "0" вместо animate_walk!?!!

Так коды анимации подставляются прямо в "скобки" после команды!?

Это сообщение отредактировано wifyxf - 15 июня 2013 | 19:37




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Рейтинг@Mail.ru