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

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

@Fenrir02, нет. Нужны и другие методы: play_hud_animation, is_actor_sprinting, get_hud_item_state.

Без них ничего работать не будет. Особенно без play_hud_animation, который, собственно, анимацию и проигрывает.

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif


Подарки

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

Вопросики вылезли. Последний раз скрипты редактировал лет 8 назад. Помогите кто может.

Делал для ЗП магазинный гранатомёт с отъёмным магазином на основе wpn_rg6. Отключил  tri_state_reload и добавил anm_reload, что бы X-Ray не ругался. Вроде заработало, но по исчерпанию 1-го магазина переставал стрелять, несмотря на перезарядку.

Тогда сделал маленький квадратик в инвентарь, что бы можно было положить в быстрый слот (F1-F4) и на его использование повесил скрипт, который удаляет оружие из игры и тут же выдаёт такое-же только новое. Помогло. Но счастье было не полным.

Не срабатывает очистка магазина. Заполнение неполным количеством зарядов. 

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

Подскажите, где накосячил?

Скрытый текст

  local n_act_slot  = db.actor:active_slot()
  local sm_act_item = db.actor:item_in_slot(n_act_slot)
-- --> wpn_fn2000_nimble (based on rg6) <=---------------------------------------
  if sm_act_item and ("wpn_fn2000_nimble"==sm_act_item:section()) then	-- Условие срабатывания
     local cur_ammo_mag = sm_act_item:get_ammo_in_magazine() 
           cur_ammo_mag = 4 -- для теста
	 local cond = sm_act_item:condition()
	 local oItem = db.actor:object(sm_act_item:section())

-- db.actor:hide_weapon() -- Прячет и Запрещает доставать оружие(слишком быстро)
-- db.actor:active_item:play_hud_animation(system_ini():"wpn_rg6m_hud","anm_hide",true)
--  ^-- почему не работает ???

	alife():release(alife():object(oItem:id()),true)
	alife():create("wpn_fn2000_nimble", vector(), 0, 0, db.actor:id())
	
sm_act_item = db.actor:item_in_slot(n_act_slot)
	sm_act_item:unload_magazine() -- <- не работает :-( почему?
	db.actor:item_in_slot(n_act_slot):set_ammo_elapsed(7) -- <- тоже не работает.

 

Заранее спасибо.

Ссылка на комментарий
37 минут назад, Serge_888 сказал:

db.actor:active_item:play_hud_animation(system_ini():"wpn_rg6m_hud","anm_hide",true) -- ^-- почему не работает ???

Потому что должно быть

db.actor:active_item:play_hud_animation( system_ini():r_string( "wpn_rg6m_hud", "anm_hide" ), true)

40 минут назад, Serge_888 сказал:

sm_act_item:unload_magazine() -- <- не работает :-( почему? db.actor:item_in_slot(n_act_slot):set_ammo_elapsed(7) -- <- тоже не работает.

Потму что это следует делать через level.client_spawn_manager, заспавненного ствола же ещё нет в онлайне. И получается, что всё это применяется к старому, который удаляем.

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif


Подарки

Ссылка на комментарий
1 час назад, naxac сказал:

это следует делать через level.client_spawn_manager

по этому поводу, гугель выдал пример:

level.client_spawn_manager():add(obj.id, 0, spawn_callback, "доп_аргумент")

аргументы метода:
obj.id -- это айди объекта на который ставим каллбек
0 -- это айди эктора - нафиг не нужно, но нужно 
spawn_callback -- имя функции которая вызовется при переходе объекта в онлайн
"доп_аргумент" -- дополнительный аргумент для функции spawn_callback, 
	- что хотим то и передаем, если оно конечно надо, 
	либо вообще ничего не пишем.

-- сюда ставим вызов нужного нам действия при переходе объекта в онлайн
Код:
function spawn_callback(arg, iId, gObj)
news_manager.send_tip(db.actor, "Каллбек на переход в онлайн вызван", 0, "trader", 10000)
-- снимаем каллбек, чтобы он не вызывался каждый раз когда объект снова окажется в онлайне
level.client_spawn_manager():remove(iId, 0)  
end

принимаемые параметры:
arg - тот самый дополнительный аргумент
iId - айди объекта на который поставлен каллбек
gObj -- клиентская юзердата объекта на который поставлен каллбек

если у меня будет:

level.client_spawn_manager():add(obj.id, 0, set_ammo_elapsed, cur_ammo_mag)

мне надо будет "снимать каллбек"? И что писать вместо iId ?

P.S. спасибо за быстрый ответ.

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

В XRay гранатомёты реализованы оооочень по быдлокодерски, там много ошибок, например запуск ракет должен быть из метода FireTrace, лишь так можно пофиксить, например, произошла осечка, а ракета полетела, или оружие заблокировано, а ракета всё равно полетела. Так же при перезарядке ракеты не респаунется, т.е. старые удаляются, новые спаунятся. В общем, надо править движок, у меня в принципе есть эти правки, которые исправляют часть ошибок. И ещё, в XRayExtensions для ЗП я исправил некоторые ошибки, доработал класс РПГ-7 с возможностью многозарядного гранатомёта.

  • Полезно 1

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий
22 часа назад, Serge_888 сказал:

Делал для ЗП магазинный гранатомёт с отъёмным магазином

Эта штука называется XM29 OICW. Через сквозной оптический прицел будет весело пулять гранатами. Например, как здесь: https://yadi.sk/i/sGH6mXoELpbt3Q

Изменено пользователем aromatizer

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

Ссылка на комментарий
4 часа назад, aromatizer сказал:

Эта штука называется XM29 OICW.

Чегой-то это какой-то неправильный OICW. Сколько не смотрю, вылитый fn2000 :)  И гранатомёт однозарядный. И судя по всему, он вообще для ТЧ. Совсем не подходит. К тому-же сделать в движке сталкера магазинный автомат + магазинный гранатомёт (два в одном оружии)  будет малореально. Или движек править, или скриптами обвесить, что-бы каждый чих перехватывали и обрабатывали. Ну для чистого ЗП может и получится, а что-бы потом засунуть это в какой-нибудь понравившийся мод, работы будет почти столько-же.

 

@НаноБот, у меня не РПГ-7. У меня несуществующий магазинный гранатомёт на ВОГ-25. Сначала, думал быстренько сделать прикольную стрелялду, а то со временем, много гранат накапливается. А когда полезли ограничения движка, стало как-то жалко бросать.

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

Здрасьте.

 

Исходная конструкция – список для сверки в самой функции:

if not string.find("a, b, c, d", "a") then …

 

Требуемая конструкция – поиск в отдельном массиве:

local array = {"a, b, c, d"}

if not string.find(array, "a") then …

 

Какой должен быть синтаксис для поиска строки в массиве и подходит ли для этого функция string.find?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, Можно полагаю, но немного не ясно, для чего такое выражение (какова вообще его цель)?

Мне видится что-то подобное для рандома:

local array = {"a", "b", "c", "d"}
if string.find(array[math.random(table.getn(array))], "a") then
    printf("target: YES")
else
    printf("target: NO")
    return
end

 

Тут имхо конечно.:)

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

@Norman Eisenherz, вот ещё один стандартный вариант:

Скрытый текст

local array = {
	["a"] = true,
	["b"] = true,
	["c"] = true,
	["d"] = true}

if array["a"] then
    -- строка в массиве есть
else
    -- строки в массиве нет
end

 

 

Изменено пользователем WinCap

S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


Подарки

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

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

    https://c2.staticflickr.com/2/1935/45635885061_f2af981eb0_o.png

     

    Пока что код вот такой, и с ним скриптовое сообщение вообще не выводится (однако, и вылета нет):

    function armor_check()
    
    local slot = db.actor:item_in_slot(6)
    local sect = slot:section()
    local name = ""
    local options = ""
    local task_texture, task_rect = get_texture_info("ui_iconsTotal_lost_money")
    
    local armor_kuz = {
    ["outfit_soldier_m1"] = true,
    ["specops_outfit"] = true,
    ["military_outfit"] = true,
    ["militaryspec_outfit"] = true,
    ["specnaz_outfit_m1"] = true
    }
    
    -- проверка 1: брони нет/есть
    	if slot == nil then
    	name = "Боец, на тебе нет брони. С чем работать будем?"
    	else
    	name = "У тебя %c[list_armor]" .. game.translate_string(amk.get_inv_name(sect))
    
    -- проверка 2: тип брони для другого/этого мастера
    		if not armor_kuz[sect]
    		options = ". Я с такой броней не работаю -- иди к (имя)."
    		else
    		options = ". Могу установить ПНВ или укрепить броню."
    		end
    
    
    	end
    
    	local reply = name .. "%c[ui_clr_2]" .. options
    	db.actor:give_talk_message(reply, task_texture, task_rect, "iconed_trade_info")
    
    end

     

    Мини-моды: ТЧ ЧН ЗП

    Шпаргалка

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

    @Norman Eisenherz

    -- проверка 2: тип брони для другого/этого мастера
            if not armor_kuz[sect] then

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

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

    1. Моя любимая проблема: правильная теория и невнимательность на практике.

    2. Теперь ловлю вылет при отсутствии брони, хотя проверка в этом случае не должна выполняться дальше первого "else", и текст "options" должен остаться пустым. Что я упускаю?

    Мини-моды: ТЧ ЧН ЗП

    Шпаргалка

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

    Вылет на какой строке?

    Вот тут же будет вылетать если нету брони в самом начале

    local slot = db.actor:item_in_slot(6)
    local sect = slot:section()
    Ссылка на комментарий

    Вооот… Я попытался сократить запись "slot:section()", но не учел того, что ее надо ставить после первой проверки. Всем спасибо, двигаюсь дальше.

    Мини-моды: ТЧ ЧН ЗП

    Шпаргалка

    Ссылка на комментарий
    6 часов назад, Norman Eisenherz сказал:

    Что я упускаю?

    local slot = db.actor:item_in_slot(6)
    local sect = slot:section()

    Если броника в слоте нет - в переменной "slot" будет nil. А затем ты пытаешься для nil вызвать :section(). Переделай как то так:

    local slot = db.actor:item_in_slot(6)

    if slot then

              local sect = slot:section()

              --- тут все, если есть броник

    else

             --- тут если броника нет

    end

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

    Продолжаю мучить гранатомёт.  Почти всё заработало кроме анимации.

    db.actor:item_in_slot(n_act_slot):play_hud_animation("lancew_rg6m_holster", true)

    даёт ошибку

    Expression    : !m_error_code
    Function      : raii_guard::~raii_guard
    File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
    Line          : 748
    Description   : d:\stalker3\gamedata\scripts\multitool.script:24: attempt to call method 'play_hud_animation' (a nil value)

    подскажите как исправить?

    Ссылка на комментарий
    4 часа назад, Zagolski сказал:

    Ф-ции play_hud_animation не существует

    Извиняюсь. Встретил упоминание, поискал в гугле, скопипастил. Там был вроде-как пример использования.

    А есть что-нибудь работающее для проигрывания анимаций для худа в ЧН/ЗП ?

     

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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