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

[SoC] Ковыряемся в файлах


Halford

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

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

 

 

--' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов.
local item_by_community = {}
--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых.
local item_dependence = {}
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local mul_by_level = {}
local count_by_level = {}
--' Предметы, которые нельзя удалять (квестовые например)
local always_keep_item = {}
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
local ammo_sections = {}
local death_ini = ini_file("misc\\death_generic.ltx")

function init_drop_settings()
local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }
for k,v in pairs(community_list) do
 --' Необходимо заполнить таблицу
 item_by_community[v] = {}
 if death_ini:section_exist(v) then
 local n = death_ini:line_count(v)
 local id, value = "", ""
 for i=0,n-1 do
 result, id, value = death_ini:r_line(v,i,"","")
		 item_by_community[v][id] = 100*tonumber(value)
 end
 end
end
--' Заполняем таблицу зависимостей
local n = death_ini:line_count("item_dependence")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("item_dependence",i,"","")
item_dependence[id] = {}
local vvv = parse_names(value)
for k,v in pairs(vvv) do
item_dependence[id][v] = true
end
end
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local level_name = level.name()

if not death_ini:section_exist(level_name) then
level_name = "default"
end
local n = death_ini:line_count(level_name)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(level_name,i,"","")
 mul_by_level[id] = tonumber(value)
end	
local item_count_section = "item_count_" .. level.get_game_difficulty()
local n = death_ini:line_count(item_count_section)
for i=0,n-1 do
result, id, value = death_ini:r_line(item_count_section,i,"","")
 --' Нужно распарсить value в два значения
 local t = parse_nums(value)
if t[1] == nil then
	 abort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id))
 end
 local min = t[1]
 local max = t[2]
 if max == nil then
	 max = min
 end

 if mul_by_level[id] == nil then
	 mul_by_level[id] = 0
 end
 min = tonumber(min) * mul_by_level[id]
 max = tonumber(max) * mul_by_level[id]
 count_by_level[id] = {min = min, max = max}
end	
--' Предметы, которые нельзя удалять (квестовые например)
local n = death_ini:line_count("keep_items")
for i=0,n-1 do
result, id, value = death_ini:r_line("keep_items",i,"","")
 if value == "true" then
	 always_keep_item[id] = true
 end
end
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
ammo_sections = {}
local n = death_ini:line_count("ammo_sections")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("ammo_sections",i,"","")
 ammo_sections[id] = true
end
end
class "drop_manager"
function drop_manager:__init(npc)
self.npc = npc
end
function drop_manager:create_release_item()
local otf
local sect
--' Спрашиваем у серверного объекта генерились ли предметы
local se_obj = alife():object(self.npc:id())
if se_obj.death_droped == true then
return
end
se_obj.death_droped = true
--' Запускаем итератор на удаление предметов
self.npc:iterate_inventory(keep_item, self.npc)
--' Проверка на отсутствие спауна лута
local ini = self.npc:spawn_ini()
if ini and ini:section_exist("dont_spawn_loot") then
 return
end
--' Доспавниваем необходимое количество итемов:
--' Необходимо составить список объектов которые могут быть заспавнены для персонажа
local spawn_items = item_by_community[self.npc:character_community()]
for k,v in pairs(spawn_items) do
 --' По каждому объекту необходимо получить зависимости
 if check_item_dependence(self.npc, k) == true then
	 --' По каждому объекту необходимо получить количество
	 local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))
	 --' Необходимо заспавнить нужное количество.
if not string.find(self.npc:section(),"arena") and not string.find(self.npc:section(),"aem") and
self.npc:character_community()~="arena_enemy" then
create_items(self.npc, k, number, v)
end
end
end
[b]if self.npc:character_community()=="stalker" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "novice_outfit" end
if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "stalker_outfit" end
if self.npc:character_rank()>=900 then sect = "exo_outfit" end
end[/b]
[b]if self.npc:character_community()=="bandit" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "bandit_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "bandit_veteran_outfit" end
if self.npc:character_rank()>=900 then sect = "bandit_master_outfit" end
end[/b]
[b]if self.npc:character_community()=="military" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "soldier_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "specops_outfit" end
if self.npc:character_rank()>=900 then sect = "military_outfit" end
end[/b]
[b]if self.npc:character_community()=="killer" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "killer_outfit" end
if self.npc:character_rank()>=900 then sect = "killer_blue_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="dolg" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "dolg_outfit" end
if self.npc:character_rank()>=900 then sect = "dolg_black_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="freedom" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "svoboda_light_outfit" end
if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "svoboda_heavy_outfit" end
if self.npc:character_rank()>=900 then sect = "svoboda_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="monolith" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "monolit_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "monolit_scientific_outfit" end
if self.npc:character_rank()>=900 then sect = "monolit_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="ecolog" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "ecolog_outfit" end
if self.npc:character_rank()>=900 then sect = "protection_outfit" end
end[/b]
[b]if sect~=nil and not string.find(self.npc:section(),"arena") and
not string.find(self.npc:section(),"aem") and
self.npc:character_community()~="arena_enemy" and
self.npc:name()~="esc_novice_attacker1" and
self.npc:name()~="esc_blokpost_commander" and
self.npc:name()~="agr_ratcatcher" and
self.npc:name()~="val_lager_bandits_borov" and
not string.find(self.npc:name(),"gar_dm_bandit") and
self.npc:name()~="gar_wounded_bandit" and
self.npc:name()~="bar_dolg_leader" and
self.npc:name()~="bar_dolg_petrenko" and
self.npc:name()~="mil_freedom_member0012" and
self.npc:name()~="mil_freedom_member0018" and
self.npc:name()~="mil_stalker0012" and
self.npc:name()~="mil_stalker0023" and
self.npc:name()~="mil_ara" and
self.npc:name()~="mil_blockpost_freedomstalker001" and
self.npc:name()~="bar_ecolog_professor" and
self.npc:name()~="yan_scientist_help" and
self.npc:name()~="yan_specnaz_dead" and
self.npc:name()~="x16_stalker_ghost" and
self.npc:name()~="yantar_semenov" then
otf = create_items(self.npc, sect, 1, 40)
if otf~= nil then
funcs.start_timer("otf",1,otf.id)
end
end
end[/b]
--' Функция вызывается для каждого предмета, если вернет false то предмет удалится.
function keep_item(npc, item)
if item==nil or alife():object(item:id())==nil then return end
local section = item:section()
if section == "bolt" then
 return false
end
if always_keep_item[section] == true then
 return true
end
local item_id = item:id()
local item_in_slot = npc:item_in_slot(1)
if item_in_slot ~= nil and
 item_in_slot:id() == item_id
then
 item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)*item:condition()/100)
 return true
end
item_in_slot = npc:item_in_slot(2)
if item_in_slot ~= nil and
 item_in_slot:id() == item_id
then
 item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)*item:condition()/100)
 return true
end
alife():release(alife():object(item:id()), true)
end
--' Функция спавнит необходимое число предметов
function create_items(npc, section, number, rnd)
--' printf("create %s of %s", tostring(number), tostring(section))
if ammo_sections[section] == true then
 if number > 0 then
	 se_respawn.create_ammo(section,
 npc:position(),
 npc:level_vertex_id(),
 npc:game_vertex_id(),
 npc:id(),
			 number)
 end
else
 for i=1,number do
--' Проверяем вероятность появить каждый объект в отдельности
	 if math.random(100) <= rnd then
return alife():create(section,
	 npc:position(),
 npc:level_vertex_id(),
 npc:game_vertex_id(),
 npc:id())
end
 end
end
end

--' Функция проверяет есть ли хоть один из зависимых объектов у персонажа
function check_item_dependence(npc, section)
if item_dependence[section] == nil then
return true
end
local d_flag = true
for k,v in pairs(item_dependence[section]) do
 local obj = npc:object(k)
 if obj ~= nil and npc:marked_dropped(obj) ~= true then
	 return true
 end
 d_flag = false
end
return d_flag
end

Вот с мародёр мода

 

 

 

----------------------------------
-- made by xStream 03.2008
----------------------------------
local excluded_npcs={
bar_barman=true,
bar_arena_manager=true,
bar_dolg_leader=true,
bar_dolg_petrenko=true,
bar_freedom_attacker_commander=true,
escape_trader=true,
mil_freedom_member0012=true,
mil_freedom_member0021=true,
yantar_ecolog_general=true
}
local convert_npc = {}
local upgrade_delta = 720
local upgrade_exp = 270
local upgrade_phase = 0
local stalkers = {}
local upgrade_steps={
[0]={
npc_num = 15,
prb = 0.6
},
[1]={
npc_num = 11,
prb = 0.5
},
[2]={
npc_num = 10,
prb = 0.4
},
[3]={
npc_num = 8,
prb = 0.4
}
}
local auto_upgrades = true
local visible_auto_upgrades = false
local upgrade_top_lvl={
l01_escape = 2,
l02_garbage = 2,
l03_agroprom = 2,
l03u_agr_underground=1,
l04_darkvalley=2,
l04u_labx18=2,
l05_bar=3,
l06_rostok=3,
l07_military=4,
l08_yantar=3,
l08u_brainlab=3,
l10_radar=4,
l10u_bunker=4,
l11_pripyat=4,
l12_stancia=4,
l12_stancia_2=4,
l12u_control_monolith=4,
l12u_sarcofag=4
}
local upgrade_over_top_chance = 0.1
local armors_by_visuals = {
bandit = {
stalker_bandit_3 = 1,
stalker_bandit_8 = 2,
stalker_bandit_veteran = 3,
stalker_bandit_master = 4
},
dolg = {
stalker_do_mask_1 = 1,
stalker_do_balon_8 = 1,
stalker_do_antigas = 2,
stalker_do_nauchniy = 3,
stalker_do_exoskeleton = 4
},
ecolog = {
stalker_ecolog = 3,
stalker_ecolog_military = 3
},
hero = {
stalker_commander = 2,
stalker_soldier = 2,
stalker_ecolog = 3,
stalker_chemical = 3,
stalker_specops = 3,
stalker_scien = 3,
stalker_exoskeleton = 4
},
killer = {
stalker_ki_mask = 1,
stalker_ki_antigas = 2,
stalker_ki_nauchniy = 3,
stalker_ki_exoskeleton = 4
},
militari = {
stalker_militari_antigas_1 = 3,
stalker_militari_antigas_2 = 3,
stalker_militari_1 = 3,
stalker_militari_2 = 3
},
monolit = {
stalker_mo_hood_9 = 2,
stalker_mo_mask = 1,
stalker_mo_nauchniy = 3,
stalker_mo_exo = 4
},
neytral = {
--stalker_bar_security = 1,
stalker_neytral_balon_8 = 1,
stalker_neytral_hood_9 = 2,
stalker_neytral_nauchniy = 3,
stalker_neytral_exoskeleton = 4
},
novice = {
green_stalker_2 = 0,
green_stalker_10 = 0,
green_stalker_antigas = 1
},
soldier = {
soldier_mask = 1,
soldier_antigas = 2,
stalker_military_black = 3,
stalker_military_green = 3
},
svoboda = {
stalker_sv_rukzak_1_1 = 1,
stalker_sv_hood_9 = 2,
stalker_sv_hood_91 = 2,
stalker_sv_nauchniy = 3,
stalker_sv_exoskeleton = 4
}
}
local armors_by_community = {
stalker={
"novice","neytral"
},
monolith={
"monolit"
},
killer={
"killer","neytral"
},
ecolog={
},
dolg={
"dolg"
},
freedom={
"svoboda"
},
bandit={
"svoboda","dolg","neytral","militari"
},
military = {
}
}
local armor_levels={
green_stalker_suit = 0,
novice_suit = 0,
bandit_suit = 0,
stalker_killer_suit = 2,
monolit_suit = 3,
specnaz_suit = 2,
specnaz_soldier_suit = 2,
stalker_suit = 1,
stalker_scient_suit = 3,
exoskelet = 4,
svoboda_light_suit = 1,
svoboda_heavy_suit = 2,
dolg_suit = 2,
stalker_dolg_nauchniy_suit = 3,
ecolog_suit = 3,
scientist_suit = 3,
stalker_military_suit = 3,
soldier_suit = 1,
stalker_comander_suit = 3
}
local suits_to_visuals = {
stalker={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
[[killer\stalker_ki_mask]],
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
specnaz_suit = {
[[soldier\soldier_antigas]]
},
specnaz_soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[neytral\stalker_neytral_exoskeleton]]
},
svoboda_light_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]]
},
svoboda_heavy_suit = {
[[neytral\stalker_neytral_hood_9]]
},
dolg_suit = {
[[neytral\stalker_neytral_hood_9]]
},
stalker_dolg_nauchniy_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
[[militari\stalker_militari_antigas_1]],
[[militari\stalker_militari_antigas_2]]
}
},
monolith={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
killer={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
ecolog={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
dolg={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
[[dolg\stalker_do_balon_8]],
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[dolg\stalker_do_exoskeleton]]
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
[[dolg\stalker_do_antigas]]
},
stalker_dolg_nauchniy_suit = {
[[dolg\stalker_do_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
freedom={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
[[svoboda\stalker_sv_rukzak_1_1]],
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[svoboda\stalker_sv_exoskeleton]]
},
svoboda_light_suit = {
[[svoboda\stalker_sv_rukzak_1_1]]
},
svoboda_heavy_suit = {
[[svoboda\stalker_sv_hood_9]],
[[svoboda\stalker_sv_hood_91]]
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
bandit={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
[[bandit\stalker_bandit_3]],
[[bandit\stalker_bandit_8]],
},
stalker_killer_suit = {
[[killer\stalker_ki_mask]],
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
specnaz_suit = {
[[soldier\soldier_antigas]]
},
specnaz_soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[neytral\stalker_neytral_exoskeleton]]
},
svoboda_light_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]]
},
svoboda_heavy_suit = {
[[neytral\stalker_neytral_hood_9]]
},
dolg_suit = {
[[neytral\stalker_neytral_hood_9]]
},
stalker_dolg_nauchniy_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
[[militari\stalker_militari_1]],
[[militari\stalker_militari_2]]
},
soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_comander_suit = {
[[militari\stalker_militari_antigas_1]],
[[militari\stalker_militari_antigas_2]]
}
},
military = {
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
}
}

function npc_update(binder)
if (binder.armor_check_update or 0)<time_global() then
local npc = binder.object
if not npc:alive() or npc:critically_wounded() or npc:wounded() or excluded_npcs[npc:name()] then return end
local com = npc:character_community()
if suits_to_visuals and suits_to_visuals[com] then
npc:iterate_inventory(check_armor,npc)
end
binder.armor_check_update=time_global()+1000
end
end
function check_armor(npc, item, just_report)
local com = npc:character_community()
local section = item:section()
local sini = system_ini()
local vis = utils.cfg_get_string(sini, section, "visual", false, false, false, "")
if vis ~= "" then
vis = xrs_utils.str_explode("\\",vis)
vis = xrs_utils.str_explode(".",vis[2])
vis = vis[1]
if suits_to_visuals[com][vis] then
if just_report then
if table.getn(suits_to_visuals[com][vis])>0 and get_npc_level(npc:id())<(armor_levels[vis] or 0) then
 return true
end
else
if table.getn(suits_to_visuals[com][vis])>0 and get_npc_level(npc:id())<(armor_levels[vis] or 0) then
 if ((not db.actor:see(npc) and npc:position():distance_to(db.actor:position())>15) or
 npc:position():distance_to(db.actor:position())>100) then

 change_vis(npc:id(),"actors\\"..suits_to_visuals[com][vis][math.random(table.getn(suits_to_visuals[com][vis]))],armor_levels[vis],true)
 alife():release(alife():object(item:id()))
 end
end
end
end
end
end
function get_npc_level(id)
local sobj = alife():object(id)
if sobj and sobj.rank and sobj:rank()~=0 then
return math.floor(sobj:rank()/upgrade_exp)
end
return 0
end
-------------
function change_vis(id, suit_vis, lvl, now)

if look_for_armor(id,suit_vis) then
if now then
local npc = level.object_by_id(id)
if npc then
npc:clear_animations()
end
convert_npc[id]="turn_off"
end
local sobj = alife():object(id)
if sobj then
sobj:set_rank(upgrade_exp*lvl+math.random(1,50))
end
end
end
--------------------------
function look_for_armor(id,vis)
if vis then
local sobj = alife():object(id)
if sobj:health()<0.3 then return false end
local t = xrs_utils.read_stalker_params(sobj)
t.visual = vis
xrs_utils.write_stalker_params(t,sobj)
return true
end
return false
end
function update()
for k,v in pairs(convert_npc) do
local obj=level.object_by_id(k)
local sobj=alife():object(k)
if sobj then
if obj~=nil and v=="turn_off" then
obj:stop_talk()
switch_offline(obj)
convert_npc[k]="turn_on"
elseif obj==nil and v=="turn_on" then
switch_online(k)
convert_npc[k]=false
elseif v==false then
convert_npc[k]=nil
end
else
convert_npc[k]=nil
end
end

--armor upgrade part
if auto_upgrades==true then
 local time = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes()
if xr_logic.pstor_retrieve(db.actor,"xrs_armor_t",nil)==nil then
xr_logic.pstor_store(db.actor,"xrs_armor_t", time+upgrade_delta)
end
if time>xr_logic.pstor_retrieve(db.actor,"xrs_armor_t",0) then
local actor_id=db.actor:id()
stalkers={}
for a=0,65535 do
local sobj = alife():object(a)
if a~=actor_id and sobj and IsStalker(sobj) and sobj:alive() and not sobj.wounded and not excluded_npcs[sobj:name()] then
 if sobj.m_game_vertex_id and game_graph():valid_vertex_id(sobj.m_game_vertex_id) then
 local map = alife():level_name(game_graph():vertex(sobj.m_game_vertex_id):level_id())
 if map and upgrade_top_lvl[map]~=nil then
 local lvl = get_npc_level(a)
 if lvl<upgrade_top_lvl[map] or math.random()<upgrade_over_top_chance then
 if not stalkers[lvl] then
	 stalkers[lvl]={}
 end
 table.insert(stalkers[lvl],a)
 end
 end
 end
end
end
local max_lvl = table.getn(upgrade_steps)-1
if max_lvl>0 then
for a=0,max_lvl do
 if upgrade_steps[a]~=nil and upgrade_steps[a].npc_num~=nil and upgrade_steps[a].prb~=nil then
 for b = 1,upgrade_steps[a].npc_num do
 local cnt = table.getn(stalkers[a])
 if cnt>0 then
 local idx=math.random(cnt)
 local npc_id=stalkers[a][idx]
 if math.random()<upgrade_steps[a].prb then
	 if select_next_visual(npc_id,visible_auto_upgrades)==true then
	 if not stalkers[a+1] then
	 stalkers[a+1]={}
	 end
	 table.insert(stalkers[a+1],npc_id)
	 end
	 table.remove(stalkers[a],idx)
 end
 end
 end
 end
end
end
xr_logic.pstor_store(db.actor,"xrs_armor_t",time+upgrade_delta)
end
end
end
function select_next_visual(id,now)
local sobj=alife():object(id)
if sobj then
local level = get_npc_level(id)
local com = sobj:community()
if com and armors_by_community[com] and table.getn(armors_by_community[com])>0 then
local new_vis=""
local nl=100
for vname,allowed_armors in pairs(armors_by_community[com]) do
if armors_by_visuals[allowed_armors] then
 for k,v in pairs(armors_by_visuals[allowed_armors]) do
 if v>level and v<=nl then
 if v<nl then
 new_vis = allowed_armors.."\\"..k
 elseif v==nl and math.random()>0.5 then
 new_vis = allowed_armors.."\\"..k
 end
 nl=v
 end
 end
end
end

if new_vis~="" then
change_vis(id,"actors\\"..new_vis,nl,now)
return true
end
end
end
return false
end
-------------------------
--scheme part
-------------------------
evid_armor=18690
actid_armor=evid_armor
exclusions={}
pickupers={}
local pickupdist=2
--evaluator
class "evaluator_see_useful_armor" (property_evaluator)
function evaluator_see_useful_armor:__init(name, storage) super (nil, name)
self.a = storage
end
function evaluator_see_useful_armor:evaluate()
local npc=self.object
if excluded_npcs[npc:name()] then return false end
if self.a.see_outfit then
local o = level.object_by_id(self.a.see_outfit)
if o and o:position():distance_to(npc:position())<pickupdist+0.5 and npc:accessible(o:level_vertex_id()) and level.vertex_position(o:level_vertex_id()):distance_to(o:position())<1 then
return true
else
pickupers[npc:id()]=nil
self.a.see_outfit=nil
end
end

if (self.next_check_time or 0) > time_global() then return false end
self.next_check_time = time_global() + 5000

local function check_item(obj)
obj=obj:object()
if obj==nil or obj.clsid==nil or obj.id==nil then return false end
if exclusions[npc:id().."_"..obj:id()]==true then return false end
if obj:clsid()==58 and obj:position():distance_to(npc:position())<pickupdist and npc:accessible(obj:level_vertex_id()) and level.vertex_position(obj:level_vertex_id()):distance_to(obj:position())<1 then
if check_armor(npc, obj, true)==true then
return obj:id()
else
exclusions[npc:id().."_"..obj:id()]=true
return false
end
end
end
local item = false
for o in npc:memory_visible_objects() do
item = check_item(o)
if item then
self.a.see_outfit = item
pickupers[npc:id()]=true
return true
end
end
return false
end
--action
class "action_get_useful_armor" (action_base)
function action_get_useful_armor:__init (npc,action_name,storage) super (nil,action_name)
self.a = storage
end
function action_get_useful_armor:initialize()
action_base.initialize(self)
local npc=self.object

npc:set_item(object.idle,nil)
npc:set_movement_type(move.stand)
state_mgr.set_state(npc, "walk",nil,nil,{ look_object = level.object_by_id(self.a.see_outfit) }, {animation = true})
npc:set_desired_position(level.object_by_id(self.a.see_outfit):position())
npc:set_dest_level_vertex_id(level.object_by_id(self.a.see_outfit):level_vertex_id())

xr_sound.set_sound(npc, nil)
stop_play_sound(npc)
end
function action_get_useful_armor:execute()
action_base.execute (self)
local npc=self.object
if level.object_by_id(self.a.see_outfit)==nil or not npc:see(level.object_by_id(self.a.see_outfit)) then
self.a.see_outfit = nil
pickupers[npc:id()]=nil
return
end
if not self.end_time then
if level.object_by_id(self.a.see_outfit):position():distance_to(npc:position())<1 then
npc:set_desired_position()
npc:set_desired_direction()
npc:set_dest_level_vertex_id(npc:level_vertex_id())
state_mgr.set_state(npc, "dynamite",nil,nil,{ look_object = level.object_by_id(self.a.see_outfit) }, {animation = true})
if npc:animation_count()==1 then
self.end_time = time_global() + 1500
end
else
state_mgr.set_state(npc, "walk")
npc:set_dest_level_vertex_id(level.object_by_id(self.a.see_outfit):level_vertex_id())
npc:set_desired_position(level.object_by_id(self.a.see_outfit):position())
npc:set_desired_direction(level.object_by_id(self.a.see_outfit):position():sub(npc:position()))
end
elseif self.end_time<time_global() then
local o = level.object_by_id(self.a.see_outfit)
local sect = o:section()
alife():release(alife():object(self.a.see_outfit))
alife():create(sect,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
npc:clear_animations()
end
end
function action_get_useful_armor:finalize()
action_base.finalize (self)
local npc=self.object
pickupers[npc:id()]=nil
end
--binder
function add_to_binder(object, ini, scheme, section, storage)
local operators = {}
local properties = {}
local manager = object:motivation_action_manager()
operators["armor"] = actid_armor
properties["armor"] = evid_armor
local zombi=object:character_community()=="zombied" or object:character_community()=="trader" or
object:character_community()=="arena_enemy" or object:name()=="mil_stalker0012" or object:name()=="yantar_ecolog_general"
if zombi then
manager:add_evaluator (properties["armor"], property_evaluator_const(false))
else
manager:add_evaluator (properties["armor"], evaluator_see_useful_armor("armor", storage))
end

local action = action_get_useful_armor (object,"armor", storage)
action:add_precondition(world_property(stalker_ids.property_alive, true))
action:add_precondition(world_property(stalker_ids.property_enemy, false))
action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base, false))

xr_motivator.addCommonPrecondition(action)
action:remove_precondition(properties["armor"])
action:add_precondition (world_property(properties["armor"], true))

action:add_effect (world_property(properties["armor"], false))
manager:add_action (operators["armor"], action)
action = manager:action (xr_actions_id.alife)
action:add_precondition (world_property(properties["armor"], false))
end
function set_scheme(npc, ini, scheme, section)
local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)
end
function disable_scheme(npc, scheme)
local st = db.storage[npc:id()][scheme]
if st then
st.enabled = false
end
end

xrs_armor.script из "AI-pack" (by xStream)

Как "рулить" вообще без понятия, даже малейших соображений нет.

 

Извиняюсь не то сделал.

 

Как под сполер запихать не нашёл, подумал на код, оказалось тоже не то совсем.

 

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

ColR_iT

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

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


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

Artos, Ну покажи на примере одного костюма, как это реализовать в этом death_manager.script., если конечно тебя это не затруднит.

Проще некуда, это когда точно знаешь что делать.

 

Artos, И ты это считаешь просто, вот для сравнения.

 

if self.npc:character_community()=="stalker" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "novice_outfit" end

 

if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "stalker_outfit" end

 

if self.npc:character_rank()>=900 then sect = "exo_outfit" end

 

end

 

 

 

if self.npc:character_community()=="bandit" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "bandit_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "bandit_veteran_outfit" end

 

if self.npc:character_rank()>=900 then sect = "bandit_master_outfit" end

 

end

 

 

 

if self.npc:character_community()=="military" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "soldier_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "specops_outfit" end

 

if self.npc:character_rank()>=900 then sect = "military_outfit" end

 

end

 

 

 

if self.npc:character_community()=="killer" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "killer_outfit" end

 

if self.npc:character_rank()>=900 then sect = "killer_blue_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="dolg" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "dolg_outfit" end

 

if self.npc:character_rank()>=900 then sect = "dolg_black_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="freedom" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "svoboda_light_outfit" end

 

if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "svoboda_heavy_outfit" end

 

if self.npc:character_rank()>=900 then sect = "svoboda_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="monolith" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "monolit_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "monolit_scientific_outfit" end

 

if self.npc:character_rank()>=900 then sect = "monolit_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="ecolog" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "ecolog_outfit" end

 

if self.npc:character_rank()>=900 then sect = "protection_outfit" end

 

end

 

 

 

if sect~=nil and not string.find(self.npc:section(),"arena") and

 

not string.find(self.npc:section(),"aem") and

 

self.npc:character_community()~="arena_enemy" and

 

self.npc:name()~="esc_novice_attacker1" and

 

self.npc:name()~="esc_blokpost_commander" and

 

self.npc:name()~="agr_ratcatcher" and

 

self.npc:name()~="val_lager_bandits_borov" and

 

not string.find(self.npc:name(),"gar_dm_bandit") and

 

self.npc:name()~="gar_wounded_bandit" and

 

self.npc:name()~="bar_dolg_leader" and

 

self.npc:name()~="bar_dolg_petrenko" and

 

self.npc:name()~="mil_freedom_member0012" and

 

self.npc:name()~="mil_freedom_member0018" and

 

self.npc:name()~="mil_stalker0012" and

 

self.npc:name()~="mil_stalker0023" and

 

self.npc:name()~="mil_ara" and

 

self.npc:name()~="mil_blockpost_freedomstalker001" and

 

self.npc:name()~="bar_ecolog_professor" and

 

self.npc:name()~="yan_scientist_help" and

 

self.npc:name()~="yan_specnaz_dead" and

 

self.npc:name()~="x16_stalker_ghost" and

 

self.npc:name()~="yantar_semenov" then

 

otf = create_items(self.npc, sect, 1, 40)

 

if otf~= nil then

 

funcs.start_timer("otf",1,otf.id)

 

end

 

end

 

end

 

 

 

if not string.find(self.npc:section(),"arena") and

 

self.npc:character_community()~="arena_enemy" and

 

self.npc:name()~="yan_specnaz_dead" and

 

self.npc:name()~="x16_stalker_ghost" then

 

 

 

local otf_1

 

local otf_2

 

local otf_3

 

local otf_4

 

local otf_5

 

local sect

 

local t = amk.read_stalker_params(se_obj)

 

if t ~= nil then

 

local vis = t.visual

 

vis = amk.str_explode("\\",vis)

 

vis = vis[3]

 

--skunk.dbglog("vis = '%s'", vis)

 

 

 

-- bandit

 

if string.find(vis,"stalker_bandit") then sect = "bandit_outfit" end

 

if vis == "stalker_bandit_drunk" then sect = "outfit_bandit_m1" end

 

if vis == "stalker_bandit_8" then sect = "bandit_gaz_outfit_m1" end

 

if vis == "stalker_bandit_veteran" then sect = "bandit_veteran_outfit" end

 

if vis == "stalker_bandit_borov" or vis == "stalker_bandit_master" then sect = "bandit_master_outfit" end

 

if vis == "stalker_bandit_exoskeleton" then sect = "exo_bandit_outfit" end

 

-- dolg

 

if string.find(vis,"stalker_do") then sect = "dolg_outfit" end

 

if vis == "stalker_do_antigas" then sect = "dolg_gaz_outfit_m1" end

 

if vis == "stalker_do_komandir" then sect = "outfit_dolg_m1" end

 

if vis == "stalker_do_nauchniy" then sect = "dolg_scientific_outfit" end

 

if vis == "stalker_do_exoskeleton" then sect = "dolg_black_exoskeleton" end

 

-- ecolog

 

if vis == "stalker_ecolog" or vis == "nauchniy_1" or vis == "protect_suit2" then sect = "ecolog_outfit" end

 

if vis == "stalker_ecolog_military" or vis == "stalker_chemical" or vis == "nauchniy_0" or vis == "protect_suit1" then sect = "protection_outfit" end

 

-- izgoy

 

if vis == "izgoy" then sect = "bandit_veteran_outfit" end

 

-- killer

 

if string.find(vis,"stalker_ki") then sect = "killer_outfit" end

 

if vis == "stalker_ki_head_1" then sect = "outfit_killer_m1" end

 

if vis == "stalker_ki_antigas" then sect = "killer_gaz_outfit_m1" end

 

if vis == "stalker_ki_nauchniy" then sect = "merc_scientific_outfit" end

 

if vis == "stalker_ki_exoskeleton" then sect = "killer_blue_exoskeleton" end

 

-- militari

 

if vis == "stalker_militari_1" or vis == "stalker_militari_antigas_1" or vis == "stalker_military" or vis == "stalker_military_green" then sect = "military_outfit" end

 

if vis == "stalker_militari_2" or vis == "stalker_militari_antigas_2" or vis == "stalker_commander" or vis == "stalker_military_black" then sect = "militaryspec_outfit" end

 

-- monolit

 

if string.find(vis,"stalker_mo") or vis == "stalker_monolit" then sect = "monolit_outfit" end

 

if vis == "stalker_mo_hood_9" then sect = "monolit_gaz_outfit_m1" end

 

if vis == "stalker_mo_nauchniy" then sect = "monolit_scientific_outfit" end

 

if vis == "stalker_mo_exo" then sect = "monolit_exoskeleton" end

 

-- nauchniy (see ecolog)

 

-- neytral

 

if string.find(vis,"stalker_neytral") or vis == "stalker_hood" then sect = "stalker_outfit" end

 

if string.find(vis,"stalker_neytral_rukzak") then sect = "outfit_stalker_m2" end

 

if vis == "stalker_bar_security" then sect = "stalker_guard_outfit" end

 

if vis == "stalker_neytral_hood_9" then sect = "neytral_gaz_outfit_m1" end

 

if string.find(vis,"neytral") ~= nil then

 

if self.npc:name()=="esc_wolf" or self.npc:name()=="esc_stalker_fanat" or self.npc:name()=="esc_fox" or self.npc:name()=="esc_provodnik" or self.npc:name()=="gar_hellcar" or self.npc:name()=="gar_seryi" or self.npc:name()=="agr_krot" then sect = "neytral_gaz_outfit_m2" end

 

end

 

if vis == "stalker_prizrak" then sect = "outfit_stalker_m1" end

 

if vis == "stalker_neytral_nauchniy" or vis == "stalker_scien" then sect = "scientific_outfit" end

 

if vis == "stalker_neytral_exoskeleton" or vis == "stalker_exoskeleton" then sect = "exo_outfit" end

 

-- novice

 

if string.find(vis,"green_stalker") or vis == "stalker_novice" then sect = "novice_outfit" end

 

if vis == "green_stalker_1" or vis == "green_stalker_5" or vis == "green_stalker_10" or vis == "green_stalker_11" then sect = "neytral_novice_outfit_m1" end

 

if vis == "green_stalker_antigas" then sect = "neytral_novice_gaz_outfit_m1" end

 

-- protect (see ecolog)

 

-- soldier

 

if string.find(vis,"soldier_bandana") or string.find(vis,"soldier_beret") or vis == "soldier_mask" or vis == "soldier_obichniy" or vis == "stalker_soldier" then sect = "outfit_soldier_m1" end

 

if vis == "soldier_spetsnaz" or vis == "stalker_specops" then sect = "specops_outfit" end

 

if vis == "soldier_antigas" then sect = "outfit_specnaz_m1" end

 

-- stalker_zombi

 

if vis == "stalker_zombie1" then sect = "bandit_outfit" end

 

if vis == "stalker_zombie2" or vis == "zombie_fresh_1" then sect = "dolg_outfit" end

 

if vis == "stalker_zombie3" or vis == "stalker_zombie6" or vis == "zombie_fresh_2" then sect = "stalker_outfit" end

 

if vis == "stalker_zombie4" then sect = "killer_outfit" end

 

if vis == "stalker_zombie5" then sect = "stalker_guard_outfit" end

 

if vis == "stalker_zombie7" then sect = "novice_outfit" end

 

if vis == "stalker_zombie8" then sect = "neytral_novice_outfit_m1" end

 

if vis == "stalker_zombie_specnaz" then sect = "specops_outfit" end

 

if vis == "zombie_fresh_0" then sect = "svoboda_heavy_outfit" end

 

if vis == "zombie_exoskeleton" then sect = "broken_exoskeleton" end

 

-- svoboda

 

if vis == "stalker_sv_rukzak_1_1" or vis == "stalker_sv_rukzak_3" or vis == "stalker_svoboda_light" then sect = "svoboda_light_outfit" end

 

if string.find(vis,"stalker_sv_balon_1") or vis == "stalker_sv_rukzak_1" or vis == "stalker_sv_rukzak_2" or vis == "stalker_sv_rukzak_3_1" or vis == "stalker_sv_cook" or vis == "stalker_sv_max" or vis == "stalker_svoboda_heavy" then sect = "svoboda_heavy_outfit" end

 

if vis == "stalker_sv_hood_91" then sect = "svoboda_gaz_outfit_m1" end

 

if vis == "stalker_sv_hood_9" then sect = "svoboda_heavy_gaz_outfit_m1" end

 

if vis == "stalker_sv_nauchniy" then sect = "freedom_scientific_outfit" end

 

if vis == "stalker_sv_exoskeleton" then sect = "svoboda_exoskeleton" end

 

if vis == "stalker_sv_leader" then sect = "outfit_svoboda_m1" end

 

 

 

if sect~=nil then

 

if sect == "bandit_outfit" or sect == "outfit_bandit_m1" or sect == "bandit_gaz_outfit_m1" or sect == "bandit_veteran_outfit" or sect == "bandit_master_outfit" or sect == "novice_outfit" or sect == "neytral_novice_outfit_m1" or sect == "neytral_novice_gaz_outfit_m1" then

 

otf_1 = create_items(self.npc, sect, 1, 650)

 

if otf_1~= nil then

 

amk.start_timer("outfit_cond_1",1,otf_1.id) end

 

 

 

elseif sect == "stalker_outfit" or sect == "killer_outfit" or sect == "outfit_soldier_m1" or sect == "svoboda_light_outfit" or sect == "svoboda_gaz_outfit_m1" then

 

otf_2 = create_items(self.npc, sect, 1, 550)

 

if otf_2~= nil then

 

amk.start_timer("outfit_cond_2",1,otf_2.id) end

 

 

 

elseif sect == "dolg_outfit" or sect == "dolg_gaz_outfit_m1" or sect == "ecolog_outfit" or sect == "outfit_dolg_m1" or sect == "outfit_killer_m1" or sect == "killer_gaz_outfit_m1" or sect == "specops_outfit" or sect == "outfit_specnaz_m1" or sect == "monolit_outfit" or sect == "monolit_gaz_outfit_m1" or sect == "stalker_guard_outfit" or sect == "outfit_stalker_m1" or sect == "outfit_stalker_m2" or sect == "neytral_gaz_outfit_m1" or sect == "neytral_gaz_outfit_m2" or sect == "svoboda_heavy_outfit" or sect == "svoboda_heavy_gaz_outfit_m1" or sect == "outfit_svoboda_m1" then

 

otf_3 = create_items(self.npc, sect, 1, 450)

 

if otf_3~= nil then

 

amk.start_timer("outfit_cond_3",1,otf_3.id) end

 

 

 

elseif sect == "dolg_scientific_outfit" or sect == "ecolog_outfit" or sect == "protection_outfit" or sect == "merc_scientific_outfit" or sect == "military_outfit" or sect == "militaryspec_outfit" or sect == "monolit_scientific_outfit" or sect == "scientific_outfit" or sect == "freedom_scientific_outfit" then

 

otf_4 = create_items(self.npc, sect, 1, 350)

 

if otf_4~= nil then

 

amk.start_timer("outfit_cond_4",1,otf_4.id) end

 

 

 

else

 

otf_5 = create_items(self.npc, sect, 1, 250)

 

if otf_5~= nil then

 

amk.start_timer("outfit_cond_5",1,otf_5.id) end

 

end

 

end

 

end

 

end

 

end

 

 

Лично для меня это большая проблема, в скриптах я не шарю, совместить ещё другое дело. А ты говоришь проще некуда.

Если знаешь как проще, напиши, буду премного благодарен.

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


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

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

Короче я не могу поменять количество выпадаемых патронов, кроме патронов для дробовиков, они поддаются изменению, а все остальные патроны выпадают непонятно как, автоматные по 55 штук, пистолетные по 29 штук.

death_items_count.ltx не поддаётся редактированию(хоть ноль ставь), кроме патронов для дробовиков, они выпадают сколько пропишешь.

Как и где можно так накосячить, чтоб так было?

Даже убирал в death_generic.ltx, но тогда выпадают автоматные 30 шт, пистолетные 20 шт.

В сборке присутствует магазинное питание. Как убрать выпадение патронов?

И почему можно только патроны для дробовиков редактировать?

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


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

Marafon6540, Ты не понял ничего, и что ты написал, это я и сам знаю очень давно.

Я же написал что они не редактируются вообще, хоть что пиши, всё равно выпадает у автоматов по 55 патронов, у пистолетов по 29 патронов. А в чистом магазинном питание они нормально редактируются, и сколько там пропишешь, столько и будет выпадать, можно сделать чтоб вообще не выпадало. А у меня в сборке я не могу сделать чтоб меньше выпадало, или вообще убрать выпадение.

В death_items_by_communities .ltx и в death_items_by_levels.ltx ставил нули, всё равно выпадают у автоматов по 55 патронов, у пистолетов по 29 патронов. Убирал даже в death_generic.ltx, но тогда выпадают автоматные 30 шт, пистолетные 20 шт.

И у меня ещё одна проблема, я не могу изменить разброс у оружия, он у всего оружия одинаковый, кроме дробовиков. В fire_dispersion_base хоть что ставь, разброс остаётся неизменным, так-же и у дробовиков.

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


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

Marafon6540, Ну ты и рассмешил, насчёт правки другого ствола, я по десять раз правил один и тот-же ствол,и выходит все разы не тот ствол. :rofl2:

На счёт патронов, в xr_motivator.script попробовал закоментить эту строку spawn.inv(self.ammo_in_use,self.object:id()), стало всё нормально, но нпс стали пользоваться только пистолетами. Эта строка дополнительный спавн патронов.

А на счёт того что ни в одном моде не было проблем, описанных мной, это ты зря. Специально установил амк, поставил на него магазинное питание, и эта же проблема там(этот же дополнительный спавн патронов прёт, всегда на 30 патронов больше для автомата, и 20 для пистолета, напишешь 5, а будет 25). А у меня сборка на основе амк. Так-что это уже автор адаптации для амк нахимичил.

 

Вот я и спрашиваю, как сделать чтоб выпадало сколько пропишешь, без этого дополнительного спавна.

На чистой игре всё нормально работает. А вот в амк что-то заставляет спавнить эти дополнительные патроны.

  • Не нравится 1

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


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

Вчера в xr_motivator.script попробовал закоментить эту строку spawn.inv(self.ammo_in_use,self.object:id()), стало всё нормально, но нпс стали пользоваться только пистолетами. Потом вчера-же раскоментил её, но всё осталось так-же как с закоментированной строкой.(Между этими действиями абсолютно ничего не трогал) Само собой новая игра.

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

И не могу поменять fire_dispersion_base в конфиге оружия, хоть что пиши, любые цифры, разброс не меняется абсолютно.

Но с разбросом то ладно, как сделать чтоб нпс автоматами пользовались, вообще ума не приложу(хотя это потому что не спавнятся патроны для автоматов, и магазины). Но строка раскаментированная(должно быть всё нормально), а толку нет, работает как с закоментированной.

Люди мои посты уже начали минусить, а всё потому что сами с этим не сталкивались ещё.

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


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

Как сделать чтоб не выпадали у трупов лишние двадцать патронов, от оружия которое не использовал непись(не было у него ещё в руках).

death_items_count.ltx тут не причём, это ал пак выдаёт лишние двадцать патронов. Хоть по нулям в death_items_count.ltx, а 20 патронов всё равно выпадет в трупе, от второго его оружия, которое он ещё в руки не брал, если брал, то не выпадет.

Вот как прекратить это безобразие, хочу минимум патронов с трупов.

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


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

VovanDolg, Да я знаю что если в character_desc_***.xml убрать то не появятся вообще патроны. Я хочу чтоб минимум выпадало патронов, допустим от 0 до 8.

Но с алпаком, если нпс не брал то оружие в руки, то патронов у него выпадет в зависимости от пачки патронов того калибра, допустим у Макара лишние 20 шт, у Калаша лишние 30 шт. Вот допустим у нпс пистолет и автомат, если ты его убил из далека или внезапно для него , короче он не брал пистолет в руки, то патронов у него выпадет от пистолета на 20 шт больше чем в death_items_count.ltx написал, а если он успел пострелять с пистолета, или просто его взять в руки, то выпадет сколько написал.

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


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

Подскажите пожалуйста кто в курсе этого:

1.Как в ТЧ сделать чтоб торговцы не покупали изношенную броню и оружие, короче как в ЗП?

2.Как сделать в ТЧ чтоб у торговцев не обновлялся ассортимент вообще(при загрузке сохранения)?

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


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

Shredder, Короче сделал я всё по своему. Теперь у торговцев кончаются товары, всё что продал им, у их остаётся в торговле, торговля не обновляется вообще. Теперь не почитеришь, что было до сохранения игры, то и будет после загрузки сохранения.

Сделал много мелких торговцев по зоне, а то товары то кончаются, привозки теперь нет. :)

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


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

Как я сделал, там уже никак обновление торговли не сделаешь.

У меня товары у торговцев в all.spawn. А больше никак не мог придумать, я же не скриптёр.

Просто закаментил четыре строчки в trade_manager.script, нашёл торговцев всех в all.spawn, и добавил им товаров.

Никто ведь никогда не подскажет поподробнее как сделать всё по уму, пришлось городить самому.

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

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


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

А как сделать чтоб у нпс после его смерти, оставалось то что он насобирал за свою жизнь?

 

Знаю один способ, но с ним выдаются лишние 20 или 30 патронов ко второму оружию(в зависимости от оружия), если допустим у нпс до смерти в руках был автомат, то в добавок к прописанным в death_items_count.ltx выпадут ещё 20 патронов к пистолету, если пистолет был в руках, то выпадут 30 патронов в добавок к тем что в death_items_count.ltx прописаны(хоть будет в death_items_count.ltx 0, 0, всё равно выпадут). Не нравиться мне это безобразие, охота чтоб выпадали патроны только так-как пропишу в death_items_count.ltx.

Может кто знает способ нормальный, который не добавляет эти лишние патроны?

 

Я вот взял даже сейчас с амк для пробы

-- удалять ПДА, гитару\гармошку, фонарики и приборы ночного видения, рацию, бинокль.

if (section == "device_torch" or section == "device_pda" or section == "hand_radio" or

section == "guitar_a" or section == "harmonica_a" or section == "binocular_a" or

section =="wpn_knife" or section == "wpn_binoc" or section=="bolt") then

--if (npc.mark_item_dropped) then

-- npc:mark_item_dropped(item)

--end

alife():release(alife():object(item:id()), true)

end

end

 

--' Функция спавнит необходимое число предметов

function create_items(npc, section, number, rnd)

if npc == nil then return end

 

Вот эта функция оставляет итемы у нпс, но она зараза ещё как-то пачку патронов добавляет к тому оружию которое не в руках было у нпс во время его смерти.

 

Ура!!! Сделал.

if (section == "device_torch" or section == "device_pda" or section == "hand_radio" or

section == "guitar_a" or section == "harmonica_a" or section == "binocular_a" or

section =="wpn_knife" or section == "wpn_binoc" or section=="bolt" or section == "ammo_9x18_fmj") then

alife():release(alife():object(item:id()), true)

end

return true

end

 

Теперь выпадает сколько прописано в death_items_count.ltx

Теперь все патроны туда пропишу, и окей.

Давно мечтал это сделать.

 

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

ColR_iT

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

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


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

Уже прописал. :)

Ну а как добавить проверку на принадлежность к классу патронов, подскажи, могу и переписать, недолго это.

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


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

Как сделать чтоб ГГ не мог спать когда враг рядом, чтоб не открывалось меню сна?

Раньше у меня был такой спальник, где-то же находил, теперь не могу найти.

А вот как самому сделать так, не знаю.

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


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

slavapro, Замени xrGame.dll, просто поставь оригинал. но это смотря в какой мод ты играешь, и смотря что там ещё кроме прицела в этом xrGame.dll. А то может в моде стволы не прописаны ещё.

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


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

Ребят подскажите, поставил короче систему постепенной регенерации жизни, работает всё отлично, но вот Толика не могу вылечить, становиться другом но вставать не хочет и лежит кричит чтоб помог.

Это потому наверно что в items.ltx у аптечек eat_health = 0.0, но это так и надо, иначе актёр два раза будет лечится, сперва как обычно, потом медленно. Подскажи пожалуйста как сделать чтоб нпс лечились сами(аптечками которые не лечат :grin2: ).

Ну ведь есть же моды где эта система постепенной регенерации жизни стоит, и Толик лечится.

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


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

ColR_iT Удалил я этот abc_medkit.script с "Система постепенной регенерации жизни из Lurk mod и ABC", оставив с него только убор оружия при использовании еды и медикаментов, и звуки при использовании еды и медикаментов.

А вместо abc_medkit.script поставил Slow Medicine 0.2b by Министр, пока всё прекрасно работает, и Толик лечится, и у ГГ медленно здоровье поднимается при использовании аптечки.

А с abc_medkit.script всяко пробовал, там видать просто не полностью всё написали.

Ссылка

Там даже написано "Для начала создадим скрипт. Например health_effect.script"

Хотя надо создать heal_regen.script а не health_effect.script.

Старлей, а зачем мне другие нпс то, тут и по Толику видать что не работает, т.к аптечка лечит только ГГ.

И он её не просто взял, а использовал, и все последующие аптечки тоже использовал, но безрезультатно.

Когда я его убивал то у него не было аптечек. У меня в сборке включено "оставлять итемы у нпс", так-что они нахомячили всё при них.

Да и eat_health = 0, тут и так всё ясно.

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

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


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

Никто не знает как сделать чтоб во время убийства ГГ все сохранения стирались сразу?

Ну или портились, ну чтоб нельзя их было загрузить.

Или сделать чтоб только во время выхода из игры чтоб сохранялась. Чтоб при переходах тоже не сохранялась.

Чтоб каждый раз после смерти ГГ надо было начинать новую игру. Чтоб за время игры была одна всего смерть ГГ.

Ну а при жизни ГГ чтоб сохранялось и загружалось всё нормально.

Возможно ли это реализовать?

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


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

А можно ли сделать чтоб при открывании ПДА, убиралось оружие из рук ГГ?

Как бы это сделать, а может это уже есть в модах?

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


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

Подскажите пожалуйста, как сделать чтоб нпс отображались на самой карте(как на миникарте)?

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


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

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