Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- @script Sync [Стрельба по скину]
- @version 1.2
- @author MacMailler
- Последния версия: http://pastebin.com/L1n9Ga1Y
- */
- #if !defined SYNC_INC
- #define SYNC_INC
- #if !defined _samp_included
- #error Please include 'samp.inc'
- #endif
- // #define SYNC_DEBUG
- #define INVALID_DAMAGE (-0.01)
- #define INVALID_TEAM_ID (255)
- #define ValidWeapon<%0> (0 <= %0 <= 46)
- #define ValidPlayer<%0> (0 <= %0 < MAX_PLAYERS)
- forward GetWeaponDamage(playerid, weaponid, &Float:damage); // Получает дамаг оружия
- forward SetWeaponDamageForAll(weaponid, Float:damage); // Устанавливает дамаг определенного оружия
- forward SetWeaponDamageForPlayer(playerid, weaponid, Float:damage); // Устанавливает дамаг определенного оружия для игрока
- forward ToggleDamageForAll(bool:toggle); // Устанавливает возможность наносить повреждения
- forward ToggleDamageForPlayer(playerid, bool:toggle); // Устанавливает возможность наносить повреждения для игрка
- forward bool:IsToggleDamage(playerid); // Возвращает возможность дамага
- forward SetSyncTeam(playerid, teamid);
- forward GetSyncTeam(playerid);
- forward ToggleFriendlyFireForPlayer(playerid, bool:toggle);
- static SyncTeam = 1;
- enum e_SyncInfo {
- e_KillerId, e_Reason, bool:e_ToggleDamage, Float:e_WeaponDamage[47], e_PlayerTeam, e_FriendlyFire,
- };
- static SyncInfo[MAX_PLAYERS][e_SyncInfo];
- #if !defined FILTERSCRIPT
- public OnGameModeInit() {
- IncludeInit();
- if(funcidx("Sync_OnGameModeInit") != -1) {
- return
- CallLocalFunction("Sync_OnGameModeInit", "")
- ;
- }
- return 1;
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit Sync_OnGameModeInit
- forward Sync_OnGameModeInit();
- #else
- public OnFilterScriptInit() {
- IncludeInit();
- SetTeamForAll(1);
- if(funcidx("Sync_OnFilterScriptInit") != -1) {
- return
- CallLocalFunction("Sync_OnFilterScriptInit", "");
- ;
- }
- return 1;
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit Sync_OnFilterScriptInit
- forward Sync_OnGameModeInit();
- #endif
- public OnPlayerConnect(playerid) {
- SetPlayerTeam(playerid, SyncTeam);
- SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
- SyncInfo[playerid][e_Reason] = 255;
- SyncInfo[playerid][e_ToggleDamage] = true;
- SyncInfo[playerid][e_PlayerTeam] = INVALID_TEAM_ID;
- SyncInfo[playerid][e_FriendlyFire] = false;
- new weaponid;
- while(--weaponid != -1) {
- SyncInfo[playerid][e_WeaponDamage][weaponid] = INVALID_DAMAGE;
- }
- return
- CallLocalFunction("Sync_OnPlayerConnect", "i", playerid)
- ;
- }
- public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) {
- if(ValidPlayer<damagedid> && ValidWeapon<weaponid>) {
- if(SyncInfo[playerid][e_ToggleDamage]) {
- if(!((SyncInfo[playerid][e_PlayerTeam] == SyncInfo[damagedid][e_PlayerTeam]) && SyncInfo[playerid][e_FriendlyFire])) {
- new Float:damage, Float:health, Float:armour;
- GetWeaponDamage(playerid, weaponid, damage);
- damage = ((damage==INVALID_DAMAGE)?(amount):(damage));
- GetPlayerHealth(damagedid, health), GetPlayerArmour(damagedid, armour);
- if(armour > 0.0) {
- armour -= damage;
- if(armour < 0.0) {
- health -= -armour;
- armour = 0.0;
- }
- } else {
- health -= damage;
- }
- if(health <= 0.0) {
- SyncInfo[damagedid][e_KillerId] = playerid;
- SyncInfo[damagedid][e_Reason] = weaponid;
- }
- SetPlayerArmour(damagedid, armour), SetPlayerHealth(damagedid, health);
- #if defined SYNC_DEBUG
- new buffer[36];
- format(buffer, sizeof buffer, "damage: %.1f / health: %.1f", damage, health);
- SetPlayerChatBubble(damagedid, buffer, 0xFF6347AA, 50.0, 3000);
- #endif
- }
- }
- }
- return
- CallLocalFunction("Sync_OnPlayerGiveDamage", "iifi", playerid, damagedid, amount, weaponid)
- ;
- }
- public OnPlayerDeath(playerid, killerid, reason) {
- if(reason == 255) {
- if(ValidPlayer<playerid>) {
- killerid = SyncInfo[playerid][e_KillerId];
- reason = SyncInfo[playerid][e_Reason];
- SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
- SyncInfo[playerid][e_Reason] = 255;
- }
- }
- return
- CallLocalFunction("Sync_OnPlayerDeath", "iii", playerid, killerid, reason)
- ;
- }
- static IncludeInit() {
- new weaponid = 47, playerid = MAX_PLAYERS;
- while(--playerid != -1) {
- SyncInfo[playerid][e_KillerId] = INVALID_PLAYER_ID;
- SyncInfo[playerid][e_Reason] = 255;
- SyncInfo[playerid][e_ToggleDamage] = true;
- while(--weaponid != -1) {
- SyncInfo[playerid][e_WeaponDamage][weaponid] = INVALID_DAMAGE;
- }
- weaponid = 47;
- }
- }
- stock GetWeaponDamage(playerid, weaponid, &Float:damage) {
- if(ValidPlayer<playerid>) {
- if(ValidWeapon<weaponid>) {
- damage = SyncInfo[playerid][e_WeaponDamage][weaponid];
- return 1;
- }
- }
- return 0;
- }
- stock SetWeaponDamageForPlayer(playerid, weaponid, Float:damage) {
- if(ValidPlayer<playerid>) {
- if(ValidWeapon<weaponid>) {
- SyncInfo[playerid][e_WeaponDamage][weaponid] = damage;
- return 1;
- }
- }
- return 0;
- }
- stock ToggleDamageForPlayer(playerid, bool:toggle) {
- if(ValidPlayer<playerid>) {
- SyncInfo[playerid][e_ToggleDamage] = toggle;
- return 1;
- }
- return 0;
- }
- stock SetWeaponDamageForAll(weaponid, Float:damage) {
- if(ValidWeapon<weaponid>) {
- new playerid = MAX_PLAYERS;
- while(--playerid != -1) {
- SyncInfo[playerid][e_WeaponDamage][weaponid] = damage;
- }
- return 1;
- }
- return 0;
- }
- stock ToggleDamageForAll(bool:toggle) {
- new playerid = MAX_PLAYERS;
- while(--playerid != -1) {
- SyncInfo[playerid][e_ToggleDamage] = toggle;
- }
- return 1;
- }
- stock bool:IsToggleDamage(playerid) {
- if(ValidPlayer<playerid>) {
- return SyncInfo[playerid][e_ToggleDamage];
- }
- return false;
- }
- stock SetTeamForAll(team) {
- SyncTeam = team;
- new playerid = MAX_PLAYERS;
- while(--playerid != -1) {
- if(IsPlayerConnected(playerid)) {
- SetPlayerTeam(playerid, SyncTeam);
- }
- }
- return 1;
- }
- stock SetSyncTeam(playerid, teamid) {
- if(ValidPlayer<playerid>) {
- SyncInfo[playerid][e_PlayerTeam] = teamid;
- }
- return 0;
- }
- stock GetSyncTeam(playerid) {
- if(ValidPlayer<playerid>) {
- return SyncInfo[playerid][e_PlayerTeam];
- }
- return INVALID_TEAM_ID;
- }
- stock ToggleFriendlyFireForPlayer(playerid, bool:toggle) {
- if(ValidPlayer<playerid>) {
- SyncInfo[playerid][e_FriendlyFire] = toggle;
- return 1;
- }
- return 0;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect Sync_OnPlayerConnect
- forward Sync_OnPlayerConnect(playerid);
- #if defined _ALS_OnPlayerDeath
- #undef OnPlayerDeath
- #else
- #define _ALS_OnPlayerDeath
- #endif
- #define OnPlayerDeath Sync_OnPlayerDeath
- forward Sync_OnPlayerDeath(playerid, killerid, reason);
- #if defined _ALS_OnPlayerGiveDamage
- #undef OnPlayerGiveDamage
- #else
- #define _ALS_OnPlayerGiveDamage
- #endif
- #define OnPlayerGiveDamage Sync_OnPlayerGiveDamage
- forward Sync_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement