TIGER_VLAD 361 Опубликовано 25 Июля 2013 (изменено) Всем доброго времени суток. Помогите решить проблему. Я добавил в игру еду и решил сделать чтобы НПС у костра ели новою еду (как по стандарту хлеб,колбасу...) Для этого работал в xr_kamp.script -- есть хлеб if npc:object("bread") then self.npc[npc_id].states["eat_bread"] = true else self.npc[npc_id].states["eat_bread"] = false end -- есть новою еду if npc:object("new_food") then self.npc[npc_id].states["eat_bread"] = true else self.npc[npc_id].states["eat_bread"] = false end Для новой еди взял анимацию eat_bread. В результате НПС ко рту подносят пустую руку и типа едят , то есть моделька новой еди не отображается . Но сразу говорю с моделью все в порядке . Например если модель переименовать в bred.ogf , то вместо хлеба нпс нормально едят новую еду. Помогите пожалуйста решить проблему. Заранее благодарю. Еда, которую они будут есть, должна быть у них в инвентаре. Ты её им прописал? ColR_iT Изменено 25 Июля 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 25 Июля 2013 (изменено) Только , что дописал , но всё равно не работает Новую игру начинал? ColR_iT Да , начинал Да , новою еду прописал почти каждому сталкеру Изменено 25 Июля 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 25 Июля 2013 Ок , так и думал что придется перерывать все xml-ы . Только одного не понял :зачем коментировать хлеб ? Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 27 Июля 2013 Свою проблему решил. Надо было поработать еще в state_lib.script , state_mgr_animation.script , state_mgr_animation_list.script , xr_rest.script и использовать новую анимацию , а не - eat_bread. Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 26 Августа 2013 Всем привет сталкеры.) Решил создать НПС с логикой охранника (схема zoneguard ). Заспавнил сталкера , создал смартеррейн и 2 спейс рестриктора . Также прописал в путях walk , look. При загрузке происходит вылет. Expression : fatal error Function : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description : Arguments : LUA error: d:\games\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) Вот посмотрите alife_l01_escape и логика нпс : [871]; cse_abstract propertiessection_name = stalkername = esc_noobikposition = -213.266388,-7.910840,-23.080528direction = 0,0,0; cse_alife_trader_abstract propertiesmoney = 5000character_profile = esc_noobik; cse_alife_object propertiesgame_vertex_id = 69distance = 0level_vertex_id = 40075object_flags = 0xffffffbfcustom_data = <[smart_terrains]esc_ukr = true[logic]cfg = scripts\guard_logic.ltxENDstory_id = 10000; cse_visual propertiesvisual_name = actors\soldier\soldier_beret_1; cse_alife_creature_abstract propertiesg_team = 0g_squad = 1g_group = 1health = 1dynamic_out_restrictions =dynamic_in_restrictions =upd:health = 1upd:timestamp = 0upd:creature_flags = 0upd:position = -213.266388,-7.910840,-23.080528upd:o_model = 0upd:o_torso = 0.028013030067086,0,0.9996075630188upd:g_team = 0upd:g_squad = 1upd:g_group = 1; cse_alife_monster_abstract propertiesupd:next_game_vertex_id = 65535upd:prev_game_vertex_id = 65535upd:distance_from_point = 0upd:distance_to_point = 0; cse_alife_human_abstract propertiespredicate5 = 1,2,2,1,2predicate4 = 0,1,1,1; cse_ph_skeleton propertiesupd:start_dialog =; se_stalker properties[872]; cse_abstract propertiessection_name = space_restrictorname = esc_noobik_guard_kill_zoneposition = -235.432271,-11.955380,-8.549372direction = 0,0,0; cse_alife_object propertiesgame_vertex_id = 67distance = 0level_vertex_id = 20205object_flags = 0xffffff3e; cse_shape propertiesshapes = shape0shape0:type = boxshape0:axis_x = 22.37,0,0shape0:axis_y = 0,22.37,0shape0:axis_z = 0,0,22.37shape0:offset = 0,0,0; cse_alife_space_restrictor propertiesrestrictor_type = 3[873]; cse_abstract propertiessection_name = space_restrictorname = esc_noobik_guard_warn_zoneposition = -194.129272,-5.444299,-25.573578direction = 0,0,0; cse_alife_object propertiesgame_vertex_id = 69distance = 0level_vertex_id = 58089object_flags = 0xffffffbe; cse_shape propertiesshapes = shape0shape0:type = boxshape0:axis_x = 30.17,0,0shape0:axis_y = 0,30.17,0shape0:axis_z = 0,0,30.17shape0:offset = 0,0,0; cse_alife_space_restrictor propertiesrestrictor_type = 3 [logic]active = zoneguard[zoneguard]path_walk = esc_noobik_guard_walk1path_look = esc_noobik_guard_look1zone_guard = esc_noobik_guard_kill_zonezone_warn = esc_noobik_guard_warn_zoneno_move = trueteam = guard1 Подскажите пожалуйста , что я неправильно делаю . Заранее благодарю. (Я думаю, что вылет происходит из-за того , что у меня в спейс рестрикторах нет логики. Что нужно написать , чтобы при входе в спейс рестр. актора убивали?). Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 26 Августа 2013 (изменено) а еще smart_terrain (забыл скопировать сюда) [870] ; cse_abstract propertiessection_name = smart_terrainname = esc_ukrposition = -213.721481,-7.887858,-22.157705direction = 0,0,0; cse_alife_object propertiesgame_vertex_id = 69distance = 9.09999942779541level_vertex_id = 40076object_flags = 0x==3ecustom_data = <[smart_terrain]type = esc_ukrcapacity = 1squad = 1groups = 1END; cse_shape properties (параметры шейпа объекта)shapes = shape0shape0:type = sphereshape0:offset = 0,0,0shape0:radius = 6.55957102775574; cse_alife_space_restrictor propertiesrestrictor_type = 3; se_smart_terrain properties Изменено 26 Августа 2013 пользователем TIGER_VLAD Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 31 Августа 2013 Всем привет. Не могу заспавнить нпс на локации Бар . Делаю все по уроку из stalkerin`a . Вылета нет и НПС тоже нет , все перерыл - нпс просто не появляется . А на локации Кордон все работает , нпс спавнится. Может кто встречался з этой проблемой? Буду благодарен за помощь. (Сталкера создаю в alife_l05_bar.ltx и пути тоже в way_l05_bar.ltx) Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 31 Августа 2013 Да , координаты и вертексы точно верные . Работал с помощью ACDC , вот урок http://stalkerin.gameru.net/wiki/index.php?title=All.spawn._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_NPC , логика walker , path_walk и path_look . Что странно что на Кордоне все работает... Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 31 Августа 2013 нет, не забыл, туда тоже вписал Сверил координаты , они правильные( Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 28 Июля 2014 подскажите пожалуйста какие строки в конфигах оружия отвечают за приселивание через мушку? За положение оружия в режиме прицеливания отвечают эти строчки: zoom_offset = OX,OY,OZ zoom_rotate_x = RX zoom_rotate_y = RY Всем привет ребята. Может кто-то знает как реализовать смену моделей после какого-то действия через скрипт в сталкер тч ? Примерно как в моде :"Худ ТЧ: Смена рук при смене костюма " , только нужно чтобы руки не прятались когда меняешь костюм/модель. Заранее благодарю. Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 28 Июля 2014 А может еще кто-то знает как заскриптить смену модели не таким способом как в моде "Худ ТЧ: Смена рук при смене костюма " где меняються все модели оружия , а мне надо только выборочно один предмет. Скрипт Кирака плохо понял. local exowpnid local restore_slot local suit_last_sect local g_change local re_sect local wdat = {} local upd = 0 local suit_table = { no_outfit = "noou_", novice_outfit = "ntrl_", stalker_outfit = "ntrl_", scientific_outfit = "dolm_", exo_outfit = "ntre_", bandit_outfit = "bndl_", killer_outfit = "dolm_", monolit_outfit = "ntrl_", military_outfit = "dolm_", specops_outfit = "milm_", svoboda_light_outfit = "milm_", svoboda_heavy_outfit = "milm_", dolg_outfit = "bndl_", dolg_scientific_outfit = "dolm_", ecolog_outfit = "ecol_", protection_outfit = "ecoh_", outfit_novice_m1 = "ntrl_", outfit_stalker_m1 = "ntrl_", outfit_stalker_m2 = "ntrl_", outfit_exo_m1 = "ntre_", outfit_bandit_m1 = "bndl_", outfit_killer_m1 = "dolm_", outfit_specnaz_m1 = "milm_", outfit_svoboda_m1 = "milm_", outfit_dolg_m1 = "bndl_", mp_exo_outfit = "ntre_" } --[[Состав: noou=Нет костюма, свитер ntrl=Оригинал, Новичок ntrm=Оригинал, Нейтрал ntrs=Чёрный кисть закрыты, Сева Нейтрал учёный ntre=Экзо bndl=Чёрный кисть открыта, Бандит kilm=Чёрный кисть закрыты, Наёмники monm=Оригинал, Монолит milm=Зелёный защитный, Военный milh=Зелёный защитный, Спецназ svom=Зелёный защитный, Свобода Лёгкий svoh=Зелёный защитный, Свобода Тяжёлый dolm=Чёрный кисть закрыты, Долг dols=Чёрный кисть закрыты, Долг учёный ecol=Жёлтый кисть закрыты, учёный ecoh=Зелёный кисти закрыты, укреплённый учёный Оригинал+ЖКЗ+ЗКЗ+экзо+ЧКЗ+ЧКО+ЗЗ+НК]] function change_pattern(str,pat1,pat2) -- замена в строке str n-го фрагмента pat1 на фрагмент pat2 if not pat2 then pat2 = "" end -- если pat2 не задано, фрагмент pat1 просто вырезается local i,o = string.find(str,pat1) if not i then return str end local str_i = string.sub(str,1,i-1) local str_o = string.sub(str,o+1,-1) return str_i..pat2..str_o end function insert_pattern(str,pat,pos) if not pat or not pos then return str end -- if pos < 0 then pos = pos + string.len(str) + 1 end local str_i = string.sub(str,1,pos-1) local str_o = string.sub(str,pos,-1) return str_i..pat..str_o end function update() if exowpnid ~= nil then -- если условие выполняется, значит на прошлом апдейте меняли оружие, надо его подобрать и выйти upd = upd + 1 local weapon = level.object_by_id(exowpnid) if weapon then db.actor:transfer_item(weapon,db.actor) exowpnid = nil upd = 0 wdat = {} re_sect = nil else if upd > 100 then get_console():execute ("load exo_weapons.script line 66: re-spawning") get_console():execute ("flush") alife():release(alife():object(exowpnid),true) local pos = device().cam_pos pos.x = pos.x + 0.5 local sobj = alife():create(re_sect, pos, db.actor:level_vertex_id(), db.actor:game_vertex_id()) if sobj then exowpnid = sobj.id weap_data.set_weapon_data(wdat,sobj) re_sect = ch_sect upd = 0 end end end return end if restore_slot then db.actor:activate_slot(restore_slot) restore_slot = nil end local suit = db.actor:item_in_slot(6) local active_sect, suit_sect local act_slot = db.actor:active_slot() local active = db.actor:item_in_slot(act_slot) -- костюм if suit then suit_sect = suit:section() else suit_sect = "no_outfit" end -- [[ if not suit_last_sect then suit_last_sect = suit_sect end if suit_last_sect ~= suit_sect then -- костюм изменился if act_slot == 3 then -- если активны гранаты db.actor:activate_slot(1) g_change = true return else change_grens(suit_sect) -- спокойно меняем if g_change then db.actor:activate_slot(3) g_change = nil end end end suit_last_sect = suit_sect -- оружие local pref_len = 0 -- болт if active then active_sect = active:section() if string.sub(active_sect,1,8) == "grenade_" then -- гранаты pref_len = 8 elseif string.sub(active_sect,1,4) == "wpn_" then -- все остальное pref_len = 4 end else return -- Если нет предмета в активном слоте, то и менять нечего, выход end local mod_section, mod_pattern if string.len(active_sect) < (pref_len + 6) or not system_ini():section_exist(string.sub(active_sect,1,pref_len)..string.sub(active_sect,(pref_len + 6),-1)) then mod_section = false -- немодифицированный вариант mod_pattern = "" else mod_section = true -- модифицированный вариант mod_pattern = string.sub(active_sect,(pref_len + 1),(pref_len + 5)) end local ch_sect, ch_pattern ch_pattern = suit_table[suit_sect] or "ntrl_" if mod_pattern == ch_pattern then return -- модификация оружия соответствует костюму end if mod_section then -- оружие - модифицированный вариант ch_sect = change_pattern(active_sect,mod_pattern,ch_pattern) else ch_sect = insert_pattern(active_sect,ch_pattern,(pref_len + 1)) end if not system_ini():section_exist(ch_sect) then -- если заменять надо бы, но не на что, то выходим return end -- если надо менять и есть на что - меняем if act_slot == 1 or act_slot == 2 then -- пистолет или автомат local wobj = alife():object(active:id()) wdat = weap_data.get_weapon_data(wobj) alife():release(wobj,true) local pos = device().cam_pos pos.x = pos.x + 0.5 local sobj = alife():create(ch_sect, pos, db.actor:level_vertex_id(), db.actor:game_vertex_id()) if sobj then exowpnid = sobj.id weap_data.set_weapon_data(wdat,sobj) re_sect = ch_sect end restore_slot = act_slot elseif act_slot == 3 then -- гранаты -- ничего не делаем, гранаты меняются в другом месте elseif act_slot == 5 then -- болт. у этой сволочи нет серверного объекта, просто выбрасываем db.actor:drop_item(active) alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) restore_slot = 5 else -- бинокль, нож local wobj = alife():object(active:id()) alife():release(wobj,true) alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) restore_slot = act_slot end end function change_grens_on_take(item) local suit = db.actor:item_in_slot(6) local suit_sect if suit then suit_sect = suit:section() else suit_sect = "novice_outfit" end local ch_pattern = suit_table[suit_sect] or "ntrl_" if (db.actor:active_item() == nil or (db.actor:active_item() ~= nil and db.actor:active_item():id() ~= item:id())) then local active_sect = item:section() local mod_section, mod_pattern if string.len(active_sect) < 14 or not system_ini():section_exist(string.sub(active_sect,1,8)..string.sub(active_sect,14,-1)) then mod_section = false -- немодифицированный вариант mod_pattern = "" else mod_section = true -- модифицированный вариант mod_pattern = string.sub(active_sect,9,13) end if mod_pattern ~= ch_pattern then local ch_sect if mod_section then -- оружие - модифицированный вариант ch_sect = change_pattern(active_sect,mod_pattern,ch_pattern) else ch_sect = insert_pattern(active_sect,ch_pattern,9) end if system_ini():section_exist(ch_sect) then -- если заменять надо, и есть на что, то меняем local wobj = alife():object(item:id()) alife():release(wobj,true) alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end end end function change_grens() db.actor:iterate_inventory( function(dummy, item) if string.sub(item:section(),1,8) == "grenade_" then local wobj = alife():object(item:id()) alife():release(wobj,true) alife():create(item:section(), db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end ,db.actor) end . Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 13 Августа 2014 Всем привет ребята. Интересует вот такой вопрос : Какая функция отвечает за медленное движение ГГ и звук одышки, когда здоровье ГГ меньше 0.2 (примерно) ? Буду очень благодарен. Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 5 Мая 2015 , Помню у меня пропали звуки шагов после создания нового визуала для ГГ и неправильной настройки костей. 1 Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 18 Мая 2015 Просто у меня почему-то эти текстуры не используются, вернее всё время высвечивается мужик в противогазе db.actor:give_game_news(text, "ui\\ui_iconsTotal",Frect():set(663,146,193,104), 0, 3000) -- где Frect():set(x,x,x,x) - координаты иконки 1 Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 4 Июня 2015 (изменено) Попробуй этот эффект level.add_cam_effector("camera_effects\\dream.anm", 1, false, "") Изменено 4 Июня 2015 пользователем TIGER_VLAD Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 9 Июня 2015 @AndrewMor, Вот держи Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 22 Июня 2015 (изменено) @AndrewMor, Может так попробуй. xr_effects.script: function show_static() local hud = get_hud() local static_rad = hud:GetCustomStatic("cs_radiation_danger") if static_rad == nil then hud:AddCustomStatic("cs_radiation_danger", true) hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger") end end function hide_static() local hud = get_hud() local static_rad = hud:GetCustomStatic("cs_radiation_danger") if static_rad ~= nil then hud:RemoveCustomStatic("cs_radiation_danger") end end Изменено 22 Июня 2015 пользователем TIGER_VLAD Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 21 Сентября 2015 Тоже этим занимался. Но я создавал просто спейсрестриктор и там ловил выстрел от топора. Мне интересно а можно ли как-то отследить хит по дереву от ГГ? Или отследить насколько близко ГГ к деревьям ? Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 21 Сентября 2015 (изменено) Но можно заспавнить невидимые фейки в деревья, как например у инвентарных ящиков и уже от них измерять. Оо вот это уже интересно, но вот спавнить фейк в каждое дерево чувствую будет долго. Не поделишься кодами решения? Сейчас кода и не найду, это давно писал. Я просто создавал спейсрестриктор в all.spawn`e и проверял, если гг в этой зоне, в руках топор и происходит выстрел, то спавним дрова в инвентарь. Главное, для меня, чтобы это происходило когда ГГ повёрнут именно к центру рестра. Это я не делал. Изменено 21 Сентября 2015 пользователем TIGER_VLAD Поделиться этим сообщением Ссылка на сообщение
TIGER_VLAD 361 Опубликовано 11 Ноября 2015 (изменено) @Worklad, gamedata\sounds\scripts\magnitofon\magnitofon_2.ogg . Заменяй на твой музыку. Изменено 11 Ноября 2015 пользователем TIGER_VLAD Поделиться этим сообщением Ссылка на сообщение