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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
metalistДата: Пт, 23.08.2013, 00:15 | Сообщение # 271
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 15 ]

Цитата (denis2000)
Анализируйте расстояние между позициями.

Дело в том, что расстояния между позициями бывают одинакавыми как при виде от 1-го, так и при виде от 3-го лица. Что не есть гуд. Нужно надёжное отличие видов. Вот так sad
 
9vova8Дата: Пт, 23.08.2013, 11:38 | Сообщение # 272
Новичок
Пользователи
Сообщений: 91
Награды: 2
Репутация: [ 6 ]

denis2000, получаеться вот такой вылет
[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 : ...k.e.r. - Зов Припяти\gamedata\scripts\jumping.script:2: attempt to call method 'jump_speed' (a nil value)


stack trace:[/cut]
[cut=Вот файлы]
Из bind_stalker.script

if obj~=nil then
jump_script.on_use_item(obj)
end

Jump_script.script

function on_use_item(sect)
local actor=db.actor
local item_name=sect:section()

if item_name =="conserva" then
jumping.set_jump_speed(12)
elseif item_name =="bread" then
jumping.set_jump_speed(9)
end
end

jumping.script

function set_jump_speed(num)
db.actor:jump_speed(num)
end[/cut]


 
makdmДата: Пт, 23.08.2013, 14:18 | Сообщение # 273
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

9vova8, движковой функции jump_speed в природе не существует.

Терпение......
И все получится!
 
9vova8Дата: Пт, 23.08.2013, 14:31 | Сообщение # 274
Новичок
Пользователи
Сообщений: 91
Награды: 2
Репутация: [ 6 ]

makdm, а каким-то образом её можно добавить?

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

Цитата (metalist)
Нужно надёжное отличие видов.

Цитата (9vova8)
а каким-то образом её можно добавить?

Чего нет того нет. Но конечно вы можете самостоятельно внести все необходимое в движок, если конечно обладаете достаточно прокачанным скилом програмирования на ассемблере.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
9vova8Дата: Пт, 23.08.2013, 18:21 | Сообщение # 276
Новичок
Пользователи
Сообщений: 91
Награды: 2
Репутация: [ 6 ]

denis2000, а нельзя каким-то другим способом в нужный мне момент (по инфопорции) изменить высоту прыжка?

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

9vova8, Если отбрасывать магию, то параметр прыжка может быть в нетпакете объекта actor научитесь его изменять.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
metalistДата: Сб, 24.08.2013, 20:53 | Сообщение # 278
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 15 ]

как найти стринг в файле user.ltx. Подскажите, плз. скажем такой вариант — string.find ("user.ltx", "bind") выбивает жука(((
 
denis2000Дата: Сб, 24.08.2013, 21:11 | Сообщение # 279
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

metalist, Функция string.find() позволяет найти подстроку в строке, но не строку в файле.

О возможности найти в файле не ini-формата и не в директории gamedata строку мне ничего не известно, но может кто-то знает такую возможность?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
9vova8Дата: Вс, 25.08.2013, 12:40 | Сообщение # 280
Новичок
Пользователи
Сообщений: 91
Награды: 2
Репутация: [ 6 ]

denis2000,
Цитата (denis2000)
нетпакете объекта actor
а это где?




Сообщение отредактировал 9vova8 - Вс, 25.08.2013, 12:40
 
strelok200Дата: Пн, 26.08.2013, 15:24 | Сообщение # 281
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

Я хочу добавить видеоролик в сталкер ЗП и возник такой вопрос: регистрировать как я понял надо в ui файлах, а как его вызвать? Допустим, после получения инфо, и какого разрешения он должен быть

Добавлено (26.08.2013, 15:24)
---------------------------------------------
просто сделал интро ролик, заменил стандартный на новый и отображается только верхний левый угол, как это можно поправить?

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

Цитата (strelok200)
регистрировать как я понял надо в ui файлах

Да примерно вот так:
[cut]
Код
<my_home_video>
     <play_each_item>1</play_each_item>
     <global_wnd x="0" y="0" width="1024" height="768">
      <auto_static x="0" y="0" width="1024" height="768" stretch="1">
       <window_name>back</window_name>
       <texture>intro\intro_back</texture>
      </auto_static>
     </global_wnd>

     <item type="video">
      <sound>characters_voice\scenario\video\my_home_video</sound>
      <pause_state>on</pause_state>
      <can_be_stopped>off</can_be_stopped>
      <function_on_stop>xr_effects.end_my_home_video</function_on_stop>
      <video_wnd x="0" y="0" width="1024" height="768" stretch="1">
       <texture x="0" y="1" width="512" height="286">intro\my_home_video</texture>
      </video_wnd>
     </item>
    </my_home_video>

[/cut]
Цитата (strelok200)
а как его вызвать

Код
=run_tutorial(my_home_video)


Цитата (strelok200)
какого разрешения он должен быть

Желательно 1024х768, или кратное ему в любом случае разрешение указано в строке:
<texture x="0" y="1" width="512" height="286">intro\my_home_video</texture>


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

Цитата (9vova8)
а это где?

Это здесь


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

Всем, привет!
У меня следующий вопрос.
Платформа: COP 1.6.0.2.
Требуется: перевести всех сталкеров из онлайн в офлайн.
Написал супер-пупер скрипт: biggrin
[cut=Скрипт]
for i = 1,65534 do
-- Берём только те объекты, которые в онлайн
local object = level.object_by_id( i )
if object then
if IsStalker( object ) then
local sim = alife ()
if sim ~= nil then
sim:set_switch_online ( i, false)
sim:set_switch_offline ( i, true )
end
end
end
end
[/cut]
Это работает с отдельными Сталкерами, которые не состоят в скваде, но не работает со Сталкерами в Сквадах, выполняющих работу.
Посмотрел файл se_squad_group.script
Вроде, как возможность перевода сквада в оффлайн есть. ( По крайней мере метод can_switch_offline прописан ).
По аналогии со Сталкерами, вроде как должна работать движковая функция set_switch_offline
Вроде, как достаточно прописать в эту функцию ID сквада и он должен перейти в оффлайн ( Это я так думаю biggrin ).
Но возник вопрос:
Если я могу вычислить, что объект - это Сталкер, с помощью функции IsStalker( object ) ,
То как вычислить, что объект - это сквад?
Как должна выглядеть функция IsSquad( object ) ?
Что-то я пока не могу ничего придумать. Есть у кого мысли на этот счёт?


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


Сообщение отредактировал makdm - Вт, 27.08.2013, 00:15
 
denis2000Дата: Вт, 27.08.2013, 08:09 | Сообщение # 285
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

makdm, Что-то типа такого:
Код
function IsSquad(object,class_id)
local id = class_id or get_clsid(object)
return id == clsid.online_offline_group_s


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