×
Меню
Индекс

MSFD Присваивание случайных значений переменным

[no fix] Random, value_enum
 
     Set my_variable to Random, 50
 
Введение в скрипт некоторой неопределенности — отличная возможность, и она может быть реализована функцией Random.
Random возвращает значения между 0 и установленным значением–1.
Так, в примере выше, my_variable примет значение между 0 и 49.
Заметьте, что глобальная переменная типа short Random100 принимает новые случайные значения между 0 и 100 в каждом кадре в игровом скрипте, так что вы можете использовать и ее.
 
Примечание: Для любого вызова Random с верхней границей больше 100, вариабельность возвращаемой величины становится все меньшей, вплоть до Random, 255, при котором получаются только 0 или 1, а любые попытки вызвать функцию при 256 приводят к вылету. (Морровинд и Трибунал).
 Это исправлено в Bloodmoon, так что там получается более ровное распределение вероятности и в интервалах, превышающих 100.
Но вылет при 256 и 512, и т.д., все еще происходит (Информация от Neko).
Также было обнаружено, что иногда верхняя граница функции Random устанавливается гораздо выше, чем заданное число.
Установка верхней границы в одно из следующих чисел приводит к странному результату – возвращаемое число находится около 1100: 65, 66, 68, 70, 71, 76, 77, 79, 82, 83, 84.
 

begin AAA0000_animItem
 
;рандомная анимация
;*****************************************************************
short RandomPF ; т.е. Random можно дополнять уникальными "значениями" Random50, Random100, RandomMy1, RandomPoRovNu и пр.
short Doonce
;**************************************
DontSaveObject
;**************************************
if ( menumode == 1 )
     return
endif
;**************************************
If ( doonce == 1 )     ;блокировка повтора просчета рандома. Т.е. состояние объекта сохранится и не будет пересчитано заново.
     return
endif
;**************************************
if ( RandomPF == 1 )
     PlayGroup IDLE, 1
     set Doonce to 1
     elseif ( RandomPF == 2 )
     PlayGroup IDLE2, 1
     set Doonce to 1
     elseif ( RandomPF == 3 )
     PlayGroup IDLE3, 1
     set Doonce to 1
     elseif ( RandomPF == 4 )
     PlayGroup IDLE4, 1
     set Doonce to 1
     elseif ( RandomPF == 5 )
     PlayGroup IDLE5, 1
     set Doonce to 1
     elseif ( RandomPF == 6 )
     PlayGroup IDLE6, 1
     set Doonce to 1
     elseif ( RandomPF == 7 )
     PlayGroup IDLE7, 1
     set Doonce to 1
     elseif ( RandomPF >= 8 )
     PlayGroup IDLE8, 1
     set Doonce to 1
     return
endif    
 
if ( GetDistance Player <= 3072 )
     set RandomPF to Random 10
     return
endif
;*****************************************************************
 
end