IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Скрипты

 
 Орион
сообщение 13.07.2009, 11:34
Сообщение #101


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251




FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе (IMG:style_emoticons/default/smile.gif) Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23
Перейти в начало страницы
 
 
 
Ответов
 123456
сообщение 02.12.2009, 00:08
Сообщение #102


Ветеран
*****

Группа: Участник
Сообщений: 94
Регистрация: 22.06.2009
Пользователь №: 11155



Никто незнает (IMG:style_emoticons/default/unsure.gif)
Перейти в начало страницы
 
 
 shad0w
сообщение 02.12.2009, 00:14
Сообщение #103


offline
**********************

Группа: Участник
Сообщений: 5007
Регистрация: 20.02.2009
Пользователь №: 9881



Цитата(jocker_27 @ 06.10.2009, 13:56) *
Комрады, а можно (чисто теоретически) привязать alife к мультиплееру?

Цитата
jocker_27, Нет, невозможно.

Орион,соответственно,сделать в мультиплеере спавн предметов в инвентарь по нажатию кнопки в меню тоже никак?
Перейти в начало страницы
 
 
 Орион
сообщение 02.12.2009, 00:35
Сообщение #104


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251



Shadow., Даже не пробовал... попробуй) Проблема в том, что не все далеко переменные глобальные инициализируются в мп-режиме. Следовательно, не все методы будут работать. Спавн через alife():create() вряд ли будет работать по понятным причинам (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 123456
сообщение 02.12.2009, 01:17
Сообщение #105


Ветеран
*****

Группа: Участник
Сообщений: 94
Регистрация: 22.06.2009
Пользователь №: 11155



(IMG:style_emoticons/default/z_cry.gif)
Перейти в начало страницы
 
 
 shad0w
сообщение 02.12.2009, 15:03
Сообщение #106


offline
**********************

Группа: Участник
Сообщений: 5007
Регистрация: 20.02.2009
Пользователь №: 9881



Цитата(Орион @ 02.12.2009, 00:35) *
Shadow., Даже не пробовал... попробуй) Проблема в том, что не все далеко переменные глобальные инициализируются в мп-режиме. Следовательно, не все методы будут работать. Спавн через alife():create() вряд ли будет работать по понятным причинам (IMG:style_emoticons/default/smile.gif)

Верно,не работает. (IMG:style_emoticons/default/smile.gif)
Скрипт спавна в принципе делал давно,как раз через alife():create(), в сингле работает исправно,а вот в мультиплеере вылет с уж не помню каким логом.
А сделать как-то иначе возможно?
Перейти в начало страницы
 
 
 Орион
сообщение 02.12.2009, 15:14
Сообщение #107


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251



Shadow., Угу. Дизассемблер и учебник по языку асмы в руки. Поделишься результатами (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Scarabay
сообщение 05.12.2009, 17:14
Сообщение #108


Мастер Игры
************

Группа: Участник
Сообщений: 1340
Регистрация: 22.07.2009
Пользователь №: 11377



Всем привет. Подскажите пожалуйста, как создать спейс рестриктор через скрипт, и чтобы он использовал логику из .лтх файла. Заранее спасибо
Перейти в начало страницы
 
 
 SaleR
сообщение 05.12.2009, 18:06
Сообщение #109


Игровой Эксперт
***************

Группа: Участник
Сообщений: 2412
Регистрация: 03.08.2009
Из: Шарья
Пользователь №: 11509



Scarabay, вот статья со сталкер-портала:
Тыц
Первое обновление. Теперь можно выбирать, какой формы будет рестриктор, Шар или Куб.
Для Куба устанавливаются размеры по x,y,z.

Второе обновление. Теперь, в качестве кастом даты, можно указывать ltx файлы, из папки config. Путь указывается таким образом:

local ltx = "scripts\имя_файла.ltx"

Итак. Создаём файл _new_create.script, если такового ещё нет, и добавляем в него нашу функцию:

function create_restr(storid, pos_restr, lvid_restr, gvid_restr, custom_restr, radius_restr, ax_x, ax_y, ax_z)
local obj = alife():create("space_restrictor", pos_restr, lvid_restr, gvid_restr)

local packet = net_packet()
obj:STATE_Write(packet)
----------------------- load ------------------------------
local game_vertex_id = packet:r_u16()
local cse_alife_object__unk1_f32 = packet:r_float()
local cse_alife_object__unk2_u32 = packet:r_u32()
local level_vertex_id = packet:r_u32()
local object_flags = packet:r_u32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_u32()
local spawn_story_id = packet:r_u32()
local shape_count = packet:r_u8()
for i=1,shape_count do
local shape_type = packet:r_u8()
if shape_type == 0 then
local center = packet:r_vec3()
local radius = packet:r_float()
else
local axis_x = packet:r_vec3()
local axis_y = packet:r_vec3()
local axis_z = packet:r_vec3()
local offset = packet:r_vec3()
end
end

local restrictor_type = packet:r_u8()
-------------------------- save -----------------------------
packet:w_begin(game_vertex_id)
packet:w_float(cse_alife_object__unk1_f32)
packet:w_u32(cse_alife_object__unk2_u32)
packet:w_u32(level_vertex_id)
packet:w_u32( bit_not(193) )

if custom_restr ~= nil then
if string.find (custom_restr, '.ltx') ~= nil then
custom_restr = '[logic]\n cfg = '..custom_restr..'\n'
end
packet:w_stringZ(custom_restr)
else
packet:w_stringZ(custom_data)
end

if storid ~= nil then
packet:w_u32(storid)
else
packet:w_u32(story_id)
end

packet:w_u32(spawn_story_id)

packet:w_u8(1)
if radius_restr ~= nil then
packet:w_u8(0)
packet:w_vec3(vector():set(0, 0, 0))
packet:w_float(radius_restr)
elseif radius_restr == nil and ax_x == nil then
packet:w_u8(0)
packet:w_vec3(vector():set(0, 0, 0))
packet:w_float(2.5)
else
packet:w_u8(1)
packet:w_vec3(vector():set(ax_x, 0, 0))
packet:w_vec3(vector():set(0, ax_y, 0))
packet:w_vec3(vector():set(0, 0, ax_z))
packet:w_vec3(vector():set(0, 0, 0))
end

packet:w_u8(restrictor_type)
-----------------------------------------------------
packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())
end

Вызов спавна будет производиться из других функций, других файлов, таким образом:

для формы Шар:
_new_create.create_restr(sid, pos, lv, gv, ltx, radius)

для Формы Куб:
_new_create.create_restr(sid, pos, lv, gv, ltx, nil, x, y, z)

Где:
sid --стори айди рестриктора (или nil, если не используется)
pos --позиция спавна рестриктора vector():set(x,y,z)
lv --левел вертекс позиции спавна
gv --гейм вертекс позиции спавна
ltx --кастом дата рестриктора
radius --радиус зоны рестриктора (в метрах) (или nil, если используется форма куба)
x,y,z --размеры куба, по x,y,z соответственно.

Теперь разберём такие настройки как, ltx и sid.

---------------------------------
ltx

Кастом дата рестриктора. Тобишь, логика по которой будет работать данный рестриктор.
Чтобы указать логику из статитеского файла ltx, находящегося в папке config, нужно прописать так:

local ltx = "scripts\\имя_файла.ltx"

или

local ltx = "misc\\имя_файла.ltx"

или

local ltx = "имя_файла.ltx"

В зависимости от того, где лежит требуемый файл, относительно папки config.

Если нас статический ltx не устраивает. То можно прописать логику динамически.
Тобишь, в той же функции, от куда и будет вызываться спавн рестриктора.
Итак, пред вызовом спавна создаём локальную переменную ltx, и в значении данной переменной прописываем всю логику нашего рестриктора.
Например, установим эффект активации слота "ножь", при входе ГГ в рестриктор:

local ltx = "[logic]\n"..
"active = sr_idle@in\n"..

"[sr_idle@in]\n"..
"on_actor_inside = %=activate_knife% sr_idle@out\n"..

"[sr_idle@out]\n"..
"on_actor_outside = sr_idle@in\n"


Разберём особенности динамического ltx:

\n -прописать в новой строке, динамического файла ltx.
.. -привязать следующую строку к общей схеме динамического ltx.
Каждая строка, обязательно заключается в кавычки, кроме двоеточия.
В последней строке, двоеточие запрещается ставить категорически.

Если логика рестриктора, не предусмотрена, то вместо неё ставить nil.

-------------------------------------------------------
sid

Стори айди рестриктора. Используется при отслеживании попадания неписей под рестриктор. Если не используется, то ставить значение nil.

-------------------------------------------------------

Есть возможность использовать значения по умолчанию:

_new_create.create_restr(sid, pos, lv, gv, ltx)

или

_new_create.create_restr(sid, pos, lv, gv)
если custom_data не предусматривается.

По умолчанию рестриктор имеет форму Шара, с радиусом 2.5 метра.

Всё. Пробуйте. У меня работает отлично.
Перейти в начало страницы
 
 
 macron
сообщение 16.12.2009, 20:36
Сообщение #110


