Jump to content

[Funkcia]IsPlayerInCube


milous22

Recommended Posts

ahojce, dávam sem môj stock (ak ho už niekto vytvoril predo mnou tak sry, ale nikde som ho nenašiel) s názvom IsPlayerInCube. Je pravda že takýto stock je aj na wiki.sa-mp.com (by 50p), ale ten by sa mal skôr volať IsPlayerInBlock, pretože si môžete vybrať min/max súradnice. Kdežto v mojom stocku si nastavíte stred kocky a vzdialenosť stien od stredu (rádius).

 

A myslím že je to rýchlejšie ako IsPlayerInSphere. Nakoľko IsPlayerInSphere prepočítava vzdialenosť od bodu a potom ju porovnáva s rádiusom. Ale tá moja funkcia iba porovnáva polohu hráča (+radius) s danými súradnicami, a ak sa nezhoduje čo i len jedna, hneď sa funkcia returnuje.

Ak je táto moja domnienka mylná prosím opravte ma. "scratch"

 

Myslím, že popis čo je čo, je zbytočný, nakoľko je to krátka funkcia a stručný popis je vyššie.

tu je funkcia:

stock IsPlayerInCube(playerid,Float:x,Float:y,Float:z,Float:radius)
{
new Float:Xp,Float:Yp,Float:Zp;
GetPlayerPos(playerid,Xp,Yp,Zp);
if(x+radius < Xp) return 0;
if(x-radius > Xp) return 0;
if(y+radius < Yp) return 0;
if(y-radius > Yp) return 0;
if(z+radius < Zp) return 0;
if(z-radius > Zp) return 0;
return 1;
}

Link to comment
Share on other sites

Dobré, ale myslím, že klasické IsPlayerInRangeOfPoint(...) je nejlepší.

 

;)

 

A ještě by to bylo lepší, kdyby byl radius zvlášť na x a na y, protože tato zona může být jen čtverec. A pokud by jsi si nastavil radius x i y, tak by to byl obdelnik a čtverec by jsi udělal tím, že by jsi dal oba radiusy stejné. ;)

 

-- sob 29. led 2011 11:58:06 --

 

Vlastně ještě s tou výškou je to kvádr. :d Ale radius výšky, to už je zbytečné, ale šlo by to taky. ;)

Link to comment
Share on other sites

Ano, to by šlo, ale zase by ty řádky byly delší.

 

Myslím, že vůbec nezaléží na počtu řádků.

 

-- sob 29. led 2011 12:25:37 --

 

stock IsPlayerInCube(playerid,Float:x,Float:y,Float:z,Float:radius)
{
  new Float:Xp,Float:Yp,Float:Zp;
  GetPlayerPos(playerid,Xp,Yp,Zp);
  if(x+radius < Xp || x-radius > Xp || y+radius < Yp || y-radius > Yp || z+radius < Zp || z-radius > Zp) return 0;
  return 1;
}

Link to comment
Share on other sites

  • 1 month later...

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...