Скриптование - Страница 576 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
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

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

Дня доброго! Подскажите пожалуйста. Есть условный простой итем. Как его можно сделать юзабельным? Куда копать?

@_Sk8_AsTeR_ Съедобные свойства ему прописать. И почему этот вопрос в скриптовании был задан?

Изменено пользователем I am Dead
  • Согласен 2
  • Полезно 1

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

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

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

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

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

Войти

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

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

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