Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
serafim-kr 21 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Здравствуйте! Не подскажите можно ли НПС поменять визуал, например на контролёра? "Ребятки" в детском саду. По аккуратнее с обращениями. ColR_iT Изменено 20 Ноября 2012 пользователем ColR_iT Ссылка на комментарий
Сэр Макс 17 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Насколько я знаю, нет. Вообще то можно, только нужно будет подгонять скелет от НПС к контролёру. А простыми манипуляциями - да, этого не сделать. ColR_iT Изменено 20 Ноября 2012 пользователем ColR_iT Канал на YouTube Ссылка на комментарий
serafim-kr 21 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Здравствуйте! Не подскажите можно ли НПС поменять визуал, например на контролёра? "Ребятки" в детском саду. По аккуратнее с обращениями. ColR_iT Прошу прощения если вас это обидело. Что то вы принимаете близко к сердцу Я перестал воспринимать сообщения в темах "близко к сердцу" достаточно давно, поэтому говорю я не за себя, а в принципе. На форуме присутствуют люди разных возрастных категорий и приравнивать всех к "ребяткам", как минимум, не уважение. P.S. правила прочитать будет не лишним; цитировать посты полностью на форуме запрещено. ColR_iT Изменено 20 Ноября 2012 пользователем serafim-kr Ссылка на комментарий
Artos 99 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) alex5773, учитывая, что на НПС не надет какой-либо костюм (в смысле объекта-предмета), то твой вопрос бессмысленен. НПС в игре обладает визуалом, т.е. это модель "на которою" натянули отображение и костюма и штанов и ботинок и прочее... и это никак не "те костюмы", которые может надевать актор. Только "глазками" ты сможешь соотнести внешний вид НПС и имеющихся в игре предметов-костюмов. Т.о. посмотри, например, как сделана табличка соответствий "визуал - костюм" в том же марадер-моде или в изначальном xrs_armor.script из "AI-pack" (by xStream) и уже сам можешь рулить как тебе захотелось, т.е. учитывая ранги иль нет. Изменено 20 Ноября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Stasok8 11 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Приветствую! Тут у меня 2 вопроса появилось. 1. Как создать контролера через алл.спавн? Пытался, не получается. Можно скриптом, но тогда нельзя добавить животному логику. 2. Вот столкнулся с таким глюком: делаю персонажу путь, он выходит из бара и идет в сторону складов. При подходе к лестнице на выход из бара (которая уже прямо перед выходом) он останавливается и не идет дальше. Перерыл пути и не обнаружил ошибки... Так-же заметил, что при панике в баре неписи не выбегают из него, а добегают до места, где тормозил и мой НПС тоже возвращаются назад. Вопрос: я Дибил или это реально глюк такой? ПС гугл перерыл, яндекс перекопал, одна на вас надежда! Ссылка на комментарий
Buusty 386 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Можно скриптом, но тогда нельзя добавить животному логику. 1. Ты откуда это взял? Очень даже всё можно. 2. Проверь в этом месте валидность (наличие АИ-сетки для НПС/монстров), если нет валидности, то ни непись, ни монстр в эту местность не пойдет. Ссылка на комментарий
Artos 99 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Stasok8, 1. Как создать любого монстра, который имеется в игре, через all.spawn расписано в десятках факов иль статей (в инете добра хватает, учись правильно пользоваться поиском). Собственно и суть-то в том, что всего требуется то скопировать имеющуюся секцию потребного монстра и скорректировать координаты спавна и некоторые другие параметры (имя, логика,...). Да и при скриптовом спавне не сложно приписать нужную логику, используя или нет-пакеты или в конфиге секции, используя параметр custom_data. 2. По твоему "глюку" с невыходом из помещения бара - поизучай информацию о рестрикторах, с упором на их типы и методы out_restrictions и in_restrictions для неписей/монстров. Для Бара используется рестриктор ("bar_restrictor"), из которого некоторым квестовым НПС запрещено выходить - вот и "сидят" они в баре, а не гуляют где захочется. Аналогично сделано и в др.подобных "резервациях", например, именно поэтому с арены зверье иль бойцы не разбегаются... Изменено 20 Ноября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Stasok8 11 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Простите мое нубство, но прочитал предыдущий пост, подумал, удалил в секции персонажа строку base_out_restrictor . В результате при попытки перейти на первый путь, который до этого работал вылет: any vertex in patrol path [idet_k_dveri] in inaccessible for object [bar_bar_guard] Подскажите ламеру, как вылечить. Ссылка на комментарий
Artos 99 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Stasok8, 'нубство' не прощают, а его "лечат" - т.е. читают-читают-читают и, работая головою, набираются знаний и пониманий. Попытки быстренько "подумать" и методом тыка попробовать могут, конечно, и дать некий результат, но чаще всего или приводят к напрасной трате времени или к постоянным наступаниям на грабли. Во-первых, чтобы указать тебе на "в чем же твое нубство", требуется от тебя информация, иначе только кашпировские смогут тебе "помочь". Что за коды/конфиги ты там у себя сотворил - только тебе ведомо. Во-вторых, и параметр в секциях all.spawn'а называется base_out_restrictors , и его не "очищать" нужно, а или удалять или вписывать в него точно потребное. Запрет "не выходить ни откуда" (пустая строка) - абсурден и движок подобное не переваривает. Также, рестрикторы неписям могут назначаться гулагами, в которых получают работу, а не только в персональной логике... Ну и наконец, судя по имени [bar_bar_guard] ты или сдублировал для своего НПС секцию с Гарика, не потрудившись изменить ему имя на эксклюзивное (а это уже чревато...) и/или в его логике напортачил... Не видя логики невозможно тебе подсказать "как вылечить" - пока только рекомендация почитать статьи по логике тебе поможет. Строка о вылете говорит о том, что твоему неписю недоступен ни один левел-вертекс, указанный в твоем пути, т.е. ему некуда идти (или запрещено), хотя логика требует именно движения в некую точку. Вот и устраняй ошибку в секции и разбирайся почему ему твой путь недоступен. P.S. ... будем думать, ... А вот где прописать путь до логики монстра, которого создал скриптом с помощью сrеаtе? А для кого уже написано про 'читать', а потом 'подумать'?! Неужели ранее упомянутое: "или в конфиге секции, используя параметр custom_data" - недостаточно для того, чтобы самому посмотреть как прописывается логика в секции конкретных НПС (иль монстров иль пр.) и сделать по аналогии? Если указанный параметр присутствует в секции - именно оттуда (из указанного файла) и будет прописана логика заспавненному скриптом объекту. Изменено 20 Ноября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Stasok8 11 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Ладно, будем думать, не зря столько неба копчу и я и друганы мои А вот где прописать путь до логики монстра, которого создал скриптом с помощью сrеаtе? Ссылка на комментарий
Buusty 386 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) Вот на примере разберём - ;---- [boar_normal_sh1]:boar_normal $spawn = "respawn\boar_normal_sh1" custom_data = scripts\new\nebo\shadowman_zver1.ltx ;---- boar_normal_sh1 - это твоя секция для спавна через скрипт (можешь назвать её как угодно, но при спавне скриптом вписана должна быть именно она!) :boar_normal - это ссылка на секцию монстра (в данном случае, кабана "обычного/нормального), т.е. все параметры он возьмёт от него, визуал, иммунитеты, ... всё. custom_data = scripts\new\nebo\shadowman_zver1.ltx - Это и есть путь до логики этого кабана (т.е., логика будет считываться из файла - shadowman_zver1.ltx) На всякий пожарный, пример логики этого монстра (ты напиши свою, нужную тебе логику) - [smart_terrains] none = true [logic] active = mob_home on_death = mob_death [mob_home] path_home = boar_normal_sh_walk1 home_min_radius = 30 home_max_radius = 50 aggressive_home on_signal = sig_attacked | mob_combat [mob_combat] on_timer = 60000 | mob_home [mob_death] on_info = %+shadowman_zver1_dead% === Да, вписываешь свою секцию монстра в spawn_sections.ltx (gamedata\config\creatures). Не забудь в _way указать свой path_home = ....(path_home = boar_normal_sh_walk1). Изменено 20 Ноября 2012 пользователем Buusty Ссылка на комментарий
Stasok8 11 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Дык пробовал, не работает (или я криворучко), но завтра попробую. Да, писать в спавн_секшионс? Ссылка на комментарий
ColR_iT 171 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 Stasok8, дополню немного Buusty. Точки путей нужно прописывать в распакованный all.spawn в файлы way_локация.ltx и только туда. При этом начинать новую игру не обязательно, при условии, что ты не изменял файлы alife_локация.ltx. Ссылка на комментарий
alex5773 1 330 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 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 Ссылка на комментарий
Artos 99 Опубликовано 20 Ноября 2012 Поделиться Опубликовано 20 Ноября 2012 (изменено) ColR_iT, а вот я бы не расписывал пока еще невостребованные подробности (вот такой я вредный ), т.к. неизвестно какая вообще нужна автору вопроса логика... А вот то, что при создании своей новой секции для спавна монстра потребно будет зарегистрировать эту секцию в xr_statistic.script (хотя бы в альясах) - про это бы стОит уточнить (хотя тоже ФАК'овый момент). В противном случае при убийстве нового монстра - последует вылет. alex5773, пока модератор не увидел твою портянку - убери как ее от греха подальше... хотя бы под спойлер. И, если уж до сих пор не понял связи визуала НПС и прямого отсутсвия связи с рангами - то уж тут я "вообще без понятия", как же еще подобное можно разжевать... Есть НПС с визуалом. Внешний вид визуала можно соотнести с неким имеющимся в игре костюмом, который может актор "взять" из рюкзака непися (создать таблицу соответствий). В процитированных тобою скриптах имеются аналоги таких соответствий,, да и ты сам можешь "глазками" посмотреть и уточнить свои пожелалки. В чем проблема то? Убили - в зависимости от визуала убитого ему спавнится соотв.костюм. Проще некуда. Изменено 20 Ноября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
alex5773 1 330 Опубликовано 22 Ноября 2012 Поделиться Опубликовано 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 Лично для меня это большая проблема, в скриптах я не шарю, совместить ещё другое дело. А ты говоришь проще некуда. Если знаешь как проще, напиши, буду премного благодарен. Ссылка на комментарий
Стрелоk 14 Опубликовано 22 Ноября 2012 Поделиться Опубликовано 22 Ноября 2012 (изменено) Такой вопрос: я установил и качество текстур заметно ухудшилось, стали мелькать тени неподвижных объектов. http://img.stalker.u...89f9180a85e.jpg Видео карта новая geforce gtx 560, дрова обновлены. А что ты установил то? ColR_iT ColR_iT, дрова новые установил, с оф.сайта. Ничего не изменилось. Как были расплывчатые текстуры, так и остались На старом компе все нормально было. Хотя там видеокарта похуже была, да и дрова старые Изменено 22 Ноября 2012 пользователем ColR_iT К20 Ссылка на комментарий
SergeySS 0 Опубликовано 22 Ноября 2012 Поделиться Опубликовано 22 Ноября 2012 (изменено) Всем привет. Такая вот проблема. Хотел заспаунить НПС через all.spawn. Распаковал all.spawn, добавил НПС туда для спавна. Добавил профиль НПС(npc_profile.xml),характер(character_desc_escape.xml), секцию НПС в spawn_sections, в game_story_id прописал его ИД. Запаковал all.spawn(Странно что размер получился чуть меньше после запаковки, чем оригинальный файл игры). Начинаю новую игру и получаю такой вот вылет(Все действия были совершенны над чистой игрой, без каких либо модов, ТЧ 1.0004) FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : [error]Arguments : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_gulag.script:1178: attempt to index field 'gulag' (a nil value) stack trace: А что конкретно ты понаписал мы сами должны догадаться!? ColR_iT <specific_character id="esc_drug1" team_default = "1"><name>drug</name><icon>ui_npc_u_stalker_neytral_balon_1</icon><map_icon x="0" y="0"></map_icon><bio>esc_wolf_bio</bio><class>esc_drug1</class><community>stalker</community><terrain_sect>stalker_terrain</terrain_sect><money min="4000 " max="120000" infinitive="0"></money><rank>4</rank><reputation>5</reputation><visual>actors\neytral\stalker_neytral_balon_1</visual><snd_config>characters_voice\human_01\stalker\</snd_config><crouch_type>-1</crouch_type><panic_treshold>0</panic_treshold><supplies>[spawn] \n#include "gameplay\character_items.xml" \n#include "gameplay\character_drugs.xml" \n#include "gameplay\character_food.xml"</supplies>#include "gameplay\character_criticals_4.xml"<start_dialog>hello_dialog</start_dialog></specific_character> [970]section_name = stalkername = esc_drug1_newposition = -241.58769226074,-19.581008911133,-128.12699890137direction = 0,0,0money = 4000character_profile = esc_drug1game_vertex_id = 8distance = 30.1000003814697level_vertex_id = 14470object_flags = 0xfffff7bfcustom_data = <<END[dont_spawn_loot]ENDvisual_name = actors\neytral\stalker_neytral_balon_1g_team = 0g_squad = 0g_group = 0health = 1dynamic_out_restrictions =dynamic_in_restrictions =upd:health = 1upd:timestamp = 0upd:creature_flags = 0upd:position = -241.58769226074,-19.581008911133,-128.12699890137upd:o_model = 0upd:o_torso = 0.0,0.0,0upd:g_team = 0upd:g_squad = 0upd:g_group = 0upd:next_game_vertex_id = 65535upd:prev_game_vertex_id = 65535upd:distance_from_point = 0upd:distance_to_point = 0predicate5 = 0,1,0,1,2predicate4 = 2,2,1,1upd:start_dialog = <character id="esc_drug1"><class>esc_drug1</class><specific_character>esc_drug1</specific_character></character> [esc_drug1_spawn]:stalker$spawn = "respawn\esc_drug1_spawn"character_profile = esc_drug1spec_rank = regularcommunity = stalker Изменено 22 Ноября 2012 пользователем SergeySS Ссылка на комментарий
Strelok_124 0 Опубликовано 23 Ноября 2012 Поделиться Опубликовано 23 Ноября 2012 Как сделать так, что бы после взрыва гранаты оставалась остаточная радиация? Ссылка на комментарий
Стрелоk 14 Опубликовано 23 Ноября 2012 Поделиться Опубликовано 23 Ноября 2012 Пробовал на статике играть, на динамике, с разными настройками user.ltx- особо не помогло К20 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти