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

Основы скриптинга

Moderator: SJplayer

Avatar
Topic author
Prezident M
Ефрейтор
Ефрейтор
Posts: 28
With us: 7 years 2 months

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

Post #1by Prezident » 17 Jan 2014, 21:00

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

Code: Select all

random(number); 


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

Code: Select all

random(10); 


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

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

Code: Select all

random(number) + 1


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

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

Code: Select all

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


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

Code: Select all

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:

! ! !


Avatar
Дим M
Администратор
Администратор
Posts: 1319
With us: 7 years 5 months

Post #2by Дим » 17 Jan 2014, 22:29

Нормальный урок +
i love you mxIni Mysql

Avatar
SJplayer M
Модератор
Модератор
Posts: 191
With us: 7 years 4 months

Post #3by SJplayer » 18 Jan 2014, 10:26

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

Avatar
Layk M
Прапорщик
Прапорщик
Posts: 173
With us: 7 years 3 months

Post #4by Layk » 18 Jan 2014, 20:31

Для новичков в самый раз
Image

Avatar
LILU M
Подполковник
Подполковник
Posts: 466
With us: 7 years 5 months

Post #5by LILU » 18 Jan 2014, 21:14

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

Avatar
Mario_Ferro
Posts: 2
With us: 5 years 10 months

Post #6by Mario_Ferro » 5 Nov 2014, 20:49

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

Avatar
Mario_Ferro
Posts: 2
With us: 5 years 10 months

Post #7by Mario_Ferro » 6 Nov 2014, 8:19

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

Code: Select all

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;

Avatar
Topic author
Prezident M
Ефрейтор
Ефрейтор
Posts: 28
With us: 7 years 2 months

Post #8by Prezident » 6 Nov 2014, 11:26

Mario_Ferro wrote:Подредактировал команду lotto

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


  • Similar Topics
    Replies
    Views
    Last post

Return to “Основы”

Who is online

Users browsing this forum: 1 guest