Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2010
2,654
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.13 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // Credits:
  3. // Script erstellt von Stas
  4. // Offizieller Scripter der Xtreme - RolePlay - Community
  5. // www.xtreme-roleplay.eu
  6. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  7. // Includes
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. #include <a_samp>
  10. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  11. // Macros
  12. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  13. #define SENDE_NACHRICHT // ausklammmern, falls unerwünscht
  14. #define WAFFE_9MM    (22)
  15. #define WAFFE_9MMs   (23)
  16. #define WAFFE_DEAGLE (24)
  17. #define WAFFE_GEWEHR (33)
  18. #define WAFFE_SNIPER (34)
  19. #define GEDRUECKT(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  20. #define SPIELER_GEDUCKT(%1) GetPlayerSpecialAction(%1) == SPECIAL_ACTION_DUCK
  21. #define HAT_GESCHOSSEN(%1) GetPVarInt(%1, "HEADSHOT_GESCHOSSEN")
  22. #define SETZE_GESCHOSSEN(%1) SetPVarInt(%1, "HEADSHOT_GESCHOSSEN", 1)
  23. #define SETZE_NICHT_GESCHOSSEN(%1) SetPVarInt(%1, "HEADSHOT_GESCHOSSEN", 0)
  24. #define TOETESPIELER(%1) SetPlayerHealth(%1, 0)
  25. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26. // CallBacks
  27. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  28. // Überprüft, ob Spieler mit der Sniper abschießt
  29. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  30.     if(GEDRUECKT(KEY_FIRE) && ValideWaffe(playerid)) {
  31.         if(!HAT_GESCHOSSEN(playerid)) {
  32.             SETZE_GESCHOSSEN(playerid);
  33.             SetTimerEx("Headshot_AntiSpam", 1000, false, "d", playerid);
  34.             Headshot_ErmittleZielperson(playerid);
  35.         }
  36.     }
  37.     return 1;
  38. }
  39. // Setzt das AntiSpam
  40. forward Headshot_AntiSpam(playerid);
  41. public Headshot_AntiSpam(playerid) {
  42.     SETZE_NICHT_GESCHOSSEN(playerid);
  43.     return 1;
  44. }
  45. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. // private Funktionen
  47. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. // Hier könnt ihr die Waffen setzen, mit welchen man Kopfschüße machen kann
  49. stock ValideWaffe(waffe)
  50. {
  51.     new ValideWaffen[] = { WAFFE_SNIPER, WAFFE_DEAGLE, WAFFE_9MM, WAFFE_9MMs, WAFFE_GEWEHR };
  52.     for(new index = 0; index < sizeof(ValideWaffen); index++)
  53.     {
  54.         if(GetPlayerWeapon(waffe) == ValideWaffen[index]) return 1;
  55.     }
  56.     return 0;
  57. }
  58. // Überprüft, ob Spieler die Zielperson in den Kopf trifft
  59. stock Headshot_ErmittleZielperson(playerid) {
  60.     // Erstellen der Speicherstellen für die Koordinaten des Vektors und der Kamera
  61.     new Float:x,Float:y,Float:z,Float:FrontX,Float:FrontY,Float:FrontZ,Float:CamX,Float:CamY,Float:CamZ;
  62.     // Setzen der Koordinaten in die Variablen
  63.     // Funktionen werden im Tutorial erklärt
  64.     GetPlayerCameraFrontVector(playerid, FrontX, FrontY, FrontZ);
  65.     GetPlayerCameraPos(playerid, CamX, CamY, CamZ);
  66.     for(new Float:i = 0.0; i < 100; i = i + 0.5) {
  67.         // Berechnung der Koordinaten mit Hilfe einer bekannten Rechnung
  68.         x = FrontX * i + CamX; y = FrontY * i + CamY; z = FrontZ * i + CamZ;
  69.         for(new zielperson = 0; zielperson < MAX_PLAYERS; zielperson ++) {
  70.             if(IsPlayerConnected(zielperson)) {
  71.                 // Spieler kann sich zwar nicht selber anschießen, aber wir gehen auf eine Nummer sicher
  72.                 if(zielperson != playerid) {
  73.                     // Falls die Zielperson geduckt
  74.                     if(SPIELER_GEDUCKT(zielperson)) {
  75.                         // Überprüfen, ob die Zielperson tatsächlich auf den berechneten Koodinaten ist
  76.                         if(IsPlayerInRangeOfPoint(zielperson, 0.4, x, y, z)) {
  77.                             GameTextForPlayer(playerid, "~r~HEADSHOT", 2000, 6); // GameText für den Spieler
  78.                             GameTextForPlayer(zielperson, "~r~HEADSHOT!", 2000, 6); // GameText für die Zielperson
  79.                             TOETESPIELER(zielperson); // Töten der Tielperson
  80.                             #if defined SENDE_NACHRICHT
  81.                                 SendDeathMessage(playerid, zielperson, 34);
  82.                             #endif
  83.                         }
  84.                     }
  85.                     // Falls die Zielperson steht
  86.                     else {
  87.                         // Überprüfen, ob die Zielperson tatsächlich auf den berechneten Koodinaten ist
  88.                         if(IsPlayerInRangeOfPoint(zielperson, 0.4, x, y, z - 0.7)){
  89.                             GameTextForPlayer(playerid, "~r~HEADSHOT", 2000, 6); // GameText für den Spieler
  90.                             GameTextForPlayer(zielperson, "~r~HEADSHOT", 2000, 6); // GameText für die Zielperson
  91.                             TOETESPIELER(zielperson); // Töten der Tielperson
  92.                             #if defined SENDE_NACHRICHT
  93.                                 SendDeathMessage(playerid, zielperson, 34);
  94.                             #endif
  95.                         }
  96.                     }
  97.                 }
  98.             }
  99.         }
  100.     }
  101.     return 1;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement