Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

Рекомендуемые сообщения

Хантер

У меня логика прекрасно работает. Использовал тот же простенький вариант, что и в статье.

Вот секция машины в файле vehicles.ltx (где у меня все секции тачек прописаны - файл зарегистрирован в system.ltx)

и в этой секции прописана custom_data с указанием файла логики. Машину спавнил, разумеется, скриптом.

Важное условие работы схемы: в секции машины обязательно должна быть строчка

script_binding = bind_physic_object.init

Именно она биндит логику к каждой вышедшей в онлайн тачке.

[baggi]

 

GroupControlSection = spawn_group

$spawn = "vehicles\vehicle_btr"

class = SCRPTCAR

cform = skeleton

visual = physics\vehicles\baggi\veh_baggi.ogf

actor_visual = physics\vehicles\baggi\veh_baggi.ogf

ef_equipment_type = 3

ph_mass = 500

script_binding = bind_physic_object.init

custom_data = scripts\car.ltx ;путь до файла с логикой

 

ph_skeleton_airr_lin_factor = 2.0

ph_skeleton_airr_ang_factor = 0.0

ph_skeleton_hinger_factor1 = 1.0

ph_skeleton_ddelay = 15.0

ph_skel_fatal_impulse_factor = 12.0

ph_skel_shot_up_factor = 0.25

ph_after_death_velocity_factor = 0.75

 

Наглядный пример:

 

e4d306bb9d4et.jpg

 

После выдачи инфопоршня "actor_has_car_key".

a9ca112e1b06t.jpg

 

 

Кстати, надпись "заблокировано" можно поменять на любую другую.

Изменено пользователем Garry_Galler
Ссылка на комментарий

Всё, сенк! Всё пошло! Правда, сделал проще: убрал инфопоршни, а в логике такое прописал:

[logic]

active = ph_car

[ph_car]

usable = {=actor_has_item(niva_keys)}

 

---------

А как сделать, чтобы один автомобиль можно было открывать либо одним ключом либо другим, не знаешь?

Изменено пользователем Cyclone
Ссылка на комментарий

так сделай функцию в хр_кондитионс:

function test()

local actor = db.actor

if actor:object("niva_keys") ~= nil and actor:object("niva_keys2") ~= nil then

return true

else

return false

end

и напиши:

[logic]

active = ph_car

[ph_car]

usable = {=test}

Freedom

Ссылка на комментарий

Хантер, напиши условия через запятую

usable = {=actor_has_item(niva_keys_1)}, {=actor_has_item(niva_keys_2)}

Проверка будет происходить слева на право, если у актора появиться ключ 1, то проверка прикартиться, если его не будет, то провериться наличие ключа 2.

Если напишешь так

usable = {=actor_has_item(niva_keys_1) =actor_has_item(niva_keys_2)}

то необходимостью станет наличие сразу двух ключей.

Изменено пользователем Куфзук
Ссылка на комментарий

Братцы, подскажите функцию, с помощью которой можно проиграть анимку перезарядки оружия у актора

Ссылка на комментарий

PGU_tk, как вариант, ты можешь разрядить нужное тебе оружие, и потом его активировать, ГГ сам его перезарядит.

Что-то на подобие такого:

function actor_mast_reload()
    local actor = db.actor
    local wpn = actor:item_in_slot(2)
    if actor and wpn then
        wpn:unload_magazine()
        actor:activate_slot(2)
        actor:restore_weapon()
    end
end

только оружие должно быть по крайней мере просто в слоте.

Ссылка на комментарий

Подскажите, кто знает, где можно найти конфиги автомобилей с физикой, как в обливион лосте, и модели машин с открывающимися дверями.

Изменено пользователем Хантер
Ссылка на комментарий

Привет всем! Прочитал вот такое:

Глюк!!!

Как исправить? Почему (сталкеры, военные, монолитовцы и т.д) когда целятся или cтреляют с далека, то смотрят в одну сторону, а пули летят в ГГ!!!

Помню, пофиксено в Freeplay Start 1.2...
Что там изменено и правда ли, кто в курсе?

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

Мой архив

Сталкером не занимаюсь.

Ссылка на комментарий
Куфзук, в принципе вариант, только надо еще прицепить как-то оружию выстрел или поправить где-то какой-то параметр, а то у меня гг не спешит перезаряжаться. Еще actor:restore_weapon() лишнее..
Ссылка на комментарий
amik, в теме Маландринуса есть про скриптовое установление погоды, посмотри там в разделе по пространству имен level или поищи по set_weather. Изменено пользователем Министр
Ссылка на комментарий

PGU_tk, по сути, если у тебя оружие уже активно, то restore_weapon ни чего не даст, но если оно спрятано!?

И почему это он не спешит, при пустом магазине он вроде сам перезарежается. Если не хочет, то надо заставить его выстрелить, но вот как?

Изменено пользователем Куфзук
Ссылка на комментарий

Куфзук, если оно спрятано, то actor:activate_slot(2) - его вытащит.

>при пустом магазине он вроде сам перезаряжается

да вроде я тоже так думал, но там как-то странно - если открываешь инвентарь, то он действительно сразу начинает перезаряжаться, а если ничего не делать, то и не спешит. Я проверял именно на коде почти таком же, как ты привел :) Еще поэкспериментирую сейчас с restore_weapon()\hide_weapon()

Ссылка на комментарий

amik,

Исправлено совместными усилиями kstn и Р.М.А.

Вот цитата поста Р.М.А. с оф. форума GSC из темы "Попытка исправления ошибок":

К слову про косых сталкеров

 

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

 

У меня в лагере новичков косят два охранника при входах, а Волк не косит, хотя сделаны они на одних и тех же схемах (walker). Однако, Волк при наставлении оружия, отыгрывает анимацию backoff, а охранники - threat. В state_lib.script эти анимации выглядят так:

backoff = {weapon = "unstrapped",

movement = move.stand,

mental = anim.danger,

bodystate = move.standing,

animstate = "stand",

animation = "backoff",

reset = true

},

 

threat = {weapon = "unstrapped",

movement = move.stand,

mental = anim.danger,

bodystate = move.standing,

animstate = "stand",

animation = nil

},

Отличия в параметрах animation и reset. Попробовал добавить в threat reset = true, разницы никакой. Тогда остаётся animation.

Также я заметил, что косят сталекры, сделанные на схеме camper. В xr_camper.script можно найти ссылку на анимации "hide_sniper_fire" и "hide_fire".

Эти анимации в state_lib.script:

hide_fire = {weapon = "fire",

movement = move.stand,

mental = anim.danger,

bodystate = move.crouch,

animstate = "stand",

animation = nil

},

hide_sniper_fire = {weapon = "sniper_fire",

movement = move.stand,

mental = anim.danger,

bodystate = move.crouch,

animstate = "stand",

animation = nil

},

Как видно, у threat, hide_fire и hide_sniper_fire параметр animation = nil и именно, отыргывая эти анимации, npc косили.

Тогда я попробовал сделать так, не убирать те строки в state_mgr.script, а изменить их следующим образом:

 

до

--' Если мы переключаемся из идущего положения в стоящее - надо задизаблить перемещение

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

после

--' Если мы переключаемся из идущего положения в стоящее - надо задизаблить перемещение

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[self.target_state].animation ~= nil and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

После таких изменений, сталкеры перестали косить.

 

На мысль навело предложение kstn закомментировать строки.

 

Изменено пользователем banderos
Ссылка на комментарий

В общем, резюмируя. (там кстати вверху была неточность - actor:restore_weapon() надо заменить на wpn:restore_weapon()). Игра с hide\restore тоже ни к чему не привела. В игре действительно, отстрел магазина приводит к моментальной перезарядке, но если делать это unload-ом или set_ammo_elapsed(0), то это просто установка такого количества патронов - перезарядку это не вызывает, для нее нужны дополнительные события (выстрел, просмотр инвентаря). А я пришел к выводу, что это не стоит того, можно решить иначе мою задумку, да и поиски уперлись. Но если кто-то подскажет, как анимацию запустить, то будет интересно "поиграться")

Ссылка на комментарий

PGU_tk, использование wpn:restore_weapon() приведет минимум к неправильной работе, функция restore_weapon() применима исключительно для ГГ.

По поводу перезарядки при использовании unload_magazine() или set_ammo_elapsed(0) возможно ты прав, по описанию, эти функции эквиваленты, они просто ставят колличество патронов в ноль и не определяют, что патронов более нет. Поэтому, для того, чтобы определить, что патронов и прям ноль, нужно сделать выстрел через скрипт, что как мне кажеться - проблематично, или я ошибаюся!?

Изменено пользователем Куфзук
Ссылка на комментарий

Куфзук, не хочу спорить, потому что не знаю, но у меня как раз работало так, как я сказал и не работало, если к ГГ применять, если я ничего не напутал. Но с другой стороны, если hide_weapon() еще понятно, что уберет (потенциально) тот ствол, который активен (если применять к ГГ), то какой из стволов доставать по restore_weapon() ? Слотов-то не один. С этой точки зрения логичней через ствол вызывать (поэтому я думаю, что так и есть).

Про выстрелы мне тоже интересно) Поиском находил уже тут такой вопрос, но ответа не было..

Изменено пользователем PGU_tk
Ссылка на комментарий
PGU_tk, если не ошибаюсь, то скриптом полноценный выстрел сделать нельзя, по-крайней мере для ГГ. Restore_weapon применяется для актора и вероятнее всего она достает оружие спрятанное ф-ей hide_weapon :) Изменено пользователем Министр
Ссылка на комментарий

Создал скриптовое окно, в нем есть кнопка выход, которая выполняет определенные действия при выходе. Проблема в том что окно можно закрыть клавишей Esc. Тогда нарушится работа скрипта. Возможно ли отключить ввод с клавиатуры при работе скрипта?

Ссылка на комментарий

max_max_08

Можно. Можно даже сдать так, чтобы при нажатии на esc выполнялось то что тебе нужно. Ищи функцию OnKeyboard

Freedom

Ссылка на комментарий

Действительно, max_max_08, почему тебе просто не дописать тоже самое действие и на кнопку Esc?

 

function my_message:OnKeyboard(dik, keyboard_action)
    CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
    if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
        if     dik == DIK_keys.DIK_ESCAPE  then 
                self:on_quit() --/ по нажатию ESC  - активация указанного метода
         end
       end 
end

Отключить ввод с клавиатуры тоже, конечно, можно - через level.disable_input() - но не знаю решит ли это твою проблему. Мышь тоже, по моему, не будет работать.

Изменено пользователем Garry_Galler
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...