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

Скриптование


Svoboда

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

Доброго времени!

Подскажите, возможно ли скриптом проверить, идёт ли дождь на локации?

Если можно, то каким образом?

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

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Подскажите, есть такая функция:

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

	local item_in_slot_9 = db.actor:item_in_slot(9)
	if item_in_slot_9 then
		local t = item_in_slot_9:condition()
		item_in_slot_9:set_condition(t - 0.0001)
		if item_in_slot_9:condition() <0.01 then
			alife():release(alife():object(item_in_slot_9:id()))
		end
	end

 

Если повесить её на апдейт, то предмет в соответствующем слоте со временем будет изменять состояние. Проверил, всё работает, только после загрузки сейва состояние сбрасывается.

Как сохранить состояние этого предмета после загрузки?

Заранее благодарю!

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol, Фонарик ( 9 слот ).

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

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение
58 минут назад, AndreySol сказал:

для фонарика не предусмотрено сохранение изменения состояния

А какие предметы сохраняют состояние?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Имеется такая функция:

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

local sprint = false
local last_active_item_id = 0
function actor_binder:hud_sprint_animation()
	local active_item = self.object:active_item()
	if active_item and last_active_item_id ~= active_item:id() then
		last_active_item_id = active_item:id()
		sprint = false
	end
	if active_item and (active_item:is_knife() or active_item:is_missile()) then
		if (active_item:get_hud_item_state() == 0 and active_item:is_knife()) or (active_item:get_hud_item_state() == 2 and active_item:is_missile()) then
			if self.object:is_actor_sprinting() then
				if not sprint then
					active_item:play_hud_animation(system_ini():r_string(active_item:section().."_hud", "anim_idle_sprint"), true)
					sprint = true
				end
			elseif sprint then
				active_item:play_hud_animation(system_ini():r_string(active_item:section().."_hud", "anim_idle"), true)
				sprint = false
			end
		elseif sprint then
			sprint = false
		end
	end
end

 

Она должна включать анимации спринта для ножа, бинокля, гранат, болта. Но без правок движка в скриптах нет такого метода "is_knife()" или "is_missile()". Можно ли как-нибудь переделать функцию для работы без правки движка?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте!

Подскажите, какой функцией можно включать/выключать фонарик в X-Ray extensions? И как подключить коллбэк на изменение состояния фонарика?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Graff46, уже три раза перечитал эту статью.:biggrin:

Не могу понять, как использовать эти функции:

switch_torch(bool<switch_on>) -- переключает фонарь
bool<is_on> is_torch_enabled() -- возвратит true, если фонарь включён

 

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Romann
Здравствуйте!

Как вариант, можно однократно вызвать сообщение с помощью инфопоршня:

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

			local current_outfit = db.actor:item_in_slot(7)
			if current_outfit then
				if not has_alife_info("check_outfit") then
					db.actor:give_info_portion("check_outfit")
					-- Здесь одноразовое срабатывание при надевании костюма
				end
				local outfit_section = current_outfit:section()
				if outfit_properties[outfit_section] then
					outfit_protection = outfit_properties[outfit_section]
				end
			else
				if has_alife_info("check_outfit") then
					db.actor:disable_info_portion("check_outfit")
					news_manager.send_tip(db.actor, "%c[250, 0, 255, 0]".."Б-р-р-р, прохладно.", nil, nil, nil)
					-- Здесь одноразовое срабатывание при снятии костюма
				end
			end

 

 

Изменено пользователем Fenrir02
  • Спасибо 1
  • Согласен 1

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Из X-Ray extensions:

send_event_key_press(int<DIK_keys>) - имитация события нажатия кнопки

Как именно применить это на практике? Допустим, при нажатии клавиши F3 нужно вызвать какое-то действие. Как это сделать?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

И снова здравствуйте!

Подскажите, как с помощью скрипта разжечь костёр, к которому подходит ГГ на определённое расстояние?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Overfirst

Нет, не в ЗП. Мне нужно для ТЧ, а там биндера костров нет.

  • Сочувствую 1

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Да, этот мод у меня как раз и стоит.
Функция, которая разжигает костёр при присутствии хотя бы одного НПС такая:

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

function CKampManager:increasePops(npc)
	self.population = self.population + 1
	local camp_name = camp_tbl[self.kamp_name]
	if self.population == 1 and camp_name then
		local flame_name = camp_name.flame
		local light_name = camp_name.light

		kamps_info[self.kamp_name] = nil
		if not kamps_info[self.kamp_name] then
			kamps_info[self.kamp_name] = {}
			kamps_info[self.kamp_name].time = time_global()
			kamps_info[self.kamp_name].prtcl = nil
			kamps_info[self.kamp_name].state = nil
		end

		for i,o in pairs(level_objs) do
			local obj = o
			if obj and obj:name() == flame_name then
				kamps_info[self.kamp_name].obj_fire = obj
				obj:enable_anomaly()
			end
			if obj and obj:name() == light_name then
				kamps_info[self.kamp_name].obj_light = obj
			end
		end
	end
end

 

(файл xr_kamp.script)
А вот как сделать проверку на приближение ГГ к костру ума не приложу...

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Romann
Я думал об этом, тем более это даже более логично. Но возможно ли реализовать данную фичу на ТЧ?

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Как можно заставить этот статик мигать -

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

	hud = get_hud()
	act = db.actor
	if act.health < 0.8 and act.health > 0.4 then
		hud:AddCustomStatic("hud_health_static", true):wnd():SetColor(GetARGB(255,0,255,0))
	else
		hud:RemoveCustomStatic("hud_health_static")
	end

 

 

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

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

function release_random_item(num)
	local actor = db.actor
	local cnt = actor:object_count()
	if cnt < num then return end
	for i=1,num do
		local item = actor:object(math.random(0, cnt-1))
		local sobj = alife():object(item:id())
		if sobj then
			alife():release(sobj,true)
			cnt = actor:object_count()
		end
	end
end

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

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение
5 минут назад, Graff46 сказал:

Как предметы указывать будите? (ид, имя секции, .... ?)

Имя секции.

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Stalex
Если этот биндер составлен правильно, нужно его подключать не в скриптах, а в конфиге самого предмета. К примеру, в секции [bread] необходимо прописать строку:

script_binding = bind_item.init

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

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

@Gorlomi
Не нужно править таймеры выброса. Он будет работать и при таймфакторе 500.

Эта строка запускает таймер выброса в игровом времени.

amk.g_start_timer("blowout",0,0,3,2)
g_start_timer(name,delay_d,delay_h,delay_m,action)

name - имя таймера

delay_d - задержка в днях

delay_h - задержка в часах

delay_m - задержка в минутах

 

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение

Добрый день!
Подскажите, по каким причинам НПС могут самостоятельно переходить в оффлайн, находясь при этом в радиусе switch_distance актора?

Пробовал принудительно выталкивать непися в онлайн таким способом:

  for a = 1, 65535 do
    local obj = alife():object( a )
    if obj then
      local obj_name = obj:name()
      if string.find( obj_name, "esc_vagon_wounded" ) then
        log3( "~ [%s]: found [%s]", script_name(), obj_name )
        alife():set_switch_online( obj.id, true )
        alife():set_switch_offline( obj.id, false )
      end
    end
  end

Но ничего не выходит.

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, aromatizer сказал:

граничной дистанции

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

Важнейшая задача цивилизации - научить человека мыслить.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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