milous22 14 Odesláno: 24. Leden, 2011 Share Odesláno: 24. Leden, 2011 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 More sharing options...
Skemr 0 Odesláno: 29. Leden, 2011 Share Odesláno: 29. Leden, 2011 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. Ale radius výšky, to už je zbytečné, ale šlo by to taky. Link to comment Share on other sites More sharing options...
Marwin37 5 Odesláno: 29. Leden, 2011 Share Odesláno: 29. Leden, 2011 zbytečně zdlouhavé šlo by to udělat na 5 řádků Link to comment Share on other sites More sharing options...
Skemr 0 Odesláno: 29. Leden, 2011 Share Odesláno: 29. Leden, 2011 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 More sharing options...
ATomas 291 Odesláno: 29. Leden, 2011 Share Odesláno: 29. Leden, 2011 rozdil mezi tvou funkci a IsPlayerInSphere je v tom ze IsPlayerInSphere porovnava jestli je v kouli a tvoje funkce jestli je ve krychli Link to comment Share on other sites More sharing options...
Skemr 0 Odesláno: 29. Leden, 2011 Share Odesláno: 29. Leden, 2011 A IsPlayerInRangeOfPoint porovná co? Taky kouli? Link to comment Share on other sites More sharing options...
Mmartin 0 Odesláno: 10. Březen, 2011 Share Odesláno: 10. Březen, 2011 IPIRangeOfPoint == IPISphere... Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now