03 февраля 2016

Хитрость с циклом

SB не позволяет задать в цикле более одного условия. Но...
есть одна хитрость, позволяющая обойти это ограничение и задать циклу больше одного условия для его работы. Это возможно благодаря условному gosub, который нужно использовать вместо условия цикла.


/* Made by Vital */
//$PLAYER_ACTOR $PLAYER_GROUP $ONMISSION
{$CLEO}
0000:
while true
wait 0
    if
    player.Defined(0)
    then
        if and
        not actor.Driving($PLAYER_ACTOR)
        0ADC:   test_cheat "TEST"
        then       
        0ADF: add_dynamic_GXT_entry "LOOP" text "Loop Counter: ~y~~1~"       
        0@ = 0         
            while gosub @Check //Main
            wait 0
            32@ = 0           
                while gosub @Check
                wait 0
                    if
                    32@ > 999
                    then
                    03E6: remove_text_box
                    0@ ++
                    player.Money(0) += 5
                    0513: show_text_box_1number 'LOOP' number 0@
                    break
                    end
                end           
            end //Main
        03E6: remove_text_box
        0AE0: remove_dynamic_GXT_entry "LOOP"
        end
    end
end

:Check //Is everything OK?
if or
0@ > 999
not player.Defined(0)
actor.Driving($PLAYER_ACTOR)
00E1:   player 0 pressed_key 11
then
018C: play_sound 1054 at 0.0 0.0 0.0 
059A:  return_false
else     
0485:  return_true
end
return

В этом скрипте игроку после введения чита "TEST" просто выдаются деньги - $5 каждую секунду. Чтобы выйти из цикла и прекратить выдачу денег, нужно нажать "Ответ Да" или сесть в транспорт. Также скрипт завершит цикл в случае смерти/ареста игрока.

Внутри самого условного gosub можно использовать множество проверок, таким образом, ограничения больше нет!

Комментариев нет: