Maks_K 0 Опубликовано 24 Октября 2009 Вот порылся в файлах нашел список оружия при которой возникает квест с Корягой про украденное оружие: wpn_groza_nimble wpn_vintorez_nimble wpn_desert_eagle_nimble wpn_fn2000_nimble wpn_g36_nimble wpn_protecta_nimble wpn_mp5_nimble wpn_sig220_nimble wpn_spas12_nimble wpn_usp_nimble wpn_svu_nimble wpn_svd_nimble Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 27 Октября 2009 Полтергейст, Вроде после этих изменений меняется только класс с S_PDA на II_ATTCH, больше ничего. так может в этом и дело - отслеживание идет на уровне классов ну например в классе вызывается какая то функция Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 29 Октября 2009 ViRUS, не уверен 1. там негде нету or вот пример квест сдачи монолитовцев файл tm_jupiter.ltx condlist_0 = {+jup_b4_monolith_squad_in_duty} complete %+jup_b4_monolith_squad_redy_go_yanov% condlist_1 = {+jup_b4_monolith_squad_in_freedom} complete %+jup_b4_monolith_squad_redy_go_yanov% похоже что каждый вариант свой condlist т.е. попробуй Condlist_0 = {=actor_has_item(scientific_outfit) complete Condlist_1 ={=actor_has_item(scientific_outfit)} complete Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 31 Октября 2009 Jurok, У меня есть один вопрос. Как убрать основные задания в ЗП? Хочу сделать полный фриплей с самого начала игры. глянь файлы outro_good.script outro_cond.script Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 8 Ноября 2009 Guzerus, это из патча 1.6.01 -- run_string log("----->"..tostring(xr_statistic.actor_statistic.best_monster).." "..tostring(xr_statistic.actor_statistic.best_monster_rank)) actor_statistic = { surges = 0, completed_quests = 0, killed_monsters = 0, killed_stalkers = 0, founded_secrets = 0, artefacts_founded = 0, best_monster = nil, favorite_weapon_sect = nil, best_monster_rank = 0, } monster_classes = { [clsid.bloodsucker_s] = "bloodsucker", [clsid.boar_s] = "boar", [clsid.burer_s] = "burer", [clsid.chimera_s] = "chimera", [clsid.controller_s] = "controller", [clsid.dog_s] = "dog", [clsid.flesh_s] = "flesh", [clsid.gigant_s] = "gigant", [clsid.poltergeist_s] = "poltergeist", [clsid.psy_dog_s] = "psy_dog", [clsid.pseudodog_s] = "pseudodog", [clsid.snork_s ] = "snork", [clsid.tushkano_s ] = "tushkano", } weapons_table = { abakan = 0, ak74 = 0, ak74u = 0, beretta = 0, bm16 = 0, colt1911 = 0, desert = 0, f1 = 0, fn2000 = 0, fort = 0, g36 = 0, gauss = 0, groza = 0, hpsa = 0, knife = 0, l85 = 0, lr300 = 0, mp5 = 0, pb = 0, pkm = 0, pm = 0, protecta = 0, rg = 0, rgd5 = 0, rpg7 = 0, sig220 = 0, sig550 = 0, spas12 = 0, svd = 0, svu = 0, toz34 = 0, usp45 = 0, val = 0, vintorez = 0, walther = 0, wincheaster1300 = 0, } artefacts_table = { af_cristall = false, af_blood = false, af_electra_sparkler = false, af_cristall_flower = false, af_medusa = false, af_fireball = false, af_mincer_meat = false, af_electra_flash = false, af_night_star = false, af_dummy_glassbeads = false, af_soul = false, af_electra_moonlight = false, af_dummy_battery = false, af_vyvert = false, af_fuzz_kolobok = false, af_gravi = false, af_eye = false, af_baloon = false, af_dummy_dummy = false, af_gold_fish = false, af_fire = false, af_glass = false, af_ice = false, } taken_artefacts = {} function inc_surges_counter() actor_statistic.surges = actor_statistic.surges + 1 end function inc_completed_quests_counter() actor_statistic.completed_quests = actor_statistic.completed_quests + 1 end function inc_killed_monsters_counter() actor_statistic.killed_monsters = actor_statistic.killed_monsters + 1 end function inc_killed_stalkers_counter() actor_statistic.killed_stalkers = actor_statistic.killed_stalkers + 1 end function inc_founded_artefacts_counter(art_id) if(taken_artefacts[art_id]==nil) then actor_statistic.artefacts_founded = actor_statistic.artefacts_founded + 1 taken_artefacts[art_id] = art_id local s_art = alife():object(art_id) if(s_art and s_art:section_name()) then artefacts_table[s_art:section_name()] = true end end end function inc_founded_secrets_counter() actor_statistic.founded_secrets = actor_statistic.founded_secrets + 1 end function set_best_monster(obj) if IsStalker(obj) then -- actor_statistic.best_monster = "stalker" else local community = monster_classes[get_clsid(obj)] if not(community) then abort("Statistic ERROR: cannot find monster class for [%s] clsid [%s]", obj:name(), tostring(get_clsid(obj))) end local s_obj = alife():object(obj:id()) if(s_obj) then local rank = s_obj:rank() if(community=="flesh") then if(rank==3) then community = community.."_strong" else community = community.."_weak" end elseif(community=="poltergeist") then if(rank==12) then community = community.."_flame" else community = community.."_tele" end elseif(community=="boar") then if(rank==6) then community = community.."_strong" else community = community.."_weak" end elseif(community=="pseudodog" or community=="psy_dog") then if(rank==13) then community = community.."_strong" else community = community.."_weak" end elseif(community=="bloodsucker") then if(rank==16) then community = community.."_strong" elseif(rank==15) then community = community.."_normal" else community = community.."_weak" end end if(rank>actor_statistic.best_monster_rank) then actor_statistic.best_monster_rank = rank actor_statistic.best_monster = community end end end end function set_best_weapon(hit_amount) local active_item = db.actor:active_item() if(active_item) then local s_obj = alife():object(active_item:id()) if(s_obj) then local s = s_obj:section_name() for w in string.gfind(s, "%w+") do if(weapons_table[w]~=nil) then weapons_table[w] = weapons_table[w] + hit_amount end end end local amount = 0 for k,v in pairs(weapons_table) do if(v>amount) then amount = v if(k=="rgd5" or k=="f1") then actor_statistic.favorite_weapon_sect = "grenade_"..k else actor_statistic.favorite_weapon_sect = "wpn_"..k end if(k=="desert") then actor_statistic.favorite_weapon_sect = "wpn_desert_eagle" elseif(k=="rg") then actor_statistic.favorite_weapon_sect = "wpn_rg-6" end end end end end function save(package) package:w_u16(actor_statistic.surges) package:w_u16(actor_statistic.completed_quests) package:w_u32(actor_statistic.killed_monsters) package:w_u32(actor_statistic.killed_stalkers) package:w_u16(actor_statistic.founded_secrets) package:w_u16(actor_statistic.artefacts_founded) package:w_u32(actor_statistic.best_monster_rank) package:w_stringZ(tostring(actor_statistic.best_monster)) package:w_stringZ(tostring(actor_statistic.favorite_weapon_sect)) local i = 0 for k,v in pairs(weapons_table) do i = i + 1 end package:w_u8(i) for k,v in pairs(weapons_table) do package:w_stringZ(tostring(k)) package:w_float(v) end i = 0 for k,v in pairs(artefacts_table) do i = i + 1 end package:w_u8(i) for k,v in pairs(artefacts_table) do package:w_stringZ(tostring(k)) package:w_bool(v) end i = 0 for k,v in pairs(taken_artefacts) do i = i + 1 end package:w_u8(i) for k,v in pairs(taken_artefacts) do package:w_u32(k) end end function load(package) actor_statistic = {} actor_statistic.surges = package:r_u16() actor_statistic.completed_quests = package:r_u16() actor_statistic.killed_monsters = package:r_u32() actor_statistic.killed_stalkers = package:r_u32() actor_statistic.founded_secrets = package:r_u16() actor_statistic.artefacts_founded = package:r_u16() actor_statistic.best_monster_rank = package:r_u32() local str = package:r_stringZ() if(str~="nil") then actor_statistic.best_monster = str end str = package:r_stringZ() if(str~="nil") then actor_statistic.favorite_weapon_sect = str end weapons_table = {} local n = package:r_u8() for i = 1,n do local k = package:r_stringZ() local v = package:r_float() weapons_table[k] = v end artefacts_table = {} n = package:r_u8() for i = 1,n do log("n "..tostring(n)) local k = package:r_stringZ() local v = package:r_bool() artefacts_table[k] = v end taken_artefacts = {} n = package:r_u8() for i = 1,n do local k = package:r_u32() taken_artefacts[k] = k end end function pioneer_functor() if not has_alife_info("pioneer_achievement_gained") then if has_alife_info("zat_b14_give_item_linker") and has_alife_info("jup_b1_complete_end") and has_alife_info("jup_b206_anomalous_grove_done") then db.actor:give_info_portion("pioneer_achievement_gained") news_manager.send_tip(db.actor, "st_ach_pioneer", nil, "pioneer", nil, nil) end end return has_alife_info("pioneer_achievement_gained") end function mutant_hunter_functor() if not has_alife_info("mutant_hunter_achievement_gained") then if has_alife_info("jup_b208_burers_hunt_done") and has_alife_info("jup_b211_scene_done") and has_alife_info("jup_b212_jupiter_chimera_hunt_done") then db.actor:give_info_portion("mutant_hunter_achievement_gained") news_manager.send_tip(db.actor, "st_ach_mutant_hunter", nil, "mutant_hunter", nil, nil) end end return has_alife_info("mutant_hunter_achievement_gained") end function detective_functor() if not has_alife_info("detective_achievement_gained") then if has_alife_info("zat_b22_barmen_gave_reward") then db.actor:give_info_portion("detective_achievement_gained") news_manager.send_tip(db.actor, "st_ach_detective", nil, "detective", nil, nil) end end return has_alife_info("detective_achievement_gained") end function one_of_the_lads_functor() if not has_alife_info("one_of_the_lads_gained") then if has_alife_info("zat_b30_sultan_loose") and has_alife_info("zat_b7_actor_help_stalkers") then db.actor:give_info_portion("one_of_the_lads_gained") news_manager.send_tip(db.actor, "st_ach_one_of_the_lads", nil, "one_of_the_lads", nil, nil) end end return has_alife_info("one_of_the_lads_gained") end function kingpin_functor() if not has_alife_info("kingpin_gained") then if has_alife_info("zat_b30_barmen_under_sultan") and has_alife_info("zat_b7_actor_help_bandits") then db.actor:give_info_portion("kingpin_gained") news_manager.send_tip(db.actor, "st_ach_kingpin", nil, "kingpin", nil, nil) end end return has_alife_info("kingpin_gained") end function herald_of_justice_functor() if not has_alife_info("herald_of_justice_achievement_gained") then if has_alife_info("jup_b25_flint_blame_done_to_duty") or has_alife_info("jup_b25_flint_blame_done_to_freedom") or has_alife_info("zat_b106_found_soroka_done") then db.actor:give_info_portion("herald_of_justice_achievement_gained") news_manager.send_tip(db.actor, "st_ach_herald_of_justice", nil, "herald_of_justice", nil, nil) end end return has_alife_info("herald_of_justice_achievement_gained") end function seeker_functor() if has_alife_info("sim_bandit_attack_harder") then return true end for k,v in pairs(artefacts_table) do if not v then return false end end -- Бандиты симуляционно больше преследуют игрока db.actor:give_info_portion("sim_bandit_attack_harder") news_manager.send_tip(db.actor, "st_ach_seeker", nil, "seeker", nil, nil) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 200}) return true end function battle_systems_master_functor() if not has_alife_info("battle_systems_master_achievement_gained") then if has_alife_info("zat_b3_all_instruments_brought") then news_manager.send_tip(db.actor, "st_ach_battle_systems_master", nil, "battle_systems_master", nil, nil) db.actor:give_info_portion("battle_systems_master_achievement_gained") end end return has_alife_info("battle_systems_master_achievement_gained") end function high_tech_master_functor() if not has_alife_info("high_tech_master_achievement_gained") then if has_alife_info("jup_b217_tech_instrument_1_brought") and has_alife_info("jup_b217_tech_instrument_2_brought") and has_alife_info("jup_b217_tech_instrument_3_brought") then news_manager.send_tip(db.actor, "st_ach_high_tech_master", nil, "high_tech_master", nil, nil) db.actor:give_info_portion("high_tech_master_achievement_gained") end end return has_alife_info("high_tech_master_achievement_gained") end function skilled_stalker_functor() if not has_alife_info("skilled_stalker_achievement_gained") then if has_alife_info("actor_was_in_many_bad_places") then news_manager.send_tip(db.actor, "st_ach_skilled_stalker", nil, "skilled_stalker", nil, nil) db.actor:give_info_portion("skilled_stalker_achievement_gained") end end return has_alife_info("skilled_stalker_achievement_gained") end function leader_functor() -- логика бонуса: pri_a21_base_restrictor.ltx if not has_alife_info("leader_achievement_gained") then if has_alife_info("jup_a10_vano_agree_go_und") and has_alife_info("jup_b218_soldier_hired") and has_alife_info("jup_b218_monolith_hired") then news_manager.send_tip(db.actor, "st_ach_leader", nil, "leader", nil, nil) db.actor:give_info_portion("leader_achievement_gained") end end return has_alife_info("leader_achievement_gained") end function diplomat_functor() if not has_alife_info("diplomat_achievement_gained") then if has_alife_info("jup_a12_wo_shooting") and (has_alife_info("jup_a10_bandit_take_all_money") or has_alife_info("jup_a10_bandit_take_money")) then news_manager.send_tip(db.actor, "st_ach_diplomat", nil, "diplomat", nil, nil) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 200}) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"freedom", 200}) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"dolg", 200}) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"bandit", 200}) db.actor:give_info_portion("diplomat_achievement_gained") end end return has_alife_info("diplomat_achievement_gained") end function research_man_functor() if has_alife_info("research_man_gained") then return true end local info_table = { [1] = "jup_b16_task_done", [2] = "jup_b1_task_done", [3] = "jup_b46_task_done", [4] = "jup_b47_task_end", [5] = "jup_b32_task_done", [6] = "jup_b6_task_done", [7] = "jup_b206_task_done", [8] = "jup_b209_task_done" } local count = 0 for k,v in pairs (info_table) do if has_alife_info(v) then count = count + 1 end if count >= 4 then db.actor:give_info_portion("research_man_gained") news_manager.send_tip(db.actor, "st_ach_research_man", nil, "research_man", nil, nil) return true end end return false end function friend_of_duty_functor() if not has_alife_info("sim_duty_help_harder") then if has_alife_info("jup_b4_monolith_squad_in_duty") and has_alife_info("jup_b46_duty_founder_pda_to_duty") and has_alife_info("jup_b207_sell_dealers_pda_duty") and has_alife_info("jup_b25_flint_blame_done_to_duty") then db.actor:give_info_portion("sim_duty_help_harder") news_manager.send_tip(db.actor, "st_ach_friend_of_duty", nil, "friend_of_duty", nil, nil) end end return has_alife_info("sim_duty_help_harder") end function friend_of_freedom_functor() if not has_alife_info("sim_freedom_help_harder") then if has_alife_info("jup_b4_monolith_squad_in_freedom") and has_alife_info("jup_b46_duty_founder_pda_to_freedom") and has_alife_info("jup_b207_sell_dealers_pda_freedom") and has_alife_info("jup_b25_flint_blame_done_to_freedom") then db.actor:give_info_portion("sim_freedom_help_harder") news_manager.send_tip(db.actor, "st_ach_friend_of_freedom", nil, "friend_of_freedom", nil, nil) end end return has_alife_info("sim_freedom_help_harder") end function balance_advocate_functor() if not has_alife_info("balance_advocate_gained") then if has_alife_info("jup_b46_duty_founder_pda_to_stalkers") and has_alife_info("jup_b207_dealers_pda_sold_owl") and has_alife_info("zat_b106_found_soroka_done") then db.actor:give_info_portion("balance_advocate_gained") news_manager.send_tip(db.actor, "st_ach_balance_advocate", nil, "balance_advocate", nil, nil) end end return has_alife_info("balance_advocate_gained") end function wealthy_functor() if db.actor:money() >= 100000 and not has_alife_info("actor_wealthy") then db.actor:give_info_portion("actor_wealthy") news_manager.send_tip(db.actor, "st_ach_wealthy", nil, "wealthy", nil, nil) end return has_alife_info("actor_wealthy") end function keeper_of_secrets_functor() -- логика бонуса: pri_b305_logic.ltx if not has_alife_info("keeper_of_secrets_achievement_gained") then if has_alife_info("pri_b305_all_strelok_notes_given") then db.actor:give_info_portion("keeper_of_secrets_achievement_gained") news_manager.send_tip(db.actor, "st_ach_keeper_of_secrets", nil, "keeper_of_secrets", nil, nil) end end return has_alife_info("keeper_of_secrets_achievement_gained") end function marked_by_zone_functor() if has_alife_info("actor_marked_by_zone_3_times") then return true end local counter_name = "actor_marked_by_zone_cnt" local cnt_value = xr_logic.pstor_retrieve(db.actor, counter_name, 0) if cnt_value > 2 then db.actor:give_info_portion("actor_marked_by_zone_3_times") news_manager.send_tip(db.actor, "st_ach_marked_by_zone", nil, "marked_by_zone", nil, nil) return true end return false end function information_dealer_functor() if has_alife_info("actor_information_dealer") then return true end local info_table = { [1] = "zat_b40_pda_1_saled", [2] = "zat_b40_pda_2_saled", [3] = "jup_b46_duty_founder_pda_sold", [4] = "jup_b207_merc_pda_with_contract_sold", [5] = "jup_b207_dealers_pda_sold", [6] = "jup_a9_evacuation_info_sold", [7] = "jup_a9_meeting_info_sold", [8] = "jup_a9_losses_info_sold", [9] = "jup_a9_delivery_info_sold", [10] = "zat_b12_documents_sold_1", [11] = "zat_b12_documents_sold_2", [12] = "zat_b12_documents_sold_3", [13] = "zat_b40_notebook_saled", [14] = "device_flash_snag_sold", [15] = "device_pda_port_bandit_leader_sold", [16] = "jup_b10_ufo_memory_2_sold" } local count = 0 for k,v in pairs (info_table) do if has_alife_info(v) then count = count + 1 end if count >= 10 then news_manager.send_tip(db.actor, "st_ach_information_dealer", nil, "information_dealer", nil, nil) db.actor:give_info_portion("actor_information_dealer") return true end end return has_alife_info("actor_information_dealer") end function friend_of_stalkers_functor() if not has_alife_info("sim_stalker_help_harder") then if has_alife_info("jup_b220_trapper_zaton_chimera_hunted_told") and has_alife_info("jup_a12_stalker_prisoner_helped") and has_alife_info("jup_a10_vano_give_task_end") and has_alife_info("zat_b5_stalker_leader_end") and has_alife_info("zat_b7_task_end") then db.actor:give_info_portion("sim_stalker_help_harder") news_manager.send_tip(db.actor, "st_ach_friend_of_stalkers", nil, "friend_of_stalkers", nil, nil) xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 100}) end end return has_alife_info("sim_stalker_help_harder") end Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 13 Ноября 2009 кровоSTALKER, Квесты затон \configs\misc\tm_zaton.ltx + еще \configs\scripts\zaton\*.ltx скрипты логики - могут использоваться в квестах Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 15 Ноября 2009 psevdoгринго, В ранних версиях ТЧ и ЧН трансорт был в наличии но отключен в ЗП если не ошибаюсь его нет вообще Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 20 Ноября 2009 Сквад - это боевой отряд из нескольких сталкеров, универсальный "юнит" Войны группировок. Параметры сквадов находятся в файлах вида squad_descr_<локация>.ltx в папке configs/misc. И в этих файлах, открываемых обычным Блокнотом, каждому скваду соответсвует секция, где указываются как минимум три обязательных параметра: фракция - faction, состав - npc, и, что нам требуется, цель - target_smart - пункт на карте, который этот сквад должен захватить/удерживать. Smart - смарт-террейн - это зона, внутри которой NPC выполняют какую-либо работу: отдыхают у костра, патрулируют, стоят часовыми - в общем, могут расположиться лагерем или что-то в этом роде. Чтобы заставить сквад захватить точку, надо указать ему в качестве цели соответствующий ей смарт. Названия точек - "Северный блокпост", "Временный лагерь" и т.д. - прописаны в st_smart_terrain_names.xml в папке configs/text/rus. Каким смартам соответствуют эти названия - смотрим в папке misc файл smart_names.ltx (хотя и так легче легкого догадаться по string id). Например, если мы хотим, чтобы отряды сталкеров захватили точку "Кладбище техники" - то местечко, где в ЧН расположился "концлагерь", а в ТЧ - лагерь Беса, - то в target_smart сквадам "одиночек" пишем smart_terrain_3_7. spawn_point - по ходу чтока где должна спавниться группа 3. предметы, отдельные неписи спавняться через create , а там нужны координаты другое дело что можно сделать табличку соответствия название места - координаты Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 27 Ноября 2009 psevdoгринго, как вариант в bind_stalker Start flag=true; в начале ;потом в проверках if Start_Flag Then MyFunction() StratFlag=false endif Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 2 Декабря 2009 (изменено) slayer_kch, В секции [cat_normal] отсутствует переменная satiety_threshold вот что дал поиск по переменной в и-нете при прохождении уже "Свалки" игра вылетает с логом "Can't find variable satiety_threshold in [fracture_weak] " на 351 строке - Проблема - ошибка составителя - в архив включен неверный m_fracture.ltx - моб-Излом. вот изучайте на досуге Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить. Для примера возьму кошек (уж очень они мне нравятся) Добавить их можно отредактировать файл all.spawn, либо динамически создать в игре через функцию alife:create(). Вылет при появлении Обычно сопровождается сообщением в логе: Arguments : Can't open section 'cat_weak' Это значит, что монстр у нас не до конца описан. В файле конфигурации идет секция [m_cat_e]:monster_base Но для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида [cat_weak]:m_cat_e то есть ссылка на основную конфигурацию, а потом указываются параметры, которые отличаются от нее. Например сила, здоровье, угол обзора и тд. Мы пока ограничимся просто добавлением этой секции. В файле config\creatures\m_cat.ltx в конце допишем [cat_weak]:m_cat_e. Запускаем, добавляем кошку, вылетаем с ошибкой: Arguments : Can't find variable smart_terrain_choose_interval in [cat_weak] Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также: smart_terrain_choose_interval = 00:15:00 Запускаем, вылетаем с ошибкой: Arguments : Can't find variable satiety_threshold in [cat_weak] Вобщем, добавляем параметры, по кошка не станет нормально появлятся. Такие ошибки легко локализуются и исправляются. Ну, на всякий случай, нужно добавить еще две строчки: critical_wound_threshold = 0.4 critical_wound_decrease_quant = 0. После этого кошка появляется, бегает, с 30 метров бежит нас кушать. Мы этого не хотим, стреляем в нее, и у нас происходит Вылет при убийстве Это знаменитая ошибка: Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20 ........ Самое просто и неправильное решение - закоментировать 20-ю строку скрипта _g.script, вылет исчезнет, но ошибка никуда не денется. Я не могу сказать с уверенностью, к чему игнорирование этого факта может привести, так как исправлял причину, а не следствие. Путем нехитрых логических размышлений решение было найдено. Вернее тупым перебором всего, что относилось к делу, криками на форумах, битьем головой о стенку... Потом пришло озарение, вместе с сакраментальным вопросом "что происходит после смерти?" А происходит добавление в статистику убитого объекта (монстра, нпс-а). Поэтому лезем в скрипт xr_statistic.script. В самом начале видим объявление переменной local killCountProps = {...} в которой кошек нет. Поэтому добавляем их туда (например, в конец), для начисления очков опыта: cat_weak = 1, cat_normal = 2, cat_strong = 3, Хотя мы сделали только cat_weak, но на будущее добавим и остальных. Затем идет перечисление используемых классов монстров: monster_classes = { кошек нет и здесь, добавляем: [clsid.cat_s] = "cat", Смотрим дальше, видим функцию addKillCount(npc), которая определяет сообщество (community) убитого. Функция вызывает getNpcType(npc), которая находится в этом же скрипте. А там идет обращение к функции IsStalker(npc), и возвращает сообщество и ранг убиенного. Но тут про мостров ни слова, а значит идем дальше. Функция IsStalker(npc) обнаруживается в скрипте _g.script. Просматривая его обнаруживаем следующие интересующие нас функции: is_object_monster(obj) кошек нет, добавляем рядом с собаками: otype == clsid.cat or IsMonster (object, class_id) кошки есть, ничего не трогаем. Для страховки проверим еще одни файл, class_registrator.script. Находим в нем строку cs_register (object_factory, "CCat", "se_monster.se_monster", "SM_CAT_S", "cat_s") и успокаиваемся на этом. Запускаем, убиваем, подходим, пытаемся обыскать - вылетаем. Потому что случился Вылет при обыске Ну тут уже проще. Вспоминаем, что у нас показывается в инвентаре убитого? Иконка растерзанного трупа. Проверяем m_cat.ltx - действительно, параметр icon отсутствует. Тут появляется два пути. Первый - нарисовать новую иконку, вставить ее в файл ui_npc_monster.dds, определить координаты и добавить их в xml-описатель ui_npc_monster.xml. И так для каждого нового монстра. -------------------------------------------------------------------------------- Второй - использовать общую иконку для всех монстров, у которых отсутствует этот параметр. Мы им и воспользуемся, так как для тестовых целей сойдет, а для серьезного применения все равно необходимо иметь хоть какие-то художественные навыки (если кто видел мой тестовый мод "15 кошек", то помнят тот ужас вместо иконки кошки smile ) Для этого отредактируем файл defines.ltx , так как именно в нём содержится секция monster_base, общая для всех монстров. Открываем, ищем секцию, и вставляем icon = ui_frame_error_sign_red Это будет такой красный крест в круге. Запускаем, убиваем, обыскиваем и не вылетаем. Итак, свежедобавленный монстр бегает, живет, нападает. Однако та же кошка по умолчанию невероятно сильна, убивает с одного удара, поэтому для нормальной жизни необходимо подредактировать секцию атаки. Изменено 2 Декабря 2009 пользователем Maks_K Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 14 Декабря 2009 (изменено) psevdoгринго, естественно - в твоем коде npc - gросто текстовая переменная а ты с ней обращаешься как с объектом поэтому как вариант function spawn_killers_pda() name1= "zat_b103_lost_merc_leader" for a=1,65535,1 do npc = alife():object(a) if npc and string.find(npc:name(),name1) then alife():create("killers_pda", npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) return end end end Изменено 14 Декабря 2009 пользователем Maks_K Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 15 Декабря 2009 Shredder, Поиск в гугле дал это: create_anom("zone_mine_electric",2,-295.39,1.24,-3.30,1,135) 2 - это радиус аномалии 1 - level Vertex 135 - game_vertex Болот Также некоторые аномалии требуют наличия слова "field" , если игра вылетает с ошибкой nearest_s значит надо поставить эту фигную Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 16 Января 2010 Karaga_big, а и не надо обратно паковать оставь в gamedata только измкененные файлы остальные игра возьмет из configs.db Поделиться этим сообщением Ссылка на сообщение
Maks_K 0 Опубликовано 9 Марта 2010 SDR-team, а ты для сравнения посмотри как реализовано это в квесте логово кровососов Там Глухарь периодически бросает фразы Поделиться этим сообщением Ссылка на сообщение