Serge! 127 Опубликовано 17 Декабря 2015 (изменено) @Charsi, для полного соответствия ТЗ я бы добавил ещё одну строчку. Я не знаю зачем @Dennis_Chikin нужны были запятые для разделения захватов, но раз обозначил такое условие, то пусть он их и получит. local str = "+test( 34: 55 56 : 57:66 ) -test1 +test2(test0)" for sgn, fn, args in str:gmatch("([%+%-])([%w_]+)%s*%(?([^%)%+%-]*)") do sgn = fn ~= '' and sgn..',' or sgn; fn = args ~= '' and fn..',' or fn print(sgn, fn, args) end Изменено 26 Декабря 2015 пользователем Murarius Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 24 Июля 2016 (изменено) хотя бы разобрался из-за чего у меня такая ерунда происходила Попробуйте инициировать вашу "глобальну переменню" при её объявлении сразу радомнным значением, а не nil. А в фунции souls_died_armors_give_quest() рандомизацию уберите вообще. Эту переменную в Вашем случае можно вовсе сделать локальной для скрипта (не функции!), чтобы не засорять глобальную таблицу. Конечно это справедливо, если код, который Вы привели, действительно реальный, а не какой-то тестовый пример. И будет Вам счастье. --глобальная переменная для того чтобы фильтры заспавнились только в одном вертолете local FILTERS_PLACE=math.random(3) function souls_died_armors_give_quest() task_manager.get_task_manager():give_task("souls_died_armors_task") task_manager.get_task_manager():give_task("souls_died_armors_task_jup") task_manager.get_task_manager():give_task("souls_died_armors_task_zat") --task_manager.get_task_manager():give_task("souls_died_armors_task_zat2") --так как нельзя залезть на плато task_manager.get_task_manager():give_task("souls_died_armors_task_zat3") --[[ math.randomseed(os.time()) FILTERS_PLACE=math.random(3) --]] printf("FILTERS_PLACE= %s",FILTERS_PLACE) --news_manager.send_tip(db.actor, FILTERS_PLACE, nil, "seeker", nil, nil) end function searchingHeliJupiter(actor, npc) if xr_conditions.actor_in_zone(actor, npc, {"jup_b8_heli_4"}) then printf("FILTERS_PLACE= %s", FILTERS_PLACE) if FILTERS_PLACE==1 then db.actor:give_info_portion("soulsDiedArmorsHeliJupiterDone") db.actor:give_info_portion("soulsDiedArmorsHeliFounded") alife():create("dust_filter", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create("dust_filter", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) else db.actor:give_info_portion("soulsDiedArmorsHeliJupiterDone") news_manager.send_tip(db.actor, "no_filters2", nil, "seeker", nil, nil) end end end Делай рандомизацию непосредственно перед проверкой. Мысль безусловно верная, только фразу я бы сформулировал так: : "Делай рандомизацию непосредственно перед её использованием". Проверять можно когда угодно и где угодно, а вот её значение важно только в момент использования этой переменной Изменено 24 Июля 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение