Szerző Téma: IsPlayerAimingAtPlayer  (Megtekintve 2093 alkalommal)

Gang[St]e[R]

  • Vendég
IsPlayerAimingAtPlayer
« Dátum: 2011. március 27. - 00:10:23 »
0 Show voters
Üdv.
Ez egy olyan fügvény amely lekérdezi azt ,hogy rálcélzol e egy másik játékosra vagy sem.
Készítõ: niCe
 

#include <a_samp>
#define PRESSED(%0) \\
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (PRESSED(KEY_FIRE))
{
        for(new i; i < MAX_PLAYERS; i++)
{
   if(IsPlayerAimingAtPlayer(playerid,i) && playerid != i)
   {
                        // ide ,hogy mitörténjen ha az egyik játékos meglövi a másikat
   }
}
}
return 1;
}
stock IsHeadshot(playerid, targetplayerid)
{
  new Float:x, Float:y, Float:z;
  GetPlayerPos(targetplayerid, x, y, z);
  return IsPlayerAimingAt(playerid, x, y, z+0.8, 0.2);
}
stock IsPlayerAimingAtPlayer(playerid, targetplayerid)
{
  new Float:x, Float:y, Float:z;
  GetPlayerPos(targetplayerid, x, y, z);
  return IsPlayerAimingAt(playerid, x, y, z, 1.1);
}
Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) {
new Float:TGTDistance;
TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
new Float:tmpX, Float:tmpY, Float:tmpZ;
tmpX = FrX * TGTDistance + CamX;
tmpY = FrY * TGTDistance + CamY;
tmpZ = FrZ * TGTDistance + CamZ;
return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {
  new Float:DX, Float:DY;
  new Float:angle;
  DX = floatabs(floatsub(x2,X));
  DY = floatabs(floatsub(y2,Y));
  if (DY == 0.0 || DX == 0.0) {
    if(DY == 0 && DX > 0) angle = 0.0;
    else if(DY == 0 && DX < 0) angle = 180.0;
    else if(DY > 0 && DX == 0) angle = 90.0;
    else if(DY < 0 && DX == 0) angle = 270.0;
    else if(DY == 0 && DX == 0) angle = 0.0;
  }
  else {
    angle = atan(DX/DY);
    if(X > x2 && Y <= y2) angle += 90.0;
    else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
    else if(X < x2 && Y >= y2) angle -= 90.0;
    else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
  }
  return floatadd(angle, 90.0);
}
stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance)
{
x += (distance * floatsin(-angle, degrees));
y += (distance * floatcos(-angle, degrees));
}
stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
{
     new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z;
     GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
     GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);
new Float:vertical, Float:horizontal;
switch (GetPlayerWeapon(playerid)) {
  case 34,35,36: {
  if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
  return false;
  }
  case 30,31: {vertical = 4.0; horizontal = -1.6;}
  case 33: {vertical = 2.7; horizontal = -1.0;}
  default: {vertical = 6.0; horizontal = -2.2;}
}
new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
     new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
     GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));
     if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
     return false;
}

 
Magyarázatok:
- player  az a játékos aki lõ
- i  az összes játékos akire lõnek
- IsHeadshot ha a játékos fejlövést adott akkor ebben a stockban megadhatjuk mitörténjen
« Utoljára szerkesztve: 2011. november 14. - 22:41:43 írta Zsolesszka »

IsPlayerAimingAtPlayer
« Válasz #1 Dátum: 2011. március 27. - 12:06:38 »
0 Show voters
Mûködik? Mindjárt átnézem a kódot

Nem elérhető Bart

  • 4111
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #2 Dátum: 2011. március 27. - 14:32:14 »
0 Show voters
Persze mûködik! :)
Énis szoktam használni.
Ez niCe függvénye nem?  ::|

Gang[St]e[R]

  • Vendég
IsPlayerAimingAtPlayer
« Válasz #3 Dátum: 2011. március 27. - 15:59:26 »
0 Show voters
A készítõt azért nem tettem ki ,mert foggalmamnincs kiaz forum.sa-mp.com on kerestem ,de még nem találtam. majd utánajárok. Persze ,hogy mûködik én is használom!

Nem elérhető Bart

  • 4111
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #4 Dátum: 2011. március 27. - 18:54:54 »
0 Show voters
Én meg tudom mondani, hogy ki a készítõ:
niCe

Nem elérhető Iceaac

  • 2187
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #5 Dátum: 2011. március 27. - 19:13:51 »
0 Show voters
Jó függvény, de ennél pontosabban is meg lehet oldani.  :)

Gang[St]e[R]

  • Vendég
IsPlayerAimingAtPlayer
« Válasz #6 Dátum: 2011. április 07. - 15:02:09 »
0 Show voters
Idézetet írta: Iceaac date=1301246031\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7104\" data-ipsquote-contentclass=\"forums_Topic
Jó függvény, de ennél pontosabban is meg lehet oldani.  :)
 
Elvileg ez 98% osan pontos. Van más fügvény vagy mivel lehet pontosabban megoldani?

Nem elérhető Iceaac

  • 2187
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #7 Dátum: 2011. április 09. - 10:35:56 »
0 Show voters
\" post=\"127868\" timestamp=\"1302181329\"]

Jó függvény, de ennél pontosabban is meg lehet oldani.  :)
 
[/quote]
Elvileg ez 98% osan pontos. Van más fügvény vagy mivel lehet pontosabban megoldani?
 
[/quote]Van, csak nem publikálom.  :)

Gang[St]e[R]

  • Vendég
IsPlayerAimingAtPlayer
« Válasz #8 Dátum: 2011. április 09. - 11:41:32 »
0 Show voters
Idézetet írta: Iceaac date=1302338156\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7104\" data-ipsquote-contentclass=\"forums_Topic

link=topic=11034.msg127868#msg127868 date=1302181329]

Jó függvény, de ennél pontosabban is meg lehet oldani.  :)
 
Elvileg ez 98% osan pontos. Van más fügvény vagy mivel lehet pontosabban megoldani?
 
[/quote]Van, csak nem publikálom.  :)
[/quote]
Te írtad?

Nem elérhető Iceaac

  • 2187
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #9 Dátum: 2011. április 09. - 12:50:38 »
0 Show voters
\" post=\"128457\" timestamp=\"1302342092\"]

 
link=topic=11034.msg127868#msg127868 date=1302181329]

Jó függvény, de ennél pontosabban is meg lehet oldani.  :)
 
[/quote]
Elvileg ez 98% osan pontos. Van más fügvény vagy mivel lehet pontosabban megoldani?
 
[/quote]Van, csak nem publikálom.  :)
[/quote]
Te írtad?
 
[/quote]Szerkesztettem.

Nem elérhető Bart

  • 4111
    • Profil megtekintése
IsPlayerAimingAtPlayer
« Válasz #10 Dátum: 2011. április 15. - 15:57:57 »
0 Show voters
Ebben csak az a gond, hogy mondjuk falon keresztül is HS-t lehet adni :D

Gang[St]e[R]

  • Vendég
IsPlayerAimingAtPlayer
« Válasz #11 Dátum: 2011. május 20. - 19:07:14 »
0 Show voters
Meg ez a saját kameránk alapján egy adott kordinátákat figyel, és ha például hátrafordulunk a kiszemelt játékosnak ,de a kamera pos rajta van akkor is annak veszi.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal