Szerző Téma: egy játékos elõtti játékosok  (Megtekintve 1324 alkalommal)

egy játékos elõtti játékosok
« Dátum: 2012. június 19. - 21:59:47 »
0 Show voters
Az lenne a kérdésem, hogy hogyan lehet kekérni pl X player elõtti játékosokat? Pl aki a játékos elõtt van 5 vagy kevesebb méterre, akkor azokat a játékosokat X player el tudja teleportálni valahova õket a /tele paranccsal.
« Utoljára szerkesztve: 2012. június 19. - 22:02:17 írta Sasori »

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
egy játékos elõtti játékosok
« Válasz #1 Dátum: 2012. június 19. - 22:53:32 »
0 Show voters
Link: wiki.sa-mp.com/wiki/GetPlayerDistanceFromPoint
Vagy!
 

n e w F l o a t : XX 1 , F l o a t : Y Y 1 , F l o a t : Z Z 1;
new id;
G e t P l a y e r P o s ( i d , XX 1 , Y Y 1 , Z Z 1 ) ;
i f ( I s P l a y e r I n R a n g e O f P o i n t ( p l a y e r i d , 5 . 0 , XX 1 , Y Y 1 , Z Z 1 )) return SendClientMessage(playerid,-1,\"Nem vagy játékos közelében!\");
« Utoljára szerkesztve: 2012. június 19. - 22:58:38 írta ZyZu »

egy játékos elõtti játékosok
« Válasz #2 Dátum: 2012. június 20. - 10:07:59 »
0 Show voters
De nekem nem ilyen kéne. Hanem ahogy leírtam. Hogy az 1-es játékos elõtt van mondjuk 3 játékos 5 méteren belül, akkor azokat el tudja teleportálni a /tele paranccsal valahova.

Nem elérhető CANNONN

  • 2139
    • Profil megtekintése
egy játékos elõtti játékosok
« Válasz #3 Dátum: 2012. június 21. - 17:42:45 »
0 Show voters
Sima, for-os megoldás:
 

CMD:tele(playerid)
{
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
for(new i; i<MAX_PLAYERS; i++)
{
{
      if(IsPlayerInRangeOfPoint(i, 5.0,  x, y, z)) return SetPlayerPos(playerid, 0, 0, 0);
}
}
return 1;
}

 
Gyorsabb, foreach-os megoldás:
 

CMD:tele(playerid)
{
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
foreach(Player, i)
{
{
      if(IsPlayerInRangeOfPoint(i, 5.0,  x, y, z)) return SetPlayerPos(playerid, 0, 0, 0);
}
}
return 1;
}
« Utoljára szerkesztve: 2012. június 21. - 17:43:22 írta Cannonn »

egy játékos elõtti játékosok
« Válasz #4 Dátum: 2012. június 21. - 19:12:30 »
+1 Show voters
Õ gondolom úgy gondolja, hogy:
                         °  <- játékos akire hasson a /tele
                         |
                         |
                         |
                         |
                         °  <- játékos aki beírja a /tele parancsot
     vagy másik változat:
                         °  <- játékos aki beírja a /tele parancsot
                       /   \\
                     /       \\
                   /           \\
                 /               \\
                      °°°°        <- játékosok akikre hat a /tele parancs
Ha igen, én nem tudok segíteni, csak mondtam.  :noexpression:

egy játékos elõtti játékosok
« Válasz #5 Dátum: 2012. június 21. - 20:59:24 »
0 Show voters
Igen, ilyenre gondolok Ryuuzaki.

Nem elérhető CANNONN

  • 2139
    • Profil megtekintése
egy játékos elõtti játékosok
« Válasz #6 Dátum: 2012. június 21. - 22:53:42 »
0 Show voters
Idézetet írta: Sasori date=1340305164\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"23098\" data-ipsquote-contentclass=\"forums_Topic
Igen, ilyenre gondolok Ryuuzaki.
 
Mert én nem azt csináltam?

egy játékos elõtti játékosok
« Válasz #7 Dátum: 2012. június 22. - 11:32:55 »
0 Show voters
De az IsPlayerRangeOfPoint a játékos KÖRÜL valamennyi méterre hat, én meg úgy akarom, hogy aki a háta mögött van, arra már ne is hasson

egy játékos elõtti játékosok
« Válasz #8 Dátum: 2012. június 24. - 15:21:46 »
0 Show voters
Ezt a kódot én nem teljesen iylen de hasonló célokra használtam. 100%-ig nem vagyok benne biztos hogy tökéletesen mûködik majd neked de egy próbát megér. Viszont ha nem mûködik kis alakítással már mûködhet. Sok sikert
 
stock IsPlayerFacingPlayer(playerid, targetid, Float:dOffset)
{
new
Float:pX,
Float:pY,
Float:pZ,
Float:pA,
Float:X,
Float:Y,
Float:Z,
Float:ang;
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;
GetPlayerPos(targetid, pX, pY, pZ);
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, pA);
if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
if(AngleInRangeOfAngle(-ang, pA, dOffset)) return true;
return false;
}
stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)
{
    a1 -= a2;
    if((a1 < range) && (a1 > -range)) return true;
    return false;
}
stock IsPlayerBehindPlayer(playerid, targetid, Float:dOffset)
{
new
    Float:pa,
    Float:ta;
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;
GetPlayerFacingAngle(playerid, pa);
GetPlayerFacingAngle(targetid, ta);
if(AngleInRangeOfAngle(pa, ta, dOffset) && IsPlayerFacingPlayer(playerid, targetid, dOffset)) return true;
return false;
}
//innentõl oda rakd a kódot ahol használod
new Float:X,Float:Y,Float:Z;
foreach(Player,i)
{
    GetPlayerPos(i,X,Y,Z);
if(IsPlayerInRangeOfPoint(playerid,5.0,X,Y,Z))
{
    if(!IsPlayerBehindPlayer(i, playerid, 90))//ez csak arra kell hogy biztos ne legyen mögötte
    {
        if(IsPlayerFacingPoint(i, 60, X,Y,Z))//ezt a szöget úgy állítsd be ahogy neked jó. Ez a szög az a szög ami a \"látószöget\" nézi hogy benne vagy e abban a részben ahol teleportálni kell
        {
      //teleportálod
   }
}
}
}

 
Lehet hogy neked az IsPlayerFacingPointnem is kell bele majd próbûld ki ugyis, akkor az lesz hogy a játékos elötti fékörben teleportálja a játékosokat
« Utoljára szerkesztve: 2012. június 24. - 16:13:07 írta hegdavid95 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal