Spieler - Winkelberechnung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Es gibt Neuigkeiten! Ab sofort könnt ihr dem Donators Club auf Lebenszeit beitreten.
Weitere Infos im Thema Donator's Club ab heute wieder verfügbar!

  • Spieler - Winkelberechnung

    Ich nutze die Funktion von niCe aus dem englischen SAMP Forum.
    Mir ist aber aufgefallen das diese Rechnung nur für das genaue drauf schauen gedacht ist und nicht zum Objekt selber stehen.

    Was meine ich genau?
    Diese Funktion reagiert positiv auf dieses Bild, da ich in die Richtung schaue.



    Sie soll aber erst reagieren wenn ich wirklich im vollen möglichem Umfang davor stehe.. sprich so:



    niCe sein Quellcode

    PAWN-Quellcode

    1. //By niCe (c)
    2. stock Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ)
    3. {
    4. new Float:TGTDistance, Float:tmpX, Float:tmpY, Float:tmpZ;
    5. TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
    6. tmpX = FrX * TGTDistance + CamX;
    7. tmpY = FrY * TGTDistance + CamY;
    8. tmpZ = FrZ * TGTDistance + CamZ;
    9. return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
    10. }
    11. stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y)
    12. {
    13. new Float:DX, Float:DY;
    14. new Float:angle;
    15. DX = floatabs(floatsub(x2,X));
    16. DY = floatabs(floatsub(y2,Y));
    17. if (DY == 0.0 || DX == 0.0)
    18. {
    19. if(DY == 0 && DX > 0) angle = 0.0;
    20. else if(DY == 0 && DX < 0) angle = 180.0;
    21. else if(DY > 0 && DX == 0) angle = 90.0;
    22. else if(DY < 0 && DX == 0) angle = 270.0;
    23. else if(DY == 0 && DX == 0) angle = 0.0;
    24. }
    25. else
    26. {
    27. angle = atan(DX/DY);
    28. if(X > x2 && Y <= y2) angle += 90.0;
    29. else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
    30. else if(X < x2 && Y >= y2) angle -= 90.0;
    31. else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
    32. }
    33. return floatadd(angle, 90.0);
    34. }
    35. stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance)
    36. {
    37. x += (distance * floatsin(-angle, degrees));
    38. y += (distance * floatcos(-angle, degrees));
    39. return 1;
    40. }
    41. stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
    42. {
    43. new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z, Float:vertical, Float:horizontal;
    44. GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
    45. GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);
    46. switch (GetPlayerWeapon(playerid))
    47. {
    48. case 34..36:
    49. {
    50. if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
    51. return false;
    52. }
    53. case 30,31: {vertical = 4.0; horizontal = -1.6;}
    54. case 33: {vertical = 2.7; horizontal = -1.0;}
    55. default: {vertical = 6.0; horizontal = -2.2;}
    56. }
    57. new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
    58. new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
    59. GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));
    60. if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
    61. return 0;
    62. }
    63. stock IsPlayerAimingAtPlayer(playerid, targetplayerid)
    64. {
    65. new Float:x, Float:y, Float:z;
    66. GetPlayerPos(targetplayerid, x, y, z);
    67. return IsPlayerAimingAt(playerid, x, y, z, 1.1);
    68. }
    69. stock IsPlayerAimingAtObject(playerid, targetobject)
    70. {
    71. new Float:x, Float:y, Float:z;
    72. GetObjectPos(targetobject, x, y, z);
    73. return IsPlayerAimingAt(playerid, x, y, z, 1.1);
    74. }
    Alles anzeigen
    Рыба лично :rolleyes:
  • Give it a try:

    C-Quellcode

    1. stock IsPlayerTargetATM(playerid, objectid)
    2. {
    3. new r,a,Float:t;
    4. GetObjectRot(objectid,t,t,t),r=floatround(t);
    5. GetPlayerFacingAngle(playerid,t),a=floatround(t);
    6. new Float:x,Float:y,Float:z;
    7. GetObjectPos(objectid,x,y,z),GetPlayerPos(playerid,z,z,z);
    8. x -= 0.6 * floatsin(-a, degrees);
    9. y -= 0.6 * floatcos(-a, degrees);
    10. if(GetPlayerDistanceFromPoint(playerid,x,y,z) > 0.2) return 0; //Er steht nicht direkt davor!
    11. return (((a-45)%360) >= ((r-45)%360)) || (((a+45)%360) <= ((r+45)%360)); //Er schaut den ATM nicht an
    12. }
    Alles anzeigen


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/