Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скрипты
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6
123456
Никто незнает unsure.gif
shad0w
Цитата(jocker_27 @ 06.10.2009, 13:56) *
Комрады, а можно (чисто теоретически) привязать alife к мультиплееру?

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

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

Верно,не работает. smile.gif
Скрипт спавна в принципе делал давно,как раз через alife():create(), в сингле работает исправно,а вот в мультиплеере вылет с уж не помню каким логом.
А сделать как-то иначе возможно?
Орион
Shadow., Угу. Дизассемблер и учебник по языку асмы в руки. Поделишься результатами smile.gif
Ронин
Всем привет. Подскажите пожалуйста, как создать спейс рестриктор через скрипт, и чтобы он использовал логику из .лтх файла. Заранее спасибо
SaleR
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
Цитата(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
Цитата
Сам скрипт запускался через level.ltx конкретного уровня, туда добавлял:

[level_scripts]
script=ыыыы

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

вылеты
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 гг убъёт нпс

Darien
Цитата(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. Помимо чисел и строк что-нибудь пытаешься соединить? Сейчас буду проверять из-за чего выскакивает.

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

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

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

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

эээм... скрипты вообщето я не трогал smile.gif
dnepar
люди тут вопрос у меня возник
eNdimion
Код
[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=-
Цитата(macron @ 16.12.2009, 21:36) *
ЗЫ: возник ряд вопросов по скриптам:
1. Можно ли скриптом разрешить трупу/с трупа жрать аптечку или еду? Чтобы на 6 патче не вылетало.
Я в любом случае не отвечу, н омне просто интересно, что значит эта фраза wink_old.gif .
Цитата
3. Нужен скрипт для переключения оружия из одного слота без захода в инвентарь: то есть, допустим, у нас в руках автомат и в рюкзаке автомат. Нажимаем на 3, и оружие меняется.
+1 - тоже интересует этот вопрос. Макрон, ты случаем не над мп-модом трудишься? wink_old.gif
Напоследок, вопрос ко всем: можноли в мп скриптом лечить актора при наличии у него в инвентаре аптечки?
Я давным-давно пробовал переделать сингловый скрипт, но ничего не вышло....
bill_gates
Люди, а что такое нетпакет? И зачем он нужен?
rekongstor
Как спавнить через Net Packet?
Ронин
Всем привет. Может кто поделится функцией определения визуала нпс? Или хотя бы расскажите как считать необходимые данные из нет-пакета? Заранее спасибо.
djslavikoz
Подскажите пожалуста функцию спавна вертольота через скрипт. Желательно подробно что и куда нада писать
сталкероид
Цитата(bill_gates @ 10.04.2010, 21:23) *
Люди, а что такое нетпакет? И зачем он нужен?

Буквально "сетевой пакет". Небольшая область памяти (8 кбайт), в которую записывается текущее состояние какого-либо объекта (актора, непися и т.д.), т.е. количество лута в инвентаре, список хабара в нычках, выполненные квесты, статистика и пр. Работать с ним можно, только когда объект находится в оффлайне.
Подробнее от нет_пакете и не только здесь
djslavikoz, какой именно вертолет? Если просто валяющийся на земле, то прописать его в алспавне по аналогии с другими трупиками вертолетов, а если прилетающий по какому-то событию, то тогда все гораздо сложнее - надо прописать рестриктор и написать вертолету логику (можно глянуть например тут).
djslavikoz
Сталкероид
В основном я научился спавнить через all.spawn . Ну примерно вот так.

[10001]
; cse_abstract properties
section_name = helicopter
name = esc_heli_55555
position = 57.8794326782227,-0.705963671207428,114.27214050293
direction = 0,-1.47526597976685,0

; cse_alife_object properties
game_vertex_id = 94
distance = 0
level_vertex_id = 345092
object_flags = 0xfffffffa
custom_data = <<END
[logic]
cfg = scripts\vertol.ltx

END

; cse_visual properties
visual_name = physics\vehicles\mi24\veh_mi24_u_01

; cse_motion properties
motion_name = helicopter\aaa.anm

; cse_ph_skeleton properties
skeleton_name = idle

; cse_alife_helicopter properties
cse_alife_helicopter__unk1_sz = idle
engine_sound = alexmx\helicopter
Вопрос так в чём моя проблема????? Проблема в том что я создал новую локацию(военную базу) и когда делаю таким способом как на ескейпе то получаю лог вот такого плана.
FATAL ERROR

[error]Expression : motion_ID.valid()
[error]Function : CKinematicsAnimated::ID_Cycle
[error]File : E:\stalker\patch_1_0004\xr_3da\SkeletonAnimated.cpp
[error]Line : 136
[error]Description : ! MODEL: can't find cycle:
[error]Arguments :


А с логикой и другим проблем нет я в курсе как ето делается.
Сталкероненавистник
Может ты анимацию модели установил не ту?
сталкероид
djslavikoz, проблема в логике вертолета. Что ты прописал в файле vertol.ltx?
Для примера вертолёт на блокпосте
[logic]
active = heli_move@idle

[heli_move@idle]
path_move = heli_blockpost_idle_move
engine_sound = false
on_info = {+твой_инфопоршень} heli_move@fly
combat_safe_altitude = -50

[heli_move@fly]
path_move = heli_blockpost_fly
engine_sound = true
combat_enemy = actor
combat_use_rocket = true
combat_use_mgun = true
rocket_delay = 3000
combat_safe_altitude = -70
on_timer = 120000 | heli_move@retreat

[heli_move@retreat]
path_move = heli_blockpost_idle_move
engine_sound = true
combat_use_rocket = false
combat_use_mgun = false
combat_safe_altitude = -50
on_timer = 120000 | heli_move@stop

[heli_move@stop]
path_move = heli_blockpost_idle_move
engine_sound = false

Вообще, ругается на то, что не может найти цикл анимации (есть такой файлик .skl).
Попробуй вообще убрать эту строку в алспавне motion_name = helicopter\aaa.anm . К чему это относится: cse_alife_helicopter__unk1_sz = idle?
djslavikoz
Господа скриптологи помогите пожалоста. Лог по вашей теме. Ето спавн вертольота.
Как написал мне на амк форуме один товарищ.... Цытирую

Надо дописать функцию в xr_effects.script, какую я не знаю, сам не делал.




! Unknown command: ERROR:object
* Log file has been saved successfully!

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
Lekzd
djslavikoz, вот нет, чтобы сравнить файлы без изменений и с изменениями (программа для этого специальная есть)
не уповай на экстрасенсов - их тут нет
nike88
djslavikoz допиши что-то типа
Код
function уровень_heli_mapspot(actor, npc, p)
    if p[1] and not level_tasks.is_map_spot_present( p[1], "anomaly_zone_location" ) then
        level_tasks.add_location( p[1], "anomaly_zone_location", "vertolyot!" )
    end
end
Trollz0r
Как можно получить имя текущей погодной секции? Нужно что-то типа level.get_weather_name()
Сталкероненавистник
Поставь ватчдог от АМК и смотри в консоли погодные секции. Проследи работу игры
Kolmogor
Цитата(RedPython @ 24.10.2010, 18:34) *
Как можно получить имя текущей погодной секции? Нужно что-то типа level.get_weather_name()

level.get_weather()
djslavikoz
Ребята вот пример спавна через скрипт:

local zombie_types = {"zombie_weak", "zombie_normal", "zombie_strong", "zombie_immortal", "zombie_ghost"}
function spawn_zombies( position, total )
local zombie_index
local new_pos, x_offset, z_offset
for zombie_index=1, total do
x_offset = math.random(5)
z_offset = math.random(5)
new_pos = position
new_pos.x = new_pos.x + x_offset
new_pos.z = new_pos.z + z_offset
alife():create(zombie_types[math.random(5)],new_pos,326087,91)
end
end
function zombie_story_1(actor, npc)
local spawn_point = vector():set(43.21, 2.14, 47.16)
spawn_zombies(spawn_point, 10)
end


Скажите пожалуйста ,а можно в этом скрипте прописать логику ?????
BelKa Production
djslavikoz, У меня вместо слов - черные линии. z_crazy.gif
Я не большой спец. по скриптам. Может я и ошибаюсь, но в скрипте логику приписать нельзя
Modera
угу её надо писать в конфе т.е. надо создать новый тип зомбей с костюм датой
K.D.
логику вписать можно. Но надо перезаписывать нет-пакет. Скрипт по объему вырастет сурово)
alg0r1tm
Помогите плиз разобратся в сне от АМК smile.gif
Цель такова: нужно сделать сон как в билдах через инвентарь smile.gif
Простите за банальность

Зы, не пинайте только) я в скриптах null smile.gif
Policai
Народ!!!!
Нужна помощь гуру!


Анимация - дверь сдвигающаяся всторону, 1 кость, сдвиг вправо на 1.5 метра, 3 секунды пауза и сдвиг обратно на место.(Самодельный обьект, ставлю через спавн, в сдк анимация работает)
Попытался запустить анимацию по анологии лабы х-8 из припяти.
В кустом дата прописана ссылка на логику, с текстом:


Дверь
[collide]
ignore_static

[animated_object]

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


Пульт
[logic]
active = ph_button@no_card

[ph_button@no_card]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_labx8_key)} ph_button@has_card

[ph_button@has_card]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@unlocked
on_info = {!actor_has_item(zat_a23_labx8_key)} ph_button@no_card

[ph_button@unlocked]
anim = idle
tooltip = st_lx8_button_press_true
on_game_timer = 20 | {-lx8_door_open} %+lx8_door_open =anim_obj_forward(lim_door_laba_hide)%
on_game_timer2 = 10 | {-lx8_green_on} %+lx8_green_on =turn_off(lx8_light_switch_1_red_id) =turn_on(lx8_light_switch_1_green_id)%
on_info = {=actor_in_zone(lim_sr_actor_in_lab) -lim_actor_in_lab} %+lim_actor_in_lab =create_squad(lx8_polter_squad:lim_smart_terrain)%

Всё проходит до запуска анимации, то есть без карты требует карту доступа, с картой появляется сообщение доступ разрешён, потом завис на 3-4 секунды, (в этот момент должна отработать анимация), и вылет с жалобой:

Лог
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 : ....r. - Зов Припяти\gamedata\scripts\xr_effects.script:1317: attempt to index field '?' (a nil value)
stack trace:

Понимаю что это всё туфта, просто я в скриптах ноль, и пытаюсь разобраться методом тыка.

xr_effects родной нетронутый. Подскажите куда ткнуться.
Ким
Policai,
xr_effects, строчки с 1314 по 1320:
function anim_obj_forward(actor, npc, p)
for k,v in pairs(p) do
if v ~= nil then
db.anim_obj_by_name[v]:anim_forward() - 1317 строка
end
end
end
твоя логика
[ph_button@unlocked]
anim = idle
tooltip = st_lx8_button_press_true
on_game_timer = 20 | {-lx8_door_open} %+lx8_door_open =anim_obj_forward(lim_door_laba_hide)% - ссылается на 1317 строку
on_game_timer2 = 10 | {-lx8_green_on} %+lx8_green_on =turn_off(lx8_light_switch_1_red_id) =turn_on(lx8_light_switch_1_green_id)%
on_info = {=actor_in_zone(lim_sr_actor_in_lab) -lim_actor_in_lab} %+lim_actor_in_lab =create_squad(lx8_polter_squad:lim_smart_terrain)%

Что-то не так с названием анимки, либо она не подходит.

Кстати, ты на ТЧ это делаешь?)
Если на ТЧ, то надо допилить этот самый эффектс, три функции, как минимум, добавить.
Policai
Цитата
Что-то не так с названием анимки, либо она не подходит.

Кстати, ты на ТЧ это делаешь?)
Если на ТЧ, то надо допилить этот самый эффектс, три функции, как минимум, добавить.


Ким
В этом то и проблема, анимка другая, на родной двери от этого скрипта 9 костей и работает на поворот, но она работает анимацией, и прописана анимацией, моя анимация - одна кость и работает на сдвиг, я просто не знаком со скриптами и попытался методом тыка подсунуть.
Платформа ЗП.
Гугл не помогает, а я не знаю как это делается. Мне нужно просто запустить выбранную анимацию по команде. Такая же проблема у меня и с мостом в рыжем лесу, не хочет он опускаться когда мне надо, попытался проследить скрипты с которыми он работает в оригинале ЧН, заблудился, там их штук 20 задействовано.
Вопрос такой: Как простейшим методом запустить выбранную анимацию по некой команде.
Ким
Policai, вот так и вызывается.
Пример простой логики для теста:
[logic]
active = ph_button@test

[ph_button@test]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@test1

[ph_button@test1]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@unlocked
on_info = {+door_open} %=anim_obj_forward(анимация_открытия)%

можно сделать привязку к кнопке (допустим нум7), котоаря будет выдавать нужный инфопоршень и логика двери даст команду на открытие.



Слушай, вот что, а логику ты привязываешь жэ к кнопке, а не к двери biggrin.gif
логика кнопки
[logic]
active = ph_button@test

[ph_button@test]
anim = idle
tooltip = tip_need_access_card
on_press = %+door_open%

логика двери

[logic]
active = ph_door@test

[ph_door@test]
anim = idle
on_info = {+door_open} %=anim_obj_forward(анимация_открытия)%

Насчёт двери не знаю как привязать анимку, вечером ещё гляну

По идее к двери не привязана анимка, она просто переходит в состояние "открыто" (во всяком случае анимка не указывается в логике, где-то в скриптах может быть)
там просто переход к другой логике, где дверь: "locked = false"

Чисто теоритечески логика для двери:
[logic]
active = ph_door@test

[ph_door@test]
anim = idle
on_info = {+door_open} %=anim_obj_forward(анимация_открытия)%
должна работать, по идее функция указана в xr_effects, а значит должна вызываться для любых объектов (такого типа). Попробуй привзять стандартную анимаку через эту логику, если заработает, значит и твоя анимка будет работать
Policai
Тут вроде понял, возник сразу вопрос, логика двери??? У меня простая анимация, вернее в максе вшил 3 одна просто открытие open, вторая закрытие close, и третья полный цикл: открытие, задержка в открытом состоянии 3 секунды и закрытие idle. Вшил также две контрольные точки, закрытая дверь и открытая дверь.
Теперь можно по подробнее по логике двери? что это? анимация вшитая или писать логику для неё надо?
Цитата
просто я в скриптах ноль, и пытаюсь разобраться методом тыка
Ким
Вообще в xr_effects указано три типа функций - anim_obj_forward, anim_obj_backforward и anim_obj_forward (reset, точного названия не помню). Соотвественно все три можно вызывать из логики.

"Тут вроде понял, возник сразу вопрос, логика двери??? У меня простая анимация, вернее в максе вшил 3 одна просто открытие open, вторая закрытие close, и третья полный цикл: открытие, задержка в открытом состоянии 3 секунды и закрытие idle. Вшил также две контрольные точки, закрытая дверь и открытая дверь.
Теперь можно по подробнее по логике двери? что это? анимация вшитая или писать логику для неё надо?"
я них.. ничего не понял biggrin.gif
Да, в спавне укажу путь к кастомдате двери, по этому пути создай лтх файл логики (с соответствующим названием), туда напиши логику, что я тебе написал) Ну, знаешь ли, без логики анимация как бы не работает biggrin.gif А вот то, что ты написал в первом посте - это привязка к кнопке, естественно кнопка не может открыться, это же кнопка, а не дверь)


Policai, там ничего сложного, поверь) Просто большинство скриптов написано.. эм.. как бы сказать.. некомпетентными людьми)

Вот смотри, логика для двери, используется у нас в "Обливион Лосте" (в бета тесте отсутствует):
[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
on_info = {+quest_gr_art_1_start} ph_door@close - игрок получает первое задание и дверь открывается, ну прям как в ТЧ laugh.gif
tip_open = tip_door_locked
snd_open_start = trader_door_locked
not_for_npc = true


[ph_door@close]
locked = false
closed = true
tip_open = tip_door_open
on_use = ph_door@open
not_for_npc = true

[ph_door@open]
locked = false
closed = false
on_use = ph_door@close
tip_close = tip_door_close
not_for_npc = true
Policai
Цитата
первом посте - это привязка к кнопке, естественно кнопка не может открыться, это же кнопка, а не дверь)


Я сделал по анологии, именно так сделан вход в лабу х-8. на двери прописано что это анимация а на пульте то что у меня в посте, я и сделал также....

biggrin.gif наверно по разному общаемся... да и трудно обьяснить тупому мне.... я работаю не с аллспавном а в сдк.

Я сделал так: ставлю физик\ доор, присваиваю визуал моей двери, прописываю там анимацию полную idle, (Мне надо чтоб дверь открылась и закрылась сама )в кустом дате указываю путь к файлу лтх с названием как у этой двери. В этом лтх прописываю:

[collide]
ignore_static

[animated_object]


ставлю пульт сбоку и прописываю в кустом дата путь к лтх с названием как и у пульта, в лтх прописываю:


[logic]
active = ph_button@no_card

[ph_button@no_card]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_labx8_key)} ph_button@has_card

[ph_button@has_card]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@unlocked
on_info = {!actor_has_item(zat_a23_labx8_key)} ph_button@no_card

[ph_button@unlocked]
anim = idle
tooltip = st_lx8_button_press_true
on_game_timer = 20 | {-lx8_door_open} %+lx8_door_open =anim_obj_forward(lim_door_laba_hide)%
on_game_timer2 = 10 | {-lx8_green_on} %+lx8_green_on =turn_off(lx8_light_switch_1_red_id) =turn_on(lx8_light_switch_1_green_id)%
on_info = {=actor_in_zone(lim_sr_actor_in_lab) -lim_actor_in_lab} %+lim_actor_in_lab =create_squad(lx8_polter_squad:lim_smart_terrain)%


Именно так сделано в ЗП вход в лабу х-8. Жирным выделено то что я поменял на своё, всё остальное так как было в оригинале. Карточку заспавнил рядышком и проверяю в игре.
Подхожу к пульту, появляется надпись нужна карта доступа, отхожу , беру карту, подхожу с картой, появляется надпись Открыть, нажимаю ввод появляется надпись Доступ разрешён потом 3-4 секунды и вылет с жалобой на строку 1317.
Я понимаю что эта анимация просто не прописана поэтому вылет. Я также понимаю что скорее всего логика на ту родную анимацию уже есть в файлах игры где то, вопрос где?

Извини пожалуста Ким что я такой навязчивый, просто у меня очень много анимаций по всем локам, и мне хотелось бы понять что то общее, чтоб не искать ответы на вопросы по каждой анимации.
Скорее всего я не прав, но мне кажется почему то, что будет проще работать если у меня будет какой то основной общий скрипт, прописанный с небольшими изменениями или на пульте с картой или на пульт с кнопками, или просто в спейс рестрикторе, скрипт который просто даёт команду на запуск выбранной анимации.

Ким
Policai, погоди, но зачем создавать анимку, если такая уже есть? Возьми аналог (те же двери лифта) и установи их на дверь (в тч - это проход со свалки к бару).
Policai
Тут ситуация такая что таких анимок нету..... Моя дверь это стена отьезжающая вбок.... или круглая бункерная дверь, плюс сама анимация с другими костями и цикличная. Те анимации которые уже есть подходящие для меня, я использую, с ними нет проблем, проблемы только с новыми анимациями.
Ким
Policai, тогда их надо прописывать в скриптах, но там будет куча возни. Вообще анимка отъезжающей двери быть таки должна)
Policai
В ЗП нету отьезжающих дверей...... повырезали всё, есть лифтовые двери но там нет анимации как таковой, там 2 положения, открытые и закрытые, типо актор не видит сам процесс открывания, думаю это сделать проще.... а мне надо именно чтоб был этот сам процесс открытия двери... в этом весь смак... с ТЧ и ЧН в ЗП не работают скрипты, с мостом в рыжем лесу такая же проблема....
Dart_Sergius
Цитата(Ким @ 23.02.2012, 13:12) *
Policai, тогда их надо прописывать в скриптах, но там будет куча возни.

Кстати интересный вопрос где их прописывать. Тоже интересовала эта проблема, решения пока не нашёл.
Ким
Dart_Sergius, скорее всего в ph_door, там смещение каждого объекта надо будет указать и т.д. Либо с нуля написать скрипт логики.
Policai
Ким
Всё разобрался..... сделал, всё гораздо проще чем кажется.....
Единственный минус что на любую анимацию я использую логику двери...... какие могут быть последствия?
А так работает всё как надо, и не нужно писать скрипт логики с нуля.

Сейчас у меня практически на одинаковой логике работает анимация стены сдвигающейся в сторону, управление с пульта, и подьёмный мост с рыжего леса, управление с рубильника, и самодельная дверь, тоже с пульта...
Ким
Policai, ну ка напиши в чем проблема была, а то кому-нибудь понадобится)
Последствия? Да вроде не должны быть, единственное в игре не красиво будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.