alex5773 1 330 Опубликовано 20 Ноября 2012 (изменено) 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 Изменено 20 Ноября 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 22 Ноября 2012 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 Лично для меня это большая проблема, в скриптах я не шарю, совместить ещё другое дело. А ты говоришь проще некуда. Если знаешь как проще, напиши, буду премного благодарен. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 24 Ноября 2012 Помогите разобраться в выпадение патронов в трупах. Короче я не могу поменять количество выпадаемых патронов, кроме патронов для дробовиков, они поддаются изменению, а все остальные патроны выпадают непонятно как, автоматные по 55 штук, пистолетные по 29 штук. death_items_count.ltx не поддаётся редактированию(хоть ноль ставь), кроме патронов для дробовиков, они выпадают сколько пропишешь. Как и где можно так накосячить, чтоб так было? Даже убирал в death_generic.ltx, но тогда выпадают автоматные 30 шт, пистолетные 20 шт. В сборке присутствует магазинное питание. Как убрать выпадение патронов? И почему можно только патроны для дробовиков редактировать? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 24 Ноября 2012 Marafon6540, Ты не понял ничего, и что ты написал, это я и сам знаю очень давно. Я же написал что они не редактируются вообще, хоть что пиши, всё равно выпадает у автоматов по 55 патронов, у пистолетов по 29 патронов. А в чистом магазинном питание они нормально редактируются, и сколько там пропишешь, столько и будет выпадать, можно сделать чтоб вообще не выпадало. А у меня в сборке я не могу сделать чтоб меньше выпадало, или вообще убрать выпадение. В death_items_by_communities .ltx и в death_items_by_levels.ltx ставил нули, всё равно выпадают у автоматов по 55 патронов, у пистолетов по 29 патронов. Убирал даже в death_generic.ltx, но тогда выпадают автоматные 30 шт, пистолетные 20 шт. И у меня ещё одна проблема, я не могу изменить разброс у оружия, он у всего оружия одинаковый, кроме дробовиков. В fire_dispersion_base хоть что ставь, разброс остаётся неизменным, так-же и у дробовиков. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 25 Ноября 2012 Marafon6540, Ну ты и рассмешил, насчёт правки другого ствола, я по десять раз правил один и тот-же ствол,и выходит все разы не тот ствол. На счёт патронов, в xr_motivator.script попробовал закоментить эту строку spawn.inv(self.ammo_in_use,self.object:id()), стало всё нормально, но нпс стали пользоваться только пистолетами. Эта строка дополнительный спавн патронов. А на счёт того что ни в одном моде не было проблем, описанных мной, это ты зря. Специально установил амк, поставил на него магазинное питание, и эта же проблема там(этот же дополнительный спавн патронов прёт, всегда на 30 патронов больше для автомата, и 20 для пистолета, напишешь 5, а будет 25). А у меня сборка на основе амк. Так-что это уже автор адаптации для амк нахимичил. Вот я и спрашиваю, как сделать чтоб выпадало сколько пропишешь, без этого дополнительного спавна. На чистой игре всё нормально работает. А вот в амк что-то заставляет спавнить эти дополнительные патроны. 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 26 Ноября 2012 Вчера в xr_motivator.script попробовал закоментить эту строку spawn.inv(self.ammo_in_use,self.object:id()), стало всё нормально, но нпс стали пользоваться только пистолетами. Потом вчера-же раскоментил её, но всё осталось так-же как с закоментированной строкой.(Между этими действиями абсолютно ничего не трогал) Само собой новая игра. Теперь нпс пользуются только пистолетами, и я не знаю что делать, как всё вернуть, так как было до закоментирования той строки. И не могу поменять fire_dispersion_base в конфиге оружия, хоть что пиши, любые цифры, разброс не меняется абсолютно. Но с разбросом то ладно, как сделать чтоб нпс автоматами пользовались, вообще ума не приложу(хотя это потому что не спавнятся патроны для автоматов, и магазины). Но строка раскаментированная(должно быть всё нормально), а толку нет, работает как с закоментированной. Люди мои посты уже начали минусить, а всё потому что сами с этим не сталкивались ещё. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 8 Января 2013 Как сделать чтоб не выпадали у трупов лишние двадцать патронов, от оружия которое не использовал непись(не было у него ещё в руках). death_items_count.ltx тут не причём, это ал пак выдаёт лишние двадцать патронов. Хоть по нулям в death_items_count.ltx, а 20 патронов всё равно выпадет в трупе, от второго его оружия, которое он ещё в руки не брал, если брал, то не выпадет. Вот как прекратить это безобразие, хочу минимум патронов с трупов. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 10 Января 2013 VovanDolg, Да я знаю что если в character_desc_***.xml убрать то не появятся вообще патроны. Я хочу чтоб минимум выпадало патронов, допустим от 0 до 8. Но с алпаком, если нпс не брал то оружие в руки, то патронов у него выпадет в зависимости от пачки патронов того калибра, допустим у Макара лишние 20 шт, у Калаша лишние 30 шт. Вот допустим у нпс пистолет и автомат, если ты его убил из далека или внезапно для него , короче он не брал пистолет в руки, то патронов у него выпадет от пистолета на 20 шт больше чем в death_items_count.ltx написал, а если он успел пострелять с пистолета, или просто его взять в руки, то выпадет сколько написал. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 11 Января 2013 Подскажите пожалуйста кто в курсе этого: 1.Как в ТЧ сделать чтоб торговцы не покупали изношенную броню и оружие, короче как в ЗП? 2.Как сделать в ТЧ чтоб у торговцев не обновлялся ассортимент вообще(при загрузке сохранения)? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 12 Января 2013 Shredder, Короче сделал я всё по своему. Теперь у торговцев кончаются товары, всё что продал им, у их остаётся в торговле, торговля не обновляется вообще. Теперь не почитеришь, что было до сохранения игры, то и будет после загрузки сохранения. Сделал много мелких торговцев по зоне, а то товары то кончаются, привозки теперь нет. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 12 Января 2013 Как я сделал, там уже никак обновление торговли не сделаешь. У меня товары у торговцев в all.spawn. А больше никак не мог придумать, я же не скриптёр. Просто закаментил четыре строчки в trade_manager.script, нашёл торговцев всех в all.spawn, и добавил им товаров. Никто ведь никогда не подскажет поподробнее как сделать всё по уму, пришлось городить самому. Но я с удовольствием переделаю всё заново, если буду знать другой способ. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 1 Февраля 2013 (изменено) А как сделать чтоб у нпс после его смерти, оставалось то что он насобирал за свою жизнь? Знаю один способ, но с ним выдаются лишние 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 Изменено 1 Февраля 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 1 Февраля 2013 Уже прописал. Ну а как добавить проверку на принадлежность к классу патронов, подскажи, могу и переписать, недолго это. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 12 Февраля 2013 Как сделать чтоб ГГ не мог спать когда враг рядом, чтоб не открывалось меню сна? Раньше у меня был такой спальник, где-то же находил, теперь не могу найти. А вот как самому сделать так, не знаю. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 15 Февраля 2013 slavapro, Замени xrGame.dll, просто поставь оригинал. но это смотря в какой мод ты играешь, и смотря что там ещё кроме прицела в этом xrGame.dll. А то может в моде стволы не прописаны ещё. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 21 Февраля 2013 Ребят подскажите, поставил короче систему постепенной регенерации жизни, работает всё отлично, но вот Толика не могу вылечить, становиться другом но вставать не хочет и лежит кричит чтоб помог. Это потому наверно что в items.ltx у аптечек eat_health = 0.0, но это так и надо, иначе актёр два раза будет лечится, сперва как обычно, потом медленно. Подскажи пожалуйста как сделать чтоб нпс лечились сами(аптечками которые не лечат ). Ну ведь есть же моды где эта система постепенной регенерации жизни стоит, и Толик лечится. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 21 Февраля 2013 (изменено) 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, тут и так всё ясно. Изменено 22 Февраля 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 25 Февраля 2013 Никто не знает как сделать чтоб во время убийства ГГ все сохранения стирались сразу? Ну или портились, ну чтоб нельзя их было загрузить. Или сделать чтоб только во время выхода из игры чтоб сохранялась. Чтоб при переходах тоже не сохранялась. Чтоб каждый раз после смерти ГГ надо было начинать новую игру. Чтоб за время игры была одна всего смерть ГГ. Ну а при жизни ГГ чтоб сохранялось и загружалось всё нормально. Возможно ли это реализовать? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 12 Марта 2013 А можно ли сделать чтоб при открывании ПДА, убиралось оружие из рук ГГ? Как бы это сделать, а может это уже есть в модах? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 330 Опубликовано 18 Марта 2013 Подскажите пожалуйста, как сделать чтоб нпс отображались на самой карте(как на миникарте)? Поделиться этим сообщением Ссылка на сообщение