Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- ///////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////
- //Damage System////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////
- #define STATE_WAIT_HIT 0
- #define STATE_PENDING_HIT 1
- #define ISSUE_HIT_DELAY 300
- new DamageStatus[MAX_PLAYERS];
- new IssueTimer[MAX_PLAYERS];
- new bool:PlayerIsDead[MAX_PLAYERS];
- public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
- {
- if(!PlayerIsDead[damagedid])
- {
- /*
- if(IsPlayerPaused(damagedid))
- {
- OnPlayerDeathExtended(damagedid, playerid, weaponid);
- SetPlayerHealth(damagedid, 0.0);
- }
- else
- {
- */
- if(DamageStatus[playerid] == STATE_PENDING_HIT)
- {
- KillTimer(IssueTimer[damagedid]);
- IssueTimer[damagedid] = SetTimerEx("IssueHit", ISSUE_HIT_DELAY, false, "iifi", playerid, damagedid, Float:amount, weaponid);
- }
- else
- {
- IssueTimer[damagedid] = SetTimerEx("IssueHit", ISSUE_HIT_DELAY, false, "iifi", playerid, damagedid, Float:amount, weaponid);
- DamageStatus[damagedid] = STATE_PENDING_HIT;
- }
- // }
- }
- return 1;
- }
- forward IssueHit(playerid, damagedid, Float:amount, weaponid);
- public IssueHit(playerid, damagedid, Float:amount, weaponid)
- {
- if(DamageStatus[damagedid] == STATE_PENDING_HIT && !PlayerIsDead[damagedid]) OnPlayerTakeDamage(damagedid, playerid, Float: amount, weaponid);
- return 1;
- }
- public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
- {
- if(!IsPlayerNPC(playerid))
- {
- if(!PlayerIsDead[playerid])
- {
- new Float:hp, Float:armour;
- GetPlayerHealth(playerid, hp);
- GetPlayerArmour(playerid, armour);
- if(hp <= 0.0)
- {
- printf("OnPlayerTakeDamage Called Player Health: %f amount: %f weaponid: %i issuerid: %i", hp, amount, weaponid, issuerid);
- if(issuerid != INVALID_PLAYER_ID) OnPlayerDeathExtended(playerid, issuerid, weaponid);
- SetPlayerHealth(playerid, 0.0);
- }
- else
- {
- if(DamageStatus[playerid] == STATE_PENDING_HIT)
- {
- DamageStatus[playerid] = STATE_WAIT_HIT;
- KillTimer(IssueTimer[playerid]);
- }
- if(armour > 0.0 && (weaponid != 54))
- {
- if(armour - amount <= 0.0)
- {
- amount -= armour;
- SetPlayerArmour(playerid, 0.0);
- if(hp - amount <= 0.0)
- {
- OnPlayerDeathExtended(playerid, issuerid, weaponid);
- SetPlayerHealth(playerid, 0.0);
- print("1:OnPlayerDeathExtended called OnPlayerTakeDamage");
- }
- else SetPlayerHealth(playerid, hp - amount);
- }
- else SetPlayerArmour(playerid, armour - amount);
- }
- else
- {
- if(hp - amount <= 0.0)
- {
- OnPlayerDeathExtended(playerid, issuerid, weaponid);
- SetPlayerHealth(playerid, 0.0);
- print("2:OnPlayerDeathExtended called OnPlayerTakeDamage");
- }
- else SetPlayerHealth(playerid, hp - amount);
- }
- }
- }
- }
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- if(IsPlayerNPC(playerid)) { return 1; } // Player Is NPC Do Nothing
- if(newstate == PLAYER_STATE_WASTED && !PlayerIsDead[playerid])
- {
- if (oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
- {
- OnPlayerDeathExtended(playerid, INVALID_PLAYER_ID, 51);
- printf("1:OnPlayerDeathExtended called OnPlayerStateChange newstate: %i oldstate: %i", newstate, oldstate);
- }
- else
- {
- printf("2:OnPlayerDeathExtended called OnPlayerStateChange newstate: %i oldstate: %i", newstate, oldstate);
- if(oldstate != PLAYER_STATE_SPAWNED) OnPlayerDeathExtended(playerid, INVALID_PLAYER_ID, 47);
- }
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason) { return 1; }
- forward OnPlayerDeathExtended(playerid, killerid, reason);
- public OnPlayerDeathExtended(playerid, killerid, reason)
- {
- SendDeathMessage(killerid, playerid, reason);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment