[#] Рандом в СТИД 2
kolobod(syscall,30) — All
2019-09-25 11:14:53


Всем огромный привет! Сразу приношу извинения, если вдруг пишу не в тот раздел. Давно не заходил, подзабыл что-как.
Вдруг кто еще помнит свои наработки по стид2?
Запнулся на таком моменте. Надо, что бы при срабатывании условия - в ответ РАНДОМНО включалось ОДНО из нескольких возможных событий.
Если конкретно: у меня игрок в какой-то момент делает персонажем действие, открывает найденным ключом дверь в бункер.
act = function(s)
      if got_bunker_key then 
                        bunker_door_open;        --дверь открывается, если есть нужный ключ
		        random_action_on = true; --включается "разрешение" для запуска 1 из 3 рандомных событий
                        p [[Из темного коридора раздается рычание. В воздухе витает какой-то мерзкий запах.]]; 						
end;
И есть три условия для запуска трех разных событий, одно из которых должно включится СЛУЧАЙНЫМ ОБРАЗОМ, после того как сработает random_action_on.
Это:
dead_attack --атака монстрами игрока
dead_blind --монстры не замечают, как игрок проник в бункер
poison_on --игрок получает отравление
Как сделать рандомный запуск одного из трех событий?

[#] Re: Рандом в СТИД 2
Peter(syscall,1) — kolobod
2019-09-25 14:28:03


Привет!
Не совсем понял, что тут имеется в виду:

act = function(s)
      if got_bunker_key then 
		        random_action_on = true; -- кто анализирует эту переменную?
      end;

То-есть, не понятно, какой именно код запускает событие? life метод? Или непосредственно в act?
Так-то, сам random делается просто:

local n = rnd(3)

if n == 1 then
-- 1
elseif n == 2 then
-- 2
else
-- 3
end

Ну или в твоем примере можно сразу:

random_action_on = rnd(3) -- от 1 до 3

[#] Re: Рандом в СТИД 2
kolobod(syscall,30) — Peter
2019-09-25 19:23:10


Всё запускается из act.
То есть мне надо сделать так, верно понял?
local n = rnd(3) --Этот блок прописывается просто в любом месте кода, или его надо вставлять куда-то конкретно? 
if n == 1 then dead_attack = true --срабатывает условие для запуска монстров
elseif n == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
elseif n == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
else
end
act = function(s)
if got_bunker_key then
bunker_door_open = true; --дверь открывается, если есть нужный ключ
random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий
end;



[#] Re: Рандом в СТИД 2
Peter(syscall,1) — kolobod
2019-09-25 20:32:27


Если я верно понял вопрос, то что то вроде этого?
Я просто не понял что такое "событие" и зачем столько переменных.
local -- это для временной переменной
Но у тебя random_action_on видимо глобальная переменная.
А так можно было сделать локальную, она бы существовала только во время работы act

act = function(s)
    if got_bunker_key then
        bunker_door_open = true; --дверь открывается, если есть нужный ключ
        random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий

        if random_action_on == 1 then dead_attack = true --срабатывает условие для запуска монстров
        elseif random_action_on == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
        elseif random_action_on == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
        end
    end;
end

[#] Re: Рандом в СТИД 2
kolobod(syscall,30) — Peter
2019-09-26 09:12:27


Супер! Похоже это вот именно то, что надо было!! Сегодня после работы сяду пробовать в деле)
Большущее спасибо.