• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Можно ли в sscanf использовать несколько спецификаторов в одной команде?

Статус
В этой теме нельзя размещать новые ответы.
привет, была проблема с командой /coins в ней я допустил ошибку вместо if(sscanf(params, "uf", targetid, coins)) return 1; использовал вообще if(sscanf(params, "dd", params[0], params[1])) return 1; благо люди помогли большое им спасибо, Но сейчас вопрос в другом, у меня проблема, есть у меня команда /dice и она не такая как у всех, еще даже не до конца написано но не суть. вообщем в ней можно играть в кости с ботами, даже когда нету игроков на сервере ,еще в добавок ко всему можно и с игроками играть и это все в одной команде /dice, и она сделана следующим образом, там сделал я и игру на вирты, и игру на койны, и вот в чем мой вопрос, например на вирты $ у меня if(sscanf(params, "dd", params[0], params[1])) return 1; идеально работает как и должно, но на койны у меня с ней беда тоесть я не могу использовать "dd" надо использовать "uf" как мне можно сделать 2 спецификатора в одной команде, или есть какой то спецификатор которые именно можно использовать в этой команде, гуглил нечего кроме этого не нашел

вот моя команда чтобы вы понимали о чем я
C++:
CMD:dice(playerid, params[])
{
    if(sscanf(params, "dd", params[0], params[1]))
        return SendClientMessage(playerid, -1, !"Используйте: /dice [ID] [Ставка]");

    if(IsPlayerInRangeOfPoint(playerid, 2.4, 1960.2296,1026.6403,993.5042))//Игра с ботом на вирты через /dice 301 [сумма]
    {
        if(params[0] == 301)
        {

            if(GetPVarInt(playerid,"AntiFloodDice") > gettime())
                return SendClientMessage(playerid,COLOR_GREY, !"В данный момент Вы не можете играть");

            if(!(5_000 <= params[1] <= 100_000_000))
                return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Сумма ставки от 5.000$ до 100.000.000$");

            if(PlayerInfo[playerid][pCash] < params[1])
                return SendClientMessage(playerid, COLOR_GREY,!"Ошибка: Не достаточно денег для игры.");

            new
                dice_one = (random(6) + 1),
                dice_two = (random(6) + 1),
                string[110]
            ;

            format(string, sizeof(string), "Thomas_Perry и %s бросили кости. Результат: {CC9900}%i:%i",PlayerInfo[playerid][pNames], dice_one, dice_two);
            ProxDetector(playerid, 20.0, COLOR_PURPLE, string);

            ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 4500, 1);
            SetTimerEx("KostiTime", 4500, false, "i", playerid);
            PlayerPlaySound(playerid, 33401, 0.0, 0.0, 0.0);



            switch(dice_two)
            {
                case 1: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 90.0000, 0.0000);
                case 2: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 180.0000, 0.0000);
                case 3: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 90.0000);
                case 4: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 270.0000);
                case 5: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 0.0000);
                case 6: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 270.0000, 0.0000);
            }


            if(dice_one > dice_two)
            {
                PlayerInfo[playerid][pCash] -= params[1];
                SendClientMessage(playerid, 0xFF6600AA, "К сожалению, Вы проиграли!");

                format(stringer1,sizeof(stringer1),"~r~-%i$",params[1]);
                GameTextForPlayer(playerid,stringer1, 5000, 1);
            }
            else if(dice_one < dice_two)
            {
                PlayerInfo[playerid][pCash] += params[1];
                SendClientMessage(playerid, 0x63cb00FF, "Поздравляем, Вы выиграли!");
                  format(stringer1,sizeof(stringer1),"~g~+%i$",params[1]);
                GameTextForPlayer(playerid,stringer1, 5000, 1);
            }
            else
            {
                SendClientMessage(playerid, 0xd78a38AA, "Игра закончилась в ничью!");
            }

            format(string, sizeof(string), "Выпало: %i", dice_two);
            SetPlayerChatBubble(playerid, string, 0x1CEF00AA, 20.0, 3000);

            SetPVarInt(playerid,"AntiFloodDice",gettime() + 7);
            return 1;
        }
    }
    if(IsPlayerInRangeOfPoint(playerid, 2.4, 1959.9445,1020.7394,993.5042))//Игра с ботом на койны через /dice 302 [сумма]
    {
           if(params[0] == 302)
        {

            if(GetPVarInt(playerid,"AntiFloodDice") > gettime())
                return SendClientMessage(playerid,COLOR_GREY, !"В данный момент Вы не можете играть");

            if(!(1 <= params[1] <= 1000000))
                return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Сумма ставки от 1 coins до 1.000.000 coins");

              if(PlayerInfo[playerid][pCoins] < params[1])
                return SendClientMessage(playerid, COLOR_GREY,!"Ошибка: Не достаточно Coins для игры.");

            new
                dice_one = (random(6) + 1),
                dice_two = (random(6) + 1),
                string[110]
            ;

            format(string, sizeof(string), "Kevin_Martinez и %s бросили кости. Результат: {CC9900}%i:%i",PlayerInfo[playerid][pNames], dice_one, dice_two);
            ProxDetector(playerid, 20.0, COLOR_PURPLE, string);

            ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 4500, 1);

            SetTimerEx("KostiTime", 4500, false, "i", playerid);
            PlayerPlaySound(playerid, 33401, 0.0, 0.0, 0.0);

            switch(dice_two)
            {
                case 1: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 90.0000, 0.0000);
                case 2: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 180.0000, 0.0000);
                case 3: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 90.0000);
                case 4: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 270.0000);
                case 5: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 360.0000, 0.0000);
                case 6: SetPlayerAttachedObject(playerid, 1, 1851, 1, 0.062400, 0.453750, 0.000000, 360.0000, 270.0000, 0.0000);
            }


            if(dice_one > dice_two)
            {
                new Float:coins = PlayerInfo[playerid][pCoins] -= params[1];
                PlayerInfo[playerid][pCoins] -= coins;
                SendClientMessage(playerid, 0xFF6600AA, "К сожалению, Вы проиграли!");
                  format(stringer1,sizeof(stringer1),"~r~-%.06f coins",coins);
                GameTextForPlayer(playerid,stringer1, 5000, 1);
            }
            else if(dice_one < dice_two)
            {
                new Float:coins = PlayerInfo[playerid][pCoins] += params[1];
                PlayerInfo[playerid][pCoins] += coins;
                SendClientMessage(playerid, 0x63cb00FF, "Поздравляем, Вы выиграли!");
                  format(stringer1,sizeof(stringer1),"+%.06f coins",coins);
                GameTextForPlayer(playerid,stringer1, 5000, 1);
            }
            else
            {
                SendClientMessage(playerid, 0xd78a38AA, "Игра закончилась в ничью!");
            }

            format(string, sizeof(string), "Выпало: %i", dice_two);
            SetPlayerChatBubble(playerid, string, 0x1CEF00AA, 20.0, 3000);

            SetPVarInt(playerid,"AntiFloodDice",gettime() + 7);
            return 1;
        }
    }
    if(IsPlayerInRangeOfPoint(playerid, 2.4, 1960.2296,1026.6403,993.5042))//Игра с другим игроком на вирты через /dice id [сумма]
    {
        if(!(1 <= params[1] <= 100_000_000))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Сумма ставки от 1$ до 100.000.000$.");

        if(!IsPlayerConnected(params[0]))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Такого игрока не существует.");

        if(!ProxDetectorS(8.0, playerid, params[0]))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Вы далеко друг от друга.");

        if(params[0] == playerid)
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Вы указали свой ID.");

        if(PlayerInfo[playerid][pCash] < params[1])
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: У Вас недостаточно денег для игры.");

        if(PlayerInfo[params[0]][pCash] < params[1])
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: У игрока нету столько денег для игры.");

        SendMes(playerid, C_BLUE, "Вы предложили %s[%i] бросить кости. Ставка: $%i", PlayerInfo[params[0]][pNames], params[0], params[1]);
        SendMes(params[0], C_BLUE, "%s[%i] предлагает Вам бросить кости. Ставка: $%i", PlayerInfo[playerid][pNames], playerid, params[1]);
        SendClientMessage(params[0], -1, !"Нажмите {03c03c}Y {FFFFFF}чтобы согласиться или {ff7518}N {FFFFFF}для отказа");

        SetPVarInt(playerid, "Select", 1);
        SetPVarInt(playerid, "price_dice", params[1]);
        SetPVarInt(params[0], "SelectType", 4);

        pSelectTemp2[params[0]] = playerid;
        PlayerPlaySound(playerid, 33401, 0.0, 0.0, 10.0);
        PlayerPlaySound(params[0], 33401, 0.0, 0.0, 10.0);
    }
     if(IsPlayerInRangeOfPoint(playerid, 2.4, 1959.9445,1020.7394,993.5042))//Игра с другим игроком на койны через /dice id [сумма]
    {
        if(!(1 <= params[1] <= 10_000_000))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Сумма ставки от 1 Coins до 10.000.000 Coins.");

        if(!IsPlayerConnected(params[0]))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Такого игрока не существует.");

        if(!ProxDetectorS(8.0, playerid, params[0]))
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Вы далеко друг от друга.");

        if(params[0] == playerid)
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: Вы указали свой ID.");

        if(PlayerInfo[playerid][pCoins] < params[1])
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: У Вас недостаточно Coins для игры.");

        if(PlayerInfo[params[0]][pCoins] < params[1])
            return SendClientMessage(playerid, COLOR_GREY, !"Ошибка: У игрока нету столько Coins для игры.");

        SendMes(playerid, C_BLUE, "Вы предложили %s[%i] бросить кости. Ставка: %.06f Coins", PlayerInfo[params[0]][pNames], params[0], params[1]);
        SendMes(params[0], C_BLUE, "%s[%i] предлагает Вам бросить кости. Ставка: %.06f Coins", PlayerInfo[playerid][pNames], playerid, params[1]);
        SendClientMessage(params[0], -1, !"Нажмите {03c03c}Y {FFFFFF}чтобы согласиться или {ff7518}N {FFFFFF}для отказа");

        SetPVarInt(playerid, "Select", 1);
        SetPVarInt(playerid, "price_dice1", params[1]);
        SetPVarInt(params[0], "SelectType", 7);

        pSelectTemp2[params[0]] = playerid;
        PlayerPlaySound(playerid, 33401, 0.0, 0.0, 10.0);
        PlayerPlaySound(params[0], 33401, 0.0, 0.0, 10.0);
    }
    return 1;
}


вот я нашел в интернете, но там не написано можно ли использовать 2 спецификатора в одной команде или 1 общий

Вот тебе еще ряд некоторых спецификаторов,которыми ты можешь воспользоваться:
u - не знаю как расшифровать,но может ты встречал команды,где допустим пишут: /s [id/имя] [текст],так вот спецификатор u - будет хранить в себе либо число либо текст,я его не особо использую и по правде говоря о нем толком сам ничего не знаю
f - (float) вещественное число (дробное число 12.3 и т.д)
d - (расшифровку хз) целое число (десятичное число)
s - (string) строка
c – (char) один символ. Это может быть одна буква или одна цифра. Если ты введешь например под этот спецификатор слово: Привет. Он возьмет только букву П.
i - (integer)целое число в любом формате (десятичное,восьмеричное или шестнадцатиричное) (если не ошибаюсь еще хранит до 255 значений,если будет 256,то фейл)
x - шестнадцатиричная сис-ма счисления. То есть например цвет: 0xFFFFFFAA, встречал ведь?!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу