SA-MP Forums Archive
help me dcmd ! /gotoposition - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: help me dcmd ! /gotoposition (/showthread.php?tid=117609)



help me dcmd ! /gotoposition - jame20702 - 01.01.2010

Code: ( Somewhere in script but not in any callbacks - for DCMD)
dcmd_gotoposition(playerid,params[]) {
if(IsPlayerAdmin(playerid)) {
new Float, Float:y, Float:z, world, interior;
new tmp[256], tmp2[256], tmp3[256], tmp4[256], tmp5[256];
new string[128], Index; tmp = strtok(params,Index); tmp2 = strtok(params,Index); tmp3 = strtok(params,Index); tmp4 = strtok(params,Index); tmp5 = strtok(params,Index);
if(!strlen(tmp) || !strlen(tmp2) || !strlen(tmp3)) || !(strlen(tmp4)) || !strlen(tmp5)) return SendClientMessage(playerid,red,"USAGE: /lgoto [x] [y] [z]");
x = strval(tmp) y = strval(tmp2); z = strval(tmp3); interior = strval(tmp4); world(tmp5);
SetPlayerInterior(playerid, interior);
if(GetPlayerState(playerid) == 2) SetVehiclePos(GetPlayerVehicleID(playerid),x,y,z); LinkVehicleToInterior(GetPlayerVehicleID(playerid) , interior);
else SetPlayerPos(playerid,x,y,z);
format(string,sizeof(string),"You have teleported to %f, %f, %f in interior universe %d ini virtual world %d", x,y,z, interior, world); return SendClientMessage(playerid,0xFFFFFFFF,string);
} else return 0;
}


Code: (Under OnPlayerCommandText)
dcmd(gotoposition, 12, cmdtext);



Re: help me dcmd ! /gotoposition - Calon - 01.01.2010

pawn Код:
/*----------------------------------------------------------------------------*-
Function:
    sscanf
Params:
    string[] - String to extract parameters from.
    format[] - Parameter types to get.
    {Float,_}:... - Data return variables.
Return:
    0 - Successful, not 0 - fail.
Notes:
    A fail is either insufficient variables to store the data or insufficient
    data for the format string - excess data is disgarded.
 
    A string in the middle of the input data is extracted as a single word, a
    string at the end of the data collects all remaining text.
 
    The format codes are:
 
    c - A character.
    d, i - An integer.
    h, x - A hex number (e.g. a colour).
    f - A float.
    s - A string.
    z - An optional string.
    pX - An additional delimiter where X is another character.
    '' - Encloses a litteral string to locate.
    u - User, takes a name, part of a name or an id and returns the id if they're connected.
 
    Now has IsNumeric integrated into the code.
 
    Added additional delimiters in the form of all whitespace and an
    optioanlly specified one in the format string.
-*----------------------------------------------------------------------------*/

 
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':
            {
 
                new changestr[16], changepos = 0, strpos = stringPos;  
                while(changepos < 16 && string[strpos] && string[strpos] != delim)
                {
                    changestr[changepos++] = string[strpos++];
                }
                changestr[changepos] = '\0';
                setarg(paramPos,0,_:floatstr(changestr));
            }
            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;
}

dcmd_gotoposition(playerid, params[])
{
    new string[128], Float: plX, Float: plY, Float: plZ, plInt;
    if(sscanf(params, "fffd", plX, plY, plZ, plInt))
    {
      SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /gotoposition [x] [y] [z] [interior]");
    }
    else
    {
        if(IsPlayerAdmin(playerid))
        {
          if(GetPlayerState(playerid) == 2)
          {
            format(string, sizeof(string), "You have teleported to (with your vehicle) X: %f, Y: %f, Z: %f with interior %d.", plX, plY, plZ, plInt);
            SendClientMessage(playerid, WHITE, string);
            LinkVehicleToInterior(GetPlayerVehicleID(playerid), plInt)
            SetVehiclePos(GetPlayerVehicleID(playerid), plX, plY, plZ);
          }
          else
          {
            format(string, sizeof(string), "You have teleported to X: %f, Y: %f, Z: %f with interior %d.", plX, plY, plZ, plInt);
            SendClientMessage(playerid, WHITE, string);
            SetPlayerInterior(playerid, plInt);
            SetPlayerPos(playerid, plX, plY, plZ);
          }
        }
    }
    return 1;
}