losiara 13 Опубликовано 25 Сентября 2013 (изменено) Отличная статья, если не ошибаюсь singapur22 писал, прекрасно работает, что тебе не нравится??? Изменено 25 Сентября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 30 Сентября 2013 (изменено) Добрый день!!! Уже долгое время мучаюсь вопросом и не могу закончить мод. В игре существует 2 класса это группа сталкеров и монстры, соответственно в файле game_relations регулируются их взаимоотношения по типу: "друг" - "враг" - "нейтрал". Для актора и сталкеров [communities_relations]; |actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader |arena_enemy|zone|;=================================================================================================================================actor = 0, 0, 0, 100, -5000, -5000, -5000, 600, 0, 0, -5000, -5000, 0, 5000, -5000, 0actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000, 0actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0stalker = 100, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 100monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, -5000military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 600, -5000, -5000, 0, -5000, -5000ecolog = 600, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 600dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0bandit = -5000, -5000, 0, -5000, 0, -500, 600, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, -5000zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0trader = 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5000arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, -5000zone = 100, 0, 0, 0, -5000, 0, -5000, 5000, 0, 0, -5000, -5000, 0, 0, -5000, 0Для актора и монстров[monster_relations]; [1] друг, [0] нейтрал, [-1] враг, [-2] злейший враг; actor,human,arena_monstr, boar, bloodsucker, flesh, dog, pseudodog, cat, chimera, giant, zombie, burer, controller, poltergeist, snork, fracture, bird, rat, tushkano;==========================================================================================================================================================================actor = 1, 1, -2, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1human = 0 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1arena_monstr = -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0boar = -2, -2, 0, 1, -1, 0, -1, -1, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0bloodsucker = -2, -2, 0, -1, 1, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0flesh = -2, -1, 0, 0, -1, 1, -1, -1, 0, 0, -1, -1, 0, -1, -1, 0, 0, 0, 0, 0dog = -2, -1, 0, -1, 0, -1, 1, 0, -1, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0pseudodog = -2, -1, 0, -1, 0, -1, 0, 1, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0cat = 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0chimera = -2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0giant = -2, -1, 0, -1, 0, -1, -1, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0zombie = -2, -1, 0, 0, -1, -1, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1burer = -2, -2, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0controller = -2, -2, 0, -1, 0, -1, -1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0poltergeist = -2, -1, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0snork = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0fracture = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0bird = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0rat = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0tushkano = -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1 Согласно этим таблицам имеется возможность регулировать взаимоотношения между сталкерами и ГГ, а также между монстрами и ГГ, однако, отсутствует возможность напрямую регулировать взаимоотношения между сталкерами и монстрами, данная возможность не была предусмотрена разработчиком. Отсюда и вопрос, возможно ли и каким образом менять взаимодействие между например гражданским зомби (класс монстров) и сталкером зомбированным (класс сталкеров), таким образом, что бы они в игре не нападали друг на друга? Поскольку конфигурационное изменение данного файла не дает результатов подозреваю, что необходимы скриптовые правки, но где, в каких файлах и какова направленность этих изменений понять не могу. Посему прошу помочь по возможности в каком направлении двигаться! Заранее благодарю кто откликнется. Изменено 30 Сентября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 30 Сентября 2013 (изменено) Капрал Хикс Такого параметра в монстрячих конфигах "m_.....ltx" я не обнаружил. Изменено 30 Сентября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 1 Октября 2013 (изменено) ColR_iT Благодарю, это не совсем тот вариант, так как гражданские зомби у меня во многих сценках воюют со сталкерами. Еще один вопрос, в каком скриптовом файле регулируются эти отношения (monster_relations), посмотрю, возможно удастся что нибудь придумать... Изменено 1 Октября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 1 Октября 2013 (изменено) ColR_iT Отыскал, вставил и без толку, не знаю как на контроллерах, но на гр. зомби не распространяется... Продолжают атаковать друг друга... А надежда была. Artos Есть такой хитрый скрипт. А какова возможность добавить вариант дружелюбности сталкеров к монстрам??? В скрипте же речь только о монстрячих схемах??? По идее, даже добавив параметр назовем его условно "дружен_со_сталкерами", сталкеры все равно будут вести стрельбу против монстров не смотря на то, что последние не сопротивляются или я ошибаюсь??? --------------------------------------------------------------------------------- -- Mob alife manager --------------------------------------------------------------------------------- disable_scheme = 1 reset_scheme = 2 continue_execution = 3 function cfg_get_mode(ini, section, npc) local alife = {} alife.actor_friendly = utils.cfg_get_bool(ini, section, "actor_friendly", npc, false) alife.npc_friendly = utils.cfg_get_bool(ini, section, "npc_friendly", npc, false) alife.friendly = utils.cfg_get_bool(ini, section, "friendly", npc, false) alife.braindead = utils.cfg_get_bool(ini, section, "braindead", npc, false) alife.zombie_friendly = utils.cfg_get_bool(ini, section, "zombie_friendly", npc, false) return alife end function issue_combat_event(obj) --printf("_bp: issue_combat_event?") local st = db.storage[obj:id()] if st.mob_combat then printf("_bp: alife_control: issuing event combat_callback") xr_logic.issue_event(obj, st.mob_combat, "combat_callback") end end function alife_control(obj, actor, mode) -- Мертвые монстры сразу отпускаются под alife if not obj:alive() then xr_logic.mob_release(obj) return true end -- Монстры, у которых есть враг - также должны работать в alife local enemy = obj:get_enemy() if enemy then --printf("_bp: got enemy") if not mode.braindead and not mode.friendly and (not mode.actor_friendly or enemy:id () ~= actor:id ()) and (not mode.npc_friendly or enemy:id() == actor:id()) then issue_combat_event(obj) xr_logic.mob_release(obj) return true end end -- Отпускать в alife монстров, которых обстреляли local h = obj:get_monster_hit_info() if h.who and h.time ~= 0 then if mode.braindead then -- Braindead монстры не уходят из под скрипта даже если их обстрелять return false end if h.who:id() == actor:id() and mode.actor_friendly then -- Если хотя бы раз был атакован actor-ом, то больше не дружественен к нему mode.actor_friendly = false if h.who:id() == actor:id() and mode.zombie_friendly then mode.zombie_friendly = true end --printf("_bp [%s]: h.who:name() = %s", obj:name(), h.who:name()) issue_combat_event(obj) xr_logic.mob_release(obj) return true end -- Остальные монстры работают под схемой return false end Прошу простить, но времени на редактирование поста не хватило... disable_scheme = 1 reset_scheme = 2 continue_execution = 3 function cfg_get_mode(ini, section, npc) local alife = {} alife.actor_friendly = utils.cfg_get_bool(ini, section, "actor_friendly", npc, false) alife.npc_friendly = utils.cfg_get_bool(ini, section, "npc_friendly", npc, false) alife.friendly = utils.cfg_get_bool(ini, section, "friendly", npc, false) alife.braindead = utils.cfg_get_bool(ini, section, "braindead", npc, false) alife.zombie_friendly = utils.cfg_get_bool(ini, section, "zombie_friendly", npc, false) return alife end function issue_combat_event(obj) --printf("_bp: issue_combat_event?") local st = db.storage[obj:id()] if st.mob_combat then printf("_bp: alife_control: issuing event combat_callback") xr_logic.issue_event(obj, st.mob_combat, "combat_callback") end end function alife_control(obj, actor, mode) -- Мертвые монстры сразу отпускаются под alife if not obj:alive() then xr_logic.mob_release(obj) return true end -- Монстры, у которых есть враг - также должны работать в alife local enemy = obj:get_enemy() if enemy then --printf("_bp: got enemy") if not mode.braindead and not mode.friendly and not mode.zombie_friendly and (not mode.actor_friendly or enemy:id () ~= actor:id ()) and (not mode.npc_friendly or enemy:id() == actor:id()) then issue_combat_event(obj) xr_logic.mob_release(obj) return true end end -- Отпускать в alife монстров, которых обстреляли local h = obj:get_monster_hit_info() if h.who and h.time ~= 0 then if mode.braindead then -- Braindead монстры не уходят из под скрипта даже если их обстрелять return false end if h.who:id() == actor:id() and mode.actor_friendly then -- Если хотя бы раз был атакован actor-ом, то больше не дружественен к нему mode.actor_friendly = false if h.who:id() == actor:id() and mode.zombie_friendly then mode.zombie_friendly = true end --printf("_bp [%s]: h.who:name() = %s", obj:name(), h.who:name()) issue_combat_event(obj) xr_logic.mob_release(obj) return true end -- Остальные монстры работают под схемой return false end Изменено 1 Октября 2013 пользователем ColR_iT Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 8 Октября 2013 (изменено) Melo, наверное никто тебе не ответит, потому что муссировалось уже не раз, вот здесь посмотри: http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BC%D0%B0%D1%80%D1%82%D0%B5%D1%80%D1%80%D0%B5%D0%B9%D0%BD%D1%8B_%D0%B8_%D0%B3%D1%83%D0%BB%D0%B0%D0%B3%D0%B8 Вот кусок кода, человек как раз поясняет где и что находится. if type == "esc_bandits_smart_terrain" then t = {};-- "соеденительная секция" для логики, определяем ltx фаиломt.section = "logic@esc_bandits_smart_terrain_bandit1_walker";-- no idea, probably describes after what time;-- npc will use this job again (?)t.idle = 0;-- no idea but i guess it's optionalt.timeout = 0;-- пріоритетt.prior = 100;-- нпс будет использовать эту логику,;-- если ST переключится в это состояние;-- в этом случае - состояние 0 (день)t.state = {0};-- Какой squad и group назначится персонажу принявшему эту работу.t.squad = squadt.group = groups[1];-- no idea what means position_thresholdt.position_threshold = 100;-- описывает нпс в этом состоянии: онлайн или офлайн;-- онлайн = истина по дефолтуt.online = true;-- описывает рестрикторы (куда нпс могут/не могут пойти)t.in_rest = ""t.out_rest = "";-- ввиду особого способа присвоения работ в;-- smart_terrain.script вы никогда не знаете, какая работа;-- будет использоваться каждым нпсом; если вы хотите быть уверенным;-- что конкретный нпс взял конкретную работу, тогда;-- вам нужно заюзать предикатную функцию; в этом слуае;-- мы хотим чтобы эта работа присвоилась мастеру бандитуt.predicate = function(obj_info) return obj_info.rank >= 900 endtable.insert(sj, t) Изменено 9 Октября 2013 пользователем ColR_iT Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 21 Октября 2013 -AZOT- имеется ввиду вот это в логике у неписей: meet_dialog = esc_lager_no_talk meet_dialog = escape_lager_guard_start_dialog Фактически это активация стартового диалога который прописан у них в логике!!! Достаточно просто удалить соот. строки и все... Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 22 Октября 2013 (изменено) Карлан вот здесь посмотри: [esc_lager_squash_camp] points = p0p0:name = wp00p0:flags = 0x1 ;этот флаг с чем связан???p0:position = -170.06298828125,-20.014019012451,-136.57836914063p0:game_vertex_id = 55p0:level_vertex_id = 79998[esc_lager_squash_camp_look]points = p0p0:name = wp00p1:position = -170.23962402344,-20.173686981201,-153.82247924805p1:game_vertex_id = 45p1:level_vertex_id = 79973 Изменено 22 Октября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 23 Октября 2013 AndreySol прописал верно, все должно работать!!! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 27 Октября 2013 (изменено) VVV32768 Там через инфопоршень прописывать надо... Это в папке level, нужного тебе уровня:[level_scripts]script = svalkaЭто в папке scripts:function main()if not has_alife_info("controller_tubeman")thenalife():create("controller_tubeman",vector():set(69.456,1.29,95.033),239954,370)db.actor:give_info_portion("controller_tubeman")endend И инфопоршень нужен еще, тогда спавнится при каждом заходе на уровень, ну или какая там тебе функция нужна при каждом заходе...У меня таким образом появляется контролер в квесте, можно сделать что бы только 1 раз спавнился например по желанию... Изменено 27 Октября 2013 пользователем losiara 1 Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 28 Октября 2013 Старлей Проверка (лично мне) нужна для одноразового выполнения функции. Подробнее можно узнать у Malandrius, это он юзал этот способ... _Val_ Почему инфопоршень не выдается??? У меня проверяет и выдает. Если не выдается значит функция у тебя не стартует. Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 25 Ноября 2013 (изменено) Dniwe Да что тут гуглить, выдать можно и через инфопорцию и через другую функцию и множеством иных методов и способов... Сама функция выглядит проще function my_habar(actor, npc) treasure_manager.get_treasure_manager():give_treasure("имя тайника") end Изменено 25 Ноября 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 9 Декабря 2013 (изменено) Serg.Ivan Конечно с конфигом все нормально, но вот только rpm - это параметр скорострельности, а не стрельбы очередями, таким образом его повышение влияет только на количество выстрелов в еденицу времени, а не тип выстрелов (очередь, одиночные)!!! Менять/добавлять надо другой параметр, "fire_modes" как и было сказано выше. Изменено 9 Декабря 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 11 Декабря 2013 Serg.Ivan Тогда поставь у своей СВД параметр rpm = 700 или 1000 и пусть она начнет стрелять очередями!!! Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 11 Декабря 2013 @Serg.Ivan, При том Уважаемый, что параметр rpm не отвечает за стрельбу очередями!!! Поэтому я и предложил тебе увеличить этот параметр на том оружии которое не призвано стрелять очередями (СВД). Итог будет следующий, увеличение rpm приведет к тому что ты сможешь чаще стрелять при каждом "нажатии" на курок (ЛКМ), но очередями в связи с этим оружие стрелять не станет!!! А вот у автоматического оружия увеличение данного параметра как раз таки и вызовет увеличение количества пуль пуль выпущенных в еденицу времени при ОДНОРАЗОВОМ "нажимании" на курок (ЛКМ)!!! Если в данном моде оружию присвоен статус "автоматического", тогда действительно rpm призвано будет помочь в решении проблемы, если же параметр выставлен на стрельбу "одиночными", то хоть 100.000 rpm выстави, а более одной пули оно выпускать не будет... И не нужно злиться. Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 22 Декабря 2013 (изменено) andreyholkin,не помогает. Всё тот же безлоговый вылет. С новайсами я нахожусь в одной группировке. Причем тут новайсы?! Изначально в игре с бандитами говорить нельзя, будь ты им хоть брат родной. Вносите правки в соотв. скрипты. Менеджер диалогов тут и близко не стоит, - это для справки. Говорить нельзя, но вылет скорее всего не из за этого, проблема в профиле либо самом диалоге, скрипты трогать не нужно. У себя в моде я добавил диалоги всем неквестовым персам на всех локациях (дружелюбным) и все они разговаривают и даже задания выполняют... Примерно так: <dialog id="zadanie_kvest"> <dont_has_info>zadanie_kvest</dont_has_info> <phrase_list> <phrase id="0"> <text>zadanie_kvest_0</text> <give_info>new_restriktor</give_info> <give_info>outfit_actor</give_info> <next>1</next> </phrase> <phrase id="1"> <text>zadanie_kvest_1</text> <next>2</next> <next>21</next> </phrase> <phrase id="2"> <text>zadanie_kvest_2</text> <next>3</next> </phrase> <phrase id="21"> <text>zadanie_kvest_21</text> <next>4</next> </phrase> <phrase id="3"> <text>zadanie_kvest_3</text> <give_info>zadanie_kvest</give_info> <give_info>zadanie_kvest_vipolnil_have</give_info> </phrase> <phrase id="4"> <text>zadanie_kvest_4</text> <next>1</next> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> <dialog id="zadanie_kvest_vipolnil"> <precondition>kvest_dialog.have_a_mutant_dog_tail</precondition> <has_info>zadanie_kvest_vipolnil_have</has_info> <dont_has_info>zadanie_kvest_vipolnil_done</dont_has_info> <phrase_list> <phrase id="0"> <text>zadanie_kvest_vipolnil_0</text> <next>1</next> </phrase> <phrase id="1"> <text>zadanie_kvest_vipolnil_1</text> <next>2</next> </phrase> <phrase id="2"> <text>zadanie_kvest_vipolnil_2</text> <action>kvest_dialog.babki_otdal</action> <action>kvest_dialog.otday_mutant</action> <give_info>zadanie_kvest_vipolnil_done</give_info> </phrase> </phrase_list> </dialog> Профиль: <!---------------------------STALKER NOVICE-----------------------> <specific_character id="esc_stalker_novice_default1" team_default = "1"> <name>GENERATE_NAME_stalker</name> <icon>ui_npc_u_green_stalker_6</icon> <bio>esc_stalker_novice_bio</bio> <class>esc_stalker_novice</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>140</rank> <reputation>12</reputation> <money min="200" max="600" infinitive="0"/> <snd_config>characters_voice\human_01\newbie\</snd_config> <crouch_type>-1</crouch_type> <visual>actors\novice\green_stalker_6</visual> <supplies> [spawn] \n wpn_bm16 \n ammo_12x70_buck \n stalker_outfit \n #include "gameplay\character_items.xml" \n #include "gameplay\character_food.xml" </supplies> #include "gameplay\character_criticals_3.xml" <start_dialog>hello_dialog</start_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>zadanie_kvest</actor_dialog> <actor_dialog>zadanie_kvest_vipolnil</actor_dialog> #include "gameplay\character_dialogs.xml" </specific_character> Изменено 22 Декабря 2013 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 24 Декабря 2013 Программа ругается на то что не может открыть секцию "grenade_gd-05" Связано может быть со многими причинами, в том числе с прописыванием ее в торговлю, спавном где то на локации, в инвентаре ГГ либо сталкеров, выдаче в квестах и т. д. А удалять надо полностью предмет, а не только его секцию в файле... Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 24 Декабря 2013 @Потенциал, А зачем его ставить вне АИ сетки??? Ради эксперимента что ли??? Игра не расчитана на то что бы спавнить персов вне АИ сетки, это приведет к багам и вылетам!!! 1 Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 28 Декабря 2013 (изменено) NFSNeedForSpirt может так попробовать: custom_data = <<END вместо: custom_data = <[smart_terrain] Строгое предупреждение !!! п.2.4. про жирные буквы почитай. BFG p.s. пост поправил. Изменено 28 Декабря 2013 пользователем BFG Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение
losiara 13 Опубликовано 5 Января 2014 (изменено) AndrewMor Вот тебе пример из моего мода по проверке правда тут 10 рук зомби и передачу их торговцу. Активация скриптов происходит через диалог, проверка через прекондишн... function proverka_v_nalichii(sSection,iNum)if not iNum then iNum = 1 endlocal oActor = db.actorlocal iCnt = 0if oActor and sSection thenoActor:iterate_inventory(function (dummy, oItem)if oItem:section() == sSection theniCnt = iCnt + 1if iCnt >= iNum thenreturn true --/> актор имеет N предметовendendend,nil)endreturn iCnt >= iNum --/> имеет ли актор N предметовendfunction zamochit_zombie()return this.proverka_v_nalichii("mutant_zombie_hand", 10)endfunction Delete_mutant_zombie_hand()local cnt = db.actor:object_count()local ch=0for i=0, cnt-1 dolocal item = db.actor:object(i)if item:section() == "mutant_zombie_hand" thenlocal sobj = alife():object(item:id())if sobj thenalife():release(sobj,true)ch = ch+1if ch == 10 thenbreak endendendendend Изменено 5 Января 2014 пользователем losiara Жизнь следует измерять поступками, а не временем... Поделиться этим сообщением Ссылка на сообщение