Mad_Vad 22 Опубликовано 22 Февраля 2016 Поделиться Опубликовано 22 Февраля 2016 из amk.script (1.4.1) связанная пара name/id для универсальности... пробуй... --удаляем предмет из инвентаря по имени function remove_item_from_inventory_by_name(remove_item_name,npc) return remove_item_from_inventory(npc:object(remove_item_name),npc) end --удаляем предмет из инвентаря по id function remove_item_from_inventory(remove_item,npc) if npc==nil then npc=db.actor end -- если npc не указан, будет работать с инвентарем ГГ if remove_item~=nil then alife():release(alife():object(remove_item:id()), true) return true end return false end 1 ASUS SABERTOOTH 990FX R2.0 / AMD FX-6300, 2x4Gb DDR3 (Kingston) / ASUS GeForce GTX 650 (1Gb) / 1920х1080 Ссылка на комментарий
Kondr48 314 Опубликовано 24 Февраля 2016 Поделиться Опубликовано 24 Февраля 2016 Есть ли возможность при спавне предмета в инвентарь НПС сразу получить game_object предмета? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 24 Февраля 2016 Поделиться Опубликовано 24 Февраля 2016 (изменено) Что значит - "сразу" ? В онлайн любой объект входит тогда, когда до него "дойдут руки". Делайте отложенную проверку, типа local t_outfit_cnd function set_item_condition( t ) local t, n = {}, 0 local item for i, v in pairs( t_outfit_cnd ) do item = lobj_by_id( v[1] ) if item then item:set_condition( v[2] / 100 ) else n = n + 1; t[n] = v end end if n ~= 0 then t_outfit_cnd = t else t_outfit_cnd = false bind_stalker.task_del( "death_manager.set_item_condition", 1000 ) end end ... if t_outfit_cnd then t_outfit_cnd[#t_outfit_cnd + 1] = { obj.id, math_random( cnd_min, cnd_max ) } else t_outfit_cnd = { { obj.id, math_random( cnd_min, cnd_max ) } } bind_stalker.task_add( "death_manager.set_item_condition", 1000, set_item_condition ) end где task_add()/task_del() - добавление/удаление функции в апдейт Изменено 24 Февраля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Kondr48 314 Опубликовано 24 Февраля 2016 Поделиться Опубликовано 24 Февраля 2016 Сразу - не имеется ввиду в тот же момент на апдейте, просто, допустим, при спавне в таблицу вносится запись вида "секция_предмета_ид_предмета" = game_object, вот такой спавн меня интересует, как это можно сделать?) Ссылка на комментарий
kmsk 2 Опубликовано 24 Февраля 2016 Поделиться Опубликовано 24 Февраля 2016 Возможно ли отловить разряжание оружия в рюкзаке ? спасибо. Ссылка на комментарий
dsh 3 824 Опубликовано 24 Февраля 2016 Поделиться Опубликовано 24 Февраля 2016 @kmsk, на вскидку, в качестве идеи. Отлавливаем появление патронов в инвентаре в on_take. Пробегаемся по инвентарю и ищем стволы, у которых с прошлого раза не стало патронов. Не самое оптимальное решение, но это всего лишь идея. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Stalker_Anom 0 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 Скажите почему когда я добавил динамические аномалии, то при старте игры сильно виснет? Ссылка на комментарий
losiara 13 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 (изменено) Добрый день всем!!! Прошу помощи по вопросу оказания помощи раненым сталкерам чужеродной группировки например бандитам, военным и т. д. тем, кто в оригинале игры являются врагами ГГ. Сделал следующее: файл xr_wounded. script Функция:function action_wounded:execute ()action_base.execute (self)wound_manager = self.a.wound_managerwound_manager_victim = xr_logic.pstor_retrieve(self.object, "wounded_victim")local victim = nilif wound_manager_victim == "actor" thenvictim = db.actorelseif tostring(wound_manager_victim) == "nil" thenvictim = nilelselocal sim = alife()if sim thenvictim = sim:story_object(victim)endend--if self.object:relation(db.actor) == game_object.enemy then--self.object:disable_talk()--elseself.object:enable_talk()end.....закоментил эти строки!!! Файл dialogs.scripts: Функция:function transfer_medkit(first_speaker, second_speaker)if first_speaker:object("medkit") ~= nil thendialogs.relocate_item_section(second_speaker, "medkit", "out")elseif first_speaker:object("medkit_army") ~= nil thendialogs.relocate_item_section(second_speaker, "medkit_army", "out")elsedialogs.relocate_item_section(second_speaker, "medkit_scientic", "out")end--' Тут надо анлочить аптечку для использования.xr_wounded.unlock_medkit(second_speaker)if second_speaker:relation(first_speaker) ~= game_object.enemy thensecond_speaker:set_relation(game_object.friend, first_speaker)endfirst_speaker:change_character_reputation(10);endИзменил часть кода на:if second_speaker:relation(first_speaker) == game_object.enemy thensecond_speaker:set_relation(game_object.friend, first_speaker)first_speaker:set_relation(game_object.friend, second_speaker)endfirst_speaker:change_character_reputation(10);end Кроме этого, добавил всем НПС в character_desc_simulation и другие файлы этого типа в их профиль диалоги по типу:dm_help_wounded_medkit_dialoghello_dialogdm_hello_dialog Однако, не смотря на то, что надпись на юзание появляется, при попытке этого действа следует вылет с аргументом: не может найти диалог "dm_hello_dialog". Как можно поправить сие??? Игра версии 1.0004, оригинал мод с использованием файлов АМК (amk.scripts и amk_mod.scripts). Заранее СПАСИБО!!! Изменено 25 Февраля 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
FonSwong 33 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 Как узнать/установить позицию курсора? В оригинале есть в начале действо- когда ГГ показывают ПДА, посмотрел в коде- вроде как в движке всё мутится Так и не понял как с курсором работать, мне хотя бы получение координат его нужно, и ещё желательно сделать в какой-то момент прозрачным, а потом снова вернуть ему картинку, это возможно? Ссылка на комментарий
Space.Marine 466 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 не может найти диалог "dm_hello_dialog" Автор: Моддер Как лечить раненных НПС-враговСложность: оч. легкоСовместимость с модами: легко совместимоМногие люди в своих модификациях хотят добавить возможность лечить раненных врагов, как, например, в Солянке. Я тоже однажды заинтересовался этим вопросом и, не найдя на него ответа в интернете, занялся решением проблемы сам. В итоге мне это удалось и теперь выкладываю плоды своих стараний на просторы интернета .Скрыть ИнструкцииЗапрет диалога с раненными противниками находится в файле xr_wounded.script, и выглядит так (я снабдил его комментариями, если вы не сильно шарите в скриптах):if self.object:relation(db.actor) == game_object.enemy then --если отношение НПС к ГГ = отношению к врагумself.object:disable_talk() --блокировать диалогиelse --иначеself.object:enable_talk() --разрешить диалогend --конец условия (if)Дабы позволить ГГ говорить с врагами (только раненными) достаточно удалить лишнее и оставить всего одну строку:self.object:enable_talk()Но! Если ГГ попробует обратиться к раненным представителям бандитов, монолитовцев, наёмников, зомби (возможно), военных или противников на Арене - скорее всего произойдёт Фатал Еррор с логом на отсутствие подходящей фразы для диалога (в оригинальной игре с вероятностью 99%). Так вот, лично для себя я нашёл простое решение, которое подходило и по концепции моего мода - запретить диалог с данными группировками. Вот таким макаром:local comm = self.object:character_community() --переменной обозначил "понятие" группировки обьекта (НПС)if comm == "zombied" or --если НПС - зомби, илиcomm == "bandit" or --НПС - бандит, илиcomm == "monolith" or --НПС - монолитовец, илиcomm == "arena_enemy" or --НПС - боец арены, илиcomm == "killer" or --НПС - наёмник, илиcomm == "military" then --НПС - вояка, тогдаself.object:disable_talk() --запретить диалогelse -- иначеself.object:enable_talk() --разрешить диалогend -- The End!просто заменить изначальные строки этими и теперь ГГ сможет лечить врагов одиночек, долговцев, свободовцев и учёных.Но есть ещё один момент. При лечении врагов, если всё сделать как было написано будет ещё одна проблемка - они так и останутся врагами после лечения и будут дальше атаковать ГГ.Разумно было бы сделать НПС если не другом, то по крайней мере нейтралом. Для этого необходимо в файле dialogs.script кусок скриптаif second_speaker:relation(first_speaker) ~= game_object.enemy thensecond_speaker:set_relation(game_object.friend, first_speaker)endfirst_speaker:change_character_reputation(10);endзаменить наif second_speaker:relation(first_speaker) == game_object.enemy thensecond_speaker:set_relation(game_object.friend, first_speaker)first_speaker:set_relation(game_object.friend, second_speaker)endfirst_speaker:change_character_reputation(10);endВсё! Ссылка на комментарий
losiara 13 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 (изменено) Space.Marine Я этот тутор видел, он не соот. запросу, там нельзя лечить врагов таких как бандит или военный... только раненых дружелюбных НПС (из оригинала). Я уже решил проблему внимательнее покопавшись в инете, вот готовые скрипты: ---------------------------------------------------------------------------------------------------------------------- -- Схема раненного-- автор: Диденко Руслан (Stohe)-- TODO:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Evaluators----------------------------------------------------------------------------------------------------------------------class "evaluator_wound" (property_evaluator)function evaluator_wound:__init(name, storage) super(nil, name)self.a = storageendfunction evaluator_wound:evaluate ()if self.a.wounded_set ~= true then return false end--' self.a.wound_manager:update()if self.mgr == nil thenself.mgr = self.object:motivation_action_manager()endif self.object:critically_wounded() == true thenreturn falseendif self.mgr:evaluator(stalker_ids.property_enemy):evaluate() andxr_logic.pstor_retrieve(self.object, "wounded_fight") == "true"thenreturn falseendreturn tostring(xr_logic.pstor_retrieve(self.object, "wounded_state")) ~= "nil"endclass "evaluator_can_fight" (property_evaluator)function evaluator_can_fight:__init(name, storage) super(nil, name)self.a = storageendfunction evaluator_can_fight:evaluate ()if self.object:critically_wounded() == true thenreturn trueendreturn xr_logic.pstor_retrieve(self.object, "wounded_fight") ~= "false"end------------------------------------------------------------------------------------------------------------------------Actions----------------------------------------------------------------------------------------------------------------------class "action_wounded" (action_base)function action_wounded:__init(name, storage) super(nil, name)self.a = storageendfunction action_wounded:initialize ()action_base.initialize (self)self.object:set_desired_position()self.object:set_desired_direction()self.sound = "nil"if self.a.help_start_dialog thenself.object:set_start_dialog(self.a.help_start_dialog)endself.object:wounded(true)endfunction action_wounded:execute ()action_base.execute (self)wound_manager = self.a.wound_managerwound_manager_victim = xr_logic.pstor_retrieve(self.object, "wounded_victim")local victim = nilif wound_manager_victim == "actor" thenvictim = db.actorelseif tostring(wound_manager_victim) == "nil" thenvictim = nilelselocal sim = alife()if sim thenvictim = sim:story_object(victim)endendif self.object:character_community()~="monolith" and -- кроме монолитаself.object:character_community()~="zombied" then -- кроме зомбированных, они не лечатся и друзьями не становятся!!!self.object:enable_talk()elseself.object:disable_talk()end--[[ if self.object:relation(db.actor) == game_object.enemy then -- автор скрипта закоментил эту секцию.self.object:disable_talk()elseself.object:enable_talk()end]]wound_manager_state = xr_logic.pstor_retrieve(self.object, "wounded_state")wound_manager_sound = xr_logic.pstor_retrieve(self.object, "wounded_sound")local synsound = nilif wound_manager_state == "true" thenlocal h = hit()h.power = 0h.direction = self.object:direction()h.bone = "bip01_spine"h.draftsman = db.actorh.impulse = 0h.type = hit.woundself.object:hit(h)else-- является ли текущий звук синхронным для текущего стейтаfor k,v in pairs(self.a.syndata) doif v.state == wound_manager_state andv.sound == wound_manager_soundthensynsound = wound_manager_soundendend--' жрание аптечек и прочей срани.--' Использовать можно только если нам можно сейчас есть аптечку.if self.a.use_medkit == true thenwound_manager:eat_medkit()endlocal emerg = nilif wound_manager_state == "psy_shoot" thenemerg = {animation_nout = true}endstate_mgr.set_state(self.object, wound_manager_state, nil, nil, {look_object = victim}, emerg, synsound)endif synsound == nil then-- нужно отыграть фоновыйif self.sound ~= wound_manager_sound thenself.sound = wound_manager_soundif self.sound == "nil" thenxr_sound.set_sound(self.object, nil)elsexr_sound.set_sound(self.object, wound_manager_sound)endendelse-- нужно зарубить фоновыйif self.sound ~= nil thenself.sound = "nil"xr_sound.set_sound(self.object, nil)endendlocal tt = db.storage[self.object:id()]if tt.active_scheme and not self.object:is_talking() thenif db.actor thenif xr_logic.try_switch_to_another_section(self.object, tt[tt.active_scheme], db.actor) thenreturnendendendendfunction action_wounded:finalize ()action_base.finalize (self)self.object:disable_talk()xr_sound.set_sound(self.object, nil)self.object:wounded(false)end------------------------------------------------------------------------------------------------------------------------ Class wound_manager----------------------------------------------------------------------------------------------------------------------class "Cwound_manager"function Cwound_manager:__init(npc, storage)self.npc = npcself.a = storageself.can_use_medkit = falseendfunction Cwound_manager:update()hp = 100*self.npc.healthpsy = 100*self.npc.psy_health-- printf("PSY [%s] HP [%s]", psy, hp)self.state, self.sound = self:process_psy_wound(psy)if self.state == "nil" andself.sound == "nil"then-- проверяем на обычную раненостьself.fight = self:process_fight(hp)self.victim = self:process_victim(hp)self.state, self.sound = self:process_hp_wound(hp)else-- устанавливаем пси раненостьself.fight = "false"self.cover = "false"self.victim = "nil"end-- printf("f[%s]c[%s]v[%s]", utils.to_str(self.fight), utils.to_str(self.cover), utils.to_str(self.victim))-- printf("st[%s]so[%s]", utils.to_str(self.state), utils.to_str(self.sound))xr_logic.pstor_store(self.npc, "wounded_state", self.state)xr_logic.pstor_store(self.npc, "wounded_sound", self.sound)xr_logic.pstor_store(self.npc, "wounded_fight", self.fight)xr_logic.pstor_store(self.npc, "wounded_victim", self.victim)endfunction Cwound_manager:unlock_medkit()self.can_use_medkit = trueendfunction Cwound_manager:eat_medkit()if self.can_use_medkit == true thenif self.npc:object("medkit") ~= nil thenself.npc:eat(self.npc:object("medkit"))elseif self.npc:object("medkit_army") ~= nil thenself.npc:eat(self.npc:object("medkit_army"))elseif self.npc:object("medkit_scientic") ~= nil thenself.npc:eat(self.npc:object("medkit_scientic"))endendself.can_use_medkit = falseself:hit_callback()endfunction Cwound_manager:process_fight(hp)local keykey = self:get_key_from_distance(self.a.hp_fight, hp)if key ~= nil thenif self.a.hp_fight[key].state thenreturn tostring(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_fight[key].state))endendreturn "true"endfunction Cwound_manager:process_victim(hp)local keykey = self:get_key_from_distance(self.a.hp_victim, hp)if key ~= nil thenif self.a.hp_victim[key].state thenreturn tostring(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_victim[key].state))endendreturn "nil"endfunction Cwound_manager:process_hp_wound(hp)local keykey = self:get_key_from_distance(self.a.hp_state, hp)if key ~= nil thenlocal r1,r2if self.npc:see(db.actor) thenif self.a.hp_state_see[key].state thenr1 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_state_see[key].state)endif self.a.hp_state_see[key].sound thenr2 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_state_see[key].sound)endelseif self.a.hp_state[key].state thenr1 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_state[key].state)endif self.a.hp_state[key].sound thenr2 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.hp_state[key].sound)endendreturn tostring(r1),tostring(r2)endreturn "nil","nil"endfunction Cwound_manager:process_psy_wound(hp)local keykey = self:get_key_from_distance(self.a.psy_state, hp)if key ~= nil thenlocal r1,r2if self.a.psy_state[key].state thenr1 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.psy_state[key].state)endif self.a.psy_state[key].sound thenr2 = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.psy_state[key].sound)endreturn tostring(r1),tostring(r2)endreturn "nil","nil"endfunction Cwound_manager:get_key_from_distance(t, hp)local keyfor k,v in pairs(t) doif v.dist >= hp thenkey = kelsereturn keyendendreturn keyendfunction Cwound_manager:hit_callback()if self.npc:alive() == false thenreturnendif self.npc:critically_wounded() == true thenreturnendself:update()end------------------------------------------------------------------------------------------------------------------------ binder----------------------------------------------------------------------------------------------------------------------function add_to_binder (object, ini, scheme, section, st)local operators = {}local properties = {}properties["wounded"] = xr_evaluators_id.sidor_wounded_baseproperties["can_fight"] = xr_evaluators_id.sidor_wounded_base + 1operators["wounded"] = xr_actions_id.sidor_act_wounded_base + 0local manager = object:motivation_action_manager ()manager:add_evaluator (properties["wounded"], this.evaluator_wound("wounded", st))manager:add_evaluator (properties["can_fight"], this.evaluator_can_fight("can_fight", st))local action = this.action_wounded("wounded_action", st)action:add_precondition (world_property(stalker_ids.property_alive, true))action:add_precondition (world_property(properties["wounded"], true))action:add_effect (world_property(properties["wounded"], false))action:add_effect (world_property(stalker_ids.property_enemy, false))action:add_effect (world_property(properties["can_fight"], true))manager:add_action (operators["wounded"], action)action = manager:action (xr_actions_id.alife)action:add_precondition (world_property(properties["wounded"], false))action = manager:action (stalker_ids.action_gather_items)action:add_precondition (world_property(properties["wounded"], false))action = manager:action (stalker_ids.action_combat_planner)action:add_precondition (world_property(properties["can_fight"], true))action = manager:action (stalker_ids.action_danger_planner)action:add_precondition (world_property(properties["can_fight"], true))action = manager:action (stalker_ids.action_anomaly_planner)action:add_precondition (world_property(properties["can_fight"], true))end-------------- Вызывается только в начале на чтении логики, создает экшены, эвалуаторы и производит-- первичную настройку.function set_wounded(npc, ini, scheme, section)local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)st.wound_manager = Cwound_manager(npc, st)end-- Вызывается на переключении на новую секцию. Производит вычитывание настроек из текущей секции.function reset_wounded(npc, scheme, st, section)local wounded_sectionif scheme == nil or scheme == "nil" thenwounded_section = utils.cfg_get_string(st.ini, st.section_logic, "wounded", npc, false, "")elsewounded_section = utils.cfg_get_string(st.ini, section, "wounded", npc, false, "")endinit_wounded(npc, st.ini, wounded_section, st.wounded, scheme)st.wounded.wound_manager:hit_callback()end-- Функция чтения настроек. В нее передается секция, откуда их нужно читать.local wounded_by_state = {[0] = "wounded_heavy",[1] = "wounded_heavy_2",[2] = "wounded_heavy_3"}function init_wounded(npc, ini, section, st, scheme)printf("WOUNDED SECTION [%s][%s]", tostring(section), tostring(scheme))if tostring(section) == st.wounded_section andtostring(section) ~= "nil"thenreturnendst.wounded_section = utils.to_str(section)local def = {}local npc_community = npc:character_community()if npc_community == "monolith" thenlocal state = wounded_by_state[math.mod(npc:id(), 3)]def.hp_state = "10|"..state.."@nil"def.hp_state_see = "10|"..state.."@nil"def.psy_state = ""def.hp_victim = "10|nil"def.hp_cover = "10|false"def.hp_fight = "10|false"def.syndata = ""def.help_dialog = nildef.help_start_dialog = nildef.use_medkit = falseelseif npc_community == "zombied" thendef.hp_state = "40|wounded_zombie@nil"def.hp_state_see = "40|wounded_zombie@nil"def.psy_state = ""def.hp_victim = "40|nil"def.hp_cover = "40|false"def.hp_fight = "40|false"def.syndata = ""def.help_dialog = nildef.help_start_dialog = nildef.use_medkit = falseelselocal state = wounded_by_state[math.mod(npc:id(), 3)]def.hp_state = "10|"..state.."@help_heavy"def.hp_state_see = "10|"..state.."@help_heavy"def.psy_state = "50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20|{=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy"def.hp_victim = "10|nil"def.hp_cover = "10|false"def.hp_fight = "10|false"def.syndata = ""def.help_dialog = "dm_help_wounded_medkit_dialog"def.help_start_dialog = nildef.use_medkit = trueendif tostring(section) == "nil" then-- Загружаем дефолты!st.hp_state = xr_meet.parse_data(npc, def.hp_state)st.hp_state_see = xr_meet.parse_data(npc, def.hp_state_see)st.psy_state = xr_meet.parse_data(npc, def.psy_state)st.hp_victim = xr_meet.parse_data(npc, def.hp_victim)st.hp_cover = xr_meet.parse_data(npc, def.hp_cover)st.hp_fight = xr_meet.parse_data(npc, def.hp_fight)st.syndata = xr_meet.parse_syn_data(npc, def.syndata)st.help_dialog = def.help_dialogst.help_start_dialog = nilst.use_medkit = def.use_medkitelsest.hp_state = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "hp_state", npc, false, "", def.hp_state))st.hp_state_see = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "hp_state_see", npc, false, "", def.hp_state_see))st.psy_state = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "psy_state", npc, false, "", def.psy_state))st.hp_victim = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "hp_victim", npc, false, "", def.hp_victim))st.hp_cover = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "hp_cover", npc, false, "", def.hp_cover))st.hp_fight = xr_meet.parse_data(npc, utils.cfg_get_string(ini, section, "hp_fight", npc, false, "", def.hp_fight))st.syndata = xr_meet.parse_syn_data(npc, utils.cfg_get_string(ini, section, "syndata", npc, false, "", def.syndata))st.help_dialog = utils.cfg_get_string(ini, section, "help_dialog", npc, false, "", def.help_dialog)st.help_start_dialog = utils.cfg_get_string(ini, section, "help_start_dialog", npc, false, "", nil)st.use_medkit = utils.cfg_get_bool(ini, section, "use_medkit", npc, false, def.use_medkit)end-- флажок, что функция хотя бы раз вызываласьst.wounded_set = trueendfunction unlock_medkit(npc)if db.storage[npc:id()].wounded ~= nil thendb.storage[npc:id()].wounded.wound_manager:unlock_medkit()endendfunction is_wounded(npc)if db.storage[npc:id()].wounded ~= nil then--' if npc:object("medkit") ~= nil and--' db.storage[npc:id()].wounded.wound_manager.can_use_medkit == true--' then--' return false--' endreturn tostring(db.storage[npc:id()].wounded.wound_manager.state) ~= "nil"endreturn falseendfunction hit_callback(npc_id)if db.storage[npc_id].wounded ~= nil thendb.storage[npc_id].wounded.wound_manager:hit_callback()endendfunction is_heavy_wounded_by_id(npc_id)if db.storage[npc_id].wounded ~= nil thenreturn tostring(db.storage[npc_id].wounded.wound_manager.state) ~= "nil"endreturn falseendfunction is_psy_wounded_by_id(npc_id)if db.storage[npc_id].wounded ~= nil thenreturn db.storage[npc_id].wounded.wound_manager.state == "psy_pain" ordb.storage[npc_id].wounded.wound_manager.state == "psy_armed" ordb.storage[npc_id].wounded.wound_manager.state == "psy_shoot" ordb.storage[npc_id].wounded.wound_manager.state == "psycho_pain" ordb.storage[npc_id].wounded.wound_manager.state == "psycho_shoot"endreturn falseend-- Помощь раненомуfunction help_wounded(npc) -- скрипт добавлен автором!!!local sndif npc:name()=="esc_vagon_wounded" or npc:name()=="val_escort_bandit_halfdead" then return endsnd = xr_sound.get_safe_sound_object("characters_voice\\human_01\\newbie\\help\\wounded_thanx\\thanx_"..math.random(1,3))snd:play_no_feedback(npc, sound_object.s3d, 0, npc:position(), 1.0)--amk.start_timer("healing_enemies",math_random(20,30),amk.pack_array_to_string( {npc:id(), npc:character_community()} ))--amk.start_timer("healing_enemies",math_random(20,30), {npc:id(), npc:character_community()} )npc:set_character_community("stalker", 0, 0)npc:set_relation(game_object.friend, db.actor)end function allow_break_dialog(first_speaker, second_speaker, id)if second_speaker:profile_name() == "osoznanie" thenreturn falseendreturn trueendfunction break_dialog(first_speaker, second_speaker, id)first_speaker:stop_talk()second_speaker:stop_talk()endfunction disable_talk_self(first_speaker, second_speaker)first_speaker:disable_talk()endfunction disable_talk_victim(first_speaker, second_speaker)second_speaker:disable_talk()endfunction punch(first_speaker, second_speaker)--abort("KICK ASS !!!!")--xr_punch.punch[first_speaker:id()] = second_speakerdb.storage[second_speaker:id()].punch.enabled = trueendfunction get_money_then_leave(first_speaker, second_speaker)db.storage[first_speaker:id()].meet.enabled = falsedb.storage[first_speaker:id()].robber.enabled = trueendfunction is_wounded(first_speaker, second_speaker)if db.storage[first_speaker:id()].wounded ~= nil anddb.storage[first_speaker:id()].wounded.wound_manager.can_use_medkit == truethenreturn falseendreturn xr_wounded.is_wounded(first_speaker)endfunction is_opp_wounded(first_speaker, second_speaker, dialog_id)if db.storage[second_speaker:id()].wounded ~= nil anddb.storage[second_speaker:id()].wounded.wound_manager.can_use_medkit == truethenreturn falseendreturn xr_wounded.is_wounded(second_speaker)endfunction is_not_wounded(first_speaker, second_speaker)return not this.is_wounded(first_speaker, second_speaker)endfunction actor_have_medkit(first_speaker, second_speaker)return first_speaker:object("medkit") ~= nil orfirst_speaker:object("medkit_army") ~= nil orfirst_speaker:object("medkit_scientic") ~= nilendfunction actor_have_bandage(first_speaker, second_speaker)return first_speaker:object("bandage") ~= nilendfunction transfer_medkit(first_speaker, second_speaker)if first_speaker:object("medkit") ~= nil thendialogs.relocate_item_section(second_speaker, "medkit", "out")elseif first_speaker:object("medkit_army") ~= nil thendialogs.relocate_item_section(second_speaker, "medkit_army", "out")elsedialogs.relocate_item_section(second_speaker, "medkit_scientic", "out")end--' Тут надо анлочить аптечку для использования.xr_wounded.unlock_medkit(second_speaker)if second_speaker:relation(first_speaker) ~= game_object.enemy thensecond_speaker:set_relation(game_object.friend, first_speaker)first_speaker:change_character_reputation(10)elsefirst_speaker:change_character_reputation(-10)xr_wounded.help_wounded(second_speaker)endendfunction transfer_bandage(first_speaker, second_speaker)dialogs.relocate_item_section(second_speaker, "bandage", "out")second_speaker:set_relation(game_object.friend, first_speaker)endfunction kill_yourself(npc, actor)npc:kill(actor)end--' Obsolete, do not use!!!function relocate_item(victim, obj, type)if db.actor and victim thenif type == "in" thenvictim:transfer_item(obj, db.actor)elseif type == "out" thendb.actor:transfer_item(obj, victim)end--'news_manager.relocate_item(db.actor, type, obj)endend--' Use this function instead.function relocate_item_section(victim, section, type)if db.actor and victim thenif type == "in" then--' Трансферить нужно только квестовые предметы.if quest_section[section] == true andvictim:object(section) ~= nilthenvictim:transfer_item(victim:object(section), db.actor)elsealife():create(section,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())endelseif type == "out" thendb.actor:transfer_item(db.actor:object(section), victim)endnews_manager.relocate_item(db.actor, type, section)endendfunction relocate_money(victim, num, type)if db.actor and victim thenif type == "in" thendb.actor:give_money(num)game_stats.money_quest_update (num)elseif type == "out" thendb.actor:transfer_money(num, victim)game_stats.money_quest_update (-num)endnews_manager.relocate_money(db.actor, type, num)endend--'-----------------------------------------------------------------------------------' DIALOG ALLOWED--'---------------------------------------------------------------------------------function dialog_allowed(object, victim, id)if id ~= nil then-- printf("*DIALOGS*: dialog_allowed: %s", id)else-- printf("*DIALOGS*: dialog_allowed: nil")endif db.storage[victim:id()].actor_dialogs ~= nil thenfor k,v in pairs(db.storage[victim:id()].actor_dialogs) doif v == id then return true endendendreturn falseendfunction dialog_not_disable(object, victim, id)if id ~= nil then-- printf("*DIALOGS*: dialog_disable:%s", id)else-- printf("*DIALOGS*: dialog_disable:nil")endif db.storage[victim:id()].actor_disable ~= nil thenfor k,v in pairs(db.storage[victim:id()].actor_disable) doif v == id then return false endendendreturn trueendfunction allow_wounded_dialog(object, victim, id)if db.storage[victim:id()].wounded == nil thenreturn falseendif db.storage[victim:id()].wounded.help_dialog == id thenreturn trueendreturn falseend------------------------------------------------------------------------------------- LEVELS-----------------------------------------------------------------------------------function level_escape(first_speaker, second_speaker)return level.name() == "l01_escape"endfunction level_garbage(first_speaker, second_speaker)return level.name() == "l02_garbage"endfunction level_agroprom(first_speaker, second_speaker)return level.name() == "l03_agroprom_ai2" or level.name() == "l03_agroprom"end------------------------------------------------------------------------------------- Relation functions-----------------------------------------------------------------------------------function is_friend(first_speaker, second_speaker)return first_speaker:relation(second_speaker) == game_object.friendendfunction is_not_friend(first_speaker, second_speaker)return not is_friend(first_speaker, second_speaker)endfunction become_friend(first_speaker, second_speaker)first_speaker:set_relation(game_object.friend, second_speaker)end------------------------------------------------------------------------------------- Community-----------------------------------------------------------------------------------function actor_in_dolg(actor, npc)if db.actor thenreturn db.actor:character_community() == "actor_dolg"endreturn falseendfunction actor_not_in_dolg(actor, npc)return not actor_in_dolg(actor, npc)endfunction actor_set_dolg(actor, npc)printf("ACTOR NOW IN [DOLG] COMMUNITY")if db.actor thendb.actor:set_character_community("actor_dolg", 0, 0)endreturn trueendfunction actor_clear_community(actor, npc)printf("ACTOR NOW IN [NEUTRAL] COMMUNITY")if db.actor thendb.actor:set_character_community("actor", 0, 0)endreturn trueend------------------------------------------------------------------------------------- Money functions-----------------------------------------------------------------------------------function has_2000_money(first_speaker, second_speaker)return first_speaker:money() >= 2000end------------------------------------------------------------------------------------- TRADE-------------------------------------------------------------------------------------' Инициализация торговлиfunction trade_init(seller, buyer)db.storage[seller:id()].meet.begin_wait_to_see.begin = time_global()/1000xr_position.setPosition(db.storage[seller:id()].meet.Seller,db.storage[seller:id()].meet.Seller:level_vertex_id())db.storage[seller:id()].meet.Buyer = buyerendfunction want_trade(seller, buyer)if seller:relation(buyer) == game_object.friend orseller:relation(buyer) == game_object.neutralthenreturn trueelsereturn falseendendfunction dont_want_trade(seller, buyer)return not want_trade(seller,buyer)end Возможно кому пригодится!!! Изменено 25 Февраля 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Stalker_Anom 0 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 Как через скрипт привязать к актёру партиклы. Но так что-бы они например включались через час, а потом отключались. Ссылка на комментарий
naxac 2 445 Опубликовано 25 Февраля 2016 Поделиться Опубликовано 25 Февраля 2016 @Stalker_Anom, local p = particles_object("партикл") p:play_at_pos... Читай "справочник по функциям и классам". включались через час, а потом отключалисьМожно сделать через таймеры, например. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 (изменено) Добрый день. Такая проблема. Есть описанный класс дешифратора( на GUI-элементах) class "Deshifrator" (CUIScriptWnd)function Deshifrator:__init() super()self:InitControls()self:InitCallBacks()endfunction Deshifrator:__finalize()endfunction Deshifrator:InitControls()local xml = CScriptXmlInit()self:Init(0,0,1024,768)xml:ParseFile("Deshifrator.xml")self.frame1 = xml:InitFrame("frame1", self)self.edit1 = xml:InitEditBox("frame1:edit1", self.frame1)self:Register(xml:Init3tButton("frame1:button1", self.frame1), "button1")self:Register(xml:Init3tButton("frame1:button2", self.frame1), "button2")self.Static3 = xml:InitStatic("frame1:Static3", self.frame1)self.Static4 = xml:InitStatic("frame1:Static4", self.frame1)self.edit2 = xml:InitEditBox("frame1:edit2", self.frame1)self.checkbox1 = xml:InitCheck("frame1:checkbox1", self.frame1)self:Register(self.checkbox1, "checkbox1")self.checkbox2 = xml:InitCheck("frame1:checkbox2", self.frame1)self:Register(self.checkbox2, "checkbox2")endfunction Deshifrator:InitCallBacks()self:AddCallback("edit1", ui_events.EDIT_TEXT_CHANGED, self.edit1_edit_text_changed, self)self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self)self:AddCallback("button2", ui_events.BUTTON_CLICKED, self.button2_button_clicked, self)self:AddCallback("checkbox1", ui_events.BUTTON_CLICKED, self.checkbox1_button_clicked, self)self:AddCallback("checkbox2", ui_events.BUTTON_CLICKED, self.checkbox2_button_clicked, self)endfunction Deshifrator:edit1_GetText() --/получить введенный текст в edit1return self.edit1:GetText()endfunction Deshifrator:edit1_edit_text_changed()endfunction Deshifrator:button1_button_clicked()endfunction Deshifrator:button2_button_clicked()endfunction Deshifrator:edit2_GetText() --/получить введенный текст в edit2return self.edit2:GetText()endfunction Deshifrator:checkbox1_GetCheck() --/true/false - включен/отключен checkbox1return self.checkbox1:GetCheck()endfunction Deshifrator:checkbox1_button_clicked()endfunction Deshifrator:checkbox2_GetCheck() --/true/false - включен/отключен checkbox2return self.checkbox2:GetCheck()endfunction Deshifrator:checkbox2_button_clicked()endfunction Deshifrator:Hide()self:GetHolder():start_stop_menu(self, true)end Но я не знаю, как правильно его активировать. Я пытаюсь через проверку на активация предмета сделать, сама проверка то работает, а интерфейс не вызываеться. Делаю вот так, но как видно, не работает. function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже--episode_system.def_func() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функцииself.Deshifrator:Hide()endendend Класс зарегестрирован в class_registrator. Вызываеться ф-я repair_outfit_start(obj, who) через bind_stalker. И вот лог ошибки: [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index field 'Deshifrator' (a nil value) Изменено 26 Февраля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Ссылка на комментарий
Sla-Sla 43 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 @CRAZY_STALKER666, создай в своем скрипте функцию main() с таким кодом function main()local hud = Deshifrator(get_hud()) level.start_stop_menu(hud, true) end и вызывай её. Ссылка на комментарий
losiara 13 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 Добрый день всем!!! Нубский вопрос. Как телепортировать НПС в пределах локации, не ГГ, а именно НПС. Вызов будет происходить из логики НПС при получении хита по типу: [hit] on_info = %=функция телепортации...% Вот прошерстил и не нашел ничего подобного в инете!!! СПАСИБО!!! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Painter 3 384 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 (изменено) На платформе ЗП: xr_effects.script. Функция teleport_npc. Изменено 26 Февраля 2016 пользователем Jurok Портфолио Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 @Sla-Sla, вызывал в точности, как у вас. Вылет: [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index global 'Deshifrator' (a nil value) Не соответствует правилам. Ссылка на комментарий
Sla-Sla 43 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 @CRAZY_STALKER666, функцию куда вписал? Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 (изменено) @Sla-Sla, функцию вписал в deshifrator.script(там где и описание этого класса идет). Вызывал как обычно, из bind_stalker Вот вызов - Deshifrator.main() Изменено 26 Февраля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти