Jump to content

pomoc Pomoc - IsPlayerInArea


PartyGameOficial

Recommended Posts

Zdravím, chtěl bych se zeptat, jak mám vytvořit: IsPlayerInArea, nebo spíše přidat, je to vlastně zóna, nechápu ty pozice. Děkuji za odpovědi

Zde je kód:

                    //----------------------------------------------------------
                    if(    IsPlayerInArea(playerid,  1749.8782, 1813.9310, -1728.3934, -1676.0796) ||
                        IsPlayerInArea(playerid,  -1994.5334, -1908.3115, 551.3755, 624.5874)     ||
                        IsPlayerInArea(playerid,  2072.4409, 2242.1787, 1373.1871, 1482.8796)  
                    {
                          if(GetPlayerWeapon(playerid) != 0)
                           {
                             if(GetPlayerVirtualWorld(playerid) == 0)
                             {
                                 SetPlayerArmedWeapon(playerid,0);
                            }
                        }
                        switch(GetVehicleModel(GetPlayerVehicleID(playerid)))
                        {
                            case 425, 432, 447, 520:
                            {
                                SPIB(playerid, "~r~Vojenska technika je u warpu zakazana!", 3);
                                RemovePlayerFromVehicle(playerid);
                            }
                        }
                    }
                    //---------------------------------------------------------- 

Link to comment
Share on other sites

Predpokladám, že ide o obdĺžnikovú (výška nás nezaujíma) zónu zadanú 2 protiľahlými bodmi.
Označme tieto body A, B a príslušné súradnice týchto bodov Ax, Ay, Bx a By.

Na tomto obrázku vidno zónu, ktorej Ax = 1, Ay = 2, Bx = 3 a By = 5.
V tejto zóne ležia všetky body, ktorých súradnica x je väčšia alebo rovná 1menšia alebo rovná 3 a zároveň ich súradnica y je väčšia alebo rovná 2 a menšia alebo rovná 5.

Vidíš, že v zóne ležia všetky body, ktorých súradnica x je medzi Ax a Bx a zároveň ich súradnica y je medzi Ay a By.
Mohol by si teda napísať niečo takéto:
 

Spoiler

stock IsPlayerInArea(playerid, Float:Ax, Float:Bx, Float:Ay, Float:By)
{
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    return Ax <= x <= Bx && Ay <= y <= By;
}

 

Tento kód má jeden problém - musíš vždy zabezpečiť, aby bolo Ax vždy menšie alebo rovné Bx a Ay vždy menšie alebo rovné By.
Aby si si nemusel dávať taký veľký pozor, môžeš vo funkcii kontrolovať, či to naozaj platí a v prípade potreby argumenty vymeniť.

Spoiler

stock IsPlayerInArea(playerid, Float:Ax, Float:Bx, Float:Ay, Float:By)
{
    new Float:tmp;
    if (Ax > Bx)
    {
        tmp = Ax;
        Ax = Bx;
        Bx = tmp;
    }

    if (Ay > By)
    {
        tmp = Ay;
        Ay = By;
        By = tmp;
    }

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    return Ax <= x <= Bx && Ay <= y <= By;
}

 

 

Edited by DuFF
  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...