Использование случайных числ в Pawn скриптинге

Описание: Основы скриптинга
Модератор: SJplayer

Prezident M
Автор темы, Ефрейтор
Ефрейтор
Аватара
Prezident M
Автор темы, Ефрейтор
Ефрейтор
Сообщения: 28
Зарегистрирован: 9 июля 2013
С нами: 10 лет 8 месяцев

#1 Prezident » 17 января 2014, 21:00

Этот код будет генерировать случайное число.

Код: Выделить всё

random(number); 


Однако в большинстве компьютерных языков, все числа начинаются с 0, так что если сделать так:

Код: Выделить всё

random(10); 


будет выбрано число из: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Если вы не хотите видеть 0 в результате, то должны использовать этот код:

Код: Выделить всё

random(number) + 1


Таким образом, если случайное число равно 0, то результатом будет 0 + 1= 1. Если случайное число равно 9, то в результате 9 + 1= 10.

Y_Less сделал код, который лучше делает случайное число:

Код: Выделить всё

stock randomEx(minmax)
{        
    new 
rand random(max-min)+min;    
    return 
rand;


Пример использования:

Код: Выделить всё

CMD:lotto(playeridparams[])
{
    new 
rand random(10) + 1
    new 
number// новая переменная "number", чтобы хранить данные 
   
    
if(sscanf(params,"i"number)) // sscanf.
    
{
         
SendClientMessage(playerid0xFF0000AA"/lotto [1-10]"); //если игрок набрали не цифровой номер
    
}
    else 
// если он не ошибся, то продолжаем
    
{
        if ( 
number 10 || number 1)  // если он набрал /lotto 11 или /lotto 0 или /lotto 1243
        
{
            
SendClientMessage(playerid0xFF0000AA"Выбери номер от 1-10"); // сообщение об ошибке.
        
}
        else 
// Если число его между 1 и 10, то продолжаем дальше
        
{
            if (
number == rand)  // Если он выиграл - случайное число совпадает с числом которое выбрал игрок
            
{
                
SendClientMessage(playerid0x33AA33AA"Вы выиграли!!");
                
GivePlayerMoney(playerid1000000); // даём мани
                
SetPlayerScore(playeridGetPlayerScore(playerid) + 1); //прибавим score.
            
}
            else
            {
                if( 
number != rand// Если число не совпало..
                
{
                    
SendClientMessage(playerid0xFF0000AA"Вы проиграли"); 
                }
            }
        }
    }
    return 
1;


По желанию можете изменить код как хотите. К примеру - при проигрыше отнять денег :cry:


Дим M
Администратор
Администратор
Аватара
Дим M
Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 17 января 2014, 22:29

Нормальный урок +
[center]i love you [s]mxIni[/s] Mysql[/center]

SJplayer M
Модератор
Модератор
Аватара
SJplayer M
Модератор
Модератор
Сообщения: 196
Зарегистрирован: 25 мая 2013
С нами: 10 лет 10 месяцев

#3 SJplayer » 18 января 2014, 10:26

Главное доходчиво

Layk M
Прапорщик
Прапорщик
Аватара
Layk M
Прапорщик
Прапорщик
Сообщения: 170
Зарегистрирован: 4 июня 2013
С нами: 10 лет 9 месяцев

#4 Layk » 18 января 2014, 20:31

Для новичков в самый раз
Изображение

LILU M
Подполковник
Подполковник
Аватара
LILU M
Подполковник
Подполковник
Сообщения: 468
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#5 LILU » 18 января 2014, 21:14

Раньше бы такой урок, а то всё самому приходилось додумывать, хотя это и не плохо

Mario_Ferro
Аватара
Mario_Ferro
Сообщения: 2
Зарегистрирован: 5 ноября 2014
С нами: 9 лет 4 месяца

#6 Mario_Ferro » 5 ноября 2014, 20:49

Лото взял для основы, спасибо!

Mario_Ferro
Аватара
Mario_Ferro
Сообщения: 2
Зарегистрирован: 5 ноября 2014
С нами: 9 лет 4 месяца

#7 Mario_Ferro » 6 ноября 2014, 8:19

Подредактировал команду lotto.

Код: Выделить всё

CMD:lotto(playeridparams[])
{
    new 
rand random(10) + 1;
    new 
number;

    if(
sscanf(params,"i"number))
    {
         
SendClientMessage(playerid0xFF0000AA"/lotto [1-10]");
         if(
PlayerInfo[playerid][pCash] < 2000) return SCM(playeridCOLOR_WHITE"У Вас недостаточно денег");
    }
    else
    {
        if ( 
number 10 || number 1)
        {
            
SendClientMessage(playerid0xFF0000AA"Выберите номер из списка [1-10]");
        }
        else
        {
            if (
number == rand)
            {
                
SendClientMessage(playerid0x33AA33AA"Вы выиграли 10.000$! Они были зачислены Вам на банковский счёт");
                
PlayerInfo[playerid][pBank] += 10000;
                
SetPlayerScore(playeridGetPlayerScore(playerid) + 1);
            }
            else
            {
                if( 
number != rand)
                {
                    
SendClientMessage(playerid0xFF0000AA"К сожалению, Вы проиграли.");
                    
SCM(playerid0xFF0000AA"За билет вы потратили 2.000$");
                    
TransferMoney(playerid,-1,2000);
                }
            }
        }
    }
    return 
true;

Prezident M
Автор темы, Ефрейтор
Ефрейтор
Аватара
Prezident M
Автор темы, Ефрейтор
Ефрейтор
Сообщения: 28
Зарегистрирован: 9 июля 2013
С нами: 10 лет 8 месяцев

#8 Prezident » 6 ноября 2014, 11:26

Mario_Ferro писал(а):Подредактировал команду lotto

Ну тогда добавь её в команды


Вернуться в «Основы скриптинга»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя