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

Addon для AMK1.4.1+NLC 5.3


TIREX

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

И в чем проблема-то? :huh:

Пропатчи Сталкера до 1.0005, и АМК мод под этот патч адаптируй. :)

И будит тебе и ЗЕН и АМК. :)

Ну не только АМК, я вон в NLC на патче 1.0005 играю. Уже большую часть заданий выполнил и теперь на ЧАЭС собираюсь.

 

TIREX, слышал у тебя проблема небольшая нарисовалась - чтобы у НПС появились розданные стволы надо игру с начала начинать. Меня она как-то то же доставала и по-этому совместно со Skunk написал скрипт раздающий оружие НПС в любой момент игры - не нужно начинать новую игру. Скрипт не сложный:

 

-- Перевооружиение НПС и случайное наполнение их инвентаря артами и патронами -

-------------------- Copyright 2008 Skunk & steelrat --------------------------

--[[

Добавляем в bind_stalker.script в конец функции actor_binder:net_spawn(data) вызов этих трёх функций:

trick_sr.rearm_npc()
trick_sr.rearm_military_pm_to_fort()
trick_sr.art_and_ammo_random()

]]

-- удаление оружия и патронов из инвентаря NPC и спавн других
function rearm_npc()

local hero = {	 [0] = {name = "esc_blokpost_soldier9",		wpn1 = "wpn_svd", 		amm1 = "ammo_7.62x54_7h1",	num1 = 4,
							wpn2 = "wpn_ots33", 		amm2 = "ammo_9x18_pmm", 	num2 = 4},	-- солдат на втором этаже блокпоста

	 [1] = {name = "agr_tower1_soldier",		wpn1 = "wpn_svu", 		amm1 = "ammo_7.62x54_7h1",	num1 = 4,
							wpn2 = "wpn_ots33", 		amm2 = "ammo_9x18_pmm", 	num2 = 4},	-- солдат на вышке Агропрома

	 [2] = {name = "agr_tower2_soldier",		wpn1 = "wpn_svu", 		amm1 = "ammo_7.62x54_7h1",	num1 = 4,
							wpn2 = "wpn_ots33", 		amm2 = "ammo_9x18_pmm", 	num2 = 4},	-- солдат на вышке Агропрома

	 [3] = {name = "agr_tower3_soldier",		wpn1 = "wpn_svu", 		amm1 = "ammo_7.62x54_7h1",	num1 = 4,
							wpn2 = "wpn_ots33", 		amm2 = "ammo_9x18_pmm", 	num2 = 4},	-- солдат на вышке Агропрома

	 [4] = {name = "mil_stalker0012",		wpn1 = "wpn_svu", 		amm1 = "ammo_7.62x54_7h1", 	num1 = 4,
							wpn2 = "wpn_walther", 		amm2 = "ammo_9x19_pbp", 	num2 = 4},	-- безумный сталкер

	 [5] = {name = "bar_ecolog_professor",		wpn1 = "wpn_l85",		amm1 = "ammo_5.56x45_ap", 	num1 = 4,
							wpn2 = "wpn_hpsa", 		amm2 = "ammo_9x19_pbp", 	num2 = 4},	-- эколог Круглов (на Дикой территории

	 [6] = {name = "yan_scientist_help",		wpn1 = "wpn_l85", 	amm1 = "ammo_5.56x45_ap",	num1 = 4,
							wpn2 = "wpn_hpsa", 		amm2 = "ammo_9x19_pbp", 	num2 = 4},	-- эколог Круглов (на Янтаре)

	 [7] = {name = "yantar_semenov",		wpn1 = "", 			amm1 = "",			num1 = 4,
							wpn2 = "wpn_hpsa", 		amm2 = "ammo_9x19_pbp", 	num2 = 4}	-- эколог Семенов (замена Круглова)
}

-- проверка флага, если "1", значит скрипт уже запускался
if load_variable("flag_1",0) == 1 then return end

for a=0,table.getn(hero)-1 do
	local obj = alife():object(hero[a].name)
	if obj and obj:alive() then
		for b=1,65535 do
			local item = alife():object(
			if item and item.parent_id and item.parent_id == obj.id then
				-- не удаляем бинокль и нож, на всякий случай
				if not string.find(item:name(),"wpn_binoc") and not string.find(item:name(),"wpn_knife") then
					if string.find(item:name(),"wpn_") or string.find(item:name(),"ammo_") then
						-- удаляем оружие и патроны из инвентаря
						alife():release(alife():object(item.id), true)
					end
				end
			end
		end
		local sobj = alife():object(obj.id)
		if hero[a].wpn1 ~= "" then 
			create_item_in_inv(hero[a].wpn1,sobj)
			create_ammo_in_inv(hero[a].amm1,hero[a].num1,sobj)
		end
		if hero[a].wpn2 ~= "" then 
			create_item_in_inv(hero[a].wpn2,sobj)
			create_ammo_in_inv(hero[a].amm2,hero[a].num2,sobj)
		end
	end
end
-- установка флага запуска скрипта
save_variable("flag_1",1)
end

-- удаление ПМ из инвентаря военных и спавн Форта
function rearm_military_pm_to_fort ()
if load_variable("flag_2",0) == 1 then return end -- проверка флага, если "1", значит скрипт уже запускался

for a=1,65535 do
	local obj = alife():object(a)
		if obj and IsStalker(obj) and not obj.online and obj:alive() then
			local obj_sect = obj:section_name()
			local obj_name = obj:name()
			if string.find(obj_sect,"military") or string.find(obj_sect,"soldier") or string.find(obj_sect,"specnaz") or string.find(obj_name,"military") or string.find(obj_name,"soldier") or string.find(obj_name,"specnaz") then
				for b=1,65535 do
					local item = alife():object(
						if item and item.parent_id and item.parent_id == obj.id then
							local item_sect = item:section_name()
								if item_sect == "wpn_pm" then
									alife():release(alife():object(item.id), true) -- удаляем оружие (ПМ) из инвентаря военных
									local sobj = alife():object(obj.id)
									create_item_in_inv("wpn_fort",sobj)
								end
						end
				end
			end
		end
end
save_variable("flag_2",1) -- установка флага запуска скрипта
end

-- рандомный спавн в инвентарь всех, кроме зомби и торговцев
function art_and_ammo_random()

-- наименование, возможное количество, вероятность появления для каждой единицы
local arts = {	 [0] = {name = "af_medusa", 		num = 5,	prb = 0.005},
	 [1] = {name = "af_cristall_flower", 	num = 4,	prb = 0.004},
	 [2] = {name = "af_night_star", 	num = 3,	prb = 0.003},
	 [3] = {name = "af_vyvert", 		num = 5,	prb = 0.005},
	 [4] = {name = "af_gravi", 		num = 4,	prb = 0.004},
	 [5] = {name = "af_gold_fish", 		num = 3,	prb = 0.003},
	 [6] = {name = "af_blood", 		num = 5,	prb = 0.005},
	 [7] = {name = "af_mincer_meat", 	num = 4,	prb = 0.004},
	 [8] = {name = "af_soul", 		num = 3,	prb = 0.003},
	 [9] = {name = "af_electra_sparkler", 	num = 5,	prb = 0.005},
	[10] = {name = "af_electra_flash", 	num = 4,	prb = 0.004},
	[11] = {name = "af_electra_moonlight", 	num = 3,	prb = 0.003},
	[12] = {name = "af_rusty_thorn", 	num = 5,	prb = 0.005},
	[13] = {name = "af_rusty_kristall", 	num = 4,	prb = 0.004},
	[14] = {name = "af_rusty_sea-urchin", 	num = 3,	prb = 0.003},
	[15] = {name = "af_ameba_slime", 	num = 5,	prb = 0.005},
	[16] = {name = "af_ameba_slug", 	num = 4,	prb = 0.004},
	[17] = {name = "af_ameba_mica", 	num = 3,	prb = 0.003},
	[18] = {name = "af_drops", 		num = 5,	prb = 0.005},
	[19] = {name = "af_fireball", 		num = 4,	prb = 0.004},
	[20] = {name = "af_cristall", 		num = 3,	prb = 0.003},
	[21] = {name = "af_dummy_glassbeads", 	num = 1,	prb = 0.001},
	[22] = {name = "af_dummy_pellicle", 	num = 1,	prb = 0.001},
	[23] = {name = "af_dummy_battery", 	num = 1,	prb = 0.001},
	[24] = {name = "af_dummy_dummy", 	num = 1,	prb = 0.001},
	[25] = {name = "af_dummy_spring", 	num = 1,	prb = 0.001},
	[26] = {name = "af_fuzz_kolobok", 	num = 1,	prb = 0.001}
	}

local ammos = {	 [0] = {name = "ammo_9x18_fmj",		num = 8,	prb = 0.008},
	 [1] = {name = "ammo_9x18_pmm", 	num = 7,	prb = 0.007},
	 [2] = {name = "ammo_9x19_pbp", 	num = 8,	prb = 0.008},
	 [3] = {name = "ammo_9x19_fmj", 	num = 7,	prb = 0.007},
	 [4] = {name = "ammo_11.43x23_fmj", 	num = 8,	prb = 0.008},
	 [5] = {name = "ammo_11.43x23_hydro", 	num = 7,	prb = 0.007},
	 [6] = {name = "ammo_12x70_buck", 	num = 8,	prb = 0.008},
	 [7] = {name = "ammo_12x76_dart", 	num = 7,	prb = 0.007},
	 [8] = {name = "ammo_12x76_zhekan", 	num = 6,	prb = 0.006},
	 [9] = {name = "ammo_5.45x39_fmj", 	num = 8,	prb = 0.008},
	[10] = {name = "ammo_5.45x39_ap", 	num = 7,	prb = 0.007},
	[11] = {name = "ammo_9x39_sp5", 	num = 8,	prb = 0.008},
	[12] = {name = "ammo_9x39_ap", 		num = 7,	prb = 0.007},
	[13] = {name = "ammo_9x39_pab9", 	num = 6,	prb = 0.006},
	[14] = {name = "ammo_5.56x45_ss190", 	num = 8,	prb = 0.008},
	[15] = {name = "ammo_5.56x45_ap", 	num = 7,	prb = 0.007},
	[16] = {name = "ammo_7.62x54_7h1", 	num = 8,	prb = 0.008},
	[17] = {name = "ammo_7.62x54_ap", 	num = 6,	prb = 0.006},
	[18] = {name = "ammo_7.62x54_7h14", 	num = 4,	prb = 0.004},
	[19] = {name = "ammo_vog-25p", 		num = 7,	prb = 0.007},
	[20] = {name = "ammo_vog-25", 		num = 7,	prb = 0.007},
	[21] = {name = "ammo_m209", 		num = 7,	prb = 0.007},
	[22] = {name = "ammo_og-7b", 		num = 2,	prb = 0.002},
	[23] = {name = "ammo_5.7x28_fmj", 	num = 5,	prb = 0.005},
	[24] = {name = "ammo_5.7x28_ap", 	num = 3,	prb = 0.003},
	[25] = {name = "ammo_7.62x54r", 	num = 1,	prb = 0.001}
	 }
if load_variable("flag_3",0) == 1 then return end
for a=1,65535 do
	local obj = alife():object(a)
		if obj and IsStalker(obj) and obj:alive() and obj:name() ~= db.actor:name() then
			local obj_sect = obj:section_name()
			local obj_name = obj:name()
				if (not string.find(obj_sect,"trader")) and (not string.find(obj_name,"trader")) and (not string.find(obj_sect,"zombi")) and (not string.find(obj_name,"zombi")) then
					local sobj = alife():object(obj.id)
						for b=0, table.getn(arts)-1 do
							for d=1, arts.num do
								if math.random() < arts[b].prb then create_item_in_inv(arts[b].name,sobj) end
							end
						end
						for b=0, table.getn(ammos)-1 do
							for d=1, ammos[b].num do
								if math.random() < ammos[b].prb then create_ammo_in_inv(ammos[b].name,1,sobj) end
							end
						end
				end
		end
end
save_variable("flag_3",1) -- установка флага запуска скрипта
end


-- вспомогательные функции
function create_item_in_inv(create_item,npc)
if npc then
	return alife():create(create_item, npc.position, npc.m_level_vertex_id, npc.m_game_vertex_id, npc.id)
end
end

function create_ammo_in_inv(create_item,number,npc)
if npc then
	if number > 0 then
		local sys = system_ini()
		box = sys:r_u32(create_item, "box_size")
		return se_respawn.create_ammo(create_item, npc.position, npc.m_level_vertex_id, npc.m_game_vertex_id, npc.id, number*box)
	end
end
end

function save_variable(variable_name, value)
if value==nil then
	del_variable(variable_name)
else
	local vn=compress_name(variable_name)
	xr_logic.pstor_store(db.actor, vn, value)
end
end

function load_variable(variable_name, value_if_not_found)
local vn=compress_name(variable_name)
return xr_logic.pstor_retrieve(db.actor, vn, value_if_not_found)
end

function compress_name(name)
return name
end

 

Одна беда - надо знать игровые имена нужных НПС чтобы их вписать в таблицу для раздачи оружия.

 

UPD: забыл добавить, что файлик скрипта изначально назывался trick_sr.script потому и вызовы такие: trick_sr.rearm_npc(), trick_sr.rearm_military_pm_to_fort(), trick_sr.art_and_ammo_random(). Понятное дело, что можно использовать только один вызов, для перевооружения НПС это будет trick_sr.rearm_npc()

«Насилие - это крайняя мера к которой прибегают тупицы»© А.Азимов, "Основание"

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


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

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