Игровой Бог
**********************

Группа: Участник
Сообщений: 6178
Регистрация: 22.02.2006
Из: Париж
Пользователь №: 3089



Цитата(Shadow. @ 02.12.2009, 15:03) *
Скрипт спавна в принципе делал давно,как раз через alife():create(), в сингле работает исправно,а вот в мультиплеере вылет с уж не помню каким логом.
А сделать как-то иначе возможно?

Shadow., скрипты в мультиплеере - штука не простая. Вещи типа "alife():create()" там не должны работать в принципе. У меня точно срабатывали совсем примитивные скрипты на выполнение консольной команды (причем только на невыделенном сервере). Сам скрипт запускался через level.ltx конкретного уровня, туда добавлял:

[level_scripts]
script=ыыыы

где ыыыы - этоо файл gamedata\scripts\ыыыы.script. Вроде еще можно грузить через gamedata\config\script.ltx - там есть отдельные секции для каждого mp-режима.

ЗЫ: возник ряд вопросов по скриптам:
1. Можно ли скриптом разрешить трупу/с трупа жрать аптечку или еду? Чтобы на 6 патче не вылетало.

2. В 7 mp-патче значительно ускорен курсор в менюшках - очень резво реагирует на движение мышки, удобней вобщем. В его xrgame.dll добавлена такая фишка: CUICursor::UpdateCursorPosition. В 4 и 6 патче такого нет. Можно ли скриптом добавить "акселерацию" мышки в менюшках?

3. Нужен скрипт для переключения оружия из одного слота без захода в инвентарь: то есть, допустим, у нас в руках автомат и в рюкзаке автомат. Нажимаем на 3, и оружие меняется.
Перейти в начало страницы
 
 
 shad0w
сообщение 16.12.2009, 21:01
Сообщение #111


offline
**********************

Группа: Участник
Сообщений: 5007
Регистрация: 20.02.2009
Пользователь №: 9881



Цитата
Сам скрипт запускался через level.ltx конкретного уровня, туда добавлял:

[level_scripts]
script=ыыыы

Я всё делал через скрипт главного меню,мне так проще,на основе вызова Spawnmenu,что по кнопке S(закомменчено в финалке).Фактически,только добавить нужные функции и всё,ну на крайняк тупо вызов функции из другого скрипта,чтобы поопрятнее выглядело.
Перейти в начало страницы
 
 
 eNdimion
сообщение 20.12.2009, 12:14
Сообщение #112


Опытный Геймер
*******

Группа: Забанен
Сообщений: 180
Регистрация: 15.11.2009
Из: афганестан... дада
Пользователь №: 12995



...продолжаю работу одного человека по воссоздания крысы, как полноценно играбельного монстра, с модельками и анимацией всё в порядке, но:

вылеты
exp​ression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no exp​ression>
Arguments : LUA error: ...lker_soc\datas\gamedata\scripts\smart_terrain.script:1137: attempt to call method 'smart_terrain_id' (a nil value)

if нпс залезет в аномалию\его прибъёт другой монстр


exp​ression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no exp​ression>
Arguments : LUA error: ...alker_soc\datas\gamedata\scripts\xr_statistic.script:105: attempt to concatenate local 'community' (a nil value)

if гг убъёт нпс



Сообщение отредактировал whoami - 20.12.2009, 12:17
Перейти в начало страницы
 
 
 Darien
сообщение 25.12.2009, 19:08
Сообщение #113





Группа: Только зарегистрировался
Сообщений: 1
Регистрация: 25.12.2009
Пользователь №: 13338



Цитата(whoami @ 20.12.2009, 12:14) *
...продолжаю работу одного человека по воссоздания крысы, как полноценно играбельного монстра, с модельками и анимацией всё в порядке, но:

вылеты
exp​ression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no exp​ression>
Arguments : LUA error: ...lker_soc\datas\gamedata\scripts\smart_terrain.script:1137: attempt to call method 'smart_terrain_id' (a nil value)

if нпс залезет в аномалию\его прибъёт другой монстр


exp​ression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no exp​ression>
Arguments : LUA error: ...alker_soc\datas\gamedata\scripts\xr_statistic.script:105: attempt to concatenate local 'community' (a nil value)

if гг убъёт нпс


Я в этом не очень разбрираюсь, но ответить попробую:
1)Либо ты используешь метод класса, который не поддерживает этот метод, либо сам метод не существует.
2)Возможно, ты не правильно используешь concat. Помимо чисел и строк что-нибудь пытаешься соединить? Сейчас буду проверять из-за чего выскакивает.

Кидай сюда обе ф-ии, разберёмся.

Сообщение отредактировал Darien - 25.12.2009, 19:21
Перейти в начало страницы
 
 
 eNdimion
сообщение 03.01.2010, 11:53
Сообщение #114


Опытный Геймер
*******

Группа: Забанен
Сообщений: 180
Регистрация: 15.11.2009
Из: афганестан... дада
Пользователь №: 12995



спасибо за ответ...

Цитата
1)Либо ты используешь метод класса, который не поддерживает этот метод, либо сам метод не существует.

вообщето да, секция конфига крысы базирована на конфиге тушкана ([m_rat_e]:m_tushkano_e), но класс крысячий (IMG:style_emoticons/default/laugh.gif)

Цитата
2)Возможно, ты не правильно используешь concat.

эээм... скрипты вообщето я не трогал (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 dnepar
сообщение 03.01.2010, 11:55
Сообщение #115


Игрок
***

Группа: Забанен
Сообщений: 44
Регистрация: 05.11.2009
Пользователь №: 12877



люди тут вопрос у меня возник
Перейти в начало страницы
 
 
 eNdimion
сообщение 14.01.2010, 21:58
Сообщение #116


Опытный Геймер
*******

Группа: Забанен
Сообщений: 180
Регистрация: 15.11.2009
Из: афганестан... дада
Пользователь №: 12995



Код
[i]У объекта сталкера можно вызвать скриптовые функции
flags32 get_actor_relation_flags()
set_actor_relation_flags(flags32)

Значение для флагов в namespace game_object:

relation_attack
relation_fight_help_monster
relation_fight_help_human
relation_kill

Т.е. предполагается работь следующим образом:
Смотрим, когда есть такая возможность и актер рядом, что флажки не пустые.
В соответствии с поднятым флагом выполняем какое-то действие (устанавливаем диалог, играем звук/анимацию), а потом сбрасываем флаг.[/i]

честно сказать не очень шарю в скриптинге... это работает?
Перейти в начало страницы
 
 
 -=Kurt=-
сообщение 10.02.2010, 23:27
Сообщение #117


Ветеран
*****

Группа: Участник
Сообщений: 78
Регистрация: 19.09.2008
Пользователь №: 8981



Цитата(macron @ 16.12.2009, 21:36) *
ЗЫ: возник ряд вопросов по скриптам:
1. Можно ли скриптом разрешить трупу/с трупа жрать аптечку или еду? Чтобы на 6 патче не вылетало.
Я в любом случае не отвечу, н омне просто интересно, что значит эта фраза (IMG:style_emoticons/default/wink_old.gif) .
Цитата
3. Нужен скрипт для переключения оружия из одного слота без захода в инвентарь: то есть, допустим, у нас в руках автомат и в рюкзаке автомат. Нажимаем на 3, и оружие меняется.
+1 - тоже интересует этот вопрос. Макрон, ты случаем не над мп-модом трудишься? (IMG:style_emoticons/default/wink_old.gif)
Напоследок, вопрос ко всем: можноли в мп скриптом лечить актора при наличии у него в инвентаре аптечки?
Я давным-давно пробовал переделать сингловый скрипт, но ничего не вышло....
Перейти в начало страницы
 
 
 bill_gates
сообщение 10.04.2010, 21:23
Сообщение #118


Почти Игрок
**

Группа: Участник
Сообщений: 22
Регистрация: 16.07.2009
Пользователь №: 11319



Люди, а что такое нетпакет? И зачем он нужен?
Перейти в начало страницы
 
 
 rekongstor
сообщение 16.04.2010, 14:59
Сообщение #119


Игрок
***

Группа: Участник
Сообщений: 37
Регистрация: 01.10.2009
Из: Россия Гаджиево 109-40
Пользователь №: 12251



Как спавнить через Net Packet?
Перейти в начало страницы
 
 
 Scarabay
сообщение 24.07.2010, 22:19
Сообщение #120


Мастер Игры
************

Группа: Участник
Сообщений: 1340
Регистрация: 22.07.2009
Пользователь №: 11377



Всем привет. Может кто поделится функцией определения визуала нпс? Или хотя бы расскажите как считать необходимые данные из нет-пакета? Заранее спасибо.
Перейти в начало страницы
 
 
 djslavikoz
сообщение 29.09.2010, 07:25
Сообщение #121


Опытный Игрок
****

Группа: Участник
Сообщений: 53
Регистрация: 19.05.2010
Из: ukraine
Пользователь №: 13937



Подскажите пожалуста функцию спавна вертольота через скрипт. Желательно подробно что и куда нада писать
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 30.10.2020, 05:10