Модостроение. Редактирование и создание скриптов
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Редактирование и создание скриптов Редактирование и создание скриптов на языке 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
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]
|
|
|
Эти 0 пользователя(ей) поблагодарили kvant за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 12.05.2013, 17:11 | Сообщение # 197 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| kvant, 1. Указанный параметр должен быть в xml нодах описывающих худ-элементы часов. 2. Ну так в скрипте реализован второй метод предложенный мной, когда худ-элементы часов удаляются и перерисовываются cнова уже поверх всего.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Чт, 23.05.2013, 12:54 | Сообщение # 198 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Подскажите, пожалуйста по такому вопросу. Хочу сделать сценку: группа НПС идет из точки А в точку Б, когда они там все собираются, происходит выдача инфопоршня и выполнение некоторой функции. Движение (по стартовому поршню) я сделал. Всем НПС поставил одинаковую логику (и путь, соответственно). Для одного НПС можно отследить сигнал на последней точке (sig = name_sign) и выдать по нему поршень. Что-то мне кажется, для группы этот метод не сработает, хотя бы потому, что первый стоит на точке, а остальные толпятся рядом. Как это можно обойти? Через смарт-террейн? И самое главное, не могу понять, откуда следует вызывать функцию, которая должна в конце выполниться. (Делал это в ТЧ, но можете подсказать и для ЗП).
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
Сообщение отредактировал NIV - Чт, 23.05.2013, 12:57 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
makdm | Дата: Чт, 23.05.2013, 16:37 | Сообщение # 199 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| NIV, Спавните всю группу сквадом. В точке Б делает Зону (рестриктор), например радиусом 5 метров.
Из логики этого рестриктора проверяете возвращает ли функция squad_in_zone значение true Сама функция в файле xr_conditions.script После выполнения условия, что все члены сквада внутри рестриктора, тут же из логики рестриктора вызовите вашу функцию, прописав её в файл xr_effects.script
И не нужно никаких инфопоршней.
Терпение...... И все получится!
Сообщение отредактировал makdm - Чт, 23.05.2013, 16:58 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
NIV | Дата: Пт, 24.05.2013, 20:05 | Сообщение # 200 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Пробовал в ЗП вставить скрипт, выводящий координаты ГГ на экран (из шапки КМБ и с 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 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
mizabrik | Дата: Пт, 24.05.2013, 20:09 | Сообщение # 201 |
Почетный инженер «Свободы»
Свобода
Сообщений: 360
| NIV, выложите изменённые участки на форум и точнее опишите "не работает".
|
|
|
Эти 0 пользователя(ей) поблагодарили mizabrik за это полезное сообщение: |
|
|
Азазель | Дата: Пт, 24.05.2013, 22:39 | Сообщение # 202 |
Новичок
Пользователи
Сообщений: 77
| Доброго дня всем. Хотел бы создать функциональный противогаз. То есть 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] Написал скрипт на основе того что лежит на сталкерине. Вылета нету но и реаций ноль. Фильтр на поясе противогаз надет а худа не ма
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 24.05.2013, 22:59 | Сообщение # 203 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Азазель, Для какого движка писано?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Сб, 25.05.2013, 14:40 | Сообщение # 204 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| denis2000, спасибо, метод из КМБ заработал под оригиналом ЗП. Но полного счастья нет, т.к. в SGM 2.2 эти же правки вызывают завис с черным экраном, в логе фатальной ошибки нет. Нужно делать как-то по другому?
А зачем в SGM изобретать велосипед?! Там в главном меню (при формате экрана 3:4) есть пункт Координировать! Указанный скрипт универсальный и будет работать в любом моде на движке 1.6ххх. denis2000
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
Азазель | Дата: Сб, 25.05.2013, 16:55 | Сообщение # 205 |
Новичок
Пользователи
Сообщений: 77
| denis2000, Как уже сказали для ЗП. Был уверен что сработает поскольку сей скрипт без правок на чн являлся рабочим...
Для начала слоты в ЗП другие. denis2000Добавлено (25.05.2013, 16:55) --------------------------------------------- denis2000, Да я порылся в учебнике что в теме. Заменил слот шлема. А слот пояса не подскажете ? Его там нету. А как я понял в конфигах не верные
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
NIV | Дата: Сб, 25.05.2013, 17:35 | Сообщение # 206 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| denis2000, извиняюсь, не знал. У меня широкоформат и этот пункт я никогда не видел
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
Азазель | Дата: Сб, 25.05.2013, 18:48 | Сообщение # 207 |
Новичок
Пользователи
Сообщений: 77
| Всё исправил! Работает. При наличии фильтра в инвентаре работает худ противогаза. При отсутствии не работает. Как теперь дополнить скрипт остальным ? То есть: 1. При отсутствии фильтров противогаз возвращается в инвентарь. 2. Противогаз одет. Стартует таймер на 1 игровой час (без вывода на худ и прочее чисто отсчет внутри игры) 3. По истечению часа удаляется из инвентаря первый фильтр. И используется следующий. (так пока фильтры не кончатся) 4. Если фильтр закончился а нового нету. Убираем в рюкзак противогаз.
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 25.05.2013, 21:16 | Сообщение # 208 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Азазель, Проблема в том, что для работой со слотами есть все несколько функций: узнать активный, активировать конкретный слот и узнать предмет в слоту (последнюю функцию вы уже использовали); но нет функций убрать предмет или поместить предмет в слот. Можно конечно дропать предмет или удалять, но это не выход.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Азазель | Дата: Сб, 25.05.2013, 21:45 | Сообщение # 209 |
Новичок
Пользователи
Сообщений: 77
| denis2000, То есть наложить запрет на одевания противогаща никак ? Ведь можно позволить одеть а потом вернуть в инвентарь тут же если нету фильтров ?
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 25.05.2013, 22:16 | Сообщение # 210 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Азазель, Проведите простой эксперимент, выкиньте все противогазы из инвентаря и слота на землю, затем подберите любой противогаз - где он очутиться? Даю 200% что в слоте! Так как его можно убрать из слота не убрав из инвентаря? (ответ на этот вопрос имеется но к сожалению он все равно не приблизит к решению задачи)
Кстати есть же еще и противогазы интегрированные в бронежелеты, а их скрипт напрочь не учитывает.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|