Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±

    Не могу разобраться как зарандомить. Прошу помочь

    Допустим есть 2 человека , они выбирает в диалоге слот , в диалоге 2 слота "1 слот " и "2 слот", когда 2 игрока забили слот, врубается таймер и таймер должен вызвать вот эту функцию

    PHP код:
    public game()
    {
        foreach(
    Playeri
        {
            if(
    == kosti{i})
            {
                continue;
            }
            else if(
    kosti{i} > 0
            {
                new 
    string[(52+8)+1];
                new 
    dice1 random(3)+1;
                if(
    kosti{i} == dice1)
                {
                    
    format(stringsizeof(string), "Поздравляем ваша ставка выиграла. Ваш приз {4AD64C}%d$"100*2);  
                    
    SendClientMessage(i, -1string);  
                    
    ac_GivePlayerMoney(i100*2);   
                    
    kosti{i} = 0;
                }
            }
            else
            { 
                
    SendClientMessage(i, -1"Ваша ставка проиграла.");  
                
    kosti{i} = 0
            }
        }
        return 
    1;

    Но я думаю это как-то не то, потому что рандом у обоих игрока сработает по разному, они смогут к примеру оба победить, так и проиграть оба. Надо как-то придумать алгоритм, есть переменная kosti для индивидуального игрока. Значит если random приравнит kosti{i} == randim(3)+1 | <-- тут как бы должно получиться 1 или 2, и те игроки заняли 1 и 2 слот. Значит если получился одно из двух один должен проиграть. Ничьи никак не может быть. Помогите как это составить. Очнеь нужна ваша помощь. !

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Сделать рандом через do/while? ("Делай, пока")

    Ну и ещё разброс слишком маленький: либо 1, либо 2.
    Последний раз редактировалось $continue$; 25.07.2017 в 01:24.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. #3
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Было нечем заняться написал код на быструю руку. Не проверял на работоспособность. Думаю ты поймешь что к чему и установишь.

     цвета
    PHP код:
    #define COLOR_TITLE "{3498db}"
    #define COLOR_TEXT "{ecf0f1}"
    #define COLOR_NOTE "{e67e22}"
    #define COLOR_ERROR "{c0392b}"
    #define COLOR_SUCCESS "{2ecc71}"

    #define HEX_COLOR_NOTE 0xe67e22FF
    #define HEX_COLOR_ERROR 0xc0392bFF
    #define HEX_COLOR_SUCCESS 0x2ecc71FF 

     энуменатор
    PHP код:
    enum PLAYER_DICE_GAME_STATUS_INFO
    {
        
    PLAYER_DICE_GAME_STATUS_NONE,
        
    PLAYER_DICE_GAME_STATUS_SEARCH,
        
    PLAYER_DICE_GAME_STATUS_PLAY
    }; 

     константы
    PHP код:
    const DICE_GAME_RESULT_INTERVAL 10000//Время ожидание ответа игры
    const DIALOG_DICE_GAME_SLOT 1234//id свободного диалога
    const DIALOG_DICE_GAME_OFFER DIALOG_DICE_GAME_SLOT 1

     переменные
    PHP код:
    new
        
    player_dice_slot[MAX_PLAYERS char],
        
    PLAYER_DICE_GAME_STATUS_INFO:player_dice_game_status[MAX_PLAYERS char]; 

     команда для входа в очередь
    PHP код:
    CMD:playdice(playerid)
    {
        if(
    PLAYER_DICE_GAME_STATUS_NONE != player_dice_game_status{playerid})
        {
            return 
    SendClientMessage(playeridHEX_COLOR_ERROR
                !
    "Нельзя! Вы уже ищите или играете в кости!");
        }

        
    SendClientMessage(playeridHEX_COLOR_NOTE,
            !
    "Поиск соперника, ожидайте...");

        
    player_dice_game_status{playerid} = PLAYER_DICE_GAME_STATUS_SEARCH;

        
    SearchDiceGameOpponent(playerid);

        return 
    1;


     функция поиска соперника
    PHP код:
    stock SearchDiceGameOpponent(playerid)
    {
        foreach(
    Playeri)
        {
            if(
    != playerid &&
                
    PLAYER_DICE_GAME_STATUS_SEARCH == player_dice_game_status{i})
            {
                
    player_dice_game_status{playerid} =
                    
    player_dice_game_status{i} = PLAYER_DICE_GAME_STATUS_PLAY;

                
    SetPVarInt(i, !"dice_game_opponent"playerid);

                
    SendClientMessage(playeridHEX_COLOR_SUCCESS,
                    !
    "Соперник найден! Ожидание ответа...");

                static const 
    string_content[] = COLOR_TEXT" \
                    предлагает вам сыграть в кости. Принять?"
    ;
                
                new
                    
    string[sizeof string_content MAX_PLAYER_NAME 6],
                    
    player_name[MAX_PLAYER_NAME];
                
                
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME);

                
    strcat(stringCOLOR_SUCCESS);
                
    strcat(stringplayer_name);
                
    strcat(stringstring_content);

                
    ShowPlayerDialog(playeridDIALOG_DICE_GAME_OFFER,
                    
    DIALOG_STYLE_MSGBOX, !COLOR_TITLE"Игра найдена",
                    
    string, !"Принять", !"Отмена");
            }
        }

        return 
    1;


     диалоги
    PHP код:
    public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        switch(
    dialogid)
        {
            case 
    DIALOG_DICE_GAME_OFFER:
            {
                new 
    opponentid GetPVarInt(playerid, !"dice_game_opponent");

                if(!
    response)
                {
                    
    SendClientMessage(opponentidHEX_COLOR_ERROR
                        !
    "Соперник отказался сыграть с Вами!");
                    
    SendClientMessage(opponentidHEX_COLOR_NOTE
                        !
    "Поиск нового соперника...");

                    
    SearchDiceGameOpponent(opponentid);

                    
    player_dice_game_status{playerid} =
                        
    PLAYER_DICE_GAME_STATUS_NONE;

                    
    DeletePVar(playerid, !"dice_game_opponent");

                    return 
    SendClientMessage(playeridHEX_COLOR_NOTE,
                        !
    "Вы покинули поиск игры!");
                }

                else
                {
                    
    SetPVarInt(opponentid, !"dice_game_opponent"playerid);

                    
    ShowPlayerDialog(playeridDIALOG_DICE_GAME_SLOT,
                        
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                        !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                        "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                        !
    "Выбрать", !"Покинуть");

                    
    ShowPlayerDialog(opponentidDIALOG_DICE_GAME_SLOT,
                        
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                        !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                        "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                        !
    "Выбрать", !"Покинуть");
                }
            }

            case 
    DIALOG_DICE_GAME_SLOT:
            {
                new 
    opponentid GetPVarInt(playerid, !"dice_game_opponent");

                if(!
    response)
                {
                    
    SendClientMessage(opponentidHEX_COLOR_NOTE
                        !
    "Соперник покинул игру!");
                    
    SendClientMessage(opponentidHEX_COLOR_SUCCESS
                        !
    "Вы победили!");

                    
    player_dice_game_status{playerid} =
                        
    player_dice_game_status{opponentid} =
                        
    PLAYER_DICE_GAME_STATUS_NONE;

                    
    DeletePVar(playerid, !"dice_game_opponent");
                    return 
    DeletePVar(opponentid, !"dice_game_opponent");
                }

                else
                {
                    if(
    listitem != player_dice_slot{opponentid})
                    {
                        
    player_dice_slot{playerid} = listitem 1;

                        if(
    == player_dice_slot{opponentid})
                        {
                            
    SendClientMessage(playeridHEX_COLOR_SUCCESS
                                !
    "Ставка принята, ожидайте соперника!");
                            
    SendClientMessage(opponentidHEX_COLOR_NOTE
                                !
    "Ваш соперник сделал свой выбор, ожидание \
                                Вашего хода..."
    );
                        }

                        else
                        {
                            
    SendClientMessage(opponentidHEX_COLOR_NOTE
                                !
    "Ваш соперник сделал свой выбор!");
                            
    SendClientMessage(playeridHEX_COLOR_SUCCESS
                                !
    "Ставки приняты, ожидайте результата...");
                            
    SendClientMessage(opponentidHEX_COLOR_SUCCESS
                                !
    "Ставки приняты, ожидайте результата...");
                            
    SetTimerEx("OutputDiceGameResult",
                                
    DICE_GAME_RESULT_INTERVAL,
                                
    0"ii"playeridopponentid);

                            
    DeletePVar(playerid, !"dice_game_opponent");
                            
    DeletePVar(opponentid, !"dice_game_opponent");
                        }        
                    }

                    else
                    {
                        
    SendClientMessage(opponentidHEX_COLOR_ERROR
                                !
    "Этот слот уже выбрал ваш соперник,\
                                Выберите другую!"
    );
                        return 
    ShowPlayerDialog(opponentidDIALOG_DICE_GAME_SLOT,
                            
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                            !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                            "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                            !
    "Выбрать", !"Покинуть");
                    }
                }
            }
        }

        return 
    1;


     Функция подсчета
    PHP код:
    forward OutputDiceGameResult(player1player2);
    public 
    OutputDiceGameResult(player1player2)
    {
        new
            
    result random(2)+1,
            
    winner =
                (
    result == player_dice_slot{player1}) ? (player1) : (player2),
            
    winner_name[MAX_PLAYER_NAME];

        static const 
    string_content[] = !"Выпал слот "COLOR_ERROR"№%d\
            "
    COLOR_NOTE"победителем становится: "COLOR_ERROR"%s";
        new 
    string[sizeof string_content MAX_PLAYER_NAME];

        
    GetPlayerName(winnerwinner_nameMAX_PLAYER_NAME);

        
    format(stringsizeof stringstring_contentresultwinner_name);

        
    SendClientMessage(player1HEX_COLOR_NOTEstring);
        
    SendClientMessage(player1HEX_COLOR_SUCCESS, !"Игра окончена!");
        
    SendClientMessage(player2HEX_COLOR_NOTEstring);
        
    SendClientMessage(player2HEX_COLOR_SUCCESS, !"Игра окончена!");


        
    DeletePVar(player1, !"dice_game_opponent");
        
    DeletePVar(player2, !"dice_game_opponent");
        
    player_dice_game_status{player1} =
            
    player_dice_game_status{player2} = PLAYER_DICE_GAME_STATUS_NONE;
        return 
    1;




    Это только скелет, можно еще много чего сделать. Как говорил на работоспособность не проверял, но скорее всего должно работать идеально. Суть игры: игрок вводит команду /playdice - попадает в очередь и ищет соперника, если кто нибудь уже был в очереди, то он становится его соперником, а если не было то игрок сам попадает в очередь и ждет других. Если соперник найден, то ему отправляется запрос на игру, если примет начнется игра, если нет то он выходит из очереди, а вместо него попадает в очередь сам игрок и ждет соперника. Когда начинается игра оба игрока должны выбрать по одному слоту, ту которую выбрал один игрок, не может выбрать другой. Далее когда оба игрока выбрали слоты начинается отсчет и выбирает рандомный победитель. Надеюсь понятно было.
    Последний раз редактировалось Geebrox; 25.07.2017 в 02:05.

  4. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Тут не особо любят готовый код, ибо человек не сможет поддерживать данный код. Лучше помочь в проблеме, чем дать готовое решение.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  5. #5
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Лучше помочь в проблеме, чем дать готовое решение.
    Я дал и готовый код и решение, решением является функция OutputDiceGameResult

    Цитата Сообщение от $continue$ Посмотреть сообщение
    Тут не особо любят готовый код, ибо человек не сможет поддерживать данный код.
    Откуда такие утверждении?

  6. Пользователь сказал cпасибо:
    Hecf (25.07.2017)
  7. #6
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Я дал и готовый код и решение, решением является функция OutputDiceGameResult


    Откуда такие утверждении?
    Завтра у компа буду чекну. Там много незнакомого мне . можешь когда будет время подробнее рсписаиь каждую функцию и что она означает. Я просто не особый спец я еще учусь просто вставить незная какой параметр за что будет отвечать для меня это тупо. Как будет свободное время отпишись) спс или текстовый документ кинь с описание.

    - - - Добавлено - - -

    Да точно. Нужно очень огромное описание я еще просто не дошел по изучению до таких функций. Мне нужно знать как работает и т.д буду очь благодарен.
    Последний раз редактировалось Hecf; 25.07.2017 в 02:31.

  8. #7
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Было нечем заняться написал код на быструю руку. Не проверял на работоспособность. Думаю ты поймешь что к чему и установишь.

     цвета
    PHP код:
    #define COLOR_TITLE "{3498db}"
    #define COLOR_TEXT "{ecf0f1}"
    #define COLOR_NOTE "{e67e22}"
    #define COLOR_ERROR "{c0392b}"
    #define COLOR_SUCCESS "{2ecc71}"

    #define HEX_COLOR_NOTE 0xe67e22FF
    #define HEX_COLOR_ERROR 0xc0392bFF
    #define HEX_COLOR_SUCCESS 0x2ecc71FF 

     энуменатор
    PHP код:
    enum PLAYER_DICE_GAME_STATUS_INFO
    {
        
    PLAYER_DICE_GAME_STATUS_NONE,
        
    PLAYER_DICE_GAME_STATUS_SEARCH,
        
    PLAYER_DICE_GAME_STATUS_PLAY
    }; 

     константы
    PHP код:
    const DICE_GAME_RESULT_INTERVAL 10000//Время ожидание ответа игры
    const DIALOG_DICE_GAME_SLOT 1234//id свободного диалога
    const DIALOG_DICE_GAME_OFFER DIALOG_DICE_GAME_SLOT 1

     переменные
    PHP код:
    new
        
    player_dice_slot[MAX_PLAYERS char],
        
    PLAYER_DICE_GAME_STATUS_INFO:player_dice_game_status[MAX_PLAYERS char]; 

     команда для входа в очередь
    PHP код:
    CMD:playdice(playerid)
    {
        if(
    PLAYER_DICE_GAME_STATUS_NONE != player_dice_game_status{playerid})
        {
            return 
    SendClientMessage(playeridHEX_COLOR_ERROR
                !
    "Нельзя! Вы уже ищите или играете в кости!");
        }

        
    SendClientMessage(playeridHEX_COLOR_NOTE,
            !
    "Поиск соперника, ожидайте...");

        
    player_dice_game_status{playerid} = PLAYER_DICE_GAME_STATUS_SEARCH;

        
    SearchDiceGameOpponent(playerid);

        return 
    1;


     функция поиска соперника
    PHP код:
    stock SearchDiceGameOpponent(playerid)
    {
        foreach(
    Playeri)
        {
            if(
    != playerid &&
                
    PLAYER_DICE_GAME_STATUS_SEARCH == player_dice_game_status{i})
            {
                
    player_dice_game_status{playerid} =
                    
    player_dice_game_status{i} = PLAYER_DICE_GAME_STATUS_PLAY;

                
    SetPVarInt(i, !"dice_game_opponent"playerid);

                
    SendClientMessage(playeridHEX_COLOR_SUCCESS,
                    !
    "Соперник найден! Ожидание ответа...");

                static const 
    string_content[] = COLOR_TEXT" \
                    предлагает вам сыграть в кости. Принять?"
    ;
                
                new
                    
    string[sizeof string_content MAX_PLAYER_NAME 6],
                    
    player_name[MAX_PLAYER_NAME];
                
                
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME);

                
    strcat(stringCOLOR_SUCCESS);
                
    strcat(stringplayer_name);
                
    strcat(stringstring_content);

                
    ShowPlayerDialog(playeridDIALOG_DICE_GAME_OFFER,
                    
    DIALOG_STYLE_MSGBOX, !COLOR_TITLE"Игра найдена",
                    
    string, !"Принять", !"Отмена");
            }
        }

        return 
    1;


     диалоги
    PHP код:
    public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        switch(
    dialogid)
        {
            case 
    DIALOG_DICE_GAME_OFFER:
            {
                new 
    opponentid GetPVarInt(playerid, !"dice_game_opponent");

                if(!
    response)
                {
                    
    SendClientMessage(opponentidHEX_COLOR_ERROR
                        !
    "Соперник отказался сыграть с Вами!");
                    
    SendClientMessage(opponentidHEX_COLOR_NOTE
                        !
    "Поиск нового соперника...");

                    
    SearchDiceGameOpponent(opponentid);

                    
    player_dice_game_status{playerid} =
                        
    PLAYER_DICE_GAME_STATUS_NONE;

                    
    DeletePVar(playerid, !"dice_game_opponent");

                    return 
    SendClientMessage(playeridHEX_COLOR_NOTE,
                        !
    "Вы покинули поиск игры!");
                }

                else
                {
                    
    SetPVarInt(opponentid, !"dice_game_opponent"playerid);

                    
    ShowPlayerDialog(playeridDIALOG_DICE_GAME_SLOT,
                        
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                        !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                        "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                        !
    "Выбрать", !"Покинуть");

                    
    ShowPlayerDialog(opponentidDIALOG_DICE_GAME_SLOT,
                        
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                        !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                        "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                        !
    "Выбрать", !"Покинуть");
                }
            }

            case 
    DIALOG_DICE_GAME_SLOT:
            {
                new 
    opponentid GetPVarInt(playerid, !"dice_game_opponent");

                if(!
    response)
                {
                    
    SendClientMessage(opponentidHEX_COLOR_NOTE
                        !
    "Соперник покинул игру!");
                    
    SendClientMessage(opponentidHEX_COLOR_SUCCESS
                        !
    "Вы победили!");

                    
    player_dice_game_status{playerid} =
                        
    player_dice_game_status{opponentid} =
                        
    PLAYER_DICE_GAME_STATUS_NONE;

                    
    DeletePVar(playerid, !"dice_game_opponent");
                    return 
    DeletePVar(opponentid, !"dice_game_opponent");
                }

                else
                {
                    if(
    listitem != player_dice_slot{opponentid})
                    {
                        
    player_dice_slot{playerid} = listitem 1;

                        if(
    == player_dice_slot{opponentid})
                        {
                            
    SendClientMessage(playeridHEX_COLOR_SUCCESS
                                !
    "Ставка принята, ожидайте соперника!");
                            
    SendClientMessage(opponentidHEX_COLOR_NOTE
                                !
    "Ваш соперник сделал свой выбор, ожидание \
                                Вашего хода..."
    );
                        }

                        else
                        {
                            
    SendClientMessage(opponentidHEX_COLOR_NOTE
                                !
    "Ваш соперник сделал свой выбор!");
                            
    SendClientMessage(playeridHEX_COLOR_SUCCESS
                                !
    "Ставки приняты, ожидайте результата...");
                            
    SendClientMessage(opponentidHEX_COLOR_SUCCESS
                                !
    "Ставки приняты, ожидайте результата...");
                            
    SetTimerEx("OutputDiceGameResult",
                                
    DICE_GAME_RESULT_INTERVAL,
                                
    0"ii"playeridopponentid);

                            
    DeletePVar(playerid, !"dice_game_opponent");
                            
    DeletePVar(opponentid, !"dice_game_opponent");
                        }        
                    }

                    else
                    {
                        
    SendClientMessage(opponentidHEX_COLOR_ERROR
                                !
    "Этот слот уже выбрал ваш соперник,\
                                Выберите другую!"
    );
                        return 
    ShowPlayerDialog(opponentidDIALOG_DICE_GAME_SLOT,
                            
    DIALOG_STYLE_LIST, !COLOR_TITLE"Выберите слот",
                            !
    COLOR_TEXT"Выбрать "COLOR_ERROR"слот №1\n\
                            "
    COLOR_TEXT"Выбрать "COLOR_SUCCESS"слот №2",
                            !
    "Выбрать", !"Покинуть");
                    }
                }
            }
        }

        return 
    1;


     Функция подсчета
    PHP код:
    forward OutputDiceGameResult(player1player2);
    public 
    OutputDiceGameResult(player1player2)
    {
        new
            
    result random(2)+1,
            
    winner =
                (
    result == player_dice_slot{player1}) ? (player1) : (player2),
            
    winner_name[MAX_PLAYER_NAME];

        static const 
    string_content[] = !"Выпал слот "COLOR_ERROR"№%d\
            "
    COLOR_NOTE"победителем становится: "COLOR_ERROR"%s";
        new 
    string[sizeof string_content MAX_PLAYER_NAME];

        
    GetPlayerName(winnerwinner_nameMAX_PLAYER_NAME);

        
    format(stringsizeof stringstring_contentresultwinner_name);

        
    SendClientMessage(player1HEX_COLOR_NOTEstring);
        
    SendClientMessage(player1HEX_COLOR_SUCCESS, !"Игра окончена!");
        
    SendClientMessage(player2HEX_COLOR_NOTEstring);
        
    SendClientMessage(player2HEX_COLOR_SUCCESS, !"Игра окончена!");


        
    DeletePVar(player1, !"dice_game_opponent");
        
    DeletePVar(player2, !"dice_game_opponent");
        
    player_dice_game_status{player1} =
            
    player_dice_game_status{player2} = PLAYER_DICE_GAME_STATUS_NONE;
        return 
    1;




    Это только скелет, можно еще много чего сделать. Как говорил на работоспособность не проверял, но скорее всего должно работать идеально. Суть игры: игрок вводит команду /playdice - попадает в очередь и ищет соперника, если кто нибудь уже был в очереди, то он становится его соперником, а если не было то игрок сам попадает в очередь и ждет других. Если соперник найден, то ему отправляется запрос на игру, если примет начнется игра, если нет то он выходит из очереди, а вместо него попадает в очередь сам игрок и ждет соперника. Когда начинается игра оба игрока должны выбрать по одному слоту, ту которую выбрал один игрок, не может выбрать другой. Далее когда оба игрока выбрали слоты начинается отсчет и выбирает рандомный победитель. Надеюсь понятно было.
    Баги присутствуют, не отображается некоторые функции , а именно константы. Смешивание, затесть, там много чего не работает.

    - - - Добавлено - - -

    Не анулируются пвары или переменные. Типа если я нажму отмену игры то у другого не обнуляется ничего.

    - - - Добавлено - - -

    Также смешиваются тексты, неправильно отожражается у определенного игрока

    - - - Добавлено - - -

    Если готовое решение сделаешь, сделай пожалуйста просто тогда через команду /dice id summa для меня это слишком сложно понять. Особенно в фореач все смешивается

  9. #8
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Я дал и готовый код и решение, решением является функция OutputDiceGameResult


    Откуда такие утверждении?
    Привет, помоги доработать данный код, буду благодарен. Я под себя хочу сделать последнюю функцию, остальное я создал по своим знаниям по своему. Мне нужно всего что бы рандом определил одного игрока из двух вот и всё. И что бы рандом действовал исходя переменным игрокам. Чтобы была лишь 1 победа и 1 поражение.

    PHP код:
    stock OutputDiceGameResult(player1player2)
    {
        new 
    result random(2)+1winner = (result == game{player1}) ? (player1) : (player2);

        if(
    winner == 1)
        {
            
    ac_GivePlayerMoney(player1100*2);
        }

        else if(
    winner == 2)
        {
            
    ac_GivePlayerMoney(player2100*2);
        }
        

        
    SendClientMessage(player1, -1, !"Игра окончена!");

        
    SendClientMessage(player2, -1, !"Игра окончена!");

        
    game{player1} = game{player2} = 0;
        return 
    1;

    - - - Добавлено - - -

    И при вызове сток ругается на player1 и player2
    Последний раз редактировалось Hecf; 25.07.2017 в 14:11.

  10. #9
    Аватар для Hecf
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Помогите доработать рандом.
    PHP код:
    forward OutputDiceGameResult(player1player2);
    public 
    OutputDiceGameResult(player1player2)
    {
        new 
    result random(2)+1winner = (result == game{player1} || result == game{player2}) ? (player1) : (player2);
        foreach(
    Playeri
        {
            if(
    == game{i})
            {
                continue;
            }

            else if(
    winner == game{i}) 
            { 
                new 
    string[(52+8)+1];  
                
    format(stringsizeof(string), "Поздравляем ваша ставка выиграла. Ваш приз {4AD64C}%d$"100*2);  
                
    SendClientMessage(i, -1string);  
                
    ac_GivePlayerMoney(i100*2);   
                
    game{i} = 0
            } 

            else
            { 
                
    SendClientMessage(i, -1"Ваша ставка проиграла.");  
                
    game{i} = 0
            } 
        }
        
    game{player1} = game{player2} = 0;
        
    stavki[3] = stavki[4] = 0;
        return 
    1;


  11. #10
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Hecf Посмотреть сообщение
    Помогите доработать рандом.
      Открыть/закрыть
    PHP код:
    forward OutputDiceGameResult(player1player2);
    public 
    OutputDiceGameResult(player1player2)
    {
        new 
    result random(2)+1winner = (result == game{player1} || result == game{player2}) ? (player1) : (player2);
        foreach(
    Playeri
        {
            if(
    == game{i})
            {
                continue;
            }

            else if(
    winner == game{i}) 
            { 
                new 
    string[(52+8)+1];  
                
    format(stringsizeof(string), "Поздравляем ваша ставка выиграла. Ваш приз {4AD64C}%d$"100*2);  
                
    SendClientMessage(i, -1string);  
                
    ac_GivePlayerMoney(i100*2);   
                
    game{i} = 0
            } 

            else
            { 
                
    SendClientMessage(i, -1"Ваша ставка проиграла.");  
                
    game{i} = 0
            } 
        }
        
    game{player1} = game{player2} = 0;
        
    stavki[3] = stavki[4] = 0;
        return 
    1;

    Во первых, разберись с переменным game, я не думаю что ты указывал оператор char при его объявление, чтобы обращаться к нему как к байтовому массиву.
    Во вторых, winner и так хранит в себе id победившего игрока, а ты пытаешься снова найти его. (л - логика)
    В третьих, эта функция принимает 2 параметра, то есть ты должен указать id двух уже играющих игроков.

    PHP код:
    forward OutputDiceGameResult(player1player2);
    public 
    OutputDiceGameResult(player1player2)
    {
        new 
    result random(2)+1winner = (result == game[player1]) ? (player1) : (player2);

        new 
    string[(52+8)+1];  
        
    format(stringsizeof(string), "Поздравляем ваша ставка выиграла. Ваш приз {4AD64C}%d$"100*2);  
        
    SendClientMessage(winner, -1string);  
        
    ac_GivePlayerMoney(winner100*2);   
        
        
    SendClientMessage(((winner == player1) ? (player2) : (player1)), -1,
            
    "Ваша ставка проиграла.");  

        
    game[player1] = game[player2] = 0;
        
    stavki[3] = stavki[4] = 0;
        return 
    1;

    В четвертых, чтобы я тебе дал готовый работающий код, ты даже не кинул половину своего кода, чтобы я понял что к чему. Я же не Ванга чтобы угадывать, что у тебя за переменные, как они объявлены и для чего предназначены!

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •