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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Вт, 18.02.2014, 19:00 | Сообщение # 421
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, вместо этой строчки пропишите

return


Терпение......
И все получится!
 
strelok200Дата: Чт, 20.02.2014, 18:49 | Сообщение # 422
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

Как перенести скриптово предмет во второй слот?

Без заморочек - никак. Расскажите подробнее задачу. denis2000

Добавлено (20.02.2014, 18:49)
---------------------------------------------
Мой предмет на классе артефакта, а артефакты (при активации) могут находиться в оружейном слоте. Как-нибудь основываясь на этом думаю можно реализовать

 
denis2000Дата: Чт, 20.02.2014, 19:20 | Сообщение # 423
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

strelok200, ОК, только скриптом невозможно поместить предмет в выбранный слот. Это может сделать только движок. А он это сделает при условии, что слот свободен и нет других предметов претендующих на этот слот.

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

Здравствуйте! У меня вопрос про отрисовке текстур в GUI. Я хочу, чтобы на одном и том же месте окна рисовалась текстура какого-то предмета инвентаря ГГ в зависимости от условий. Можно, конечно сделать так:  в функции InitControls() для каждой картинки описать свой элемент, типа 

Код
self.power_small_on = xml:InitStatic("message_box_run_machine:power_small_on",self.run_mashine_form)
self.power_small_off = xml:InitStatic("message_box_run_machine:power_small_off",self.run_mashine_form)

и для каждого элемента сделать описание, выводящее на одно и то же место разные текстуры, типа

Код
<power_small_on x="550" y="120" width="103" height="46">
                     <texture>ui_inv_btn_buy_h</texture>
         </power_small_on>
         <power_small_off x="550" y="120" width="103" height="46">
                     <texture>ui_inv_btn_buy_e</texture>
         </power_small_off>
 
и потом выводить (убирать) эти элементы функцией self.power_small_on:Show(true) или (false).

Однако, если этих текстур несколько десятков, мне кажется, делать так будет громоздко.

Есть ли другой способ выводить разные текстуры на одно и тоже место в окне, например подставлять имя текстуры в поле  <texture>...</texture> скриптовым путём?


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
FantomICWДата: Чт, 20.02.2014, 21:50 | Сообщение # 425
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

NIV, можно сделать некое пространство для текстуры:
Код
<picture x="128" y="32" width="273" height="284">
        <texture>первоначальная_текстура</texture>
          </picture>

Дальше регистрируем в скрипте:
Код
self.picture=xml:InitStatic("форма:picture",self.форма)

Используем такое действие для замены текстуры в пространстве:
Код
self.picture:InitTexture("название_зарегистрированной_текстуры")



 
strelok200Дата: Пт, 21.02.2014, 11:48 | Сообщение # 426
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

denis2000, Я сделал примерно так
Код
function artefuckt_hud()
local weapon = db.actor:item_in_slot(2)
if db.actor:active_slot()==2 and weapon then
local tmp
if weapon then
tmp = weapon:section()
else
tmp = "none"
end
if (string.find(tmp, "wpn" )) then
db.actor:drop_item(weapon)
alife():create("af_night_star", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
alife():release(weapon)
db.actor:give_info_portion("gg_final_glock")
end
end
end

Ф-ция освобождает слот от любого ствола, имеющего секцию wpn_... , но почему-то арт не перемещается в слот


Сообщение отредактировал strelok200 - Пт, 21.02.2014, 11:49
 
denis2000Дата: Пт, 21.02.2014, 13:31 | Сообщение # 427
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

strelok200
1. Конструкция
Код
db.actor:drop_item(weapon)  alife():release(weapon)
сомнительная, зачем сначала ронять чтобы потом удалить?
2. А с чего движок должен перемещать предмет? Вы ему хотябы намекните на это:
Код
db.actor:activate_slot(2)

3. Вы насильно отбираете ствол у ГГ, а потом его вернете? И если ответ "да" то, как вы собираетесь вернуть установленные на нем апгрейды?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
strelok200Дата: Пт, 21.02.2014, 19:04 | Сообщение # 428
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

Цитата denis2000 ()
сомнительная, зачем сначала ронять чтобы потом удалить?
Хотел потом адаптировать под "квестовую ситуацию". Сейчас эта ф-ция тестовая
Цитата denis2000 ()
А с чего движок должен перемещать предмет? Вы ему хотябы намекните на это:
Не понимает намека
Цитата denis2000 ()
3. Вы насильно отбираете ствол у ГГ, а потом его вернете? И если ответ "да" то, как вы собираетесь вернуть установленные на нем апгрейды?
Опять же зависит от концепции квеста, с которой я ещё не совсем определился
 
makdmДата: Пт, 21.02.2014, 19:56 | Сообщение # 429
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

strelok200, тут дело такое. Я думаю, что движок не будет вставлять в свободный слот артефакт "автоматом" при спавне. 
Когда вы спавните артефакт в рюкзак ГГ, то движок же не вставляет артефакт сразу в свободный слот ( контейнер ) на бронекостюме ГГ.
Движок, видимо, вставляет " автоматом" только те предметы в свободный слот, которые ему "прописаны". Я имею ввиду, что движок, скорее всего,  проверяет класс объекта и уже принимает решение вставлять его в свободный слот или нет.
Это только моё предположение, так как описание и исходники ПЫСы лично мне  не предоставили.  smile


Терпение......
И все получится!
 
denis2000Дата: Пт, 21.02.2014, 20:12 | Сообщение # 430
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата strelok200 ()
Не понимает намека

Если вы принудительно активируете слот 2 (для которого предназначен анимированный предмет), а предмет в слот не попадает, то причина в том, что или движек не видит предмет подходящий для этого слота или как сказал makdm предмет не попадает в слот из-за не соответствия класса объкта данному слоту (все же с большей вероятностью туда попадет объект классом оружия, а не артефакт).
В данном случае я все-же рекомендую вам использовать слот 5 (бинокль), а использовать предмет классом оружие для 5-го слота, поскольку я многократно так делал и проблем не наблюдал.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
strelok200Дата: Сб, 22.02.2014, 16:30 | Сообщение # 431
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

makdm, denis2000, Спасибо! Ваши советы помогли smile
А не знаете как поставить запрет на смену активного слота?
 
denis2000Дата: Сб, 22.02.2014, 21:18 | Сообщение # 432
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата strelok200 ()
запрет на смену активного слота?

Непосредственно это действие запретить нельзя, можно только запретить вообще принимать команды игрока:
Код
level.disable_input()
, а потом после разрешить:
Код
level.enable_input()


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

Подскажите, плиз, как вызывается всплывающее окно с описанием предмета и его эффектами при наведении курсора на предмет в инвентаре Актора? Есть новый GUI, в нём рисуется текстура предмета, хочу при наведении для неё вызывать такое же описание.

Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
denis2000Дата: Пн, 24.02.2014, 10:57 | Сообщение # 434
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата NIV ()
как вызывается всплывающее окно с описанием предмета и его эффектами при наведении курсора на предмет в инвентаре Актора

Это делается движком автоматически. Соответственно вам, для своего ХУД-элемента, придется делать все это вручную.


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

Здравствуйте! Есть пара вопросов:

1) Как использовать выражение return, чтобы функция возвращала 2 (или n) значений?

2) Про всплывающее окно с описанием предмета:

В xml-описаниии текстуры можно использовать параметр hint
<picture x="128" y="32" width="273" height="284" hint = "всплывающий текст">
<texture>первоначальная_текстура</texture>
</picture>

Вопрос - можно ли поменять описание для hint, аналогично, как это делали командой InitTexture для текстуры?
Либо
Цитата denis2000 ()
для своего ХУД-элемента, придется делать все это вручную.
Какова должна быть последовательность действий? Может есть пример в каком-то моде?


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