Chaoz

Callbackz 2.0

Sep 6th, 2011
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 33.31 KB | None | 0 0
  1. /*
  2. |===========================================================================|
  3. |                                  CREDITS                                  |
  4. |---------------------------------------------------------------------------|
  5. |JernejL        =>  GetPlayerFPS & Reconnect method, & encode_tires Function|
  6. |Double-O-Seven =>  Cross Product Functions                                 |
  7. |Nero_3D        =>  AdjustVector & GetPlayerCameraWeaponVector Functions    |
  8. |wups           =>  OnPlayerShootPlayer                                     |
  9. |Y_Less         =>  YSI                                                     |
  10. |The Chaoz      =>  Scripting                                               |
  11. |===========================================================================|
  12. */
  13.  
  14. #if !defined _CBz_INCLUDED
  15.     #define _CBz_INCLUDED
  16. #else
  17.     #endinput
  18. #endif
  19.  
  20. #include <YSI\y_hooks>
  21. #tryinclude <foreach>
  22.  
  23. #define PUBLIC:%0(%1)   \
  24.     forward %0(%1); public %0(%1)
  25.  
  26. #if !defined PRESSED
  27.     #define PRESSED(%0) \
  28.         (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  29. #endif
  30. #if !defined RELEASED
  31.     #define RELEASED(%0)    \
  32.         (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  33. #endif
  34.  
  35. #if !defined LOWER
  36.     #define LOWER(%0)   \
  37.         for(new index; index<strlen(%0); index++)if(%0[index]>64 && %0[index]<91)%0[index] += 32
  38. #endif
  39.  
  40. #if !defined foreach
  41.         #define foreach(%1,%2) for(new %2; %2<GetMaxPlayers(); %2++) if(IsPlayerConnected(%2))
  42.         #define __SSCANF_FOREACH__
  43. #endif
  44.  
  45. #define INVALID_VEHICLE_TYPE        (-1)
  46. #define VEHICLE_TYPE_AIRPLANE       (0)
  47. #define VEHICLE_TYPE_HELICOPTER     (1)
  48. #define VEHICLE_TYPE_BIKE           (2)
  49. #define VEHICLE_TYPE_CONVERTIBLE    (3)
  50. #define VEHICLE_TYPE_INDUSTRIAL     (4)
  51. #define VEHICLE_TYPE_LOWRIDER       (5)
  52. #define VEHICLE_TYPE_OFFROAD        (6)
  53. #define VEHICLE_TYPE_PUBLICSERV     (7)
  54. #define VEHICLE_TYPE_SALOON         (8)
  55. #define VEHICLE_TYPE_SPORT          (9)
  56. #define VEHICLE_TYPE_STATION        (10)
  57. #define VEHICLE_TYPE_BOAT           (11)
  58. #define VEHICLE_TYPE_TRAILER        (12)
  59. #define VEHICLE_TYPE_UNIQUE         (13)
  60. #define VEHICLE_TYPE_RC             (14)
  61.  
  62. #define PAUSE_TIME                  (5)
  63.  
  64. //config
  65. #define AFK_TIME                    (30)
  66. #define INTERVAL                    (350)
  67. #define MAX_BWORDS                  (400)
  68. #define MAX_BNAMES                  (100)
  69. #define ENGLISH             //comment this line to use spanish languaje on messajes
  70.  
  71. #define USE_VEHICLE_DATA    //coment this line to disable vehicle callbacks & functions
  72. #define USE_OPSP            //coment this line to disable OnPlayerShootPlayer Callback
  73.  
  74. enum _I{
  75.     bool:pAFK,
  76.     bool:pPaused,
  77.     bool:pInWater,
  78.     #if defined USE_OPSP
  79.         bool:pShoting,
  80.         bool:pUpdatedHealth,
  81.         pTReleased,
  82.     #endif
  83.     bool:pParachuting,
  84.     bool:pMachine,
  85.     bool:pDriveBy,
  86.     bool:pIntDamage,
  87.     bool:pReconnect,
  88.     bool:pUseMachine,
  89.     bool:pPlayingAnim,
  90.     bool:pCaps,
  91.     bool:pVend,
  92.     Float:pP[4],
  93.     pTimer,
  94.     pTime[2],
  95.     pWeap,
  96.     pVWorld,
  97.     Float:pHealth,
  98.     Float:pArmour,
  99.     pMoney,
  100.     pScore,
  101.     pWeaps[13],
  102.     pAmmo[13],
  103.     pFPS,
  104.     pDrk,
  105.     pIP[16]
  106. };
  107.  
  108. #if defined USE_VEHICLE_DATA
  109.     enum _V{
  110.         bool:vCreated,
  111.         bool:vTires,
  112.         vColor[2],
  113.         vPlate[32],
  114.         vInterior,
  115.     };
  116. #endif
  117.  
  118. enum _S{
  119.     bool:sDriveby=true,
  120.     bool:sCaps=true,
  121.     bool:sVending=true,
  122.     bool:sIntDamage=true
  123. };
  124.  
  125. new I[MAX_PLAYERS][_I], S[_S], File:Fhnd,
  126.     #if defined USE_VEHICLE_DATA
  127.         V[MAX_VEHICLES+1][_V],
  128.     #endif
  129.     bWordsC, bWords[MAX_BWORDS][16],
  130.     bNamesC, bNames[MAX_BNAMES][MAX_PLAYER_NAME];
  131.  
  132. forward OnPlayerPause(playerid);
  133. forward OnPlayerAFK(playerid);
  134. forward OnPlayerWeaponChange(playerid, newweaponid, oldweaponid);
  135. forward OnPlayerVirtualWorldChange(playerid, newworldid, oldworldid);
  136. forward OnPlayerEnterWater(playerid);
  137. forward OnPlayerExitWater(playerid);
  138. forward OnPlayerHealthChange(playerid, Float:newhealth, Float:oldhealth);
  139. forward OnPlayerArmourChange(playerid, Float:newarmour, Float:oldarmour);
  140. forward OnPlayerMoneyChange(playerid, newmoney, oldmoney);
  141. forward OnPlayerUseVendingMachine(playerid);
  142. forward OnPlayerPlayAnimation(playerid, Lib[], Name[]);
  143. forward OnPlayerScoreChange(playerid, newscore, oldscore);
  144. #if defined USE_OPSP
  145.     forward OnPlayerShotPlayer(playerid, targetid, Float:health, Float:armour, weaponid);
  146. #endif
  147. #if defined USE_VEHICLE_DATA
  148.     forward OnVehicleCreate(vehicleid);
  149.     forward OnVehicleDestroy(vehicleid);
  150. #endif
  151.  
  152. #if defined FILTERSCRIPT
  153.     Hook:CBz_OnFilterScriptInit()
  154.     {
  155.         if(fexist("ForbidenNames.cfg")){
  156.             new line[64];
  157.             Fhnd = fopen("ForbidenNames.cfg", io_read);
  158.             while(fread(Fhnd, line)){
  159.                 for(new i; i<strlen(line); i++)if(line[i] == '\r' || line[i] == '\n')line[i] = '\0';
  160.                 if(strlen(line)){
  161.                     format(bNames[bNamesC], MAX_PLAYER_NAME, "%s", line);
  162.                     bNamesC++;
  163.                 }
  164.             }
  165.         }
  166.         if(fexist("ForbidenWords.cfg")){
  167.             new line[64];
  168.             Fhnd = fopen("ForbidenWords.cfg", io_read);
  169.             while(fread(Fhnd, line)){
  170.                 for(new i; i<strlen(line); i++)if(line[i] == '\r' || line[i] == '\n')line[i] = '\0';
  171.                 if(strlen(line)){
  172.                     format(bWords[bWordsC], MAX_PLAYER_NAME, "%s", line);
  173.                     bWordsC++;
  174.                 }
  175.             }
  176.         }
  177.         new str[128];
  178.         foreach(Player, i){
  179.             if(!IsPlayerNPC(i)){
  180.                 if(!IsPlayerAdmin(i)){
  181.                     GetPlayerName(i, str, MAX_PLAYER_NAME);
  182.                     for(new j; j<bNamesC; j++){
  183.                         if(!strcmp(str, bNames[j], true)){
  184.                             #if defined ENGLISH
  185.                                 format(str, 128, "%s(%i) has been automaticaly kicked. [Reason: Forbiden nick]", str, i);
  186.                                 SendClientMessage(i, 0xFF0000FF, "Forbiden nick.");
  187.                             #else
  188.                                 format(str, 128, "%s(%i) fue kickeado automaticamente. [Reason: Nick prohibido]", str, i);
  189.                                 SendClientMessage(i, 0xFF0000FF, "Nick prohibido.");
  190.                             #endif
  191.                             Kick(i);
  192.                             return SendClientMessageToAll(0xA6A6A6FF, str);
  193.                         }
  194.                     }
  195.                 }
  196.                 ResetPlayer(i);
  197.                 I[i][pTime][1] = GetTickCount();
  198.                 GetPlayerHealth(i, I[i][pHealth]);
  199.                 GetPlayerArmour(i, I[i][pArmour]);
  200.                 I[i][pWeap] = GetPlayerWeapon(i);
  201.                 I[i][pMoney] = GetPlayerMoney(i);
  202.                 I[i][pTimer] = SetTimerEx("Check", INTERVAL, true, "i", i);
  203.             }
  204.         }
  205.         return 1;
  206.     }
  207.  
  208.     Hook:CBz_OnFilterScriptExit()
  209.     {
  210.         foreach(Player, i){
  211.             if(!IsPlayerNPC(i)){
  212.                 if(I[i][pTimer])KillTimer(I[i][pTimer]);
  213.                 if(I[i][pReconnect]){
  214.                     new cmdstr[25];
  215.                     format(cmdstr, 23, "unbanip %s", I[i][pIP]);
  216.                     SendRconCommand(cmdstr);
  217.                     SendRconCommand("reloadbans");
  218.                 }
  219.             }
  220.         }
  221.         Fhnd = fopen("ForbidenNames.cfg", io_write);
  222.         for(new j; j<bNamesC; j++){
  223.             fwrite(Fhnd, bNames[j]);
  224.             fwrite(Fhnd, "\r\n");
  225.         }
  226.         fclose(Fhnd);
  227.         Fhnd = fopen("ForbidenWords.cfg", io_write);
  228.         for(new j; j<bWordsC; j++){
  229.             fwrite(Fhnd, bWords[j]);
  230.             fwrite(Fhnd, "\r\n");
  231.         }
  232.         fclose(Fhnd);
  233.         return 1;
  234.     }
  235. #else
  236.     Hook:CBz_OnGameModeInit()
  237.     {
  238.         if(fexist("ForbidenNames.cfg")){
  239.             new line[64];
  240.             Fhnd = fopen("ForbidenNames.cfg", io_read);
  241.             while(fread(Fhnd, line)){
  242.                 for(new i; i<strlen(line); i++)if(line[i] == '\r' || line[i] == '\n')line[i] = '\0';
  243.                 if(strlen(line)){
  244.                     format(bNames[bNamesC], MAX_PLAYER_NAME, "%s", line);
  245.                     bNamesC++;
  246.                 }
  247.             }
  248.         }
  249.         if(fexist("ForbidenWords.cfg")){
  250.             new line[64];
  251.             Fhnd = fopen("ForbidenWords.cfg", io_read);
  252.             while(fread(Fhnd, line)){
  253.                 for(new i; i<strlen(line); i++)if(line[i] == '\r' || line[i] == '\n')line[i] = '\0';
  254.                 if(strlen(line)){
  255.                     format(bWords[bWordsC], MAX_PLAYER_NAME, "%s", line);
  256.                     bWordsC++;
  257.                 }
  258.             }
  259.         }
  260.         new str[128];
  261.         foreach(Player, i){
  262.             if(!IsPlayerNPC(i)){
  263.                 if(!IsPlayerAdmin(i)){
  264.                     GetPlayerName(i, str, MAX_PLAYER_NAME);
  265.                     for(new j; j<bNamesC; j++){
  266.                         if(!strcmp(str, bNames[j], true)){
  267.                             #if defined ENGLISH
  268.                                 format(str, 128, "%s(%i) has been automaticaly kicked. [Reason: Forbiden nick]", str, i);
  269.                                 SendClientMessage(i, 0xFF0000FF, "Forbiden nick.");
  270.                             #else
  271.                                 format(str, 128, "%s(%i) fue kickeado automaticamente. [Reason: Nick prohibido]", str, i);
  272.                                 SendClientMessage(i, 0xFF0000FF, "Nick prohibido.");
  273.                             #endif
  274.                             Kick(i);
  275.                             return SendClientMessageToAll(0xA6A6A6FF, str);
  276.                         }
  277.                     }
  278.                 }
  279.                 ResetPlayer(i);
  280.                 I[i][pTime][1] = GetTickCount();
  281.                 GetPlayerHealth(i, I[i][pHealth]);
  282.                 GetPlayerArmour(i, I[i][pArmour]);
  283.                 I[i][pWeap] = GetPlayerWeapon(i);
  284.                 I[i][pMoney] = GetPlayerMoney(i);
  285.                 I[i][pTimer] = SetTimerEx("Check", INTERVAL, true, "i", i);
  286.             }
  287.         }
  288.         return 1;
  289.     }
  290.  
  291.     Hook:CBz_OnGameModeExit()
  292.     {
  293.         foreach(Player, i){
  294.             if(!IsPlayerNPC(i)){
  295.                 if(I[i][pTimer])KillTimer(I[i][pTimer]);
  296.                 if(I[i][pReconnect]){
  297.                     new cmdstr[25];
  298.                     format(cmdstr, 23, "unbanip %s", I[i][pIP]);
  299.                     SendRconCommand(cmdstr);
  300.                     SendRconCommand("reloadbans");
  301.                 }
  302.             }
  303.         }
  304.         Fhnd = fopen("ForbidenNames.cfg", io_write);
  305.         for(new j; j<bNamesC; j++){
  306.             fwrite(Fhnd, bNames[j]);
  307.             fwrite(Fhnd, "\r\n");
  308.         }
  309.         fclose(Fhnd);
  310.         Fhnd = fopen("ForbidenWords.cfg", io_write);
  311.         for(new j; j<bWordsC; j++){
  312.             fwrite(Fhnd, bWords[j]);
  313.             fwrite(Fhnd, "\r\n");
  314.         }
  315.         fclose(Fhnd);
  316.         return 1;
  317.     }
  318. #endif
  319.  
  320. Hook:CBz_OnPlayerConnect(playerid)
  321. {
  322.     if(IsPlayerNPC(playerid))return 1;
  323.     ResetPlayer(playerid);
  324.     I[playerid][pTimer] = SetTimerEx("Check", INTERVAL, true, "i", playerid);
  325.     I[playerid][pTime][1] = GetTickCount();
  326.     new str[128], name[MAX_PLAYER_NAME];
  327.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  328.     for(new i; i<bNamesC; i++){
  329.         if(!strcmp(name, bNames[i], true)){
  330.             #if defined ENGLISH
  331.                 format(str, sizeof(str), "%s(%i) has been automaticaly kicked. [Reason: Forbiden nick]", name, playerid);
  332.                 SendClientMessage(playerid, 0xFF0000FF, "Forbiden nick.");
  333.             #else
  334.                 format(str, sizeof(str), "%s(%i) fue kickeado automaticamente. [Reason: Nick prohibido]", name, playerid);
  335.                 SendClientMessage(playerid, 0xFF0000FF, "Nick prohibido.");
  336.             #endif
  337.             Kick(playerid);
  338.             return SendClientMessageToAll(0xA6A6A6FF, str);
  339.         }
  340.     }
  341.     return 1;
  342. }
  343.  
  344. Hook:CBz_OnPlayerDisconnect(playerid, reason)
  345. {
  346.     if(I[playerid][pTimer])KillTimer(I[playerid][pTimer]);
  347.     if(I[playerid][pReconnect]){
  348.         new cmdstr[25];
  349.         I[playerid][pReconnect] = false;
  350.         format(cmdstr, 23, "unbanip %s", I[playerid][pIP]);
  351.         SendRconCommand(cmdstr);
  352.         SendRconCommand("reloadbans");
  353.     }
  354.     return 1;
  355. }
  356.  
  357. Hook:CBz_OnPlayerSpawn(playerid)
  358. {
  359.     I[playerid][pTime][0] = GetTickCount();
  360.     I[playerid][pWeap] = GetPlayerWeapon(playerid);
  361.     I[playerid][pVWorld] = GetPlayerVirtualWorld(playerid);
  362.     _SetPlayerHealth(playerid, 100);
  363.     SetTimerEx("GetWeaps", 500, false, "i", playerid);
  364.     return 1;
  365. }
  366.  
  367. Hook:CBz_OnPlayerDeath(playerid, killerid, reason)
  368. {
  369.     I[playerid][pTime][0] = GetTickCount();
  370.     I[playerid][pHealth] = 0;
  371.     return 1;
  372. }
  373.  
  374. Hook:CBz_OnPlayerText(playerid, text[])
  375. {
  376.     I[playerid][pTime][1] = GetTickCount();
  377.     I[playerid][pTime][0] = GetTickCount();
  378.     if(!I[playerid][pCaps])LOWER(text);
  379.     new pos;
  380.     for(new i; i<bWordsC; i++){
  381.         pos = strfind(text, bWords[i]);
  382.         if(pos != -1)for(new j=pos; j<(pos+strlen(bWords[i])); j++)text[j] = '*';
  383.     }
  384.     return 1;
  385. }
  386.  
  387. Hook:CBz_OnPlayerCommandText(playerid, cmdtext[])
  388. {
  389.     I[playerid][pTime][1] = GetTickCount();
  390.     I[playerid][pTime][0] = GetTickCount();
  391.     return 1;
  392. }
  393.  
  394. Hook:OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  395. {
  396.     if(!I[playerid][pIntDamage]){
  397.         if(!newinteriorid)for(new i; i<13; i++)GivePlayerWeapon(playerid, I[playerid][pWeaps][i], I[playerid][pAmmo][i]);
  398.         else{
  399.             for(new i; i<13; i++)GetPlayerWeaponData(playerid, i, I[playerid][pWeaps][i], I[playerid][pAmmo][i]);
  400.             ResetPlayerWeapons(playerid);
  401.         }
  402.     }
  403.     return 1;
  404. }
  405.  
  406. Hook:CBz_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  407. {
  408.     I[playerid][pTime][1] = GetTickCount();
  409.     #if defined USE_OPSP
  410.         if(I[playerid][pWeap]){
  411.             if(PRESSED(KEY_FIRE) || PRESSED(KEY_SECONDARY_ATTACK)){
  412.                 I[playerid][pShoting] = true;
  413.             }
  414.             else if(RELEASED(KEY_FIRE) || RELEASED(KEY_SECONDARY_ATTACK)){
  415.                 I[playerid][pShoting] = false;
  416.                 I[playerid][pTReleased] = GetTickCount();
  417.             }
  418.         }
  419.     #endif
  420.     return 1;
  421. }
  422.  
  423. Hook:CBz_OnPlayerStateChange(playerid, newstate, oldstate)
  424. {
  425.     new Float:rP[10], Float:HA[2];
  426.     I[playerid][pTime][1] = GetTickCount();
  427.     I[playerid][pTime][0] = GetTickCount();
  428.     #if defined USE_OPSP
  429.         if(newstate == PLAYER_STATE_WASTED){
  430.             if(I[playerid][pUpdatedHealth])I[playerid][pUpdatedHealth]=false;
  431.             else{
  432.                 new Tick = (GetTickCount()-1000);
  433.                 GetPlayerHealth(playerid, HA[0]);
  434.                 GetPlayerArmour(playerid, HA[1]);
  435.                 GetPlayerCameraPos(playerid, rP[0], rP[1], rP[2]);
  436.                 foreach(Player, i){
  437.                     if(I[i][pShoting] && i != playerid && Tick < I[i][pTReleased]){
  438.                         if(IsPlayerInRangeOfPoint(i, 200.0, I[i][pP][0], I[i][pP][1], I[i][pP][2])){
  439.                             GetPlayerCameraFrontVector(playerid, rP[3], rP[4], rP[5]);
  440.                             GetPlayerCameraPos(playerid, rP[6], rP[7], rP[8]);
  441.                             GetDistanceFromPointToLine(rP[9], rP[3], rP[4], rP[5], rP[6], rP[7], rP[8], rP[0], rP[1], rP[2]);
  442.                             if(rP[9] < 2.5){
  443.                                 CallLocalFunction("OnPlayerShotPlayer", "iiffi", i, playerid, (I[playerid][pHealth]-HA[0]), (I[playerid][pArmour]-HA[1]), I[playerid][pWeap]);
  444.                                 break;
  445.                             }
  446.                         }
  447.                     }
  448.                 }
  449.             }
  450.  
  451.         }
  452.     #endif
  453.     if(newstate == PLAYER_STATE_DRIVER){
  454.         if(!I[playerid][pDriveBy]){
  455.             for(new i; i<13; i++)GetPlayerWeaponData(playerid, i, I[playerid][pWeaps][i], I[playerid][pAmmo][i]);
  456.             ResetPlayerWeapons(playerid);
  457.         }
  458.     }
  459.     else if(newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER && !I[playerid][pDriveBy])for(new i; i<13; i++)GivePlayerWeapon(playerid, I[playerid][pWeaps][i], I[playerid][pAmmo][i]);
  460.     return 1;
  461. }
  462.  
  463. Hook:CBz_OnPlayerUpdate(playerid)
  464. {
  465.     new Float:rP[10], tmp[2];
  466.     GetPlayerPos(playerid, rP[0], rP[1], rP[2]);
  467.     GetPlayerFacingAngle(playerid, rP[3]);
  468.     #if defined USE_OPSP
  469.         new Float:HA[2];
  470.         GetPlayerHealth(playerid, HA[0]);
  471.         GetPlayerArmour(playerid, HA[1]);
  472.     #endif
  473.     tmp[0] = GetPlayerDrunkLevel(playerid);
  474.     if(floatcmp(rP[0], I[playerid][pP][0]) && floatcmp(rP[1], I[playerid][pP][1]) && floatcmp(rP[2], I[playerid][pP][2]) && floatcmp(rP[3], I[playerid][pP][3])){
  475.         GetPlayerPos(playerid, I[playerid][pP][0], I[playerid][pP][1], I[playerid][pP][2]);
  476.         GetPlayerFacingAngle(playerid, I[playerid][pP][3]);
  477.         I[playerid][pTime][1] = GetTickCount();
  478.         I[playerid][pAFK] = false;
  479.     }
  480.     #if defined USE_OPSP
  481.         if(floatcmp(HA[0], I[playerid][pHealth]) || floatcmp(HA[1], I[playerid][pArmour])){
  482.             if(I[playerid][pUpdatedHealth])I[playerid][pUpdatedHealth]=false;
  483.             else{
  484.                 new Tick = (GetTickCount()-1000);
  485.                 GetPlayerCameraPos(playerid, rP[0], rP[1], rP[2]);
  486.                 foreach(Player, i){
  487.                     if(I[i][pShoting] && i != playerid && Tick < I[i][pTReleased]){
  488.                         if(IsPlayerInRangeOfPoint(i, 200.0, I[i][pP][0], I[i][pP][1], I[i][pP][2])){
  489.                             GetPlayerCameraFrontVector(playerid, rP[3], rP[4], rP[5]);
  490.                             GetPlayerCameraPos(playerid, rP[6], rP[7], rP[8]);
  491.                             GetDistanceFromPointToLine(rP[9], rP[3], rP[4], rP[5], rP[6], rP[7], rP[8], rP[0], rP[1], rP[2]);
  492.                             if(rP[9] < 2.5){
  493.                                 CallLocalFunction("OnPlayerShotPlayer", "iiffi", i, playerid, (I[playerid][pHealth]-HA[0]), (I[playerid][pArmour]-HA[1]), I[playerid][pWeap]);
  494.                                 break;
  495.                             }
  496.                         }
  497.                     }
  498.                 }
  499.             }
  500.  
  501.         }
  502.     #endif
  503.     if(tmp[0] < 200)SetPlayerDrunkLevel(playerid, 2000);
  504.     else if(I[playerid][pDrk] != tmp[0]){
  505.         tmp[1] = I[playerid][pDrk] - tmp[0];
  506.         if(0 < tmp[1] < 200)I[playerid][pFPS] = tmp[1];
  507.         I[playerid][pDrk] = tmp[0];
  508.     }
  509.     I[playerid][pTime][0] = GetTickCount();
  510.     if(I[playerid][pPaused])I[playerid][pPaused] = false;
  511.     return 1;
  512. }
  513.  
  514. #if defined USE_VEHICLE_DATA
  515.     Hook:CBz_OnVehicleRespray(playerid, vehicleid, color1, color2)
  516.     {
  517.         V[vehicleid][vColor][0] = color1;
  518.         V[vehicleid][vColor][1] = color2;
  519.         return 1;
  520.     }
  521.  
  522.     Hook:Cbz_OnVehicleDamageStatusUpdate(vehicleid, playerid)
  523.     {
  524.         if(V[vehicleid][vTires]){
  525.             new tmp[4];
  526.             GetVehicleDamageStatus(vehicleid, tmp[0], tmp[1], tmp[2], tmp[3]);
  527.             tmp[3] = encode_tires(0, 0, 0, 0);
  528.             UpdateVehicleDamageStatus(vehicleid, tmp[0], tmp[1], tmp[2], tmp[3]);
  529.         }
  530.         return 1;
  531.     }
  532. #endif
  533.  
  534. PUBLIC:Check(playerid)
  535. {
  536.     if(!I[playerid][pAFK]){
  537.         if(!I[playerid][pPaused] && (GetTickCount()-I[playerid][pTime][0])>=(PAUSE_TIME*519)){
  538.             I[playerid][pPaused] = true;
  539.             CallLocalFunction("OnPlayerPause", "i", playerid);
  540.         }
  541.         if((GetTickCount()-I[playerid][pTime][1])>=(AFK_TIME*1000)){
  542.             I[playerid][pAFK] = true;
  543.             CallLocalFunction("OnPlayerAFK", "i", playerid);
  544.         }else I[playerid][pAFK] = false;
  545.         if(!I[playerid][pPaused]){
  546.             new tmp, Lib[2][32], Float:HA[2];
  547.             tmp = GetPlayerWeapon(playerid);
  548.             if(tmp != I[playerid][pWeap]){
  549.                 CallLocalFunction("OnPlayerWeaponChange", "iii", playerid, tmp, I[playerid][pWeap]);
  550.                 I[playerid][pWeap] = tmp;
  551.             }
  552.             tmp = GetPlayerVirtualWorld(playerid);
  553.             if(tmp != I[playerid][pVWorld]){
  554.                 CallLocalFunction("OnPlayerVirtualWorldChange", "iii", playerid, tmp, I[playerid][pVWorld]);
  555.                 I[playerid][pVWorld] = tmp;
  556.             }
  557.             tmp = GetPlayerAnimationIndex(playerid);
  558.             if(tmp){
  559.                 GetAnimationName(tmp, Lib[0], 32, Lib[1], 32);
  560.                 if(!I[playerid][pPlayingAnim])CallLocalFunction("OnPlayerPlayAnimation", "iss", playerid, Lib[0], Lib[1]);
  561.                 if(!strcmp(Lib[0], "SWIM")){
  562.                     if(!I[playerid][pInWater]){
  563.                         I[playerid][pInWater] = true;
  564.                         CallLocalFunction("OnPlayerEnterWater", "i", playerid);
  565.                     }
  566.                 }else if(I[playerid][pInWater]){
  567.                     I[playerid][pInWater] = false;
  568.                     CallLocalFunction("OnPlayerExitWater", "i", playerid);
  569.                 }
  570.                 I[playerid][pParachuting] = (!strcmp(Lib[0], "PARACHUTE") || (!strcmp(Lib[0], "ped") && !strcmp(Lib[1], "FALL_skyDive"))) ? (true) : (false);
  571.                 if(!strcmp(Lib[0], "VENDING")){
  572.                     if(!I[playerid][pMachine]){
  573.                         if(I[playerid][pUseMachine]){
  574.                             I[playerid][pMachine] = true;
  575.                             CallLocalFunction("OnPlayerUseVendingMachine", "i", playerid);
  576.                         }
  577.                         else{
  578.                             ClearAnimations(playerid, 1);
  579.                             SetTimerEx("NoVend", 40, false, "d", playerid);
  580.                             I[playerid][pVend] = true;
  581.                         }
  582.                     }
  583.                 }else I[playerid][pMachine] = false;
  584.                 I[playerid][pPlayingAnim] = true;
  585.             }else I[playerid][pPlayingAnim] = false;
  586.             if(!I[playerid][pVend]){
  587.                 GetPlayerHealth(playerid, HA[0]);
  588.                 if(floatcmp(HA[0], I[playerid][pHealth])){
  589.                     CallLocalFunction("OnPlayerHealthChange", "iff", playerid, HA[0], I[playerid][pHealth]);
  590.                     I[playerid][pHealth] = HA[0];
  591.                 }
  592.                 GetPlayerArmour(playerid, HA[1]);
  593.                 if(floatcmp(HA[1], I[playerid][pArmour])){
  594.                     CallLocalFunction("OnPlayerArmourChange", "iff", playerid, HA[0], I[playerid][pArmour]);
  595.                     I[playerid][pArmour] = HA[1];
  596.                 }
  597.                 tmp = GetPlayerMoney(playerid);
  598.                 if(tmp != I[playerid][pMoney]){
  599.                     CallLocalFunction("OnPlayerMoneyChange", "iii", playerid, tmp, I[playerid][pMoney]);
  600.                     I[playerid][pMoney] = tmp;
  601.                 }
  602.                 tmp = GetPlayerScore(playerid);
  603.                 if(tmp != I[playerid][pScore]){
  604.                     CallLocalFunction("OnPlayerScoreChange", "iii", playerid, tmp, I[playerid][pScore]);
  605.                     I[playerid][pScore] = tmp;
  606.                 }
  607.             }
  608.         }
  609.     }
  610. }
  611.  
  612. PUBLIC:GetWeaps(playerid)for(new i; i<13; i++)GetPlayerWeaponData(playerid, i, I[playerid][pWeaps][i], I[playerid][pAmmo][i]);
  613.  
  614. PUBLIC:ForceReconnect(playerid)
  615. {
  616.     new cmdstr[23];
  617.     GetPlayerIp(playerid, I[playerid][pIP], 16);
  618.     format(cmdstr, 23, "banip %s", I[playerid][pIP]);
  619.     I[playerid][pReconnect] = true;
  620.     SendRconCommand(cmdstr);
  621. }
  622.  
  623. PUBLIC:NoVend(playerid)
  624. {
  625.     _SetPlayerHealth(playerid, I[playerid][pHealth]);
  626.     GivePlayerMoney(playerid, 1);
  627.     I[playerid][pVend] = false;
  628. }
  629.  
  630. stock SetPlayerAFK(playerid, bool:afk)
  631. {
  632.     I[playerid][pAFK] = afk;
  633.     return 1;
  634. }
  635.  
  636. stock IsPlayerAFK(playerid)return I[playerid][pAFK];
  637.  
  638. stock IsPlayerPaused(playerid)return I[playerid][pPaused];
  639.  
  640. stock IsPlayerInWater(playerid)return I[playerid][pInWater];
  641.  
  642. stock IsPlayerParachuting(playerid)return I[playerid][pParachuting];
  643.  
  644. stock IsPlayerUsingMachine(playerid)return I[playerid][pMachine];
  645.  
  646. stock _SetPlayerHealth(playerid, Float:health)
  647. {
  648.     I[playerid][pHealth] = health;
  649.     I[playerid][pUpdatedHealth] = true;
  650.     return SetPlayerHealth(playerid, health);
  651. }
  652.  
  653. stock _GetPlayerHealth(playerid, &Float:health){
  654.     health = I[playerid][pHealth];
  655.     return 1;
  656. }
  657.  
  658. stock _SetPlayerArmour(playerid, Float:armour)
  659. {
  660.     I[playerid][pArmour] = armour;
  661.     I[playerid][pUpdatedHealth] = true;
  662.     return SetPlayerArmour(playerid, armour);
  663. }
  664.  
  665. stock _GetPlayerArmour(playerid, &Float:armour){
  666.     armour = I[playerid][pArmour];
  667.     return 1;
  668. }
  669.  
  670. stock _SetPlayerMoney(playerid, amount)
  671. {
  672.     I[playerid][pMoney] = amount;
  673.     return GivePlayerMoney(playerid, -GetPlayerMoney(playerid)+amount);
  674. }
  675.  
  676. stock _GivePlayerMoney(playerid, amount)
  677. {
  678.     I[playerid][pMoney] += amount;
  679.     return GivePlayerMoney(playerid, amount);
  680. }
  681.  
  682. stock _GetPlayerMoney(playerid)return I[playerid][pMoney];
  683.  
  684. stock EnableDriveBy(bool:enable)
  685. {
  686.     foreach(Player, i)I[i][pDriveBy] = enable;
  687.     S[sDriveBy] = enable;
  688.     return 1;
  689. }
  690.  
  691. stock EnablePlayerDriveBy(playerid, bool:enable)
  692. {
  693.     I[playerid][pDriveBy] = enable;
  694.     return 1;
  695. }
  696.  
  697. stock EnableInteriorDamage(bool:enable)
  698. {
  699.     foreach(Player, i)I[i][pIntDamage] = enable;
  700.     sIntDamage = enable;
  701.     return 1;
  702. }
  703.  
  704. stock EnablePlayerInteriorDamage(playerid, bool:enable)
  705. {
  706.     I[playerid][pIntDamage] = enable;
  707.     return 1;
  708. }
  709.  
  710. #if defined USE_VEHICLE_DATA
  711.     stock _AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2)
  712.     {
  713.         new vID;
  714.         if(color1 == -1)color1 = random(127);
  715.         if(color2 == -1)color2 = random(127);
  716.         vID = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2);
  717.         V[vID][vCreated] = true;
  718.         V[vID][vColor][0] = color1;
  719.         V[vID][vColor][1] = color2;
  720.         format(V[vID][vPlate], 32, "XYZR 000");
  721.         CallLocalFunction("OnVehicleCreate", "i", vID);
  722.         return vID;
  723.     }
  724.  
  725.     stock _AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay)
  726.     {
  727.         new vID;
  728.         if(color1 == -1)color1 = random(127);
  729.         if(color2 == -1)color2 = random(127);
  730.         vID = AddStaticVehicleEx(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay);
  731.         V[vID][vCreated] = true;
  732.         V[vID][vColor][0] = color1;
  733.         V[vID][vColor][1] = color2;
  734.         format(V[vID][vPlate], 32, "XYZR 000");
  735.         CallLocalFunction("OnVehicleCreate", "i", vID);
  736.         return vID;
  737.     }
  738.  
  739.     stock _CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
  740.     {
  741.         if(color1 == -1)color1 = random(127);
  742.         if(color2 == -1)color2 = random(127);
  743.         new vID = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
  744.         V[vID][vCreated] = true;
  745.         V[vID][vColor][0] = color1;
  746.         V[vID][vColor][1] = color2;
  747.         format(V[vID][vPlate], 32, "XYZR 000");
  748.         CallLocalFunction("OnVehicleCreate", "i", vID);
  749.         return vID;
  750.     }
  751.  
  752.     stock _DestroyVehicle(vehicleid)
  753.     {
  754.         V[vehicleid][vCreated] = false;
  755.         CallLocalFunction("OnVehicleDestroy", "i", vehicleid);
  756.         return DestroyVehicle(vehicleid);
  757.     }
  758.  
  759.     stock _ChangeVehicleColor(vehicleid, color1, color2)
  760.     {
  761.         V[vehicleid][vColor][0] = color1;
  762.         V[vehicleid][vColor][1] = color2;
  763.         return ChangeVehicleColor(vehicleid, color1, color2);
  764.     }
  765.  
  766.     stock _SetVehicleNumberPlate(vehicleid, numberplate[])
  767.     {
  768.         format(V[vehicleid][vPlate], 32, "%s", numberplate);
  769.         return SetVehicleNumberPlate(vehicleid, numberplate[])
  770.     }
  771.  
  772.     stock GetVehiclePlate(vehicleid, Plate[], size)
  773.     {
  774.         format(Plate, size, "%s", V[vehicleid][vPlate]);
  775.         return 1;
  776.     }
  777.  
  778.     stock GetVehicleColor(vehicleid, &color1, &color2)
  779.     {
  780.         color1 = V[vehicleid][vColor][0];
  781.         color2 = V[vehicleid][vColor][1];
  782.         return 1;
  783.     }
  784.  
  785.     stock _LinkVehicleToInterior(vehicleid, interiorid)
  786.     {
  787.         V[vehicleid][vInterior] = interiorid;
  788.         return LinkVehicleToInterior(vehicleid, interiorid);
  789.     }
  790.  
  791.     stock GetVehicleInterior(vehicleid) return V[vehicleid][vInterior];
  792.  
  793.     stock GetVehicleIDFromPlate(Plate[])
  794.     {
  795.         new i;
  796.         for(i=1; i<=MAX_VEHICLES; i++)if(V[i][vCreated] && !strcmp(V[i][vPlate], Plate))break;
  797.         if(!V[i][vCreated] || strcmp(V[i][vPlate], Plate))i=-1;
  798.         return i;
  799.     }
  800.  
  801.     stock IsVehicleCreated(vehicleid)return V[vehicleid][vCreated];
  802. #endif
  803.  
  804. stock CrashPlayer(playerid)return ApplyAnimation(playerid, "INVALID", "INVALID", 1, 0, 0, 0, 0, 0);
  805.  
  806. stock GetPlayerFPS(playerid)return I[playerid][pFPS];
  807.  
  808. stock Reconnect(playerid)
  809. {
  810.     new cmdstr[23];
  811.     GetPlayerIp(playerid, I[playerid][pIP], 16);
  812.     format(cmdstr, 23, "banip %s", I[playerid][pIP]);
  813.     I[playerid][pReconnect] = true;
  814.     return SendRconCommand(cmdstr);
  815. }
  816.  
  817. stock ReconnectEx(playerid, time)
  818. {
  819.     return SetTimerEx("ForceReconnect", time, false, "i", playerid);
  820. }
  821.  
  822. stock EnableUseVendingMachines(bool:enable)
  823. {
  824.     foreach(Player, i)I[i][pUseMachine] = enable;
  825.     S[sVending] = enable;
  826.     return 1;
  827. }
  828.  
  829. stock EnableVendingMachinesForPlayer(playerid, bool:enable)
  830. {
  831.     I[playerid][pUseMachine] = enable;
  832.     return 1;
  833. }
  834.  
  835. stock EnableCapsLock(bool:enable)
  836. {
  837.     foreach(Player, i)I[i][pCaps] = enable;
  838.     S[sCaps] = enable;
  839.     return 1;
  840. }
  841.  
  842. stock EnableCapsForPlayer(playerid, bool:enable)
  843. {
  844.     I[playerid][pCaps] = enable;
  845.     return 1;
  846. }
  847.  
  848. stock _SetPlayerScore(playerid, score)
  849. {
  850.     I[playerid][pScore] = score;
  851.     return SetPlayerScore(playerid, score);
  852. }
  853.  
  854. stock GivePlayerScore(playerid, score)
  855. {
  856.     I[playerid][pScore] += score;
  857.     return SetPlayerScore(playerid, I[playerid][pScore]);
  858. }
  859.  
  860. stock GetOnlinePlayers(bool:CountNPC)
  861. {
  862.     static c;
  863.     if(CountNPC)foreach(Player, i)c++;
  864.     else foreach(Player, i)if(!IsPlayerNPC(i))c++;
  865.     return c;
  866. }
  867.  
  868. stock AddForbidenNick(nick[])
  869. {
  870.     for(new j; j<bNamesC; j++)if(!strcmp(nick, bNames[j], true))return 0;
  871.     if(bNamesC == MAX_BNAMES-1)return 0;
  872.     format(bNames[bNamesC], MAX_PLAYER_NAME, "%s", nick);
  873.     bNamesC++;
  874.     return 1;
  875. }
  876.  
  877. stock AddForbidenWord(word[])
  878. {
  879.     for(new j; j<bWordsC; j++)if(!strcmp(word, bWords[j], true))return 0;
  880.     if(bWordsC == MAX_BWORDS-1)return 0;
  881.     format(bWords[bWordsC], 16, "%s", word);
  882.     bWordsC++;
  883.     return 1;
  884. }
  885.  
  886. stock _SetPlayerName(playerid, name[])
  887. {
  888.     if(fexist("ForbidenNames.cfg")){
  889.         new line[64];
  890.         Fhnd = fopen("ForbidenNames.cfg", io_read);
  891.         while(fread(Fhnd, line))if(!strcmp(line, name))return 0;
  892.         fclose(Fhnd);
  893.     }
  894.     return SetPlayerName(playerid, nick);
  895. }
  896.  
  897. #if defined USE_VEHICLE_DATA
  898.     stock EnableTiresDamage(bool:enable)
  899.     {
  900.         for(new i=1; i<=2000; i++)V[i][vTires] = enable;
  901.         return 1;
  902.     }
  903.  
  904.     stock EnableTiresDamageForVehicle(vehicleid, bool:enable)
  905.     {
  906.         V[vehicleid][vTires] = enable;
  907.         return 1;
  908.     }
  909.  
  910.     stock GetVehicleType(model)
  911.     {
  912.         switch(model){
  913.             case 460, 476, 511, 512, 519, 520, 553, 577, 592, 593:return VEHICLE_TYPE_AIRPLANE;
  914.             case 417, 425, 447, 469 ,487, 488, 497, 548, 563:return VEHICLE_TYPE_HELICOPTER;
  915.             case 448, 461 .. 463, 468, 471, 481, 509, 510, 521 .. 523, 581, 586:return VEHICLE_TYPE_BIKE;
  916.             case 439, 480, 533, 555:return VEHICLE_TYPE_CONVERTIBLE;
  917.             case 403, 408, 413, 414, 422, 440, 443, 455, 456, 459, 478, 482, 498, 499, 514, 515, 524, 531, 543, 552, 554, 578, 582, 600, 605, 609:return VEHICLE_TYPE_INDUSTRIAL;
  918.             case 412, 534 .. 536, 566, 567, 575, 576:return VEHICLE_TYPE_LOWRIDER;
  919.             case 400, 424, 444, 470, 489, 495, 500, 505, 556, 557, 568, 573, 579:return VEHICLE_TYPE_OFFROAD;
  920.             case 407, 416, 420, 427, 431, 432, 433, 437, 438, 490, 528, 544, 596 .. 599, 601:return VEHICLE_TYPE_PUBLICSERV;
  921.             case 401, 405, 410, 419, 421, 426, 436, 445, 466, 491, 492, 504, 507, 516 ..518, 526, 527, 529, 542, 546, 547, 549, 550, 560, 551, 562, 580, 585, 604:return VEHICLE_TYPE_SALOON;
  922.             case 402, 411, 415, 429, 451, 475, 477, 494, 496, 541, 502, 503, 506, 558, 559, 565, 587, 589, 602, 603:return VEHICLE_TYPE_SPORT;
  923.             case 404, 418, 458, 479, 561:return VEHICLE_TYPE_STATION;
  924.             case 430, 446, 452, 453, 454, 472, 473, 484, 493, 595:return VEHICLE_TYPE_BOAT;
  925.             case 435, 450, 569, 570, 584, 590, 591, 606, 607, 608, 610, 611:return VEHICLE_TYPE_TRAILER;
  926.             case 406, 409, 423, 428, 434, 442, 449, 457, 483, 485, 486, 508, 525, 530, 532, 537 .. 539, 545, 571, 572, 574, 583, 588:return VEHICLE_TYPE_UNIQUE;
  927.             case 441, 464, 465, 501, 564, 594:return VEHICLE_TYPE_RC;
  928.         }return INVALID_VEHICLE_TYPE;
  929.     }
  930. #endif
  931.  
  932. stock ResetPlayer(playerid)
  933. {
  934.     new i;
  935.     I[playerid][pAFK] = false;
  936.     I[playerid][pPaused] = false;
  937.     I[playerid][pInWater] = false;
  938.     #if defined USE_OPSP
  939.         I[playerid][pShoting] = false;
  940.     #endif
  941.     I[playerid][pParachuting] = false;
  942.     I[playerid][pMachine] = false;
  943.     I[playerid][pDriveBy] = S[sDriveby];
  944.     I[playerid][pIntDamage] = S[sIntDamage];
  945.     I[playerid][pReconnect] = false;
  946.     I[playerid][pUseMachine] = S[sVending];
  947.     I[playerid][pPlayingAnim] = false;
  948.     I[playerid][pCaps] = S[sCaps];
  949.     I[playerid][pVend] = false;
  950.     I[playerid][pUpdatedHealth] = false;
  951.     I[playerid][pTReleased] = 0;
  952.     for(; i<4; i++)I[playerid][pP][i] = 0.0;
  953.     I[playerid][pTimer] = -1;
  954.     I[playerid][pTime][0] = GetTickCount();
  955.     I[playerid][pTime][1] = 0;
  956.     I[playerid][pWeap] = 0;
  957.     I[playerid][pVWorld] = 0;
  958.     I[playerid][pHealth] = 0.0;
  959.     I[playerid][pArmour] = 0.0;
  960.     I[playerid][pMoney] = 0;
  961.     I[playerid][pScore] = 0;
  962.     for(i=0; i<13; i++){
  963.         I[playerid][pWeaps][i] = 0;
  964.         I[playerid][pAmmo][i] = 0;
  965.     }
  966.     I[playerid][pFPS] = 0;
  967.     I[playerid][pDrk] = 0;
  968. }
  969. #if defined USE_OPSP
  970.     stock AdjustVector(& Float: vX, & Float: vY, & Float: vZ, Float: oX, Float: oY, const Float: oZ)
  971.     {
  972.             static Float: Angle;
  973.             Angle = -atan2(vX, vY);
  974.             if(45.0 < Angle){
  975.                 oX ^= oY;
  976.                 oY ^= oX;
  977.                 oX ^= oY;
  978.                 if(90.0 < Angle){
  979.                     oX *= -1;
  980.                     if(135.0 < Angle){
  981.                         oX *= -1;
  982.                         oX ^= oY;
  983.                         oY ^= oX;
  984.                         oX ^= oY;
  985.                         oX *= -1;
  986.                     }
  987.                 }
  988.             }else if(Angle < 0.0){
  989.                 oY *= -1;
  990.                 if(Angle < -45.0){
  991.                     oX *= -1;
  992.                     oX ^= oY;
  993.                     oY ^= oX;
  994.                     oX ^= oY;
  995.                     oX *= -1;
  996.                     if(Angle < -90.0){
  997.                         oX *= -1;
  998.                         if(Angle < -135.0){
  999.                             oX ^= oY;
  1000.                             oY ^= oX;
  1001.                             oX ^= oY;
  1002.                         }
  1003.                     }
  1004.                 }
  1005.             }
  1006.             vX += oX,
  1007.             vY += oY;
  1008.             vZ += oZ;
  1009.             return false;
  1010.     }
  1011.  
  1012.     stock GetPlayerCameraWeaponVector(playerid, & Float: vX, & Float: vY, & Float: vZ)
  1013.     {
  1014.             static weapon;
  1015.             if(21 < (weapon = GetPlayerWeapon(playerid)) < 39){
  1016.                 GetPlayerCameraFrontVector(playerid, vX, vY, vZ);
  1017.                 switch(weapon){
  1018.                     case WEAPON_RIFLE: AdjustVector(vX, vY, vZ, 0.016204, 0.009899, 0.047177);
  1019.                     case WEAPON_AK47, WEAPON_M4: AdjustVector(vX, vY, vZ, 0.026461, 0.013070, 0.069079);
  1020.                     default: AdjustVector(vX, vY, vZ, 0.043949, 0.015922, 0.103412);
  1021.                 }
  1022.                 return 1;
  1023.             }
  1024.             else GetPlayerCameraFrontVector(playerid, vX, vY, vZ);
  1025.             return 0;
  1026.     }
  1027.  
  1028.     stock crossp(Float:v1x, Float:v1y, Float:v1z, Float:v2x, Float:v2y, Float:v2z, &Float:output)
  1029.     {
  1030.         new Float:c1 = (v1y * v2z) - (v1z * v2y),
  1031.             Float:c2 = (v1z * v2x) - (v1x * v2z),
  1032.             Float:c3 = (v1x * v2y) - (v1y * v2x);
  1033.         output = floatsqroot ((c1 * c1) + (c2 * c2) + (c3 * c3));
  1034.         return 0;
  1035.     }
  1036.  
  1037.     GetDistanceFromPointToLine(&Float:distance, Float:line_vector_x, Float:line_vector_y, Float:line_vector_z, Float:line_x, Float:line_y, Float:line_z, Float:point_x, Float:point_y, Float:point_z)
  1038.     {
  1039.         static Float:output;
  1040.         crossp(line_vector_x, line_vector_y, line_vector_z, point_x - line_x, point_y - line_y, point_z - line_z, output);//Cross product of 2 vectors.
  1041.         distance = output / floatsqroot ((line_vector_x * line_vector_x) + (line_vector_y * line_vector_y) + (line_vector_z * line_vector_z));
  1042.         return 0;
  1043.     }
  1044. #endif
  1045.  
  1046. #if defined USE_VEHICLE_DATA
  1047.     stock encode_tires(tire1, tire2, tire3, tire4) return tire1 | (tire2 << 1) | (tire3 << 2) | (tire4 << 3);
  1048. #endif
  1049.  
  1050. stock pName(playerid)
  1051. {
  1052.     static n[MAX_PLAYER_NAME];
  1053.     GetPlayerName(playerid, n, MAX_PLAYER_NAME);
  1054.     return n;
  1055. }
  1056.  
  1057. #define SetPlayerHealth         _SetPlayerHealth
  1058. #define SetPlayerArmour         _SetPlayerArmour
  1059. #define SetPlayerMoney          _SetPlayerMoney
  1060. #define GivePlayerMoney         _GivePlayerMoney
  1061. #define SetPlayerScore          _SetPlayerScore
  1062. #define SetPlayerName           _SetPlayerName
  1063. #if defined USE_VEHICLE_DATA
  1064.     #define AddStaticVehicle        _AddStaticVehicle
  1065.     #define AddStaticVehicleEx      _AddStaticVehicleEx
  1066.     #define CreateVehicle           _CreateVehicle
  1067.     #define SetVehicleNumberPlate   _SetVehicleNumberPlate
  1068.     #define DestroyVehicle          _DestroyVehicle
  1069.     #define ChangeVehicleColor      _ChangeVehicleColor
  1070.     #define LinkVehicleToInterior   _LinkVehicleToInterior
  1071. #endif
Advertisement
Add Comment
Please, Sign In to add comment