Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //=====================INCLUDES=====================
- #include <a_samp>
- #include <zcmd>
- #include <sscanf2>
- //=====================DIALOGS======================
- #define DIALOG_DAMAGE 1927
- //==================CONTROL PANEL===================
- #define FILTERSCRIPT
- #define MAX_DAMAGES 10 //Maximum damage, not 1000000000000000.
- #define SCM SendClientMessage
- #define SNM SendNearMessage
- #define FORMAT:%0(%1) format(%0, sizeof(%0), %1)
- #define BODY_PART_TORSO 3
- #define BODY_PART_GROIN 4
- #define BODY_PART_RIGHT_ARM 5
- #define BODY_PART_LEFT_ARM 6
- #define BODY_PART_RIGHT_LEG 7
- #define BODY_PART_LEFT_LEG 8
- #define BODY_PART_HEAD 9
- //===================ENUMERATORS====================
- enum dmgInfo
- {
- dmgDamage,
- dmgWeapon,
- dmgBodypart,
- dmgKevlarhit,
- dmgSeconds,
- }
- new DamageInfo[MAX_PLAYERS][MAX_DAMAGES][dmgInfo];
- public OnFilterScriptInit()
- {
- print("\n ==================================");
- print(" | |");
- print(" | Damage System |");
- print(" | By Hreesang |");
- print(" | |");
- print(" ==================================\n");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- stock ResetPlayerDamages(playerid)
- {
- for(new id = 0; id < MAX_DAMAGES; id++)
- {
- if(DamageInfo[playerid][id][dmgDamage] != 0)
- {
- DamageInfo[playerid][id][dmgDamage] = 0;
- DamageInfo[playerid][id][dmgWeapon] = 0;
- DamageInfo[playerid][id][dmgBodypart] = 0;
- DamageInfo[playerid][id][dmgKevlarhit] = 0;
- DamageInfo[playerid][id][dmgSeconds] = 0;
- }
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- ResetPlayerDamages(playerid);
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- ResetPlayerDamages(playerid); //you can delete this if you're want to put on roleplay gamemode
- return 1;
- }
- public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
- {
- if(IsPlayerConnected(playerid))
- {
- new
- Float: pHP,
- Float: pArm,
- id;
- GetPlayerHealth(playerid, pHP);
- GetPlayerArmour(playerid, pArm);
- for(new i = 0; i < MAX_DAMAGES; i++)
- {
- if(!DamageInfo[playerid][i][dmgDamage])
- {
- id = i;
- break;
- }
- }
- DamageInfo[playerid][id][dmgDamage] = floatround(amount, floatround_round);
- DamageInfo[playerid][id][dmgWeapon] = weaponid;
- DamageInfo[playerid][id][dmgBodypart] = bodypart;
- if(pArm > 0) DamageInfo[playerid][id][dmgKevlarhit] = 1;
- else if(pArm < 1) DamageInfo[playerid][id][dmgKevlarhit] = 0;
- DamageInfo[playerid][id][dmgSeconds] = gettime();
- }
- return 1;
- }
- stock ShowPlayerDamages(playerid, toid)
- {
- new
- str[1000],
- str1[500],
- count = 0,
- name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, sizeof(name));
- for(new id = 0; id < MAX_DAMAGES; id++)
- {
- if(DamageInfo[playerid][id][dmgDamage] != 0) count++;
- }
- if(count == 0) return ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, "There is no damage to display...", "Close", "");
- else if(count > 0)
- {
- for(new id = 0; id < MAX_DAMAGES; id++)
- {
- if(DamageInfo[playerid][id][dmgDamage] != 0)
- {
- FORMAT:str1("%d dmg from %s to %s (Kevlarhit: %d) %d s ago\n", DamageInfo[playerid][id][dmgDamage], GetWeaponNameEx(DamageInfo[playerid][id][dmgWeapon]), GetBodypartName(DamageInfo[playerid][id][dmgBodypart]), DamageInfo[playerid][id][dmgKevlarhit], gettime() - DamageInfo[playerid][id][dmgSeconds]);
- strcat(str, str1);
- }
- else if(DamageInfo[playerid][id][dmgDamage] != 0 && id >= MAX_DAMAGES)
- {
- FORMAT:str1("You seems taking to many damage....");
- strcat(str, str1);
- }
- }
- ShowPlayerDialog(toid, DIALOG_DAMAGE, DIALOG_STYLE_LIST, name, str, "Close", "");
- }
- return 1;
- }
- stock GetName(playerid)
- {
- new name;
- GetPlayerName(playerid, name, sizeof(name));
- return name;
- }
- stock GetWeaponNameEx(weaponid)
- {
- new weaponname[60];
- GetWeaponName(weaponid, weaponname, sizeof(weaponname));
- return weaponname;
- }
- stock GetBodypartName(bodypart)
- {
- new bodyname[60];
- switch(bodypart)
- {
- case BODY_PART_TORSO: FORMAT:bodyname("TORSO");
- case BODY_PART_GROIN: FORMAT:bodyname("GROIN");
- case BODY_PART_RIGHT_ARM: FORMAT:bodyname("RIGHT ARM");
- case BODY_PART_LEFT_ARM: FORMAT:bodyname("LEFT ARM");
- case BODY_PART_RIGHT_LEG: FORMAT:bodyname("RIGHT ARM");
- case BODY_PART_LEFT_LEG: FORMAT:bodyname("LEFT LEG");
- case BODY_PART_HEAD: FORMAT:bodyname("HEAD");
- }
- return bodyname;
- }
- stock SendNearMessage(playerid, Float:range, color, const msg[])
- {
- static
- Float: exPos[MAX_PLAYERS][3];
- foreach(new i : Player)
- {
- GetPlayerPos(i, exPos[i][0], exPos[i][1], exPos[i][2]);
- if(IsPlayerInRangeOfPoint(i, range, exPos[i][0], exPos[i][1], exPos[i][2]))
- return SendClientMessage(i, color, msg);
- }
- return 1;
- }
- CMD:checkdamages(playerid, params[])
- {
- new
- Float: pPos[3],
- id;
- if(sscanf(params, "u", id))
- return SCM(playerid, 0xFF6347FF, "USAGE: {FFFFFF}/checkdamages [playerid/PartOfName]");
- if(!IsPlayerConnected(id))
- return SCM(playerid, 0xFF6347FF, "Invalid playerid.");
- if(IsPlayerAdmin(playerid)) //change this whatever
- {
- ShowPlayerDamages(id, playerid);
- SendClientMessage(playerid, 0xFF6347FF, "Showing a playerID: "id" damages");
- }
- else
- {
- GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
- if(!IsPlayerInRangeOfPoint(playerid, 7.0, pPos[0], pPos[1], pPos[2]))
- return SCM(playerid, 0xB8BAC6FF, "You're too far away.");
- ShowPlayerDamages(id, playerid);
- }
- return 1;
- }
- CMD:damages(playerid, params[])
- {
- ShowPlayerDamages(playerid, playerid);
- return 1;
- }
- //useful command from medic lol
- CMD:beginoperate(playerid, params[])
- {
- new rp[64];
- if(sscanf(params, "u", pid))
- return SCM(playerid, 0xFF6347FF, "USAGE: {FFFFFF}/beginoperate [playerid/PartOFName]");
- if(!IsPlayerConnected(pid))
- return SCM(playerid, 0xFF6347FF, "Invalid playerid.");
- FORMAT:rp("%s began the operation to remove bullets from the patient's body.", GetName(playerid));
- SNM(playerid, 3.0, 0xD0AEEBFF, rp);
- /*
- You can just add some timers like below!
- SCM(pid, 0xFF6347FF, "OPERATE: {FFFFFF}Please do not move from your position!");
- SetTimerEx("OnPlayerNotMoving", 5000, false, "i", pid);
- GetPlayerPos(pid, pidPos[pid][0], pidPos[pid][1], pidPos[pid][2]);
- */
- ResetPlayerDamages(pid);
- return 1;
- }
- /*
- forward OnPlayerNotMoving(playerid);
- public OnPlayerNotMoving(playerid)
- {
- if(pidPos[playerid][0] > 2.0 || pidPos[playerid][1] > 2.0 || pidPos[playerid][2] > 2.0)
- return SCM(playerid, 0xFF6347FF, "Failed to began the operation because patient are moving!");
- ResetPlayerDamages(playerid);
- return 1;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement