#1 10-09-2013 22:19

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Switch()

Работающий switch. Вот так вот.

{$CLEO}
{$I switch}

//    0@ - Поточный ID погоды
//    1@ - Флаг текст-бокса. 1 - нужно показать текст бокс, 0 - не нужно

while true
    wait 0
    if
        0AB1: call_scm_func @KeyJustPressed 1 _vkey 219
    then
        0@--
        0AB1: call_scm_func @Limit 3 0@ _min 0 _max 22 _ret 0@
        1@ = 1
    else
        if
            0AB1: call_scm_func @KeyJustPressed 1 _vkey 221
        then
            0@++
            0AB1: call_scm_func @Limit 3 0@ _min 0 _max 22 _ret 0@
            1@ = 1
        end
    end
    if
        1@ == 1
    then
        1@ = 0
        set_weather 0@ 
        01B7: release_weather

        // Конструкция switch используется позволяет выбрать действие в зависимости от значения переменной.
        // 
        //     {$I switch(<ПЕРЕМЕННАЯ>)} // Начало конструкции
        //     
        //         {$I case <ЗНАЧЕНИЕ1>}
        //             // Код, который выполнится, если ПЕРЕМЕННАЯ равна ЗНАЧЕНИЮ1.
        //             break - выход из конструкции.
        //         
        //         {$I case <ЗНАЧЕНИЕ2>}
        //             // Код, который выполнится, если ПЕРЕМЕННАЯ равна ЗНАЧЕНИЮ2.
        //             break - выход из конструкции.
        //              
        //         ...
        //         
        //         // Также в конструкции можно использовать специальный случай, именованный как default.
        //         {$I default}
        //             // Код, который выполнится, если переменная не равна ни одному из ЗНАЧЕНИЙ.
        //     
        //     {$I switch_end} // Завершение конструкции

        {$I switch(0@)}
            {$I case 0} 
                0ACA: show_text_box "0 - Los Santos - Extra Sunny"
                break 
            {$I case 1} 
                0ACA: show_text_box "1 - Los Santos - Sunny"
                break 
            {$I case 2} 
                0ACA: show_text_box "2 - Los Santos - Extra Sunny Smog"
                break 
            {$I case 3} 
                0ACA: show_text_box "3 - Los Santos - Sunny Smog"
                break 
            {$I case 4} 
                0ACA: show_text_box "4 - Los Santos - Cloudy"
                break 
            {$I case 5} 
                0ACA: show_text_box "5 - San Fierro - Sunny"
                break 
            {$I case 6} 
                0ACA: show_text_box "6 - San Fierro - Extra Sunny"
                break 
            {$I case 7} 
                0ACA: show_text_box "7 - San Fierro - Cloudy"
                break 
            {$I case 8} 
                0ACA: show_text_box "8 - San Fierro - Rainy"
                break 
            {$I case 9} 
                0ACA: show_text_box "9 - San Fierro - Foggy"
                break 
            {$I case 10} 
                0ACA: show_text_box "10 - Las Venturas - Sunny"
                break 
            {$I case 11} 
                0ACA: show_text_box "11 - Las Venturas - Extra Sunny"
                break 
            {$I case 12} 
                0ACA: show_text_box "12 - Las Venturas - Cloudy"
                break 
            {$I case 13} 
                0ACA: show_text_box "13 - Countryside - Extra Sunny"
                break 
            {$I case 14} 
                0ACA: show_text_box "14 - Countryside - Sunny"
                break 
            {$I case 15} 
                0ACA: show_text_box "15 - Countryside - Cloudy"
                break 
            {$I case 16} 
                0ACA: show_text_box "16 - Countryside - Rainy"
                break 
            {$I case 17} 
                0ACA: show_text_box "17 - Desert - Extra Sunny"
                break 
            {$I case 18} 
                0ACA: show_text_box "18 - Desert - Sunny"
                break 
            {$I case 19} 
                0ACA: show_text_box "19 - Desert - Sandstorm"
                break 
            {$I case 20} 
                0ACA: show_text_box "20 - Underwater"
                break 
            {$I case 21} 
                0ACA: show_text_box "21 - Extracolours 1"
                break
            {$I case 22} 
                0ACA: show_text_box "22 - Extracolours 2"
        {$I switch_end}
    end
end

// Функция сверяет, нажата ли клавиша, и в случае нажатия - ждёт, пока клавиша не будет отпущена.
:KeyJustPressed

//    0@ - ID клавиши

if
    0AB0: key_pressed 0@
then
    while 0AB0: key_pressed 0@
        wait 0
    end
    0485: return_true
    0AB2: ret 0
end
059A: return_false
0AB2: ret 0

// Функция ограничивает число в указанных рамках.
:Limit

//    0@ - число
//    1@ - нижняя граница ограничения
//    2@ - верхняя граница ограничения

//    Возвращаемое значение: число в указанных рамках

if
    802D: not 0@ >= 1@
then
    0085: 0@ = 2@
else
    if
        001D: 0@ > 2@
    then
        0085: 0@ = 1@
    end
end
0AB2: ret 1 0@

Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#2 11-09-2013 07:48

Seemann
Registered: 07-08-2006
Posts: 2,099

Re: Switch()

чего только не придумают))
вариант интересный, но сильно ограниченный. нельзя использовать глобальные переменные или большие числа. но для большинства случаев подойдет. молодец)

Offline

Board footer

Powered by FluxBB