Guest User

Untitled

a guest
Feb 20th, 2013
1,366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. ///////////////////////////////////////////////////////////////////////////////////////////
  4. ///////////////////////////////////////////////////////////////////////////////////////////
  5. //Damage System////////////////////////////////////////////////////////////////////////////
  6. ///////////////////////////////////////////////////////////////////////////////////////////
  7.  
  8. #define STATE_WAIT_HIT 0
  9. #define STATE_PENDING_HIT 1
  10.  
  11. #define ISSUE_HIT_DELAY 300
  12.  
  13. new DamageStatus[MAX_PLAYERS];
  14. new IssueTimer[MAX_PLAYERS];
  15. new bool:PlayerIsDead[MAX_PLAYERS];
  16.  
  17. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
  18. {
  19. if(!PlayerIsDead[damagedid])
  20. {
  21. /*
  22. if(IsPlayerPaused(damagedid))
  23. {
  24. OnPlayerDeathExtended(damagedid, playerid, weaponid);
  25. SetPlayerHealth(damagedid, 0.0);
  26. }
  27. else
  28. {
  29. */
  30. if(DamageStatus[playerid] == STATE_PENDING_HIT)
  31. {
  32. KillTimer(IssueTimer[damagedid]);
  33. IssueTimer[damagedid] = SetTimerEx("IssueHit", ISSUE_HIT_DELAY, false, "iifi", playerid, damagedid, Float:amount, weaponid);
  34. }
  35. else
  36. {
  37. IssueTimer[damagedid] = SetTimerEx("IssueHit", ISSUE_HIT_DELAY, false, "iifi", playerid, damagedid, Float:amount, weaponid);
  38. DamageStatus[damagedid] = STATE_PENDING_HIT;
  39. }
  40. // }
  41. }
  42. return 1;
  43. }
  44.  
  45. forward IssueHit(playerid, damagedid, Float:amount, weaponid);
  46. public IssueHit(playerid, damagedid, Float:amount, weaponid)
  47. {
  48. if(DamageStatus[damagedid] == STATE_PENDING_HIT && !PlayerIsDead[damagedid]) OnPlayerTakeDamage(damagedid, playerid, Float: amount, weaponid);
  49. return 1;
  50. }
  51.  
  52. public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
  53. {
  54. if(!IsPlayerNPC(playerid))
  55. {
  56. if(!PlayerIsDead[playerid])
  57. {
  58. new Float:hp, Float:armour;
  59. GetPlayerHealth(playerid, hp);
  60. GetPlayerArmour(playerid, armour);
  61.  
  62. if(hp <= 0.0)
  63. {
  64. printf("OnPlayerTakeDamage Called Player Health: %f amount: %f weaponid: %i issuerid: %i", hp, amount, weaponid, issuerid);
  65. if(issuerid != INVALID_PLAYER_ID) OnPlayerDeathExtended(playerid, issuerid, weaponid);
  66. SetPlayerHealth(playerid, 0.0);
  67. }
  68. else
  69. {
  70. if(DamageStatus[playerid] == STATE_PENDING_HIT)
  71. {
  72. DamageStatus[playerid] = STATE_WAIT_HIT;
  73. KillTimer(IssueTimer[playerid]);
  74. }
  75.  
  76. if(armour > 0.0 && (weaponid != 54))
  77. {
  78. if(armour - amount <= 0.0)
  79. {
  80. amount -= armour;
  81. SetPlayerArmour(playerid, 0.0);
  82.  
  83. if(hp - amount <= 0.0)
  84. {
  85. OnPlayerDeathExtended(playerid, issuerid, weaponid);
  86. SetPlayerHealth(playerid, 0.0);
  87. print("1:OnPlayerDeathExtended called OnPlayerTakeDamage");
  88. }
  89. else SetPlayerHealth(playerid, hp - amount);
  90. }
  91. else SetPlayerArmour(playerid, armour - amount);
  92. }
  93. else
  94. {
  95. if(hp - amount <= 0.0)
  96. {
  97. OnPlayerDeathExtended(playerid, issuerid, weaponid);
  98. SetPlayerHealth(playerid, 0.0);
  99. print("2:OnPlayerDeathExtended called OnPlayerTakeDamage");
  100. }
  101. else SetPlayerHealth(playerid, hp - amount);
  102. }
  103. }
  104. }
  105. }
  106. return 1;
  107. }
  108.  
  109. public OnPlayerStateChange(playerid, newstate, oldstate)
  110. {
  111. if(IsPlayerNPC(playerid)) { return 1; } // Player Is NPC Do Nothing
  112.  
  113. if(newstate == PLAYER_STATE_WASTED && !PlayerIsDead[playerid])
  114. {
  115. if (oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
  116. {
  117. OnPlayerDeathExtended(playerid, INVALID_PLAYER_ID, 51);
  118. printf("1:OnPlayerDeathExtended called OnPlayerStateChange newstate: %i oldstate: %i", newstate, oldstate);
  119. }
  120. else
  121. {
  122. printf("2:OnPlayerDeathExtended called OnPlayerStateChange newstate: %i oldstate: %i", newstate, oldstate);
  123. if(oldstate != PLAYER_STATE_SPAWNED) OnPlayerDeathExtended(playerid, INVALID_PLAYER_ID, 47);
  124. }
  125. }
  126. return 1;
  127. }
  128.  
  129. public OnPlayerDeath(playerid, killerid, reason) { return 1; }
  130.  
  131. forward OnPlayerDeathExtended(playerid, killerid, reason);
  132. public OnPlayerDeathExtended(playerid, killerid, reason)
  133. {
  134. SendDeathMessage(killerid, playerid, reason);
  135. return 1;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment