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

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

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

Изменено пользователем ARTLantist
Ссылка на комментарий
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

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

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

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

Ссылка на комментарий
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

 

 

 

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

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

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

Кто знает, почему может не срабатывать проверка на видимость 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

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

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

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

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

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

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

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

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

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

 

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

  • Нравится 1

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

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

UriZzz.gif

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

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

  • Согласен 1

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

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

Чистое Небо. В файле   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

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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