Рейтинг - 5.0 (1)

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

Если у вас есть опыт в программировании, то слово switch вам говорит о многом. Для тех скриптеров, которые и не видели среды программирования объясню что к чему. Оператор switch предназначен для организации выбора из множества различных вариантов. Сами варианты написаны в блоке case...break. Оператор принимает какое то значение, и если оно совпало со значением case, то выполняется соответственный участок кода. Для примера, вот вам фрагмент кода C++:
Code
int А;
scanf("%d", &А);

switch(А){
    case 1:{
        ...      
    break;      
    }

    case 2:{
        ...      
    break;      
    }

    default:{
        ...      
    break;      
    }
}
Суть проста. Считываем значение переменной А. Заносим её в оператор switch. Дальше идёт сравнение значений case, которые задаются изначально(обычно это целые числа) если переменная А равна значению case, в нашем случаи числа 1 и 2, то будет выполняться код в этом блоке. Допустим, пользователь ввёл число 1.  Далее оператор сравнивает это число со всеми case. Как видите, переменная А равна единице и один из case'ов тоже равен единице. Выполняются оба условия, и начинается выполнение блока case 1...break.

Закончили с программированием, перейдём скриптам. Для осуществления подобной операции используется опкод:
  • 0871: init_jump_table $CHECK total_jumps 4 default_jump 0 @J_E jumps 0 @J_0 1 @J_1 2 @J_2 3 @J_3 -1 @J_E -1 @J_E -1 @J_E
Как видите опкод с огромным числом параметров. Давайте разбирать, что к чему smile Здесь:
$CHECK - переменная, которая сравнивается с номером метки(должна содержать целое и начинаться с нуля!)
total_jumps 4 - количество рабочих прыжков, включая прыжок, если ни один из вариантов не подошел
default_jump 0 @J_E - прыжок на метку @J_E по умолчанию. Выполняется тогда, когда переменная $CHECK не соответствует номерам меток. Так же метка является выходом из таблицы переходом.
1 @J_1 - 1 это номер метки, @J_1 сама метка. Максимальное и минимальное количество меток - 7. Если номер поставить в -1, то проверка "$CHECK == номер метки?" выполнятся не будет, а саму метку пишут в качестве метки-выхода.


Давайте напишем пример, который, в зависимости от вы нажатой клавиши, меняет скин игрока:
Code
{$CLEO}
0000:

var
$CHECK: integer = 0
end

:JUMP
thread 'JUMP'
wait 0

if
0AB0:  key_pressed 49 // 1
then
$CHECK = 3
gosub @JUMP_A
end

if
0AB0:  key_pressed 50 // 2
then
$CHECK = 2
gosub @JUMP_A
end

if
0AB0:  key_pressed 51 // 3
then
$CHECK = 1
gosub @JUMP_A
end

if
0AB0:  key_pressed 52 // 4
then
$CHECK = 0
gosub @JUMP_A
end

jump @JUMP

{* НАША ТАБЛИЦА ПЕРЕХОДОВ *}

:JUMP_A
wait 0
0871: init_jump_table $CHECK total_jumps 4 default_jump 0 @JUMP_EXIT jumps 0 @JUMP_0 1 @JUMP_1 2 @JUMP_2 3 @JUMP_3 -1 @JUMP_EXIT -1 @JUMP_EXIT -1 @JUMP_EXIT

:JUMP_0 // номер метки с таблицы переходов = 0
wait 0
model.Load(#WMYST)
038B: load_requested_models

:JUMP_0_1
wait 0
if
model.Available(#WMYST)
jf @JUMP_0_1
09C7: change_player $PLAYER_CHAR model_to #WMYST
model.Destroy(#WMYST)
jump @JUMP_EXIT

:JUMP_1 // номер метки с таблицы переходов = 1
wait 0
model.Load(#BMYDRUG)
038B: load_requested_models

:JUMP_1_1
wait 0
if
model.Available(#BMYDRUG)
jf @JUMP_1_1
09C7: change_player $PLAYER_CHAR model_to #BMYDRUG
model.Destroy(#BMYDRUG)
jump @JUMP_EXIT

:JUMP_2 // номер метки с таблицы переходов = 2
wait 0
model.Load(#WMYCLOT)
038B: load_requested_models

:JUMP_2_1
wait 0
if
model.Available(#WMYCLOT)
jf @JUMP_2_1
09C7: change_player $PLAYER_CHAR model_to #WMYCLOT
model.Destroy(#BMYDRUG)
jump @JUMP_EXIT

:JUMP_3 // номер метки с таблицы переходов = 3
wait 0
09C7: change_player $PLAYER_CHAR model_to #NULL
jump @JUMP_EXIT

:JUMP_EXIT
return
Результат:


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

Теперь собственно задание для самоконтроля - организовать выбор стилей борьбы для CJ. Пример у вас есть, так что особой сложности в написании не должно возникнуть. Если всё есть вопросы по этой теме - обращайтесь на форум :)
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Как Вы узнали о сайте?
Всего ответов: 3
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Сегодня нас посетили:
wmysterio, DK22Pac, Dyabda
Реклама