[Duvida] Ajudem a concluir um comando
#1

Pessoal tenho este comando aqui a funcionar na perfeiзгo.

ou seja os playeres usam /corrida e entram na corrida
mas queria antes /corida [id].

passo a explicar. tenho um gang que trabalha em organizaзoes de corridas e queria fazer o comando para que eles pudessem colocar la os outros.
Faзo-me entender ?


pawn Код:
if (strcmp("/corrida", cmdtext,true)==0) {
    if (GetPlayerState(playerid) == 2) {
        SetCameraBehindPlayer(playerid);}
  else {
    SetPlayerPos(playerid,1360.7028,2142.6660,11.0156); SetPlayerFacingAngle(playerid,351.3020); SetCameraBehindPlayer(playerid); }
  new pName[MAX_PLAYER_NAME];
  new string[48];
  GetPlayerName(playerid, pName, sizeof(pName));
  format(string, sizeof(string), "%s Bem Vindo aos carros de choque. ", pName);
  SendClientMessageToAll(COR_ROXO, string);
  SendClientMessage(playerid, COR_CINZA, " Pagamento dos carros de choque 50");
  SendClientMessage(playerid, COR_CINZA, " Creditos: Rick_DR");
  GivePlayerMoney(playerid,-50);
  return 1;
}
Reply
#2

estuda mais ou menos isso:


pawn Код:
#include <a_samp>

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

#define COLOR_RED 0xF60000AA
#define COLOR_RED 0xF60000AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_BLUE 0x0000BBAA

#define FILTERSCRIPT


new
    timerza[MAX_PLAYERS],
    aceitardesafio[MAX_PLAYERS],
    apostoudesafio[MAX_PLAYERS] = 501,
    matador[MAX_PLAYERS];

forward aceitarodesa(playerid, outroid);


public OnFilterScriptExit()
{
    for(new i = 0; i < MAX_PLAYERS; i ++)
    {
        KillTimer(timerza[i]);
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(matador[playerid] && matador[killerid] == 1)
    {
      GivePlayerMoney(killerid, 10000);
      GameTextForPlayer(killerid, "Parabens!! Vocк й o melhor!", 2500, 3);
      SendClientMessage(killerid, COLOR_BLUE, "Como recompensa foste premiado com 10000$!");
      SetPlayerPos(killerid, 2017.4063,1182.7325,10.8203);
      GameTextForPlayer(playerid, "Temos pena, mas vocк perdeu", 2500, 3);
    SendClientMessage(playerid, COLOR_RED, "O teu inimigo tirou-te 2000$");
      GivePlayerMoney(playerid, -2000);
      matador[playerid] = 0;
      matador[killerid] = 0;
    }
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
  dcmd(aceitardesafio,14,cmdtext);
  dcmd(desafio,7,cmdtext);
    return 0;
}


dcmd_desafio(playerid, params[])
{
    new
        giveplayerid,
        string[93];

    if(sscanf(params, "d", giveplayerid)) return SendClientMessage(playerid, COLOR_RED, "Uso /desafio [Playerid]");
    if(IsPlayerConnected(giveplayerid) && giveplayerid != playerid)
    {
      if(IsPlayerInRangeOfPoint(playerid, 10, 2017.4063,1182.7325,10.8203) && IsPlayerInRangeOfPoint(giveplayerid, 10, 2017.4063,1182.7325,10.8203))
      {
          new
                nome[MAX_PLAYER_NAME];
          GetPlayerName(giveplayerid, nome, MAX_PLAYER_NAME);

          new
                nome2[MAX_PLAYER_NAME];
          GetPlayerName(playerid, nome2, MAX_PLAYER_NAME);

          format(string, 93, "Envias-te o pedido ao jogador %s, agora espera uma resposta!", nome);
          SendClientMessage(playerid, COLOR_ORANGE, string);
          format(string, 91, "O jogador %s desafiou-te. Aceita com /aceitardesafio [id-do-oponente]", nome2);
          SendClientMessage(giveplayerid, COLOR_RED, string);
          timerza[playerid] = SetTimerEx("aceitarodesa", 500, 1, "dd", playerid,giveplayerid);
            apostoudesafio[playerid] = giveplayerid;
        }
        else
        {
          SendClientMessage(playerid, COLOR_RED, "Os dois jogadores nгo estгo na posiзгo de Desafio!");
        }
    }
    else return SendClientMessage(playerid, COLOR_WHITE, "O jogador nгo esta conectado");
    return 1;
}

dcmd_aceitardesafio(playerid, params[])
{
    new
        giveplayerid,
        string[62];

    if(sscanf(params, "d", giveplayerid)) return SendClientMessage(playerid, COLOR_RED, "Uso /aceitardesafio [id-do-oponente]");
    if(IsPlayerConnected(giveplayerid) && giveplayerid != playerid)
    {
      if(apostoudesafio[giveplayerid] == playerid)
      {
          new
                nome[MAX_PLAYER_NAME];
          GetPlayerName(giveplayerid, nome, MAX_PLAYER_NAME);

          new
                nome2[MAX_PLAYER_NAME];
          GetPlayerName(playerid, nome2, MAX_PLAYER_NAME);

          format(string, 55, "Vocк aceitou o desafio de %s", nome);
          SendClientMessage(playerid, COLOR_ORANGE, string);
          format(string, 62, "O jogador %s aceitou o seu desafio!", nome2);
          SendClientMessage(giveplayerid, COLOR_RED, string);
          aceitardesafio[playerid] = 1;
          apostoudesafio[giveplayerid] = 501;
          apostoudesafio[playerid] = 501;
        }
        else
        {
            new
                nome[MAX_PLAYER_NAME];
          GetPlayerName(giveplayerid, nome, MAX_PLAYER_NAME);

            format(string, 75, "O Jogador %s nгo fez nenhum desafio contra vocк!", nome);
            SendClientMessage(playerid, COLOR_RED, string);
        }
    }
    else return SendClientMessage(playerid, COLOR_WHITE, "O jogador nгo estб connectado!");
    return 1;
}

public aceitarodesa(playerid, outroid)
{
    if(aceitardesafio[outroid] == 1)
    {
        GameTextForPlayer(playerid, "Mostre que e o melhor!!", 1000, 3);
        GameTextForPlayer(outroid, "Mostre que e o melhor!!", 1000, 3);
      aceitardesafio[outroid] = 0;
        SetPlayerPos(outroid, 2462.3972,2256.4680,91.6300);
        SetPlayerPos(playerid, 2462.3972,2256.4680,91.6300);
        matador[playerid] = 1;
        matador[outroid] = 1;
      KillTimer(timerza[playerid]);
    }
}

stock sscanf(string[], format[], {Float,_}:...)
{
    #if defined isnull
        if (isnull(string))
    #else
        if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
        {
            return format[0];
        }
    #pragma tabsize 4
    new
        formatPos = 0,
        stringPos = 0,
        paramPos = 2,
        paramCount = numargs(),
        delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
        stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
        switch (format[formatPos++])
        {
            case '\0':
            {
                return 0;
            }
            case 'i', 'd':
            {
                new
                    neg = 1,
                    num = 0,
                    ch = string[stringPos];
                if (ch == '-')
                {
                    neg = -1;
                    ch = string[++stringPos];
                }
                do
                {
                    stringPos++;
                    if ('0' <= ch <= '9')
                    {
                        num = (num * 10) + (ch - '0');
                    }
                    else
                    {
                        return -1;
                    }
                }
                while ((ch = string[stringPos]) > ' ' && ch != delim);
                setarg(paramPos, 0, num * neg);
            }
            case 'h', 'x':
            {
                new
                    num = 0,
                    ch = string[stringPos];
                do
                {
                    stringPos++;
                    switch (ch)
                    {
                        case 'x', 'X':
                        {
                            num = 0;
                            continue;
                        }
                        case '0' .. '9':
                        {
                            num = (num << 4) | (ch - '0');
                        }
                        case 'a' .. 'f':
                        {
                            num = (num << 4) | (ch - ('a' - 10));
                        }
                        case 'A' .. 'F':
                        {
                            num = (num << 4) | (ch - ('A' - 10));
                        }
                        default:
                        {
                            return -1;
                        }
                    }
                }
                while ((ch = string[stringPos]) > ' ' && ch != delim);
                setarg(paramPos, 0, num);
            }
            case 'c':
            {
                setarg(paramPos, 0, string[stringPos++]);
            }
            case 'f':
            {
                setarg(paramPos, 0, _:floatstr(string[stringPos]));
            }
            case 'p':
            {
                delim = format[formatPos++];
                continue;
            }
            case '\'':
            {
                new
                    end = formatPos - 1,
                    ch;
                while ((ch = format[++end]) && ch != '\'') {}
                if (!ch)
                {
                    return -1;
                }
                format[end] = '\0';
                if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
                {
                    if (format[end + 1])
                    {
                        return -1;
                    }
                    return 0;
                }
                format[end] = '\'';
                stringPos = ch + (end - formatPos);
                formatPos = end + 1;
            }
            case 'u':
            {
                new
                    end = stringPos - 1,
                    id = 0,
                    bool:num = true,
                    ch;
                while ((ch = string[++end]) && ch != delim)
                {
                    if (num)
                    {
                        if ('0' <= ch <= '9')
                        {
                            id = (id * 10) + (ch - '0');
                        }
                        else
                        {
                            num = false;
                        }
                    }
                }
                if (num && IsPlayerConnected(id))
                {
                    setarg(paramPos, 0, id);
                }
                else
                {
                    #if !defined foreach
                        #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
                        #define __SSCANF_FOREACH__
                    #endif
                    string[end] = '\0';
                    num = false;
                    new
                        name[MAX_PLAYER_NAME];
                    id = end - stringPos;
                    foreach (Player, playerid)
                    {
                        GetPlayerName(playerid, name, sizeof (name));
                        if (!strcmp(name, string[stringPos], true, id))
                        {
                            setarg(paramPos, 0, playerid);
                            num = true;
                            break;
                        }
                    }
                    if (!num)
                    {
                        setarg(paramPos, 0, INVALID_PLAYER_ID);
                    }
                    string[end] = ch;
                    #if defined __SSCANF_FOREACH__
                        #undef foreach
                        #undef __SSCANF_FOREACH__
                    #endif
                }
                stringPos = end;
            }
            case 's', 'z':
            {
                new
                    i = 0,
                    ch;
                if (format[formatPos])
                {
                    while ((ch = string[stringPos++]) && ch != delim)
                    {
                        setarg(paramPos, i++, ch);
                    }
                    if (!i)
                    {
                        return -1;
                    }
                }
                else
                {
                    while ((ch = string[stringPos++]))
                    {
                        setarg(paramPos, i++, ch);
                    }
                }
                stringPos--;
                setarg(paramPos, i, '\0');
            }
            default:
            {
                continue;
            }
        }
        while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
        {
            stringPos++;
        }
        while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
        {
            stringPos++;
        }
        paramPos++;
    }
    do
    {
        if ((delim = format[formatPos++]) > ' ')
        {
            if (delim == '\'')
            {
                while ((delim = format[formatPos++]) && delim != '\'') {}
            }
            else if (delim != 'z')
            {
                return delim;
            }
        }
    }
    while (delim > ' ');
    return 0;
}
Crйditos a: Dark Team PT
Reply
#3

Jб estive a estudar ta muito completo parabйns mesmo.

mas eu gostaria mesmo de saber criar um tal comando que desse para depois servir de exemplo entende ?

para poder depois criar
/prender [id]
/curar [id]
/congelar [id]


podia muito bem utilizar o seu FS mas nгo iria aprender
Reply
#4

Quote:
Originally Posted by Rick_DR
Jб estive a estudar ta muito completo parabйns mesmo.

mas eu gostaria mesmo de saber criar um tal comando que desse para depois servir de exemplo entende ?

para poder depois criar
/prender [id]
/curar [id]
/congelar [id]


podia muito bem utilizar o seu FS mas nгo iria aprender
eu te dei isso, para tu pegares e estudares, e ver o sentido,,, nao volto a dar codigo pronto.... senгo ha cada pergunta cada vez mais estupida por parte de iniciantes
Reply
#5

jб reparas-te que as pessoas falam para ti e tu respondes sempre arrogantemente ?

nгo queres ajudar nгo ajudes, ficas 1% mais feliz em saberes as cenas e os outros nгo.

dizes que sou iniciante e queres que aprenda a fazer um comando com 300 linhas de um momento para o outro..
Reply
#6

Quote:
Originally Posted by Rick_DR
jб reparas-te que as pessoas falam para ti e tu respondes sempre arrogantemente ?

nгo queres ajudar nгo ajudes, ficas 1% mais feliz em saberes as cenas e os outros nгo.

dizes que sou iniciante e queres que aprenda a fazer um comando com 300 linhas de um momento para o outro..
eu ja passei por onde tas a passar, e se continuares com o pawn, vais passar por onde tou agora, e vais notar que, ok й sempre grateficante saberes mais que os outros (obvio), mas tambйm que inclui responsbilidades, eu andei mt tempo a dar codigos prontos, e sabes o que faziam pegavam neles, ctrl+c, dps no pawno, ctrl+v, nem crйditos nem nd, e viviam com ele, sem sequer perccebe-lo.

Sobre responder arrogantemente. Porque fartei de ser bonzinho, fazer tudo, simpatico, etc ("olha, por favor posta as linhas, para vermos...") passou a mais arrogante, para ver se aprendem,.... Nгo sei se sabem, mas eu aprendi sabem como MSN, nгo tive a sorte, de saber aqui do site, dps e que descobri. Peguei no LVDM, estudei, editei, nem da wiki eu tinha conhecimento, via as funзхes que existiam e tals, depois (passado 2 semanas) й que descobri a Wiki, e comecei a usar a wiki, pegar as funзoes e tals. А 3 meses (fevereiro, acho) й que descobri este forum....
Reply
#7

Acredito que sim, quanto aos crйditos basta vocк entrar no meu Server colocar /creditos e veja se nгo dou crйditos aos outros




se mais alguйm souber ajudar. agradecia
Reply
#8

no meu tbm tem /creditos ++ CAMPANHA NAO AO GM THUG
Reply
#9

Quote:
Originally Posted by OWNEDBYSERGIO:.
++ CAMPANHA NAO AO GM THUG
100% de acordo..


lool
Reply
#10

mas eu estava a perguntar de um comando, nгo se fazem campanha
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)