IsPlayerInRangeOfPoint
#1

Hi,
I have this code to create an object at a player's position:
pawn Код:
GetPlayerPos(playerid, X,Y,Z);
CreateObject(objectid, X, Y, X, 90.0, 0.0, 0.0);
And then this to check if any player is at that position
pawn Код:
for(new c = 0; c < MAX_OBJECTS; c++)
{
    if(IsPlayerInRangeOfPoint(playerid, 5.0, Object[c][X], Object[c][Y], Object[c][Z])
    {
      //code
    }
But it always says the player is not in range of point even if it is.
Reply
#2

Object[c][X], Object[c][Y], Object[c][Z])
do you save the values righ into this arrays?

if you agree with it, you could show some more code.
Reply
#3

Actually I use GetPlayerPos(playerid, Object[objectid][X], Object[objectid][Y], Object[objectid][Z]) to save the floats.
And this do work, because I tested it using SendClientMessage with %f-s and it returned the right coordonates.
Reply
#4

can you please put printf's between a few important lines like creating the objects and checking the is player in point value and double check you did everything correctly?

and how do you initialise you
enum <name>
{
X,Y,Z
}

or
enum <name>
{
Float:X,Float:Y,Float:Z
}

and the
new Objects[amount][<name>];
or
new Float:Objects[amount][<name>];
because this tag use does make sense... if used wrong you get wrong results, it's easy as that


here is a snippet from my gamemode:

pawn Код:
enum nVehicleInfo
{
    nID,
    nColor[2],
    nComponent[14],
    nPaintjob
}

enum gMaxVehiclesE
{
    zero[nVehicleInfo],
    one[nVehicleInfo]
}

enum GNUM
{
    Exp,
    Admin,
    Vip,
    SpecialExpire,
    SpecialUser,
    Kills,
    Deaths,
    Respect,
    Sucides,
    Bank,
    Logged,
    Registered,
    UID,
    CzasGry,
    CzasTeraz,
    CzasStart,
    BanExpire,
    Bans,
    Kicks,
    Warns,
    PlayerVeh,
    PlayerInfoTimer,
   
    VehInfo[gMaxVehiclesE],
   
    Float:DX,
    Float:DY,
    Float:DZ,
   
    NickName[MAX_PLAYER_NAME],
    AuthCode[64],
    Email[92],
    IP[24]
}

new
    Global[MAX_PLAYERS][GNUM];
U can clearly see how Float: s are initialised.
Reply
#5

pawn Код:
enum oInfo
{
//...
Float:X,
Float:Y,
Float:Z,
//...
}

new <name>[MAX_OBJECTS][oInfo];
Reply
#6

Quote:
Originally Posted by Yvax
Посмотреть сообщение
pawn Код:
enum oInfo
{
//...
Float:X,
Float:Y,
Float:Z,
//...
}

new <name>[MAX_OBJECTS][oInfo];
that code is good, it MUST work. maybe you're assigning it somewhere wrong, or you assign the good values and they get deleted? Can u show some more code?
Reply
#7

pawn Код:
if(!strcmp(cmdtext, "/command1", true))
    {
        if(IsPlayerConnected(playerid))
        {
            if(gPlayerLogged[playerid] == 0)
            {
                SendClientMessage(playerid, COLOR_GREY, "   You need to login first !");
                return 1;
            }
            for(new gg = 0; gg < MAX_WEAPONSO; gg++)
            {
              if(IsPlayerInRangeOfPoint(playerid, 5.0, GunInfo[gg][wX], GunInfo[gg][wY], GunInfo[gg][wZ]))
              {
                new pname[MAX_PLAYER_NAME];
                GetPlayerName(playerid, pname, sizeof(pname));
                strmid(GunInfo[gg][LastOwner], pname, 0, strlen(pname), 255);
                s_GivePlayerWeapon(playerid, GunInfo[gg][wID], GunInfo[gg][wAmmo]);
                DestroyObject(GunObj[gg]);
              }
              else
              {
                SendClientMessage(playerid, COLOR_GREY, "There is no weapon near you! ");
                return 1;
              }
            }
        }
        return 1;
    }

    if(!strcmp(cmdtext, "/command2", true))
    {
        if(IsPlayerConnected(playerid))
        {
            if(gPlayerLogged[playerid] == 0)
            {
                SendClientMessage(playerid, COLOR_GREY, "   You need to login first !");
                return 1;
            }
            if(GetPlayerWeapon(playerid) > 0)
            {
                new pname[MAX_PLAYER_NAME], pgunname[128];
                droppedguns++;
                GetPlayerName(playerid, pname, sizeof(pname));
                GetPlayerPos(playerid, GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]);
                GunInfo[droppedguns][wID] = GetPlayerWeapon(playerid);
                GunInfo[droppedguns][wAmmo] = GetPlayerAmmo(playerid);
                GetWeaponName(GunInfo[droppedguns][wID], pgunname, sizeof(pgunname));
                strmid(GunInfo[droppedguns][LastOwner], pname, 0, strlen(pname), 255);
                s_GivePlayerWeapon(playerid, GunInfo[droppedguns][wID], -GunInfo[droppedguns][wAmmo]);
                format(string, sizeof(string), "%d %d %f %f %f %d %s ", droppedguns, GunInfo[droppedguns][wID], GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ], GunInfo[droppedguns][wAmmo], GunInfo[droppedguns][LastOwner]);
                SendClientMessage(playerid, COLOR_WHITE, string);
                GunObj[droppedguns] =  CreateObject(GetGunObjectID(GunInfo[droppedguns][wID]), GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]-0.9, 90.0, 0.0, 0.0);
            }
            else
            {
                SendClientMessage(playerid, COLOR_GREY, "You do not have a weapon ! ");
                return 1;
            }
        }
        return 1;
    }
Reply
#8

I don't see anything bad so what I'm going to do now is put the code into an empty gamemode and test it myself.

Edit: I solved it,
It seems you do it the wrong way, it get the weapon but if it find 1 weapon not in range it stops,
this is how you should do it:

pawn Код:
///////////////////////////////////////
#define MAX_GUNS (10)

new droppedguns = 0;

enum GunEnum
{
    wID,
    oID,
    Float:wX,
    Float:wY,
    Float:wZ
}

new GunInfo[MAX_GUNS][GunEnum];

public OnPlayerCommandText(playerid, cmdtext[])
{
new idx = 0;
new cmd[256];

cmd = strtok(cmdtext, idx);
///////////////////////////////////////
if(!strcmp(cmdtext, "/get", true))
{
    new var = 0;//look really good here
    for(new gg = 0; gg < MAX_GUNS; gg++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 5.0, GunInfo[gg][wX], GunInfo[gg][wY], GunInfo[gg][wZ]))
        {
            DestroyObject(GunInfo[gg][oID]);
            SendClientFormatMessage(playerid,-1,"%f %f %f 5.0",GunInfo[gg][wX], GunInfo[gg][wY], GunInfo[gg][wZ]);
            ++var;//here
        }
    }
    if(var == 0)//and here
    {
        SendClientMessage(playerid, COLOR_GREY, "There is no weapon near you! ");
    }
else
{
SendClientFormatMessage(playerid,COLOR_GREY,"You picked up %d weapons",var);
}
    return 1;
}

if(!strcmp(cmdtext, "/put", true))
{
    droppedguns++;
    GetPlayerPos(playerid, GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]);
    GunInfo[droppedguns][oID] = CreateObject(1318, GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]+0.0, 0.0, 0.0, 0.0);
    return 1;
}
///////////////////////////////////////

so your commands shoud look like:
pawn Код:
if(!strcmp(cmdtext, "/command1", true))
{
    if(IsPlayerConnected(playerid))
    {
        if(gPlayerLogged[playerid] == 0)
        {
            SendClientMessage(playerid, COLOR_GREY, " You need to login first !");
            return 1;
        }
        new amount = 0;
        for(new gg = 0; gg < MAX_WEAPONSO; gg++)
        {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, GunInfo[gg][wX], GunInfo[gg][wY], GunInfo[gg][wZ]))
            {
                new pname[MAX_PLAYER_NAME];
                GetPlayerName(playerid, pname, sizeof(pname));
                strmid(GunInfo[gg][LastOwner], pname, 0, strlen(pname), 255);
                s_GivePlayerWeapon(playerid, GunInfo[gg][wID], GunInfo[gg][wAmmo]);
                DestroyObject(GunObj[gg]);
                ++amount;
            }
        }
        if(amount == 0)
        {
            SendClientMessage(playerid, COLOR_GREY, "There is no weapon near you! ");
        }
    }
    return 1;
}

if(!strcmp(cmdtext, "/command2", true))
{
    if(IsPlayerConnected(playerid))
    {
        if(gPlayerLogged[playerid] == 0)
        {
            SendClientMessage(playerid, COLOR_GREY, " You need to login first !");
            return 1;
        }
        if(GetPlayerWeapon(playerid) > 0)
        {
            new pname[MAX_PLAYER_NAME], pgunname[128];
            droppedguns++;
            GetPlayerName(playerid, pname, sizeof(pname));
            GetPlayerPos(playerid, GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]);
            GunInfo[droppedguns][wID] = GetPlayerWeapon(playerid);
            GunInfo[droppedguns][wAmmo] = GetPlayerAmmo(playerid);
            GetWeaponName(GunInfo[droppedguns][wID], pgunname, sizeof(pgunname));
            strmid(GunInfo[droppedguns][LastOwner], pname, 0, strlen(pname), 255);
            s_GivePlayerWeapon(playerid, GunInfo[droppedguns][wID], -GunInfo[droppedguns][wAmmo]);
            format(string, sizeof(string), "%d %d %f %f %f %d %s ", droppedguns, GunInfo[droppedguns][wID], GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ], GunInfo[droppedguns][wAmmo], GunInfo[droppedguns][LastOwner]);
            SendClientMessage(playerid, COLOR_WHITE, string);
            GunObj[droppedguns] = CreateObject(GetGunObjectID(GunInfo[droppedguns][wID]), GunInfo[droppedguns][wX], GunInfo[droppedguns][wY], GunInfo[droppedguns][wZ]-0.9, 90.0, 0.0, 0.0);
        }
        else
        {
            SendClientMessage(playerid, COLOR_GREY, "You do not have a weapon ! ");
            return 1;
        }
    }
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)