Vano_Santuri 33 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 (изменено) Ребят, ва нужно 15 раз заспавнить рандомные объекты что ли? Если да, то на кой черт извращаться с return? Вначале уточняй что спрашивается, а потом чертыхайся! И не вали всех в кучу, спрашивающий пока один. Если нужно заспавнить 15 предметов одного вида из таблички то делаем так. local items = { "booster", "bread", "kolbasa", "conserva", "vodka", "energy_drink", "bandage", "antirad" } function Test() local npc = nil local SpItem = items[math.random(#items)] spawn_item(SpItem, npc) end function spawn_item(spawn_item, npc) for i=1, 15 do if npc==nil then npc=db.actor end alife():create(spawn_item, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id()) end end Функция Test - для проверки. Если нужно 15 рандомных предметов,то так. function Test() spawn_item() end local items = { "booster", "bread", "kolbasa", "conserva", "vodka", "energy_drink", "bandage", "antirad" } function spawn_item(npc) for i=1, 15 do if npc==nil then npc=db.actor end local SpItem = items[math.random(#items)] alife():create(SpItem, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id()) end end Функция Test - для проверки. Каждый раз будет спавнится рандомный предмет из таблицы. Если local SpItem = items[math.random(#items)] Вынесите из функции,то предмет будет одного вида - как в первом случае. Т.e. Вариантов куча. Но, если используете return - то после первого возвращения - функция больше не работает, все циклы обрубаются! (Как уже говорилось) Tris, Напиши какая функция тебе нужна, с какой функциональностью ??? Используй, плз, форматирование кода отступами и тэги спойлера для 'портянок. И не стОит дублировать уже сказанное. --/Artos' Изменено 16 Декабря 2011 пользователем Artos Что-то кончается, что-то начинается... Ссылка на комментарий
Лёха_тц 3 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 (изменено) кто скажет мне как можно заспавнить бтр и вертолет принадлежащий определенной группировке а то все никак не могу найти как это сделать. Пиши грамотнее, используя знаки препинания и заглавные буквы. Безграмотные вопросы будут удаляться, а их авторы - наказываться (читаем правила форума!). --/Artos Изменено 16 Декабря 2011 пользователем Artos Ссылка на комментарий
losiara 13 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 (изменено) Лёха_тц А что разве БТР и вертолеты кроме военных еще кому - нибудь принадлежат??? И то военным сказать УСЛОВНО, по сюжету. А заспавнить их несложно, через скрипт или all.spawn создавая соот секцию. Пример из оригинала с логикой, у тебя она конечно должна быть своя... [7095] ; cse_abstract properties section_name = helicopter name = aes_helicopter position = 902.859313964844,-3.61789155006409,-757.310485839844 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 2273 distance = 0 level_vertex_id = 405033 object_flags = 0xffffffb2 custom_data = <<END [logic] active = heli_move1 on_hit = hit [heli_move1] path_move = aes_heli_attack_desant_walk_begin2 on_info = {+aes_desant_go} heli_move2 engine_sound = false combat_safe_altitude = -100 [heli_move2] path_move = aes_heli_attack_desant_walk2 path_look = aes_heli_attack_desant_look2 invulnerable = true immortal = true on_signal = final | %+aes_desant_wave2% heli_move3 combat_ignore = true mute = true combat_safe_altitude = -100 [heli_move3] path_move = aes_heli_attack_desant_walk2_2 path_look = aes_heli_attack_desant_look2_2 on_actor_in_zone = aes_actor_heli | %=heli_set_enemy_actor% mute = true combat_safe_altitude = -100 on_info = {=heli_health_le(0.3)} heli_move@death [heli_move@death] path_move = heli_death_way invulnerable = true on_signal = arrived | heli_move@silent combat_ignore = true [heli_move@silent] path_move = heli_death_way invulnerable = true engine_sound = false combat_ignore = true [hit] on_info = {+aes_desant_wave2} %+aes_choper_crush_sound =heli_start_flame% END ; cse_visual properties visual_name = physics\vehicles\mi24\veh_mi24_u_01 ; cse_motion properties ; cse_ph_skeleton properties skeleton_name = idle ; cse_alife_helicopter properties cse_alife_helicopter__unk1_sz = idle engine_sound = alexmx\helicopter Изменено 17 Декабря 2011 пользователем ColR_iT Не нужно полностью цитировать предыдущий пост! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Artos 99 Опубликовано 16 Декабря 2011 Поделиться Опубликовано 16 Декабря 2011 (изменено) losiara, вообще-то техника никому не принадлежит и сама не имеет 'группировок'. То, что БТРы и вертолеты НЕ обстреливают вояк (как и остальных), а только ГГ (актора) - так это в их логике и схемах заложено. Внеси вояк в качестве целей - обстреляют и уничтожат и их. Т.о. нет у техники принадлежности к группировкам, можно логикой или скриптами сделать тех или иных врагами или (не)друзьями. Изменено 16 Декабря 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Лёха_тц 3 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 короче как я понял что через логику но насколько я помню там можно выставлять в виде целей сталкеров,монстров,гг и сразу всех вместе взятых а как мне сделать например: чтобы он не атаковал вольных и долг а всех остальных валил? я вот с этим не понял а как спавнить обычный бтр и верт я знаю просто видел в паре модов фишку с вертами и бтрмами от других группивок вот и задумался над этой темой и решил спросить может кто что подскажет. Строгое предупреждение от модератора Cyclone Не стоит игнорировать предупреждения куратора. Нарушение п. 2.5. Сутки Р/О. Ссылка на комментарий
strelok200 0 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 Я удалил созданные в алл.спавне секции, вылет не прекратился. В логе ничего не написано Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Kondr48 314 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 Создал снайпера по тутору пока к нему не подходит ГГ, он нормально сканирует винтовкой местность и все такое, а когда ГГ с ним поговорил или подошел то снайпер встаёт и больше не садится.Как это исправить ;SNIPER ADDON ;Меченый(Стрелок) [logic] active = remark@search [remark@fire] combat_ignore_cond = {!is_sniper_enemy} radius = 0 anim = hide on_info = {=health_le(0.5)} remark@search wounded = wounded@work sniper = true [remark@search] combat_ignore_cond = true combat_ignore_keep_when_attacked = false anim = hide target = actor on_info = {=see_enemy} remark@fire wounded = wounded@work [smart_terrains] none = true [wounded@work] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false Ссылка на комментарий
losiara 13 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 (изменено) Вампир35 А зачем строить логику снайпера на Ремарке??? из тутора: Схема sniper Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек. NB! Ставить снайперу только 2 точки look В кастом дате кемпера прописать: sniper = true Пример: [smart_terrains] none = true ;нужно для того что бы НПС не брался гулагом!!! [logic] active = camper [camper] path_walk = patrol_walk path_look = patrol_look sniper = true radius = 50 ;def_state_campering = assault Примерно так... Изменено 17 Декабря 2011 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Tris 9 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 Видимо выше в скрипте есть таблица items Совершенно верно, вверху таблица items просто я не стал её писать, так как ошибки в ней нет, ошибка в цикле. Vano_Santuri Да мне нужна была функция рандомного спавна 15 предметов, то есть чтобы из таблицы рандомно ГГ спавнились 15 разных предметов. Спасибо за помощь! Добавлено через 45 мин.: Vano_Santuri Кстати заметил ошибку во 2 версии представленного тобой скрипта. Там нужно сделать так: function spawn_item(SpItem, npc) А если без SpItem тогда вылет. • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
Vano_Santuri 33 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 (изменено) Tris, Да ладно, ничего там не нужно... local items = { "booster", "bread", "kolbasa", "conserva", "vodka", "energy_drink", "bandage", "antirad" } function spawn_item(npc) for i=1, 15 do if npc==nil then npc=db.actor end local SpItem = items[math.random(#items)] alife():create(SpItem, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id()) end end У меня же переменная SpItem - берется из таблички рандомно. Её в функцию передавать не нужно, она уже есть... Изменено 17 Декабря 2011 пользователем Vano_Santuri Что-то кончается, что-то начинается... Ссылка на комментарий
Капрал Хикс 517 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 Столкнулся с такой задачей: нужно чтобы НПС при приближении главного героя приветствовал его фразой из списка, а при на прощание говорил ещё одну фразу из списка. С первым более-менее ясно, но при вот такой логике: [logic] active = walker@mar_csky_tech [walker@mar_csky_tech] path_walk = mar_csky_base_tech_walk path_look = mar_csky_base_tech_look meet = meet [meet] use = true use_wpn = true meet_talk_enabled = true victim = 5|actor victim_wpn = 5|actor meet_state = 5|ward@marsh_novikov_hello meet_state_wpn = 5|ward@marsh_novikov_hello END - НПС приветствует главного героя редко. Как сделать так, чтобы приветствие звучало каждый раз? И как сделать звук прощания? Копался в туторах настройки логики, но не нашёл там по этому вопросу путного. P.S. Соотв. изменения в sound_scheme и script_sound.ltx внесены. Ссылка на комментарий
Старлей 88 Опубликовано 17 Декабря 2011 Поделиться Опубликовано 17 Декабря 2011 В своем моде сумашедшему я сделал такую логику: ;marsh crazy sniper [logic] active = {-mar_want_to_talk_sniper} camper@sniper, {+mar_want_to_talk_sniper} remark@sniper relation = enemy sympathy = 0 on_death = death [death] on_info = %+mar_sniper_dead% [camper@sniper] path_walk = mar_crazy_1_walk path_look = mar_crazy_1_look out_restr = mar_crazy_restrictor def_state_moving = sneak_run def_state_campering = hide_na def_state_campering_fire = hide_sniper_fire sniper = true on_info = {+mar_sniper_must_go_away} %=destroy_object% [remark@sniper] anim = guard target = actor meet = meet combat_ignore_cond = true on_info = {+mar_enemy_sniper_talke_bad} camper@sniper on_info2 = {+mar_sniper_must_go_away} %=destroy_object% [meet] НАС ИТЕРЕСУЕТ ЭТО: meet_state = 3|ward@nil meet_state_wpn = 6|backoff@threat_weap victim = 3|actor victim_wpn = 6|actor use = true use_wpn = false sound_start = mar_crazy_sniper_meet -------------звук привет sound_stop = mar_crazy_sniper_meet_bye -------звук пока trade_enable = false quest_npc = true ----------ставим это обязательно!иначе будут дефолтные звуки Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
iDreD 5 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 Есть конструкция вида: function repair_precond_s2() local item_in_slot_2 = db.actor:item_in_slot(2) local item = "" if item_in_slot_2 then item = item_in_slot_2:section() else item = "no_item" end -- Проверка того, что оружие является уникальным (второй слот): if string.find(item, "wpn_ak74_m1") or string.find(item, "wpn_abakan_m1") or string.find(item, "wpn_ak74u_m1") or string.find(item, "wpn_mp5_m1") or string.find(item, "wpn_groza_m1") or string.find(item, "wpn_spas12_m1") or string.find(item, "wpn_winchester_m1") or string.find(item, "wpn_l85_m1") or string.find(item, "wpn_lr300_m1") or string.find(item, "wpn_svd_m1") or string.find(item, "wpn_sig_m1") or string.find(item, "wpn_val_m1") or string.find(item, "wpn_mp5_m2") or string.find(item, "wpn_abakan_m2") or string.find(item, "wpn_l85_m2") or string.find(item, "wpn_sig_m2") or string.find(item, "wpn_rg6_m1") or string.find(item, "hunters_toz") or string.find(item, "pri_lom_ak74") or string.find(item, "wpn_vintorez_coll") then if item_in_slot_2 and 1 > item_in_slot_2:condition() + 0.01 then return true else return false end else return false end end Как мне её подогнать под использование таблицы, вместо постоянного "or"? Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Vano_Santuri 33 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 Можно так ? Tbl = { wpn_ak74_m1 = true, wpn_abakan_m1 = true, wpn_ak74u_m1 = true } --пердаем объект function ValItem(obj) local item = obj:section() local TblItem = Tbl[item] return TblItem end Только вопрос, у тебя будут только это секции,или же секции которые будут иметь в составе приведенные? Мой пример должен работать только для этих секций. Вопрос к тому,зачем использовать string.find . Да, а у апгрейженных стволов секции меняются? Что-то кончается, что-то начинается... Ссылка на комментарий
iDreD 5 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 Нет, секции будут те же, только набор секций будет разный. Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
Vano_Santuri 33 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 (изменено) iDreD, Ну тогда так и делай, забивай таблицу по приведенному примеру. Если секция будет в таблице - вернет значение (true) если нет, то ничего вернет или nil , я если честно даже не знаю... Gun12, так не интересно, уже готовый код дал, а если самому подумать... Изменено 18 Декабря 2011 пользователем Vano_Santuri Что-то кончается, что-то начинается... Ссылка на комментарий
Nazgool 250 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 (изменено) iDreD local t = { wpn_ak74_m1 = true, wpn_abakan_m1 = true, wpn_ak74u_m1 = true, wpn_mp5_m1 = true, wpn_groza_m1 = true, wpn_spas12_m1 = true, wpn_winchester_m1 = true, wpn_l85_m1 = true, wpn_lr300_m1 = true, wpn_svd_m1 = true, wpn_sig_m1 = true, wpn_val_m1 = true, wpn_mp5_m2 = true, wpn_abakan_m2 = true, wpn_l85_m2 = true, wpn_sig_m2 = true, wpn_rg6_m1 = true, hunters_toz = true, pri_lom_ak74 = true, wpn_vintorez_coll = true } function repair_precond_s2() local item_in_slot_2 = db.actor:item_in_slot(2) if item_in_slot_2 then item = item_in_slot_2:section() return t[item] and 1 > item_in_slot_2:condition() + 0.01 end return end Oсмелюсь все же предложить для подобных проверок (прекондишенов) организовать возврат только булевых значений (true|false), что порой критично, т.е. типа: ... function repair_precond_s2() local item_in_slot_2 = db.actor:item_in_slot(2) if item_in_slot_2 then return ( t[item_in_slot_2:section()] == true and 1 > item_in_slot_2:condition() + 0.01 ) end return false end --/Artos Изменено 18 Декабря 2011 пользователем Artos Ссылка на комментарий
temakonkin 0 Опубликовано 19 Декабря 2011 Поделиться Опубликовано 19 Декабря 2011 возможно ли организовать запись строки в переменную из окна редактирования текста в игре....прошу привести примеры!))) второй вопрос....возможноли в игре отображать интернет страницы? На пример в ПДА... Всем кто ответит заранее спасибо! Сталкер в душе - сталкер по жизни! Ссылка на комментарий
Artos 99 Опубликовано 19 Декабря 2011 Поделиться Опубликовано 19 Декабря 2011 temakonkin, странный вопрос ... А для чего окно редактирования, если не для того чтобы то, что в нем пишется куда-то передавалось/запоминалось! Естественно это делается через переменные, которым и присваивается значение (строка) из окна редактирования. В скриптах обычно это выглядит типа: local variable = wnd:GetText() , где wnd - объект класса CUIEditBox или полученный методом InitEditBox из класса CUIWindow. Практических примеров немало в модах, например в кодах GPS-меток или записных книжках. Вывести в игре что-то подобное интернет страницам можно только или создав статичные скриншоты или в виде записанного видео, которые и отображать. Теоретические заморочки с какими-либо 'внешними примочками/надстройками над игрой и пр.извращения' не в счет, тем более, судя по первому вопросу - это тебе явно не по силам ... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
losiara 13 Опубликовано 19 Декабря 2011 Поделиться Опубликовано 19 Декабря 2011 (изменено) Добрый день! Прошу помощи относительно работы скрипта. function prov_npc() if db.actor then local armor = db.actor:item_in_slot(6) if (armor ~= nil and armor:section()== "bandit_outfit") then db.actor:set_character_community("bandit", 0, 0) elseif (armor ~= nil and armor:section()== "specops_outfit") then db.actor:set_character_community("military", 0, 0) elseif (armor ~= nil and armor:section()== "dolg_outfit") then db.actor:set_character_community("dolg", 0, 0) else db.actor:set_character_community("actor", 0, 0) end end end function prov_npc() local actor = db.actor local armor = db.actor:item_in_slot(6) if actor:alive() == true and armor and (armor:section() == "bandit_outfit" or armor:section() == "bandit_master_outfit" or armor:section() == "bandit_veteran_outfit" or armor:section() == "bandit_antigas_outfit_m1") then db.actor:set_character_community("bandit", 0, 0) elseif (armor ~= nil and armor:section() == "specops_outfit") then db.actor:set_character_community("military", 0, 0) elseif (armor ~= nil and armor:section() == "dolg_outfit") then db.actor:set_character_community("dolg", 0, 0) else db.actor:set_character_community("actor", 0, 0) end end Предпологается изменение отношения НПС к ГГ при переодевании в соот. броню. Однако, скрипт не работает, ни в первом ни во втором варианте, вопрос почему??? Изменено 19 Декабря 2011 пользователем ColR_iT Не забываем про теги! Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти