Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Форум » Моды для игр » Модостроение » Модостроение. Редактирование и создание скриптов
Модостроение. Редактирование и создание скриптов
denis2000Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

Редактирование и создание скриптов на языке LUA

Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                             local reason = string.format(fmt, ...)
                             error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Вт, 19.01.2016, 19:05 | Сообщение # 721
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата prohodchik ()
а можно как-то именно при старте игры?

Рестриктор и отработает "как-то именно при старте игры".


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
prohodchikДата: Вт, 19.01.2016, 20:16 | Сообщение # 722
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

denis2000, как прописать несколько инфопоршней?

Проект в разработке – "Болотные легенды"
 
asd123Дата: Вт, 19.01.2016, 20:43 | Сообщение # 723
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

prohodchik,
Код
on_info = {+actor_come_to_zaton -stop_infoportions_in_start_game} %+infoportion_start_quests +infoportion_go_bandits_to_skadovsk +infoportion_stalker_friends_to_actor +stop_infoportions_in_start_game%

Надеюсь, Вы поняли суть моих инфопорций smile Оформил для Вас так, чтобы можно было даже использовать happy


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Вт, 19.01.2016, 20:50
 
prohodchikДата: Ср, 20.01.2016, 09:32 | Сообщение # 724
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

задача вообще такая: чтобы не было ролика с Азотом и Лоцманом на локации Юпитер, и чтобы ГГ спавнился в других координатах. И это все начало игры, стартовый уровень Юпитер же.

Добавлено (20.01.2016, 09:32)
---------------------------------------------
Я даже не могу понять, как такое прописать. Если рестриктор в точке первоначального спавна ГГ, а у нового - новые координаты, происходит вылет, ибо игра не понимает, как можно начинать игру не на Янове. Если одинаковые координаты (новые), то просто ничего не меняется.


Проект в разработке – "Болотные легенды"

Сообщение отредактировал prohodchik - Вт, 19.01.2016, 21:32
 
sergej5500Дата: Ср, 20.01.2016, 09:51 | Сообщение # 725
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата prohodchik ()
ибо игра не понимает, как можно начинать игру не на Янове. Если одинаковые координаты (новые), то просто ничего не меняется.


Игре без разницы, на какой локации находится игрок. Если он в алл.спавне один.

Цитата prohodchik ()
происходит вылет


Выложите лог вылета. И свои правки. Тогда вам помогут.
 
prohodchikДата: Ср, 20.01.2016, 17:28 | Сообщение # 726
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

sergej5500, как оно должно работать?
Координаты где какие должны быть: нужного места или старой точки?


Проект в разработке – "Болотные легенды"
 
sergej5500Дата: Ср, 20.01.2016, 19:38 | Сообщение # 727
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата prohodchik ()
Координаты где какие должны быть: нужного места или старой точки?


Координаты чего?
 
prohodchikДата: Ср, 20.01.2016, 19:41 | Сообщение # 728
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

sergej5500, и точки старта ГГ, и рестриктора с инфопоршнями.

Проект в разработке – "Болотные легенды"
 
sergej5500Дата: Ср, 20.01.2016, 19:55 | Сообщение # 729
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата prohodchik ()
точки старта ГГ


Точка старта задается в секции actor в алл.спавн.

Для секции актор важны строки

position = 253.482116699219, 8.78786945343018, 169.996673583984
upd:position = 253.482116699219, 8.78786945343018, 169.996673583984

Координаты в обеих строках должны совпадать.

game_vertex_id = 1654
level_vertex_id = 560249

Для этих строк можно взять соответствующие параметры у любого объекта на нужной локации. Если неверно указать game_vertex_id, то игрок может оказаться на другой локации.

Актор в алл.спавн должен быть один.

Для рестриктора действуют аналогичные правила. Строку upd:position там указывать не надо.

После внесения правок нужно собрать алл.спавн и начать новую игру.

Что именно у Вас не получается?
 
prohodchikДата: Ср, 20.01.2016, 20:05 | Сообщение # 730
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

sergej5500, нужно выдать поршни сразу же при начале новой игры, без рестрикторов. ГГ либо спавнится на Янове, и ролик идет, либо вылет, ибо в коде игры прописано, что пока поршень не выдан, ГГ обязан спавнится там. А я прописываю свои координаты. И конфликт.

Проект в разработке – "Болотные легенды"
 
sergej5500Дата: Ср, 20.01.2016, 20:44 | Сообщение # 731
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата prohodchik ()
ГГ либо спавнится на Янове, и ролик идет, либо вылет


Вероятнее всего - допущено ошибка в ремтрикторе. Выложите логику рестриктора. Ну и лог вылета.
 
prohodchikДата: Ср, 20.01.2016, 20:57 | Сообщение # 732
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

[cut noguest=Рестриктор][12000]
; cse_abstract properties
section_name = space_restrictor
name = actor_cool
position = -437.72619628906,22.54748916626,341.4274597168
direction = 0.83660274744034,0,-0.54781007766724

; cse_alife_object properties
game_vertex_id = 422
distance = 0
level_vertex_id = 20225
object_flags = 0xffffff3e
custom_data = «END
[logic]
active = sr_idle@start
[sr_idle@start]
on_info = {+jup_first_meet_made -stop_infoportions_in_start_game} %+infoportion_start_quests +jup_b217_welcome_faded +jup_b217_welcome_guide_talked +jup_b217_pp_end_in_scene +jup_b217_pp_end_in_scene +jup_b217_guide_welcome_end + jup_b217_guide_welcome_end + jup_b217_guide_welcome_end = jup_b217_guide_welcome_end +stop_infoportions_in_start_game%
END

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 6.5,0,0
shape0:axis_y = 0,6.5,0
shape0:axis_z = 0,0,6.5
shape0:offset = 0,0,0
; cse_alife_space_restrictor properties
restrictor_type = 3[/cut]

[cut noguest=Лог]Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ....r. call of pripyat\gamedata\scripts\xr_logic.script:655: attempt to call field '?' (a nil value)[/cut]


Проект в разработке – "Болотные легенды"
 
sergej5500Дата: Ср, 20.01.2016, 21:06 | Сообщение # 733
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

prohodchik,

Пока вижу такую ошибку. Знак + или = перед инфопорцией или функцией нужно ставить без пробела. Не так

+ jup_b217_guide_welcome_end

а так

+jup_b217_guide_welcome_end

Непонятно, зачем Вы инфопорцию jup_b217_guide_welcome_end выдаете 3 раза. Хватит и одного.

В логе вылета указаны проблемы с файлом gamedata\scripts\xr_effects. Выложите код функции jup_b217_guide_welcome_end из этого файла.


Сообщение отредактировал sergej5500 - Ср, 20.01.2016, 21:06
 
asd123Дата: Ср, 20.01.2016, 21:18 | Сообщение # 734
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

prohodchik, стоп.. зачем Вы логику на выдачу инфопорций вставили в all.spawn? В рестрикторе вместо строк:
Код
custom_data = «END
[logic]
active = sr_idle@start
[sr_idle@start]
on_info = {+jup_first_meet_made -stop_infoportions_in_start_game} %+infoportion_start_quests +jup_b217_welcome_faded +jup_b217_welcome_guide_talked +jup_b217_pp_end_in_scene +jup_b217_pp_end_in_scene +jup_b217_guide_welcome_end + jup_b217_guide_welcome_end + jup_b217_guide_welcome_end = jup_b217_guide_welcome_end +stop_infoportions_in_start_game%
END

впишите отсылку к файлу с логикой рестриктора. Например так:
Код
[logic]
cfg = scripts\zaton\actor_cool.ltx
END

И уже там оформите логику. Вам же будет проще.. не придётся распаковывать all.spawn over999 раз ради редактирования одной строчки. happy Не забудьте подправить логику так, как описал Сергей smile


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Чт, 21.01.2016, 00:58
 
sergej5500Дата: Вс, 24.01.2016, 13:11 | Сообщение # 735
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Составил функции

[cut=Код]function mar_b1_smart_online(first_speaker, second_speaker)
return xr_conditions.distance_to_obj_le(nil,10,{"mar_b1_stalker_guide_2"})
end
function mar_b7_smart_online(first_speaker, second_speaker)
return xr_conditions.distance_to_obj_le(nil,10,{"mar_b7_stalker_guide_1"})
end[/cut]

Функции должны использоваться как прекондишионы в диалоге. При наличии true диалог активен. При дистанции до объектов mar_b1_stalker_guide_2 и mar_b7_stalker_guide_1 меньше 10 метров функции должны выдать true. Одновременно обе функции true выдать не могут. При вызове диалога получил жука.

[cut=Лог]FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ...ng\Зов Припяти\gamedata\scripts\xr_conditions.script:1153: attempt to perform arithmetic on field '?' (a nil value)


stack trace:
[/cut]

[cut=xr_conditions]function distance_to_obj_le(actor, npc, p)
local npc_id = get_story_object_id(p[1])
local npc1 = npc_id and alife():object(npc_id)
if npc1 then
return db.actor:position():distance_to_sqr(npc1.position) < p[2]*p[2]
-- строка 1153
end
return false
end[/cut]

В каком месте я допустил ошибку?
 
Форум » Моды для игр » Модостроение » Модостроение. Редактирование и создание скриптов
Поиск: