Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.24 KB | None | 0 0
  1. // Duel stats system for Pro Duel by Proteh
  2.  
  3. #define WEAPON_FIST 0
  4. #define WEAPON_CHAINSAW 1
  5. #define WEAPON_PISTOL 2
  6. #define WEAPON_SHOTGUN 3
  7. #define WEAPON_SSG 4
  8. #define WEAPON_CHAINGUN 5
  9. #define WEAPON_PLASMA 6
  10. #define WEAPON_LG 7
  11. #define WEAPON_RAILGUN 8
  12. #define WEAPON_RL 9
  13. #define WEAPON_GL 10
  14. #define MAX_WEAPONS 11
  15.  
  16. int duelPlayerNumber[2];
  17. int shotsFired[2][MAX_WEAPONS];
  18. int hitsOnTarget[2][MAX_WEAPONS];
  19.  
  20. function void resetStatsSystem() {
  21.  
  22. duelPlayerNumber[0] = -1;
  23. duelPlayerNumber[1] = -1;
  24.  
  25. for(int i = 0; i < MAX_WEAPONS; i++)
  26. {
  27. shotsFired[0][i] = 0;
  28. shotsFired[1][i] = 0;
  29. hitsOnTarget[0][i] = 0;
  30. hitsOnTarget[1][i] = 0;
  31. }
  32. }
  33.  
  34. function void findActiveDuelPlayers() {
  35.  
  36. for(int i = 0, j = 0; i < 64; i++)
  37. {
  38. if(!PlayerIsSpectator(i))
  39. {
  40. duelPlayerNumber[j] = i;
  41. j++;
  42. }
  43.  
  44. if(j == 2)
  45. {
  46. break;
  47. }
  48. }
  49. }
  50.  
  51. function int getIndexForPlayerNumber(int pNumber) {
  52.  
  53. return (duelPlayerNumber[0] == pNumber ? 0 : (duelPlayerNumber[1] == pNumber ? 1 : -1));
  54. }
  55.  
  56. function int getPlayerWeaponAccuracyPercent(int pNumber, int weapon) {
  57.  
  58. if(shotsFired[getIndexForPlayerNumber(pNumber)][weapon])
  59. {
  60. return 0;
  61. }
  62.  
  63. return (hitsOnTarget[getIndexForPlayerNumber(pNumber)][weapon] / shotsFired[getIndexForPlayerNumber(pNumber)][weapon]) * 100;
  64. }
  65.  
  66. function int getPlayerTotalAccuracyPercent(int pNumber) {
  67.  
  68. int totalShots;
  69. int totalShotsOnTarget;
  70.  
  71. for(int i = 0; i < MAX_WEAPONS; i++)
  72. {
  73. totalShots = shotsFired[getIndexForPlayerNumber(pNumber)][i];
  74. totalShotsOnTarget = hitsOnTarget[getIndexForPlayerNumber(pNumber)][i];
  75. }
  76.  
  77. if(totalShots == 0)
  78. {
  79. return 0;
  80. }
  81.  
  82. return (totalShotsOnTarget / totalShots) * 100;
  83. }
  84.  
  85. function int getPlayerCollectedMajorPickups(int pNumber) {
  86.  
  87. int totalCollectedMajorPickups;
  88.  
  89. totalCollectedMajorPickups += CheckActorInventory(pNumber + 1000, "CollectedGreenArmors");
  90. totalCollectedMajorPickups += CheckActorInventory(pNumber + 1000, "CollectedBlueArmors");
  91. totalCollectedMajorPickups += CheckActorInventory(pNumber + 1000, "CollectedYellowArmors");
  92. totalCollectedMajorPickups += CheckActorInventory(pNumber + 1000, "CollectedRedArmors");
  93. totalCollectedMajorPickups += CheckActorInventory(pNumber + 1000, "CollectedSoulSpheres");
  94.  
  95. return totalCollectedMajorPickups;
  96. }
  97.  
  98. SCRIPT "Game Event" (int type, int arg1, int arg2) EVENT
  99. {
  100. switch(type)
  101. {
  102. case GAMEEVENT_ROUND_STARTS:
  103. resetStatsSystem();
  104. findActiveDuelPlayers();
  105. break;
  106. case GAMEEVENT_ROUND_ENDS:
  107. // Show stats
  108.  
  109. // Global stats
  110. int mostAccuratePlayerNum;
  111. int bestControlPlayerNum;
  112.  
  113. // Item control calc
  114. if(getPlayerCollectedMajorPickups(duelPlayerNumber[0]) > getPlayerCollectedMajorPickups(duelPlayerNumber[1]))
  115. {
  116. bestControlPlayerNum = duelPlayerNumber[0];
  117. }
  118. else if(getPlayerCollectedMajorPickups(duelPlayerNumber[0]) < getPlayerCollectedMajorPickups(duelPlayerNumber[1])
  119. {
  120. bestControlPlayerNum = duelPlayerNumber[1];
  121. }
  122. else
  123. {
  124. bestControlPlayerNum = -1;
  125. }
  126.  
  127. // Accuracy calc
  128. if(getPlayerTotalAccuracyPercent(duelPlayerNumber[0]) > getPlayerTotalAccuracyPercent(duelPlayerNumber[1]))
  129. {
  130. mostAccuratePlayerNum = duelPlayerNumber[0];
  131. }
  132. else if(getPlayerTotalAccuracyPercent(duelPlayerNumber[0]) < getPlayerTotalAccuracyPercent(duelPlayerNumber[1])
  133. {
  134. mostAccuratePlayerNum = duelPlayerNumber[1];
  135. }
  136. else
  137. {
  138. mostAccuratePlayerNum = -1;
  139. }
  140.  
  141. // Printing
  142. if(bestControlPlayerNum == -1 && mostAccuratePlayerNum == -1)
  143. {
  144. HudMessageBold(s:"Most accurate: Both\nBest Item Control: Both", HUDMSG_PLAIN, 0, CR_WHITE, 1.5, 0.5, 0);
  145. }
  146. else if(bestControlPlayerNum == -1 && mostAccuratePlayerNum != -1)
  147. {
  148. HudMessageBold(s:"Most accurate: ", n:mostAccuratePlayerNum, s:"\nBest Item Control: Both", HUDMSG_PLAIN, 0, CR_WHITE, 1.5, 0.5, 0);
  149. }
  150. else if(bestControlPlayerNum != -1 && mostAccuratePlayerNum == -1)
  151. {
  152. HudMessageBold(s:"Most accurate: Both\nBest Item Control: ", n:bestControlPlayerNum, HUDMSG_PLAIN, 0, CR_WHITE, 1.5, 0.5, 0);
  153. }
  154. else
  155. {
  156. HudMessageBold(s:"Most accurate: ", n:mostAccuratePlayerNum, s:"\nBest Item Control: ", n:bestControlPlayerNum, HUDMSG_PLAIN, 0, CR_WHITE, 1.5, 0.5, 0);
  157. }
  158.  
  159. // End global stats
  160.  
  161. // Player 1 stats
  162. HudMessageBold(n:duelPlayerNumber[0], s:"'s stats:\n\nPickups:\n",
  163. s:"\nGreen Armors: ", d:CheckActorInventory(duelPlayerNumber[0] + 1000, "CollectedGreenArmors"),
  164. s:"\nBlue Armors: ", d:CheckActorInventory(duelPlayerNumber[0] + 1000, "CollectedBlueArmors"),
  165. s:"\nYellow Armors: ", d:CheckActorInventory(duelPlayerNumber[0] + 1000, "CollectedYellowArmors"),
  166. s:"\nRed Armors: ", d:CheckActorInventory(duelPlayerNumber[0] + 1000, "CollectedRedArmors"),
  167. s:"\nSoulspheres: ", d:CheckActorInventory(duelPlayerNumber[0] + 1000, "CollectedSoulSpheres"),
  168. s:"\n\nWeapon Accuracy:\n",
  169. s:"\nFist: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_FIST), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_FIST], s:" / ", d:shotsFired[0][WEAPON_FIST], s:"]",
  170. s:"\nChainsaw: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_CHAINSAW), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_CHAINSAW], s:" / ", d:shotsFired[0][WEAPON_CHAINSAW], s:"]",
  171. s:"\nPistol: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_PISTOL), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_PISTOL], s:" / ", d:shotsFired[0][WEAPON_PISTOL], s:"]",
  172. s:"\nShotgun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_SHOTGUN), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_SHOTGUN], s:" / ", d:shotsFired[0][WEAPON_SHOTGUN], s:"]",
  173. s:"\nSSG: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_SSG), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_SSG], s:" / ", d:shotsFired[0][WEAPON_SSG], s:"]",
  174. s:"\nChaingun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_CHAINGUN), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_CHAINGUN], s:" / ", d:shotsFired[0][WEAPON_CHAINGUN], s:"]",
  175. s:"\nPlasma Rifle: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_PLASMA), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_PLASMA], s:" / ", d:shotsFired[0][WEAPON_PLASMA], s:"]",
  176. s:"\nRocket Launcher ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_RL), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_RL], s:" / ", d:shotsFired[0][WEAPON_RL], s:"]",
  177. s:"\nGrenade Launcher: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_GL), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_GL], s:" / ", d:shotsFired[0][WEAPON_GL], s:"]",
  178. s:"\nLightning Gun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_LG), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_LG], s:" / ", d:shotsFired[0][WEAPON_LG], s:"]",
  179. s:"\nRailgun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[0], WEAPON_RAILGUN), s:"%", s:"[", d:hitsOnTarget[0][WEAPON_RAILGUN], s:" / ", d:shotsFired[0][WEAPON_RAILGUN], s:"]",
  180. HUDMSG_PLAIN, 1, CR_WHITE, 0.0, 0.5, 0);
  181.  
  182. // End player 1 stats
  183.  
  184. // Player 2 stats
  185. HudMessageBold(n:duelPlayerNumber[1], s:"'s stats:\n\nPickups:\n",
  186. s:"\nGreen Armors: ", d:CheckActorInventory(duelPlayerNumber[1] + 1000, "CollectedGreenArmors"),
  187. s:"\nBlue Armors: ", d:CheckActorInventory(duelPlayerNumber[1] + 1000, "CollectedBlueArmors"),
  188. s:"\nYellow Armors: ", d:CheckActorInventory(duelPlayerNumber[1] + 1000, "CollectedYellowArmors"),
  189. s:"\nRed Armors: ", d:CheckActorInventory(duelPlayerNumber[1] + 1000, "CollectedRedArmors"),
  190. s:"\nSoulspheres: ", d:CheckActorInventory(duelPlayerNumber[1] + 1000, "CollectedSoulSpheres"),
  191. s:"\n\nWeapon Accuracy:\n",
  192. s:"\nFist: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_FIST), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_FIST], s:" / ", d:shotsFired[1][WEAPON_FIST], s:"]",
  193. s:"\nChainsaw: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_CHAINSAW), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_CHAINSAW], s:" / ", d:shotsFired[1][WEAPON_CHAINSAW], s:"]",
  194. s:"\nPistol: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_PISTOL), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_PISTOL], s:" / ", d:shotsFired[1][WEAPON_PISTOL], s:"]",
  195. s:"\nShotgun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_SHOTGUN), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_SHOTGUN], s:" / ", d:shotsFired[1][WEAPON_SHOTGUN], s:"]",
  196. s:"\nSSG: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_SSG), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_SSG], s:" / ", d:shotsFired[1][WEAPON_SSG], s:"]",
  197. s:"\nChaingun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_CHAINGUN), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_CHAINGUN], s:" / ", d:shotsFired[1][WEAPON_CHAINGUN], s:"]",
  198. s:"\nPlasma Rifle: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_PLASMA), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_PLASMA], s:" / ", d:shotsFired[1][WEAPON_PLASMA], s:"]",
  199. s:"\nRocket Launcher: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_RL), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_RL], s:" / ", d:shotsFired[1][WEAPON_RL], s:"]",
  200. s:"\nGrenade Launcher: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_GL), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_GL], s:" / ", d:shotsFired[1][WEAPON_GL], s:"]",
  201. s:"\nLightning Gun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_LG), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_LG], s:" / ", d:shotsFired[1][WEAPON_LG], s:"]",
  202. s:"\nRailgun: ", d:getPlayerWeaponAccuracyPercent(duelPlayerNumber[1], WEAPON_RAILGUN), s:"%", s:"[", d:hitsOnTarget[1][WEAPON_RAILGUN], s:" / ", d:shotsFired[1][WEAPON_RAILGUN], s:"]",
  203. HUDMSG_PLAIN, 2, CR_WHITE, 1.0, 0.5, 0);
  204.  
  205. // End player 2 stats
  206.  
  207. // End show stats
  208. resetStatsSystem();
  209. break;
  210. case GAMEEVENT_ROUND_ABORTED:
  211. resetStatsSystem();
  212. break;
  213. default:
  214. break;
  215. }
  216. }
  217.  
  218. SCRIPT "Register Weapon Shot" (int weapon)
  219. {
  220. SetActivatorToTarget(0);
  221. shotsFired[getIndexForPlayerNumber(PlayerNumber())][weapon]++;
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement