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

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

Как заспавнить НПС оружие с аддонами через скрипты, чтобы они сразу вешались на него?

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

@ARTLantist , записать в нетпакет соответствующие addon_flags?

  • Согласен 2

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

naxac.gif


Подарки

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

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

Нужно подключить модуль m_netpk.script (на форуме поищи) и при помощи модуля в момент спауна в нет-пакет ствола записать флаг, пример:

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

    local obj = alife():create("wpn_sig550", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    local pk = get_netpk(obj,1)
    
    if pk:isOk() then
        local data = pk:get()  -- прочитали пакет    
        if data then
            data.addon_flags = 1 -- повесим прицел
            pk:set(data)  -- записали пакет обратно
        end    
    end    

 

  • Спасибо 1
  • Согласен 1
  • Полезно 1

Здесь могла быть ваша реклама.


Подарки

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

    Что-то у меня с выбросом огсм беда какая то. Раньше все нормально было. Короче прокручиваю время сном до первого выброса дожидаюсь, скрипт отрабатывает полностью. Поставил контрольные точки все семь таймеров отрабатывают, т.е получается скрипт полностью отрабатывает. В игре без прокрутки времени, выброс начинается первые эффекты и звуки сирены. Срабатывает только два таймера и выброс зависает. Что это может биндер подвисает.

    Ссылка на комментарий
    11 минут назад, I am Dead сказал:

    @Stalkersof Смотри таймеры.

    Странно это все и непонятно. В одном случае выброс полностью отрабатывает. Выброс начинается в 9-00. Прокручиваю сном до 8-00 и дожидаюсь выброса и все скрипт полностью отрабатывает все штатно. Во втором случае когда дожидаюсь без сна просто выброс зависает на втором таймере. Непонятно не фига. Получается скрипт рабочий полностью. Дурдом какой то

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

    Получается скрипт рабочий полностью.

    Ну так а в логе-то при этом что написано?  Может, там и не в скрипте Выброса дело, а в том, что совпадает одновременно несколько событий, и какое-то крашит движок.

    • Полезно 1

    След от кругов на воде - это тоже след (с)

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

    Ну так а в логе-то при этом что написано? 

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

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

    Здрасьте.

     

    Как сослаться на инвентарь мутанта в момент взаимодействия с трупом? Если добавить обработку use_callback в [bind_monster.script] по аналогии с [xr_motivator.script], реакции нет.

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

    Шпаргалка

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

    @Norman Eisenherz , в мотиваторе по аналогии со сталкерами не работает  

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

    добавить в bind_monster

     

    function generic_object_binder:reinit()
        ...

        self.object:set_callback(callback.use_object, self.use_callback, self)  
        ...
    end

     

    function generic_object_binder:net_destroy()

    ...

       self.object:set_callback(callback.use_object, nil)

    ...

    end

     

    function generic_object_binder:use_callback(obj, who)  
        if self.object:alive() then
            if self.st.active_section then
                xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who)
            end
        else
            ...
        end
    end

     

     

     

    Здесь могла быть ваша реклама.


    Подарки

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

    Я что-то давненько не задавал тупых вопросов.

    Кто знает, почему может не срабатывать проверка на видимость see?

    Без неё код работает, а с ней в логе это - "!!CScriptGameObject : cannot check visibility null object!" 

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

            for a = 0,65534 do
                local obj = level.object_by_id(a)
                if obj then
                    if IsStalker(obj) and obj:alive() and obj:position():distance_to(db.actor:position()) < 50 and obj:see(actor) then
                --  if IsStalker(obj) and obj:alive() then
                        local comm  = amk.get_npc_community(obj)
                        if comm == "stalker" then amk.set_npc_relation(obj,db.actor,"enemy") end        
                    end
                end
            end
        end

     

    зы Движок ОГСР

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

    Здесь могла быть ваша реклама.


    Подарки

  • 4
  • 3
  • 5
  • 4
  • Ссылка на комментарий
    8 минут назад, Okichi сказал:

    переменная actor как здесь определяется

    Банальная невнимательность :dash2: Я уж подумал что-то где-то слетело, т.к. ранее всё работало. 

    Но "слетели" первые три знака перед 'actor', как часто бывает...

    Изменено пользователем mole venomous
    • Согласен 1

    Здесь могла быть ваша реклама.


    Подарки

  • 5
  • 2
  • 5
  • 4
  • Ссылка на комментарий
    Local uAct = db.actor

    @mole venomous одна из причин почему я всегда делаю вот так:

     

    Потому что сам грешен)

    • Нравится 1

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

    Ссылка на комментарий
    5 минут назад, UriZzz сказал:
    Local uAct = db.actor

    Даже просто Actor с заглавной , а внимание уже сложно не обратить.

    • Согласен 1

    Здесь могла быть ваша реклама.


    Подарки

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

    Чистое Небо. В файле   actor_menu.script   есть функции, которые реагируют на открытие/закрытие инвентаря - как скриптово добавить свою кнопку в открытый инвентарь. В солянке такое есть, там это реализовано в   actor_inv.script  , хотел сделать по аналогии - не вышло, вылет с ошибкой. Кто знает - подскажите.

    Вылет:

    stack trace:
    
    001B:02A6C52C xrGame.dll
    001B:02D4F25E xrGame.dll, CxImage::`copy constructor closure'()
    001B:02692EA3 lua.JIT.1.1.4.dll, luaopen_io()
    Скрытый текст
    
    
    
    
    
    local btn_hud
    local btn_test, btn_pnv
    
    class "CUI_InvButton" ( CUIScriptWnd )
    
    function CUI_InvButton:__init( id, s, f, pos  ) super()
      self:InitControls()
    	local btn = CUIButton()
    	self.btn = btn
    	btn:SetWindowName( "btn_pnv" )
    	btn:SetAutoDelete( true )
    	--btn:InitTexture( "ui\\ui_common" )	-- ui\\ui_inventory ui_button_main02
      btn:SetOriginalRect( 0, 86, 117, 29 )	-- 75, 960, 104, 30
     
      -- btn:SetStretchTexture( true )
      btn:SetText( s )
    	btn:SetTextColor( 250, 192, 192, 192 )		-- 238, 153, 26   
    	btn:SetFont( GetFontGraffiti22Russian() )	-- GetFontLetterica25()
    	btn:Init( pos[1], pos[2], pos[3], pos[4] )			-- 592, 960, 113, 64
      self:Register( btn, id )
    	self:AddCallback( id, ui_events.BUTTON_CLICKED, f, self )
    end
    
    function CUI_InvButton:__finalize() -- self.hud:DetachChild( self.btn ) -- self.btn = nil
    end
    
    function CUI_InvButton:InitControls()
    	--self:Init(0,0,1024,768)
    end
    
    
    
    
    
    
    --' ------------------------------------------------------------------------------------------------------------------------------
    
    
    
    -- actor_menu_mode -----
    
    -- int mode:
    -- 0 = 	Undefined = закрыто
    -- 1 = 	Inventory
    -- 2 = 	Trade
    -- 3 = 	Upgrade
    -- 4 = 	DeadBodySearch
    -- 10 =  Talk dialog  show
    -- 11 =  Talk dialog  hide
    local last_mode = 0
    xr_meet_dialog_closed = false
    xr_meet_trade_closed = false
    xr_meet_upgrade_closed = false
    
    function actor_menu_mode(mode)
    	
      --if mode then -- T
        --get_console():execute( "load ~: --- " )
        --get_console():execute( "load ~: actor_menu [mode] = " .. mode  )
        --get_console():execute( "load ~: actor_menu [last_mode] = " .. last_mode  )
      --end -- T
      
      if(mode==0) then
    		if(last_mode==1) then
    			inventory_wnd_closed()
    		elseif(last_mode==2) then
    			trade_wnd_closed()
    		elseif(last_mode==3) then
    			upgrade_wnd_closed()
    		elseif(last_mode==4) then
    			dead_body_search_wnd_closed()
    		end
    		last_mode = 0
    	elseif(mode==1) then
    		last_mode = 1
    		inventory_wnd_opened()
    	elseif(mode==2) then
    		last_mode = 2
    		trade_wnd_opened()
    	elseif(mode==3) then
    		last_mode = 3
    		upgrade_wnd_opened()
    	elseif(mode==4) then
    		last_mode = 4
    		dead_body_search_wnd_opened()
    	elseif(mode==10) then
            dialog_wnd_showed()
    	elseif(mode==11) then
            dialog_wnd_closed()
    	end
    end
    
    function inventory_wnd_opened()
    	printf("---:>Inventory opened")
      	
      if not btn_pnv then
    		btn_pnv = CUI_InvButton( "btn_pnv", "режимы ПНВ", btn_pnv_pressed, { 370,476, 112,25 } ) -- 725, 725, 157, 48 } )
    		btn_hud = level.main_input_receiver()
    		btn_hud:AttachChild( btn_pnv.btn )
    	end
    end
    
    
    
    function inventory_wnd_closed()
    	
      if btn_pnv then
    		btn_hud:DetachChild( btn_pnv.btn )
    		btn_pnv.btn = nil
    		btn_pnv = nil
    		btn_hud = nil
    	end
      
      printf("---:>Inventory closed")
      --' при закрытии инвентаря можно выполнять разные функции
      get_console():execute( "load ~: [actor_menu.script] ---> Закрыли инвентарь" ) -- T
      t_func.__remont_all() -- T
    end
    
    
    
    function trade_wnd_opened()
    	xr_meet_dialog_closed = false
    	printf("---:>Trade opened")
    end
    
    function trade_wnd_closed()
    	printf("---:>Trade closed")
    	xr_meet_trade_closed = true
    end
    
    function upgrade_wnd_opened()
    	xr_meet_dialog_closed = false
    	printf("---:>Upgrade opened")
    end
    
    function upgrade_wnd_closed()
    	printf("---:>Upgrade closed")
    	xr_meet_upgrade_closed = true
    end
    
    function dead_body_search_wnd_opened()
    	printf("---:>DeadBodySearch opened")
      get_console():execute( "load ~: [actor_menu.script] ---> Обыскиваем труп" ) -- T
      t_func.WhoIsThis() -- T
    end
    
    function dead_body_search_wnd_closed()
    	printf("---:>DeadBodySearch closed")
    end
    
    function dialog_wnd_showed()
    	printf("---:>Talk Dialog show")
    end
    
    function dialog_wnd_closed()
    	printf("---:>Talk Dialog hide")
    	xr_meet_dialog_closed = true
    end
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    --' ------------------------------------------------------------------------------------------------------------------------------
    
    
    
    function CUI_InvButton:Update()
    	CUIScriptWnd.Update(self)
    	--local h = level.get_time_hours()
    end
    
    --function CUI_InvButton:test_msg()
    	--db.actor:give_game_news("Do Re Mi Fa Sol La Si Doo", "ui\\ui_iconsTotal", Frect():set(0,658,83,47), 0, 1000)
    --end
    
    function CUI_InvButton:OnKeyboard(dik, keyboard_action)
    	CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
    	if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
    		if dik == DIK_keys.DIK_NUMPAD5 then self:test_msg()
    		--elseif dik == DIK_keys.DIK_F then self:on_quit()
    		--elseif dik == DIK_keys.DIK_TAB then self:on_quit()
    		end
    	end
      
      --if keyboard_action == ui_events.STATIC_FOCUS_RECEIVED then
        --db.actor:give_game_news("Do Re Mi Fa Sol La Si Doo", "ui\\ui_iconsTotal", Frect():set(0,658,83,47), 0, 30000)
      --end
      
    	return true
    end

     

     

    Скрытый текст
    function Get_Button(x,y,w,h)
      local btn_metka = CUI3tButton()
      --btn_metka:InitTexture("ui_button_metka_pda")
      --btn_metka:SetWndRect(Frect():set(310,660,255,60)) --/ можно так
      btn_metka:SetWndPos (vector2():set(310,660))
      btn_metka:SetWndSize(vector2():set(255,60))
      btn_metka:SetWidth(255)
      btn_metka:SetHeight(70)
      btn_metka:SetFont(Graffiti22)
      btn_metka:SetTextAlign(2) --/ Left|Right|Center: 0|1|2
      btn_metka:SetText("Установить метку")
      btn_metka:SetTextY(1)
      btn_metka:SetAutoDelete(true)
      btn_metka:Show(true)
      return btn_metka --/>
    end
    
    
    
    function inventory_wnd_opened()
    	printf("---:>Inventory opened")
      Get_Button(10,300,100,100)
    end

     

     

    Вылет тот-же: 

    001B:02D4D5D3 xrGame.dll, CxImage::`copy constructor closure'()
    001B:02D4F111 xrGame.dll, CxImage::`copy constructor closure'()
    001B:02692EA3 lua.JIT.1.1.4.dll, luaopen_io()

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

     

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

     

    Открылось нормально, добавил просто фон пока без кнопок, НО!

    Вылет при закрытии инвентаря:

    001B:026DAC1E luabind.beta7-devel.rc4.dll, luabind::detail::do_call_member_selection()

    Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

    @Баба ЯГА Примерно так:

    Spoiler
    [actor_menu.script]
    function actor_menu_mode(mode)
    (+) в начало
    	if mode > 0 then
    		new.show(true)
    	else
    		new.show()
    	end
    
    
    [new.script]
    local inv, wnd
    
    function show(vis)
    	if not vis then
    		if inv then
    			inv:DetachChild(wnd)
    			inv = nil
    		end
    	else
    		local function wait()
    			return level.main_input_receiver() ~= nil
    		end
    
    		level.add_call(wait, draw)				-- ожидание открытия инвентаря
    	end
    end
    
    function draw()
    	inv = level.main_input_receiver()
    
    	local b = CUIButton()
    		inv:AttachChild(b)
    	-- (описание окна)
    
    	wnd = b								-- ссылка для последующей обработки
    end

     

     

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

    Шпаргалка

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

    Привет, люди! Подскажите, где прописывается поведение нпц при ранении, а именно хочу, чтобы Зомбированные роняли оружие, как все остальные НПЦ, а не корячились с ним в руках.

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

    @phalcor емнип, чтобы зомби при ранении роняли оружие, в state_lib.script их секция должна выглядеть как-то так:

    wounded_zombie = {weapon = "drop", -- вот это отвечает за дроп оружия на землю
                    movement = move.stand,
                    mental = anim.danger,
                    bodystate = move.crouch,
                    direction = look.cur_dir,
                    animstate = "stand",
                    animation = "wounded_zombie"
                },
     

    Изменено пользователем Okichi
    • Нравится 1

    След от кругов на воде - это тоже след (с)

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

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

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

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

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

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

    Войти

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

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

    AMK-Team.ru

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