Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
men_stalker | Дата: Вт, 15.11.2016, 17:21 | Сообщение # 856 |
Инженер «Свободы»
Свобода
Сообщений: 184
| Цитата denis2000 ( ) Можно. Таких примеров в конфигах сплошь и рядом. Вот элементарный пример, который при это не работает. [cut]Код <stat_info> <value color="ui_1"/> <stat x="260" y="103" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_1</text> <!-- time --> </stat> <stat x="450" y="103" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_2</text> <!-- surges --> </stat> <stat x="640" y="103" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_3</text> <!-- quest completed --> </stat>
<stat x="360" y="150" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_4</text> <!-- mutants killed --> </stat> <stat x="355" y="198" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_5</text> <!-- stalkers killed --> </stat>
<stat x="570" y="150" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_6</text> <!-- founded artefacts --> </stat> <stat x="570" y="198" width="30" height="16"> <text align="l" font="letterica18" r="220" g="220" b="220">pda_stat_7</text> <!-- founded treasures --> </stat> </stat_info> [/cut] Может по другому регистрируется или пример неудачный?
|
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 15.11.2016, 17:48 | Сообщение # 857 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата men_stalker ( ) Вот элементарный пример Данный пример соответствует заявленным вам требованиям: внутри нода создать несколько нодов.
Цитата men_stalker ( ) который при это не работает Он то работает, да читается не скриптом.
Цитата men_stalker ( ) Может по другому регистрируется или пример неудачный А более внятно изложить свои требования к элементу?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Ср, 16.11.2016, 15:43 | Сообщение # 858 |
Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, вот это должно регистрироваться одной строкой в скрипте прорисовки типа xml:InitStatic("actor_icon_over_***",self.background_main)
Код <actor_icon_over_b x="71" y="239" width="167" height="1" stretch="1"> <texture>ui_inGame2_pda_ranking_icon_over_line_h</texture> </actor_icon_over_b> <actor_icon_over_top x="238" y="92" width="1" height="148" stretch="1"> <texture>ui_inGame2_pda_ranking_icon_over_line_h</texture> </actor_icon_over_right> Т.е. внутри одного нода - несколько. Регистрируется только основной нод, при это работаю и все остальные внутренние.
Сообщение отредактировал men_stalker - Ср, 16.11.2016, 17:13 |
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 17.11.2016, 17:44 | Сообщение # 859 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| men_stalker, Пробуйте:
Код <icon x="71" y="239" width="167" height="1" stretch="1"> <texture...</texture> <texture...</texture> <texture...</texture> </icon>
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Сб, 03.12.2016, 13:28 | Сообщение # 860 |
Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, не работает, координаты к текстуре (внутри нода) влияют на саму текстуру внутри файла. Здравствуйте, нашёл довольно интересный материал "GUI Энциклопедия вооружения." от Geonezis, начал копаться и нашёл строку "current_mode= " в колбеках кнопок прописано "current_mode=1", "current_mode=2" и т.д. Потом они используются как условия, и всё работает.
Я повесил на него: if current_mode==2 then *** end И при этом команда выполняется только после перезапуска гуи. В чём может быть проблема? Заранее спасибо!
Добавлено (03.12.2016, 13:28) --------------------------------------------- Как задать условие на неимение инфопоршня в скрипте?
Сообщение отредактировал men_stalker - Сб, 03.12.2016, 13:31 |
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 03.12.2016, 19:05 | Сообщение # 861 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата men_stalker ( ) Как задать условие на неимение инфопоршня в скрипте?
Код if not has_alife_info("инфопорция") then
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
prohodchik | Дата: Чт, 15.12.2016, 11:54 | Сообщение # 862 |
Новичок
Пользователи
Сообщений: 50
| Мое почтение, народ! Возможно, вопрос глупый и ответ на него уже давали. Как можно реализовать получение дамага и даже смерть НПС и мутантов в аномалиях? Речь идет о ЗП.
Проект в разработке – "Болотные легенды"
|
|
|
Эти 0 пользователя(ей) поблагодарили prohodchik за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 15.12.2016, 12:43 | Сообщение # 863 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| prohodchik, Смотрите как это реализовано в моде Припять.Точка Отсчёта. Главный файл там bind_anomaly_field.script.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Пн, 26.12.2016, 15:41 | Сообщение # 864 |
Инженер «Свободы»
Свобода
Сообщений: 184
| Здравствуйте, как несколько xml нодов задать одной переменной? T.e. есть два нода мы задаём в скрипте переменной эти ноды и потом прописываем прорисовку нодов по переменной, это вообще возможно?Добавлено (26.12.2016, 12:40) --------------------------------------------- Здравствуйте, как задать перевыполнение любой функции в гуи классе? То есть после того как функция уже прочиталась и выполнилась, надо её ещё раз прочитать и выполнить (любым способом) Добавлено (26.12.2016, 15:41) --------------------------------------------- Как сделать чтобы функция в гуи окне начала работать только после выполнения условия? (полностью вся)
|
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 27.12.2016, 08:36 | Сообщение # 865 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата men_stalker ( ) То есть после того как функция уже прочиталась и выполнилась, надо её ещё раз прочитать и выполнить (любым способом) Вызовите функцию по имени.
Цитата men_stalker ( ) Как сделать чтобы функция в гуи окне начала работать только после выполнения условия? Проверять выполнение условия до выполнения основного кода функции.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Вт, 27.12.2016, 13:14 | Сообщение # 866 |
Инженер «Свободы»
Свобода
Сообщений: 184
| Цитата denis2000 ( ) Вызовите функцию по имени. Простите если туплю, но как?, ведь функцию можно запустить в начале класса, она проверятся лишь раз при запуске и, если условие на начало запуска соответствует, то она работает, или же если повесить на кнопку но при вызывании (как угодно) xml:InitStatic() игра вылетает, ссылаясь на нехватку памяти. Как можно прописать что бы функция всегда (постоянно) работала и проверялась на наличие условие? А и ещё забыл спросить чем координально CreateStatic (наткнулся в движке) отличается от InitStatic?
Сообщение отредактировал men_stalker - Вт, 27.12.2016, 14:21 |
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 27.12.2016, 19:15 | Сообщение # 867 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата men_stalker ( ) Простите если туплю, но как? Подробнее разъясняйте что нужно сделать.
Цитата men_stalker ( ) Как можно прописать что бы функция всегда (постоянно) работала и проверялась на наличие условие? Регистрируйте колбэк на обновление. Как это делается.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Ср, 28.12.2016, 15:42 | Сообщение # 868 |
Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, спасибо огромное!
Добавлено (28.12.2016, 15:42) --------------------------------------------- Здравствуйте получил вылет при регистрации в function actor_binder:use_inventory_item(obj)
Код if string.find(obj:section(), "pda") then xr_s.register_callback("update", ui_gui_elements.pda_alkach:logs, {current_mode==3(), 4000}) end И в функции выключения
Код xr_s.unregister_callback ("update", ui_gui_elements.pda_alkach:logs)
[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 : ....Е.Р. - Зов Припяти\gamedata\scripts\xr_logic.script:1284: attempt to index local 'obj' (a nil value)
stack trace:[/cut]
Сообщение отредактировал men_stalker - Ср, 28.12.2016, 19:04 |
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 29.12.2016, 09:05 | Сообщение # 869 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| men_stalker, Утверждает, что obj=nil, а значит никакие манипуляции с этим объектом невозможны.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
men_stalker | Дата: Пт, 30.12.2016, 16:20 | Сообщение # 870 |
Инженер «Свободы»
Свобода
Сообщений: 184
| Здравствуйте, есть функция function pda:InitControls() (вызванная командой self:InitCallBacks() в function pda:__init(owner) super()) Есть функция xr_s.register_callback("update", pda:InitControls, {current_mode==1, current_mode==2, current_mode==3}) которая не воспринимает pda:InitControls как функцию. Как заставить воспринимать как функцию? или надо обозначить в функции вызова апдейта, что pda - это класс?
|
|
|
Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|