Advertisement
MacMailler

Sync [Стрельба по скину]

Feb 15th, 2013
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.54 KB | None | 0 0
  1. /*
  2.     @script     Sync [Стрельба по скину]
  3.     @version    1.2
  4.     @author     MacMailler
  5.  
  6.     Последния версия: http://pastebin.com/L1n9Ga1Y
  7. */
  8. #if !defined SYNC_INC
  9.     #define  SYNC_INC
  10.    
  11.     #if !defined _samp_included
  12.         #error Please include 'samp.inc'
  13.     #endif
  14.    
  15.     // #define SYNC_DEBUG
  16.     #define INVALID_DAMAGE  (-0.01)
  17.     #define INVALID_TEAM_ID (255)
  18.     #define ValidWeapon<%0> (0 <= %0 <= 46)
  19.     #define ValidPlayer<%0> (0 <= %0 < MAX_PLAYERS)
  20.    
  21.  
  22.     forward GetWeaponDamage(playerid, weaponid, &Float:damage);             // Получает дамаг оружия
  23.     forward SetWeaponDamageForAll(weaponid, Float:damage);                  // Устанавливает дамаг определенного оружия
  24.     forward SetWeaponDamageForPlayer(playerid, weaponid, Float:damage);     // Устанавливает дамаг определенного оружия для игрока
  25.     forward ToggleDamageForAll(bool:toggle);                                // Устанавливает возможность наносить повреждения
  26.     forward ToggleDamageForPlayer(playerid, bool:toggle);                   // Устанавливает возможность наносить повреждения для игрка
  27.     forward bool:IsToggleDamage(playerid);                                  // Возвращает возможность дамага
  28.     forward SetSyncTeam(playerid, teamid);
  29.     forward GetSyncTeam(playerid);
  30.     forward ToggleFriendlyFireForPlayer(playerid, bool:toggle);
  31.    
  32.     static SyncTeam = 1;
  33.    
  34.     enum e_SyncInfo {
  35.         e_KillerId, e_Reason, bool:e_ToggleDamage, Float:e_WeaponDamage[47], e_PlayerTeam, e_FriendlyFire,
  36.     };
  37.     static SyncInfo[MAX_PLAYERS][e_SyncInfo];
  38.    
  39.  
  40.     #if !defined FILTERSCRIPT
  41.         public OnGameModeInit() {
  42.             IncludeInit();
  43.             if(funcidx("Sync_OnGameModeInit") != -1) {
  44.                 return
  45.                     CallLocalFunction("Sync_OnGameModeInit", "")
  46.                 ;
  47.             }
  48.             return 1;
  49.         }
  50.         #if defined _ALS_OnGameModeInit
  51.             #undef OnGameModeInit
  52.         #else
  53.             #define _ALS_OnGameModeInit
  54.         #endif
  55.         #define OnGameModeInit Sync_OnGameModeInit
  56.         forward Sync_OnGameModeInit();
  57.     #else
  58.         public OnFilterScriptInit() {
  59.             IncludeInit();
  60.             SetTeamForAll(1);
  61.             if(funcidx("Sync_OnFilterScriptInit") != -1) {
  62.                 return
  63.                     CallLocalFunction("Sync_OnFilterScriptInit", "");
  64.                 ;
  65.             }
  66.             return 1;
  67.         }
  68.         #if defined _ALS_OnFilterScriptInit
  69.             #undef OnFilterScriptInit
  70.         #else
  71.             #define _ALS_OnFilterScriptInit
  72.         #endif
  73.         #define OnFilterScriptInit Sync_OnFilterScriptInit
  74.         forward Sync_OnGameModeInit();
  75.     #endif
  76.    
  77.     public OnPlayerConnect(playerid) {
  78.         SetPlayerTeam(playerid, SyncTeam);
  79.        
  80.         SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
  81.         SyncInfo[playerid][e_Reason] = 255;
  82.         SyncInfo[playerid][e_ToggleDamage] = true;
  83.         SyncInfo[playerid][e_PlayerTeam] = INVALID_TEAM_ID;
  84.         SyncInfo[playerid][e_FriendlyFire] = false;
  85.        
  86.         new weaponid;
  87.         while(--weaponid != -1) {
  88.             SyncInfo[playerid][e_WeaponDamage][weaponid] = INVALID_DAMAGE;
  89.         }
  90.        
  91.         return
  92.             CallLocalFunction("Sync_OnPlayerConnect", "i", playerid)
  93.         ;
  94.     }
  95.    
  96.     public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) {
  97.         if(ValidPlayer<damagedid> && ValidWeapon<weaponid>) {
  98.             if(SyncInfo[playerid][e_ToggleDamage]) {
  99.                 if(!((SyncInfo[playerid][e_PlayerTeam] == SyncInfo[damagedid][e_PlayerTeam]) && SyncInfo[playerid][e_FriendlyFire])) {
  100.                     new Float:damage, Float:health, Float:armour;
  101.                     GetWeaponDamage(playerid, weaponid, damage);
  102.                     damage = ((damage==INVALID_DAMAGE)?(amount):(damage));
  103.                     GetPlayerHealth(damagedid, health), GetPlayerArmour(damagedid, armour);
  104.                     if(armour > 0.0) {
  105.                         armour -= damage;
  106.                         if(armour < 0.0) {
  107.                             health -= -armour;
  108.                             armour = 0.0;
  109.                         }
  110.                     } else {
  111.                         health -= damage;
  112.                     }
  113.                     if(health <= 0.0) {
  114.                         SyncInfo[damagedid][e_KillerId] = playerid;
  115.                         SyncInfo[damagedid][e_Reason] = weaponid;
  116.                     }
  117.                     SetPlayerArmour(damagedid, armour), SetPlayerHealth(damagedid, health);
  118.                     #if defined SYNC_DEBUG
  119.                         new buffer[36];
  120.                         format(buffer, sizeof buffer, "damage: %.1f / health: %.1f", damage, health);
  121.                         SetPlayerChatBubble(damagedid, buffer, 0xFF6347AA, 50.0, 3000);
  122.                     #endif
  123.                 }
  124.             }
  125.         }
  126.         return
  127.             CallLocalFunction("Sync_OnPlayerGiveDamage", "iifi", playerid, damagedid, amount, weaponid)
  128.         ;
  129.     }
  130.    
  131.     public OnPlayerDeath(playerid, killerid, reason) {
  132.         if(reason == 255) {
  133.             if(ValidPlayer<playerid>) {
  134.                 killerid = SyncInfo[playerid][e_KillerId];
  135.                 reason = SyncInfo[playerid][e_Reason];
  136.  
  137.                 SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
  138.                 SyncInfo[playerid][e_Reason] = 255;
  139.             }
  140.         }
  141.         return
  142.             CallLocalFunction("Sync_OnPlayerDeath", "iii", playerid, killerid, reason)
  143.         ;
  144.     }
  145.    
  146.     static IncludeInit() {
  147.         new weaponid = 47, playerid = MAX_PLAYERS;
  148.         while(--playerid != -1) {
  149.             SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
  150.             SyncInfo[playerid][e_Reason] = 255;
  151.             SyncInfo[playerid][e_ToggleDamage] = true;
  152.             while(--weaponid != -1) {
  153.                 SyncInfo[playerid][e_WeaponDamage][weaponid] = INVALID_DAMAGE;
  154.             }
  155.             weaponid = 47;
  156.         }
  157.     }
  158.    
  159.    
  160.     stock GetWeaponDamage(playerid, weaponid, &Float:damage) {
  161.         if(ValidPlayer<playerid>) {
  162.             if(ValidWeapon<weaponid>) {
  163.                 damage = SyncInfo[playerid][e_WeaponDamage][weaponid];
  164.                 return 1;
  165.             }
  166.         }
  167.         return 0;
  168.     }
  169.    
  170.     stock SetWeaponDamageForPlayer(playerid, weaponid, Float:damage) {
  171.         if(ValidPlayer<playerid>) {
  172.             if(ValidWeapon<weaponid>) {
  173.                 SyncInfo[playerid][e_WeaponDamage][weaponid] = damage;
  174.                 return 1;
  175.             }
  176.         }
  177.         return 0;
  178.     }
  179.    
  180.     stock ToggleDamageForPlayer(playerid, bool:toggle) {
  181.         if(ValidPlayer<playerid>) {
  182.             SyncInfo[playerid][e_ToggleDamage] = toggle;
  183.             return 1;
  184.         }
  185.         return 0;
  186.     }
  187.    
  188.     stock SetWeaponDamageForAll(weaponid, Float:damage) {
  189.         if(ValidWeapon<weaponid>) {
  190.             new playerid = MAX_PLAYERS;
  191.             while(--playerid != -1) {
  192.                 SyncInfo[playerid][e_WeaponDamage][weaponid] = damage;
  193.             }
  194.             return 1;
  195.         }
  196.         return 0;
  197.     }
  198.    
  199.     stock ToggleDamageForAll(bool:toggle) {
  200.         new playerid = MAX_PLAYERS;
  201.         while(--playerid != -1) {
  202.             SyncInfo[playerid][e_ToggleDamage] = toggle;
  203.         }
  204.         return 1;
  205.     }
  206.    
  207.     stock bool:IsToggleDamage(playerid) {
  208.         if(ValidPlayer<playerid>) {
  209.             return SyncInfo[playerid][e_ToggleDamage];
  210.         }
  211.         return false;
  212.     }
  213.    
  214.     stock SetTeamForAll(team) {
  215.         SyncTeam = team;
  216.         new playerid = MAX_PLAYERS;
  217.         while(--playerid != -1) {
  218.             if(IsPlayerConnected(playerid)) {
  219.                 SetPlayerTeam(playerid, SyncTeam);
  220.             }
  221.         }
  222.         return 1;
  223.     }
  224.    
  225.     stock SetSyncTeam(playerid, teamid) {
  226.         if(ValidPlayer<playerid>) {
  227.             SyncInfo[playerid][e_PlayerTeam] = teamid;
  228.         }
  229.         return 0;
  230.     }
  231.    
  232.     stock GetSyncTeam(playerid) {
  233.         if(ValidPlayer<playerid>) {
  234.             return SyncInfo[playerid][e_PlayerTeam];
  235.         }
  236.         return INVALID_TEAM_ID;
  237.     }
  238.    
  239.     stock ToggleFriendlyFireForPlayer(playerid, bool:toggle) {
  240.         if(ValidPlayer<playerid>) {
  241.             SyncInfo[playerid][e_FriendlyFire] = toggle;
  242.             return 1;
  243.         }
  244.         return 0;
  245.     }
  246.    
  247.     #if defined _ALS_OnPlayerConnect
  248.         #undef OnPlayerConnect
  249.     #else
  250.         #define _ALS_OnPlayerConnect
  251.     #endif
  252.     #define OnPlayerConnect Sync_OnPlayerConnect
  253.     forward Sync_OnPlayerConnect(playerid);
  254.    
  255.     #if defined _ALS_OnPlayerDeath
  256.         #undef OnPlayerDeath
  257.     #else
  258.         #define _ALS_OnPlayerDeath
  259.     #endif
  260.     #define OnPlayerDeath Sync_OnPlayerDeath
  261.     forward Sync_OnPlayerDeath(playerid, killerid, reason);
  262.  
  263.     #if defined _ALS_OnPlayerGiveDamage
  264.         #undef OnPlayerGiveDamage
  265.     #else
  266.         #define _ALS_OnPlayerGiveDamage
  267.     #endif
  268.     #define OnPlayerGiveDamage Sync_OnPlayerGiveDamage
  269.     forward Sync_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
  270. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement