Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
kvantДата: Вс, 12.05.2013, 00:05 | Сообщение # 196
Удаленные



сейчас попробую)а там и узнаю))

Добавлено (12.05.2013, 00:00)
---------------------------------------------
не пошло к сожалению((в скрипт же надо было,правильно?
вот что было в Шокер моде
[cut]
----------------------
-- File: Clock
-- Author: DEXXX (OGSM CS)
-- Вывод часов на экран
----------------------

local need_upd = false
local hud = get_hud()
local tg_upd = 0

function show_time()
if tg_upd < time_global() then
refresh()
tg_upd = time_global() + 500
end
end

function refresh()
local time_h = sr_timer.time2str(level.get_time_hours())
local time_m = sr_timer.time2str(level.get_time_minutes())

if sm.readCfg( "hud_clock", "bol" ) and (db.actor:alive() and (need_upd==false)) then
if hud:GetCustomStatic("hud_time_tex") == nil then
hud:AddCustomStatic("hud_time_tex", true)
hud:GetCustomStatic("hud_time_tex"):wnd():SetTextST(time_h.." "..time_m)
hud:AddCustomStatic("hud_timer_text2", true)
hud:GetCustomStatic("hud_timer_text2"):wnd():SetTextST(":")
else
hud:GetCustomStatic("hud_time_tex"):wnd():SetTextST(time_h.." "..time_m)
end
else
if hud:GetCustomStatic("hud_time_tex") then get_hud():RemoveCustomStatic("hud_time_tex") end
if hud:GetCustomStatic("hud_timer_text2") then get_hud():RemoveCustomStatic("hud_timer_text2") end
need_upd = false
end
end

--' Обновляем часы при смене худа костюма
function update_hud()
need_upd = true
end[/cut]
 
denis2000Дата: Вс, 12.05.2013, 17:11 | Сообщение # 197
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

kvant,
1. Указанный параметр должен быть в xml нодах описывающих худ-элементы часов.
2. Ну так в скрипте реализован второй метод предложенный мной, когда худ-элементы часов удаляются и перерисовываются cнова уже поверх всего.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
NIVДата: Чт, 23.05.2013, 12:54 | Сообщение # 198
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

Подскажите, пожалуйста по такому вопросу. Хочу сделать сценку: группа НПС идет из точки А в точку Б, когда они там все собираются, происходит выдача инфопоршня и выполнение некоторой функции. Движение (по стартовому поршню) я сделал. Всем НПС поставил одинаковую логику (и путь, соответственно). Для одного НПС можно отследить сигнал на последней точке (sig = name_sign) и выдать по нему поршень. Что-то мне кажется, для группы этот метод не сработает, хотя бы потому, что первый стоит на точке, а остальные толпятся рядом. Как это можно обойти? Через смарт-террейн? И самое главное, не могу понять, откуда следует вызывать функцию, которая должна в конце выполниться. (Делал это в ТЧ, но можете подсказать и для ЗП).

Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"

Сообщение отредактировал NIV - Чт, 23.05.2013, 12:57
 
makdmДата: Чт, 23.05.2013, 16:37 | Сообщение # 199
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

NIV, Спавните всю группу сквадом.
В точке Б делает Зону (рестриктор), например радиусом 5 метров.

Из логики этого рестриктора проверяете возвращает ли функция squad_in_zone значение true
Сама функция в файле xr_conditions.script
После выполнения условия, что все члены сквада внутри рестриктора, тут же из логики рестриктора вызовите вашу функцию, прописав её в файл xr_effects.script

И не нужно никаких инфопоршней.


Терпение......
И все получится!


Сообщение отредактировал makdm - Чт, 23.05.2013, 16:58
 
NIVДата: Пт, 24.05.2013, 20:05 | Сообщение # 200
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

Пробовал в ЗП вставить скрипт, выводящий координаты ГГ на экран (из шапки КМБ и с stalkerin - почему-то ничего не получилось. Пытался найти оригинальные скрипты bardak или sigapur22 - ссылки сдохли. Может кто подскажет, где ошибка? Или даст работающий скрипт? Моя gamedata.

1. Правильно пишите имена директорий
2. Восстановите файл bind_stalker.script и сделайте правки заново (на этот раз постарайтесь не испортить его оригинальный код) и у вас все получиться. denis2000


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"

Сообщение отредактировал NIV - Пт, 24.05.2013, 20:14
 
mizabrikДата: Пт, 24.05.2013, 20:09 | Сообщение # 201
Почетный инженер «Свободы»
Свобода
Сообщений: 360
Награды: 10
Репутация: [ 216 ]

NIV, выложите изменённые участки на форум и точнее опишите "не работает".

 
АзазельДата: Пт, 24.05.2013, 22:39 | Сообщение # 202
Новичок
Пользователи
Сообщений: 77
Награды: 0
Репутация: [ 0 ]

Доброго дня всем. Хотел бы создать функциональный противогаз. То есть
1. Проверяем есть ли на поясе фильтр. Если есть то позволяем одеть противогаз.
2. Проверяем одет ли противогаз. Если одет включаем худ противогаза.
3. По истечении 1 игрового часа противогаз тратит второй фильтр с пояса. Первый удаляется.
Если же фильтров нету противогаз снимается в инвентарь.
[cut noguest=Скрипт проверки фильтра и худа]
function hud_gas()
local slot_gas1 = db.actor:item_in_slot(11)
local obj_gas1 = db.actor:object("helm_respirator")
local filtr = db.actor:object("item_filter")
local slot_poic = db.actor:item_in_slot(-1)
if slot_poic and slot_poic:section() == "item_filter" and filtr ~= nil then
if slot_gas1 and slot_gas1:section() == "helm_respirator" and obj_gas1 ~= nil then
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static == nil then
hud:AddCustomStatic("hud_gas", true)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("hud_gas")
if custom_static ~= nil then
hud:RemoveCustomStatic("hud_gas", false)
end
end
end
end
[/cut]
Написал скрипт на основе того что лежит на сталкерине. Вылета нету но и реаций ноль. Фильтр на поясе противогаз надет а худа не ма sad
 
denis2000Дата: Пт, 24.05.2013, 22:59 | Сообщение # 203
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Азазель, Для какого движка писано?

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
NIVДата: Сб, 25.05.2013, 14:40 | Сообщение # 204
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

denis2000, спасибо, метод из КМБ заработал под оригиналом ЗП. Но полного счастья нет, т.к. в SGM 2.2 эти же правки вызывают завис с черным экраном, в логе фатальной ошибки нет. Нужно делать как-то по другому?

А зачем в SGM изобретать велосипед?! Там в главном меню (при формате экрана 3:4) есть пункт Координировать! Указанный скрипт универсальный и будет работать в любом моде на движке 1.6ххх. denis2000


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
АзазельДата: Сб, 25.05.2013, 16:55 | Сообщение # 205
Новичок
Пользователи
Сообщений: 77
Награды: 0
Репутация: [ 0 ]

denis2000, Как уже сказали для ЗП.
Был уверен что сработает поскольку сей скрипт без правок на чн являлся рабочим...

Для начала слоты в ЗП другие. denis2000

Добавлено (25.05.2013, 16:55)
---------------------------------------------
denis2000, Да я порылся в учебнике что в теме. Заменил слот шлема. А слот пояса не подскажете ? Его там нету. А как я понял в конфигах не верные

 
NIVДата: Сб, 25.05.2013, 17:35 | Сообщение # 206
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

denis2000, извиняюсь, не знал. У меня широкоформат и этот пункт я никогда не видел sad

Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
АзазельДата: Сб, 25.05.2013, 18:48 | Сообщение # 207
Новичок
Пользователи
Сообщений: 77
Награды: 0
Репутация: [ 0 ]

Всё исправил! smile Работает. При наличии фильтра в инвентаре работает худ противогаза. При отсутствии не работает.
Как теперь дополнить скрипт остальным ? То есть:
1. При отсутствии фильтров противогаз возвращается в инвентарь.
2. Противогаз одет. Стартует таймер на 1 игровой час (без вывода на худ и прочее чисто отсчет внутри игры)
3. По истечению часа удаляется из инвентаря первый фильтр. И используется следующий. (так пока фильтры не кончатся)
4. Если фильтр закончился а нового нету. Убираем в рюкзак противогаз.
 
denis2000Дата: Сб, 25.05.2013, 21:16 | Сообщение # 208
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Азазель, Проблема в том, что для работой со слотами есть все несколько функций: узнать активный, активировать конкретный слот и узнать предмет в слоту (последнюю функцию вы уже использовали); но нет функций убрать предмет или поместить предмет в слот.
Можно конечно дропать предмет или удалять, но это не выход.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
АзазельДата: Сб, 25.05.2013, 21:45 | Сообщение # 209
Новичок
Пользователи
Сообщений: 77
Награды: 0
Репутация: [ 0 ]

denis2000, То есть наложить запрет на одевания противогаща никак ? Ведь можно позволить одеть а потом вернуть в инвентарь тут же если нету фильтров ?
 
denis2000Дата: Сб, 25.05.2013, 22:16 | Сообщение # 210
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Азазель, Проведите простой эксперимент, выкиньте все противогазы из инвентаря и слота на землю, затем подберите любой противогаз - где он очутиться? Даю 200% что в слоте! Так как его можно убрать из слота не убрав из инвентаря?
(ответ на этот вопрос имеется но к сожалению он все равно не приблизит к решению задачи)

Кстати есть же еще и противогазы интегрированные в бронежелеты, а их скрипт напрочь не учитывает.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: