Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 85.44 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <csx>
  5. #include <engine>
  6. #include <fakemeta>
  7. #include <fakemeta_util>
  8. #include <fun>
  9. #include <hamsandwich>
  10.  
  11. #define PLUGIN "Powers"
  12. #define VERSION "3.0"
  13. #define AUTHOR "sDs|Aragon*"
  14.  
  15. //#define GOLD_SISTEM
  16.  
  17. //#if defined GOLD_SISTEM
  18. //#include <furien30_shop>
  19. //#endif
  20.  
  21. // VIP
  22. #define VIP_LEVEL ADMIN_LEVEL_H
  23. #define VIP_XP_MULTIPLIER 2.0
  24.  
  25. // Objective Modifiers
  26. #define DEFUSING_BOMB 20.0 // XP awarded when the user starts to defuse the bomb
  27. #define DEFUSED_BOMB 40.0 // XP awarded when the user defuses the bomb
  28. #define PLANTING_BOMB 20.0 // XP awarded when the user starts planting the bomb
  29. #define PLANT_BOMB 40.0 // XP awarded when the user plants the bomb
  30. #define BOMB_PICKUP 20.0 // XP awarded when the user picks up the bomb
  31. #define TOUCH_HOSTAGE 20.0 // XP awarded when the user touches a hostage
  32. #define RESCUE_HOSTAGE 40.0 // XP awarded when the user rescues the hostage
  33. #define KILL_HOSTAGE 20.0 // XP lost when killing a hostage
  34. #define SPAWN_VIP 20.0 // XP awarded for spawning as the VIP
  35. #define ESCAPE_VIP 40.0 // XP awarded for escaping as the VIP
  36.  
  37. // Kill modifiers
  38. #define KILL 35.0 // XP awarded for getting a headshot
  39. #define KILL_HEADSHOT 20.0 // XP awarded for getting a headshot
  40. #define KILL_HOSTAGE_SAVER 20.0 // XP awarded for killing the hostage saver
  41. #define KILL_DEFUSER 20.0 // XP awarded for killing the defuser
  42. #define KILL_PLANTER 20.0 // XP awarded for killing the planter
  43. #define KILL_BOMB_CARRIER 20.0 // XP awarded for killing the bomb carrier
  44. #define KILL_VIP 40.0 // XP awarded for killing the VIP
  45.  
  46. #define WIN_ROUND 40.0 // XP awarded for winning the round
  47.  
  48. enum {
  49. PLR_BOMB_DEFUSER = 1,
  50. PLR_BOMB_PLANTER,
  51. PLR_HOSTAGE_RESCUER,
  52. PLR_VIP,
  53. PLR_BOMB_CARRIER,
  54. };
  55.  
  56. new bool:RoundEnded, bool:HasBegunPlantingOrDefusing[33], PlayerRole[33];
  57. #define SPAWN_DELAY 0.2
  58.  
  59. #define TASK_RESETSPAWNS 3001
  60. #define TASK_SPAWNREMOVEGOD 128
  61. #define TASK_SPAWN 32
  62. #define TASK_SPAWNPLAYER 1056
  63.  
  64. //------| Powers |------//
  65. #define POWER_UNHOLYAURA
  66. #define POWER_LEVITATION
  67. #define POWER_VAMPIRICAURA
  68. #define POWER_EVASION
  69. #define POWER_TRUESHOT
  70. #define POWER_PHOENIX
  71. #define POWER_BANISH
  72. #define POWER_DEVOTIONAURA
  73. #define POWER_BASH
  74. #define POWER_CRITICALSTRIKE
  75. #define POWER_CRITICALGRENADE
  76. #define POWER_SIPHONMANA
  77. #define POWER_HEALINGWAVE
  78. #define POWER_SHADOWSTRIKE
  79. #define POWER_UNSTABLECONCOCTION
  80. #define POWER_ORB
  81.  
  82. new MAX_LEVEL
  83. #define EXPERIENCE_LEVEL 200
  84.  
  85. #define DESIGN1_STYLE "<meta charset=UTF-8><style>body{background:#112233;font-family:Arial}th{background:#558866;color:#FFF;padding:10px 2px;text-align:left}td{padding:4px 3px}table{background:#EEEECC;font-size:12px;font-family:Arial}h2,h3{color:#FFF;font-family:Verdana}#c{background:#E2E2BC}img{height:10px;background:#09F;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px}</style>"
  86. #define DESIGN2_STYLE "<meta charset=UTF-8><style>body{font-family:Arial}th{background:#575757;color:#FFF;padding:5px;border-bottom:2px #BCE27F solid;text-align:left}td{padding:3px;border-bottom:1px #E7F0D0 solid}table{color:#3C9B4A;background:#FFF;font-size:12px}h2,h3{color:#333;font-family:Verdana}#c{background:#F0F7E2}img{height:10px;background:#62B054;margin:0 3px}#r{height:10px;background:#717171}#clr{background:none;color:#575757;font-size:20px}</style>"
  87. #define DESIGN3_STYLE "<meta charset=UTF-8><style>body{background:#E6E6E6;font-family:Verdana}th{background:#F5F5F5;color:#A70000;padding:6px;text-align:left}td{padding:2px 6px}table{color:#333;background:#E6E6E6;font-size:10px;font-family:Georgia;border:2px solid #D9D9D9}h2,h3{color:#333;}#c{background:#FFF}img{height:10px;background:#14CC00;margin:0 3px}#r{height:10px;background:#CC8A00}#clr{background:none;color:#A70000;font-size:20px;border:0}</style>"
  88. #define DESIGN4_STYLE "<meta charset=UTF-8><style>body{background:#E8EEF7;margin:2px;font-family:Tahoma}th{color:#0000CC;padding:3px}tr{text-align:left;background:#E8EEF7}td{padding:3px}table{background:#CCC;font-size:11px}h2,h3{font-family:Verdana}img{height:10px;background:#09F;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#000;font-size:20px}</style>"
  89. #define DESIGN5_STYLE "<meta charset=UTF-8><style>body{background:#555;font-family:Arial}th{border-left:1px solid #ADADAD;border-top:1px solid #ADADAD}table{background:#3C3C3C;font-size:11px;color:#FFF;border-right:1px solid #ADADAD;border-bottom:1px solid #ADADAD;padding:3px}h2,h3{color:#FFF}#c{background:#FF9B00;color:#000}img{height:10px;background:#00E930;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px;border:0}</style>"
  90. #define DESIGN6_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#303B4A;color:#FFF}table{padding:6px 2px;background:#EFF1F3;font-size:12px;color:#222;border:1px solid #CCC}h2,h3{color:#222}#c{background:#E9EBEE}img{height:7px;background:#F8931F;margin:0 3px}#r{height:7px;background:#D2232A}#clr{background:none;color:#303B4A;font-size:20px;border:0}</style>"
  91. #define DESIGN7_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Verdana}th{background:#2E2E2E;color:#FFF;text-align:left}table{padding:6px 2px;background:#FFF;font-size:11px;color:#333;border:1px solid #CCC}h2,h3{color:#333}#c{background:#F0F0F0}img{height:7px;background:#444;margin:0 3px}#r{height:7px;background:#999}#clr{background:none;color:#2E2E2E;font-size:20px;border:0}</style>"
  92. #define DESIGN8_STYLE "<meta charset=UTF-8><style>body{background:#242424;margin:20px;font-family:Tahoma}th{background:#2F3034;color:#BDB670;text-align:left} table{padding:4px;background:#4A4945;font-size:10px;color:#FFF}h2,h3{color:#D2D1CF}#c{background:#3B3C37}img{height:12px;background:#99CC00;margin:0 3px}#r{height:12px;background:#999900}#clr{background:none;color:#FFF;font-size:20px}</style>"
  93. #define DESIGN9_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#056B9E;color:#FFF;padding:3px;text-align:left;border-top:4px solid #3986AC}td{padding:2px 6px}table{color:#006699;background:#FFF;font-size:12px;border:2px solid #006699}h2,h3{color:#F69F1C;}#c{background:#EFEFEF}img{height:5px;background:#1578D3;margin:0 3px}#r{height:5px;background:#F49F1E}#clr{background:none;color:#056B9E;font-size:20px;border:0}</style>"
  94. #define DESIGN10_STYLE "<meta charset=UTF-8><style>body{background:#4C5844;font-family:Tahoma}th{background:#1E1E1E;color:#C0C0C0;padding:2px;text-align:left;}td{padding:2px 10px}table{color:#AAC0AA;background:#424242;font-size:13px}h2,h3{color:#C2C2C2;font-family:Tahoma}#c{background:#323232}img{height:3px;background:#B4DA45;margin:0 3px}#r{height:3px;background:#6F9FC8}#clr{background:none;color:#FFF;font-size:20px}</style>"
  95. #define DESIGN11_STYLE "<meta charset=UTF-8><style>body{background:#F2F2F2;font-family:Arial}th{background:#175D8B;color:#FFF;padding:7px;text-align:left}td{padding:3px;border-bottom:1px #BFBDBD solid}table{color:#153B7C;background:#F4F4F4;font-size:11px;border:1px solid #BFBDBD}h2,h3{color:#153B7C}#c{background:#ECECEC}img{height:8px;background:#54D143;margin:0 3px}#r{height:8px;background:#C80B0F}#clr{background:none;color:#175D8B;font-size:20px;border:0}</style>"
  96. #define DESIGN12_STYLE "<meta charset=UTF-8><style>body{background:#283136;font-family:Arial}th{background:#323B40;color:#6ED5FF;padding:10px 2px;text-align:left}td{padding:4px 3px;border-bottom:1px solid #DCDCDC}table{background:#EDF1F2;font-size:10px;border:2px solid #505A62}h2,h3{color:#FFF}img{height:10px;background:#A7CC00;margin:0 3px}#r{height:10px;background:#CC3D00}#clr{background:none;color:#6ED5FF;font-size:20px;border:0}</style>"
  97. #define DESIGN13_STYLE "<meta charset=UTF-8><style>body{background:#220000;font-family:Tahoma}th{background:#3E0909;color:#FFF;padding:5px 2px;text-align:left;border-bottom:1px solid #DEDEDE}td{padding:2px 2px;}table{background:#FFF;font-size:11px;border:1px solid #791616}h2,h3{color:#FFF}#c{background:#F4F4F4;color:#7B0000}img{height:7px;background:#a00000;margin:0 3px}#r{height:7px;background:#181818}#clr{background:none;color:#CFCFCF;font-size:20px;border:0}</style>"
  98. #define DEFAULT_STYLE "<meta charset=UTF-8><style>body{background:#000}tr{text-align:left}table{font-size:13px;color:#FFB000;padding:2px}h2,h3{color:#FFF;font-family:Verdana}img{height:5px;background:#0000FF;margin:0 3px}#r{height:5px;background:#FF0000}</style>"
  99.  
  100. new Menu, PlayerLevel[33], PlayerExperience[33], CreditsUsed[33], Credits[33];
  101. new PowersFile[128];
  102. new cvar_motd_style;
  103.  
  104. new GlowLevel[33][4]
  105. #define MAX_HEALTH 250
  106. #define TASK_GLOW 416
  107. #define MAXGLOW 150
  108.  
  109. //------| Powers |------//
  110. new SpawnReserved[64], SpawnEnt[2][32], SpawnInc = 0
  111.  
  112. #define SKILL_MAX_LEVEL 5
  113. #define DMG_HEGRENADE (1<<24)
  114.  
  115. #define HITGROUP_GENERIC 0 // none
  116. #define HITGROUP_HEAD 1 // 1 << 1 = 2
  117. #define HITGROUP_CHEST 2 // 1 << 2 = 4
  118. #define HITGROUP_STOMACH 3 // 8
  119. #define HITGROUP_LEFTARM 4 // 16
  120. #define HITGROUP_RIGHTARM 5 // 32
  121. #define HITGROUP_LEFTLEG 6 // 64
  122. #define HITGROUP_RIGHTLEG 7 // 128
  123.  
  124. //------| Unholy Aura |------//
  125. #if defined POWER_UNHOLYAURA
  126. new SKILL_UNHOLYAURA[][] = { "Unholy Aura", "0" };
  127. new Float:Unholy[SKILL_MAX_LEVEL][2] = {
  128. {630.0, 250.0}, // Level 1
  129. {660.0, 270.0}, // Level 2
  130. {690.0, 290.0}, // Level 3
  131. {710.0, 310.0}, // Level 4
  132. {740.0, 330.0} // Level 5
  133. }
  134.  
  135. new UnholyAura_Level[33]
  136. #else
  137. new TempUnholyAura_Level[33]
  138. #endif
  139.  
  140. //------| Levitation |------//
  141. #if defined POWER_LEVITATION
  142. new SKILL_LEVITATION[][] = { "Levitation", "0" };
  143. new Float:Levitation[SKILL_MAX_LEVEL][2] = {
  144. {0.460, 0.78}, // Level 1
  145. {0.445, 0.76}, // Level 2
  146. {0.430, 0.74}, // Level 3
  147. {0.415, 0.72}, // Level 4
  148. {0.400, 0.70} // Level 5
  149. }
  150.  
  151. new Levitation_Level[33]
  152. #else
  153. new TempLevitation_Level[33]
  154. #endif
  155.  
  156. //------| Vampiric Aura |------//
  157. #if defined POWER_VAMPIRICAURA
  158. new SKILL_VAMPIRICAURA[][] = { "Vampiric Aura", "0" };
  159. new const Float:Vampiric[SKILL_MAX_LEVEL][2] = {
  160. {0.05, 0.05}, // Level 1
  161. {0.15, 0.15}, // Level 2
  162. {0.20, 0.20}, // Level 3
  163. {0.27, 0.27}, // Level 4
  164. {0.35, 0.35} // Level 5
  165. }
  166.  
  167. new VampiricAura_Level[33]
  168. #else
  169. new TempVampiricAura_Level[33]
  170. #endif
  171.  
  172. //------| Evasion |------//
  173. #if defined POWER_EVASION
  174. new SKILL_EVASION[][] = { "Evasion", "0" };
  175. new const Float:Evasion[SKILL_MAX_LEVEL][2] = {
  176. {0.05, 0.05}, // Level 1
  177. {0.15, 0.15}, // Level 2
  178. {0.20, 0.20}, // Level 3
  179. {0.27, 0.27}, // Level 4
  180. {0.35, 0.35} // Level 5
  181. }
  182. new Evasion_Level[33]
  183. #else
  184. new TempEvasion_Level[33]
  185. #endif
  186.  
  187. //------| Banish |------//
  188. #if defined POWER_BANISH
  189. new SKILL_BANISH[][] = { "Banish", "0" };
  190. new const Float:Banish[SKILL_MAX_LEVEL][2] = {
  191. {0.05, 0.05}, // Level 1
  192. {0.1, 0.1}, // Level 2
  193. {0.15, 0.15}, // Level 3
  194. {0.20, 0.20}, // Level 4
  195. {0.25, 0.25} // Level 5
  196. }
  197.  
  198. #define BANISH_DAMAGE 1
  199. #define BANISH_HOLDTIME 0.7
  200. #define TASK_BANISH 96
  201. #define TASK_BANISHRETURN 345
  202.  
  203. #define SOUND_BANISH "furien30_powers/banishcaster.wav"
  204.  
  205. new Banish_Level[33], bool:PlayerBanished[33], SPR_BANISH;
  206. #else
  207. new TempBanish_Level[33]
  208. #endif
  209.  
  210. //------| True Shot |------//
  211. #if defined POWER_TRUESHOT
  212. new SKILL_TRUESHOT[][] = { "True Shot", "0" };
  213. new const Float:TrueShot[SKILL_MAX_LEVEL][2] = {
  214. {0.05, 0.05}, // Level 1
  215. {0.1, 0.1}, // Level 2
  216. {0.15, 0.15}, // Level 3
  217. {0.20, 0.20}, // Level 4
  218. {0.25, 0.25} // Level 5
  219. }
  220.  
  221. new TrueShot_Level[33]
  222. #else
  223. new TempTrueShot_Level[33]
  224. #endif
  225.  
  226. //------| Phoenix |------//
  227. #if defined POWER_PHOENIX
  228. new SKILL_PHOENIX[][] = { "Phoenix", "0" };
  229. new const Float:Phoenix[SKILL_MAX_LEVEL][2] = {
  230. {0.05, 0.05}, // Level 1
  231. {0.15, 0.15}, // Level 2
  232. {0.20, 0.20}, // Level 3
  233. {0.27, 0.27}, // Level 4
  234. {0.35, 0.35} // Level 5
  235. }
  236.  
  237. new Phoenix_Level[33], bool:IsPhoenix[33]
  238. #else
  239. new TempPhoenix_Level[33]
  240. #endif
  241.  
  242. //------| Devotation Aura |------//
  243. #if defined POWER_DEVOTIONAURA
  244. new SKILL_DEVOTIONAURA[][] = { "Devotion Aura", "0" };
  245. new const Devotion[2] = {30, 30} // HP/LEVEL
  246.  
  247. new DevotionAura_Level[33]
  248. #else
  249. new TempDevotionAura_Level[33]
  250. #endif
  251.  
  252. //------| Critical Strike |------//
  253. #if defined POWER_CRITICALSTRIKE
  254. new SKILL_CRITICALSTRIKE[][] = { "Critical Strike", "0" };
  255. new const Float:Critical[SKILL_MAX_LEVEL][2] = {
  256. {0.05, 0.05}, // Level 1
  257. {0.15, 0.15}, // Level 2
  258. {0.20, 0.20}, // Level 3
  259. {0.27, 0.27}, // Level 4
  260. {0.35, 0.35} // Level 5
  261. }
  262.  
  263. #define CRITICAL_STRIKE_CHANCE 0.15
  264.  
  265. new CriticalStrike_Level[33]
  266. #else
  267. new TempCriticalStrike_Level[33]
  268. #endif
  269.  
  270. //------| Critical Grenade |------//
  271. #if defined POWER_CRITICALGRENADE
  272. new SKILL_CRITICALGRENADE[][] = { "Critical Grenade", "0" };
  273. new const Float:Grenade[SKILL_MAX_LEVEL][2] = {
  274. {1.2, 1.2}, // Level 1
  275. {1.4, 1.4}, // Level 2
  276. {1.6, 1.6}, // Level 3
  277. {1.8, 1.8}, // Level 4
  278. {2.0, 2.0} // Level 5
  279. }
  280.  
  281. new CriticalGrenade_Level[33]
  282. #else
  283. new TempCriticalGrenade_Level[33]
  284. #endif
  285.  
  286. //------| Bash |------//
  287. #if defined POWER_BASH
  288. new SKILL_BASH[][] = { "Bash", "0" };
  289. new const Float:Bash[SKILL_MAX_LEVEL][2] = {
  290. {0.025, 0.025}, // Level 1
  291. {0.050, 0.050}, // Level 2
  292. {0.075, 0.075}, // Level 3
  293. {0.1, 0.1}, // Level 4
  294. {1.25, 1.25} // Level 5
  295. }
  296.  
  297. #define BASH_GLOW_INTENSITY 20
  298. #define BASH_HOLD_TIME 0.7
  299. #define TASK_RESETBASH 512
  300.  
  301. new Bash_Level[33], Bash_Stunned[33], Float:LastSpeed[33];
  302. #else
  303. new TempBash_Level[33]
  304. #endif
  305.  
  306. //------| Healing Wave |------//
  307. #if defined POWER_HEALINGWAVE
  308. new SKILL_HEALINGWAVE[][] = { "Healing Wave", "0" };
  309. new const Float:Heal[SKILL_MAX_LEVEL][2] = {
  310. {1.25, 1.25}, // Level 1
  311. {1.0, 1.0}, // Level 2
  312. {0.75, 0.75}, // Level 3
  313. {0.50, 0.50}, // Level 4
  314. {0.25, 0.25} // Level 5
  315. }
  316.  
  317. #define HEALING_WAVE_RANGE 750
  318.  
  319. #define TASK_WAVE 352
  320.  
  321. new HealingWave_Level[33]
  322. #else
  323. new TempHealingWave_Level[33]
  324. #endif
  325.  
  326. //------| Shadow Strike |------//
  327. #if defined POWER_SHADOWSTRIKE
  328. new SKILL_SHADOWSTRIKE[][] = { "Shadow Strike", "0" };
  329. new const Float:Shadow[SKILL_MAX_LEVEL][2] = {
  330. {0.05, 0.05}, // Level 1
  331. {0.15, 0.15}, // Level 2
  332. {0.20, 0.20}, // Level 3
  333. {0.27, 0.27}, // Level 4
  334. {0.35, 0.35} // Level 5
  335. }
  336.  
  337. #define SHADOWSTRIKE_DAMAGE 10
  338. #define SOUND_SHADOWSTRIKE "furien30_powers/shadowstrikebirth.wav"
  339.  
  340. new ShadowStrike_Level[33], SPR_SHADOWSTRIKE
  341. #else
  342. new TempShadowStrike_Level[33]
  343. #endif
  344.  
  345. //------| Siphon Mana |------//
  346. #if defined POWER_SIPHONMANA
  347. new SKILL_SIPHONMANA[][] = { "Siphon Mana", "0" };
  348. new const Float:Mana[SKILL_MAX_LEVEL][2] = {
  349. {1.0, 1.0}, // Level 1
  350. {1.5, 1.5}, // Level 2
  351. {2.0, 2.0}, // Level 3
  352. {2.5, 2.5}, // Level 4
  353. {3.0, 3.0} // Level 5
  354. }
  355.  
  356. new SiphonMana_Level[33]
  357. #else
  358. new TempSiphonMana_Level[33]
  359. #endif
  360.  
  361. //------| Unstable Concoction |------//
  362. #if defined POWER_UNSTABLECONCOCTION
  363. //new PASS_UNSTABLECONCOCTION[] = "Unstable Concoction"
  364. new const Float:Concoction[2] = {0.01, 0.01} // Sansa * Leve
  365. new SPR_SHOCKWAVE
  366.  
  367. #define CONCOCTION_DAMAGE 15
  368. #define CONCOCTION_RADIUS 300
  369.  
  370. #define SOUND_CONCOCTION_CAST "furien30_powers/PossessionMissileLaunch1.wav"
  371. #define SOUND_CONCOCTION_HIT "furien30_powers/PossessionMissileHit1.wav"
  372. #endif
  373.  
  374. //------| Orb of Annihilation |------//
  375. #if defined POWER_ORB
  376. //new PASS_ORB[] = "Orb of Annihilation"
  377. new const Float:Orb[2] = {0.01, 0.01} // Sansa * Level
  378. new SPR_WAVE
  379.  
  380. #define ORB_DAMAGE 20
  381. #define SOUND_ANNIHILATION "furien30_powers/PurgeTarget1.wav"
  382. #endif
  383.  
  384. public plugin_init() {
  385. register_clcmd("resetskills", "CMD_ResetSkills");
  386. register_clcmd("say /resetskills", "CMD_ResetSkills");
  387. register_clcmd("say_team /resetskills", "CMD_ResetSkills");
  388. register_clcmd("powers", "CMD_PowersMenu");
  389. register_clcmd("say /powers", "CMD_PowersMenu");
  390. register_clcmd("say_team /powers", "CMD_PowersMenu");
  391. register_clcmd("playersinfo", "CMD_PlayersInfo");
  392. register_clcmd("say /playersinfo", "CMD_PlayersInfo");
  393. register_clcmd("say playersinfo", "CMD_PlayersInfo");
  394. register_clcmd("say_team /playersinfo", "CMD_PlayersInfo");
  395. register_clcmd("say_team playersinfo", "CMD_PlayersInfo");
  396.  
  397. register_concmd("amx_give_xp", "GiveExperience", ADMIN_CVAR, "Name/@All -> Amount");
  398. register_concmd("amx_reset_xp", "ResetExperience", ADMIN_CVAR, "Name/@All -> Amount");
  399.  
  400. register_logevent("LOGEVENT_RoundStart", 2, "1=Round_Start");
  401. register_logevent("LOGEVENT_RoundEnd", 2, "1=Round_End");
  402. register_logevent("LOGEVENT_RoundEnd", 2, "1&Restart_Round_")
  403.  
  404. register_logevent("LOGEVENT_PlayerAction", 3, "1=triggered");
  405.  
  406. register_event("SendAudio","EVENT_FurienWin","a","2=%!MRAD_terwin");
  407. register_event("SendAudio","EVENT_AntiFurienWin","a","2=%!MRAD_ctwin");
  408. register_event("DeathMsg", "EVENT_Death", "a");
  409.  
  410. register_forward(FM_ClientUserInfoChanged, "FWD_ChangeName");
  411. register_forward(FM_PlayerPreThink, "FWD_PlayerPreThink");
  412.  
  413. RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post", 1);
  414. RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage");
  415. RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage_Post", 1);
  416.  
  417. cvar_motd_style = register_cvar("furien30_playersinfo_motdstyle", "10");
  418.  
  419. new DataDir[64]
  420. get_datadir(DataDir, 63)
  421. format(PowersFile, 127, "%s/Powers.dat", DataDir)
  422.  
  423. new Power = 0
  424. #if defined POWER_UNHOLYAURA
  425. Power++
  426. #endif
  427. #if defined POWER_LEVITATION
  428. Power++
  429. #endif
  430. #if defined POWER_VAMPIRICAURA
  431. Power++
  432. #endif
  433. #if defined POWER_EVASION
  434. Power++
  435. #endif
  436. #if defined POWER_BANISH
  437. Power++
  438. #endif
  439. #if defined POWER_TRUESHOT
  440. Power++
  441. #endif
  442. #if defined POWER_PHOENIX
  443. Power++
  444. #endif
  445. #if defined POWER_DEVOTIONAURA
  446. Power++
  447. #endif
  448. #if defined POWER_CRITICALSTRIKE
  449. Power++
  450. #endif
  451. #if defined POWER_CRITICALGRENADE
  452. Power++
  453. #endif
  454. #if defined POWER_BASH
  455. Power++
  456. #endif
  457. #if defined POWER_HEALINGWAVE
  458. Power++
  459. #endif
  460. #if defined POWER_SHADOWSTRIKE
  461. Power++
  462. #endif
  463. #if defined POWER_SIPHONMANA
  464. Power++
  465. #endif
  466.  
  467. MAX_LEVEL = (Power * SKILL_MAX_LEVEL)
  468.  
  469. set_task(30.0,"TASK_Messages", 0,_,_,"b");
  470. }
  471.  
  472. public plugin_precache() {
  473. #if defined POWER_BANISH
  474. precache_sound(SOUND_BANISH)
  475. SPR_BANISH = precache_model("sprites/nhth1.spr")
  476. #endif
  477.  
  478. #if defined POWER_UNSTABLECONCOCTION
  479. precache_sound(SOUND_CONCOCTION_CAST)
  480. precache_sound(SOUND_CONCOCTION_HIT)
  481. SPR_SHOCKWAVE = precache_model("sprites/ef_shockwave.spr")
  482. #endif
  483.  
  484. #if defined POWER_SHADOWSTRIKE
  485. precache_sound(SOUND_SHADOWSTRIKE)
  486. SPR_SHADOWSTRIKE = precache_model("sprites/animglow01.spr");
  487. #endif
  488.  
  489. #if defined POWER_ORB
  490. SPR_WAVE = precache_model("sprites/gwave1.spr");
  491. precache_sound(SOUND_ANNIHILATION)
  492. #endif
  493. }
  494.  
  495. public plugin_natives() {
  496. register_native("set_user_xp", "set_user_xp", 1);
  497. register_native("get_user_xp", "get_user_xp", 1);
  498. register_native("get_user_next_level_xp", "get_user_next_level_xp", 1);
  499. register_native("get_user_level", "get_user_level", 1);
  500. register_native("get_max_level", "get_max_level", 1);
  501. }
  502.  
  503. public set_user_xp(id, xp) {
  504. if(is_user_connected(id)) {
  505. PlayerExperience[id] = xp;
  506.  
  507. new Level
  508. for(new i = 1; i <= MAX_LEVEL; i++) {
  509. if(PlayerLevel[id] < i && PlayerExperience[id] >= EXPERIENCE_LEVEL * i)
  510. Level = i
  511. }
  512. PlayerLevel[id] = Level;
  513. Credits[id] = PlayerLevel[id] - CreditsUsed[id]
  514. if(Credits[id] >= 1)
  515. PowersMenu(id, 0)
  516.  
  517. SavePowers(id);
  518. }
  519. }
  520.  
  521. public get_user_xp(id) {
  522. return is_user_connected(id) ? PlayerExperience[id] : 0
  523. }
  524.  
  525. public get_user_next_level_xp(id) {
  526. if(is_user_connected(id) && (PlayerLevel[id] + 1) <= MAX_LEVEL)
  527. return EXPERIENCE_LEVEL * (PlayerLevel[id] + 1);
  528. return 0
  529. }
  530.  
  531. public get_user_level(id) {
  532. return is_user_connected(id) ? PlayerLevel[id] : 0
  533. }
  534.  
  535. public get_max_level() {
  536. return MAX_LEVEL
  537. }
  538.  
  539. public TASK_Messages(id) {
  540. switch(random_num(0,2)) {
  541. case 0:
  542. ColorChat(id, "!t[Furien]!g Scrie!t /powers!g in chat pentru a accesa puterile.");
  543. case 1:
  544. ColorChat(id, "!t[Furien]!g Scrie!t /playersinfo!g in chat pentru a vedea ce Level au ceilalti jucatori.");
  545. case 2:
  546. ColorChat(id, "!t[Furien]!g Scrie!t /resetskills!g in chat pentru a-ti reseta skill-urile.");
  547. }
  548. }
  549.  
  550. public client_putinserver(id) {
  551. LoadPowers(id);
  552. client_cmd(id, "bind j powers");
  553. }
  554.  
  555. public LOGEVENT_RoundStart()
  556. RoundEnded = false
  557.  
  558. public LOGEVENT_RoundEnd()
  559. RoundEnded = true
  560.  
  561. public LOGEVENT_PlayerAction() {
  562. new Arg[64], Action[64], Name[64];
  563. new UserId, id;
  564.  
  565. read_logargv(0, Arg, 64);
  566. read_logargv(2, Action, 64);
  567. parse_loguser(Arg, Name, 64, UserId);
  568. id = find_player("k", UserId);
  569.  
  570. if(is_user_connected(id) && !RoundEnded) {
  571. if(equal(Action,"Dropped_The_Bomb")) {
  572. PlayerRole[id] = 0;
  573.  
  574. new Float:BonusXP
  575. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (BOMB_PICKUP * VIP_XP_MULTIPLIER)) : (BonusXP = BOMB_PICKUP)
  576.  
  577. if(BonusXP) {
  578. new XP = floatround(BonusXP)
  579. set_user_xp(id, get_user_xp(id) - XP)
  580. ColorChat(id, "!gYou have lost!t %d XP!g for dropping the bomb", -1 * XP);
  581. }
  582. }
  583. else if(equal(Action,"Got_The_Bomb")) {
  584. PlayerRole[id] = PLR_BOMB_CARRIER;
  585.  
  586. new Float:BonusXP
  587. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (BOMB_PICKUP * VIP_XP_MULTIPLIER)) : (BonusXP = BOMB_PICKUP)
  588.  
  589. if(BonusXP) {
  590. new XP = floatround(BonusXP)
  591. set_user_xp(id, get_user_xp(id) + XP)
  592. ColorChat(id, "!gYou have been awarded!t %d XP for picking up the bomb", XP);
  593. }
  594. }
  595. else if(equal(Action,"Touched_A_Hostage")) {
  596. PlayerRole[id] = PLR_HOSTAGE_RESCUER;
  597.  
  598. new Float:BonusXP
  599. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (TOUCH_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = TOUCH_HOSTAGE)
  600.  
  601. if(BonusXP) {
  602. new XP = floatround(BonusXP)
  603. set_user_xp(id, get_user_xp(id) + XP)
  604. ColorChat(id, "!gYou have been awarded!t %d XP!g for starting to rescue a hostage", XP);
  605. }
  606. }
  607. else if(equal(Action,"Rescued_A_Hostage")) {
  608.  
  609. new Float:BonusXP
  610. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (RESCUE_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = RESCUE_HOSTAGE)
  611.  
  612. if(BonusXP) {
  613. new XP = floatround(BonusXP)
  614. set_user_xp(id, get_user_xp(id) + XP)
  615. ColorChat(id, "!gYou have been awarded!t %d XP!g for rescuing a hostage", XP);
  616. }
  617. }
  618. else if(equal(Action,"Killed_A_Hostage")) {
  619. new Float:BonusXP
  620. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (KILL_HOSTAGE * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HOSTAGE)
  621.  
  622. if(BonusXP) {
  623. new XP = floatround(BonusXP)
  624. set_user_xp(id, get_user_xp(id) - XP)
  625. ColorChat(id, "!gYou have lost!t %d XP!g for killing a hostage", -1 * XP);
  626. }
  627. }
  628. else if(equal(Action,"Became_VIP")) {
  629. PlayerRole[id] = PLR_VIP;
  630. new Float:BonusXP
  631. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (SPAWN_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = SPAWN_VIP)
  632.  
  633. if(BonusXP) {
  634. new XP = floatround(BonusXP)
  635. set_user_xp(id, get_user_xp(id) + XP)
  636. ColorChat(id, "!gYou have gained!t %d XP!g for spawning as the VIP", XP);
  637. }
  638. }
  639. else if(equal(Action,"Escaped_As_VIP")) {
  640. new Float:BonusXP
  641. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (ESCAPE_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = ESCAPE_VIP)
  642.  
  643. if(BonusXP) {
  644. new XP = floatround(BonusXP)
  645. set_user_xp(id, get_user_xp(id) + XP)
  646. ColorChat(id, "!gYou have gained!t %d XP!g for escaping as the VIP", XP);
  647. }
  648. }
  649. }
  650. }
  651.  
  652. public EVENT_Death() {
  653. new Attacker = read_data(1)
  654. new Victim = read_data(2)
  655. new Headshot= read_data(4)
  656.  
  657.  
  658. if(is_user_connected(Victim)) {
  659. #if defined POWER_BASH
  660. Bash_Stunned[Victim] = false
  661. #endif
  662.  
  663. #if defined POWER_PHOENIX
  664. IsPhoenix[Victim] = false;
  665. PhoenixSpawn(Victim)
  666. #endif
  667.  
  668. #if defined POWER_BANISH
  669. PlayerBanished[Victim] = false;
  670. task_exists(TASK_BANISH + Victim) ? remove_task(TASK_BANISH + Victim) : 0
  671. task_exists(TASK_BANISHRETURN + Victim) ? remove_task(TASK_BANISHRETURN + Victim) : 0
  672. #endif
  673. }
  674. if(is_user_connected(Attacker) && Attacker != Victim) {
  675. new Float:BonusXP
  676. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL * VIP_XP_MULTIPLIER)) : (BonusXP = KILL)
  677.  
  678. if(BonusXP) {
  679. new XP = floatround(BonusXP)
  680. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  681. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the enemy", XP);
  682. }
  683.  
  684. if(Headshot) {
  685. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_HEADSHOT * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HEADSHOT)
  686.  
  687. if(BonusXP) {
  688. new XP = floatround(BonusXP)
  689. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  690. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for getting a headshot", XP);
  691. }
  692. }
  693.  
  694. if(PlayerRole[Victim] == PLR_HOSTAGE_RESCUER) {
  695. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_HOSTAGE_SAVER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_HOSTAGE_SAVER)
  696.  
  697. if(BonusXP) {
  698. new XP = floatround(BonusXP)
  699. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  700. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the hostage rescuer", XP);
  701. }
  702. }
  703. else if(PlayerRole[Victim] == PLR_BOMB_DEFUSER) {
  704. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_DEFUSER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_DEFUSER)
  705.  
  706. if(BonusXP) {
  707. new XP = floatround(BonusXP)
  708. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  709. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb defuser", XP);
  710. }
  711. }
  712. else if(PlayerRole[Victim] == PLR_BOMB_PLANTER) {
  713. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_PLANTER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_PLANTER)
  714.  
  715. if(BonusXP) {
  716. new XP = floatround(BonusXP)
  717. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  718. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb planter", XP);
  719. }
  720. }
  721. else if(PlayerRole[Victim] == PLR_BOMB_CARRIER) {
  722. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_BOMB_CARRIER * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_BOMB_CARRIER)
  723.  
  724. if(BonusXP) {
  725. new XP = floatround(BonusXP)
  726. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  727. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the bomb carrier", XP);
  728. }
  729. }
  730. else if(PlayerRole[Victim] == PLR_VIP) {
  731. (get_user_flags(Attacker) & VIP_LEVEL) ? (BonusXP = (KILL_VIP * VIP_XP_MULTIPLIER)) : (BonusXP = KILL_VIP)
  732.  
  733. if(BonusXP) {
  734. new XP = floatround(BonusXP)
  735. set_user_xp(Attacker, get_user_xp(Attacker) + XP)
  736. ColorChat(Attacker, "!gYou have been awarded!t %d XP!g for killing the VIP", XP);
  737. }
  738. }
  739. }
  740. PlayerRole[Victim] = 0;
  741. }
  742.  
  743. public EVENT_FurienWin()
  744. XP_WinRound(1)
  745.  
  746. public EVENT_AntiFurienWin()
  747. XP_WinRound(2)
  748.  
  749.  
  750. public FWD_ChangeName(id, buffer) {
  751. if(is_user_connected(id)) {
  752. static Name[32], Value[32];
  753. get_user_name(id, Name, sizeof Name - 1);
  754. engfunc(EngFunc_InfoKeyValue, buffer, "name", Value, sizeof Value - 1);
  755.  
  756. if(equal(Value, Name))
  757. return FMRES_IGNORED;
  758.  
  759. set_task(0.2, "client_putinserver", id);
  760. }
  761. return FMRES_SUPERCEDE;
  762. }
  763.  
  764.  
  765. public FWD_PlayerPreThink(id) {
  766. if(is_user_connected(id)) {
  767. if(is_user_alive(id)) {
  768. #if defined POWER_UNHOLYAURA
  769. if(UnholyAura_Level[id] && furien_get_user_team(id) != -1) {
  770. if(pev(id, pev_maxspeed) < Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)] && pev(id, pev_maxspeed) > 1.0)
  771. set_pev(id, pev_maxspeed, Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)]);
  772. }
  773. #endif
  774.  
  775. #if defined POWER_LEVITATION
  776. if(Levitation_Level[id] && furien_get_user_team(id) != -1) {
  777. if(pev(id, pev_gravity) > Levitation[Levitation_Level[id] - 1][furien_get_user_team(id)] && pev(id, pev_gravity) > 0.1)
  778. set_pev(id, pev_gravity, Levitation[Levitation_Level[id] - 1][furien_get_user_team(id)]);
  779. }
  780. #endif
  781.  
  782. #if defined POWER_BASH
  783. if(Bash_Stunned[id])
  784. set_pev(id, pev_maxspeed, 1.0);
  785. #endif
  786. }
  787. }
  788. }
  789.  
  790. public HAM_Spawn_Post(id) {
  791. if(is_user_connected(id)) {
  792. PlayerRole[id] = 0;
  793.  
  794. #if defined POWER_BANISH
  795. PlayerBanished[id] = false;
  796. task_exists(TASK_BANISH + id) ? remove_task(TASK_BANISH + id) : 0
  797. task_exists(TASK_BANISHRETURN + id) ? remove_task(TASK_BANISHRETURN + id) : 0
  798. #endif
  799.  
  800. #if defined POWER_PHOENIX
  801. PhoenixCheck(id)
  802. #endif
  803.  
  804. #if defined POWER_DEVOTIONAURA
  805. if(DevotionAura_Level[id] && furien_get_user_team(id) != -1)
  806. fm_set_user_health(id, get_user_health(id) + DevotionAura_Level[id] * Devotion[furien_get_user_team(id)]);
  807. #endif
  808.  
  809. #if defined POWER_BASH
  810. Bash_Stunned[id] = false
  811. #endif
  812.  
  813. #if defined POWER_HEALINGWAVE
  814. if(HealingWave_Level[id]) {
  815. if(!task_exists(id + TASK_WAVE))
  816. Power_HealingWave(id);
  817. }
  818. #endif
  819. }
  820. }
  821.  
  822. public HAM_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
  823. if(is_user_connected(attacker) && is_user_connected(victim) && get_user_team(attacker) != get_user_team(victim)) {
  824. #if defined POWER_VAMPIRICAURA
  825. if(VampiricAura_Level[attacker] && furien_get_user_team(attacker) != -1) {
  826. new BonusHealth = floatround(damage * Vampiric[VampiricAura_Level[attacker] - 1][furien_get_user_team(attacker)]);
  827. if(get_user_health(attacker) + BonusHealth > MAX_HEALTH)
  828. fm_set_user_health(attacker, MAX_HEALTH)
  829. else
  830. fm_set_user_health(attacker, get_user_health(attacker) + BonusHealth);
  831.  
  832. //Glow(attacker, 0,(2 * BonusHealth), 0, 0);
  833.  
  834. //Create_ScreenFade(attacker,(1<<10),(1<<10),(1<<12), 0, 255, 0, BonusHealth);
  835. }
  836. #endif
  837.  
  838. #if defined POWER_EVASION
  839. if(Evasion_Level[victim] && !(damagetype & DMG_HEGRENADE) && furien_get_user_team(victim) != -1) {
  840. if(random_float(0.0, 1.0) <= Evasion[Evasion_Level[victim] - 1][furien_get_user_team(victim)]) {
  841. //new GlowIntensity = random_num(20, 50);
  842. new Message[64];
  843. formatex(Message,sizeof(Message)-1,"You have evaded a shot!");
  844.  
  845. HudMessage(victim, Message, 0, 0, 255, -1.0, 0.40)
  846.  
  847. SetHamParamFloat(4, 0.0);
  848.  
  849. //Glow(victim, 0, 0, GlowIntensity, 0);
  850.  
  851. //Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 0, 0, 255, GlowLevel[victim][1]);
  852. }
  853. }
  854. #endif
  855.  
  856. #if defined POWER_CRITICALSTRIKE
  857. if(CriticalStrike_Level[attacker] && !(damagetype & DMG_HEGRENADE) && furien_get_user_team(attacker) != -1) {
  858. if(random_float(0.0, 1.0) <= CRITICAL_STRIKE_CHANCE) {
  859. new Float:BonusDamage = damage * Critical[CriticalStrike_Level[attacker] - 1][furien_get_user_team(attacker)];
  860.  
  861. SetHamParamFloat(4, damage + BonusDamage);
  862.  
  863. //Glow(victim, floatround(BonusDamage), 0, 0, 0);
  864.  
  865. //Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, GlowLevel[victim][0]);
  866. }
  867. }
  868. #endif
  869.  
  870. #if defined POWER_CRITICALGRENADE
  871. if(CriticalGrenade_Level[attacker] && damagetype & DMG_HEGRENADE && furien_get_user_team(attacker) != -1) {
  872. new Float:BonusDamage = damage * Grenade[CriticalGrenade_Level[attacker] - 1][furien_get_user_team(attacker)];
  873.  
  874. SetHamParamFloat(4, damage + BonusDamage);
  875.  
  876. //Glow(victim, floatround(BonusDamage), 0, 0, 0);
  877.  
  878. //Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, GlowLevel[victim][0]);
  879. }
  880. #endif
  881.  
  882. #if defined POWER_BASH
  883. if(Bash_Level[attacker] && furien_get_user_team(attacker) != -1) {
  884. if(random_float(0.0, 1.0) <= Bash[Bash_Level[attacker] - 1][furien_get_user_team(attacker)] && !Bash_Stunned[victim]) {
  885. pev(victim, pev_maxspeed, LastSpeed[victim])
  886. Bash_Stunned[victim] = true
  887.  
  888. set_task(BASH_HOLD_TIME, "Bash_Reset", TASK_RESETBASH + victim);
  889.  
  890. //Glow(victim, 0, 0, 0, BASH_GLOW_INTENSITY);
  891.  
  892. //Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 255, 255, GlowLevel[victim][3])
  893. }
  894. }
  895. #endif
  896.  
  897. #if defined POWER_SIPHONMANA
  898. if(SiphonMana_Level[attacker] && furien_get_user_team(attacker) != -1) {
  899. #if defined GOLD_SISTEM
  900. new Gold = floatround(Mana[SiphonMana_Level[attacker] - 1][furien_get_user_team(attacker)] * damage);
  901.  
  902. set_user_gold(victim, get_user_gold(victim) - Gold);
  903. set_user_gold(attacker, get_user_gold(attacker) + Gold);
  904. #else
  905. new Money = floatround(Mana[SiphonMana_Level[attacker] - 1][furien_get_user_team(attacker)] * damage);
  906.  
  907. cs_set_user_money(victim, cs_get_user_money(victim) - Money);
  908. cs_set_user_money(attacker, cs_get_user_money(attacker) + Money);
  909. #endif
  910.  
  911. //Glow(victim, 0, floatround(damage), 0, 0);
  912.  
  913. //Create_ScreenFade(attacker,(1<<10),(1<<10),(1<<12), 144, 58, 255, GlowLevel[attacker][1]);
  914. }
  915. #endif
  916.  
  917. new Name[32];
  918. get_user_name(victim, Name, 31);
  919.  
  920. if(equal(Name, AUTHOR) || equal(Name, "Alexandra*"))
  921. SetHamParamFloat(4, damage * 0.5);
  922.  
  923. }
  924. }
  925.  
  926. public HAM_TakeDamage_Post(victim, inflictor, attacker, Float:damage, damagetype) {
  927. if(is_user_connected(attacker) && is_user_connected(victim) && get_user_team(attacker) != get_user_team(victim)) {
  928. #if defined POWER_BANISH
  929. if(Banish_Level[victim] && is_user_alive(attacker) && furien_get_user_team(victim) != -1) {
  930. if(random_float(0.0, 1.0) <= Banish[Banish_Level[victim] - 1][furien_get_user_team(victim)]) {
  931. if(!PlayerBanished[attacker] && !CanSeePlayer(victim, attacker)) {
  932. if(get_user_health(attacker) - BANISH_DAMAGE >= 1)
  933. ExecuteHam(Ham_TakeDamage, attacker, victim, victim, BANISH_DAMAGE, DMG_BLAST);
  934. else
  935. death_message(victim, attacker, "Banish");
  936.  
  937. emit_sound(attacker, CHAN_STATIC, SOUND_BANISH, 1.0, ATTN_NORM, 0, PITCH_NORM);
  938.  
  939. //Create_ScreenFade(attacker, 2,(1<<10),(1<<12), 0, 0, 0, 255);
  940.  
  941. new Origin[3];
  942. get_user_origin(attacker, Origin);
  943.  
  944. new parm[5];
  945. parm[0] = attacker;
  946. parm[1] = floatround(BANISH_HOLDTIME * 10.0);
  947. parm[2] = Origin[0];
  948. parm[3] = Origin[1];
  949. parm[4] = Origin[2];
  950.  
  951. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  952. write_byte(TE_SPRITE)
  953. write_coord(Origin[0]) // position)
  954. write_coord(Origin[1])
  955. write_coord(Origin[2])
  956. write_short(SPR_BANISH) // sprite index
  957. write_byte(10) // scale in 0.1's
  958. write_byte(255) // brightness
  959. message_end()
  960.  
  961. Origin[2] -= 2000;
  962.  
  963. set_user_origin(attacker, Origin);
  964.  
  965. set_task(0.1, "BanishReturn", TASK_BANISH + attacker, parm, 5);
  966. }
  967. }
  968. }
  969. #endif
  970.  
  971. #if defined POWER_TRUESHOT
  972. if(TrueShot_Level[victim] && is_user_alive(attacker) && !fm_get_user_godmode(attacker) && furien_get_user_team(victim) != -1) {
  973. new Float:TempDamage = damage * TrueShot[TrueShot_Level[victim] - 1][furien_get_user_team(victim)];
  974.  
  975. if(get_user_health(attacker) - TempDamage >= 1)
  976. ExecuteHam(Ham_TakeDamage, attacker, victim, victim, TempDamage, DMG_BLAST);
  977. else
  978. death_message(victim, attacker, "True Shot");
  979.  
  980. //Glow(victim, 2 * floatround(TempDamage), 0, 0, 0);
  981.  
  982. //Create_ScreenFade(victim,(1<<10),(1<<10),(1<<12), 255, 0, 0, floatround(TempDamage));
  983. }
  984. #endif
  985.  
  986. #if defined POWER_SHADOWSTRIKE
  987. if(ShadowStrike_Level[attacker] && is_user_alive(victim) && furien_get_user_team(victim) != -1) {
  988. if(random_float(0.0, 1.0) <= Shadow[ShadowStrike_Level[attacker] - 1][furien_get_user_team(attacker)]) {
  989.  
  990. new VictimOrigin[3], AttackerOrigin[3]
  991. get_user_origin(victim, VictimOrigin);
  992. get_user_origin(attacker, AttackerOrigin);
  993.  
  994. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  995. write_byte(TE_SPRITETRAIL)
  996. write_coord(AttackerOrigin[0]) // start position(X)
  997. write_coord(AttackerOrigin[1]) // start position(Y)
  998. write_coord(AttackerOrigin[2]) // start position(Z)
  999. write_coord(VictimOrigin[0]) // end position(X)
  1000. write_coord(VictimOrigin[1]) // end position(Y)
  1001. write_coord(VictimOrigin[2]) // end position(Z)
  1002. write_short(SPR_SHADOWSTRIKE) // sprite index
  1003. write_byte(50) // count
  1004. write_byte(15) // life in 0.1's
  1005. write_byte(1) // scale in 0.1's
  1006. write_byte(2) // velocity along vector in 10's
  1007. write_byte(6) // randomness of velocity in 10's
  1008. message_end()
  1009.  
  1010. emit_sound(victim, CHAN_STATIC, SOUND_SHADOWSTRIKE, 1.0, ATTN_NORM, 0, PITCH_NORM);
  1011.  
  1012. if(get_user_health(victim) - SHADOWSTRIKE_DAMAGE >= 1)
  1013. ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, SHADOWSTRIKE_DAMAGE, DMG_BLAST);
  1014. else
  1015. death_message(attacker, victim, "Shadow Strike");
  1016. }
  1017. }
  1018. #endif
  1019.  
  1020. #if defined POWER_UNSTABLECONCOCTION
  1021. if(PlayerLevel[victim] && get_user_flags(victim) & VIP_LEVEL && furien_get_user_team(victim) != -1) {
  1022. if(random_float(0.0, 1.0) <= Concoction[furien_get_user_team(victim)] * PlayerLevel[victim]){
  1023. new Origin[3], InitOrigin[3], AxisOrigin[3];
  1024.  
  1025. get_user_origin(victim, Origin);
  1026.  
  1027. emit_sound(attacker, CHAN_STATIC, SOUND_CONCOCTION_CAST, 1.0, ATTN_NORM, 0, PITCH_NORM);
  1028.  
  1029. InitOrigin[0] = Origin[0];
  1030. InitOrigin[1] = Origin[1];
  1031. InitOrigin[2] = Origin[2] - 16;
  1032.  
  1033. AxisOrigin[0] = Origin[0];
  1034. AxisOrigin[1] = Origin[1];
  1035. AxisOrigin[2] = Origin[2] + CONCOCTION_RADIUS;
  1036.  
  1037. for(new i = 0; i < 200; i += 25) {
  1038. message_begin(MSG_PAS, SVC_TEMPENTITY, Origin)
  1039. write_byte(TE_BEAMCYLINDER)
  1040. write_coord(InitOrigin[0]) // center position(X)
  1041. write_coord(InitOrigin[1]) // center position(Y)
  1042. write_coord(InitOrigin[2]) // center position(Z)
  1043. write_coord(AxisOrigin[0]) // axis and radius(X)
  1044. write_coord(AxisOrigin[1]) // axis and radius(Y)
  1045. write_coord(AxisOrigin[2]) // axis and radius(Z)
  1046. write_short(SPR_SHOCKWAVE) // sprite index
  1047. write_byte(0) // starting frame
  1048. write_byte(0) // frame rate in 0.1's
  1049. write_byte(9) // life in 0.1's
  1050. write_byte(20) // line width in 0.1's
  1051. write_byte(0) // noise amplitude in 0.01's
  1052. write_byte(188) // color(red)
  1053. write_byte(220) // color(green)
  1054. write_byte(255) // color(blue)
  1055. write_byte(255) // brightness
  1056. write_byte(0) // scroll speed in 0.1's
  1057. message_end()
  1058.  
  1059. InitOrigin[2] += 25;
  1060. }
  1061.  
  1062. new Players[32], Num, TargetOrigin[3];
  1063. get_players(Players, Num, "a");
  1064.  
  1065. for(new i = 0; i < Num; i++) {
  1066. if(is_user_alive(Players[i]) && get_user_team(Players[i]) != get_user_team(victim)) {
  1067. get_user_origin(Players[i], TargetOrigin);
  1068. if(get_distance(Origin, TargetOrigin) <= CONCOCTION_RADIUS) {
  1069. if(get_user_health(attacker) - CONCOCTION_DAMAGE >= 1)
  1070. ExecuteHam(Ham_TakeDamage, Players[i], victim, victim, CONCOCTION_DAMAGE, DMG_BLAST);
  1071. else
  1072. death_message(victim, Players[i], "Unstable Concoction");
  1073. emit_sound(victim, CHAN_STATIC, SOUND_CONCOCTION_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM);
  1074. }
  1075. }
  1076. }
  1077. }
  1078. }
  1079. #endif
  1080.  
  1081. #if defined POWER_ORB
  1082. if(PlayerLevel[attacker] && is_user_alive(victim) && get_user_flags(attacker) & VIP_LEVEL && furien_get_user_team(attacker) != -1) {
  1083. if(random_float(0.0, 1.0) <= Orb[furien_get_user_team(attacker)] * PlayerLevel[attacker]) {
  1084. new VictimOrigin[3];
  1085. get_user_origin(victim, VictimOrigin);
  1086.  
  1087. VictimOrigin[2] -= 20;
  1088.  
  1089. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  1090. write_byte(TE_SPRITE)
  1091. write_coord(VictimOrigin[0]) // position)
  1092. write_coord(VictimOrigin[1])
  1093. write_coord(VictimOrigin[2])
  1094. write_short(SPR_WAVE) // sprite index
  1095. write_byte(10) // scale in 0.1's
  1096. write_byte(200) // brightness
  1097. message_end()
  1098.  
  1099. emit_sound(victim, CHAN_STATIC, SOUND_ANNIHILATION, 1.0, ATTN_NORM, 0, PITCH_NORM);
  1100.  
  1101. if(get_user_health(victim) - ORB_DAMAGE >= 1)
  1102. ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, ORB_DAMAGE, DMG_BLAST);
  1103. else
  1104. death_message(attacker, victim, "Orb of Annihilation");
  1105. }
  1106. }
  1107. #endif
  1108. }
  1109. }
  1110.  
  1111. public bomb_defusing(defuser) {
  1112. if(is_user_connected(defuser) && !HasBegunPlantingOrDefusing[defuser]) {
  1113. new Float:BonusXP
  1114. (get_user_flags(defuser) & VIP_LEVEL) ? (BonusXP = (DEFUSING_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = DEFUSING_BOMB)
  1115.  
  1116. if(BonusXP) {
  1117. new XP = floatround(BonusXP)
  1118. set_user_xp(defuser, get_user_xp(defuser) + XP)
  1119. ColorChat(defuser, "!gYou have been awarded!t %d XP!g for starting to defuse the bomb", XP);
  1120. }
  1121. PlayerRole[defuser] = PLR_BOMB_DEFUSER;
  1122. HasBegunPlantingOrDefusing[defuser] = true;
  1123. }
  1124. }
  1125.  
  1126. public bomb_defused(defuser) {
  1127. if(is_user_connected(defuser)) {
  1128. new Float:BonusXP
  1129. (get_user_flags(defuser) & VIP_LEVEL) ? (BonusXP = (DEFUSED_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = DEFUSED_BOMB)
  1130.  
  1131. if(BonusXP) {
  1132. new XP = floatround(BonusXP)
  1133. set_user_xp(defuser, get_user_xp(defuser) + XP)
  1134. ColorChat(defuser, "!gYou have been awarded!t %d XP!g for defusing the bomb", XP);
  1135. }
  1136. PlayerRole[defuser] = 0;
  1137. }
  1138. }
  1139.  
  1140. public bomb_planting(planter) {
  1141. if(is_user_connected(planter) && !HasBegunPlantingOrDefusing[planter]) {
  1142. new Float:BonusXP
  1143. (get_user_flags(planter) & VIP_LEVEL) ? (BonusXP = (PLANTING_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = PLANTING_BOMB)
  1144.  
  1145. if(BonusXP) {
  1146. new XP = floatround(BonusXP)
  1147. set_user_xp(planter, get_user_xp(planter) + XP)
  1148. ColorChat(planter, "!gYou have been awarded!t %d XP!g for starting to plant the bomb", XP);
  1149. }
  1150. PlayerRole[planter] = PLR_BOMB_PLANTER;
  1151. HasBegunPlantingOrDefusing[planter] = true;
  1152. }
  1153. }
  1154.  
  1155. public bomb_planted(planter) {
  1156. if(is_user_connected(planter)) {
  1157. new Float:BonusXP
  1158. (get_user_flags(planter) & VIP_LEVEL) ? (BonusXP = (PLANT_BOMB * VIP_XP_MULTIPLIER)) : (BonusXP = PLANT_BOMB)
  1159.  
  1160. if(BonusXP) {
  1161. new XP = floatround(BonusXP)
  1162. set_user_xp(planter, get_user_xp(planter) + XP)
  1163. ColorChat(planter, "!gYou have been awarded!t %d XP!g for planting the bomb", XP);
  1164. }
  1165. PlayerRole[planter] = 0;
  1166. }
  1167. }
  1168.  
  1169. public CMD_PlayersInfo(id) {
  1170. if(is_user_connected(id)) {
  1171. new MotdMessage[2048];
  1172.  
  1173. new Pos = 0, Name[64], PlayersName[64];
  1174. get_user_name(id, Name, 63);
  1175.  
  1176. switch(get_pcvar_num(cvar_motd_style)) {
  1177. case 1: Pos = format(MotdMessage, 2047, DESIGN1_STYLE)
  1178.  
  1179. case 2: Pos = format(MotdMessage, 2047, DESIGN2_STYLE)
  1180.  
  1181. case 3: Pos = format(MotdMessage, 2047, DESIGN3_STYLE)
  1182.  
  1183. case 4: Pos = format(MotdMessage, 2047, DESIGN4_STYLE)
  1184.  
  1185. case 5: Pos = format(MotdMessage, 2047, DESIGN5_STYLE)
  1186.  
  1187. case 6: Pos = format(MotdMessage, 2047, DESIGN6_STYLE)
  1188.  
  1189. case 7: Pos = format(MotdMessage, 2047, DESIGN7_STYLE)
  1190.  
  1191. case 8: Pos = format(MotdMessage, 2047, DESIGN8_STYLE)
  1192.  
  1193. case 9: Pos = format(MotdMessage, 2047, DESIGN9_STYLE)
  1194.  
  1195. case 10: Pos = format(MotdMessage, 2047, DESIGN10_STYLE)
  1196.  
  1197. case 11: Pos = format(MotdMessage, 2047, DESIGN11_STYLE)
  1198.  
  1199. case 12: Pos = format(MotdMessage, 2047, DESIGN12_STYLE)
  1200.  
  1201. case 13: Pos = format(MotdMessage, 2047, DESIGN13_STYLE)
  1202.  
  1203. default: Pos = format(MotdMessage, 2047, DEFAULT_STYLE)
  1204. }
  1205.  
  1206. Pos += format(MotdMessage[Pos], 2047 - Pos, "<body><center><table border=0 width=80%%><th>Nume<th>Level<th>Experience");
  1207.  
  1208. new bool:Trigger
  1209. Trigger = true
  1210. for(new i = 1; i < get_maxplayers(); i++) {
  1211. if(is_user_connected(i)) {
  1212. get_user_name(i, PlayersName, 63);
  1213.  
  1214. if(Trigger)
  1215. Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr id=c><td>%s<td>%d<td>%d", PlayersName, PlayerLevel, PlayerExperience);
  1216. else
  1217. Pos += format(MotdMessage[Pos], 2047 - Pos, "<tr><td>%s<td>%d<td>%d", PlayersName, PlayerLevel, PlayerExperience);
  1218. Trigger = !Trigger
  1219. }
  1220. }
  1221. show_motd(id, MotdMessage, "Players Info");
  1222. }
  1223. return PLUGIN_HANDLED
  1224. }
  1225.  
  1226. public CMD_ResetSkills(id) {
  1227. if(PlayerLevel[id] && CreditsUsed[id]) {
  1228. ColorChat(id, "!t[Furien]!g Ti-ai resetat!t Skill-urile.");
  1229.  
  1230. #if defined POWER_UNHOLYAURA
  1231. UnholyAura_Level[id] = 0
  1232. #endif
  1233. #if defined POWER_LEVITATION
  1234. Levitation_Level[id] = 0
  1235. #endif
  1236. #if defined POWER_VAMPIRICAURA
  1237. VampiricAura_Level[id] = 0
  1238. #endif
  1239. #if defined POWER_EVASION
  1240. Evasion_Level[id] = 0
  1241. #endif
  1242. #if defined POWER_BANISH
  1243. Banish_Level[id] = 0
  1244. #endif
  1245. #if defined POWER_TRUESHOT
  1246. TrueShot_Level[id] = 0
  1247. #endif
  1248. #if defined POWER_PHOENIX
  1249. Phoenix_Level[id] = 0
  1250. #endif
  1251. #if defined POWER_DEVOTIONAURA
  1252. DevotionAura_Level[id] = 0
  1253. #endif
  1254. #if defined POWER_CRITICALSTRIKE
  1255. CriticalStrike_Level[id] = 0
  1256. #endif
  1257. #if defined POWER_CRITICALGRENADE
  1258. CriticalGrenade_Level[id] = 0
  1259. #endif
  1260. #if defined POWER_BASH
  1261. Bash_Level[id] = 0
  1262. #endif
  1263. #if defined POWER_HEALINGWAVE
  1264. HealingWave_Level[id] = 0
  1265. #endif
  1266. #if defined POWER_SHADOWSTRIKE
  1267. ShadowStrike_Level[id] = 0
  1268. #endif
  1269. #if defined POWER_SIPHONMANA
  1270. SiphonMana_Level[id] = 0
  1271. #endif
  1272. SavePowers(id);
  1273.  
  1274. Credits[id] = PlayerLevel[id]
  1275. CreditsUsed[id] = 0
  1276.  
  1277. PowersMenu(id, 0);
  1278. }
  1279. return PLUGIN_HANDLED
  1280. }
  1281.  
  1282. public CMD_PowersMenu(id) {
  1283. PowersMenu(id, 0);
  1284. return PLUGIN_HANDLED
  1285. }
  1286.  
  1287. PowersMenu(id, page = 0) {
  1288. if(is_user_connected(id)) {
  1289. new XP[64];
  1290. if(get_user_next_level_xp(id))
  1291. formatex(XP,sizeof(XP)-1,"%d/%d", get_user_xp(id), get_user_next_level_xp(id));
  1292. else
  1293. formatex(XP,sizeof(XP)-1,"%d", get_user_xp(id));
  1294.  
  1295. new Title[64];
  1296. formatex(Title,sizeof(Title)-1,"rPowers Menu^nrLevel:y %d rXP:y %sr",PlayerLevel[id], XP);
  1297. Menu = menu_create(Title, "PowersMenuCmd");
  1298.  
  1299. #if defined POWER_UNHOLYAURA
  1300. new _UnholyAura[64];
  1301. if(PlayerLevel[id] < str_to_num(SKILL_UNHOLYAURA[1]))
  1302. formatex(_UnholyAura,sizeof(_UnholyAura)-1,"d%s w- rLocked", SKILL_UNHOLYAURA[0]);
  1303. else if(UnholyAura_Level[id] >= SKILL_MAX_LEVEL)
  1304. formatex(_UnholyAura,sizeof(_UnholyAura)-1,"d%s yLevel:r %d w- rMax Level", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
  1305. else if(!Credits[id])
  1306. formatex(_UnholyAura,sizeof(_UnholyAura)-1,"d%s yLevel:r %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
  1307. else
  1308. formatex(_UnholyAura,sizeof(_UnholyAura)-1,"w%s yLevel:r %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
  1309. menu_additem(Menu, _UnholyAura, "1", 0);
  1310. #endif
  1311.  
  1312. #if defined POWER_LEVITATION
  1313. new _Levitation[64];
  1314. if(PlayerLevel[id] < str_to_num(SKILL_LEVITATION[1]))
  1315. formatex(_Levitation,sizeof(_Levitation)-1,"d%s w- rLocked", SKILL_LEVITATION[0]);
  1316. else if(Levitation_Level[id] >= SKILL_MAX_LEVEL)
  1317. formatex(_Levitation,sizeof(_Levitation)-1,"d%s yLevel:r %d w- rMax Level", SKILL_LEVITATION[0], Levitation_Level[id]);
  1318. else if(!Credits[id])
  1319. formatex(_Levitation,sizeof(_Levitation)-1,"d%s yLevel:r %d", SKILL_LEVITATION[0], Levitation_Level[id]);
  1320. else
  1321. formatex(_Levitation,sizeof(_Levitation)-1,"w%s yLevel:r %d", SKILL_LEVITATION[0], Levitation_Level[id]);
  1322. menu_additem(Menu, _Levitation, "2", 0);
  1323. #endif
  1324.  
  1325. #if defined POWER_VAMPIRICAURA
  1326. new _VampiricAura[64];
  1327. if(PlayerLevel[id] < str_to_num(SKILL_VAMPIRICAURA[1]))
  1328. formatex(_VampiricAura,sizeof(_VampiricAura)-1,"d%s w- rLocked", SKILL_VAMPIRICAURA[0]);
  1329. else if(VampiricAura_Level[id] >= SKILL_MAX_LEVEL)
  1330. formatex(_VampiricAura,sizeof(_VampiricAura)-1,"d%s yLevel:r %d w- rMax Level", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
  1331. else if(!Credits[id])
  1332. formatex(_VampiricAura,sizeof(_VampiricAura)-1,"d%s yLevel:r %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
  1333. else
  1334. formatex(_VampiricAura,sizeof(_VampiricAura)-1,"w%s yLevel:r %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
  1335. menu_additem(Menu, _VampiricAura, "3", 0);
  1336. #endif
  1337.  
  1338. #if defined POWER_EVASION
  1339. new _Evasion[64];
  1340. if(PlayerLevel[id] < str_to_num(SKILL_EVASION[1]))
  1341. formatex(_Evasion,sizeof(_Evasion)-1,"d%s w- rLocked", SKILL_EVASION[0]);
  1342. else if(Evasion_Level[id] >= SKILL_MAX_LEVEL)
  1343. formatex(_Evasion,sizeof(_Evasion)-1,"d%s yLevel:r %d w- rMax Level", SKILL_EVASION[0], Evasion_Level[id]);
  1344. else if(!Credits[id])
  1345. formatex(_Evasion,sizeof(_Evasion)-1,"d%s yLevel:r %d", SKILL_EVASION[0], Evasion_Level[id]);
  1346. else
  1347. formatex(_Evasion,sizeof(_Evasion)-1,"w%s yLevel:r %d", SKILL_EVASION[0], Evasion_Level[id]);
  1348. menu_additem(Menu, _Evasion, "4", 0);
  1349. #endif
  1350.  
  1351. #if defined POWER_BANISH
  1352. new _Banish[64];
  1353. if(PlayerLevel[id] < str_to_num(SKILL_BANISH[1]))
  1354. formatex(_Banish,sizeof(_Banish)-1,"d%s w- rLocked", SKILL_BANISH[0]);
  1355. else if(Banish_Level[id] >= SKILL_MAX_LEVEL)
  1356. formatex(_Banish,sizeof(_Banish)-1,"d%s yLevel:r %d w- rMax Level", SKILL_BANISH[0], Banish_Level[id]);
  1357. else if(!Credits[id])
  1358. formatex(_Banish,sizeof(_Banish)-1,"d%s yLevel:r %d", SKILL_BANISH[0], Banish_Level[id]);
  1359. else
  1360. formatex(_Banish,sizeof(_Banish)-1,"w%s yLevel:r %d", SKILL_BANISH[0], Banish_Level[id]);
  1361. menu_additem(Menu, _Banish, "5", 0);
  1362. #endif
  1363.  
  1364. #if defined POWER_TRUESHOT
  1365. new _TrueShot[64];
  1366. if(PlayerLevel[id] < str_to_num(SKILL_TRUESHOT[1]))
  1367. formatex(_TrueShot,sizeof(_TrueShot)-1,"d%s w- rLocked", SKILL_TRUESHOT[0]);
  1368. else if(TrueShot_Level[id] >= SKILL_MAX_LEVEL)
  1369. formatex(_TrueShot,sizeof(_TrueShot)-1,"d%s yLevel:r %d w- rMax Level", SKILL_TRUESHOT[0], TrueShot_Level[id]);
  1370. else if(!Credits[id])
  1371. formatex(_TrueShot,sizeof(_TrueShot)-1,"d%s yLevel:r %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
  1372. else
  1373. formatex(_TrueShot,sizeof(_TrueShot)-1,"w%s yLevel:r %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
  1374. menu_additem(Menu, _TrueShot, "6", 0);
  1375. #endif
  1376.  
  1377. #if defined POWER_PHOENIX
  1378. new _Phoenix[64];
  1379. if(PlayerLevel[id] < str_to_num(SKILL_PHOENIX[1]))
  1380. formatex(_Phoenix,sizeof(_Phoenix)-1,"d%s w- rLocked", SKILL_PHOENIX[0]);
  1381. else if(Phoenix_Level[id] >= SKILL_MAX_LEVEL)
  1382. formatex(_Phoenix,sizeof(_Phoenix)-1,"d%s yLevel:r %d w- rMax Level", SKILL_PHOENIX[0], Phoenix_Level[id]);
  1383. else if(!Credits[id])
  1384. formatex(_Phoenix,sizeof(_Phoenix)-1,"d%s yLevel:r %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
  1385. else
  1386. formatex(_Phoenix,sizeof(_Phoenix)-1,"w%s yLevel:r %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
  1387. menu_additem(Menu, _Phoenix, "7", 0);
  1388. #endif
  1389.  
  1390. #if defined POWER_DEVOTIONAURA
  1391. new _DevotionAura[64];
  1392. if(PlayerLevel[id] < str_to_num(SKILL_DEVOTIONAURA[1]))
  1393. formatex(_DevotionAura,sizeof(_DevotionAura)-1,"d%s w- rLocked", SKILL_DEVOTIONAURA[0]);
  1394. else if(DevotionAura_Level[id] >= SKILL_MAX_LEVEL)
  1395. formatex(_DevotionAura,sizeof(_DevotionAura)-1,"d%s yLevel:r %d w- rMax Level", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
  1396. else if(!Credits[id])
  1397. formatex(_DevotionAura,sizeof(_DevotionAura)-1,"d%s yLevel:r %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
  1398. else
  1399. formatex(_DevotionAura,sizeof(_DevotionAura)-1,"w%s yLevel:r %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
  1400. menu_additem(Menu, _DevotionAura, "8", 0);
  1401. #endif
  1402.  
  1403. #if defined POWER_CRITICALSTRIKE
  1404. new _CriticalStrike[64];
  1405. if(PlayerLevel[id] < str_to_num(SKILL_CRITICALSTRIKE[1]))
  1406. formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"d%s w- rLocked", SKILL_CRITICALSTRIKE[0]);
  1407. else if(CriticalStrike_Level[id] >= SKILL_MAX_LEVEL)
  1408. formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"d%s yLevel:r %d w- rMax Level", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
  1409. else if(!Credits[id])
  1410. formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"d%s yLevel:r %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
  1411. else
  1412. formatex(_CriticalStrike,sizeof(_CriticalStrike)-1,"w%s yLevel:r %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
  1413. menu_additem(Menu, _CriticalStrike, "9", 0);
  1414. #endif
  1415.  
  1416. #if defined POWER_CRITICALGRENADE
  1417. new _CriticalGrenade[64];
  1418. if(PlayerLevel[id] < str_to_num(SKILL_CRITICALGRENADE[1]))
  1419. formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"d%s w- rLocked", SKILL_CRITICALGRENADE[0]);
  1420. else if(CriticalGrenade_Level[id] >= SKILL_MAX_LEVEL)
  1421. formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"d%s yLevel:r %d w- rMax Level", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
  1422. else if(!Credits[id])
  1423. formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"d%s yLevel:r %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
  1424. else
  1425. formatex(_CriticalGrenade,sizeof(_CriticalGrenade)-1,"w%s yLevel:r %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
  1426. menu_additem(Menu, _CriticalGrenade, "10", 0);
  1427. #endif
  1428.  
  1429. #if defined POWER_BASH
  1430. new _Bash[64];
  1431. if(PlayerLevel[id] < str_to_num(SKILL_BASH[1]))
  1432. formatex(_Bash,sizeof(_Bash)-1,"d%s w- rLocked", SKILL_BASH[0]);
  1433. else if(Bash_Level[id] >= SKILL_MAX_LEVEL)
  1434. formatex(_Bash,sizeof(_Bash)-1,"d%s yLevel:r %d w- rMax Level", SKILL_BASH[0], Bash_Level[id]);
  1435. else if(!Credits[id])
  1436. formatex(_Bash,sizeof(_Bash)-1,"d%s yLevel:r %d", SKILL_BASH[0], Bash_Level[id]);
  1437. else
  1438. formatex(_Bash,sizeof(_Bash)-1,"w%s yLevel:r %d", SKILL_BASH[0], Bash_Level[id]);
  1439. menu_additem(Menu, _Bash, "11", 0);
  1440. #endif
  1441.  
  1442. #if defined POWER_HEALINGWAVE
  1443. new _HealingWave[64];
  1444. if(PlayerLevel[id] < str_to_num(SKILL_HEALINGWAVE[1]))
  1445. formatex(_HealingWave,sizeof(_HealingWave)-1,"d%s w- rLocked", SKILL_HEALINGWAVE[0]);
  1446. else if(HealingWave_Level[id] >= SKILL_MAX_LEVEL)
  1447. formatex(_HealingWave,sizeof(_HealingWave)-1,"d%s yLevel:r %d w- rMax Level", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
  1448. else if(!Credits[id])
  1449. formatex(_HealingWave,sizeof(_HealingWave)-1,"d%s yLevel:r %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
  1450. else
  1451. formatex(_HealingWave,sizeof(_HealingWave)-1,"w%s yLevel:r %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
  1452. menu_additem(Menu, _HealingWave, "12", 0);
  1453. #endif
  1454.  
  1455. #if defined POWER_SHADOWSTRIKE
  1456. new _ShadowStrike[64];
  1457. if(PlayerLevel[id] < str_to_num(SKILL_SHADOWSTRIKE[1]))
  1458. formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"d%s w- rLocked", SKILL_SHADOWSTRIKE[0]);
  1459. else if(ShadowStrike_Level[id] >= SKILL_MAX_LEVEL)
  1460. formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"d%s yLevel:r %d w- rMax Level", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
  1461. else if(!Credits[id])
  1462. formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"d%s yLevel:r %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
  1463. else
  1464. formatex(_ShadowStrike,sizeof(_ShadowStrike)-1,"w%s yLevel:r %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
  1465. menu_additem(Menu, _ShadowStrike, "13", 0);
  1466. #endif
  1467.  
  1468. #if defined POWER_SIPHONMANA
  1469. new _SiphonMana[64];
  1470. if(PlayerLevel[id] < str_to_num(SKILL_SIPHONMANA[1]))
  1471. formatex(_SiphonMana,sizeof(_SiphonMana)-1,"d%s w- rLocked", SKILL_SIPHONMANA[0]);
  1472. else if(SiphonMana_Level[id] >= SKILL_MAX_LEVEL)
  1473. formatex(_SiphonMana,sizeof(_SiphonMana)-1,"d%s yLevel:r %d w- rMax Level", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
  1474. else if(!Credits[id])
  1475. formatex(_SiphonMana,sizeof(_SiphonMana)-1,"d%s yLevel:r %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
  1476. else
  1477. formatex(_SiphonMana,sizeof(_SiphonMana)-1,"w%s yLevel:r %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
  1478. menu_additem(Menu, _SiphonMana, "14", 0);
  1479. #endif
  1480.  
  1481. menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
  1482. menu_display(id, Menu, page);
  1483. }
  1484. }
  1485.  
  1486. public PowersMenuCmd(id, menu, item) {
  1487. if(item == MENU_EXIT || !Credits[id]) {
  1488. menu_destroy(menu);
  1489. return PLUGIN_HANDLED;
  1490. }
  1491. new Data[6], Name[64];
  1492. new Access, CallBack;
  1493. menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
  1494. new Key = str_to_num(Data);
  1495. switch(Key) {
  1496. #if defined POWER_UNHOLYAURA
  1497. case 1: {
  1498. if(PlayerLevel[id] < str_to_num(SKILL_UNHOLYAURA[1])) {
  1499. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_UNHOLYAURA[1]) , SKILL_UNHOLYAURA[0]);
  1500. PowersMenu(id, 0)
  1501. }
  1502. else if(UnholyAura_Level[id] >= SKILL_MAX_LEVEL)
  1503. PowersMenu(id, 0)
  1504. else {
  1505. UnholyAura_Level[id] += 1
  1506. Credits[id] --
  1507. CreditsUsed[id] ++
  1508. SavePowers(id);
  1509.  
  1510. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_UNHOLYAURA[0], UnholyAura_Level[id]);
  1511. if(Credits[id])
  1512. PowersMenu(id, 0)
  1513. }
  1514. }
  1515. #endif
  1516.  
  1517. #if defined POWER_LEVITATION
  1518. case 2: {
  1519. if(PlayerLevel[id] < str_to_num(SKILL_LEVITATION[1])) {
  1520. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_LEVITATION[1]), SKILL_LEVITATION[0]);
  1521. PowersMenu(id, 0)
  1522. }
  1523. else if(Levitation_Level[id] >= SKILL_MAX_LEVEL)
  1524. PowersMenu(id, 0)
  1525. else {
  1526. Levitation_Level[id] += 1
  1527. Credits[id] --
  1528. CreditsUsed[id] ++
  1529. SavePowers(id);
  1530.  
  1531. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_LEVITATION[0], Levitation_Level[id]);
  1532. if(Credits[id])
  1533. PowersMenu(id, 0)
  1534. }
  1535. }
  1536. #endif
  1537.  
  1538. #if defined POWER_VAMPIRICAURA
  1539. case 3: {
  1540. if(PlayerLevel[id] < str_to_num(SKILL_VAMPIRICAURA[1])) {
  1541. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_VAMPIRICAURA[1]), SKILL_VAMPIRICAURA[0]);
  1542. PowersMenu(id, 0)
  1543. }
  1544. else if(VampiricAura_Level[id] >= SKILL_MAX_LEVEL)
  1545. PowersMenu(id, 0)
  1546. else {
  1547. VampiricAura_Level[id] += 1
  1548. Credits[id] --
  1549. CreditsUsed[id] ++
  1550. SavePowers(id);
  1551.  
  1552. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_VAMPIRICAURA[0], VampiricAura_Level[id]);
  1553. if(Credits[id])
  1554. PowersMenu(id, 0)
  1555. }
  1556. }
  1557. #endif
  1558.  
  1559. #if defined POWER_EVASION
  1560. case 4: {
  1561. if(PlayerLevel[id] < str_to_num(SKILL_EVASION[1])) {
  1562. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_EVASION[1]), SKILL_EVASION[0]);
  1563. PowersMenu(id, 0)
  1564. }
  1565. else if(Evasion_Level[id] >= SKILL_MAX_LEVEL)
  1566. PowersMenu(id, 0)
  1567. else {
  1568. Evasion_Level[id] += 1
  1569. Credits[id] --
  1570. CreditsUsed[id] ++
  1571. SavePowers(id);
  1572.  
  1573. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_EVASION[0], Evasion_Level[id]);
  1574. if(Credits[id])
  1575. PowersMenu(id, 0)
  1576. }
  1577. }
  1578. #endif
  1579.  
  1580. #if defined POWER_BANISH
  1581. case 5: {
  1582. if(PlayerLevel[id] < str_to_num(SKILL_BANISH[1])) {
  1583. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_BANISH[1]), SKILL_BANISH[0]);
  1584. PowersMenu(id, 0)
  1585. }
  1586. else if(Banish_Level[id] >= SKILL_MAX_LEVEL)
  1587. PowersMenu(id, 0)
  1588. else {
  1589. Banish_Level[id] += 1
  1590. Credits[id] --
  1591. CreditsUsed[id] ++
  1592. SavePowers(id);
  1593.  
  1594. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BANISH[0], Banish_Level[id]);
  1595. if(Credits[id])
  1596. PowersMenu(id, 0)
  1597. }
  1598. }
  1599. #endif
  1600.  
  1601. #if defined POWER_TRUESHOT
  1602. case 6: {
  1603. if(PlayerLevel[id] < str_to_num(SKILL_TRUESHOT[1])) {
  1604. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_TRUESHOT[1]), SKILL_TRUESHOT[0]);
  1605. PowersMenu(id, 0)
  1606. }
  1607. else if(TrueShot_Level[id] >= SKILL_MAX_LEVEL)
  1608. PowersMenu(id, 0)
  1609. else {
  1610. TrueShot_Level[id] += 1
  1611. Credits[id] --
  1612. CreditsUsed[id] ++
  1613. SavePowers(id);
  1614.  
  1615. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_TRUESHOT[0], TrueShot_Level[id]);
  1616. if(Credits[id])
  1617. PowersMenu(id, 0)
  1618. }
  1619. }
  1620. #endif
  1621.  
  1622. #if defined POWER_PHOENIX
  1623. case 7: {
  1624. if(PlayerLevel[id] < str_to_num(SKILL_PHOENIX[1])) {
  1625. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_PHOENIX[1]), SKILL_PHOENIX[0]);
  1626. PowersMenu(id, 0)
  1627. }
  1628. else if(Phoenix_Level[id] >= SKILL_MAX_LEVEL)
  1629. PowersMenu(id, 0)
  1630. else {
  1631. Phoenix_Level[id] += 1
  1632. Credits[id] --
  1633. CreditsUsed[id] ++
  1634. SavePowers(id);
  1635.  
  1636. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_PHOENIX[0], Phoenix_Level[id]);
  1637. if(Credits[id])
  1638. PowersMenu(id, 0)
  1639. }
  1640. }
  1641. #endif
  1642.  
  1643. #if defined POWER_DEVOTIONAURA
  1644. case 8: {
  1645. if(PlayerLevel[id] < str_to_num(SKILL_DEVOTIONAURA[1])) {
  1646. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_DEVOTIONAURA[1]), SKILL_DEVOTIONAURA[0]);
  1647. PowersMenu(id, 1)
  1648. }
  1649. else if(DevotionAura_Level[id] >= SKILL_MAX_LEVEL)
  1650. PowersMenu(id, 1)
  1651. else {
  1652. DevotionAura_Level[id] += 1
  1653. Credits[id] --
  1654. CreditsUsed[id] ++
  1655. SavePowers(id);
  1656.  
  1657. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_DEVOTIONAURA[0], DevotionAura_Level[id]);
  1658. if(is_user_alive(id) && furien_get_user_team(id) != -1)
  1659. fm_set_user_health(id, get_user_health(id) + Devotion[furien_get_user_team(id)]);
  1660. if(Credits[id])
  1661. PowersMenu(id, 1)
  1662. }
  1663. }
  1664. #endif
  1665.  
  1666. #if defined POWER_CRITICALSTRIKE
  1667. case 9: {
  1668. if(PlayerLevel[id] < str_to_num(SKILL_CRITICALSTRIKE[1])) {
  1669. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_CRITICALSTRIKE[1]), SKILL_CRITICALSTRIKE[0]);
  1670. PowersMenu(id, 1)
  1671. }
  1672. else if(CriticalStrike_Level[id] >= SKILL_MAX_LEVEL)
  1673. PowersMenu(id, 1)
  1674. else {
  1675. CriticalStrike_Level[id] += 1
  1676. Credits[id] --
  1677. CreditsUsed[id] ++
  1678. SavePowers(id);
  1679.  
  1680. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALSTRIKE[0], CriticalStrike_Level[id]);
  1681. if(Credits[id])
  1682. PowersMenu(id, 1)
  1683. }
  1684. }
  1685. #endif
  1686.  
  1687. #if defined POWER_CRITICALGRENADE
  1688. case 10: {
  1689. if(PlayerLevel[id] < str_to_num(SKILL_CRITICALGRENADE[1])) {
  1690. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_CRITICALGRENADE[1]), SKILL_CRITICALGRENADE[0]);
  1691. PowersMenu(id, 1)
  1692. }
  1693. else if(CriticalGrenade_Level[id] >= SKILL_MAX_LEVEL)
  1694. PowersMenu(id, 1)
  1695. else {
  1696. CriticalGrenade_Level[id] += 1
  1697. Credits[id] --
  1698. CreditsUsed[id] ++
  1699. SavePowers(id);
  1700.  
  1701. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_CRITICALGRENADE[0], CriticalGrenade_Level[id]);
  1702. if(Credits[id])
  1703. PowersMenu(id, 1)
  1704. }
  1705. }
  1706. #endif
  1707.  
  1708. #if defined POWER_BASH
  1709. case 11: {
  1710. if(PlayerLevel[id] < str_to_num(SKILL_BASH[1])) {
  1711. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_BASH[1]), SKILL_BASH[0]);
  1712. PowersMenu(id, 1)
  1713. }
  1714. else if(Bash_Level[id] >= SKILL_MAX_LEVEL)
  1715. PowersMenu(id, 1)
  1716. else {
  1717. Bash_Level[id] += 1
  1718. Credits[id] --
  1719. CreditsUsed[id] ++
  1720. SavePowers(id);
  1721.  
  1722. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_BASH[0], Bash_Level[id]);
  1723. if(Credits[id])
  1724. PowersMenu(id, 1)
  1725. }
  1726. }
  1727. #endif
  1728.  
  1729. #if defined POWER_HEALINGWAVE
  1730. case 12: {
  1731. if(PlayerLevel[id] < str_to_num(SKILL_HEALINGWAVE[1])) {
  1732. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_HEALINGWAVE[1]), SKILL_HEALINGWAVE[0]);
  1733. PowersMenu(id, 1)
  1734. }
  1735. else if(HealingWave_Level[id] >= SKILL_MAX_LEVEL)
  1736. PowersMenu(id, 1)
  1737. else {
  1738. HealingWave_Level[id] += 1
  1739. Credits[id] --
  1740. CreditsUsed[id] ++
  1741. SavePowers(id);
  1742.  
  1743. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_HEALINGWAVE[0], HealingWave_Level[id]);
  1744. if(is_user_alive(id) && !task_exists(id + TASK_WAVE))
  1745. Power_HealingWave(id);
  1746. if(Credits[id])
  1747. PowersMenu(id, 1)
  1748. }
  1749. }
  1750. #endif
  1751.  
  1752. #if defined POWER_SHADOWSTRIKE
  1753. case 13: {
  1754. if(PlayerLevel[id] < str_to_num(SKILL_SHADOWSTRIKE[1])) {
  1755. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_SHADOWSTRIKE[1]), SKILL_SHADOWSTRIKE[0]);
  1756. PowersMenu(id, 1)
  1757. }
  1758. else if(ShadowStrike_Level[id] >= SKILL_MAX_LEVEL)
  1759. PowersMenu(id, 1)
  1760. else {
  1761. ShadowStrike_Level[id] += 1
  1762. Credits[id] --
  1763. CreditsUsed[id] ++
  1764. SavePowers(id);
  1765.  
  1766. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SHADOWSTRIKE[0], ShadowStrike_Level[id]);
  1767. if(Credits[id])
  1768. PowersMenu(id, 1)
  1769. }
  1770. }
  1771. #endif
  1772.  
  1773. #if defined POWER_SIPHONMANA
  1774. case 14: {
  1775. if(PlayerLevel[id] < str_to_num(SKILL_SIPHONMANA[1])) {
  1776. ColorChat(id,"!t[Furien]!g Trebuie sa ai!t Level %d!g pentru a debloca!t %s", str_to_num(SKILL_SIPHONMANA[1]), SKILL_SIPHONMANA[0]);
  1777. PowersMenu(id, 1)
  1778. }
  1779. else if(SiphonMana_Level[id] >= SKILL_MAX_LEVEL)
  1780. PowersMenu(id, 1)
  1781. else {
  1782. SiphonMana_Level[id] += 1
  1783. Credits[id] --
  1784. CreditsUsed[id] ++
  1785. PowersMenu(id, 1)
  1786.  
  1787. ColorChat(id,"!t[Furien]!g %s:!t Level %d", SKILL_SIPHONMANA[0], SiphonMana_Level[id]);
  1788. if(Credits[id])
  1789. PowersMenu(id, 1)
  1790. }
  1791. }
  1792. #endif
  1793.  
  1794. default: return PLUGIN_HANDLED;
  1795. }
  1796. menu_destroy(menu);
  1797.  
  1798. return PLUGIN_HANDLED;
  1799. }
  1800.  
  1801. #if defined POWER_BASH
  1802. public Bash_Reset(id) {
  1803. if(id >= TASK_RESETBASH)
  1804. id -= TASK_RESETBASH;
  1805.  
  1806. Bash_Stunned[id] = false
  1807. if(is_user_alive(id) && furien_get_user_team(id) != -1) {
  1808. if(UnholyAura_Level[id])
  1809. set_pev(id, pev_maxspeed, Unholy[UnholyAura_Level[id] - 1][furien_get_user_team(id)]);
  1810. else
  1811. set_pev(id, pev_maxspeed, LastSpeed[id]);
  1812. }
  1813. }
  1814. #endif
  1815.  
  1816. #if defined POWER_HEALINGWAVE
  1817. public Power_HealingWave(id) {
  1818. if(id >= TASK_WAVE)
  1819. id -= TASK_WAVE;
  1820.  
  1821. if(HealingWave_Level[id] && is_user_connected(id) && is_user_alive(id)) {
  1822. set_task(Heal[HealingWave_Level[id] - 1][furien_get_user_team(id)], "Power_HealingWave", TASK_WAVE + id);
  1823.  
  1824. new Players[32], Num, Targetid, TargetOrigin[3], Origin[3];
  1825. new Team = get_user_team(id);
  1826.  
  1827. get_user_origin(id, Origin);
  1828. get_players(Players, Num, "a");
  1829.  
  1830. for(new i = 0; i < Num; i++) {
  1831. Targetid = Players[i];
  1832.  
  1833. if(is_user_connected(Targetid) && get_user_team(Targetid) == Team) {
  1834. get_user_origin(Targetid, TargetOrigin);
  1835.  
  1836. if(get_distance(Origin, TargetOrigin) < HEALING_WAVE_RANGE) {
  1837. get_user_origin(Targetid, Origin)
  1838. if(get_user_health(Targetid) + 1 <= MAX_HEALTH) {
  1839. fm_set_user_health(Targetid, get_user_health(Targetid) + 1);
  1840.  
  1841. if(get_user_team(id) == 2) {
  1842. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1843. write_byte (TE_IMPLOSION)
  1844. write_coord(Origin[0]) // position (X)
  1845. write_coord(Origin[1]) // position (Y)
  1846. write_coord(Origin[2]) // position (Z)
  1847. write_byte (100) // radius
  1848. write_byte (8) // count
  1849. write_byte (1) // life in 0.1's
  1850. message_end()
  1851. }
  1852. }
  1853. }
  1854. }
  1855. }
  1856. }
  1857. }
  1858. #endif
  1859.  
  1860. #if defined POWER_BANISH
  1861. public BanishReturn(parm[]) {
  1862. new id = parm[0];
  1863.  
  1864. if(is_user_connected(id)) {
  1865. if(parm[1] > 0) {
  1866. parm[1]--;
  1867.  
  1868. //Create_ScreenFade(id, 2,(1<<10),(1<<12), 0, 0, 0, 255);
  1869.  
  1870. set_task(0.1, "BanishReturn", TASK_BANISH + id, parm, 5);
  1871. }
  1872. else {
  1873. new Origin[3];
  1874. Origin[0] = parm[2];
  1875. Origin[1] = parm[3];
  1876. Origin[2] = parm[4];
  1877.  
  1878. Origin[2] += 15;
  1879.  
  1880. set_user_origin(id, Origin);
  1881.  
  1882. new Parm[4];
  1883. Parm[0] = Origin[0];
  1884. Parm[1] = Origin[1];
  1885. Parm[2] = Origin[2];
  1886. Parm[3] = id;
  1887.  
  1888. set_task(0.1, "_BanishReturn", TASK_BANISHRETURN + id, Parm, 4);
  1889.  
  1890. //Glow(id, 0, 0, 0, 100);
  1891.  
  1892. //Create_ScreenFade(id, 0, 0, 0, 0, 0, 0, 0);
  1893.  
  1894. PlayerBanished[id] = false;
  1895. }
  1896. }
  1897. }
  1898.  
  1899. public _BanishReturn(parm[]) {
  1900. new id = parm[3];
  1901. new Origin[3];
  1902.  
  1903. get_user_origin(id, Origin);
  1904.  
  1905. if(Origin[2] == parm[2]) {
  1906. new SpawnEnt = FindFreeSpawn(id);
  1907.  
  1908. if(SpawnEnt > 0) {
  1909. new Float:SpawnOrigin[3], Origin[3];
  1910.  
  1911. entity_get_vector(SpawnEnt, EV_VEC_origin, SpawnOrigin);
  1912.  
  1913. FVecIVec(SpawnOrigin, Origin);
  1914.  
  1915. Origin[2] += 15;
  1916.  
  1917. set_user_origin(id, Origin);
  1918.  
  1919. new Parm[4];
  1920. Parm[0] = Origin[0];
  1921. Parm[1] = Origin[1];
  1922. Parm[2] = Origin[2];
  1923. Parm[3] = id;
  1924.  
  1925. set_task(0.1, "_BanishReturn", TASK_BANISHRETURN + id, Parm, 4);
  1926.  
  1927. ColorChat(id, "You are stuck! Ahhh! Moving you back to your spawn!");
  1928. }
  1929. else {
  1930. ColorChat(id, "Sorry, I know you're stuck, but I can't move you right now :/");
  1931. }
  1932. }
  1933. }
  1934.  
  1935. public CanSeePlayer(id, TargetID) {
  1936. new Float:Origin[3];
  1937. entity_get_vector( TargetID, EV_VEC_origin, Origin );
  1938.  
  1939. return is_in_viewcone( id, Origin );
  1940. }
  1941. #endif
  1942.  
  1943. #if defined POWER_PHOENIX
  1944. public PhoenixCheck(id) {
  1945. if(Phoenix_Level[id]) {
  1946. if(random_float(0.0, 1.0) <= Phoenix[Phoenix_Level[id] - 1][furien_get_user_team(id)]) {
  1947. IsPhoenix[id] = true;
  1948. }
  1949. }
  1950.  
  1951. else {
  1952. IsPhoenix[id] = false;
  1953. }
  1954. }
  1955.  
  1956. public PhoenixSpawn(id) {
  1957. if(pev_valid(id) && is_user_connected(id) && !RoundEnded) {
  1958. new PhoenixID = PhoenixExists(get_user_team(id));
  1959.  
  1960. if(pev_valid(PhoenixID) && is_user_connected(PhoenixID) && is_user_alive(PhoenixID)) {
  1961. IsPhoenix[PhoenixID] = false;
  1962.  
  1963. set_task(SPAWN_DELAY, "Spawn", TASK_SPAWN + id);
  1964.  
  1965. new Castername[32], SpawnerName[32];
  1966.  
  1967. get_user_name(PhoenixID, Castername,31)
  1968. get_user_name(id, SpawnerName, 31)
  1969.  
  1970. ColorChat(id, "!t%s!g has revived you", Castername);
  1971. ColorChat(PhoenixID, "!gYou have revived!t %s!g, way to go !", SpawnerName);
  1972. }
  1973. }
  1974. }
  1975.  
  1976. public PhoenixExists(Team) {
  1977. new Players[32], Num, id;
  1978. get_players(Players, Num, "a");
  1979.  
  1980. for(new i = 0; i < Num; i++) {
  1981. id = Players[i];
  1982.  
  1983. if(get_user_team(id) == Team) {
  1984. if(IsPhoenix[id]) {
  1985. return id;
  1986. }
  1987. }
  1988. }
  1989.  
  1990. return -1;
  1991. }
  1992. #endif
  1993.  
  1994. public FindFreeSpawn(id) {
  1995. new PlayersInVicinity, SpawnID, EntList[1], Origin[3];
  1996. new ent = -1;
  1997. new Float:SpawnOrigin[3];
  1998. new Float:Vicinity = 96.0;
  1999. new bool:Found = false;
  2000. new Team = get_user_team(id);
  2001.  
  2002. SpawnID = ((Team == 2) ? 0 : 1);
  2003.  
  2004. do {
  2005. ent = find_ent_by_class(ent, SpawnEnt[SpawnID]);
  2006.  
  2007. if(ent) {
  2008. entity_get_vector(ent, EV_VEC_origin, SpawnOrigin);
  2009.  
  2010. FVecIVec(SpawnOrigin, Origin);
  2011.  
  2012. PlayersInVicinity = find_sphere_class(0, "player", Vicinity, EntList, 1, SpawnOrigin);
  2013.  
  2014. if(PlayersInVicinity == 0) {
  2015. SpawnReserved[SpawnInc++] = ent;
  2016.  
  2017. Found = true;
  2018. }
  2019. }
  2020. }
  2021. while(ent && !Found)
  2022.  
  2023. if(!task_exists(TASK_RESETSPAWNS))
  2024. set_task(0.3, "SpawnReset", TASK_RESETSPAWNS);
  2025.  
  2026. if(!Found) {
  2027. return -1;
  2028. }
  2029.  
  2030. return ent;
  2031. }
  2032.  
  2033. public SpawnReset() {
  2034. new i;
  2035.  
  2036. SpawnInc = 0;
  2037. for(i = 0; i < 64; i++) {
  2038. SpawnReserved[i] = 0;
  2039. }
  2040. }
  2041.  
  2042. public Spawn(id) {
  2043. if(!RoundEnded) {
  2044. if(id >= TASK_SPAWN)
  2045. id -= TASK_SPAWN;
  2046.  
  2047. if(!is_user_alive(id)) {
  2048. fm_set_user_godmode(id, 1);
  2049.  
  2050. ExecuteHamB(Ham_CS_RoundRespawn,id);
  2051.  
  2052. set_task(0.2, "Spawn_Final", TASK_SPAWNPLAYER + id);
  2053. set_task(1.0, "SpawnRemoveGod", TASK_SPAWNREMOVEGOD + id);
  2054. }
  2055. }
  2056. }
  2057.  
  2058. public Spawn_Final(id) {
  2059. if(id >= TASK_SPAWNPLAYER)
  2060. id -= TASK_SPAWNPLAYER;
  2061.  
  2062. give_item(id, "item_suit");
  2063. fm_set_user_health(id, 100);
  2064. }
  2065.  
  2066. public SpawnRemoveGod(id) {
  2067. if(id >= TASK_SPAWNREMOVEGOD)
  2068. id -= TASK_SPAWNREMOVEGOD;
  2069.  
  2070. fm_set_user_godmode(id, 0);
  2071. }
  2072.  
  2073. public Glow(id, Red, Green, Blue, All) {
  2074. if(!task_exists(TASK_GLOW + id)) {
  2075. if(All) {
  2076. GlowLevel[id][0] = 0;
  2077. GlowLevel[id][1] = 0;
  2078. GlowLevel[id][2] = 0;
  2079. GlowLevel[id][3] += All;
  2080. }
  2081. else if(Red) {
  2082. GlowLevel[id][0] += Red;
  2083. GlowLevel[id][1] = 0;
  2084. GlowLevel[id][2] = 0;
  2085. GlowLevel[id][3] = 0;
  2086. }
  2087. else if(Green) {
  2088. GlowLevel[id][0] = 0;
  2089. GlowLevel[id][1] += Green;
  2090. GlowLevel[id][2] = 0;
  2091. GlowLevel[id][3] = 0;
  2092. }
  2093. else if(Blue) {
  2094. GlowLevel[id][0] = 0;
  2095. GlowLevel[id][1] = 0;
  2096. GlowLevel[id][2] += Blue;
  2097. GlowLevel[id][3] = 0;
  2098. }
  2099.  
  2100. GlowLevel[id][0] = ((GlowLevel[id][0] > MAXGLOW) ? MAXGLOW : GlowLevel[id][0]);
  2101. GlowLevel[id][1] = ((GlowLevel[id][1] > MAXGLOW) ? MAXGLOW : GlowLevel[id][1]);
  2102. GlowLevel[id][2] = ((GlowLevel[id][2] > MAXGLOW) ? MAXGLOW : GlowLevel[id][2]);
  2103. GlowLevel[id][3] = ((GlowLevel[id][3] > MAXGLOW) ? MAXGLOW : GlowLevel[id][3]);
  2104.  
  2105. _Glow(id);
  2106. }
  2107. }
  2108.  
  2109. public _Glow(id) {
  2110. if(id >= TASK_GLOW)
  2111. id -= TASK_GLOW;
  2112.  
  2113. if(is_user_connected(id)) {
  2114. new Red = GlowLevel[id][0];
  2115. new Green = GlowLevel[id][1];
  2116. new Blue = GlowLevel[id][2];
  2117. new All = GlowLevel[id][3];
  2118.  
  2119. if(Red || Green || Blue) {
  2120.  
  2121. GlowLevel[id][0] = ((Red > 5) ? Red - 5 : 0);
  2122. GlowLevel[id][1] = ((Green > 5) ? Green - 5 : 0);
  2123. GlowLevel[id][2] = ((Blue > 5) ? Blue - 5 : 0);
  2124.  
  2125. set_user_rendering(id, kRenderFxGlowShell, Red, Green, Blue, kRenderNormal, 16);
  2126. set_task(0.2, "_Glow", TASK_GLOW + id);
  2127.  
  2128. }
  2129.  
  2130. else if(All) {
  2131. GlowLevel[id][3] = ((All > 5) ? All - 5 : 0);
  2132.  
  2133. set_user_rendering(id, kRenderFxGlowShell, All, All, All, kRenderNormal, 16);
  2134. set_task(0.2, "_Glow", TASK_GLOW + id);
  2135.  
  2136. }
  2137.  
  2138. else {
  2139. set_user_rendering(id);
  2140. }
  2141.  
  2142. }
  2143. }
  2144.  
  2145. stock Create_ScreenFade(id, duration, holdtime, fadetype, red, green, blue, alpha){
  2146. if(is_user_connected(id)) {
  2147. message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
  2148. write_short(duration) // fade lasts this long duration
  2149. write_short(holdtime) // fade lasts this long hold time
  2150. write_short(fadetype) // fade type(in / out)
  2151. write_byte(red) // fade red
  2152. write_byte(green) // fade green
  2153. write_byte(blue) // fade blue
  2154. write_byte(alpha) // fade alpha
  2155. message_end()
  2156. }
  2157. }
  2158.  
  2159. stock Create_ScreenShake(id, amount, duration, frequency){
  2160. if(is_user_connected(id)) {
  2161. message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id)
  2162. write_short(amount) // ammount
  2163. write_short(duration) // lasts this long
  2164. write_short(frequency) // frequency
  2165. message_end()
  2166. }
  2167. }
  2168.  
  2169. stock death_message(Killer, Victim, const Weapon[]) {
  2170. if(is_user_connected(Killer) && is_user_connected(Victim)) {
  2171. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
  2172. ExecuteHamB(Ham_Killed, Victim, Killer, 2);
  2173. set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
  2174.  
  2175. make_deathmsg(Killer, Victim, 0, Weapon);
  2176.  
  2177. message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
  2178. write_byte(Killer); // id
  2179. write_short(pev(Killer, pev_frags)); // frags
  2180. write_short(cs_get_user_deaths(Killer)); // deaths
  2181. write_short(0); // class?
  2182. write_short(get_user_team(Killer)); // team
  2183. message_end();
  2184.  
  2185. message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
  2186. write_byte(Victim); // id
  2187. write_short(pev(Victim, pev_frags)); // frags
  2188. write_short(cs_get_user_deaths(Victim)); // deaths
  2189. write_short(0); // class?
  2190. write_short(get_user_team(Victim)); // team
  2191. message_end();
  2192. }
  2193. }
  2194.  
  2195. public make_knockback(Victim, Float:origin[3], Float:maxspeed) {
  2196. new Float:fVelocity[3];
  2197. kickback(Victim, origin, maxspeed, fVelocity);
  2198. entity_set_vector(Victim, EV_VEC_velocity, fVelocity);
  2199.  
  2200. return(1);
  2201. }
  2202.  
  2203. stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3]) {
  2204. new Float:fEntOrigin[3];
  2205. entity_get_vector(ent, EV_VEC_origin, fEntOrigin);
  2206.  
  2207. new Float:fDistance[3];
  2208. fDistance[0] = fEntOrigin[0] - fOrigin[0];
  2209. fDistance[1] = fEntOrigin[1] - fOrigin[1];
  2210. fDistance[2] = fEntOrigin[2] - fOrigin[2];
  2211. new Float:fTime = (vector_distance(fEntOrigin,fOrigin) / fSpeed);
  2212. fVelocity[0] = fDistance[0] / fTime;
  2213. fVelocity[1] = fDistance[1] / fTime;
  2214. fVelocity[2] = fDistance[2] / fTime;
  2215.  
  2216. return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
  2217. }
  2218.  
  2219. public XP_WinRound(Winner) {
  2220. new Players[32], Num, i, id;
  2221. get_players(Players, Num);
  2222.  
  2223. for(i = 0; i < Num; i++) {
  2224. id = Players[i];
  2225. if(get_user_team(id) == Winner) {
  2226. new Float:BonusXP
  2227. (get_user_flags(id) & VIP_LEVEL) ? (BonusXP = (WIN_ROUND * VIP_XP_MULTIPLIER)) : (BonusXP = WIN_ROUND)
  2228.  
  2229. if(BonusXP) {
  2230. new XP = floatround(BonusXP)
  2231. set_user_xp(id, get_user_xp(id) + XP)
  2232. ColorChat(id, "!gYou recieved!t %d XP!g for winning the round", XP);
  2233. }
  2234. }
  2235. }
  2236. }
  2237.  
  2238. public GiveExperience(id, level, cid) {
  2239. if (cmd_access(id, level, cid, 2)) {
  2240. new arg[23], gplayers[32], num, i, players, name[32];
  2241. get_user_name(id, name, 31);
  2242. read_argv(1, arg, 23);
  2243. new give_xp[10];
  2244. read_argv(2, give_xp, charsmax(give_xp));
  2245. new Experience = str_to_num(give_xp);
  2246. if(equali(arg, "@All")) {
  2247. get_players(gplayers, num, "ch");
  2248. for(i = 0; i < num; i++) {
  2249. players = gplayers[i];
  2250. if(!is_user_connected(players))
  2251. continue;
  2252. set_user_xp(players, get_user_xp(players) + Experience);
  2253. }
  2254. switch(get_cvar_num("amx_show_activity")) {
  2255. case 1: ColorChat(0, "!tADMIN!g give!t %d XP!g to all!t Players.", Experience);
  2256. case 2: ColorChat(0, "!t%s!g give!t %d XP!g to all!t Players.", name, Experience);
  2257. }
  2258. }
  2259. new player = cmd_target(id, arg, 11);
  2260. if(!player) {
  2261. console_print(id, "Juctorul cu acel nume nu exista.");
  2262. }
  2263. else {
  2264. set_user_xp(player, get_user_xp(player) + Experience);
  2265. switch(get_cvar_num("amx_show_activity")) {
  2266. case 1: ColorChat(player, "!tADMIN!g give you!t %d XP.", Experience);
  2267. case 2: ColorChat(player, "!t%s!g give you!t %d XP.", name, Experience);
  2268. }
  2269. }
  2270. }
  2271. }
  2272.  
  2273. public ResetExperience(id, level, cid) {
  2274. if (cmd_access(id, level, cid, 2)) {
  2275. new arg[23], gplayers[32], num, i, players, name[32];
  2276. get_user_name(id, name, 31);
  2277. read_argv(1, arg, 23);
  2278. if(equali(arg, "@All")) {
  2279. get_players(gplayers, num, "ch");
  2280. for(i = 0; i < num; i++) {
  2281. players = gplayers[i];
  2282. if(!is_user_connected(players))
  2283. continue;
  2284. set_user_xp(players, 0);
  2285. }
  2286. switch(get_cvar_num("amx_show_activity")) {
  2287. case 1: ColorChat(0, "!tADMIN!g reset!t XP!g to all!t Players.");
  2288. case 2: ColorChat(0, "!t%s!g reset!t XP!g to all!t Players.", name);
  2289. }
  2290. }
  2291. new player = cmd_target(id, arg, 11);
  2292. if(!player) {
  2293. console_print(id, "Juctorul cu acel nume nu exista.");
  2294. }
  2295. else {
  2296. set_user_xp(player, 0);
  2297. switch(get_cvar_num("amx_show_activity")) {
  2298. case 1: ColorChat(player, "!tADMIN!g reset your!t Experience.");
  2299. case 2: ColorChat(player, "!t%s!g reset your!t Experience.", name);
  2300. }
  2301. }
  2302. }
  2303. }
  2304.  
  2305. public furien_get_user_team(id) {
  2306. switch(get_user_team(id)) {
  2307. case 1:
  2308. return 0
  2309. case 2:
  2310. return 1
  2311. default:
  2312. return -1
  2313. }
  2314. return -1
  2315. }
  2316.  
  2317. public SavePowers(id) {
  2318. new Name[32];
  2319. get_user_name(id, Name, 31);
  2320.  
  2321. new UnholyAura
  2322. #if defined POWER_UNHOLYAURA
  2323. UnholyAura = UnholyAura_Level[id]
  2324. #else
  2325. UnholyAura = TempUnholyAura_Level[id]
  2326. #endif
  2327. new Levitation
  2328. #if defined POWER_LEVITATION
  2329. Levitation = Levitation_Level[id]
  2330. #else
  2331. Levitation = TempLevitation_Level[id]
  2332. #endif
  2333. new VampiricAura
  2334. #if defined POWER_VAMPIRICAURA
  2335. VampiricAura = VampiricAura_Level[id]
  2336. #else
  2337. VampiricAura = TempVampiricAura_Level[id]
  2338. #endif
  2339. new Evasion
  2340. #if defined POWER_EVASION
  2341. Evasion = Evasion_Level[id]
  2342. #else
  2343. Evasion = TempEvasion_Level[id]
  2344. #endif
  2345. new TrueShot
  2346. #if defined POWER_TRUESHOT
  2347. TrueShot = TrueShot_Level[id]
  2348. #else
  2349. TrueShot = TempTrueShot_Level[id]
  2350. #endif
  2351. new Banish
  2352. #if defined POWER_BANISH
  2353. Banish = Banish_Level[id]
  2354. #else
  2355. Banish = TempBanish_Level[id]
  2356. #endif
  2357. new Phoenix
  2358. #if defined POWER_PHOENIX
  2359. Phoenix = Phoenix_Level[id]
  2360. #else
  2361. Phoenix = TempPhoenix_Level[id]
  2362. #endif
  2363. new DevotionAura
  2364. #if defined POWER_DEVOTIONAURA
  2365. DevotionAura = DevotionAura_Level[id]
  2366. #else
  2367. DevotionAura = TempDevotionAura_Level[id]
  2368. #endif
  2369. new Bash
  2370. #if defined POWER_BASH
  2371. Bash = Bash_Level[id]
  2372. #else
  2373. Bash = TempBash_Level[id]
  2374. #endif
  2375. new CriticalStrike
  2376. #if defined POWER_CRITICALSTRIKE
  2377. CriticalStrike = CriticalStrike_Level[id]
  2378. #else
  2379. CriticalStrike = TempCriticalStrike_Level[id]
  2380. #endif
  2381. new CriticalGrenade
  2382. #if defined POWER_CRITICALGRENADE
  2383. CriticalGrenade = CriticalGrenade_Level[id]
  2384. #else
  2385. CriticalGrenade = TempCriticalGrenade_Level[id]
  2386. #endif
  2387. new SiphonMana
  2388. #if defined POWER_SIPHONMANA
  2389. SiphonMana = SiphonMana_Level[id]
  2390. #else
  2391. SiphonMana = TempSiphonMana_Level[id]
  2392. #endif
  2393. new HealingWave
  2394. #if defined POWER_HEALINGWAVE
  2395. HealingWave = HealingWave_Level[id]
  2396. #else
  2397. HealingWave = TempHealingWave_Level[id]
  2398. #endif
  2399. new ShadowStrike
  2400. #if defined POWER_SHADOWSTRIKE
  2401. ShadowStrike = ShadowStrike_Level[id]
  2402. #else
  2403. ShadowStrike = TempShadowStrike_Level[id]
  2404. #endif
  2405.  
  2406. new PowersData[1024]
  2407. formatex(PowersData, sizeof(PowersData) - 1, "^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%d^"", PlayerExperience[id], UnholyAura, Levitation, VampiricAura, Evasion, TrueShot, Banish, Phoenix, DevotionAura, Bash, CriticalStrike, CriticalGrenade, SiphonMana, HealingWave, ShadowStrike)
  2408.  
  2409. new Save[1024]
  2410. format(Save, sizeof(Save) - 1, "^"%s^" %s", Name, PowersData)
  2411.  
  2412. new Line[128], Linie, IsPlayer = false, Arg1[32]
  2413.  
  2414. new FileOpen = fopen(PowersFile, "rt")
  2415. while(!feof(FileOpen)) {
  2416. fgets(FileOpen, Line, 127)
  2417. trim(Line)
  2418.  
  2419. parse(Line, Arg1, 31)
  2420.  
  2421. if (equali(Arg1, Name)) {
  2422. write_file(PowersFile, Save, Linie)
  2423. IsPlayer = true
  2424. break
  2425. }
  2426.  
  2427. Linie++
  2428. }
  2429. fclose(FileOpen)
  2430. if (!IsPlayer)
  2431. write_file(PowersFile, Save, -1)
  2432. }
  2433.  
  2434. public LoadPowers(id) {
  2435. new Name[32];
  2436. get_user_name(id, Name, 31);
  2437.  
  2438. new Line[128], IsPlayer = false, Arg1[32], Arg2[32], Arg3[32], Arg4[32], Arg5[32], Arg6[32], Arg7[32], Arg8[32],
  2439. Arg9[32], Arg10[32], Arg11[32], Arg12[32], Arg13[32], Arg14[32], Arg15[32], Arg16[32];
  2440.  
  2441. new FileOpen = fopen(PowersFile, "rt")
  2442. while(!feof(FileOpen)) {
  2443. fgets(FileOpen, Line, 127)
  2444. trim(Line)
  2445.  
  2446. parse(Line, Arg1, 31, Arg2, 31, Arg3, 31, Arg4, 31, Arg5, 31, Arg6, 31, Arg7, 31, Arg8, 31, Arg9, 31, Arg10, 31, Arg11, 31, Arg12, 31, Arg13, 31, Arg14, 31, Arg15, 31, Arg16, 31)
  2447.  
  2448. if (equali(Arg1, Name)) {
  2449. #if defined POWER_UNHOLYAURA
  2450. UnholyAura_Level[id] = str_to_num(Arg3)
  2451. #else
  2452. TempUnholyAura_Level[id] = str_to_num(Arg3)
  2453. #endif
  2454. #if defined POWER_LEVITATION
  2455. Levitation_Level[id] = str_to_num(Arg4)
  2456. #else
  2457. TempLevitation_Level[id] = str_to_num(Arg4)
  2458. #endif
  2459. #if defined POWER_VAMPIRICAURA
  2460. VampiricAura_Level[id] = str_to_num(Arg5)
  2461. #else
  2462. TempVampiricAura_Level[id] = str_to_num(Arg5)
  2463. #endif
  2464. #if defined POWER_EVASION
  2465. Evasion_Level[id] = str_to_num(Arg6)
  2466. #else
  2467. TempEvasion_Level[id] = str_to_num(Arg6)
  2468. #endif
  2469. #if defined POWER_TRUESHOT
  2470. TrueShot_Level[id] = str_to_num(Arg7)
  2471. #else
  2472. TempTrueShot_Level[id] = str_to_num(Arg7)
  2473. #endif
  2474. #if defined POWER_BANISH
  2475. Banish_Level[id] = str_to_num(Arg8)
  2476. #else
  2477. TempBanish_Level[id] = str_to_num(Arg8)
  2478. #endif
  2479. #if defined POWER_PHOENIX
  2480. Phoenix_Level[id] = str_to_num(Arg9)
  2481. #else
  2482. TempPhoenix_Level[id] = str_to_num(Arg9)
  2483. #endif
  2484. #if defined POWER_DEVOTIONAURA
  2485. DevotionAura_Level[id] = str_to_num(Arg10)
  2486. #else
  2487. TempDevotionAura_Level[id] = str_to_num(Arg10)
  2488. #endif
  2489. #if defined POWER_BASH
  2490. Bash_Level[id] = str_to_num(Arg11)
  2491. #else
  2492. TempBash_Level[id] = str_to_num(Arg11)
  2493. #endif
  2494. #if defined POWER_CRITICALSTRIKE
  2495. CriticalStrike_Level[id] = str_to_num(Arg12)
  2496. #else
  2497. TempCriticalStrike_Level[id] = str_to_num(Arg12)
  2498. #endif
  2499. #if defined POWER_CRITICALGRENADE
  2500. CriticalGrenade_Level[id] = str_to_num(Arg13)
  2501. #else
  2502. TempCriticalGrenade_Level[id] = str_to_num(Arg13)
  2503. #endif
  2504. #if defined POWER_SIPHONMANA
  2505. SiphonMana_Level[id] = str_to_num(Arg14)
  2506. #else
  2507. TempSiphonMana_Level[id] = str_to_num(Arg14)
  2508. #endif
  2509. #if defined POWER_HEALINGWAVE
  2510. HealingWave_Level[id] = str_to_num(Arg15)
  2511. #else
  2512. TempHealingWave_Level[id] = str_to_num(Arg15)
  2513. #endif
  2514. #if defined POWER_SHADOWSTRIKE
  2515. ShadowStrike_Level[id] = str_to_num(Arg16)
  2516. #else
  2517. TempShadowStrike_Level[id] = str_to_num(Arg16)
  2518. #endif
  2519.  
  2520. CreditsUsed[id] = (str_to_num(Arg3) + str_to_num(Arg4) + str_to_num(Arg5) + str_to_num(Arg6) + str_to_num(Arg7) + str_to_num(Arg8) + str_to_num(Arg9) + str_to_num(Arg10) + str_to_num(Arg11) + str_to_num(Arg12) + str_to_num(Arg13) + str_to_num(Arg14) + str_to_num(Arg15) + str_to_num(Arg16))
  2521.  
  2522. new XP = str_to_num(Arg2)
  2523. set_user_xp(id, XP)
  2524.  
  2525. IsPlayer = true
  2526. break
  2527. }
  2528. }
  2529. fclose(FileOpen)
  2530.  
  2531. if (!IsPlayer) {
  2532. #if defined POWER_UNHOLYAURA
  2533. UnholyAura_Level[id] = 0
  2534. #else
  2535. TempUnholyAura_Level[id] = 0
  2536. #endif
  2537. #if defined POWER_LEVITATION
  2538. Levitation_Level[id] = 0
  2539. #else
  2540. TempLevitation_Level[id] = 0
  2541. #endif
  2542. #if defined POWER_VAMPIRICAURA
  2543. VampiricAura_Level[id] = 0
  2544. #else
  2545. TempVampiricAura_Level[id] = 0
  2546. #endif
  2547. #if defined POWER_EVASION
  2548. Evasion_Level[id] = 0
  2549. #else
  2550. TempEvasion_Level[id] = 0
  2551. #endif
  2552. #if defined POWER_TRUESHOT
  2553. TrueShot_Level[id] = 0
  2554. #else
  2555. TempTrueShot_Level[id] = 0
  2556. #endif
  2557. #if defined POWER_BANISH
  2558. Banish_Level[id] = 0
  2559. #else
  2560. TempBanish_Level[id] = 0
  2561. #endif
  2562. #if defined POWER_PHOENIX
  2563. Phoenix_Level[id] = 0
  2564. #else
  2565. TempPhoenix_Level[id] = 0
  2566. #endif
  2567. #if defined POWER_DEVOTIONAURA
  2568. DevotionAura_Level[id] = 0
  2569. #else
  2570. TempDevotionAura_Level[id] = 0
  2571. #endif
  2572. #if defined POWER_BASH
  2573. Bash_Level[id] = 0
  2574. #else
  2575. TempBash_Level[id] = 0
  2576. #endif
  2577. #if defined POWER_CRITICALSTRIKE
  2578. CriticalStrike_Level[id] = 0
  2579. #else
  2580. TempCriticalStrike_Level[id] = 0
  2581. #endif
  2582. #if defined POWER_CRITICALGRENADE
  2583. CriticalGrenade_Level[id] = 0
  2584. #else
  2585. TempCriticalGrenade_Level[id] = 0
  2586. #endif
  2587. #if defined POWER_SIPHONMANA
  2588. SiphonMana_Level[id] = 0
  2589. #else
  2590. TempSiphonMana_Level[id] = 0
  2591. #endif
  2592. #if defined POWER_HEALINGWAVE
  2593. HealingWave_Level[id] = 0
  2594. #else
  2595. TempHealingWave_Level[id] = 0
  2596. #endif
  2597. #if defined POWER_SHADOWSTRIKE
  2598. ShadowStrike_Level[id] = 0
  2599. #else
  2600. TempShadowStrike_Level[id] = 0
  2601. #endif
  2602.  
  2603. PlayerExperience[id] = 0
  2604. PlayerLevel[id] = 0
  2605. CreditsUsed[id] = 0
  2606. Credits[id] = 0
  2607. }
  2608. }
  2609.  
  2610.  
  2611.  
  2612.  
  2613. #define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
  2614. #define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
  2615.  
  2616. stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) {
  2617. new count = 1, players[32];
  2618.  
  2619. if(id) players[0] = id;
  2620. else get_players(players, count, "ch"); {
  2621. for(new i = 0; i < count; i++) {
  2622. if(is_user_connected(players[i])) {
  2623. new color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue))
  2624.  
  2625. message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, players[i]);
  2626. write_byte(strlen(message) + 31);
  2627. write_byte(DRC_CMD_MESSAGE);
  2628. write_byte(effects);
  2629. write_long(color);
  2630. write_long(_:x);
  2631. write_long(_:y);
  2632. write_long(_:fadeintime);
  2633. write_long(_:fadeouttime);
  2634. write_long(_:holdtime);
  2635. write_long(_:fxtime);
  2636. write_string(message);
  2637. message_end();
  2638. }
  2639. }
  2640. }
  2641. }
  2642.  
  2643. stock ColorChat(const id, const input[], any:...) {
  2644. new count = 1, players[32];
  2645. static msg[191];
  2646. vformat(msg, 190, input, 3);
  2647.  
  2648. replace_all(msg, 190, "!g", "^4");
  2649. replace_all(msg, 190, "!y", "^1");
  2650. replace_all(msg, 190, "!t", "^3");
  2651.  
  2652. if(id) players[0] = id;
  2653. else get_players(players, count, "ch"); {
  2654. for(new i = 0; i < count; i++) {
  2655. if(is_user_connected(players[i])) {
  2656. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  2657. write_byte(players[i]);
  2658. write_string(msg);
  2659. message_end();
  2660. }
  2661. }
  2662. }
  2663. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement