Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

@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
Изменено пользователем Murarius

Поделиться этим сообщением


Ссылка на сообщение
хотя бы разобрался из-за чего у меня такая ерунда происходила

Попробуйте инициировать вашу "глобальну переменню" при её объявлении сразу радомнным значением, а не 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

 

 

 

 

Делай рандомизацию непосредственно перед проверкой.

 

Мысль безусловно верная, только фразу я бы сформулировал так: : "Делай рандомизацию непосредственно перед её использованием".

Проверять можно когда угодно и где угодно, а вот её значение важно только в момент использования этой переменной

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...