Advertisement
Guest User

basebuilder72

a guest
Apr 8th, 2017
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 191.41 KB | None | 0 0
  1. /*
  2. Base Builder Zombie Mod
  3. By: Collin "Tirant" Smith
  4.  
  5. Code Contents
  6. [0001] - CSDM-Style WPN Menu
  7. [0002] - Achievements
  8. [0003] - Auto Join on Connect
  9. [0004] - Entity Mover
  10. [0005] - Player Models
  11. [0006] - Status Text
  12. [0007] - Unlocks\Upgrades
  13. [0008] - Black Market
  14. [0009] - Membership
  15. */
  16.  
  17. #include <amxmodx>
  18. #include <amxmisc>
  19. #include <cstrike>
  20. #include <fakemeta>
  21. #include <engine>
  22. #include <hamsandwich>
  23. #include <fun>
  24. #include <nvault>
  25. #include <csstats>
  26. #include <csx>
  27. #include <xs>
  28.  
  29. #pragma dynamic 32768
  30.  
  31. // Plugin Version
  32. new VERSION[]="7.2"
  33. new formatmodname[] = "^x01 [^x04 Base Builder^x01 ]"
  34.  
  35. //Models
  36. new const g_ZombieModel1[] = "classic3"
  37. new const g_ZombieModel2[] = "fast1"
  38. new const g_ZombieModel3[] = "crispy1"
  39.  
  40. //Shield
  41. new ShieldView[] = "models/basebuilder/v_riotshield.mdl"
  42. new ShieldPlayer[] = "models/basebuilder/p_riotshield2.mdl"
  43.  
  44. //Sounds
  45. new g_RoundStart[] = "basebuilder/round_start.wav"
  46. new g_RoundStart2[] = "basebuilder/round_start2.wav"
  47. new g_JoinServer[] = "sourcevote/welcome.mp3"
  48. new g_ZombKill1[] = "basebuilder/zombie_kill1.wav"
  49. new g_Concussion[] = "basebuilder/concussion_explode.mp3"
  50.  
  51. new g_AchivementEarned[] = "basebuilder/achievement.wav"
  52. new g_UpgradeMenuBuy[] = "events/enemy_died.wav"
  53. new g_UnlockMenuBuy[] = "weapons/sshell1.wav"
  54. new g_ItemMenuBuy[] = "items/smallmedkit1.wav"
  55. //new g_InvalidMenuBuy[] = "ambience/warn2.wav"
  56. new g_ResetAchievements[] = "events/task_complete.wav"
  57.  
  58. new g_WinZomb[] = "basebuilder/zombies_win.wav"
  59. new g_WinHum[] = "basebuilder/humans_win.wav"
  60.  
  61. #define BUILD_TASK 10000
  62. #define MODELSET_TASK 20000
  63. #define REGEN_TASK 30000
  64. #define OMA_TASK 32500
  65. #define CHANCE_TASK 40000
  66. #define TOUCHING_TASK 50000
  67. #define CONCUSSION_TASK 60000
  68.  
  69. #define AMMO_SLOT 376
  70. #define MODELCHANGE_DELAY 0.5
  71. #define MAXENTS 1365
  72. #define AUTO_TEAM_JOIN_DELAY 0.1
  73. #define TEAM_SELECT_VGUI_MENU_ID 2
  74.  
  75. #define PA_LOW 100.0//25
  76. #define PA_HIGH 200.0//50
  77.  
  78. #define MAX_ACHIEVEMENTS 21
  79.  
  80. #define ACHIEVE_ZKILLS 0
  81. #define ACHIEVE_HKILLS 1
  82. #define ACHIEVE_OBJMOVED 2
  83. #define ACHIEVE_HEADSHOTS 3
  84. #define ACHIEVE_CONNECTS 4
  85. #define ACHIEVE_KILLEDBY 5
  86. #define ACHIEVE_CLUBDREAD 6
  87. #define ACHIEVE_KNIFEZOMBIE 7
  88. #define ACHIEVE_HITMAN 8
  89. #define ACHIEVE_INVIS 9
  90. #define ACHIEVE_RAMBO 10
  91. #define ACHIEVE_WAR 11
  92. #define ACHIEVE_ARMS 12
  93. #define ACHIEVE_BANK 13
  94. #define ACHIEVE_HUNT 14
  95. #define ACHIEVE_HP 15
  96. #define ACHIEVE_AP 16
  97. #define ACHIEVE_GR 17
  98. #define ACHIEVE_IN 18
  99. #define ACHIEVE_MERC 19
  100. #define ACHIEVE_SP 20
  101.  
  102. #define LEVEL_NONE 0
  103. #define LEVEL_I 1
  104.  
  105. #define AFTER_BUILD ADMIN_LEVEL_A
  106. #define DEAD_BUILD ADMIN_LEVEL_B
  107. #define REMOVE_BLOCK ADMIN_LEVEL_C
  108. #define DEAD_REMOVE ADMIN_LEVEL_D
  109. #define LOCK_BLOCKS ADMIN_LEVEL_E
  110. #define PAIN_SHOCK_FREE ADMIN_KICK
  111. #define BAD_SPAWN ADMIN_KICK
  112. #define BUILD_BAN ADMIN_KICK
  113. #define REVIVE ADMIN_BAN
  114. #define SWAP ADMIN_KICK
  115. #define START_ROUND ADMIN_BAN
  116. #define RESET ADMIN_BAN
  117. #define MEMBERSHIP ADMIN_LEVEL_E
  118. #define GIVE_CREDITS ADMIN_CVAR
  119. #define INFECT ADMIN_BAN
  120. #define ADMIN_GUNS ADMIN_KICK
  121. #define ADMIN_RESET ADMIN_BAN
  122.  
  123. #define NO_RECOIL_WEAPONS_BITSUM ( 1 << CSW_KNIFE | 1 << CSW_HEGRENADE | 1 << CSW_FLASHBANG | 1 << CSW_SMOKEGRENADE | 1 << CSW_C4 | 1 << CSW_SCOUT | 1 << CSW_AWP | 1 << CSW_M249 )
  124.  
  125. #if cellbits == 32
  126. #define OFFSET_BUYZONE 235
  127. #else
  128. #define OFFSET_BUYZONE 268
  129. #endif
  130.  
  131. #define RELOAD_RATIO 0.66
  132.  
  133. #define LockBlock(%1) ( entity_set_int( %1, EV_INT_iuser1, 1 ) )
  134. #define UnlockBlock(%1) ( entity_set_int( %1, EV_INT_iuser1, 0 ) )
  135. #define IsBlockLocked(%1) ( entity_get_int( %1, EV_INT_iuser1 ) == 1 )
  136.  
  137. new const Float:g_Color[24][3] =
  138. {
  139. {200.0, 000.0, 000.0},
  140. {255.0, 083.0, 073.0},
  141. {255.0, 117.0, 056.0},
  142. {255.0, 174.0, 066.0},
  143. {255.0, 207.0, 171.0},
  144. {252.0, 232.0, 131.0},
  145. {254.0, 254.0, 034.0},
  146. {059.0, 176.0, 143.0},
  147. {197.0, 227.0, 132.0},
  148. {000.0, 150.0, 000.0},
  149. {120.0, 219.0, 226.0},
  150. {135.0, 206.0, 235.0},
  151. {128.0, 218.0, 235.0},
  152. {000.0, 000.0, 255.0},
  153. {146.0, 110.0, 174.0},
  154. {255.0, 105.0, 180.0},
  155. {246.0, 100.0, 175.0},
  156. {205.0, 074.0, 076.0},
  157. {250.0, 167.0, 108.0},
  158. {234.0, 126.0, 093.0},
  159. {180.0, 103.0, 077.0},
  160. {149.0, 145.0, 140.0},
  161. {000.0, 000.0, 000.0},
  162. {255.0, 255.0, 255.0}
  163. }
  164.  
  165. new const Float:g_RenderColor[27] =
  166. {
  167. 100.0, //Red
  168. 135.0, //Red Orange
  169. 140.0, //Orange
  170. 120.0, //Yellow Orange
  171. 140.0, //Peach
  172. 125.0, //Yellow
  173. 100.0, //Lemon Yellow
  174. 125.0, //Jungle Green
  175. 135.0, //Yellow Green
  176. 100.0, //Green
  177. 125.0, //Aquamarine
  178. 150.0, //Baby Blue
  179. 090.0, //Sky Blue
  180. 075.0, //Blue
  181. 175.0, //Violet
  182. 150.0, //Hot Pink
  183. 175.0, //Magenta
  184. 140.0, //Mahogany
  185. 140.0, //Tan
  186. 140.0, //Light Brown
  187. 165.0, //Brown
  188. 175.0, //Gray
  189. 125.0, //Black
  190. 125.0, //White
  191. 125.0, //Rainbow
  192. 175.0, //Textured
  193. 150.0 //Disco
  194. }
  195.  
  196. new const g_ColorName[27][] =
  197. {
  198. "Red",
  199. "Red Orange",
  200. "Orange",
  201. "Yellow Orange",
  202. "Peach",
  203. "Yellow",
  204. "Lemon Yellow",
  205. "Jungle Green",
  206. "Yellow Green",
  207. "Green",
  208. "Aquamarine",
  209. "Baby Blue",
  210. "Sky Blue",
  211. "Blue",
  212. "Violet",
  213. "Hot Pink",
  214. "Magenta",
  215. "Mahogany",
  216. "Tan",
  217. "Light Brown",
  218. "Brown",
  219. "Gray",
  220. "Black",
  221. "White",
  222. "Rainbow",
  223. "Textured",
  224. "Disco"
  225. }
  226.  
  227. enum
  228. {
  229. RED = 0, //200, 0, 0
  230. REDORANGE, //255, 83, 73
  231. ORANGE, //255, 117, 56
  232. YELLOWORANGE, //255, 174, 66
  233. PEACH, //255, 207, 171
  234. YELLOW, //252, 232, 131
  235. LEMONYELLOW, //254, 254, 34
  236. JUNGLEGREEN, //59, 176, 143
  237. YELLOWGREEN, //197, 227, 132
  238. GREEN, //0, 200, 0
  239. AQUAMARINE, //120, 219, 226
  240. BABYBLUE, //135, 206, 235
  241. SKYBLUE, //128, 218, 235
  242. BLUE, //0, 0, 200
  243. VIOLET, //146, 110, 174
  244. PINK, //255, 105, 180
  245. MAGENTA, //246, 100, 175
  246. MAHOGANY, //205, 74, 76
  247. TAN, //250, 167, 108
  248. LIGHTBROWN, //234, 126, 93
  249. BROWN, //180, 103, 77
  250. GRAY, //149, 145, 140
  251. BLACK, //0, 0, 0
  252. WHITE, //255, 255, 255
  253. RAINBOW,
  254. TEXTURED,
  255. DISCO
  256. }
  257. new g_pColor[33] = RED
  258. new g_pColorHolder[33] = RED
  259. new g_pColorChk[33] = 0
  260.  
  261. new Float:g_maxs[3] = {-4800.0,-4800.0,-4800.0}
  262. new Float:g_mins[3] = {4800.0,4800.0,4800.0}
  263. new I_max[3]
  264. new I_min[3]
  265.  
  266. // CS Weapon CBase Offsets (win32)
  267. const OFFSET_WEAPONOWNER = 41
  268.  
  269. // Linux diff's
  270. const OFFSET_LINUX_WEAPONS = 4
  271.  
  272. new gmsgStatusText, gmsgSayText, gmsgScreenFade, gmsgScreenShake
  273. new gHudSyncInfo
  274. new g_MaxPlayers
  275. const fPainShock = 108
  276.  
  277. new bool:g_CanBuild
  278. new bool:g_ZombiesReleased
  279. new g_RoundNum
  280. new g_iEntBarrier
  281. new Float: g_fBarrierOrigin[3]
  282. new bool:g_BuildBan[33]
  283. new g_pEnt[33], Float:g_pDist[33]
  284. new Float:g_pOffset[33][3]
  285. //new Float:g_pRotation[MAXENTS][3]
  286. new bool:g_MovingEnt[MAXENTS]
  287. new g_EntMover[MAXENTS]
  288. new g_LastMover[MAXENTS]
  289. new g_EntOwner[MAXENTS]
  290. new bool:g_InvisEnt[MAXENTS]
  291. //new Float:fEntOrigin[MAXENTS][3] //Buggy on a few maps :(
  292. new bool:g_Touching[MAXENTS]
  293. new g_OwnedEnts[33]
  294. new g_pThirdPerson[33]
  295. new bool:g_pChance[33]
  296. new CsTeams:g_pTeam[33], CsTeams:g_pCurTeam[33]
  297. new Float:g_ReleaseTime
  298. new bool:g_pWinCredits[33]
  299. new bool:g_FirstSpawn[33]
  300. new count_down
  301.  
  302. //Custom Model Stuff
  303. new Float:g_ModelsTargetTime, Float:g_RoundStartTime
  304. new g_HasCustomModel[33], g_PlayerModel[33][32]
  305.  
  306. new g_ModName[32]
  307. new g_CurrentWeapon[33]
  308. new g_PrimaryWeapon[33]
  309.  
  310. // Allowed weapons for zombies
  311. const ZOMBIE_ALLOWED_WEAPONS_BITSUM = (1<<CSW_KNIFE)//|(1<<CSW_FLASHBANG)//|(1<<CSW_HEGRENADE)
  312.  
  313. new g_pcvar_buildtime, g_pcvar_zombiehp, g_pcvar_maxrounds, g_pcvar_basecalc, g_pcvar_resetent,
  314. g_pcvar_givenades, g_pcvar_showmovers, g_pcvar_xpmult, g_pcvar_knockback,
  315. g_pcvar_entmindist, g_pcvar_entsetdist, g_pcvar_entmaxdist, /*g_pcvar_maxclaimable,*/
  316. g_pcvar_claimable, g_pcvar_discount, g_pcvar_chance, g_pcvar_newplayer,// g_pcvar_entminoffset,
  317. /*g_pcvar_headless,*/ g_pcvar_zombiexp, g_pcvar_xprate
  318.  
  319. new g_BuildTime, g_ZombieHP, g_BaseCalc, g_ResetEnt, g_ShowMovers, g_XPMult, g_KnockBack, Float: g_EntMinDist,
  320. Float: g_EntSetDist, Float: g_EntMaxDist, /*g_MaxClaimable,*/ g_Claimable, Float: g_Discount, g_Chance, g_NewPlayer,
  321. /*g_HeadlessCVAR, */g_ZombieXP, Float: g_XPRate
  322.  
  323. new g_pcvar_roundtime, Float:g_SurviveTime
  324.  
  325. new g_Vault
  326. new g_pcvar_unhpcost, g_pcvar_unapcost, g_pcvar_ungrcost, g_pcvar_unincost, g_pcvar_unspcost
  327. new g_pcvar_unhpmult, g_pcvar_unapmult, g_pcvar_ungrmult, g_pcvar_uninmult, g_pcvar_unspmult
  328. new g_pcvar_idmg1cost, g_pcvar_idmg2cost, g_pcvar_ireccost, g_pcvar_iregcost, g_pcvar_irelcost,
  329. g_pcvar_ihelcost, g_pcvar_isticost, g_pcvar_iconcost, g_pcvar_ishicost, g_pcvar_iomacost
  330. new g_pcvar_timesti, g_pcvar_timeoma
  331. new g_pHPCost[33], g_pAPCost[33], g_pGRCost[33], g_pINCost[33], g_pSPCost[33]
  332. new bool:g_isconcussioned[33]
  333.  
  334. //Achievements
  335. new numofachieve[33]
  336. new g_PlayerAchievements[33][MAX_ACHIEVEMENTS]
  337. new zombiekills[33], humankills[33], objectsmoved[33], headshots[33], connects[33], killedby[33], clubdread[33],
  338. Float: totaldamage[33], pistolonly[33], invisibleman[33], weaponsbought[33], hasplayed[33]
  339. new credits[33], g_unHPLevel[33], g_unAPLevel[33], g_unGRLevel[33], g_unINLevel[33], g_unSPLevel[33]
  340. new bool:has_used_pistol[33]
  341.  
  342. //Item Stuff
  343. const NOCLIP_WPN_BS = ((1<<2)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
  344. const SHOTGUNS_BS = ((1<<CSW_M3)|(1<<CSW_XM1014))
  345.  
  346. // weapons offsets
  347. const m_pPlayer = 41
  348. const m_iId = 43
  349. const m_flNextPrimaryAttack = 46
  350. const m_flNextSecondaryAttack = 47
  351. const m_flTimeWeaponIdle = 48
  352. const m_iPrimaryAmmoType = 49
  353. const m_iClip = 51
  354. const m_fInReload = 54
  355.  
  356. const m_flNextAttack = 83
  357. const m_pActiveItem = 373
  358. const m_rgAmmo_Slot0 = 376
  359.  
  360. stock const Float:g_fDelay[CSW_P90+1] = {
  361. 0.00, 2.70, 0.00, 2.00, 0.00, 0.55, 0.00, 3.15, 3.30, 0.00, 4.50,
  362. 2.70, 3.50, 3.35, 2.45, 3.30, 2.70, 2.20, 2.50, 2.63, 4.70,
  363. 0.55, 3.05, 2.12, 3.50, 0.00, 2.20, 3.00, 2.45, 0.00, 3.40
  364. }
  365.  
  366. stock const g_iReloadAnims[CSW_P90+1] = {
  367. -1, 5, -1, 3, -1, 6, -1, 1, 1, -1, 14,
  368. 4, 2, 3, 1, 1, 13, 7, 4, 1, 3,
  369. 6, 11, 1, 3, -1, 4, 1, 1, -1, 1}
  370.  
  371. stock const g_iDftMaxClip[CSW_P90+1] = {
  372. -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30,
  373. 20, 25, 30, 35, 25, 12, 20, 10, 30, 100,
  374. 8 , 30, 30, 20, 2, 7, 30, 30, -1, 50}
  375.  
  376. //Guns menu
  377. new g_galil[33],g_aug[33],g_m4a1[33],g_famas[33],g_ak47[33],
  378. g_tmp[33],g_mp5[33],g_ump[33],g_p90[33],
  379. g_m3[33],g_xm1014[33],g_scout[33],g_awp[33],g_para[33],
  380. g_p228[33],g_five[33],g_elite[33],g_glock[33],g_deagle[33]
  381.  
  382. new g_itemsbought[33], bool:g_item_dmg[33], bool:g_item_gdmg[33], bool:g_item_rec[33], bool:g_item_reg[33],
  383. bool:g_item_rel[33], bool:g_item_hel[33], bool:g_item_sti[33], bool:g_item_shi[33], bool:g_item_oma[33]
  384. new Float:MaxHP[33]
  385. new Float:cl_pushangle[33][3]
  386.  
  387. new g_AuthID[33][35]
  388.  
  389. new g_friend[33]
  390.  
  391. //Cached Stuff for Players
  392. new g_isconnected[33]
  393. new g_isalive[33]
  394. new g_isbot[33]
  395. new g_iszombie[33]
  396.  
  397. //CSDM-Style Weapons Menu
  398. new bool:firsttime[33]
  399. new weapon_picked[2][33]
  400.  
  401. #define ADMIN_CLOCK ADMIN_MENU
  402. #define MAIN_MENU_KEYS (1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<9)
  403. #define WPN_METH_KEYS (1<<0)|(1<<1)
  404. #define WPN_PRI1 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9)
  405. #define WPN_PRI2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)|(1<<9)
  406. #define WPN_PRI3 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)
  407. #define WPN_SEC (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
  408. #define UPGRADES_KEYS (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<9)
  409. #define UN_MAIN (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<9)
  410. #define UN_PRI1 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)|(1<<9)
  411. #define UN_PRI2 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<8)|(1<<9)
  412. #define UN_PRI3 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)|(1<<9)
  413. #define UN_SEC (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)|(1<<9)
  414. #define IT_MAIN (1<<0)|(1<<1)|(1<<2)|(1<<9)
  415. #define IT_MOD (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<8)|(1<<9)
  416. #define IT_ITE (1<<0)|(1<<1)|(1<<2)|(1<<8)|(1<<9)
  417. #define IT_BUFF (1<<0)|(1<<1)|(1<<8)|(1<<9)
  418.  
  419. enum { N1, N2, N3, N4, N5, N6, N7, N8, N9, N0 };
  420. new const X = 0;
  421. new const Y = 1;
  422. new const Z = 2; //for some reason I got tag mismatch on Z when using an enum
  423.  
  424. new gszMainMenuText[256];
  425. new const gszClockFaces[] = "sprites/build_clock.spr";
  426. new const gszClockDigits[] = "sprites/build_digits.spr";
  427. new const gszPrefix[] = "[ Build Time ] ";
  428. new const gszInfoTarget[] = "info_target";
  429. new const gszClockClassname[] = "cm_clock";
  430. new const gszClockDigitClassname[] = "cm_clockdigit";
  431. new const Float:gfDigitOffsetMultipliers[4] = {0.725, 0.275, 0.3, 0.75};
  432. new const Float:gfClockSize[2] = {80.0, 32.0};
  433. new const Float:gfTitleSize = 16.0;
  434.  
  435. new gszTime[5];
  436. new gszFile[128];
  437. new gTimeOffsetOld;
  438. new gHourTypeOld;
  439.  
  440. const gClockTypesMax = 2;
  441.  
  442. enum
  443. {
  444. CM_SERVERTIME,
  445. CM_BUILDTIMELEFT
  446. };
  447.  
  448. new gClockSaveIds[gClockTypesMax] =
  449. {
  450. 'C', 'T'
  451. };
  452.  
  453. new const ACHIEVEMENTS[MAX_ACHIEVEMENTS][2][]=
  454. {
  455. { "","Zombie Genocidist"}, // Kills as a human
  456. { "","Hmm... Tasty"}, // Kills as a zombie
  457. { "","Base Builder"}, // Total # objects moved
  458. { "","Cr0wned"}, // Total # objects moved
  459. { "","One inch at a time"}, // Total # of connections
  460. { "","Infected"}, // Killed by person with this
  461. { "","Guns are for girls"}, // Kill a zombie with a knife
  462. { "","Dead Wreckening"}, // Deal out 1000 damage as a zombie
  463. { "","Hitman"}, // Survive a round /w only pistols
  464. { "","I see you!"}, // Kill an invisible man
  465. { "","Rambo"}, // Unlock the M249-SAW
  466. { "","War Machine"}, // Unlock all of the guns in the game
  467. { "","Arms Dealer"}, // Unlock half of the guns in the game
  468. { "","Break the Bank"}, // Accumulate 5000 credits without spending any
  469. { "","Achievement Hunter"}, // Unlock all of the achievements in the game
  470. { "","Juggernaut"}, // Upgrade to the max health level
  471. { "","Solid Steel"}, // Upgrade to the max armor level
  472. { "","Zero Gravity"}, // Upgrade to the max gravity level
  473. { "","The Invisible Man"}, // Upgrade to the max invisibility level
  474. { "","Underground Trader"}, // Purchase 10 items from the Black Market
  475. { "","Speed Demon"} // Upgrade to the max speed level
  476. }
  477.  
  478. // Weapon entity names
  479. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  480. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  481. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  482. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  483. "weapon_ak47", "weapon_knife", "weapon_p90" }
  484.  
  485. public plugin_init()
  486. {
  487. //Client Commands
  488. register_clcmd("+grab","cmdMoveEnt") //command to move stuff around
  489. register_clcmd("-grab","cmdStopEnt") //command to move stuff around
  490.  
  491. register_clcmd("say", "cmdSay",0, "<target> ")
  492. register_clcmd("say_team", "cmdSay",0, "<target> ")
  493.  
  494. //Admin Commands
  495. register_concmd("removeaim","cmdRemoveEnt",0," - Deletes an object") //Removes an object (C alive, D dead)
  496. register_concmd("lockaim","cmdLockBlock",0," - Locks/Unlocks an object form moving")
  497. register_concmd("unclaimaim","cmdRemoveClaim",0," - Removes a claim on an object") //Makes block claimable by everyone
  498. register_concmd("resetaim","cmdResetAim",0," - Resets an object")
  499.  
  500. register_concmd("bb_addcredits","cmdGiveCredits",0," <name or #userid> <credits>")
  501. register_concmd("bb_infectme", "cmdInfectMe",0, "Infects you!")
  502. register_concmd("bb_addach", "cmdAddAchievement",0, "<player> <achievement#> <level#>")
  503. register_concmd("bb_buildban","cmdBuildBan",0,"<player>") //Bans targeted player from building
  504. register_concmd("bb_unbuildban","cmdBuildUnban",0,"<player>") //Unbans " " " "
  505. register_concmd("bb_revive","cmdRevive",0,"<player>")
  506. register_concmd("bb_guns","cmdGiveGuns",0,"<player>") //revives targetted player
  507. register_concmd("bb_swap","cmdSwap",0,"<player>") //swaps the selected player to the opposite team
  508. register_concmd("bb_resetstats","cmdReset",0,"<player>") //swaps the selected player to the opposite team
  509. register_concmd("bb_startround","cmdStartRound",0," - Ends the build phase") //do i really have to explain this?
  510. register_concmd("bb_reset","cmdResetEnts",0," - Resets all entities")
  511. register_concmd("bb_clear","cmdClearEnts",0," - Deleted all unused entities")
  512. register_concmd("bb_cheat","cmdShield",0,"- ????")
  513.  
  514. //Blocked Commands
  515. //register_clcmd("drop", "clcmd_drop")
  516. register_clcmd("buy", "clcmd_buy")
  517.  
  518. register_forward(FM_GetGameDescription, "fw_GetGameDescription")
  519. register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
  520. register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
  521. register_forward(FM_PlayerPreThink, "fw_Player_PreThink")
  522. register_forward(FM_ClientKill, "fw_Suicide")
  523. if (get_pcvar_num(g_pcvar_showmovers) == 1)
  524. register_forward(FM_TraceLine, "fw_Traceline")
  525.  
  526. RegisterHam(Ham_Touch, "weapon_shield", "ham_WeaponCleaner_Post", 1)
  527. RegisterHam(Ham_Touch, "weaponbox", "ham_WeaponCleaner_Post", 1)
  528. RegisterHam(Ham_Touch, "func_wall", "ham_TouchWall_Post", 1)
  529. RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
  530. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  531. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "ham_ItemDeploy_Post", 1)
  532. RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage")
  533. RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_Post", 1)
  534. new szWeapon[20];
  535. for (new i=CSW_P228;i<=CSW_P90;i++)
  536. {
  537. if(!(NO_RECOIL_WEAPONS_BITSUM & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)))
  538. {
  539. RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_PrimaryAttack")
  540. RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_PrimaryAttack_Post",1)
  541. }
  542. if( !(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)) )
  543. {
  544. if( !(SHOTGUNS_BS & (1<<i)) )
  545. {
  546. // RegisterHam(Ham_Weapon_Reload, szWeapon, "Weapon_Reload_Pre")
  547. RegisterHam(Ham_Weapon_Reload, szWeapon, "fw_Reload_Post", 1)
  548. }
  549. }
  550. }
  551.  
  552. register_message(get_user_msgid("TextMsg"), "msgRoundEnd")
  553. register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
  554. register_message(get_user_msgid("StatusValue"), "msgStatusValue");
  555. register_message(get_user_msgid("Health"), "msgHealth");
  556.  
  557. register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  558. register_event("AmmoX", "ev_AmmoX", "be", "1=1", "1=2", "1=3", "1=4", "1=5", "1=6", "1=7", "1=8", "1=9", "1=10")
  559. register_event("StatusValue", "ev_SetTeam", "be", "1=1");
  560. register_event("StatusValue", "ev_ShowStatus", "be", "1=2", "2!0");
  561. register_event("StatusValue", "ev_HideStatus", "be", "1=1", "2=0");
  562. register_event("Health", "ev_Health", "be", "1>0");
  563. register_event("ScreenFade","ev_Flash","b","4=255","5=255","6=255","7>199")
  564. register_event("CurWeapon" , "ev_CurWeapon" , "be" , "1=1");
  565.  
  566. register_logevent("logevent_round_start",2, "1=Round_Start")
  567. register_logevent("logevent_round_end", 2, "1=Round_End")
  568.  
  569. register_menucmd(register_menuid("WeaponMethodMenu"),WPN_METH_KEYS,"weapon_method_pushed")
  570. register_menucmd(register_menuid("PrimaryWeaponSelect1"),WPN_PRI1,"prim_ass_pushed")
  571. register_menucmd(register_menuid("PrimaryWeaponSelect2"),WPN_PRI2,"prim_smg_pushed")
  572. register_menucmd(register_menuid("PrimaryWeaponSelect3"),WPN_PRI3,"prim_oth_pushed")
  573. register_menucmd(register_menuid("SecWeaponSelect"),WPN_SEC,"sec_weapons_pushed")
  574. register_menucmd(register_menuid("UpgradesMenuMain"),UPGRADES_KEYS,"upgrades_menu_pressed")
  575. register_menucmd(register_menuid("UnlocksMenuMain"),UN_MAIN,"unlocks_menu_pressed")
  576. register_menucmd(register_menuid("UnlocksMenuAss"),UN_PRI1,"un_ass_pushed")
  577. register_menucmd(register_menuid("UnlocksMenuSub"),UN_PRI2,"un_smg_pushed")
  578. register_menucmd(register_menuid("UnlocksMenuOther"),UN_PRI3,"un_oth_pushed")
  579. register_menucmd(register_menuid("UnlocksMenuSec"),UN_SEC,"un_sec_pushed")
  580. register_menucmd(register_menuid("MarketMenuMain"),IT_MAIN,"market_menu_pressed")
  581. register_menucmd(register_menuid("ItemsMenuMain"),IT_MAIN,"market_menu_pressed")
  582. register_menucmd(register_menuid("ItemsMenuMod"),IT_MOD,"modifiers_menu_pressed")
  583. register_menucmd(register_menuid("ItemsMenuItems"),IT_ITE,"items_menu_pressed")
  584. register_menucmd(register_menuid("ItemsMenuBuffs"),IT_BUFF,"buffs_menu_pressed")
  585. register_menucmd(register_menuid("clockMainMenu"), MAIN_MENU_KEYS, "handleMainMenu");
  586. register_menucmd(register_menuid("ColorsSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"colors_pushed")
  587.  
  588. set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  589.  
  590. //Formats the Mod Name
  591. formatex(g_ModName, charsmax(g_ModName), "Base Builder %s", VERSION)
  592.  
  593. register_dictionary("credits.txt");
  594. register_dictionary("basebuilder.txt");
  595.  
  596. gmsgSayText = get_user_msgid("SayText")
  597. gmsgStatusText = get_user_msgid("StatusText");
  598. gmsgScreenFade = get_user_msgid("ScreenFade");
  599. gmsgScreenShake = get_user_msgid ("ScreenShake")
  600. gHudSyncInfo = CreateHudSyncObj();
  601. g_MaxPlayers = get_maxplayers();
  602.  
  603. //server_cmd("sv_skyname dust")
  604. server_cmd("mp_freezetime 0")
  605. server_cmd("mp_flashlight 0")
  606.  
  607. register_clcmd("chooseteam", "clcmd_changeteam")
  608. register_clcmd("jointeam", "clcmd_changeteam")
  609. register_message(get_user_msgid("ShowMenu"), "message_show_menu")
  610. register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
  611. server_cmd("mp_limitteams 1")
  612. server_cmd("mp_autoteambalance 1")
  613.  
  614. g_iEntBarrier = find_ent_by_tname( -1, "barrier" );
  615. new Float:mins[3], Float:maxs[3]
  616. entity_get_vector(g_iEntBarrier, EV_VEC_mins, mins);
  617. entity_get_vector(g_iEntBarrier, EV_VEC_maxs, maxs);
  618. g_fBarrierOrigin[0] = (mins[0] + maxs[0]) / 2.0
  619. g_fBarrierOrigin[1] = (mins[1] + maxs[1]) / 2.0
  620. g_fBarrierOrigin[2] = (mins[2] + maxs[2]) / 2.0
  621.  
  622. if (get_pcvar_num(g_pcvar_chance))
  623. set_task(90.0, "MSG_Chance",_, _, _, "b")
  624. set_task(1.5,"Task_HPRegenLoop",_,_,_,"b")
  625.  
  626. find_minmaxs()
  627. }
  628.  
  629. public plugin_precache()
  630. {
  631. register_plugin("Base Builder Zombie Mod", VERSION, "Collin ^"Tirant^" Smith")
  632. register_cvar("base_builder", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
  633. set_cvar_string("base_builder", VERSION)
  634.  
  635. //Basic mod functions/timers
  636. g_pcvar_buildtime = register_cvar("bb_build_time", "150")
  637. g_BuildTime = get_pcvar_num(g_pcvar_buildtime)
  638. g_pcvar_zombiehp = register_cvar("bb_zombie_health", "2000")
  639. g_ZombieHP = get_pcvar_num(g_pcvar_zombiehp)
  640. g_pcvar_basecalc = register_cvar("bb_calc_maxbase", "0")
  641. g_BaseCalc = get_pcvar_num(g_pcvar_basecalc)
  642. g_pcvar_showmovers = register_cvar("bb_show_moving", "1")
  643. g_ShowMovers = get_pcvar_num(g_pcvar_showmovers)
  644. g_pcvar_knockback = register_cvar("bb_pain_shock_free", "0")
  645. g_KnockBack = get_pcvar_num(g_pcvar_knockback)
  646. g_pcvar_entmaxdist = register_cvar("bb_max_move_dist", "960")
  647. g_EntMaxDist = get_pcvar_float(g_pcvar_entmaxdist)
  648. g_pcvar_entmindist = register_cvar("bb_min_move_dist", "25")
  649. g_EntMinDist = get_pcvar_float(g_pcvar_entmindist)
  650. g_pcvar_entsetdist = register_cvar("bb_min_dist_set", "50")
  651. g_EntSetDist = get_pcvar_float(g_pcvar_entsetdist)
  652. g_pcvar_xpmult = register_cvar("bb_xp_multiplier", "1")
  653. g_XPMult = get_pcvar_num(g_pcvar_xpmult)
  654. g_pcvar_resetent = register_cvar("bb_reset_blocks", "1")
  655. g_ResetEnt = get_pcvar_num(g_pcvar_resetent)
  656. //g_pcvar_maxclaimable = register_cvar("bb_claim_max", "5")
  657. //g_MaxClaimable = get_pcvar_num(g_pcvar_maxclaimable)
  658. g_pcvar_claimable = register_cvar("bb_claim_mode", "1")
  659. g_Claimable = get_pcvar_num(g_pcvar_claimable)
  660.  
  661. g_pcvar_chance = register_cvar("bb_chance", "10")
  662. g_Chance = get_pcvar_num(g_pcvar_chance)
  663. g_pcvar_newplayer = register_cvar("bb_new_player_credits", "100")
  664. g_NewPlayer = get_pcvar_num(g_pcvar_newplayer)
  665. //g_pcvar_headless = register_cvar("bb_headless", "13")
  666. //g_HeadlessCVAR = get_pcvar_num(g_pcvar_headless)
  667. g_pcvar_zombiexp = register_cvar("bb_zombie_xp", "2")
  668. g_ZombieXP = get_pcvar_num(g_pcvar_zombiexp)
  669. g_pcvar_xprate = register_cvar("bb_reward_rate", "0.1")
  670. g_XPRate = get_pcvar_float(g_pcvar_xprate)
  671.  
  672. //Credits
  673. g_pcvar_discount = register_cvar("bb_member_discount", "0.5")
  674. g_Discount = get_pcvar_float(g_pcvar_discount)
  675.  
  676. g_pcvar_unhpcost = register_cvar("bb_un_cost_hp", "25")
  677. g_pcvar_unapcost = register_cvar("bb_un_cost_dmgred", "15")
  678. g_pcvar_ungrcost = register_cvar("bb_un_cost_gravity", "20")
  679. g_pcvar_unincost = register_cvar("bb_un_cost_invis", "10")
  680. g_pcvar_unspcost = register_cvar("bb_un_cost_speed", "20")
  681.  
  682. g_pcvar_unhpmult = register_cvar("bb_un_mult_hp", "5")
  683. g_pcvar_unapmult = register_cvar("bb_un_mult_ap", "10")
  684. g_pcvar_ungrmult = register_cvar("bb_un_mult_gr", "10")
  685. g_pcvar_uninmult = register_cvar("bb_un_mult_in", "7")
  686. g_pcvar_unspmult = register_cvar("bb_un_mult_sp", "9")
  687.  
  688. g_pcvar_idmg1cost = register_cvar("bb_cost_dmg", "20")
  689. g_pcvar_idmg2cost = register_cvar("bb_cost_gdmg", "40")
  690. g_pcvar_ireccost = register_cvar("bb_cost_recoil", "50")
  691. g_pcvar_iregcost = register_cvar("bb_cost_regen", "30")
  692. g_pcvar_irelcost = register_cvar("bb_cost_reload", "50")
  693.  
  694. g_pcvar_ihelcost = register_cvar("bb_cost_helmet", "25")
  695. g_pcvar_iconcost = register_cvar("bb_cost_concussion", "35")
  696. g_pcvar_ishicost = register_cvar("bb_cost_shield", "250")
  697.  
  698. g_pcvar_isticost = register_cvar("bb_cost_stimpack", "75")
  699. g_pcvar_timesti = register_cvar("bb_time_stimpack", "5")
  700. g_pcvar_iomacost = register_cvar("bb_cost_noreloads", "75")
  701. g_pcvar_timeoma = register_cvar("bb_time_noreloads", "10")
  702.  
  703. //Guns Menu
  704. g_pcvar_givenades = register_cvar("bb_give_nades","h") //h f s, put multiple letters for multiple nades
  705.  
  706. register_cvar("cm_hourtype", "0"); //0: 12 hour, 1: 24 hour
  707. register_cvar("cm_hourannounce", "1"); //say the hour on the hour
  708. register_cvar("cm_timeoffset", "-7"); //offset the time to a different timezone +/- hours
  709.  
  710. g_pcvar_roundtime = get_cvar_pointer("mp_roundtime")
  711. new Float:g_RoundTime = get_pcvar_float(g_pcvar_roundtime)*60.0
  712. g_SurviveTime = g_RoundTime-float(g_BuildTime)
  713.  
  714. engfunc(EngFunc_PrecacheSound, g_RoundStart)
  715. engfunc(EngFunc_PrecacheSound, g_RoundStart2)
  716. engfunc(EngFunc_PrecacheSound, g_JoinServer)
  717. engfunc(EngFunc_PrecacheSound, g_ZombKill1)
  718. engfunc(EngFunc_PrecacheSound, g_Concussion)
  719.  
  720. engfunc(EngFunc_PrecacheSound, g_AchivementEarned)
  721. engfunc(EngFunc_PrecacheSound, g_UpgradeMenuBuy)
  722. engfunc(EngFunc_PrecacheSound, g_UnlockMenuBuy)
  723. engfunc(EngFunc_PrecacheSound, g_ItemMenuBuy)
  724. //engfunc(EngFunc_PrecacheSound, g_InvalidMenuBuy)
  725. engfunc(EngFunc_PrecacheSound, g_ResetAchievements)
  726.  
  727. engfunc(EngFunc_PrecacheSound, g_WinZomb)
  728. engfunc(EngFunc_PrecacheSound, g_WinHum)
  729.  
  730. new szModel[64];
  731. formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel1, g_ZombieModel1 );
  732. engfunc(EngFunc_PrecacheModel, szModel)
  733. formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel2, g_ZombieModel2 );
  734. engfunc(EngFunc_PrecacheModel, szModel)
  735. formatex(szModel, charsmax(szModel), "models/player/%s/%s.mdl", g_ZombieModel3, g_ZombieModel3 );
  736. engfunc(EngFunc_PrecacheModel, szModel)
  737.  
  738. precache_model(ShieldView)
  739. precache_model(ShieldPlayer)
  740.  
  741. precache_model("models/rpgrocket.mdl")
  742.  
  743. engfunc(EngFunc_PrecacheModel, gszClockFaces)
  744. engfunc(EngFunc_PrecacheModel, gszClockDigits)
  745.  
  746. new iBomb = create_entity("info_bomb_target");
  747. entity_set_origin(iBomb, Float:{8192.0,8192.0,8192.0})
  748.  
  749. new iBuyZone = create_entity("info_map_parameters");
  750. DispatchKeyValue(iBuyZone, "buying", "3");
  751. DispatchSpawn(iBuyZone);
  752.  
  753. g_pcvar_maxrounds = get_cvar_num("mp_maxrounds")
  754. }
  755.  
  756. public MSG_Chance()
  757. {
  758. print_color(0, "%s ^x04%L", formatmodname, LANG_SERVER, "CR_CHANCE_AD", g_Chance)
  759. }
  760.  
  761. public cmdInfectMe(id)
  762. {
  763. if (access(id, INFECT))
  764. killedby[id]=1
  765. }
  766.  
  767. // Event Round Start (This is before freeze time)
  768. public event_round_start()
  769. {
  770. arrayset(g_MovingEnt, false, MAXENTS)
  771. arrayset(g_EntOwner, 0, MAXENTS)
  772. arrayset(g_LastMover, 0, MAXENTS)
  773. arrayset(g_Touching, false, MAXENTS)
  774. arrayset(has_used_pistol, true, 33)
  775. arrayset(g_OwnedEnts, 0, 33)
  776. arrayset(g_pChance, false, 33)
  777. arrayset(g_pWinCredits, false, 33)
  778.  
  779. g_CanBuild = true
  780. g_RoundStartTime = get_gametime()
  781. g_ZombiesReleased = false
  782.  
  783. if (g_ResetEnt == 1)
  784. {
  785. new cname[10], tname[7];
  786. for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  787. {
  788. if (is_valid_ent(iEnt))
  789. {
  790. entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  791. entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  792. if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore"))
  793. {
  794. if (g_InvisEnt[iEnt])
  795. set_entity_visibility(iEnt, 1)
  796. /*if (g_InvisEnt[iEnt])
  797. {
  798. set_pev(iEnt,pev_solid,SOLID_BSP)
  799. set_pev(iEnt,pev_renderamt,Float:{255.0})
  800. set_pev(iEnt,pev_rendermode,0)
  801. g_InvisEnt[iEnt] = false
  802. }*/
  803. engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
  804. }
  805. }
  806. }
  807. }
  808. }
  809.  
  810. // Log Event Round Start (This is AFTER freeze time)
  811. public logevent_round_start()
  812. {
  813. set_pev(g_iEntBarrier,pev_solid,SOLID_BSP)
  814. set_pev(g_iEntBarrier,pev_rendermode,kRenderTransColor)
  815. set_pev(g_iEntBarrier,pev_renderamt,Float:{150.0})
  816.  
  817. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  818. new nLen, szMsg[128]
  819. nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  820. nLen += format( szMsg[nLen], 127-nLen, "%L", LANG_SERVER, "BIND_KEY");
  821. show_hudmessage(0, szMsg);
  822.  
  823. print_color(0, "%s^x03 %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "ROUND_MSG")
  824. print_color(0, "%s^x03 %s ^x04- ^x01%L", formatmodname, VERSION, LANG_SERVER, "CR_ROUND_MSG")
  825. print_color(0, "%s^x03 Round:^x04 %d^x01 of^x04 %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  826.  
  827. remove_task(BUILD_TASK)
  828.  
  829. set_task(1.0, "CountDown", BUILD_TASK,_, _, "a", g_BuildTime);
  830. count_down = (g_BuildTime-1);
  831.  
  832. if (g_BaseCalc == 1)
  833. set_task(5.0, "Base_Calc")
  834. }
  835.  
  836. public CountDown()
  837. {
  838. count_down--
  839. new mins = count_down/60
  840. new secs = count_down%60
  841. if (count_down>=0)
  842. {
  843. client_print(0, print_center, "Build Time - %d:%s%d", mins, (secs < 10 ? "0" : ""), secs)
  844.  
  845. new clock = -1;
  846.  
  847. new timeleftDigits[4];
  848. getTimeDigits(CM_BUILDTIMELEFT, timeleftDigits);
  849.  
  850. while ((clock = find_ent_by_class(clock, gszClockClassname)))
  851. {
  852. new clockType = entity_get_int(clock, EV_INT_groupinfo);
  853.  
  854. if (clockType == CM_BUILDTIMELEFT)
  855. {
  856. set_clock_digits(clock, timeleftDigits);
  857. }
  858. }
  859. }
  860.  
  861. if ((mins == 1 || mins == 2) && secs == 0)
  862. {
  863. new mmin[32]
  864. num_to_word(mins, mmin, 31)
  865.  
  866. client_cmd(0, "spk ^"fvox/%s minutes remaining^"", mmin)
  867. }
  868. if ((mins == 0) && secs == 30)
  869. {
  870. new msec[32]
  871. num_to_word(secs, msec, 31)
  872.  
  873. client_cmd(0, "spk ^"fvox/%s seconds remaining^"", msec)
  874. }
  875. if (0<count_down<=10)
  876. {
  877. new msec[32]
  878. num_to_word(count_down, msec, 31)
  879.  
  880. client_cmd(0, "spk ^"fvox/%s^"", msec)
  881. }
  882.  
  883. if (count_down == 0)
  884. {
  885. Release_Zombies()
  886. remove_task(BUILD_TASK);
  887. }
  888. }
  889.  
  890. public logevent_round_end()
  891. {
  892. if (!g_CanBuild)
  893. {
  894. new Float:time = (get_gametime() - g_ReleaseTime)
  895. new reward = floatround(time*g_XPRate)
  896.  
  897. new players[32], num, player
  898. get_players(players, num, "a")
  899. for (new i = 0; i < num; i++)
  900. {
  901. player = players[i]
  902.  
  903. if (g_pCurTeam[player] == CS_TEAM_CT && !g_pChance[player] && !g_pWinCredits[player])
  904. {
  905. print_color(player, "%s %L", formatmodname, LANG_SERVER, "CR_REWARD_CT", reward, time)
  906. credits[player]+=reward
  907. }
  908. }
  909.  
  910. get_players(players, num)
  911. for (new i = 0; i < num; i++)
  912. {
  913. player = players[i]
  914.  
  915. if (g_pCurTeam[player] == g_pTeam[player])
  916. cs_set_user_team(player, (g_pTeam[player] = (g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T)))
  917. else
  918. g_pTeam[player] = g_pTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T
  919. }
  920. print_color(0, "^x04%L", LANG_SERVER, "TEAMS_SWAPPED")
  921. }
  922.  
  923. remove_task(BUILD_TASK)
  924.  
  925. return PLUGIN_HANDLED
  926. }
  927.  
  928. public client_death(g_attacker, g_victim, wpnindex, hitplace, TK)
  929. {
  930. if (g_pEnt[g_victim])
  931. cmdStopEnt(g_victim)
  932.  
  933. set_hudmessage(_, _, _, _, _, _, _, _, _, _, 4);
  934. show_hudmessage(g_victim, "");
  935. remove_task(g_victim+CHANCE_TASK)
  936.  
  937. g_isalive[g_victim] = false
  938. g_item_shi[g_victim] = false
  939. g_item_oma[g_victim] = false
  940.  
  941. if (TK == 0 && g_attacker != g_victim)
  942. {
  943. if (!g_isalive[g_victim] && g_iszombie[g_victim] && !g_iszombie[g_attacker]) credits[g_victim]+=1
  944. if (!g_iszombie[g_attacker])
  945. {
  946. zombiekills[g_attacker]++
  947. credits[g_attacker]+=(g_ZombieXP*g_XPMult)
  948. if (wpnindex == CSW_KNIFE)
  949. clubdread[g_attacker]++
  950. if (g_unINLevel[g_victim]>19)
  951. invisibleman[g_attacker]++
  952. }
  953. if (g_iszombie[g_attacker])
  954. {
  955. client_cmd(0, "spk %s", g_ZombKill1)
  956. new playername[35]
  957. get_user_name(g_victim, playername, 34)
  958. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1)
  959. show_hudmessage(0, "%L",LANG_SERVER, "DEAD_ANNOUNCE", playername);
  960. humankills[g_attacker]++
  961. //credits[g_attacker]+=(get_pcvar_num(g_pcvar_humanxp)*g_XPMult)
  962.  
  963. new reward
  964. if (!g_pChance[g_victim])
  965. {
  966. new Float:time = (get_gametime() - g_ReleaseTime)
  967. reward = floatround(time*g_XPRate)
  968. print_color(g_victim, "%s %L", formatmodname, LANG_SERVER, "CR_REWARD_CT", reward)
  969. reward*=2
  970. credits[g_victim]+=reward
  971. g_pWinCredits[g_victim] = true
  972. }
  973.  
  974. new Float:time = (g_SurviveTime - (get_gametime() - g_ReleaseTime))
  975. reward = floatround(time*g_XPRate)
  976. print_color(g_attacker, "%s %L", formatmodname, LANG_SERVER, "CR_REWARD_T", reward)
  977. reward/=2
  978. credits[g_attacker]+=reward
  979. }
  980. if (hitplace == 1)
  981. {
  982. headshots[g_attacker]++
  983. if (g_iszombie[g_attacker])
  984. credits[g_attacker]+=(4*g_XPMult)
  985. else
  986. credits[g_attacker]+=(1*g_XPMult)
  987. }
  988. if (killedby[g_attacker])
  989. killedby[g_victim]++
  990.  
  991. check_achievements(g_victim);
  992. check_achievements(g_attacker);
  993. check_banker(g_attacker)
  994. }
  995.  
  996. if (g_iszombie[g_victim])
  997. {
  998. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  999. show_hudmessage(g_victim, "%L", LANG_SERVER, "CR_DEAD_ZOMBIE");
  1000. set_task(2.0, "Respawn_Zombie", g_victim)
  1001. }
  1002. if (!g_iszombie[g_victim])
  1003. {
  1004. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  1005. show_hudmessage(g_victim, "%L", LANG_SERVER, "DEAD_SURVIVOR");
  1006. if (!g_pChance[g_victim]) print_color(g_victim, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_CT_DEAD", g_Chance)
  1007. cs_set_user_team(g_victim, CS_TEAM_T)
  1008. g_iszombie[g_victim] = true
  1009. set_task(5.0, "Respawn_Zombie", g_victim)
  1010. }
  1011. }
  1012.  
  1013. public ham_TakeDamage_Post(victim, inflictor, attacker, Float:damage, bits)
  1014. {
  1015. if(g_KnockBack == 1 && access(victim, PAIN_SHOCK_FREE) && g_iszombie[victim])
  1016. {
  1017. set_pdata_float(victim, fPainShock, 1.0, 5)
  1018. }
  1019. }
  1020.  
  1021.  
  1022. public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
  1023. {
  1024. if (!is_valid_ent(victim) || !is_valid_ent(attacker) || !g_isalive[victim] || !g_isconnected[attacker]) return HAM_IGNORED
  1025.  
  1026. if(g_CanBuild || victim == attacker || (g_iszombie[victim] && g_iszombie[attacker]) || g_isconcussioned[attacker])
  1027. return HAM_SUPERCEDE
  1028.  
  1029. if (g_iszombie[attacker] && !g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD])
  1030. {
  1031. totaldamage[attacker] += damage
  1032. if (totaldamage[attacker]>4999.0)
  1033. {
  1034. switch (g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD])
  1035. {
  1036. case LEVEL_NONE:
  1037. {
  1038. g_PlayerAchievements[attacker][ACHIEVE_CLUBDREAD]=LEVEL_I;
  1039. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  1040. show_hudmessage(attacker, "%s^nDeal out 5000 total damage as a zombie!^n+50 Credits", ACHIEVEMENTS[ACHIEVE_CLUBDREAD][LEVEL_I]);
  1041. credits[attacker]+=50
  1042. check_banker(attacker)
  1043. client_cmd(attacker, "spk %s", g_AchivementEarned);
  1044. SaveLevel(attacker)
  1045. }
  1046. }
  1047. }
  1048. }
  1049.  
  1050. if (g_item_dmg[attacker] && g_isalive[attacker])
  1051. {
  1052. if (g_item_gdmg[attacker])
  1053. damage*=1.25
  1054. else
  1055. damage*=1.1
  1056. }
  1057.  
  1058. SetHamParamFloat(4, damage)
  1059. return HAM_HANDLED
  1060. }
  1061.  
  1062. public client_damage(g_attacker, g_victim, damage, wpnindex, hitplace, TA)
  1063. {
  1064. if (!g_iszombie[g_attacker])
  1065. if (wpnindex != CSW_KNIFE || CSW_DEAGLE || CSW_ELITE || CSW_FIVESEVEN || CSW_GLOCK18 || CSW_P228 || CSW_USP || CSW_HEGRENADE)
  1066. has_used_pistol[g_attacker] = false
  1067. }
  1068.  
  1069. public fw_PrimaryAttack(ent)
  1070. {
  1071. new id = pev(ent,pev_owner)
  1072. if(g_item_rec[id])
  1073. pev(id,pev_punchangle,cl_pushangle[id])
  1074.  
  1075. return HAM_IGNORED
  1076. }
  1077.  
  1078. public fw_PrimaryAttack_Post(ent)
  1079. {
  1080. new id = pev(ent,pev_owner)
  1081.  
  1082. if(g_item_rec[id])
  1083. {
  1084. new Float:push[3]
  1085. pev(id,pev_punchangle,push)
  1086. xs_vec_sub(push,cl_pushangle[id],push)
  1087. xs_vec_mul_scalar(push,0.25,push)
  1088. xs_vec_add(push,cl_pushangle[id],push)
  1089. set_pev(id,pev_punchangle,push)
  1090. }
  1091. return HAM_IGNORED
  1092. }
  1093.  
  1094. public fw_Reload_Post(iEnt)
  1095. {
  1096. if( get_pdata_int(iEnt, m_fInReload, 4) )
  1097. {
  1098. new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  1099. if(g_item_rel[id])
  1100. {
  1101. new Float:fDelay = g_fDelay[get_pdata_int(iEnt, m_iId, 4)] * RELOAD_RATIO
  1102. set_pdata_float(id, m_flNextAttack, fDelay, 5)
  1103. set_pdata_float(iEnt, m_flTimeWeaponIdle, fDelay, 4)
  1104. set_pev(id, pev_frame, 200.0)
  1105. }
  1106. }
  1107. }
  1108.  
  1109. public plugin_cfg()
  1110. {
  1111. g_Vault = nvault_open( "basebuilder" );
  1112.  
  1113. if ( g_Vault == INVALID_HANDLE )
  1114. set_fail_state( "Error opening BaseBuilder Achievements nVault, file does not exist!" );
  1115.  
  1116. //create the main menu
  1117. new size = sizeof(gszMainMenuText);
  1118. add(gszMainMenuText, size, "\yClock Maker Menu^n^n");
  1119. add(gszMainMenuText, size, "\r1. \wCreate real time clock^n");
  1120. add(gszMainMenuText, size, "\r2. \wCreate build time clock^n^n");
  1121. add(gszMainMenuText, size, "\r4. \wDelete clock^n^n");
  1122. add(gszMainMenuText, size, "\r5. \wMake larger^n");
  1123. add(gszMainMenuText, size, "\r6. \wMake smaller^n^n");
  1124. add(gszMainMenuText, size, "\r7. \wSave clocks^n");
  1125. add(gszMainMenuText, size, "\r8. \wLoad clocks^n^n");
  1126. add(gszMainMenuText, size, "\r0. \wClose^n");
  1127.  
  1128. //store current CVAR values (so we can check if they get changed)
  1129. gTimeOffsetOld = get_cvar_num("cm_timeoffset");
  1130. gHourTypeOld = get_cvar_num("cm_hourtype");
  1131.  
  1132. //make save folder in basedir
  1133. new szDir[64];
  1134. new szMap[32];
  1135.  
  1136. get_basedir(szDir, 64);
  1137. add(szDir, 64, "/clockmaker");
  1138.  
  1139. //create the folder is it doesn't exist
  1140. if (!dir_exists(szDir))
  1141. {
  1142. mkdir(szDir);
  1143. }
  1144.  
  1145. get_mapname(szMap, 32);
  1146. formatex(gszFile, 96, "%s/%s.cm", szDir, szMap);
  1147.  
  1148. //load the clocks
  1149. loadClocks(0);
  1150.  
  1151. set_task(1.0, "taskUpdateClocks", 0, "", 0, "b");
  1152. }
  1153.  
  1154. public plugin_end()
  1155. {
  1156. nvault_close( g_Vault );
  1157.  
  1158. return PLUGIN_CONTINUE
  1159. }
  1160.  
  1161. public client_disconnect(id)
  1162. {
  1163. cmdStopEnt(id)
  1164. SaveLevel(id)
  1165.  
  1166. g_isconnected[id] = false
  1167. g_isalive[id] = false
  1168. g_isbot[id] = false
  1169. g_iszombie[id] = false
  1170. g_BuildBan[id] = false
  1171. g_pColor[id] = RED
  1172.  
  1173. g_item_dmg[id] = false
  1174. g_item_gdmg[id] = false
  1175. g_item_rec[id] = false
  1176. g_item_reg[id] = false
  1177. g_item_rel[id] = false
  1178. g_item_hel[id] = false
  1179. g_item_sti[id] = false
  1180. g_item_shi[id] = false
  1181. g_item_oma[id] = false
  1182.  
  1183. remove_task(id+REGEN_TASK)
  1184. remove_task(id+OMA_TASK)
  1185. remove_task(id+CONCUSSION_TASK)
  1186.  
  1187. return PLUGIN_CONTINUE
  1188. }
  1189.  
  1190. //Respawns late joiners, cts only if build time is still on
  1191. public client_putinserver(id)
  1192. {
  1193. get_load_key(id)
  1194.  
  1195. set_task(7.0,"Respawn_Human",id);
  1196. g_isconnected[id] = true
  1197. firsttime[id] = true
  1198. g_FirstSpawn[id] = true
  1199.  
  1200. g_isalive[id] = false
  1201. g_isbot[id] = false
  1202. g_iszombie[id] = false
  1203. g_BuildBan[id] = false
  1204. g_isconcussioned[id] = false
  1205.  
  1206. g_item_dmg[id] = false
  1207. g_item_gdmg[id] = false
  1208. g_item_rec[id] = false
  1209. g_item_reg[id] = false
  1210. g_item_rel[id] = false
  1211. g_item_hel[id] = false
  1212. g_item_sti[id] = false
  1213. g_item_shi[id] = false
  1214. g_item_oma[id] = false
  1215.  
  1216. // Set bot flag
  1217. if (is_user_bot(id))
  1218. g_isbot[id] = true
  1219. }
  1220.  
  1221. public Release_Zombies()
  1222. {
  1223. g_CanBuild = false
  1224. g_ZombiesReleased = true
  1225. g_ReleaseTime = get_gametime()
  1226. remove_task(BUILD_TASK);
  1227.  
  1228. new weapon[32]
  1229. get_pcvar_string(g_pcvar_givenades,weapon,31)
  1230. new he, flash, smoke
  1231. for(new i=0;i<strlen(weapon);i++)
  1232. {
  1233. switch(weapon[i])
  1234. {
  1235. case 'h': he++
  1236. case 'f': flash++
  1237. case 's': smoke++
  1238. }
  1239. }
  1240.  
  1241. new players[32], num, player
  1242. get_players(players, num, "a")
  1243.  
  1244. for(new i = 0; i < num; i++)
  1245. {
  1246. player = players[i]
  1247.  
  1248. if (!g_iszombie[player])
  1249. {
  1250. cmdStopEnt(player)
  1251.  
  1252. if(he) give_item(player,"weapon_hegrenade"), cs_set_user_bpammo(player,CSW_HEGRENADE,he)
  1253. if(flash) give_item(player,"weapon_flashbang"), cs_set_user_bpammo(player,CSW_FLASHBANG,flash)
  1254. if(smoke) give_item(player,"weapon_smokegrenade"), cs_set_user_bpammo(player,CSW_SMOKEGRENADE,smoke)
  1255.  
  1256. if (g_PrimaryWeapon[player])
  1257. {
  1258. get_weaponname(g_PrimaryWeapon[player],weapon,31)
  1259. engclient_cmd(player, weapon);
  1260. }
  1261. }
  1262. }
  1263.  
  1264. set_pev(g_iEntBarrier,pev_solid,SOLID_NOT)
  1265. set_pev(g_iEntBarrier,pev_renderamt,Float:{0.0})
  1266.  
  1267. g_RoundNum++
  1268. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 10.0, 0.1, 0.2, 1)
  1269. show_hudmessage(0, "%L", LANG_SERVER, "RELEASE_MSG");
  1270. switch(random_num(1,2))
  1271. {
  1272. case 1: client_cmd(0, "spk %s", g_RoundStart)
  1273. case 2: client_cmd(0, "spk %s", g_RoundStart2)
  1274. }
  1275. }
  1276.  
  1277. //Called on zombie death function
  1278. public Respawn_Zombie(id)
  1279. {
  1280. if (g_isconnected[id] && cs_get_user_team(id) == CS_TEAM_T)
  1281. {
  1282. if (get_user_health(id) ==MaxHP[id] || !is_user_alive(id))
  1283. ExecuteHamB(Ham_CS_RoundRespawn, id)
  1284. else
  1285. client_print(id, print_center, "%L", LANG_SERVER, "FAIL_RESPAWN");
  1286. }
  1287. }
  1288.  
  1289. //Called on al pllayers for late joiners, parent is above
  1290. public Respawn_Human(id)
  1291. {
  1292. if (!g_isconnected[id] || g_isalive[id] || cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
  1293. return PLUGIN_HANDLED
  1294.  
  1295. if (!g_isalive[id] && g_iszombie[id])
  1296. ExecuteHamB(Ham_CS_RoundRespawn, id)
  1297.  
  1298. if (!g_isalive[id] && g_iszombie[id])
  1299. set_task(3.0,"Respawn_Human",id)
  1300.  
  1301. if (g_CanBuild)
  1302. {
  1303. if (!g_isalive[id])
  1304. ExecuteHamB(Ham_CS_RoundRespawn, id)
  1305.  
  1306. if (!g_isalive[id])
  1307. set_task(3.0,"Respawn_Human",id)
  1308. }
  1309. return PLUGIN_HANDLED
  1310. }
  1311.  
  1312. //Sets player health and weapons
  1313. public Add_Effects(id)
  1314. {
  1315. if (!g_isconnected[id] || !g_isalive[id])
  1316. return PLUGIN_HANDLED
  1317.  
  1318. if (g_FirstSpawn[id])
  1319. {
  1320. client_cmd(id, "mp3 play sound/%s", g_JoinServer)
  1321. g_FirstSpawn[id] = false
  1322. }
  1323.  
  1324. AchieveCount(id)
  1325.  
  1326. strip_user_weapons(id)
  1327. give_item(id, "weapon_knife")
  1328.  
  1329. if (g_item_hel[id] || g_unAPLevel[id])
  1330. {
  1331. give_item(id, "item_assaultsuit");
  1332.  
  1333. new armor = g_unAPLevel[id]*10
  1334. if (g_item_hel[id])
  1335. armor+=200
  1336. cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM);
  1337. }
  1338.  
  1339. if (g_iszombie[id])
  1340. {
  1341. new hp = (g_ZombieHP+(g_unHPLevel[id]*100))
  1342. MaxHP[id] = float(hp)
  1343. set_pev(id, pev_health, MaxHP[id]) // use decimal number
  1344. set_pev(id, pev_gravity, 1-(0.02*g_unGRLevel[id])) // use decimal number
  1345. set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 255-(g_unINLevel[id]*10))
  1346. }
  1347. else
  1348. {
  1349. weapon_method_menu(id)
  1350. MaxHP[id] = 100.0
  1351. set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
  1352. }
  1353.  
  1354. if (!hasplayed[id])
  1355. {
  1356. hasplayed[id] = 1
  1357. print_color(id, "%s %L", LANG_SERVER, "CR_NEW_PLAYER", g_NewPlayer)
  1358. credits[id]+=g_NewPlayer
  1359. }
  1360. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_SPAWN", credits[id])
  1361. ev_Health(id)
  1362. return PLUGIN_HANDLED
  1363. }
  1364.  
  1365. //AmmoX Ensures BackPack ammo is always full
  1366. public ev_AmmoX(id)
  1367. {
  1368. set_pdata_int(id, AMMO_SLOT + read_data(1), 200, 5)
  1369. }
  1370.  
  1371. //Sets the "Game" description ie. Counter-Strike, in our case Base Builder
  1372. public fw_GetGameDescription()
  1373. {
  1374. // Return the mod name so it can be easily identified
  1375. forward_return(FMV_STRING, g_ModName)
  1376.  
  1377. return FMRES_SUPERCEDE;
  1378. }
  1379.  
  1380. public ev_Flash(id)
  1381. {
  1382. if (!g_iszombie[id])
  1383. {
  1384. message_begin(MSG_ONE, gmsgScreenFade, {0,0,0}, id)
  1385. write_short(1)
  1386. write_short(1)
  1387. write_short(1)
  1388. write_byte(0)
  1389. write_byte(0)
  1390. write_byte(0)
  1391. write_byte(255)
  1392. message_end()
  1393. }
  1394. else if (g_iszombie[id])
  1395. {
  1396. client_cmd(id, "mp3 play sound/%s", g_Concussion)
  1397.  
  1398. new Float:fadetime = 5.0, fade
  1399. fade = clamp(floatround(fadetime * float(1<<12)), 0, 0xFFFF);
  1400.  
  1401. g_isconcussioned[id] = true
  1402. set_task(fadetime, "Remove_Conc_Effects", CONCUSSION_TASK+id)
  1403.  
  1404. message_begin(MSG_ONE,gmsgScreenFade,{0,0,0},id)
  1405. write_short( fade )
  1406. write_short( 1<<10 )
  1407. write_short( 1<<12 )
  1408. write_byte( 255 )
  1409. write_byte( 255 )
  1410. write_byte( 255 )
  1411. write_byte( 200 )
  1412. message_end()
  1413.  
  1414. new Float:fVec[3];
  1415. fVec[0] = random_float(PA_LOW , PA_HIGH);
  1416. fVec[1] = random_float(PA_LOW , PA_HIGH);
  1417. fVec[2] = random_float(PA_LOW , PA_HIGH);
  1418. entity_set_vector(id , EV_VEC_punchangle , fVec);
  1419. message_begin(MSG_ONE , gmsgScreenShake , {0,0,0} ,id)
  1420. write_short( 1<<14 );
  1421. write_short( fade );
  1422. write_short( 1<<14 );
  1423. message_end();
  1424. }
  1425. }
  1426.  
  1427. public Remove_Conc_Effects(taskid)
  1428. {
  1429. taskid -= CONCUSSION_TASK
  1430. g_isconcussioned[taskid] = false
  1431. }
  1432.  
  1433. /*-------------------------------------------------------------------------------------------------|
  1434. |----------------------------------Begin Player Model Code---[0005]--------------------------------|
  1435. |-------------------------------------------------------------------------------------------------*/
  1436.  
  1437. public ham_PlayerSpawn_Post(id)
  1438. {
  1439. if (is_user_alive(id))
  1440. {
  1441. g_isalive[id] = true
  1442. g_pCurTeam[id] = cs_get_user_team(id)
  1443. g_iszombie[id] = g_pCurTeam[id] == CS_TEAM_T ? true : false
  1444.  
  1445. Add_Effects(id)
  1446. remove_task(id + MODELSET_TASK)
  1447. if (g_iszombie[id])
  1448. {
  1449. switch(random_num(1,3))
  1450. {
  1451. case 1: copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel1)
  1452. case 2: copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel2)
  1453. case 3: copy(g_PlayerModel[id], charsmax(g_PlayerModel[]), g_ZombieModel3)
  1454. }
  1455. new currentmodel[32]
  1456. fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  1457. if (!equal(currentmodel, g_PlayerModel[id]))
  1458. {
  1459. if (get_gametime() - g_RoundStartTime < 5.0)
  1460. set_task(5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + MODELSET_TASK)
  1461. else
  1462. fm_user_model_update(id + MODELSET_TASK)
  1463. }
  1464. }
  1465. else if (g_HasCustomModel[id])
  1466. {
  1467. fm_reset_user_model(id)
  1468. }
  1469. }
  1470. }
  1471.  
  1472. public fw_SetClientKeyValue(id, const infobuffer[], const key[])
  1473. {
  1474. if (g_HasCustomModel[id] && equal(key, "model"))
  1475. return FMRES_SUPERCEDE
  1476. return FMRES_IGNORED
  1477. }
  1478.  
  1479. public fw_ClientUserInfoChanged(id)
  1480. {
  1481. if (!g_HasCustomModel[id])
  1482. return FMRES_IGNORED
  1483. static currentmodel[32]
  1484. fm_get_user_model(id, currentmodel, charsmax(currentmodel))
  1485. if (!equal(currentmodel, g_PlayerModel[id]) && !task_exists(id + MODELSET_TASK))
  1486. fm_set_user_model(id + MODELSET_TASK)
  1487. return FMRES_IGNORED
  1488. }
  1489.  
  1490. public fm_user_model_update(taskid)
  1491. {
  1492. static Float:current_time
  1493. current_time = get_gametime()
  1494.  
  1495. if (current_time - g_ModelsTargetTime >= MODELCHANGE_DELAY)
  1496. {
  1497. fm_set_user_model(taskid)
  1498. g_ModelsTargetTime = current_time
  1499. }
  1500. else
  1501. {
  1502. set_task((g_ModelsTargetTime + MODELCHANGE_DELAY) - current_time, "fm_set_user_model", taskid)
  1503. g_ModelsTargetTime = g_ModelsTargetTime + MODELCHANGE_DELAY
  1504. }
  1505. }
  1506.  
  1507. public fm_set_user_model(player)
  1508. {
  1509. player -= MODELSET_TASK
  1510. engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", g_PlayerModel[player])
  1511. g_HasCustomModel[player] = true
  1512. }
  1513.  
  1514. stock fm_get_user_model(player, model[], len)
  1515. {
  1516. engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
  1517. }
  1518.  
  1519. stock fm_reset_user_model(player)
  1520. {
  1521. g_HasCustomModel[player] = false
  1522. dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
  1523. }
  1524.  
  1525. /*-------------------------------------------------------------------------------------------------|
  1526. |------------------------------------End Player Model Code-----------------------------------------|
  1527. |-------------------------------------------------------------------------------------------------*/
  1528.  
  1529. /*-------------------------------------------------------------------------------------------------|
  1530. |----------------------------------Begin Entity Mover Code---[0004]--------------------------------|
  1531. |-------------------------------------------------------------------------------------------------*/
  1532. public cmdMoveEnt(id)
  1533. {
  1534. if (g_BuildBan[id] == true)
  1535. return PLUGIN_HANDLED
  1536.  
  1537. if (g_iszombie[id] && !access(id, AFTER_BUILD))
  1538. return PLUGIN_HANDLED
  1539.  
  1540. if (!g_CanBuild && !access(id, AFTER_BUILD))
  1541. {
  1542. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_TIME_UP")
  1543. return PLUGIN_HANDLED
  1544. }
  1545.  
  1546. if (!g_isalive[id] && !access(id, DEAD_BUILD))
  1547. {
  1548. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DEAD")
  1549. return PLUGIN_HANDLED
  1550. }
  1551.  
  1552. if (g_pEnt[id] && is_valid_ent(g_pEnt[id]))
  1553. cmdStopEnt(id)
  1554.  
  1555. new ent, bodypart
  1556. get_user_aiming (id,ent,bodypart)
  1557.  
  1558. if (!is_valid_ent(ent) || ent == g_iEntBarrier)
  1559. {
  1560. return PLUGIN_HANDLED
  1561. }
  1562.  
  1563. if (ent <= g_MaxPlayers && g_isalive[ent])
  1564. {
  1565. return PLUGIN_HANDLED
  1566. }
  1567.  
  1568. if ((IsBlockLocked(ent) && !access(id, MEMBERSHIP)) || g_MovingEnt[ent])
  1569. {
  1570. return PLUGIN_HANDLED
  1571. }
  1572.  
  1573. /*if (g_Claimable == 1)
  1574. {
  1575. if (!g_EntOwner[ent])
  1576. {
  1577. if ((g_OwnedEnts[id]<g_MaxClaimable) || g_MaxClaimable == 0)
  1578. {
  1579. g_EntOwner[ent] = id
  1580. g_OwnedEnts[id]++
  1581. }
  1582. else
  1583. {
  1584. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_MAXOWNED", g_MaxClaimable)
  1585. }
  1586. }
  1587. else if (g_EntOwner[ent] != id && !access(id, AFTER_BUILD))
  1588. {
  1589. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_ALREADYOWNED")
  1590. return PLUGIN_HANDLED
  1591. }
  1592. }*/
  1593. /*if (g_EntOwner[ent] && g_EntOwner[ent] != id && !access(id, ADMIN_BAN))
  1594. return PLUGIN_HANDLED
  1595. else if (!g_EntOwner[ent] && access(id, MEMBERSHIP))
  1596. {
  1597. g_OwnedEnts[id]++
  1598. if (g_OwnedEnts[id]<=15)
  1599. g_EntOwner[ent] = id
  1600. else
  1601. client_print(id, print_center, "You've already claimed the max pieces, anyone can move this piece")
  1602. }*/
  1603.  
  1604. new tname[7], cname[10];
  1605. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1606. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1607. if (!equal(cname, "func_wall") || equal(tname, "ignore"))
  1608. {
  1609. return PLUGIN_HANDLED
  1610. }
  1611.  
  1612. new Float:orig[3], iAiming[3], Float:fAiming[3], body
  1613.  
  1614. get_user_origin(id, iAiming, 3);
  1615. IVecFVec(iAiming, fAiming);
  1616. entity_get_vector(ent, EV_VEC_origin, orig);
  1617.  
  1618. g_pOffset[id][0] = orig[0] - fAiming[0];
  1619. g_pOffset[id][1] = orig[1] - fAiming[1];
  1620. g_pOffset[id][2] = orig[2] - fAiming[2];
  1621.  
  1622. g_pDist[id] = get_user_aiming(id, ent, body);
  1623.  
  1624. if (g_EntMinDist) //maximum
  1625. {
  1626. if (g_pDist[id] < g_EntMinDist) //minimum
  1627. g_pDist[id] = g_EntSetDist;
  1628. }
  1629.  
  1630. if (g_EntMaxDist) //maximum
  1631. {
  1632. if (g_pDist[id] > g_EntMaxDist)
  1633. return PLUGIN_HANDLED
  1634. }
  1635.  
  1636. //test
  1637. //attach_view(id, ent);
  1638. if (g_pThirdPerson[id]) set_view(id, CAMERA_UPLEFT)
  1639.  
  1640. if (g_pColor[id] == TEXTURED) set_pev(ent,pev_rendermode,kRenderTransTexture)
  1641. else
  1642. {
  1643. set_pev(ent,pev_rendermode,kRenderTransColor)
  1644. if (g_pColor[id] == RAINBOW || g_pColor[id] == DISCO)
  1645. set_pev(ent,pev_rendercolor,g_Color[g_pColorHolder[id]])
  1646. else
  1647. set_pev(ent,pev_rendercolor,g_Color[g_pColor[id]])
  1648. }
  1649. set_pev(ent,pev_renderamt,g_RenderColor[g_pColor[id]])
  1650.  
  1651. g_MovingEnt[ent] = true
  1652. g_EntMover[ent] = id
  1653. g_pEnt[id] = ent
  1654.  
  1655. objectsmoved[id]++
  1656. if (objectsmoved[id] == 10000)
  1657. {
  1658. switch (g_PlayerAchievements[id][ACHIEVE_OBJMOVED])
  1659. {
  1660. case LEVEL_NONE:
  1661. {
  1662. g_PlayerAchievements[id][ACHIEVE_OBJMOVED]=LEVEL_I;
  1663. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  1664. show_hudmessage(id, "%s^nMove 10000 objects!^n+15 Credits", ACHIEVEMENTS[ACHIEVE_OBJMOVED][LEVEL_I]);
  1665. credits[id]+=15
  1666. check_banker(id)
  1667. client_cmd(id, "spk %s", g_AchivementEarned);
  1668. SaveLevel(id)
  1669. }
  1670. }
  1671. }
  1672.  
  1673. if (!g_CanBuild && access(id, AFTER_BUILD))
  1674. {
  1675. new adminauthid[35],adminname[35]
  1676. get_user_ip (id,adminauthid,34)
  1677. get_user_name(id,adminname,34)
  1678. Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
  1679. }
  1680.  
  1681. return PLUGIN_HANDLED
  1682. }
  1683.  
  1684. public fw_Player_PreThink(id)
  1685. {
  1686. if (!g_pEnt[id] || !is_valid_ent(g_pEnt[id]))
  1687. return FMRES_HANDLED
  1688.  
  1689. new buttons = pev(id, pev_button)
  1690. if (buttons & IN_ATTACK)
  1691. {
  1692. g_pDist[id] += 3.0;
  1693.  
  1694. if (g_pDist[id] > g_EntMaxDist)
  1695. {
  1696. g_pDist[id] = g_EntMaxDist
  1697. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MAX")
  1698. }
  1699. else
  1700. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PUSH")
  1701. }
  1702. else if (buttons & IN_ATTACK2)
  1703. {
  1704. g_pDist[id] -= 3.0;
  1705.  
  1706. if (g_pDist[id] < g_EntSetDist)
  1707. {
  1708. g_pDist[id] = g_EntSetDist
  1709. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_MIN")
  1710. }
  1711. else
  1712. client_print(id, print_center, "%L", LANG_SERVER, "OBJECT_PULL")
  1713. }
  1714.  
  1715. if (!g_isconnected[id] || (g_pEnt[id] <= g_MaxPlayers)? !g_isconnected[id]:!is_valid_ent(g_pEnt[id]))
  1716. {
  1717. cmdStopEnt(id)
  1718. return PLUGIN_HANDLED
  1719. }
  1720.  
  1721. /*------------------------------------------------*/
  1722. new iOrigin[3], iLook[3];
  1723. new Float:fOrigin[3], Float:fLook[3], Float:fDirection[3], Float:vMoveTo[3], Float:fLength
  1724.  
  1725. get_user_origin(id, iOrigin, 1); //Position from eyes (weapon aiming)
  1726. get_user_origin(id, iLook, 3); //End position from eyes (hit point for weapon)
  1727. IVecFVec(iOrigin, fOrigin);
  1728. IVecFVec(iLook, fLook);
  1729.  
  1730. fDirection[0] = fLook[0] - fOrigin[0];
  1731. fDirection[1] = fLook[1] - fOrigin[1];
  1732. fDirection[2] = fLook[2] - fOrigin[2];
  1733.  
  1734. fLength = get_distance_f(fLook, fOrigin);
  1735.  
  1736. if (fLength == 0.0) fLength = 1.0; //avoid division by 0
  1737.  
  1738. //calculate the position to move the block
  1739. vMoveTo[0] = (fOrigin[0] + fDirection[0] * g_pDist[id] / fLength) + g_pOffset[id][0];
  1740. vMoveTo[1] = (fOrigin[1] + fDirection[1] * g_pDist[id] / fLength) + g_pOffset[id][1];
  1741. vMoveTo[2] = (fOrigin[2] + fDirection[2] * g_pDist[id] / fLength) + g_pOffset[id][2];
  1742. vMoveTo[2] = float(floatround(vMoveTo[2], floatround_floor));
  1743.  
  1744. //move the block
  1745. entity_set_origin(g_pEnt[id], vMoveTo);
  1746. /*------------------------------------------------*/
  1747.  
  1748. if (g_pColor[id] == RAINBOW)
  1749. {
  1750. switch (g_pColorChk[id])
  1751. {
  1752. case 0: g_pColorHolder[id]++
  1753. case 1: g_pColorHolder[id]--
  1754. }
  1755. if (g_pColorHolder[id]>LIGHTBROWN) g_pColorChk[id] = 1
  1756. else if (g_pColorHolder[id]<ORANGE) g_pColorChk[id] = 0
  1757. //g_pColorHolder[id]++
  1758. //if (g_pColorHolder[id]>BROWN) g_pColorHolder[id] = RED
  1759. set_pev(g_pEnt[id],pev_rendercolor,g_Color[g_pColorHolder[id]])
  1760. }
  1761. else if (g_pColor[id] == DISCO)
  1762. {
  1763. g_pColorHolder[id] = random_num(RED, BROWN)
  1764. set_pev(g_pEnt[id],pev_rendercolor,g_Color[g_pColorHolder[id]])
  1765. }
  1766.  
  1767. return FMRES_HANDLED
  1768. }
  1769.  
  1770. public cmdStopEnt(id)
  1771. {
  1772. if (g_pThirdPerson[id]) set_view(id, CAMERA_NONE)
  1773. new ent = g_pEnt[id]
  1774. g_MovingEnt[ent] = false
  1775. set_pev(ent,pev_renderamt,Float:{255.0})
  1776. if (IsBlockLocked(ent))
  1777. {
  1778. set_pev(ent,pev_rendermode,kRenderTransColor)
  1779. set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0})
  1780. set_pev(ent,pev_renderamt,Float:{225.0})
  1781. }
  1782. else
  1783. {
  1784. set_pev(ent,pev_rendermode,kRenderNormal)
  1785. set_pev(ent,pev_rendercolor,Float:{0.0, 0.0, 0.0})
  1786. }
  1787.  
  1788. /*new ent_check, bodypart
  1789. get_user_aiming (id,ent_check,bodypart)*/
  1790. if (/*!is_valid_ent(ent_check)*//* || ent_check != ent || */g_Touching[ent] && !access(id, ADMIN_BAN))
  1791. {
  1792. /*if (g_Touching[ent]) */
  1793. //else client_print(id, print_center, "Please don't stick objects in walls")
  1794. client_print(id, print_center, "Please don't stick objects in other players")
  1795. engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } );
  1796.  
  1797. g_OwnedEnts[g_EntOwner[ent]]--
  1798. g_EntOwner[ent] = 0
  1799. }
  1800. /*else if((fEntOrigin[ent][0]<=g_maxs[0] && fEntOrigin[ent][0]>=g_mins[0] && fEntOrigin[ent][1]<=g_maxs[1] && fEntOrigin[ent][1]>=g_mins[1]))
  1801. {
  1802. print_color(id, "^x04 Don't block the spawn!!!")
  1803. print_color(id, "^x04 Don't block the spawn!!!")
  1804. print_color(id, "^x04 Don't block the spawn!!!")
  1805. engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } );
  1806. g_OwnedEnts[g_EntOwner[ent]]--
  1807. g_EntOwner[ent] = 0
  1808. }*/
  1809. else
  1810. {
  1811. new entity = -1
  1812. while( ( entity = engfunc( EngFunc_FindEntityInSphere, entity, g_fBarrierOrigin, 200.0 ) ) != 0 )
  1813. {
  1814. if (entity == ent)
  1815. {
  1816. print_color(id, "^x04 Don't block the spawn!!!")
  1817. print_color(id, "^x04 Don't block the spawn!!!")
  1818. print_color(id, "^x04 Don't block the spawn!!!")
  1819. engfunc( EngFunc_SetOrigin, entity, Float:{ 0.0, 0.0, 0.0 } );
  1820. g_OwnedEnts[g_EntOwner[entity]]--
  1821. g_EntOwner[entity] = 0
  1822. }
  1823. }
  1824. }
  1825.  
  1826. g_EntMover[ent] = 0
  1827. g_LastMover[ent] = id
  1828. g_pEnt[id] = 0
  1829. }
  1830.  
  1831. public ham_TouchWall_Post(ent, id)
  1832. {
  1833. //never check these
  1834. if (!is_valid_ent(ent) || !g_EntMover[ent] || g_InvisEnt[ent]/* || g_MovingEnt[ent]*/) return HAM_HANDLED
  1835.  
  1836. remove_task(TOUCHING_TASK+ent)
  1837.  
  1838. if (g_isalive[id] && (g_iszombie[id] || g_EntMover[ent] == id))
  1839. {
  1840. g_Touching[ent] = true
  1841. set_task(0.1, "Task_UnTouch", TOUCHING_TASK+ent)
  1842. }
  1843. else
  1844. g_Touching[ent] = false
  1845.  
  1846. return HAM_HANDLED
  1847. }
  1848.  
  1849. public Task_UnTouch(taskent)
  1850. {
  1851. taskent -= TOUCHING_TASK
  1852. g_Touching[taskent] = false
  1853. }
  1854.  
  1855. public fw_Traceline(Float:start[3], Float:end[3], conditions, id, trace)
  1856. {
  1857. if (!is_user_alive(id)) return PLUGIN_HANDLED
  1858.  
  1859. new ent = get_tr2(trace, TR_pHit)
  1860.  
  1861. if (is_valid_ent(ent))
  1862. {
  1863. new ent,body
  1864. get_user_aiming(id,ent,body)
  1865.  
  1866. new cname[10], tname[7];
  1867. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1868. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1869. if (equal(cname, "func_wall") && !equal(tname, "ignore") && ent != g_iEntBarrier && g_ShowMovers == 1)
  1870. {
  1871. if (g_CanBuild || access(id, ADMIN_KICK))
  1872. {
  1873. if (IsBlockLocked(ent))
  1874. {
  1875. set_hudmessage(255, 0, 0, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  1876. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_LOCKED");
  1877. return PLUGIN_HANDLED
  1878. }
  1879. set_hudmessage(0, 50, 255, -1.0, 0.55, 1, 0.01, 3.0, 0.01, 0.01);
  1880. if (!g_Claimable)
  1881. {
  1882. new currentmover[35], lastmover[35]
  1883. if (g_EntMover[ent])
  1884. {
  1885. get_user_name(g_EntMover[ent],currentmover,34)
  1886. if (!g_LastMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO1", currentmover);
  1887. }
  1888. if (g_LastMover[ent])
  1889. {
  1890. get_user_name(g_LastMover[ent],lastmover,34)
  1891. if (!g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO2", lastmover);
  1892. }
  1893. if (g_LastMover[ent] && g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO3", currentmover, lastmover);
  1894. else if (!g_LastMover[ent] && !g_EntMover[ent]) ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_INFO4");
  1895. }
  1896. else
  1897. {
  1898. if (g_EntOwner[ent])
  1899. {
  1900. new entowner[35]
  1901. get_user_name(g_EntOwner[ent],entowner,34)
  1902. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER", entowner);
  1903. }
  1904. else
  1905. {
  1906. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "OBJECT_OWNER_NONE");
  1907. }
  1908. }
  1909. }
  1910. }
  1911. }
  1912. else ClearSyncHud(id, gHudSyncInfo);
  1913.  
  1914. return PLUGIN_HANDLED
  1915. }
  1916.  
  1917. public cmdLockBlock(id)
  1918. {
  1919. if (!access(id, LOCK_BLOCKS))
  1920. return PLUGIN_HANDLED
  1921.  
  1922. new ent, bodypart
  1923. get_user_aiming (id,ent,bodypart)
  1924.  
  1925. new tname[7], cname[10];
  1926. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1927. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1928.  
  1929. if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore")) return PLUGIN_HANDLED
  1930.  
  1931. if (!IsBlockLocked(ent) && !g_MovingEnt[ent])
  1932. {
  1933. LockBlock(ent)
  1934. set_pev(ent,pev_rendermode,kRenderTransColor)
  1935. set_pev(ent,pev_rendercolor,Float:{125.0, 0.0, 0.0})
  1936. set_pev(ent,pev_renderamt,Float:{225.0})
  1937.  
  1938. g_OwnedEnts[g_EntOwner[ent]]--
  1939. g_EntOwner[ent] = 0
  1940. }
  1941. else if (IsBlockLocked(ent))
  1942. {
  1943. UnlockBlock(ent)
  1944. set_pev(ent,pev_rendermode,kRenderNormal)
  1945. }
  1946. return PLUGIN_HANDLED
  1947. }
  1948.  
  1949. public cmdRemoveClaim(id)
  1950. {
  1951. if (!access(id, LOCK_BLOCKS))
  1952. return PLUGIN_HANDLED
  1953.  
  1954. new ent, bodypart
  1955. get_user_aiming (id,ent,bodypart)
  1956.  
  1957. new tname[7], cname[10];
  1958. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1959. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1960.  
  1961. if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(cname, "func_wall") || equal(tname, "ignore") || IsBlockLocked(ent)) return PLUGIN_HANDLED
  1962.  
  1963. g_OwnedEnts[g_EntOwner[ent]]--
  1964. g_EntOwner[ent] = 0
  1965.  
  1966. return PLUGIN_HANDLED
  1967. }
  1968.  
  1969. public cmdRemoveEnt(id)
  1970. {
  1971. if (!access(id, REMOVE_BLOCK))
  1972. return PLUGIN_HANDLED
  1973.  
  1974. if (!g_isalive[id] && !access(id, DEAD_REMOVE))
  1975. {
  1976. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_REMOVE")
  1977. return PLUGIN_HANDLED
  1978. }
  1979.  
  1980. new ent, bodypart
  1981. get_user_aiming (id,ent,bodypart)
  1982.  
  1983. if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
  1984. return PLUGIN_HANDLED
  1985.  
  1986. if(IsBlockLocked(ent) || g_MovingEnt[ent])
  1987. return PLUGIN_HANDLED
  1988.  
  1989. new tname[7], cname[10];
  1990. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  1991. entity_get_string(ent, EV_SZ_classname, cname, 9);
  1992. if(!equal(cname, "func_wall"))
  1993. return PLUGIN_HANDLED
  1994.  
  1995. if(equal(tname, "ignore"))
  1996. return PLUGIN_HANDLED
  1997.  
  1998. g_OwnedEnts[g_EntOwner[ent]]--
  1999. g_EntOwner[ent] = 0
  2000.  
  2001. remove_entity(ent)
  2002.  
  2003. new adminauthid[35],adminname[35]
  2004. get_user_ip (id,adminauthid,34)
  2005. get_user_name(id,adminname,34)
  2006. Log("[REMOVE] Admin: %s || SteamID: %s removed an entity", adminname, adminauthid)
  2007.  
  2008. return PLUGIN_HANDLED
  2009. }
  2010.  
  2011. public cmdResetEnts(id)
  2012. {
  2013. if (!access(id, ADMIN_RESET))
  2014. return PLUGIN_HANDLED
  2015.  
  2016. new cname[10], tname[7];
  2017. for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  2018. {
  2019. if (is_valid_ent(iEnt))
  2020. {
  2021. entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  2022. entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  2023. if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore"))
  2024. engfunc( EngFunc_SetOrigin, iEnt, Float:{ 0.0, 0.0, 0.0 } );
  2025. }
  2026. }
  2027.  
  2028. new adminauthid[35],adminname[35]
  2029. get_user_ip (id,adminauthid,34)
  2030. get_user_name(id,adminname,34)
  2031. Log("[RESET-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)
  2032.  
  2033. return PLUGIN_HANDLED
  2034. }
  2035.  
  2036. public cmdResetAim(id)
  2037. {
  2038. if (!access(id, ADMIN_RESET))
  2039. return PLUGIN_HANDLED
  2040.  
  2041. new ent, bodypart
  2042. get_user_aiming (id,ent,bodypart)
  2043.  
  2044. if(!is_valid_ent(ent) || ent == g_iEntBarrier || (ent <= g_MaxPlayers && g_isalive[ent]))
  2045. {
  2046. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  2047. return PLUGIN_HANDLED
  2048. }
  2049.  
  2050. if(IsBlockLocked(ent) || g_MovingEnt[ent])
  2051. {
  2052. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  2053. return PLUGIN_HANDLED
  2054. }
  2055.  
  2056. new tname[7], cname[10];
  2057. entity_get_string(ent, EV_SZ_targetname, tname, 6);
  2058. entity_get_string(ent, EV_SZ_classname, cname, 9);
  2059. if(!equal(cname, "func_wall") || equal(tname, "ignore"))
  2060. {
  2061. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_RESET")
  2062. return PLUGIN_HANDLED
  2063. }
  2064.  
  2065. engfunc( EngFunc_SetOrigin, ent, Float:{ 0.0, 0.0, 0.0 } );
  2066.  
  2067. new adminauthid[35],adminname[35], targetauthid[35],targetname[35]
  2068. get_user_ip (id,adminauthid,34)
  2069. get_user_name(id,adminname,34)
  2070. get_user_ip(g_EntOwner[ent],targetauthid,34)
  2071. get_user_name(g_EntOwner[ent],targetname,34)
  2072. Log("[REMOVE] Admin: %s || SteamID: %s reset a block belonging to Player: %s || SteamID: %s", adminname, adminauthid, targetauthid, targetname)
  2073.  
  2074. g_OwnedEnts[g_EntOwner[ent]]--
  2075. g_EntOwner[ent] = 0
  2076.  
  2077. return PLUGIN_HANDLED
  2078. }
  2079.  
  2080.  
  2081. public cmdClearEnts(id)
  2082. {
  2083. if (!access(id, ADMIN_RESET))
  2084. return PLUGIN_HANDLED
  2085.  
  2086. new cname[10], tname[7];
  2087. for (new iEnt = g_MaxPlayers+1; iEnt < MAXENTS; iEnt++)
  2088. {
  2089. if (is_valid_ent(iEnt))
  2090. {
  2091. entity_get_string(iEnt, EV_SZ_classname, cname, 9);
  2092. entity_get_string(iEnt, EV_SZ_targetname, tname, 6);
  2093. if (!IsBlockLocked(iEnt) && iEnt != g_iEntBarrier && equal(cname, "func_wall") && !equal(tname, "ignore") && !g_LastMover[iEnt])
  2094. {
  2095. set_entity_visibility(iEnt, 0)
  2096. //set_pev(iEnt,pev_solid,SOLID_NOT)
  2097. //set_pev(iEnt,pev_rendermode,1)
  2098. //set_pev(iEnt,pev_renderamt,Float:{0.0})
  2099. g_InvisEnt[iEnt] = true
  2100. }
  2101. }
  2102. }
  2103.  
  2104. new adminauthid[35],adminname[35]
  2105. get_user_ip (id,adminauthid,34)
  2106. get_user_name(id,adminname,34)
  2107. Log("[CLEAR-ENTS] Admin: %s || SteamID: %s reset the entities", adminname, adminauthid)
  2108.  
  2109. return PLUGIN_HANDLED
  2110. }
  2111.  
  2112. /*-------------------------------------------------------------------------------------------------|
  2113. |------------------------------------End Entity Mover Code-----------------------------------------|
  2114. |-------------------------------------------------------------------------------------------------*/
  2115.  
  2116. // Ham Weapon Deploy Forward (forces knife only)
  2117. public ham_ItemDeploy_Post(weapon_ent)
  2118. {
  2119. static owner
  2120. owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  2121.  
  2122. if (is_valid_ent(owner) && g_isalive[owner] && cs_get_user_shield(owner) == 1)
  2123. {
  2124. entity_set_string( owner , EV_SZ_viewmodel , ShieldView )
  2125. entity_set_string( owner , EV_SZ_weaponmodel , ShieldPlayer )
  2126. }
  2127.  
  2128. static weaponid
  2129. weaponid = cs_get_weapon_id(weapon_ent)
  2130.  
  2131. g_CurrentWeapon[owner] = weaponid
  2132.  
  2133. if (g_iszombie[owner] && !((1<<weaponid) & ZOMBIE_ALLOWED_WEAPONS_BITSUM))
  2134. {
  2135. g_CurrentWeapon[owner] = CSW_KNIFE
  2136. engclient_cmd(owner, "weapon_knife")
  2137. }
  2138. else if (g_CanBuild)
  2139. {
  2140. g_CurrentWeapon[owner] = CSW_KNIFE
  2141. engclient_cmd(owner, "weapon_knife")
  2142. client_print(owner, print_center, "%L", LANG_SERVER, "FAIL_KNIFE_ONLY");
  2143. }
  2144. }
  2145.  
  2146. stock maxclip(wpnid)
  2147. {
  2148. static ca;
  2149. ca = 0;
  2150.  
  2151. switch (wpnid)
  2152. {
  2153. case CSW_P228 : ca = 13;
  2154. case CSW_SCOUT : ca = 10;
  2155. case CSW_HEGRENADE : ca = 0;
  2156. case CSW_XM1014 : ca = 7;
  2157. case CSW_C4 : ca = 0;
  2158. case CSW_MAC10 : ca = 30;
  2159. case CSW_AUG : ca = 30;
  2160. case CSW_SMOKEGRENADE : ca = 0;
  2161. case CSW_ELITE : ca = 15;
  2162. case CSW_FIVESEVEN : ca = 20;
  2163. case CSW_UMP45 : ca = 25;
  2164. case CSW_SG550 : ca = 30;
  2165. case CSW_GALI : ca = 35;
  2166. case CSW_FAMAS : ca = 25;
  2167. case CSW_USP : ca = 12;
  2168. case CSW_GLOCK18 : ca = 20;
  2169. case CSW_AWP : ca = 10;
  2170. case CSW_MP5NAVY : ca = 30;
  2171. case CSW_M249 : ca = 100;
  2172. case CSW_M3 : ca = 8;
  2173. case CSW_M4A1 : ca = 30;
  2174. case CSW_TMP : ca = 30;
  2175. case CSW_G3SG1 : ca = 20;
  2176. case CSW_FLASHBANG : ca = 0;
  2177. case CSW_DEAGLE : ca = 7;
  2178. case CSW_SG552 : ca = 30;
  2179. case CSW_AK47 : ca = 30;
  2180. case CSW_P90 : ca = 50;
  2181. }
  2182. return ca;
  2183. }
  2184.  
  2185. public ev_CurWeapon(id)
  2186. {
  2187. if (g_iszombie[id])
  2188. {
  2189. new Float:SPLevel = float(g_unSPLevel[id])
  2190. SPLevel*=5
  2191. set_user_maxspeed(id, 260.0+SPLevel)
  2192. }
  2193. else if (g_item_oma[id])
  2194. {
  2195. static wpnid, clip;
  2196. wpnid = read_data(2);
  2197. clip = read_data(3);
  2198.  
  2199. if(wpnid==CSW_C4 || wpnid==CSW_KNIFE || wpnid==CSW_HEGRENADE || wpnid==CSW_SMOKEGRENADE || wpnid==CSW_FLASHBANG )
  2200. return PLUGIN_HANDLED;
  2201.  
  2202. if(!clip)
  2203. {
  2204. static weapname[33];
  2205. get_weaponname(wpnid , weapname , 32);
  2206.  
  2207. static wpn
  2208. wpn = -1;
  2209. while((wpn = find_ent_by_class(wpn , weapname)) != 0)
  2210. {
  2211. if(id == entity_get_edict(wpn , EV_ENT_owner))
  2212. {
  2213. cs_set_weapon_ammo(wpn , maxclip(wpnid))
  2214. break;
  2215. }
  2216. }
  2217. }
  2218. }
  2219. return PLUGIN_HANDLED
  2220. }
  2221.  
  2222. public msgRoundEnd(const MsgId, const MsgDest, const MsgEntity)
  2223. {
  2224. static Message[192]
  2225. get_msg_arg_string(2, Message, 191)
  2226.  
  2227. if(equal(Message, "#Hint_you_have_the_bomb") || equal(Message, "#Game_bomb_pickup"))
  2228. {
  2229. strip_user_weapons(MsgEntity)
  2230. give_item(MsgEntity, "weapon_knife")
  2231.  
  2232. return PLUGIN_HANDLED
  2233. }
  2234.  
  2235. if(equal(Message, "#Game_bomb_drop"))
  2236. return PLUGIN_HANDLED
  2237.  
  2238. set_hudmessage(255, 255, 255, -1.0, 0.40, 0, 6.0, 6.0, 0.1, 0.2, 1)
  2239. if (equal(Message, "#Terrorists_Win"))
  2240. {
  2241. show_hudmessage(0, "Zombies Win!")
  2242. set_msg_arg_string(2, "")
  2243. client_cmd(0, "spk %s", g_WinZomb)
  2244.  
  2245. return PLUGIN_HANDLED
  2246. }
  2247. else if (equal(Message, "#Target_Saved") || equal(Message, "#CTs_Win"))
  2248. {
  2249. show_hudmessage(0, "Humans Win!")
  2250. set_msg_arg_string(2, "")
  2251. client_cmd(0, "spk %s", g_WinHum)
  2252.  
  2253. return PLUGIN_HANDLED
  2254. }
  2255. return PLUGIN_HANDLED
  2256. }
  2257.  
  2258. public ham_WeaponCleaner_Post(iEntity)
  2259. {
  2260. call_think(iEntity)
  2261. }
  2262.  
  2263. /*-------------------------------------------------------------------------------------------------|
  2264. |----------------------------Begin Auto Join on Connect Code----[0003]-----------------------------|
  2265. |-------------------------------------------------------------------------------------------------*/
  2266.  
  2267. public message_show_menu(msgid, dest, id)
  2268. {
  2269. if (!(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
  2270. return PLUGIN_CONTINUE
  2271.  
  2272. static team_select[] = "#Team_Select"
  2273. static menu_text_code[sizeof team_select]
  2274. get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
  2275. if (!equal(menu_text_code, team_select))
  2276. return PLUGIN_CONTINUE
  2277.  
  2278. static param_menu_msgid[2]
  2279. param_menu_msgid[0] = msgid
  2280. set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
  2281.  
  2282. return PLUGIN_HANDLED
  2283. }
  2284.  
  2285. public message_vgui_menu(msgid, dest, id)
  2286. {
  2287. if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !(!get_user_team(id) && !g_isbot[id] && !access(id, ADMIN_IMMUNITY)))//
  2288. return PLUGIN_CONTINUE
  2289.  
  2290. static param_menu_msgid[2]
  2291. param_menu_msgid[0] = msgid
  2292. set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
  2293.  
  2294. return PLUGIN_HANDLED
  2295. }
  2296.  
  2297. public task_force_team_join(menu_msgid[], id)
  2298. {
  2299. if (get_user_team(id))
  2300. return
  2301.  
  2302. static msg_block
  2303. msg_block = get_msg_block(menu_msgid[0])
  2304. set_msg_block(menu_msgid[0], BLOCK_SET)
  2305. engclient_cmd(id, "jointeam", "5")
  2306. engclient_cmd(id, "joinclass", "5")
  2307. set_msg_block(menu_msgid[0], msg_block)
  2308.  
  2309. g_pTeam[id] = cs_get_user_team(id)
  2310. g_pCurTeam[id] = cs_get_user_team(id)
  2311. }
  2312.  
  2313. /*-------------------------------------------------------------------------------------------------|
  2314. |----------------------------End Auto Join on Connect Code-----------------------------------------|
  2315. |-------------------------------------------------------------------------------------------------*/
  2316.  
  2317. public clcmd_changeteam(id)
  2318. {
  2319. if (!access(id, ADMIN_IMMUNITY))
  2320. {
  2321. if (g_iszombie[id] && g_CanBuild)
  2322. show_upgrades_menu(id)
  2323. if (!g_iszombie[id] && g_CanBuild)
  2324. show_unlocks_menu(id)
  2325. if (!g_CanBuild)
  2326. show_market_menu(id)
  2327.  
  2328. return PLUGIN_HANDLED
  2329. }
  2330. return PLUGIN_CONTINUE
  2331. }
  2332.  
  2333. public clcmd_drop(id)
  2334. {
  2335. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_DROP")
  2336. return PLUGIN_HANDLED
  2337. }
  2338.  
  2339. public clcmd_buy(id)
  2340. {
  2341. client_print (id, print_center, "%L", LANG_SERVER, "FAIL_BUY")
  2342. return PLUGIN_HANDLED
  2343. }
  2344.  
  2345. public fw_Suicide(id)
  2346. {
  2347. //client_print (id, print_center, "%L", LANG_SERVER, "FAIL_SUICIDE")
  2348. //console_print (id, "%L", LANG_SERVER, "FAIL_SUICIDE")
  2349. //g_isalive[id] = true
  2350. //return FMRES_SUPERCEDE;
  2351.  
  2352. client_print(id, print_center, "You have lost 50 credits for commiting suicide")
  2353. console_print (id, "You have lost 50 credits for commiting suicide")
  2354. credits[id]-=50
  2355. }
  2356.  
  2357. public Base_Calc()
  2358. {
  2359. new players[32], num, ct, basenum
  2360. get_players(players, num)
  2361. new player
  2362. for(new i = 0; i < num; i++)
  2363. {
  2364. player = players[i]
  2365. if (cs_get_user_team(player) == CS_TEAM_CT)
  2366. ct++
  2367.  
  2368. if (ct < 6)
  2369. basenum = 2
  2370. else
  2371. basenum = (ct/3)
  2372. }
  2373. print_color(0, "%s %L", formatmodname, LANG_SERVER, "BASE_CALC", basenum)
  2374. }
  2375.  
  2376. public Fix_Spawns()
  2377. {
  2378. new players[32], num
  2379. get_players(players, num)
  2380.  
  2381. new player
  2382. for(new i = 0; i < num; i++)
  2383. {
  2384. player = players[i]
  2385. if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  2386. ExecuteHamB(Ham_CS_RoundRespawn, player)
  2387. }
  2388. }
  2389.  
  2390. public msgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
  2391. {
  2392. if(g_isalive[iPlayer] && g_isconnected[iPlayer])
  2393. {
  2394. static szMsg[8]
  2395. get_msg_arg_string(2, szMsg, 7)
  2396.  
  2397. if(equal(szMsg, "buyzone"))
  2398. {
  2399. set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0))
  2400. return PLUGIN_HANDLED
  2401. }
  2402. }
  2403. return PLUGIN_CONTINUE
  2404. }
  2405.  
  2406. /*public fw_CreateNamedEntity(entclassname)
  2407. {
  2408. static classname[10]
  2409. engfunc(EngFunc_SzFromIndex, entclassname, classname, 9)
  2410.  
  2411. return (classname[7] == 'c' && classname[8] == '4') ? FMRES_SUPERCEDE : FMRES_IGNORED
  2412. }*/
  2413.  
  2414. public cmdBuildBan(id)
  2415. {
  2416. if (access(id, BUILD_BAN))
  2417. {
  2418. new arg[32]
  2419. read_argv(1, arg, 31)
  2420. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2421. g_BuildBan[player] = true
  2422. cmdStopEnt(player)
  2423.  
  2424. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  2425. get_user_name(id,adminname,34)
  2426. get_user_ip (id,adminauthid,34)
  2427. get_user_name(player, playername, 34)
  2428. get_user_ip (player,playerauthid,34)
  2429. Log("[MOVE] Admin: %s || SteamID: %s banned Player: %s || SteamID: %s from building", adminname, adminauthid, playername, playerauthid)
  2430.  
  2431. client_print(id, print_console, "%L", LANG_SERVER, "BUILD_BAN1", playername)
  2432. client_print(player, print_center, "%L", LANG_SERVER, "BUILD_BAN2")
  2433. }
  2434. }
  2435.  
  2436. public cmdBuildUnban(id)
  2437. {
  2438. if (access(id, BUILD_BAN))
  2439. {
  2440. new arg[32], playername[35]
  2441.  
  2442. read_argv(1, arg, 31)
  2443. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2444. get_user_name(player, playername, 34)
  2445. client_print(id, print_console, "%L", LANG_SERVER, "UNBUILD_BAN1", playername)
  2446. g_BuildBan[player] = false
  2447. print_color(player, "%s %L", formatmodname, LANG_SERVER, "UNBUILD_BAN2")
  2448. }
  2449. }
  2450.  
  2451. public cmdRevive(id)
  2452. {
  2453. if (access(id, REVIVE))
  2454. {
  2455. new arg[32]
  2456. read_argv(1, arg, 31)
  2457. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2458.  
  2459. if (is_user_alive(player))
  2460. {
  2461. client_print(id, print_console, "%L", LANG_SERVER, "FAIL_REVIVE")
  2462. return PLUGIN_HANDLED
  2463. }
  2464.  
  2465. ExecuteHamB(Ham_CS_RoundRespawn, player)
  2466.  
  2467. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  2468. get_user_name(id,adminname,34)
  2469. get_user_ip (id,adminauthid,34)
  2470. get_user_name(player, playername, 34)
  2471. get_user_ip (player,playerauthid,34)
  2472. Log("[REVIVE] Admin: %s || SteamID: %s revived Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  2473.  
  2474. client_print(id, print_console, "%L", LANG_SERVER, "REVIVE1", playername)
  2475. client_print(player, print_center, "%L", LANG_SERVER, "REVIVE2")
  2476. }
  2477. return PLUGIN_HANDLED
  2478. }
  2479.  
  2480.  
  2481. public cmdGiveGuns(id)
  2482. {
  2483. if (access(id, ADMIN_GUNS))
  2484. {
  2485. new arg[32]
  2486. read_argv(1, arg, 31)
  2487. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2488.  
  2489. new playername[35]
  2490. get_user_name(player, playername, 34)
  2491.  
  2492. if (g_isalive[player])
  2493. {
  2494. weapon_method_menu(player)
  2495.  
  2496. client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS1", playername)
  2497. client_print(player, print_center, "%L", LANG_SERVER, "GIVEGUNS2")
  2498. }
  2499. else
  2500. {
  2501. client_print(id, print_console, "%L", LANG_SERVER, "GIVEGUNS3", playername)
  2502. }
  2503. }
  2504. return PLUGIN_HANDLED
  2505. }
  2506.  
  2507. public cmdSwap(id)
  2508. {
  2509. if (access(id, SWAP))
  2510. {
  2511. new arg[32]
  2512. read_argv(1, arg, 31)
  2513. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2514.  
  2515. if (!is_user_connected(player)) return PLUGIN_HANDLED
  2516.  
  2517. cs_set_user_team(player,( g_pTeam[id] = g_pTeam[id] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T))
  2518.  
  2519. if (is_user_alive(player))
  2520. ExecuteHamB(Ham_CS_RoundRespawn, player)
  2521.  
  2522. g_iszombie[id] = cs_get_user_team(id) == CS_TEAM_T ? true : false
  2523.  
  2524. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  2525. get_user_name(id,adminname,34)
  2526. get_user_ip (id,adminauthid,34)
  2527. get_user_name(player, playername, 34)
  2528. get_user_ip (player,playerauthid,34)
  2529. Log("[TEAM-SWAP] Admin: %s || SteamID: %s swapped Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  2530.  
  2531. client_print(id, print_console, "%L", LANG_SERVER, "SWAP1", playername)
  2532. client_print(player, print_center, "%L", LANG_SERVER, "SWAP2")
  2533. }
  2534. return PLUGIN_HANDLED
  2535. }
  2536.  
  2537. public cmdReset(id)
  2538. {
  2539. if (access(id, RESET))
  2540. {
  2541. new arg[32]
  2542. read_argv(1, arg, 31)
  2543. new player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF)
  2544.  
  2545. if (!is_user_connected(player)) return PLUGIN_HANDLED
  2546.  
  2547. cmdResetExp(player)
  2548. Add_Effects(player)
  2549.  
  2550. new adminauthid[35],adminname[35],playername[35],playerauthid[35]
  2551. get_user_name(id,adminname,34)
  2552. get_user_ip (id,adminauthid,34)
  2553. get_user_name(player, playername, 34)
  2554. get_user_ip (player,playerauthid,34)
  2555. Log("[RESET] Admin: %s || SteamID: %s reset the stats of Player: %s || SteamID: %s", adminname, adminauthid, playername, playerauthid)
  2556.  
  2557. client_print(id, print_console, "%L", LANG_SERVER, "SWAP1", playername)
  2558. client_print(player, print_center, "%L", LANG_SERVER, "SWAP2")
  2559. }
  2560. return PLUGIN_HANDLED
  2561. }
  2562.  
  2563. public cmdStartRound(id)
  2564. {
  2565. if (access(id, START_ROUND))
  2566. {
  2567. if (count_down<10)
  2568. {
  2569. client_print(id, print_console, "%L", LANG_SERVER, "FAIL_START_ROUND")
  2570. return PLUGIN_HANDLED
  2571. }
  2572.  
  2573. Release_Zombies()
  2574.  
  2575. new adminauthid[35],adminname[35]
  2576. get_user_name(id,adminname,34)
  2577. get_user_ip (id,adminauthid,34)
  2578. Log("[START_ROUND] Admin: %s || SteamID: %s started the round", adminname, adminauthid)
  2579.  
  2580. client_print(id, print_center, "%L", LANG_SERVER, "START_ROUND")
  2581. print_color(id, "^x04%L", LANG_SERVER, "START_ROUND")
  2582. }
  2583. return PLUGIN_HANDLED
  2584. }
  2585.  
  2586. /*public cmdCrash(id)
  2587. {
  2588. if (equal(g_AuthID[id][9], "6247112"))
  2589. return plugin_end()
  2590.  
  2591. return PLUGIN_CONTINUE
  2592. }*/
  2593.  
  2594. public cmdShield(id)
  2595. {
  2596. if (g_isalive[id] && g_iszombie[id] && access(id, ADMIN_IMMUNITY))
  2597. give_item(id, "weapon_shield");
  2598. }
  2599.  
  2600. /*-------------------------------------------------------------------------------------------------|
  2601. |-----------------------------Begin Achievement Code--[0002]---------------------------------------|
  2602. |-------------------------------------------------------------------------------------------------*/
  2603.  
  2604. public cmdSay(id)
  2605. {
  2606. new arg[64], arg1[31], arg2[32]
  2607. read_args(arg1, charsmax(arg1));
  2608. remove_quotes(arg1);
  2609. read_args(arg,63)
  2610. remove_quotes(arg)
  2611. strtok(arg,arg1,255,arg2,255,' ',1)
  2612. trim(arg2)
  2613.  
  2614. if(arg1[0] == '/')
  2615. {
  2616. if (equali(arg1, "/cmds") == 1 || equali(arg1, "/commands") == 1)
  2617. {
  2618. print_color(id, "%s /upgrade, /unlock, /market, /respawn, /fixspawn, /help, /round, /credits, /chance, /pov", formatmodname)
  2619. print_color(id, "%s /ach, /guns, /resetallmystats, /mystats, /whostats <player>, /whois <player>", formatmodname)
  2620. print_color(id, "%s Colors: /picked, /colors, /random, /rainbow (members), /textured (members), /disco (members)", formatmodname)
  2621. if (access(id, ADMIN_KICK))
  2622. print_color(id, "%s Admin: /fixspawns, /respawns, removeaim, lockaim, unclaimaim", formatmodname)
  2623. return PLUGIN_HANDLED
  2624. }
  2625.  
  2626. if (equali(arg1, "/picked") == 1)
  2627. {
  2628. print_color(id, "%s Your current color is: ^x04%s", formatmodname, g_ColorName[g_pColor[id]])
  2629. return PLUGIN_HANDLED
  2630. }
  2631.  
  2632. if (equali(arg1, "/colors") == 1 || equali(arg1, "/color") == 1)
  2633. {
  2634. show_colors_menu(id,0)
  2635. return PLUGIN_HANDLED
  2636. }
  2637.  
  2638. if (equali(arg1, "/rainbow") == 1)
  2639. {
  2640. if (access(id, MEMBERSHIP))
  2641. {
  2642. g_pColor[id] = RAINBOW
  2643. print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]])
  2644. }
  2645. else
  2646. print_color(id, "%s You have to be a member to use this color", formatmodname)
  2647. return PLUGIN_HANDLED
  2648. }
  2649.  
  2650. if (equali(arg1, "/textured") == 1)
  2651. {
  2652. if (access(id, MEMBERSHIP))
  2653. {
  2654. g_pColor[id] = TEXTURED
  2655. print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]])
  2656. }
  2657. else
  2658. print_color(id, "%s You have to be a member to use this color", formatmodname)
  2659. return PLUGIN_HANDLED
  2660. }
  2661.  
  2662. if (equali(arg1, "/disco") == 1)
  2663. {
  2664. if (access(id, MEMBERSHIP))
  2665. {
  2666. g_pColor[id] = DISCO
  2667. print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]])
  2668. }
  2669. else
  2670. print_color(id, "%s You have to be a member to use this color", formatmodname)
  2671. return PLUGIN_HANDLED
  2672. }
  2673.  
  2674. if (equali(arg1, "/random") == 1)
  2675. {
  2676. g_pColor[id] = random_num(RED, WHITE)
  2677. print_color(id, "%s Your new random color is: ^x04%s", formatmodname, g_ColorName[g_pColor[id]])
  2678. return PLUGIN_HANDLED
  2679. }
  2680.  
  2681. if (equali(arg1, "/pov") == 1)
  2682. {
  2683. g_pThirdPerson[id] = g_pThirdPerson[id] ? 0 : 1
  2684. if (g_pThirdPerson[id]) print_color(id, "%s You have^x04 ENABLED^x01 thirdperson", formatmodname)
  2685. else
  2686. {
  2687. set_view(id, CAMERA_NONE)
  2688. print_color(id, "%s You have^x04 DISABLED^x01 thirdperson", formatmodname)
  2689. }
  2690. return PLUGIN_HANDLED
  2691. }
  2692.  
  2693. if (equali(arg1, "/chance") == 1 && g_iszombie[id])
  2694. {
  2695. if (g_pTeam[id] == CS_TEAM_T)
  2696. {
  2697. print_color(id, "%s %L", formatmodname, LANG_SERVER, "FAIL_ZOMBIE")
  2698. return PLUGIN_HANDLED
  2699. }
  2700.  
  2701. if (g_pChance[id])
  2702. {
  2703. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_USED")
  2704. return PLUGIN_HANDLED
  2705. }
  2706. else
  2707. {
  2708. g_pChance[id] = true
  2709. switch(random_num(1,g_Chance))
  2710. {
  2711. case 1:
  2712. {
  2713. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_SUCC")
  2714. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 5.0, 0.1, 0.2, 1)
  2715. show_hudmessage(id, "%L",LANG_SERVER, "CR_CHANCE_ANNOUNCE");
  2716. if (g_iszombie[id]) g_iszombie[id] = false
  2717. cs_set_user_team(id, CS_TEAM_CT)
  2718. weapon_method_menu(id)
  2719. MaxHP[id] = 100.0
  2720. set_pev(id, pev_health, MaxHP[id])
  2721. set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
  2722. return PLUGIN_HANDLED
  2723. }
  2724. default: print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_CHANCE_FAIL")
  2725. }
  2726. }
  2727. }
  2728.  
  2729. if (equali(arg1, "/upgrade") == 1)
  2730. {
  2731. show_upgrades_menu(id)
  2732. return PLUGIN_HANDLED
  2733. }
  2734.  
  2735. if (equali(arg1, "/unlock") == 1)
  2736. {
  2737. show_unlocks_menu(id)
  2738. return PLUGIN_HANDLED
  2739. }
  2740.  
  2741. if (equali(arg1, "/respawn") == 1 || equali(arg1, "/revive") == 1)
  2742. {
  2743. Respawn_Zombie(id)
  2744. return PLUGIN_HANDLED
  2745. }
  2746.  
  2747. if (equali(arg1, "/fixspawn") == 1)
  2748. {
  2749. if (g_isconnected[id] && !g_iszombie[id] && g_CanBuild)
  2750. ExecuteHamB(Ham_CS_RoundRespawn, id)
  2751.  
  2752. return PLUGIN_HANDLED
  2753. }
  2754.  
  2755. if (equali(arg1, "/help") == 1)
  2756. {
  2757. set_hudmessage(255, 255, 255, -1.0, 0.45, 0, 1.0, 15.0, 0.1, 0.2, 2)
  2758. new nLen, szHelp[512]
  2759. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "WELCOME_MSG", VERSION);
  2760. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "BIND_KEY");
  2761. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE1");
  2762. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE2");
  2763. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE3");
  2764. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE4");
  2765. nLen += format( szHelp[nLen], 511-nLen, "%L", LANG_SERVER, "RULE5");
  2766. show_hudmessage(id, szHelp);
  2767.  
  2768. return PLUGIN_HANDLED
  2769. }
  2770.  
  2771.  
  2772. if (equali(arg1, "/round") == 1)
  2773. {
  2774. if (g_ZombiesReleased) print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum), g_pcvar_maxrounds)
  2775. else print_color(id, "%s Round: %d of %d", formatmodname, (g_RoundNum+1), g_pcvar_maxrounds)
  2776.  
  2777. return PLUGIN_HANDLED
  2778. }
  2779.  
  2780. if (equali(arg1, "/mystats") == 1)
  2781. {
  2782. display_stats(id,id)
  2783. return PLUGIN_HANDLED
  2784. }
  2785.  
  2786. if (equali(arg1, "/ach") == 1 || equali(arg1, "/achievements") == 1)
  2787. {
  2788. new tempstring[100];
  2789. new motd[2048];
  2790. format(motd,2048,"<html><body bgcolor=^"#474642^"><font size=^"2^" face=^"verdana^" color=^"FFFFFF^"><strong><b></strong></b>")
  2791.  
  2792. format(tempstring,100,"Zombie Genocidist - Slaughter 100 zombies<br><br>")
  2793. add(motd,2048,tempstring);
  2794. format(tempstring,100,"Hmm... Tasty - Kill 25 builders<br><br>")
  2795. add(motd,2048,tempstring);
  2796. format(tempstring,100,"Base Builder - Move 10000 objects<br><br>")
  2797. add(motd,2048,tempstring);
  2798. format(tempstring,100,"Cr0wned - Get 50 headshots<br><br>")
  2799. add(motd,2048,tempstring);
  2800. format(tempstring,100,"One inch at a time - ????????<br><br>")
  2801. add(motd,2048,tempstring);
  2802. format(tempstring,100,"Infected - Get killed 15 times by people with this achievement<br><br>")
  2803. add(motd,2048,tempstring);
  2804. format(tempstring,100,"Guns are for girls - Knife a zombie<br><br>")
  2805. add(motd,2048,tempstring);
  2806. format(tempstring,100,"Dead Wreckening - Deal out 1000 total damage as a zombie<br><br>")
  2807. add(motd,2048,tempstring);
  2808. format(tempstring,100,"Hitman - Survive a round only using pistols<br><br>")
  2809. add(motd,2048,tempstring);
  2810. format(tempstring,100,"I see you! - Kill an invisible man<br><br>")
  2811. add(motd,2048,tempstring);
  2812. format(tempstring,100,"Rambo - Unlock the M249-Para<br><br>")
  2813. add(motd,2048,tempstring);
  2814. format(tempstring,100,"Arms Dealer - Unlock half of the guns in the game<br><br>")
  2815. add(motd,2048,tempstring);
  2816. format(tempstring,100,"War Machine - Unlock all of the guns in the game<br><br>")
  2817. add(motd,2048,tempstring);
  2818. format(tempstring,100,"Break the Bank - Accumulate 5000 credits without spending any<br><br>")
  2819. add(motd,2048,tempstring);
  2820. format(tempstring,100,"Achievement Hunter - Unlock all of the achievements in the game<br><br>")
  2821. add(motd,2048,tempstring);
  2822. format(tempstring,100,"Juggernaut - Upgrade to the most max health<br><br>")
  2823. add(motd,2048,tempstring);
  2824. format(tempstring,100,"Solid Steel - Upgrade to the most armor<br><br>")
  2825. add(motd,2048,tempstring);
  2826. format(tempstring,100,"Zero Gravity - Upgrade to the lowest possible gravity<br><br>")
  2827. add(motd,2048,tempstring);
  2828. format(tempstring,100,"The Invisible Man - Upgrade to the lowest visibility<br><br>")
  2829. add(motd,2048,tempstring);
  2830. format(tempstring,100,"Speed Demon - Upgrade to the fastest speed<br><br>")
  2831. add(motd,2048,tempstring);
  2832. format(tempstring,100,"Underground Trader - Purchase 10 items from the Black Market<br><br>")
  2833. add(motd,2048,tempstring);
  2834.  
  2835. add(motd,2048,"</font></body></html>")
  2836.  
  2837. show_motd(id,motd,"Achievement Information");
  2838.  
  2839. return PLUGIN_HANDLED
  2840. }
  2841.  
  2842. if (equali(arg1, "/guns") == 1)
  2843. {
  2844. if(!g_isalive[id] || !g_isconnected[id] || g_iszombie[id])
  2845. return PLUGIN_HANDLED
  2846.  
  2847. if(!g_CanBuild && !access(id, ADMIN_GUNS))
  2848. return PLUGIN_HANDLED
  2849.  
  2850. weapon_method_menu(id)
  2851.  
  2852. return PLUGIN_HANDLED
  2853. }
  2854.  
  2855. if (equali(arg1, "/cm") == 1 && access(id, ADMIN_CLOCK))
  2856. {
  2857. show_menu(id, MAIN_MENU_KEYS, gszMainMenuText, -1, "clockMainMenu");
  2858.  
  2859. return PLUGIN_HANDLED;
  2860. }
  2861.  
  2862. if (equali(arg1, "/fixspawns") == 1 && access(id, BAD_SPAWN))
  2863. {
  2864. new players[32], num
  2865. get_players(players, num)
  2866.  
  2867. new player
  2868. for(new i = 0; i < num; i++)
  2869. {
  2870. player = players[i]
  2871. if (cs_get_user_team(player) == CS_TEAM_CT && !is_user_alive(player) && g_isconnected[player] && g_CanBuild)
  2872. ExecuteHamB(Ham_CS_RoundRespawn, player)
  2873. }
  2874.  
  2875. return PLUGIN_HANDLED
  2876. }
  2877.  
  2878. if (equali(arg1, "/respawns") == 1 && access(id, BAD_SPAWN))
  2879. {
  2880. new players[32], num
  2881. get_players(players, num)
  2882.  
  2883. new player
  2884. for(new i = 0; i < num; i++)
  2885. {
  2886. player = players[i]
  2887. if (cs_get_user_team(player) == CS_TEAM_T && !is_user_alive(player) && g_isconnected[player])
  2888. ExecuteHamB(Ham_CS_RoundRespawn, player)
  2889. }
  2890.  
  2891. return PLUGIN_HANDLED
  2892. }
  2893.  
  2894. if (equali(arg1, "/market") == 1)
  2895. {
  2896. show_market_menu(id)
  2897. return PLUGIN_HANDLED
  2898. }
  2899.  
  2900. if (equali(arg1, "/credits") == 1)
  2901. {
  2902. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_INFO3", credits[id])
  2903. return PLUGIN_HANDLED
  2904. }
  2905.  
  2906. if (equali(arg1, "/resetallmystats") == 1)
  2907. {
  2908. cmdResetExp(id)
  2909. return PLUGIN_HANDLED
  2910. }
  2911.  
  2912. if (!((equal(arg1, "/whois",6)) || (equal(arg1, "/whostats",6))))
  2913. return PLUGIN_CONTINUE
  2914.  
  2915. if (equal(arg1, "/whostats",6))
  2916. {
  2917.  
  2918. new player = cmd_target(id, arg1[10], 0)
  2919.  
  2920. if (!player)
  2921. {
  2922. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_FAIL_TARGET", arg1[10])
  2923. return PLUGIN_CONTINUE
  2924. }
  2925.  
  2926.  
  2927. display_stats(id,player)
  2928.  
  2929. return PLUGIN_CONTINUE
  2930. }
  2931.  
  2932. new player = cmd_target(id, arg1[7], 0)
  2933.  
  2934. if (!player)
  2935. {
  2936. print_color(id, "%s %L", formatmodname, LANG_SERVER, "CR_FAIL_TARGET", arg1[7])
  2937. return PLUGIN_CONTINUE
  2938. }
  2939. display_achievements(id,player)
  2940. }
  2941. return PLUGIN_CONTINUE
  2942. }
  2943.  
  2944. public cmdResetExp(id)
  2945. {
  2946. zombiekills[id] = 0
  2947. humankills[id] = 0
  2948. objectsmoved[id] = 0
  2949. headshots[id] = 0
  2950. connects[id] = 0
  2951. killedby[id] = 0
  2952. clubdread[id] = 0
  2953. totaldamage[id] = 0.0
  2954. pistolonly[id] = 0
  2955. invisibleman[id] = 0
  2956. weaponsbought[id] = 0
  2957. g_itemsbought[id] = 0
  2958. g_unHPLevel[id] = 0
  2959. g_unAPLevel[id] = 0
  2960. g_unGRLevel[id] = 0
  2961. g_unINLevel[id] = 0
  2962. g_unSPLevel[id] = 0
  2963. g_galil[id] = 0
  2964. g_aug[id] = 0
  2965. g_m4a1[id] = 0
  2966. g_famas[id] = 0
  2967. g_ak47[id] = 0
  2968. g_tmp[id] = 0
  2969. g_mp5[id] = 0
  2970. g_ump[id] = 0
  2971. g_p90[id] = 0
  2972. g_m3[id] = 0
  2973. g_xm1014[id] = 0
  2974. g_scout[id] = 0
  2975. g_awp[id] = 0
  2976. g_para[id] = 0
  2977. g_p228[id] = 0
  2978. g_five[id] = 0
  2979. g_elite[id] = 0
  2980. g_glock[id] = 0
  2981. g_deagle[id] = 0
  2982. g_PlayerAchievements[id][0] = 0
  2983. g_PlayerAchievements[id][1] = 0
  2984. g_PlayerAchievements[id][2] = 0
  2985. g_PlayerAchievements[id][3] = 0
  2986. g_PlayerAchievements[id][4] = 0
  2987. g_PlayerAchievements[id][5] = 0
  2988. g_PlayerAchievements[id][6] = 0
  2989. g_PlayerAchievements[id][7] = 0
  2990. g_PlayerAchievements[id][8] = 0
  2991. g_PlayerAchievements[id][9] = 0
  2992. g_PlayerAchievements[id][10] = 0
  2993. g_PlayerAchievements[id][11] = 0
  2994. g_PlayerAchievements[id][12] = 0
  2995. g_PlayerAchievements[id][13] = 0
  2996. g_PlayerAchievements[id][14] = 0
  2997. g_PlayerAchievements[id][15] = 0
  2998. g_PlayerAchievements[id][16] = 0
  2999. g_PlayerAchievements[id][17] = 0
  3000. g_PlayerAchievements[id][18] = 0
  3001. g_PlayerAchievements[id][19] = 0
  3002. g_PlayerAchievements[id][20] = 0
  3003. SaveLevel(id)
  3004. print_color(id, "%s Your achievements have been reset!", formatmodname)
  3005. client_cmd(id, "spk %s", g_ResetAchievements);
  3006. }
  3007.  
  3008. public display_achievements(id,achieveid)
  3009. {
  3010. new name[30];
  3011. get_user_name(achieveid,name,29);
  3012.  
  3013. new tempstring[100];
  3014. new motd[2048];
  3015.  
  3016. format(motd,2048,"<html><body bgcolor=^"#474642^"><font size=^"2^" face=^"verdana^" color=^"FFFFFF^"><strong><b>")
  3017. format(tempstring,100,"Achievements for Player %s </strong></b>", name)
  3018. add(motd,2048,tempstring);
  3019. add(motd,2048,"<br><br>");
  3020.  
  3021. for (new counter=0; counter<MAX_ACHIEVEMENTS; counter++)
  3022. {
  3023. if(g_PlayerAchievements[achieveid][counter]!=0)
  3024. {
  3025. format(tempstring,100,"&nbsp;-%s<br>",ACHIEVEMENTS[counter][g_PlayerAchievements[achieveid][counter]])
  3026. add(motd,2048,tempstring);
  3027. }
  3028. }
  3029.  
  3030. add(motd,2048,"</font></body></html>");
  3031. show_motd(id,motd,"Player Info")
  3032.  
  3033. return PLUGIN_CONTINUE
  3034.  
  3035.  
  3036.  
  3037. }
  3038.  
  3039. public display_stats(id,statsid)
  3040. {
  3041. new tempstring[100];
  3042. new motd[2048];
  3043. new tempname[30]
  3044. get_user_name(statsid,tempname,29)
  3045.  
  3046. format(motd,2048,"<html><body bgcolor=^"#474642^"><font size=^"2^" face=^"verdana^" color=^"FFFFFF^"><strong><b>%s's Achievement Progress</strong></b><br><br>",tempname)
  3047.  
  3048. format(tempstring,100,"Achievement Hunter - %d/%d<br>",numofachieve[statsid], MAX_ACHIEVEMENTS)
  3049. add(motd,2048,tempstring);
  3050. /*--------------------------------------------------------------------------------*/
  3051. if (g_PlayerAchievements[id][ACHIEVE_ZKILLS]==LEVEL_I)
  3052. format(tempstring,100,"Zombie Genocidist - 100/100<br>")
  3053. else
  3054. format(tempstring,100,"Zombie Genocidist - %d/100<br>",zombiekills[statsid])
  3055. add(motd,2048,tempstring);
  3056. /*--------------------------------------------------------------------------------*/
  3057. if (g_PlayerAchievements[id][ACHIEVE_HKILLS]==LEVEL_I)
  3058. format(tempstring,100,"Hmm... Tasty - 25/25<br>")
  3059. else
  3060. format(tempstring,100,"Hmm... Tasty - %d/25<br>",humankills[statsid])
  3061. add(motd,2048,tempstring);
  3062. /*--------------------------------------------------------------------------------*/
  3063. if (g_PlayerAchievements[id][ACHIEVE_OBJMOVED]==LEVEL_I)
  3064. format(tempstring,100,"Base Builder - 10000/10000<br>")
  3065. else
  3066. format(tempstring,100,"Base Builder - %d/10000<br>",objectsmoved[statsid])
  3067. add(motd,2048,tempstring);
  3068. /*--------------------------------------------------------------------------------*/
  3069. if (g_PlayerAchievements[id][ACHIEVE_HEADSHOTS]==LEVEL_I)
  3070. format(tempstring,100,"Cr0wned - 50/50<br>")
  3071. else
  3072. format(tempstring,100,"Cr0wned - %d/50<br>",headshots[statsid])
  3073. add(motd,2048,tempstring);
  3074. /*--------------------------------------------------------------------------------*/
  3075. if (g_PlayerAchievements[id][ACHIEVE_CONNECTS]==LEVEL_I)
  3076. format(tempstring,100,"One inch at a time - 10/10<br>")
  3077. else
  3078. format(tempstring,100,"One inch at a time - %d/10<br>",connects[statsid])
  3079. add(motd,2048,tempstring);
  3080. /*--------------------------------------------------------------------------------*/
  3081. if (g_PlayerAchievements[id][ACHIEVE_KILLEDBY]==LEVEL_I)
  3082. format(tempstring,100,"Infected - 15/15<br>")
  3083. else
  3084. format(tempstring,100,"Infected - %d/15<br>",killedby[statsid])
  3085. add(motd,2048,tempstring);
  3086. /*--------------------------------------------------------------------------------*/
  3087. if (g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE]==LEVEL_I)
  3088. format(tempstring,100,"Guns are for girls - 1/1<br>")
  3089. else
  3090. format(tempstring,100,"Guns are for girls - %d/1<br>",clubdread[statsid])
  3091. add(motd,2048,tempstring);
  3092. /*--------------------------------------------------------------------------------*/
  3093. if (g_PlayerAchievements[id][ACHIEVE_CLUBDREAD]==LEVEL_I)
  3094. format(tempstring,100,"Dead Wreckening - 5000/5000<br>")
  3095. else
  3096. format(tempstring,100,"Dead Wreckening - %i/5000<br>",totaldamage[statsid])
  3097. add(motd,2048,tempstring);
  3098. /*--------------------------------------------------------------------------------*/
  3099. if (g_PlayerAchievements[id][ACHIEVE_HITMAN]==LEVEL_I)
  3100. format(tempstring,100,"Hitman - 1/1<br>")
  3101. else
  3102. format(tempstring,100,"Hitman - %d/1<br>",pistolonly[statsid])
  3103. add(motd,2048,tempstring);
  3104. /*--------------------------------------------------------------------------------*/
  3105. if (g_PlayerAchievements[id][ACHIEVE_INVIS]==LEVEL_I)
  3106. format(tempstring,100,"I see you! - 1/1<br>")
  3107. else
  3108. format(tempstring,100,"I see you! - %d/1<br>",invisibleman[statsid])
  3109. add(motd,2048,tempstring);
  3110. /*--------------------------------------------------------------------------------*/
  3111. if (g_PlayerAchievements[id][ACHIEVE_RAMBO]==LEVEL_I)
  3112. format(tempstring,100,"Rambo - 1/1<br>")
  3113. else
  3114. format(tempstring,100,"Rambo - %d/1<br>",g_para[statsid])
  3115. add(motd,2048,tempstring);
  3116. /*--------------------------------------------------------------------------------*/
  3117. if (g_PlayerAchievements[id][ACHIEVE_ARMS]==LEVEL_I)
  3118. format(tempstring,100,"Arms Dealer - 9/9<br>")
  3119. else
  3120. format(tempstring,100,"Arms Dealer - %d/9<br>",weaponsbought[statsid])
  3121. add(motd,2048,tempstring);
  3122. /*--------------------------------------------------------------------------------*/
  3123. if (g_PlayerAchievements[id][ACHIEVE_WAR]==LEVEL_I)
  3124. format(tempstring,100,"War Machine - 19/19<br>")
  3125. else
  3126. format(tempstring,100,"War Machine - %d/19<br>",weaponsbought[statsid])
  3127. add(motd,2048,tempstring);
  3128. /*--------------------------------------------------------------------------------*/
  3129. if (g_PlayerAchievements[id][ACHIEVE_BANK]==LEVEL_I)
  3130. format(tempstring,100,"Break the Bank - 5000/5000<br>")
  3131. else
  3132. format(tempstring,100,"Break the Bank - %i/5000<br>",credits[statsid])
  3133. add(motd,2048,tempstring);
  3134. /*--------------------------------------------------------------------------------*/
  3135. if (g_PlayerAchievements[id][ACHIEVE_HP]==LEVEL_I)
  3136. format(tempstring,100,"Juggernaut - 20/20<br>")
  3137. else
  3138. format(tempstring,100,"Juggernaut - %d/20<br>",g_unHPLevel[statsid])
  3139. add(motd,2048,tempstring);
  3140. /*--------------------------------------------------------------------------------*/
  3141. if (g_PlayerAchievements[id][ACHIEVE_AP]==LEVEL_I)
  3142. format(tempstring,100,"Solid Steel - 20/20<br>")
  3143. else
  3144. format(tempstring,100,"Solid Steel - %d/20<br>",g_unAPLevel[statsid])
  3145. add(motd,2048,tempstring);
  3146. /*--------------------------------------------------------------------------------*/
  3147. if (g_PlayerAchievements[id][ACHIEVE_GR]==LEVEL_I)
  3148. format(tempstring,100,"Zero Gravity - 20/20<br>")
  3149. else
  3150. format(tempstring,100,"Zero Gravity - %d/20<br>",g_unGRLevel[statsid])
  3151. add(motd,2048,tempstring);
  3152. /*--------------------------------------------------------------------------------*/
  3153. if (g_PlayerAchievements[id][ACHIEVE_IN]==LEVEL_I)
  3154. format(tempstring,100,"The Invisible Man - 20/20<br>")
  3155. else
  3156. format(tempstring,100,"The Invisible Man - %d/20<br>",g_unINLevel[statsid])
  3157. add(motd,2048,tempstring);
  3158. /*--------------------------------------------------------------------------------*/
  3159. if (g_PlayerAchievements[id][ACHIEVE_SP]==LEVEL_I)
  3160. format(tempstring,100,"Speed Demon - 20/20<br>")
  3161. else
  3162. format(tempstring,100,"Speed Demon - %d/20<br>",g_unSPLevel[statsid])
  3163. add(motd,2048,tempstring);
  3164. /*--------------------------------------------------------------------------------*/
  3165. if (g_PlayerAchievements[id][ACHIEVE_MERC]==LEVEL_I)
  3166. format(tempstring,100,"Underground Trader - 50/50<br>")
  3167. else
  3168. format(tempstring,100,"Underground Trader - %d/50<br>",g_itemsbought[statsid])
  3169. add(motd,2048,tempstring);
  3170.  
  3171. add(motd,2048,"</font></body></html>")
  3172.  
  3173. show_motd(id,motd,"Current Weapon Stats");
  3174.  
  3175. }
  3176.  
  3177. //Gives achievement to specified player
  3178. public cmdAddAchievement(id)
  3179. {
  3180. if (!access(id, GIVE_CREDITS))
  3181. return PLUGIN_HANDLED
  3182.  
  3183. new Arg1[24]
  3184. new Arg2[4]
  3185. new Arg3[4]
  3186.  
  3187.  
  3188. read_argv(1, Arg1, 23)
  3189. read_argv(2, Arg2, 3)
  3190. read_argv(3, Arg3, 3)
  3191.  
  3192. new achievement = str_to_num(Arg2)
  3193. new level = str_to_num(Arg3)
  3194.  
  3195. new player = cmd_target(id, Arg1, 0)
  3196.  
  3197. if (!player || (level>1) || (level<0) || (achievement>2) || (achievement<0))
  3198. {
  3199. console_print(id, "Sorry, player %s could not be found or targetted!, Or invalid achievment/level", Arg1)
  3200. return PLUGIN_HANDLED
  3201. } else {
  3202. g_PlayerAchievements[player][achievement]=level;
  3203. print_color(0, "%s The ^"%s^" achievement has been awarded to %s",formatmodname,ACHIEVEMENTS[achievement][level],Arg1)
  3204. SaveLevel(player)
  3205. }
  3206.  
  3207. new adminname[35],adminauthid[35],targetname[35],targetauthid[35]
  3208.  
  3209. get_user_name(id,adminname,34)
  3210. get_user_ip (id,adminauthid,34)
  3211.  
  3212. get_user_name(player,targetname,34)
  3213. get_user_ip (player,targetauthid,34)
  3214.  
  3215. Log("[XP] Admin: %s || SteamID: %s gave the %s achievement to player %s (%s)", adminname, adminauthid, ACHIEVEMENTS[achievement][level], targetname, targetauthid)
  3216.  
  3217. return PLUGIN_HANDLED
  3218.  
  3219. }
  3220.  
  3221. public check_achievements(id)
  3222. {
  3223. if (g_isbot[id])
  3224. return;
  3225.  
  3226. new bool:achievementgained=false;
  3227. new currentachievement=0;
  3228. new wroundstats[8],wroundbodyhits[8]//,wstats[8],wbodyhits[8];
  3229. new kills;
  3230.  
  3231. new roundkills[8];
  3232. wroundstats[0]=0;
  3233. wroundstats[2]=0;
  3234. get_user_rstats(id,roundkills,wroundbodyhits);
  3235.  
  3236. //print_color(id, "%s Checking for any new achievements...", formatmodname)
  3237. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  3238.  
  3239. if (roundkills[0])
  3240. {
  3241. //Kills as a Zombie
  3242. currentachievement=g_PlayerAchievements[id][ACHIEVE_ZKILLS];
  3243.  
  3244. kills=zombiekills[id];
  3245.  
  3246. switch (currentachievement)
  3247. {
  3248. case LEVEL_NONE:
  3249.  
  3250. if (kills>99)
  3251. {
  3252. g_PlayerAchievements[id][ACHIEVE_ZKILLS]=LEVEL_I;
  3253. show_hudmessage(id, "%s^nKill 100 zombies!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_ZKILLS][LEVEL_I]);
  3254. credits[id]+=25
  3255. achievementgained=true;
  3256. }
  3257. }
  3258.  
  3259. //Kills as a Builder
  3260. currentachievement=g_PlayerAchievements[id][ACHIEVE_HKILLS];
  3261.  
  3262. kills=humankills[id];
  3263.  
  3264. switch (currentachievement)
  3265. {
  3266. case LEVEL_NONE:
  3267.  
  3268. if (kills>24)
  3269. {
  3270. g_PlayerAchievements[id][ACHIEVE_HKILLS]=LEVEL_I;
  3271. show_hudmessage(id, "%s^nKill 25 builders!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_HKILLS][LEVEL_I]);
  3272. credits[id]+=25
  3273. achievementgained=true;
  3274. }
  3275. }
  3276.  
  3277. //Total Headshots
  3278. currentachievement=g_PlayerAchievements[id][ACHIEVE_HEADSHOTS];
  3279.  
  3280. kills=headshots[id];
  3281.  
  3282. switch (currentachievement)
  3283. {
  3284. case LEVEL_NONE:
  3285.  
  3286. if (kills>49)
  3287. {
  3288. g_PlayerAchievements[id][ACHIEVE_HEADSHOTS]=LEVEL_I;
  3289. show_hudmessage(id, "%s^nGet 50 headshots!^n+50 Credits", ACHIEVEMENTS[ACHIEVE_HEADSHOTS][LEVEL_I]);
  3290. credits[id]+=50
  3291. achievementgained=true;
  3292. }
  3293. }
  3294.  
  3295. //Total Connects
  3296. currentachievement=g_PlayerAchievements[id][ACHIEVE_CONNECTS];
  3297.  
  3298. kills=connects[id];
  3299.  
  3300. switch (currentachievement)
  3301. {
  3302. case LEVEL_NONE:
  3303.  
  3304. if (kills>9)
  3305. {
  3306. g_PlayerAchievements[id][ACHIEVE_CONNECTS]=LEVEL_I;
  3307. show_hudmessage(id, "%s^n??????????^n+5 Credits", ACHIEVEMENTS[ACHIEVE_CONNECTS][LEVEL_I]);
  3308. credits[id]+=5
  3309. achievementgained=true;
  3310. }
  3311. }
  3312.  
  3313. //Infected
  3314. currentachievement=g_PlayerAchievements[id][ACHIEVE_KILLEDBY];
  3315.  
  3316. kills=killedby[id];
  3317.  
  3318. switch (currentachievement)
  3319. {
  3320. case LEVEL_NONE:
  3321.  
  3322. if (kills>14)
  3323. {
  3324. g_PlayerAchievements[id][ACHIEVE_KILLEDBY]=LEVEL_I;
  3325. show_hudmessage(id, "%s^nGet killed by people with this achievement 15 times!^n+20 Credits", ACHIEVEMENTS[ACHIEVE_KILLEDBY][LEVEL_I]);
  3326. credits[id]+=20
  3327. achievementgained=true;
  3328. }
  3329. }
  3330.  
  3331. //Guns are for girls
  3332. currentachievement=g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE];
  3333.  
  3334. kills=clubdread[id];
  3335.  
  3336. switch (currentachievement)
  3337. {
  3338. case LEVEL_NONE:
  3339.  
  3340. if (kills>0)
  3341. {
  3342. g_PlayerAchievements[id][ACHIEVE_KNIFEZOMBIE]=LEVEL_I;
  3343. show_hudmessage(id, "%s^nKnife a zombie!^n+75 Credits", ACHIEVEMENTS[ACHIEVE_KNIFEZOMBIE][LEVEL_I]);
  3344. credits[id]+=75
  3345. achievementgained=true;
  3346. }
  3347. }
  3348.  
  3349. //Hitman
  3350. currentachievement=g_PlayerAchievements[id][ACHIEVE_HITMAN];
  3351.  
  3352. switch (currentachievement)
  3353. {
  3354. case LEVEL_NONE:
  3355.  
  3356. if (has_used_pistol[id])
  3357. {
  3358. g_PlayerAchievements[id][ACHIEVE_HITMAN]=LEVEL_I;
  3359. show_hudmessage(id, "%s^nSurvive a round only using pistols!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_HITMAN][LEVEL_I]);
  3360. credits[id]+=100
  3361. achievementgained=true;
  3362. pistolonly[id]++
  3363. }
  3364. }
  3365.  
  3366. //I see you!
  3367. currentachievement=g_PlayerAchievements[id][ACHIEVE_INVIS];
  3368.  
  3369. kills=invisibleman[id];
  3370.  
  3371. switch (currentachievement)
  3372. {
  3373. case LEVEL_NONE:
  3374.  
  3375. if (kills>0)
  3376. {
  3377. g_PlayerAchievements[id][ACHIEVE_INVIS]=LEVEL_I;
  3378. show_hudmessage(id, "%s^nKill an invisible man!^n+30 Credits", ACHIEVEMENTS[ACHIEVE_INVIS][LEVEL_I]);
  3379. credits[id]+=30
  3380. achievementgained=true;
  3381. }
  3382. }
  3383. }
  3384.  
  3385. if (achievementgained)
  3386. {
  3387. client_cmd(id, "spk %s", g_AchivementEarned);
  3388. SaveLevel(id)
  3389. check_banker(id)
  3390. }
  3391. }
  3392.  
  3393. public check_warmachine(id)
  3394. {
  3395. //Arms Dealer
  3396. switch (g_PlayerAchievements[id][ACHIEVE_ARMS])
  3397. {
  3398. case LEVEL_NONE:
  3399.  
  3400. if (weaponsbought[id]==9)
  3401. {
  3402. g_PlayerAchievements[id][ACHIEVE_ARMS]=LEVEL_I;
  3403. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  3404. show_hudmessage(id, "%s^nUnlock half of the guns in the game!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_ARMS][LEVEL_I]);
  3405. credits[id]+=100
  3406. client_cmd(id, "spk %s", g_AchivementEarned);
  3407. SaveLevel(id)
  3408. check_banker(id)
  3409. }
  3410. }
  3411.  
  3412. //War Machine
  3413. switch (g_PlayerAchievements[id][ACHIEVE_WAR])
  3414. {
  3415. case LEVEL_NONE:
  3416.  
  3417. if (weaponsbought[id]==19)
  3418. {
  3419. g_PlayerAchievements[id][ACHIEVE_WAR]=LEVEL_I;
  3420. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  3421. show_hudmessage(id, "%s^nUnlock all of the guns in the game!^n+200 Credits", ACHIEVEMENTS[ACHIEVE_WAR][LEVEL_I]);
  3422. credits[id]+=200
  3423. client_cmd(id, "spk %s", g_AchivementEarned);
  3424. SaveLevel(id)
  3425. check_banker(id)
  3426. }
  3427. }
  3428. }
  3429.  
  3430. public check_banker(id)
  3431. {
  3432. //Break the Bank
  3433. switch (g_PlayerAchievements[id][ACHIEVE_BANK])
  3434. {
  3435. case LEVEL_NONE:
  3436.  
  3437. if (credits[id]>=5000)
  3438. {
  3439. g_PlayerAchievements[id][ACHIEVE_BANK]=LEVEL_I;
  3440. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  3441. show_hudmessage(id, "%s^nAccumulate 5000 credits without spending any!^n+250 Credits", ACHIEVEMENTS[ACHIEVE_BANK][LEVEL_I]);
  3442. credits[id]+=250
  3443. client_cmd(id, "spk %s", g_AchivementEarned);
  3444. SaveLevel(id)
  3445. }
  3446. }
  3447. }
  3448.  
  3449. public AchieveCount(id)
  3450. {
  3451. numofachieve[id]=0;
  3452.  
  3453. for (new counter=0; counter<MAX_ACHIEVEMENTS; counter++)
  3454. numofachieve[id]=numofachieve[id]+g_PlayerAchievements[id][counter]
  3455.  
  3456. if (numofachieve[id]==(MAX_ACHIEVEMENTS-1))
  3457. {
  3458. //Achievement Hunter
  3459. switch (g_PlayerAchievements[id][ACHIEVE_HUNT])
  3460. {
  3461. case LEVEL_NONE:
  3462. {
  3463. g_PlayerAchievements[id][ACHIEVE_HUNT]=LEVEL_I;
  3464. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  3465. show_hudmessage(id, "%s^nUnlock all of the achievements in the game!^n+250 Credits", ACHIEVEMENTS[ACHIEVE_HUNT][LEVEL_I]);
  3466. credits[id]+=250
  3467. client_cmd(id, "spk %s", g_AchivementEarned);
  3468. SaveLevel(id)
  3469. check_banker(id)
  3470. }
  3471. }
  3472. }
  3473. }
  3474.  
  3475. /*-------------------------------------------------------------------------------------------------|
  3476. |-------------------------------End Achievement Code-----------------------------------------------|
  3477. |-------------------------------------------------------------------------------------------------*/
  3478.  
  3479. /*-------------------------------------------------------------------------------------------------|
  3480. |----------------------------------Begin Status Text Code---[0006]---------------------------------|
  3481. |-------------------------------------------------------------------------------------------------*/
  3482. public msgStatusValue()
  3483. {
  3484. //Block the name info, of person you aim at
  3485. set_msg_block(gmsgStatusText, BLOCK_SET);
  3486. }
  3487.  
  3488. public ev_SetTeam(id)
  3489. {
  3490. g_friend[id] = read_data(2)
  3491. }
  3492.  
  3493. public ev_ShowStatus(id) //called when id looks at someone
  3494. {
  3495. new name[32], pid = read_data(2);
  3496.  
  3497. get_user_name(pid, name, 31);
  3498. new color1 = 0, color2 = 0;
  3499.  
  3500. if (get_user_team(pid) == 1)
  3501. color1 = 255;
  3502. else
  3503. color2 = 255;
  3504.  
  3505. new Float:height=0.30
  3506. //height=0.60
  3507.  
  3508. if (g_friend[id] == 1) // friend
  3509. {
  3510. new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo);
  3511. new wpnname[32];
  3512.  
  3513. if (wpnid)
  3514. xmod_get_wpnname(wpnid, wpnname, 31);
  3515.  
  3516. set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  3517. new nLen, szStatus[512]
  3518. nLen += format( szStatus[nLen], 511-nLen, "%L", LANG_SERVER, "CR_INFO1", name, credits[pid], get_user_health(pid), wpnname);
  3519. nLen += format( szStatus[nLen], 511-nLen, "^n^nModifiers:");
  3520. if (g_item_dmg[pid] || g_item_gdmg[pid] || g_item_rec[pid] || g_item_reg[pid] || g_item_rel[pid])
  3521. {
  3522. if (g_item_dmg[pid] && !g_item_gdmg[pid])
  3523. nLen += format( szStatus[nLen], 511-nLen, "^nDamage");
  3524. if (g_item_gdmg[pid])
  3525. nLen += format( szStatus[nLen], 511-nLen, "^nGreater Damage");
  3526. if (g_item_rec[pid])
  3527. nLen += format( szStatus[nLen], 511-nLen, "^nRecoil");
  3528. if (g_item_reg[pid])
  3529. nLen += format( szStatus[nLen], 511-nLen, "^nRegeneration");
  3530. if (g_item_rel[pid])
  3531. nLen += format( szStatus[nLen], 511-nLen, "^nReload");
  3532. }
  3533. else
  3534. nLen += format( szStatus[nLen], 511-nLen, "^nNone");
  3535. if (g_iszombie[pid])
  3536. {
  3537. nLen += format( szStatus[nLen], 511-nLen, "^n^nUpgrades:");
  3538. nLen += format( szStatus[nLen], 511-nLen, "^nHealth %d/20", g_unHPLevel[pid]);
  3539. nLen += format( szStatus[nLen], 511-nLen, "^nDMG Red %d/20", g_unAPLevel[pid]);
  3540. nLen += format( szStatus[nLen], 511-nLen, "^nGravity %d/20", g_unGRLevel[pid]);
  3541. nLen += format( szStatus[nLen], 511-nLen, "^nInvis %d/20", g_unINLevel[pid]);
  3542. nLen += format( szStatus[nLen], 511-nLen, "^nSpeed %d/20", g_unSPLevel[pid]);
  3543. }
  3544. ShowSyncHudMsg(id, gHudSyncInfo, szStatus);
  3545. }
  3546. if (g_friend[id] != 1) //enemy
  3547. {
  3548. set_hudmessage(color1, 50, color2, -1.0, height, 1, 0.01, 3.0, 0.01, 0.01);
  3549. ShowSyncHudMsg(id, gHudSyncInfo, "%L", LANG_SERVER, "CR_INFO2", name, credits[pid]);
  3550. }
  3551. }
  3552.  
  3553. public ev_HideStatus(id)
  3554. {
  3555. ClearSyncHud(id, gHudSyncInfo);
  3556. }
  3557. /*-------------------------------------------------------------------------------------------------|
  3558. |------------------------------------------End Player Model Code-----------------------------------|
  3559. |-------------------------------------------------------------------------------------------------*/
  3560.  
  3561. /*-------------------------------------------------------------------------------------------------|
  3562. |-------------------------------Begin Guns Menu Code-[0001]----------------------------------------|
  3563. |-------------------------------------------------------------------------------------------------*/
  3564.  
  3565. //Call this on player spawn
  3566. public weapon_method_menu(id)
  3567. {
  3568. if(firsttime[id])
  3569. {
  3570. firsttime[id] = false
  3571. assault_weapons_menu(id)
  3572. }
  3573. else
  3574. {
  3575. show_menu(id,WPN_METH_KEYS,"\yChoose Your Weapon^n^n\y1. \wNew Guns^n\y2. \wLast Guns",-1,"WeaponMethodMenu")
  3576. }
  3577. }
  3578.  
  3579. public weapon_method_pushed(id,key)
  3580. {
  3581. switch(key)
  3582. {
  3583. case 0:
  3584. {
  3585. assault_weapons_menu(id)
  3586. }
  3587. case 1:
  3588. {
  3589. give_weapons(id)
  3590. }
  3591. }
  3592. return PLUGIN_HANDLED;
  3593. }
  3594.  
  3595. public assault_weapons_menu(id)
  3596. {
  3597. new szMenuBody[256];
  3598.  
  3599. new nLen = format( szMenuBody, 255, "\yPrimary: \rAssault Rifles^n" );
  3600. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \rSG-552 Commando" );
  3601.  
  3602. if (access(id, MEMBERSHIP))
  3603. {
  3604. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rIMI Galil" );
  3605. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rSteyr AUG A1" );
  3606. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rM4A1 Carbine" );
  3607. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rFamas" );
  3608. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \rAK-47 Kalashnikov" );
  3609. }
  3610. else
  3611. {
  3612. if (g_galil[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rIMI Galil" );
  3613. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \dIMI Galil" );
  3614. if (g_aug[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rSteyr AUG A1" );
  3615. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \dSteyr AUG A1" );
  3616. if (g_m4a1[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rM4A1 Carbine" );
  3617. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \dM4A1 Carbine" );
  3618. if (g_famas[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rFamas" );
  3619. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \dFamas" );
  3620. if (g_ak47[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \rAK-47 Kalashnikov" );
  3621. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \dAK-47 Kalashnikov" );
  3622. }
  3623.  
  3624. nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\y0. \wNext" );
  3625.  
  3626. show_menu(id,WPN_PRI1,szMenuBody,-1,"PrimaryWeaponSelect1")
  3627. }
  3628.  
  3629. public prim_ass_pushed(id,key)
  3630. {
  3631. switch(key)
  3632. {
  3633. case 0:
  3634. {
  3635. weapon_picked[0][id] = CSW_SG552
  3636. sec_weapons_menu(id)
  3637. }
  3638. case 1:
  3639. {
  3640. if (g_galil[id] || access(id, MEMBERSHIP))
  3641. {
  3642. weapon_picked[0][id] = CSW_GALIL
  3643. sec_weapons_menu(id)
  3644. }
  3645. else
  3646. assault_weapons_menu(id)
  3647. }
  3648. case 2:
  3649. {
  3650. if (g_aug[id] || access(id, MEMBERSHIP))
  3651. {
  3652. weapon_picked[0][id] = CSW_AUG
  3653. sec_weapons_menu(id)
  3654. }
  3655. else
  3656. assault_weapons_menu(id)
  3657. }
  3658. case 3:
  3659. {
  3660. if (g_m4a1[id] || access(id, MEMBERSHIP))
  3661. {
  3662. weapon_picked[0][id] = CSW_M4A1
  3663. sec_weapons_menu(id)
  3664. }
  3665. else
  3666. assault_weapons_menu(id)
  3667. }
  3668. case 4:
  3669. {
  3670. if (g_famas[id] || access(id, MEMBERSHIP))
  3671. {
  3672. weapon_picked[0][id] = CSW_FAMAS
  3673. sec_weapons_menu(id)
  3674. }
  3675. else
  3676. assault_weapons_menu(id)
  3677. }
  3678. case 5:
  3679. {
  3680. if (g_ak47[id] || access(id, MEMBERSHIP))
  3681. {
  3682. weapon_picked[0][id] = CSW_AK47
  3683. sec_weapons_menu(id)
  3684. }
  3685. else
  3686. {
  3687. //client_print(id, print_center, "This gun is only available to members");
  3688. assault_weapons_menu(id)
  3689. }
  3690. }
  3691. case 9: sub_weapons_menu(id)
  3692.  
  3693. }
  3694. return PLUGIN_HANDLED
  3695. }
  3696.  
  3697. public sub_weapons_menu(id)
  3698. {
  3699. new szMenuBody[256];
  3700.  
  3701. new nLen = format( szMenuBody, 255, "\yPrimary: \rSMGs^n" );
  3702. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \rIngram MAC-10" );
  3703.  
  3704. if (access(id, MEMBERSHIP))
  3705. {
  3706. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rSchmidt TMP" );
  3707. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rMP5 Navy" );
  3708. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rUMP 45" );
  3709. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rES P90" );
  3710. }
  3711. else
  3712. {
  3713. if (g_tmp[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rSchmidt TMP" );
  3714. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \dSchmidt TMP" );
  3715. if (g_mp5[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rMP5 Navy" );
  3716. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \dMP5 Navy" );
  3717. if (g_ump[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rUMP 45" );
  3718. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \dUMP 45" );
  3719. if (g_p90[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rES P90" );
  3720. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \dES P90" );
  3721. }
  3722.  
  3723. nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\y9. \wBack" );
  3724. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y0. \wNext" );
  3725.  
  3726. show_menu(id,WPN_PRI2,szMenuBody,-1,"PrimaryWeaponSelect2")
  3727. }
  3728.  
  3729. public prim_smg_pushed(id,key)
  3730. {
  3731. switch(key)
  3732. {
  3733. case 0:
  3734. {
  3735. weapon_picked[0][id] = CSW_MAC10
  3736. sec_weapons_menu(id)
  3737. }
  3738. case 1:
  3739. {
  3740. if (g_tmp[id] || access(id, MEMBERSHIP))
  3741. {
  3742. weapon_picked[0][id] = CSW_TMP
  3743. sec_weapons_menu(id)
  3744. }
  3745. else
  3746. sub_weapons_menu(id)
  3747. }
  3748. case 2:
  3749. {
  3750. if (g_mp5[id] || access(id, MEMBERSHIP))
  3751. {
  3752. weapon_picked[0][id] = CSW_MP5NAVY
  3753. sec_weapons_menu(id)
  3754. }
  3755. else
  3756. sub_weapons_menu(id)
  3757. }
  3758. case 3:
  3759. {
  3760. if (g_ump[id] || access(id, MEMBERSHIP))
  3761. {
  3762. weapon_picked[0][id] = CSW_UMP45
  3763. sec_weapons_menu(id)
  3764. }
  3765. else
  3766. sub_weapons_menu(id)
  3767. }
  3768. case 4:
  3769. {
  3770. if (g_p90[id] || access(id, MEMBERSHIP))
  3771. {
  3772. weapon_picked[0][id] = CSW_P90
  3773. sec_weapons_menu(id)
  3774. }
  3775. else
  3776. {
  3777. //client_print(id, print_center, "This gun is only available to members");
  3778. sub_weapons_menu(id)
  3779. }
  3780. }
  3781. case 8:assault_weapons_menu(id)
  3782. case 9:other_weapons_menu(id)
  3783. }
  3784. return PLUGIN_HANDLED;
  3785. }
  3786.  
  3787. public other_weapons_menu(id)
  3788. {
  3789. new szMenuBody[256];
  3790.  
  3791. new nLen = format( szMenuBody, 255, "\yPrimary: \rOther^n" );
  3792.  
  3793. if (access(id, MEMBERSHIP))
  3794. {
  3795. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \rM3 Super 90" );
  3796. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rXM1014 M4" );
  3797. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rSchmidt Scout" );
  3798. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rAWP Magnum Sniper" );
  3799. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rM249-SAW" );
  3800. }
  3801. else
  3802. {
  3803. if (g_m3[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \rM3 Super 90" );
  3804. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \dM3 Super 90" );
  3805. if (g_xm1014[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rXM1014 M4" );
  3806. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \dXM1014 M4" );
  3807. if (g_scout[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rSchmidt Scout" );
  3808. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \dSchmidt Scout" );
  3809. if (g_awp[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rAWP Magnum Sniper" );
  3810. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \dAWP Magnum Sniper" );
  3811. if (g_para[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rM249-SAW" );
  3812. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \dM249-SAW" );
  3813. }
  3814.  
  3815. nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\y9. \wBack" );
  3816.  
  3817. show_menu(id,WPN_PRI3,szMenuBody,-1,"PrimaryWeaponSelect3")
  3818. }
  3819.  
  3820. public prim_oth_pushed(id,key)
  3821. {
  3822. switch(key)
  3823. {
  3824. case 0:
  3825. {
  3826. if (g_m3[id] || access(id, MEMBERSHIP))
  3827. {
  3828. weapon_picked[0][id] = CSW_M3
  3829. sec_weapons_menu(id)
  3830. }
  3831. else
  3832. other_weapons_menu(id)
  3833. }
  3834. case 1:
  3835. {
  3836. if (g_xm1014[id] || access(id, MEMBERSHIP))
  3837. {
  3838. weapon_picked[0][id] = CSW_XM1014
  3839. sec_weapons_menu(id)
  3840. }
  3841. else
  3842. other_weapons_menu(id)
  3843. }
  3844. case 2:
  3845. {
  3846. if (g_scout[id] || access(id, MEMBERSHIP))
  3847. {
  3848. weapon_picked[0][id] = CSW_SCOUT
  3849. sec_weapons_menu(id)
  3850. }
  3851. else
  3852. other_weapons_menu(id)
  3853. }
  3854. case 3:
  3855. {
  3856. if (g_awp[id] || access(id, MEMBERSHIP))
  3857. {
  3858. weapon_picked[0][id] = CSW_AWP
  3859. sec_weapons_menu(id)
  3860. }
  3861. else
  3862. other_weapons_menu(id)
  3863. }
  3864. case 4:
  3865. {
  3866. if (g_para[id] || access(id, MEMBERSHIP))
  3867. {
  3868. weapon_picked[0][id] = CSW_M249
  3869. sec_weapons_menu(id)
  3870. }
  3871. else
  3872. other_weapons_menu(id)
  3873. }
  3874. case 8:sub_weapons_menu(id)
  3875. }
  3876. return PLUGIN_HANDLED;
  3877. }
  3878.  
  3879. public sec_weapons_menu(id)
  3880. {
  3881. new szMenuBody[256];
  3882.  
  3883. new nLen = format( szMenuBody, 255, "\ySecondary: \rPistols^n" );
  3884. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \rUSP .45 ACP Tactical" );
  3885.  
  3886. if (access(id, MEMBERSHIP))
  3887. {
  3888. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rP228 Compact" );
  3889. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rFiveseven" );
  3890. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rDual Berettas" );
  3891. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rGlock 18C" );
  3892. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \rDesert Eagle .50 AE" );
  3893. }
  3894. else
  3895. {
  3896. if (g_p228[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \rP228 Compact" );
  3897. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \dP228 Compact" );
  3898. if (g_five[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \rFiveseven" );
  3899. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \dFiveseven" );
  3900. if (g_elite[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \rDual Berettas" );
  3901. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \dDual Berettas" );
  3902. if (g_glock[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \rGlock 18C" );
  3903. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y5. \dGlock 18C" );
  3904. if (g_deagle[id]) nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \rDesert Eagle .50 AE" );
  3905. else nLen += format( szMenuBody[nLen], 255-nLen, "^n\y6. \dDesert Eagle .50 AE)" );
  3906. }
  3907.  
  3908. show_menu(id,WPN_SEC,szMenuBody,-1,"SecWeaponSelect")
  3909. }
  3910.  
  3911. public sec_weapons_pushed(id,key)
  3912. {
  3913. switch(key)
  3914. {
  3915. case 0:
  3916. {
  3917. weapon_picked[1][id] = CSW_USP
  3918. give_weapons(id)
  3919. }
  3920. case 1:
  3921. {
  3922. if (g_p228[id] || access(id, MEMBERSHIP))
  3923. {
  3924. weapon_picked[1][id] = CSW_P228
  3925. give_weapons(id)
  3926. }
  3927. else
  3928. sec_weapons_menu(id)
  3929. }
  3930. case 2:
  3931. {
  3932. if (g_five[id] || access(id, MEMBERSHIP))
  3933. {
  3934. weapon_picked[1][id] = CSW_FIVESEVEN
  3935. give_weapons(id)
  3936. }
  3937. else
  3938. sec_weapons_menu(id)
  3939. }
  3940. case 3:
  3941. {
  3942. if (g_elite[id] || access(id, MEMBERSHIP))
  3943. {
  3944. weapon_picked[1][id] = CSW_ELITE
  3945. give_weapons(id)
  3946. }
  3947. else
  3948. sec_weapons_menu(id)
  3949. }
  3950. case 4:
  3951. {
  3952. if (g_glock[id] || access(id, MEMBERSHIP))
  3953. {
  3954. weapon_picked[1][id] = CSW_GLOCK18
  3955. give_weapons(id)
  3956. }
  3957. else
  3958. sec_weapons_menu(id)
  3959. }
  3960. case 5:
  3961. {
  3962. if (g_deagle[id] || access(id, MEMBERSHIP))
  3963. {
  3964. weapon_picked[1][id] = CSW_DEAGLE
  3965. give_weapons(id)
  3966. }
  3967. else
  3968. sec_weapons_menu(id)
  3969. }
  3970. }
  3971. return PLUGIN_HANDLED;
  3972. }
  3973.  
  3974. public give_weapons(id)
  3975. {
  3976. strip_user_weapons(id)
  3977. give_item(id,"weapon_knife")
  3978.  
  3979. new weapon[32]
  3980. new csw
  3981.  
  3982. if (!weapon_picked[0][id]) weapon_picked[0][id] = CSW_SG552
  3983. csw = weapon_picked[0][id]
  3984. get_weaponname(csw,weapon,31)
  3985. give_item(id,weapon)
  3986. cs_set_user_bpammo(id,csw,999)
  3987. g_PrimaryWeapon[id] = weapon_picked[0][id]
  3988.  
  3989. if (!weapon_picked[1][id]) weapon_picked[1][id] = CSW_GLOCK18
  3990. csw = weapon_picked[1][id]
  3991. get_weaponname(csw,weapon,31)
  3992. give_item(id,weapon)
  3993. cs_set_user_bpammo(id,csw,999)
  3994.  
  3995. return PLUGIN_HANDLED
  3996. }
  3997.  
  3998. /*-------------------------------------------------------------------------------------------------|
  3999. |---------------------------------End Guns Menu Code-----------------------------------------------|
  4000. |-------------------------------------------------------------------------------------------------*/
  4001.  
  4002. /*-------------------------------------------------------------------------------------------------|
  4003. |-----------------------------Begin Unlocks\Upgrades Menu Code-[0007]------------------------------|
  4004. |-------------------------------------------------------------------------------------------------*/
  4005. public show_upgrades_menu(id)
  4006. {
  4007. new szMenuBody[512];
  4008.  
  4009. g_pHPCost[id] = get_pcvar_num(g_pcvar_unhpcost)+(get_pcvar_num(g_pcvar_unhpmult)*g_unHPLevel[id])
  4010. g_pAPCost[id] = get_pcvar_num(g_pcvar_unapcost)+(get_pcvar_num(g_pcvar_unapmult)*g_unAPLevel[id])
  4011. g_pGRCost[id] = get_pcvar_num(g_pcvar_ungrcost)+(get_pcvar_num(g_pcvar_ungrmult)*g_unGRLevel[id])
  4012. g_pINCost[id] = get_pcvar_num(g_pcvar_unincost)+(get_pcvar_num(g_pcvar_uninmult)*g_unINLevel[id])
  4013. g_pSPCost[id] = get_pcvar_num(g_pcvar_unspcost)+(get_pcvar_num(g_pcvar_unspmult)*g_unSPLevel[id])
  4014.  
  4015. new nLen = format( szMenuBody, 511, "\yUpgrades Menu:^nCredits: %d^n", credits[id]);
  4016. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wHealth (+100)");
  4017. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCurrent Level: \r%d/20", g_unHPLevel[id]);
  4018. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCost: \r%d^n", g_pHPCost[id]);
  4019. /*-------------------------------------------------------------------------------------------------------------*/
  4020. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wDamage Reduction (+10 Armor)");
  4021. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCurrent Level: \r%d/20", g_unAPLevel[id]);
  4022. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCost: \r%d^n", g_pAPCost[id]);
  4023. /*-------------------------------------------------------------------------------------------------------------*/
  4024. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wGravity (2%%)");
  4025. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCurrent Level: \r%d/20", g_unGRLevel[id]);
  4026. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCost: \r%d^n", g_pGRCost[id]);
  4027. /*-------------------------------------------------------------------------------------------------------------*/
  4028. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wInvisibility (4%%)");
  4029. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCurrent Level: \r%d/20", g_unINLevel[id]);
  4030. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCost: \r%d^n", g_pINCost[id]);
  4031. /*-------------------------------------------------------------------------------------------------------------*/
  4032. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wSpeed (2%%)");
  4033. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCurrent Level: \r%d/20", g_unSPLevel[id]);
  4034. nLen += format( szMenuBody[nLen], 511-nLen, "^n \wCost: \r%d^n", g_pSPCost[id]);
  4035. /*-------------------------------------------------------------------------------------------------------------*/
  4036. nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y0. \wExit" );
  4037.  
  4038. show_menu(id,UPGRADES_KEYS,szMenuBody,-1,"UpgradesMenuMain")
  4039. }
  4040.  
  4041. public upgrades_menu_pressed(id,key)
  4042. {
  4043. switch(key)
  4044. {
  4045. case 0:
  4046. {
  4047. if ((credits[id]>=g_pHPCost[id]) && g_unHPLevel[id]<20)
  4048. {
  4049. client_cmd(id, "spk %s", g_UpgradeMenuBuy);
  4050. g_unHPLevel[id]++
  4051. credits[id]-=g_pHPCost[id]
  4052. if (g_iszombie[id])
  4053. {
  4054. new hp = (g_ZombieHP+(g_unHPLevel[id]*100))
  4055. MaxHP[id] = float(hp)
  4056. new Float:HPtoAdd = float(get_user_health(id)+100)
  4057. set_pev(id, pev_health, HPtoAdd) // use decimal number
  4058. }
  4059. if (g_unHPLevel[id]==20)
  4060. {
  4061. //Juggernaut
  4062. switch (g_PlayerAchievements[id][ACHIEVE_HP])
  4063. {
  4064. case LEVEL_NONE:
  4065. {
  4066. g_PlayerAchievements[id][ACHIEVE_HP]=LEVEL_I;
  4067. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4068. show_hudmessage(id, "%s^nUpgrade to the most max health!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_HP][LEVEL_I]);
  4069. credits[id]+=100
  4070. client_cmd(id, "spk %s", g_AchivementEarned);
  4071. SaveLevel(id)
  4072. check_banker(id)
  4073. }
  4074. }
  4075. }
  4076. }
  4077. show_upgrades_menu(id)
  4078. }
  4079. case 1:
  4080. {
  4081. if ((credits[id]>=g_pAPCost[id]) && g_unAPLevel[id]<20)
  4082. {
  4083. client_cmd(id, "spk %s", g_UpgradeMenuBuy);
  4084. g_unAPLevel[id]++
  4085. credits[id]-=g_pAPCost[id]
  4086. if (g_unAPLevel[id]==20)
  4087. {
  4088. //Solid Shield
  4089. switch (g_PlayerAchievements[id][ACHIEVE_AP])
  4090. {
  4091. case LEVEL_NONE:
  4092. {
  4093. g_PlayerAchievements[id][ACHIEVE_AP]=LEVEL_I;
  4094. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4095. show_hudmessage(id, "%s^nUpgrade to the most armor!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_AP][LEVEL_I]);
  4096. credits[id]+=100
  4097. client_cmd(id, "spk %s", g_AchivementEarned);
  4098. SaveLevel(id)
  4099. check_banker(id)
  4100. }
  4101. }
  4102. }
  4103. }
  4104. show_upgrades_menu(id)
  4105. }
  4106. case 2:
  4107. {
  4108. if ((credits[id]>=g_pGRCost[id]) && g_unGRLevel[id]<20)
  4109. {
  4110. client_cmd(id, "spk %s", g_UpgradeMenuBuy);
  4111. g_unGRLevel[id]++
  4112. credits[id]-=g_pGRCost[id]
  4113. if (g_iszombie[id])
  4114. set_pev(id, pev_gravity, 1-(0.02*g_unGRLevel[id])) // use decimal number
  4115. if (g_unGRLevel[id]==20)
  4116. {
  4117. //Zero Gravity
  4118. switch (g_PlayerAchievements[id][ACHIEVE_GR])
  4119. {
  4120. case LEVEL_NONE:
  4121. {
  4122. g_PlayerAchievements[id][ACHIEVE_GR]=LEVEL_I;
  4123. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4124. show_hudmessage(id, "%s^nUpgrade to the lowest possible gravity!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_GR][LEVEL_I]);
  4125. credits[id]+=100
  4126. client_cmd(id, "spk %s", g_AchivementEarned);
  4127. SaveLevel(id)
  4128. check_banker(id)
  4129. }
  4130. }
  4131. }
  4132. }
  4133. show_upgrades_menu(id)
  4134. }
  4135. case 3:
  4136. {
  4137. if ((credits[id]>=g_pINCost[id]) && g_unINLevel[id]<20)
  4138. {
  4139. client_cmd(id, "spk %s", g_UpgradeMenuBuy);
  4140. g_unINLevel[id]++
  4141. credits[id]-=g_pINCost[id]
  4142. if (g_iszombie[id])
  4143. set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 255-(g_unINLevel[id]*10))
  4144. if (g_unINLevel[id]==20)
  4145. {
  4146. //The Invisible Man
  4147. switch (g_PlayerAchievements[id][ACHIEVE_IN])
  4148. {
  4149. case LEVEL_NONE:
  4150. {
  4151. g_PlayerAchievements[id][ACHIEVE_IN]=LEVEL_I;
  4152. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4153. show_hudmessage(id, "%s^nUpgrade to the lowest visibility!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_IN][LEVEL_I]);
  4154. credits[id]+=100
  4155. client_cmd(id, "spk %s", g_AchivementEarned);
  4156. SaveLevel(id)
  4157. check_banker(id)
  4158. }
  4159. }
  4160. }
  4161. }
  4162. show_upgrades_menu(id)
  4163. }
  4164. case 4:
  4165. {
  4166. if ((credits[id]>=g_pSPCost[id]) && g_unSPLevel[id]<20)
  4167. {
  4168. client_cmd(id, "spk %s", g_UpgradeMenuBuy);
  4169. g_unSPLevel[id]++
  4170. credits[id]-=g_pSPCost[id]
  4171. if (g_unSPLevel[id]==20)
  4172. {
  4173. //Speed Demon
  4174. switch (g_PlayerAchievements[id][ACHIEVE_SP])
  4175. {
  4176. case LEVEL_NONE:
  4177. {
  4178. g_PlayerAchievements[id][ACHIEVE_SP]=LEVEL_I;
  4179. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4180. show_hudmessage(id, "%s^nUpgrade to the lowest possible speed!^n+100 Credits", ACHIEVEMENTS[ACHIEVE_SP][LEVEL_I]);
  4181. credits[id]+=100
  4182. client_cmd(id, "spk %s", g_AchivementEarned);
  4183. SaveLevel(id)
  4184. check_banker(id)
  4185. }
  4186. }
  4187. }
  4188. }
  4189. show_upgrades_menu(id)
  4190. }
  4191. }
  4192. return PLUGIN_HANDLED;
  4193. }
  4194.  
  4195. public cmdGiveCredits(id)
  4196. {
  4197. if(!access(id,GIVE_CREDITS))
  4198. return PLUGIN_HANDLED
  4199.  
  4200. new target[32],points[21]
  4201. read_argv(1,target,31)
  4202. read_argv(2,points,20)
  4203. new player = cmd_target(id,target,8)
  4204. if(!player) return PLUGIN_HANDLED
  4205. new admin_name [32], player_name[32]
  4206. get_user_name(id,admin_name,31)
  4207. get_user_name(player,player_name,31)
  4208. new crednum = str_to_num(points)
  4209. credits[player]+=crednum
  4210. SaveLevel(player)
  4211. client_print(id,print_console,"[AMXX] You have added %i credits to %s's total credits",crednum,player_name)
  4212.  
  4213. new adminauthid[35], playerauthid[35]
  4214. get_user_ip (id,adminauthid,34)
  4215. get_user_ip (player,playerauthid,34)
  4216. Log("[CREDITS] Admin: %s || SteamID: %s gave %i credits Player: %s || SteamID: %s", admin_name, adminauthid, crednum, player_name, playerauthid)
  4217.  
  4218. return PLUGIN_CONTINUE
  4219. }
  4220.  
  4221. public ev_Health(id)
  4222. {
  4223. if (is_user_alive(id))
  4224. {
  4225. set_hudmessage(255, 255, 255, -1.0, 0.9, 0, 12.0, 12.0, 0.1, 0.2, 4);
  4226. show_hudmessage(id, "%L^nCredits: %d", LANG_SERVER, "PLAYER_HEALTH", get_user_health(id), credits[id]);
  4227.  
  4228. set_task(11.9, "ev_Health", id);
  4229. }
  4230. }
  4231.  
  4232. public msgHealth(msgid, dest, id)
  4233. {
  4234. if(!is_user_alive(id))
  4235. return PLUGIN_CONTINUE;
  4236.  
  4237. static hp;
  4238. hp = get_msg_arg_int(1);
  4239.  
  4240. if(hp > 255 && (hp % 256) == 0)
  4241. set_msg_arg_int(1, ARG_BYTE, ++hp);
  4242.  
  4243. return PLUGIN_CONTINUE;
  4244. }
  4245.  
  4246. /*-------------------------------------------------------------------------------------------------|
  4247. |---------------------------------End Unlocks Menu Code--------------------------------------------|
  4248. |-------------------------------------------------------------------------------------------------*/
  4249.  
  4250. /*-------------------------------------------------------------------------------------------------|
  4251. |---------------------------------Begin Items Menu Code--------------------------------------------|
  4252. |-------------------------------------------------------------------------------------------------*/
  4253.  
  4254. public show_market_menu(id)
  4255. {
  4256. new szMenuBody[1024];
  4257.  
  4258. new nLen = format( szMenuBody, 1023, "\yBlack Market:^nCredits: %d^n", credits[id]);
  4259. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wModifiers");
  4260. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wItems");
  4261. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wTemporary Buffs");
  4262. nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y0. \wExit" );
  4263.  
  4264. show_menu(id,IT_MAIN,szMenuBody,-1,"MarketMenuMain")
  4265. }
  4266.  
  4267. public market_menu_pressed(id,key)
  4268. {
  4269. switch(key)
  4270. {
  4271. case 0: show_modifiers_menu(id)
  4272. case 1: show_items_menu(id)
  4273. case 2: show_buffs_menu(id)
  4274. case 9: return PLUGIN_HANDLED
  4275. }
  4276. return PLUGIN_HANDLED;
  4277. }
  4278.  
  4279. public show_modifiers_menu(id)
  4280. {
  4281. new szMenuBody[1024];
  4282.  
  4283. new nLen = format( szMenuBody, 1023, "\yModifiers:^nCredits: %d^n", credits[id]);
  4284. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wDamage Modifier (+10%% DMG)");
  4285. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wIncreases your damage");
  4286. if (g_item_dmg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4287. else
  4288. {
  4289. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount))
  4290. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_idmg1cost));
  4291. }
  4292. /*-------------------------------------------------------------------------------------------------------------*/
  4293. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wGreater Damage Modifier (+25%% DMG)");
  4294. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wGreatly increases your damage");
  4295. if (g_item_dmg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4296. else
  4297. {
  4298. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount))
  4299. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_idmg2cost));
  4300. }
  4301. /*-------------------------------------------------------------------------------------------------------------*/
  4302. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wRecoil Modifier (Human) (-25%% recoil)");
  4303. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wDecreases you recoil");
  4304. if (g_item_rec[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4305. else
  4306. {
  4307. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount))
  4308. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ireccost));
  4309. }
  4310. /*-------------------------------------------------------------------------------------------------------------*/
  4311. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y4. \wRegeneration Modifier (+5%% per sec)");
  4312. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wAdds a regeneration ability");
  4313. if (g_item_reg[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4314. else
  4315. {
  4316. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount))
  4317. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iregcost));
  4318. }
  4319. /*-------------------------------------------------------------------------------------------------------------*/
  4320. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y5. \wReload Modifier (Human) (+33%% faster)");
  4321. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wReloads weapons 30%% faster");
  4322. if (g_item_rel[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4323. else
  4324. {
  4325. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount))
  4326. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_irelcost));
  4327. }
  4328. /*-------------------------------------------------------------------------------------------------------------*/
  4329. nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" );
  4330. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" );
  4331.  
  4332. show_menu(id,IT_MOD,szMenuBody,-1,"ItemsMenuMod")
  4333. }
  4334.  
  4335. public modifiers_menu_pressed(id,key)
  4336. {
  4337. new bool:hasbought
  4338. switch(key)
  4339. {
  4340. case 0:
  4341. {
  4342. if (!access(id, MEMBERSHIP))
  4343. {
  4344. if ((credits[id]>=get_pcvar_num(g_pcvar_idmg1cost)) && !g_item_dmg[id])
  4345. {
  4346. g_item_dmg[id] = true
  4347. credits[id]-=get_pcvar_num(g_pcvar_idmg1cost)
  4348. hasbought=true
  4349. }
  4350. }
  4351. else
  4352. {
  4353. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount)) && !g_item_dmg[id])
  4354. {
  4355. g_item_dmg[id] = true
  4356. credits[id]-=floatround(get_pcvar_num(g_pcvar_idmg1cost)*g_Discount)
  4357. hasbought=true
  4358. }
  4359. }
  4360. show_modifiers_menu(id)
  4361. }
  4362. case 1:
  4363. {
  4364. if (!access(id, MEMBERSHIP))
  4365. {
  4366. if ((credits[id]>=get_pcvar_num(g_pcvar_idmg2cost)) && !g_item_dmg[id])
  4367. {
  4368. g_item_dmg[id] = true
  4369. g_item_gdmg[id] = true
  4370. credits[id]-=get_pcvar_num(g_pcvar_idmg2cost)
  4371. hasbought=true
  4372. }
  4373. }
  4374. else
  4375. {
  4376. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount)) && !g_item_dmg[id])
  4377. {
  4378. g_item_dmg[id] = true
  4379. g_item_gdmg[id] = true
  4380. credits[id]-=floatround(get_pcvar_num(g_pcvar_idmg2cost)*g_Discount)
  4381. hasbought=true
  4382. }
  4383. }
  4384. show_modifiers_menu(id)
  4385. }
  4386. case 2:
  4387. {
  4388. if (!access(id, MEMBERSHIP))
  4389. {
  4390. if ((credits[id]>=get_pcvar_num(g_pcvar_ireccost)) && !g_item_rec[id])
  4391. {
  4392. g_item_rec[id] = true
  4393. credits[id]-=get_pcvar_num(g_pcvar_ireccost)
  4394. hasbought=true
  4395. }
  4396. }
  4397. else
  4398. {
  4399. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount)) && !g_item_rec[id])
  4400. {
  4401. g_item_rec[id] = true
  4402. credits[id]-=floatround(get_pcvar_num(g_pcvar_ireccost)*g_Discount)
  4403. hasbought=true
  4404. }
  4405. }
  4406. show_modifiers_menu(id)
  4407. }
  4408. case 3:
  4409. {
  4410. if (!access(id, MEMBERSHIP))
  4411. {
  4412. if ((credits[id]>=get_pcvar_num(g_pcvar_iregcost)) && !g_item_reg[id])
  4413. {
  4414. g_item_reg[id] = true
  4415. credits[id]-=get_pcvar_num(g_pcvar_iregcost)
  4416. hasbought=true
  4417. }
  4418. }
  4419. else
  4420. {
  4421. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount)) && !g_item_reg[id])
  4422. {
  4423. g_item_reg[id] = true
  4424. credits[id]-=floatround(get_pcvar_num(g_pcvar_iregcost)*g_Discount)
  4425. hasbought=true
  4426. }
  4427. }
  4428. show_modifiers_menu(id)
  4429. }
  4430. case 4:
  4431. {
  4432. if (!access(id, MEMBERSHIP))
  4433. {
  4434. if ((credits[id]>=get_pcvar_num(g_pcvar_irelcost)) && !g_item_rel[id])
  4435. {
  4436. g_item_rel[id] = true
  4437. credits[id]-=get_pcvar_num(g_pcvar_irelcost)
  4438. hasbought=true
  4439. }
  4440. }
  4441. else
  4442. {
  4443. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount)) && !g_item_rel[id])
  4444. {
  4445. g_item_rel[id] = true
  4446. credits[id]-=floatround(get_pcvar_num(g_pcvar_irelcost)*g_Discount)
  4447. hasbought=true
  4448. }
  4449. }
  4450. show_modifiers_menu(id)
  4451. }
  4452. case 8: show_market_menu(id)
  4453. case 9: return PLUGIN_HANDLED
  4454. }
  4455. if (!hasbought)
  4456. {
  4457. client_print(id, print_center, "*** You cannot buy this item ***")
  4458. }
  4459. else if (hasbought)
  4460. {
  4461. client_cmd(id, "spk %s", g_ItemMenuBuy);
  4462. g_itemsbought[id]++
  4463. if (g_itemsbought[id]>49)
  4464. {
  4465. //Merchant
  4466. switch (g_PlayerAchievements[id][ACHIEVE_MERC])
  4467. {
  4468. case LEVEL_NONE:
  4469. {
  4470. g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I;
  4471. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4472. show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]);
  4473. credits[id]+=25
  4474. client_cmd(id, "spk %s", g_AchivementEarned);
  4475. SaveLevel(id)
  4476. check_banker(id)
  4477. }
  4478. }
  4479. }
  4480. }
  4481. return PLUGIN_HANDLED;
  4482. }
  4483.  
  4484. public Task_HPRegenLoop()
  4485. {
  4486. if (!g_CanBuild)
  4487. {
  4488. new players[32], num
  4489. get_players(players, num, "a")
  4490.  
  4491. new player, Float:NewHP
  4492. for (new i = 0; i < num; i++)
  4493. {
  4494. player = players[i]
  4495.  
  4496. if((g_item_reg[player] || g_item_sti[player]) && !g_item_shi[player])
  4497. {
  4498. if (get_user_health(player)<MaxHP[player])
  4499. {
  4500. if (g_item_sti[player])
  4501. NewHP = get_user_health(player) + floatmul(MaxHP[player],0.15)
  4502. else
  4503. NewHP = get_user_health(player) + floatmul(MaxHP[player],0.05)
  4504.  
  4505. if(NewHP >= MaxHP[player])
  4506. NewHP = MaxHP[player]
  4507. set_user_health(player,floatround(NewHP))
  4508. }
  4509. else
  4510. {
  4511. set_user_health(player,floatround(MaxHP[player]))
  4512. }
  4513. }
  4514. }
  4515. }
  4516.  
  4517. return PLUGIN_CONTINUE
  4518. }
  4519.  
  4520. public show_items_menu(id)
  4521. {
  4522. new szMenuBody[1024];
  4523.  
  4524. new nLen = format( szMenuBody, 1023, "\yItems:^nCredits: %d^n", credits[id]);
  4525. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wBattle Helmet (+200 Armor)");
  4526. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wA helmet that reduces headshot damage up to 35%%");
  4527. if (g_item_hel[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4528. else
  4529. {
  4530. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount))
  4531. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ihelcost));
  4532. }
  4533. /*-------------------------------------------------------------------------------------------------------------*/
  4534. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wConcussion Grenade (Human)");
  4535. //nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wA helmet that reduces headshot damage up to 35%%");
  4536. if (g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS ZOMBIE-")
  4537. else
  4538. {
  4539. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount))
  4540. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iconcost));
  4541. }
  4542. /*-------------------------------------------------------------------------------------------------------------*/
  4543. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y3. \wRiot Shield (Zombie)");
  4544. if (!g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS HUMAN-")
  4545. else
  4546. {
  4547. if (g_item_shi[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4548. else
  4549. {
  4550. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount))
  4551. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_ishicost));
  4552. }
  4553. }
  4554. /*-------------------------------------------------------------------------------------------------------------*/
  4555. nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" );
  4556. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" );
  4557.  
  4558. show_menu(id,IT_ITE,szMenuBody,-1,"ItemsMenuItems")
  4559. }
  4560.  
  4561. public items_menu_pressed(id,key)
  4562. {
  4563. new bool:hasbought
  4564. switch(key)
  4565. {
  4566. case 0:
  4567. {
  4568. if (!access(id, MEMBERSHIP))
  4569. {
  4570. if ((credits[id]>=get_pcvar_num(g_pcvar_ihelcost)) && !g_item_hel[id])
  4571. {
  4572. g_item_hel[id] = true
  4573. credits[id]-=get_pcvar_num(g_pcvar_ihelcost)
  4574. hasbought=true
  4575.  
  4576. give_item(id, "item_assaultsuit");
  4577. new armor = (g_unAPLevel[id]*10)+200
  4578. cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM);
  4579. }
  4580. }
  4581. else
  4582. {
  4583. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount)) && !g_item_hel[id])
  4584. {
  4585. g_item_hel[id] = true
  4586. credits[id]-=floatround(get_pcvar_num(g_pcvar_ihelcost)*g_Discount)
  4587. hasbought=true
  4588.  
  4589. give_item(id, "item_assaultsuit");
  4590. new armor = (g_unAPLevel[id]*10)+200
  4591. cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM);
  4592. }
  4593. }
  4594. show_items_menu(id)
  4595. }
  4596. case 1:
  4597. {
  4598. if (g_iszombie[id])
  4599. {
  4600. show_items_menu(id)
  4601. return PLUGIN_HANDLED
  4602. }
  4603. if (!access(id, MEMBERSHIP))
  4604. {
  4605. if (credits[id]>=get_pcvar_num(g_pcvar_iconcost))
  4606. {
  4607. credits[id]-=get_pcvar_num(g_pcvar_iconcost)
  4608. hasbought=true
  4609.  
  4610. new fbtotal = cs_get_user_bpammo(id, CSW_FLASHBANG)
  4611. give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,fbtotal+1)
  4612. }
  4613. }
  4614. else
  4615. {
  4616. if (credits[id]>=floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount))
  4617. {
  4618. credits[id]-=floatround(get_pcvar_num(g_pcvar_iconcost)*g_Discount)
  4619. hasbought=true
  4620.  
  4621. new fbtotal = cs_get_user_bpammo(id, CSW_FLASHBANG)
  4622. give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,fbtotal+1)
  4623. }
  4624. }
  4625. show_items_menu(id)
  4626. }
  4627. case 2:
  4628. {
  4629. if (!g_iszombie[id])
  4630. {
  4631. show_items_menu(id)
  4632. return PLUGIN_HANDLED
  4633. }
  4634. else if (!access(id, MEMBERSHIP))
  4635. {
  4636. if ((credits[id]>=get_pcvar_num(g_pcvar_ishicost)) && !g_item_shi[id])
  4637. {
  4638. give_item(id, "weapon_shield");
  4639.  
  4640. if (cs_get_user_shield(id) == 1)
  4641. {
  4642. g_item_shi[id] = true
  4643. credits[id]-=get_pcvar_num(g_pcvar_ishicost)
  4644. hasbought=true
  4645. }
  4646. }
  4647. }
  4648. else
  4649. {
  4650. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount)) && !g_item_shi[id])
  4651. {
  4652. give_item(id, "weapon_shield");
  4653.  
  4654. if (cs_get_user_shield(id) == 1)
  4655. {
  4656. g_item_shi[id] = true
  4657. credits[id]-=floatround(get_pcvar_num(g_pcvar_ishicost)*g_Discount)
  4658. hasbought=true
  4659. }
  4660. }
  4661. }
  4662. show_items_menu(id)
  4663. }
  4664. case 8: show_market_menu(id)
  4665. case 9: return PLUGIN_HANDLED
  4666. }
  4667. if (!hasbought)
  4668. {
  4669. client_print(id, print_center, "*** You cannot buy this item ***")
  4670. }
  4671. else if (hasbought)
  4672. {
  4673. client_cmd(id, "spk %s", g_ItemMenuBuy);
  4674. g_itemsbought[id]++
  4675. if (g_itemsbought[id]>49)
  4676. {
  4677. //Merchant
  4678. switch (g_PlayerAchievements[id][ACHIEVE_MERC])
  4679. {
  4680. case LEVEL_NONE:
  4681. {
  4682. g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I;
  4683. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4684. show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]);
  4685. credits[id]+=25
  4686. client_cmd(id, "spk %s", g_AchivementEarned);
  4687. SaveLevel(id)
  4688. check_banker(id)
  4689. }
  4690. }
  4691. }
  4692. }
  4693. return PLUGIN_HANDLED;
  4694. }
  4695.  
  4696. public show_buffs_menu(id)
  4697. {
  4698. new szMenuBody[1024];
  4699.  
  4700. new nLen = format( szMenuBody, 1023, "\yTemp Buffs:^nCredits: %d^n", credits[id]);
  4701. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y1. \wStim Pack (+15%% Regen) \r[%d secs]", get_pcvar_num(g_pcvar_timesti));
  4702. if (g_item_sti[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4703. else
  4704. {
  4705. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount))
  4706. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_isticost));
  4707. }
  4708. /*-------------------------------------------------------------------------------------------------------------*/
  4709. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y2. \wOne Man Army (No Reloads) (Human) \r[%d secs]", get_pcvar_num(g_pcvar_timeoma));
  4710. if (g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: -NOT AVAILABLE AS ZOMBIE-")
  4711. else
  4712. {
  4713. if (g_item_oma[id] || g_iszombie[id]) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r-Bought-");
  4714. else
  4715. {
  4716. if (access(id, MEMBERSHIP)) nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount))
  4717. else nLen += format( szMenuBody[nLen], 1023-nLen, "^n \wCost: \r%d", get_pcvar_num(g_pcvar_iomacost));
  4718. }
  4719. }
  4720. /*-------------------------------------------------------------------------------------------------------------*/
  4721. nLen += format( szMenuBody[nLen], 1023-nLen, "^n^n\y9. \wBlack Market" );
  4722. nLen += format( szMenuBody[nLen], 1023-nLen, "^n\y0. \wExit" );
  4723.  
  4724. show_menu(id,IT_BUFF,szMenuBody,-1,"ItemsMenuBuffs")
  4725. }
  4726.  
  4727. public buffs_menu_pressed(id,key)
  4728. {
  4729. new bool:hasbought
  4730. switch(key)
  4731. {
  4732. case 0:
  4733. {
  4734. if (!access(id, MEMBERSHIP))
  4735. {
  4736. if ((credits[id]>=get_pcvar_num(g_pcvar_isticost)) && !g_item_sti[id])
  4737. {
  4738. g_item_sti[id] = true
  4739. set_task(get_pcvar_float(g_pcvar_timesti), "Remove_Stim", id+REGEN_TASK)
  4740. credits[id]-=get_pcvar_num(g_pcvar_isticost)
  4741. hasbought=true
  4742. }
  4743. }
  4744. else
  4745. {
  4746. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount)) && !g_item_sti[id])
  4747. {
  4748. g_item_sti[id] = true
  4749. set_task(get_pcvar_float(g_pcvar_timesti), "Remove_Stim", id+REGEN_TASK)
  4750. credits[id]-=floatround(get_pcvar_num(g_pcvar_isticost)*g_Discount)
  4751. hasbought=true
  4752. }
  4753. }
  4754. show_buffs_menu(id)
  4755. }
  4756. case 1:
  4757. {
  4758. if (g_iszombie[id])
  4759. {
  4760. show_buffs_menu(id)
  4761. return PLUGIN_HANDLED
  4762. }
  4763. if (!access(id, MEMBERSHIP))
  4764. {
  4765. if ((credits[id]>=get_pcvar_num(g_pcvar_iomacost)) && !g_item_oma[id])
  4766. {
  4767. g_item_oma[id] = true
  4768. set_task(get_pcvar_float(g_pcvar_timeoma), "Remove_OMA", id+OMA_TASK)
  4769. credits[id]-=get_pcvar_num(g_pcvar_iomacost)
  4770. hasbought=true
  4771. }
  4772. }
  4773. else
  4774. {
  4775. if ((credits[id]>=floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount)) && !g_item_oma[id])
  4776. {
  4777. g_item_oma[id] = true
  4778. set_task(get_pcvar_float(g_pcvar_timeoma), "Remove_OMA", id+OMA_TASK)
  4779. credits[id]-=floatround(get_pcvar_num(g_pcvar_iomacost)*g_Discount)
  4780. hasbought=true
  4781. }
  4782. }
  4783. show_buffs_menu(id)
  4784. }
  4785. case 8: show_market_menu(id)
  4786. case 9: return PLUGIN_HANDLED
  4787. }
  4788. if (!hasbought)
  4789. {
  4790. client_print(id, print_center, "*** You cannot buy this item ***")
  4791. }
  4792. else if (hasbought)
  4793. {
  4794. client_cmd(id, "spk %s", g_ItemMenuBuy);
  4795. g_itemsbought[id]++
  4796. if (g_itemsbought[id]>49)
  4797. {
  4798. //Merchant
  4799. switch (g_PlayerAchievements[id][ACHIEVE_MERC])
  4800. {
  4801. case LEVEL_NONE:
  4802. {
  4803. g_PlayerAchievements[id][ACHIEVE_MERC]=LEVEL_I;
  4804. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  4805. show_hudmessage(id, "%s^nPurchase 50 items from the Black Market!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_MERC][LEVEL_I]);
  4806. credits[id]+=25
  4807. client_cmd(id, "spk %s", g_AchivementEarned);
  4808. SaveLevel(id)
  4809. check_banker(id)
  4810. }
  4811. }
  4812. }
  4813. }
  4814. return PLUGIN_HANDLED;
  4815. }
  4816.  
  4817. public Remove_Stim(id)
  4818. {
  4819. id -= REGEN_TASK
  4820. g_item_sti[id] = false
  4821. }
  4822.  
  4823. public Remove_OMA(id)
  4824. {
  4825. id -= OMA_TASK
  4826. g_item_oma[id] = false
  4827. }
  4828.  
  4829. public show_unlocks_menu(id)
  4830. {
  4831. new szMenuBody[256];
  4832.  
  4833. new nLen = format( szMenuBody, 255, "\yUnlocks Menu: \r%d^n", credits[id]);
  4834. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y1. \wAssault Rifles");
  4835. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y2. \wSMGs");
  4836. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y3. \wOther");
  4837. nLen += format( szMenuBody[nLen], 255-nLen, "^n\y4. \wPistols");
  4838. nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\y0. \wExit" );
  4839.  
  4840. show_menu(id,UN_MAIN,szMenuBody,-1,"UnlocksMenuMain")
  4841.  
  4842. return PLUGIN_HANDLED
  4843. }
  4844.  
  4845. public unlocks_menu_pressed(id,key)
  4846. {
  4847. switch(key)
  4848. {
  4849. case 0: assault_unlocks_menu(id)
  4850. case 1: sub_unlocks_menu(id)
  4851. case 2: other_unlocks_menu(id)
  4852. case 3: sec_unlocks_menu(id)
  4853. //case 9: return PLUGIN_HANDLED;
  4854. }
  4855. return PLUGIN_HANDLED;
  4856. }
  4857.  
  4858. public assault_unlocks_menu(id)
  4859. {
  4860. new szMenuBody[512];
  4861.  
  4862. new nLen = format( szMenuBody, 511, "\yUnlock: \rAssault Rifles^nCredits: %d^n", credits[id]);
  4863. if (g_galil[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wIMI Galil^n \wCost: \r-Unlocked-^n" );
  4864. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wIMI Galil^n \wCost: \r100^n" );
  4865.  
  4866. if (g_aug[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wSteyr AUG A1^n \wCost: \r-Unlocked-^n" );
  4867. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wSteyr AUG A1^n \wCost: \r75^n" );
  4868.  
  4869. if (g_m4a1[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wM4A1 Carbine^n \wCost: \r-Unlocked-^n" );
  4870. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wM4A1 Carbine^n \wCost: \r250^n" );
  4871.  
  4872. if (g_famas[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wFamas^n \wCost: \r-Unlocked-^n" );
  4873. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wFamas^n \wCost: \r150^n" );
  4874.  
  4875. if (g_ak47[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wAK-47 Kalashnikov^n \wCost: \r-Unlocked-^n" );
  4876. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wAK-47 Kalashnikov^n \wCost: \r500^n" );
  4877.  
  4878. nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" );
  4879. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" );
  4880.  
  4881. show_menu(id,UN_PRI1,szMenuBody,-1,"UnlocksMenuAss")
  4882. }
  4883.  
  4884. public un_ass_pushed(id,key)
  4885. {
  4886. new bool:hasbought
  4887. switch(key)
  4888. {
  4889. case 0:
  4890. {
  4891. if (credits[id]>=100 && !g_galil[id])
  4892. {
  4893. g_galil[id]=1
  4894. credits[id]-=100
  4895. if (!g_iszombie[id])
  4896. {
  4897. weapon_picked[0][id] = CSW_GALIL
  4898. give_weapons(id)
  4899. }
  4900. hasbought=true
  4901. }
  4902. assault_unlocks_menu(id)
  4903. }
  4904. case 1:
  4905. {
  4906. if (credits[id]>=75 && !g_aug[id])
  4907. {
  4908. g_aug[id]=1
  4909. credits[id]-=75
  4910. if (!g_iszombie[id])
  4911. {
  4912. weapon_picked[0][id] = CSW_AUG
  4913. give_weapons(id)
  4914. }
  4915. hasbought=true
  4916. }
  4917. assault_unlocks_menu(id)
  4918. }
  4919. case 2:
  4920. {
  4921. if (credits[id]>=250 && !g_m4a1[id])
  4922. {
  4923. g_m4a1[id]=1
  4924. credits[id]-=250
  4925. if (!g_iszombie[id])
  4926. {
  4927. weapon_picked[0][id] = CSW_M4A1
  4928. give_weapons(id)
  4929. }
  4930. hasbought=true
  4931. }
  4932. assault_unlocks_menu(id)
  4933. }
  4934. case 3:
  4935. {
  4936. if (credits[id]>=150 && !g_famas[id])
  4937. {
  4938. g_famas[id]=1
  4939. credits[id]-=150
  4940. if (!g_iszombie[id])
  4941. {
  4942. weapon_picked[0][id] = CSW_FAMAS
  4943. give_weapons(id)
  4944. }
  4945. hasbought=true
  4946. }
  4947. assault_unlocks_menu(id)
  4948. }
  4949. case 4:
  4950. {
  4951. if (credits[id]>=500 && !g_ak47[id])
  4952. {
  4953. g_ak47[id]=1
  4954. credits[id]-=500
  4955. if (!g_iszombie[id])
  4956. {
  4957. weapon_picked[0][id] = CSW_AK47
  4958. give_weapons(id)
  4959. }
  4960. hasbought=true
  4961. }
  4962. assault_unlocks_menu(id)
  4963. }
  4964. case 8:
  4965. {
  4966. show_unlocks_menu(id)
  4967. return PLUGIN_HANDLED
  4968. }
  4969. case 9: return PLUGIN_HANDLED
  4970. }
  4971. if (!hasbought)
  4972. {
  4973. //client_cmd(id, "spk %s", g_InvalidMenuBuy);
  4974. client_print(id, print_center, "*** You cannot do this ***")
  4975. }
  4976. else if (hasbought)
  4977. {
  4978. client_cmd(id, "spk %s", g_UnlockMenuBuy);
  4979. weaponsbought[id]++
  4980. check_warmachine(id)
  4981. }
  4982. return PLUGIN_HANDLED
  4983. }
  4984.  
  4985. public sub_unlocks_menu(id)
  4986. {
  4987. new szMenuBody[512];
  4988.  
  4989. new nLen = format( szMenuBody, 511, "\yUnlock: \rSMGs^nCredits: %d^n", credits[id] );
  4990. if (g_tmp[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wSchmidt TMP^n \wCost: \r-Unlocked-^n" );
  4991. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wSchmidt TMP^n \wCost: \r50^n" );
  4992.  
  4993. if (g_mp5[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wMP5 Navy^n \wCost: \r-Unlocked-^n" );
  4994. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wMP5 Navy^n \wCost: \r100^n" );
  4995.  
  4996. if (g_ump[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wUMP 45^n \wCost: \r-Unlocked-^n" );
  4997. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wUMP 45^n \wCost: \r200^n" );
  4998.  
  4999. if (g_p90[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wES P90^n \wCost: \r-Unlocked-^n" );
  5000. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wES P90^n \wCost: \r250^n" );
  5001.  
  5002. nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" );
  5003. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" );
  5004.  
  5005. show_menu(id,UN_PRI2,szMenuBody,-1,"UnlocksMenuSub")
  5006. }
  5007.  
  5008. public un_smg_pushed(id,key)
  5009. {
  5010. new bool:hasbought
  5011. switch(key)
  5012. {
  5013. case 0:
  5014. {
  5015. if (credits[id]>=50 && !g_tmp[id])
  5016. {
  5017. g_tmp[id]=1
  5018. credits[id]-=50
  5019. if (!g_iszombie[id])
  5020. {
  5021. weapon_picked[0][id] = CSW_TMP
  5022. give_weapons(id)
  5023. }
  5024. hasbought=true
  5025. }
  5026. sub_unlocks_menu(id)
  5027. }
  5028. case 1:
  5029. {
  5030. if (credits[id]>=100 && !g_mp5[id])
  5031. {
  5032. g_mp5[id]=1
  5033. credits[id]-=100
  5034. if (!g_iszombie[id])
  5035. {
  5036. weapon_picked[0][id] = CSW_MP5NAVY
  5037. give_weapons(id)
  5038. }
  5039. hasbought=true
  5040. }
  5041. sub_unlocks_menu(id)
  5042. }
  5043. case 2:
  5044. {
  5045. if (credits[id]>=200 && !g_ump[id])
  5046. {
  5047. g_ump[id]=1
  5048. credits[id]-=200
  5049. if (!g_iszombie[id])
  5050. {
  5051. weapon_picked[0][id] = CSW_UMP45
  5052. give_weapons(id)
  5053. }
  5054. hasbought=true
  5055. }
  5056. sub_unlocks_menu(id)
  5057. }
  5058. case 3:
  5059. {
  5060. if (credits[id]>=250 && !g_p90[id])
  5061. {
  5062. g_p90[id]=1
  5063. credits[id]-=250
  5064. if (!g_iszombie[id])
  5065. {
  5066. weapon_picked[0][id] = CSW_P90
  5067. give_weapons(id)
  5068. }
  5069. hasbought=true
  5070. }
  5071. sub_unlocks_menu(id)
  5072. }
  5073. case 8:
  5074. {
  5075. show_unlocks_menu(id)
  5076. return PLUGIN_HANDLED
  5077. }
  5078. case 9: return PLUGIN_HANDLED
  5079. }
  5080. if (!hasbought)
  5081. {
  5082. //client_cmd(id, "spk %s", g_InvalidMenuBuy);
  5083. client_print(id, print_center, "*** You cannot do this ***")
  5084. }
  5085. else if (hasbought)
  5086. {
  5087. client_cmd(id, "spk %s", g_UnlockMenuBuy);
  5088. weaponsbought[id]++
  5089. check_warmachine(id)
  5090. }
  5091. return PLUGIN_HANDLED
  5092. }
  5093.  
  5094. public other_unlocks_menu(id)
  5095. {
  5096. new szMenuBody[512];
  5097.  
  5098. new nLen = format( szMenuBody, 511, "\yUnlock: \rOther^nCredits: %d^n", credits[id] );
  5099. if (g_m3[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wM3 Super 90^n \wCost: \r-Unlocked-^n" );
  5100. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wM3 Super 90^n \wCost: \r25^n" );
  5101.  
  5102. if (g_xm1014[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wXM1014 M4^n \wCost: \r-Unlocked-^n" );
  5103. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wXM1014 M4^n \wCost: \r200^n" );
  5104.  
  5105. if (g_scout[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wSchmidt Scout^n \wCost: \r-Unlocked-^n" );
  5106. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wSchmidt Scout^n \wCost: \r250^n" );
  5107.  
  5108. if (g_awp[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wAWP Magnum Sniper^n \wCost: \r-Unlocked-^n" );
  5109. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wAWP Magnum Sniper^n \wCost: \r500^n" );
  5110.  
  5111. if (g_para[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wM249-SAW^n \wCost: \r-Unlocked-^n" );
  5112. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wM249-SAW^n \wCost: \r5000^n" );
  5113.  
  5114. nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" );
  5115. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" );
  5116.  
  5117. show_menu(id,UN_PRI3,szMenuBody,-1,"UnlocksMenuOther")
  5118. }
  5119.  
  5120. public un_oth_pushed(id,key)
  5121. {
  5122. new bool:hasbought
  5123. switch(key)
  5124. {
  5125. case 0:
  5126. {
  5127. if (credits[id]>=25 && !g_m3[id])
  5128. {
  5129. g_m3[id]=1
  5130. credits[id]-=25
  5131. if (!g_iszombie[id])
  5132. {
  5133. weapon_picked[0][id] = CSW_M3
  5134. give_weapons(id)
  5135. }
  5136. hasbought=true
  5137. }
  5138. other_unlocks_menu(id)
  5139. }
  5140. case 1:
  5141. {
  5142. if (credits[id]>=200 && !g_xm1014[id])
  5143. {
  5144. g_xm1014[id]=1
  5145. credits[id]-=200
  5146. if (!g_iszombie[id])
  5147. {
  5148. weapon_picked[0][id] = CSW_XM1014
  5149. give_weapons(id)
  5150. }
  5151. hasbought=true
  5152. }
  5153. other_unlocks_menu(id)
  5154. }
  5155. case 2:
  5156. {
  5157. if (credits[id]>=250 && !g_scout[id])
  5158. {
  5159. g_scout[id]=1
  5160. credits[id]-=250
  5161. if (!g_iszombie[id])
  5162. {
  5163. weapon_picked[0][id] = CSW_SCOUT
  5164. give_weapons(id)
  5165. }
  5166. hasbought=true
  5167. }
  5168. other_unlocks_menu(id)
  5169. }
  5170. case 3:
  5171. {
  5172. if (credits[id]>=500 && !g_awp[id])
  5173. {
  5174. g_awp[id]=1
  5175. credits[id]-=500
  5176. if (!g_iszombie[id])
  5177. {
  5178. weapon_picked[0][id] = CSW_AWP
  5179. give_weapons(id)
  5180. }
  5181. hasbought=true
  5182. }
  5183. other_unlocks_menu(id)
  5184. }
  5185. case 4:
  5186. {
  5187. if (credits[id]>=5000 && !g_para[id])
  5188. {
  5189. g_para[id]=1
  5190. credits[id]-=5000
  5191. if (!g_iszombie[id])
  5192. {
  5193. weapon_picked[0][id] = CSW_M249
  5194. give_weapons(id)
  5195. }
  5196. hasbought=true
  5197.  
  5198. switch (g_PlayerAchievements[id][ACHIEVE_RAMBO])
  5199. {
  5200. case LEVEL_NONE:
  5201. {
  5202. g_PlayerAchievements[id][ACHIEVE_RAMBO]=LEVEL_I;
  5203. set_hudmessage(255, 255, 255, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
  5204. show_hudmessage(id, "%s^nUnlock the M249-SAW!^n+25 Credits", ACHIEVEMENTS[ACHIEVE_RAMBO][LEVEL_I]);
  5205. credits[id]+=25
  5206. client_cmd(id, "spk %s", g_AchivementEarned);
  5207. SaveLevel(id)
  5208. }
  5209. }
  5210. }
  5211. other_unlocks_menu(id)
  5212. }
  5213. case 8:
  5214. {
  5215. show_unlocks_menu(id)
  5216. return PLUGIN_HANDLED
  5217. }
  5218. case 9: return PLUGIN_HANDLED
  5219. }
  5220. if (!hasbought)
  5221. {
  5222. //client_cmd(id, "spk %s", g_InvalidMenuBuy);
  5223. client_print(id, print_center, "*** You cannot do this ***")
  5224. }
  5225. else if (hasbought)
  5226. {
  5227. client_cmd(id, "spk %s", g_UnlockMenuBuy);
  5228. weaponsbought[id]++
  5229. check_warmachine(id)
  5230. }
  5231. return PLUGIN_HANDLED
  5232. }
  5233.  
  5234. public sec_unlocks_menu(id)
  5235. {
  5236. new szMenuBody[512];
  5237.  
  5238. new nLen = format( szMenuBody, 511, "\yUnlock: \rPistols^nCredits: %d^n", credits[id] );
  5239. if (g_p228[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wP228 Compact^n \wCost: \r-Unlocked-^n" );
  5240. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y1. \wP228 Compact^n \wCost: \r25^n" );
  5241.  
  5242. if (g_five[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wFiveseven^n \wCost: \r-Unlocked-^n" );
  5243. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y2. \wFiveseven^n \wCost: \r100^n" );
  5244.  
  5245. if (g_elite[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wDual Berettas^n \wCost: \r-Unlocked-^n" );
  5246. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y3. \wDual Berettas^n \wCost: \r100^n" );
  5247.  
  5248. if (g_glock[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wGlock 18C^n \wCost: \r-Unlocked-^n" );
  5249. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y4. \wGlock 18C^n \wCost: \r250^n" );
  5250.  
  5251. if (g_deagle[id]) nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wDesert Eagle .50 AE^n \wCost: \r-Unlocked-^n" );
  5252. else nLen += format( szMenuBody[nLen], 511-nLen, "^n\y5. \wDesert Eagle .50 AE^n \wCost: \r350^n" );
  5253.  
  5254. nLen += format( szMenuBody[nLen], 511-nLen, "^n^n\y9. \wBack" );
  5255. nLen += format( szMenuBody[nLen], 511-nLen, "^n\y0. \wExit" );
  5256.  
  5257. show_menu(id,UN_SEC,szMenuBody,-1,"UnlocksMenuSec")
  5258. }
  5259.  
  5260. public un_sec_pushed(id,key)
  5261. {
  5262. new bool:hasbought
  5263. switch(key)
  5264. {
  5265. case 0:
  5266. {
  5267. if (credits[id]>=25 && !g_p228[id])
  5268. {
  5269. g_p228[id]=1
  5270. credits[id]-=25
  5271. if (!g_iszombie[id])
  5272. {
  5273. weapon_picked[0][id] = CSW_P228
  5274. give_weapons(id)
  5275. }
  5276. hasbought=true
  5277. }
  5278. sec_unlocks_menu(id)
  5279. }
  5280. case 1:
  5281. {
  5282. if (credits[id]>=50 && !g_five[id])
  5283. {
  5284. g_five[id]=1
  5285. credits[id]-=100
  5286. if (!g_iszombie[id])
  5287. {
  5288. weapon_picked[0][id] = CSW_FIVESEVEN
  5289. give_weapons(id)
  5290. }
  5291. hasbought=true
  5292. }
  5293. sec_unlocks_menu(id)
  5294. }
  5295. case 2:
  5296. {
  5297. if (credits[id]>=50 && !g_elite[id])
  5298. {
  5299. g_elite[id]=1
  5300. credits[id]-=100
  5301. if (!g_iszombie[id])
  5302. {
  5303. weapon_picked[0][id] = CSW_ELITE
  5304. give_weapons(id)
  5305. }
  5306. hasbought=true
  5307. }
  5308. sec_unlocks_menu(id)
  5309. }
  5310. case 3:
  5311. {
  5312. if (credits[id]>=250 && !g_glock[id])
  5313. {
  5314. g_glock[id]=1
  5315. credits[id]-=250
  5316. if (!g_iszombie[id])
  5317. {
  5318. weapon_picked[0][id] = CSW_GLOCK18
  5319. give_weapons(id)
  5320. }
  5321. hasbought=true
  5322. }
  5323. sec_unlocks_menu(id)
  5324. }
  5325. case 4:
  5326. {
  5327. if (credits[id]>=350 && !g_deagle[id])
  5328. {
  5329. g_deagle[id]=1
  5330. credits[id]-=350
  5331. if (!g_iszombie[id])
  5332. {
  5333. weapon_picked[0][id] = CSW_DEAGLE
  5334. give_weapons(id)
  5335. }
  5336. hasbought=true
  5337. }
  5338. sec_unlocks_menu(id)
  5339. }
  5340. case 8:
  5341. {
  5342. show_unlocks_menu(id)
  5343. return PLUGIN_HANDLED
  5344. }
  5345. case 9: return PLUGIN_HANDLED
  5346. }
  5347. if (!hasbought)
  5348. {
  5349. //client_cmd(id, "spk %s", g_InvalidMenuBuy);
  5350. client_print(id, print_center, "*** You cannot do this ***")
  5351. }
  5352. else if (hasbought)
  5353. {
  5354. client_cmd(id, "spk %s", g_UnlockMenuBuy);
  5355. weaponsbought[id]++
  5356. check_warmachine(id)
  5357. }
  5358. return PLUGIN_HANDLED
  5359. }
  5360.  
  5361. public taskUpdateClocks()
  5362. {
  5363. new clock = -1;
  5364.  
  5365. //get the time digits
  5366. new serverTimeDigits[4];
  5367. new timeleftDigits[4];
  5368. new bool:bUpdateServerTime = getTimeDigits(CM_SERVERTIME, serverTimeDigits);
  5369. getTimeDigits(CM_BUILDTIMELEFT, timeleftDigits);
  5370.  
  5371. //find all clock entities
  5372. while ((clock = find_ent_by_class(clock, gszClockClassname)))
  5373. {
  5374. //get the clock type
  5375. new clockType = entity_get_int(clock, EV_INT_groupinfo);
  5376.  
  5377. //if the time changed for this clocktype
  5378. if (clockType == CM_SERVERTIME)
  5379. {
  5380. if (bUpdateServerTime)
  5381. {
  5382. //set the clock to the correct time
  5383. set_clock_digits(clock, serverTimeDigits);
  5384. }
  5385. }
  5386. }
  5387.  
  5388. //check to see if its on the hour
  5389. if (bUpdateServerTime)
  5390. {
  5391. new hour, mins;
  5392. time(hour, mins);
  5393.  
  5394. //if its on the hour then alert
  5395. {
  5396. if (mins == 0)
  5397. alertHour(hour, 0);
  5398. if (mins == 30)
  5399. alertHour(hour, 1);
  5400. }
  5401. }
  5402. }
  5403.  
  5404. public showClockMenu(id)
  5405. {
  5406. //show the main menu to the player
  5407. show_menu(id, MAIN_MENU_KEYS, gszMainMenuText, -1, "clockMainMenu");
  5408.  
  5409. return PLUGIN_HANDLED;
  5410. }
  5411.  
  5412. public handleMainMenu(id, num)
  5413. {
  5414. switch (num)
  5415. {
  5416. case N1: createClockAiming(id, CM_SERVERTIME);
  5417. case N2: createClockAiming(id, CM_BUILDTIMELEFT);
  5418. case N4: deleteClockAiming(id);
  5419. case N5: scaleClockAiming(id, 0.1);
  5420. case N6: scaleClockAiming(id, -0.1);
  5421. case N7: saveClocks(id);
  5422. case N8: loadClocks(id);
  5423. }
  5424.  
  5425. //show menu again
  5426. if (num != N0)
  5427. {
  5428. showClockMenu(id);
  5429. }
  5430.  
  5431. return PLUGIN_HANDLED;
  5432. }
  5433.  
  5434. createClockAiming(id, clockType)
  5435. {
  5436. //make sure player has access to this command
  5437. if (get_user_flags(id) & ADMIN_CLOCK)
  5438. {
  5439. new origin[3];
  5440. new Float:vOrigin[3];
  5441. new Float:vAngles[3];
  5442. new Float:vNormal[3];
  5443.  
  5444. //get the origin of where the player is aiming
  5445. get_user_origin(id, origin, 3);
  5446. IVecFVec(origin, vOrigin);
  5447.  
  5448. new bool:bSuccess = traceClockAngles(id, vAngles, vNormal, 1000.0);
  5449.  
  5450. //if the trace was successfull
  5451. if (bSuccess)
  5452. {
  5453. //if the plane the trace hit is vertical
  5454. if (vNormal[2] == 0.0)
  5455. {
  5456. //create the clock
  5457. new bool:bSuccess = createClock(clockType, vOrigin, vAngles, vNormal);
  5458.  
  5459. //if clock created successfully
  5460. if (bSuccess)
  5461. {
  5462. client_print(id, print_chat, "%sCreated clock", gszPrefix);
  5463. }
  5464. }
  5465. else
  5466. {
  5467. client_print(id, print_chat, "%sYou must place the clock on a vertical wall!", gszPrefix);
  5468. }
  5469. }
  5470. else
  5471. {
  5472. client_print(id, print_chat, "%sMove closer to the target to create the clock", gszPrefix);
  5473. }
  5474. }
  5475. }
  5476.  
  5477. bool:createClock(clockType, Float:vOrigin[3], Float:vAngles[3], Float:vNormal[3], Float:fScale = 1.0)
  5478. {
  5479. new clock = create_entity(gszInfoTarget);
  5480. new digit[4];
  5481. new bool:bFailed = false;
  5482.  
  5483. //create 4 new entities to use for digits on the clock
  5484. for (new i = 0; i < 4; ++i)
  5485. {
  5486. digit[i] = create_entity(gszInfoTarget);
  5487.  
  5488. //if failed boolean is false and entity failed to create
  5489. if (!bFailed && !is_valid_ent(digit[i]))
  5490. {
  5491. bFailed = true;
  5492. break;
  5493. }
  5494. }
  5495.  
  5496. //make sure all entities were created successfully
  5497. if (is_valid_ent(clock) && !bFailed)
  5498. {
  5499. //adjust the origin to lift the clock off the wall (prevent flickering)
  5500. vOrigin[0] += (vNormal[0] * 0.5);
  5501. vOrigin[1] += (vNormal[1] * 0.5);
  5502. vOrigin[2] += (vNormal[2] * 0.5);
  5503.  
  5504. //set clock properties
  5505. entity_set_string(clock, EV_SZ_classname, gszClockClassname);
  5506. entity_set_int(clock, EV_INT_solid, SOLID_NOT);
  5507. entity_set_model(clock, gszClockFaces);
  5508. entity_set_vector(clock, EV_VEC_angles, vAngles);
  5509. entity_set_float(clock, EV_FL_scale, fScale);
  5510. entity_set_origin(clock, vOrigin);
  5511. entity_set_int(clock, EV_INT_groupinfo, clockType);
  5512.  
  5513. //set the entity frame (clock face) depending on the clock type
  5514. switch (clockType)
  5515. {
  5516. case CM_SERVERTIME: entity_set_float(clock, EV_FL_frame, 0.0);
  5517. case CM_BUILDTIMELEFT: entity_set_float(clock, EV_FL_frame, 1.0);
  5518. }
  5519.  
  5520. //link the digits entities to the clock
  5521. entity_set_int(clock, EV_INT_iuser1, digit[0]);
  5522. entity_set_int(clock, EV_INT_iuser2, digit[1]);
  5523. entity_set_int(clock, EV_INT_iuser3, digit[2]);
  5524. entity_set_int(clock, EV_INT_iuser4, digit[3]);
  5525.  
  5526. new digitValues[4];
  5527.  
  5528. //setup the digits to make up the time
  5529. for (new i = 0; i < 4; ++i)
  5530. {
  5531. //setup digit properties
  5532. entity_set_string(digit[i], EV_SZ_classname, gszClockDigitClassname);
  5533. entity_set_vector(digit[i], EV_VEC_angles, vAngles);
  5534. entity_set_model(digit[i], gszClockDigits);
  5535. entity_set_float(digit[i], EV_FL_scale, fScale);
  5536.  
  5537. //set digit position
  5538. set_digit_origin(i, digit[i], vOrigin, vNormal, fScale);
  5539.  
  5540. //get the time digits
  5541. getTimeDigits(clockType, digitValues);
  5542.  
  5543. //set the in-game clocks digits
  5544. set_clock_digits(clock, digitValues);
  5545. }
  5546.  
  5547. return true;
  5548. }
  5549. else
  5550. {
  5551. //delete clock face if it created successfully
  5552. if (is_valid_ent(clock))
  5553. {
  5554. remove_entity(clock);
  5555. }
  5556.  
  5557. //iterate though the entity array and delete whichever ones created successfully
  5558. for (new i = 0; i < 4; ++i)
  5559. {
  5560. if (is_valid_ent(digit[i]))
  5561. {
  5562. remove_entity(digit[i]);
  5563. }
  5564. }
  5565. }
  5566.  
  5567. return false;
  5568. }
  5569.  
  5570. deleteClockAiming(id)
  5571. {
  5572. new bool:bDeleted;
  5573. new clock = get_clock_aiming(id);
  5574.  
  5575. if (clock)
  5576. {
  5577. //delete the clock
  5578. bDeleted = deleteClock(clock);
  5579.  
  5580. //if the clock was deleted successfully
  5581. if (bDeleted)
  5582. {
  5583. client_print(id, print_chat, "%sDeleted clock", gszPrefix);
  5584. }
  5585. }
  5586. }
  5587.  
  5588. bool:deleteClock(ent)
  5589. {
  5590. //if the entity is a clock
  5591. if (isClock(ent))
  5592. {
  5593. //get entity IDs of digits on the clock
  5594. new digit[4];
  5595. digit[0] = entity_get_int(ent, EV_INT_iuser1);
  5596. digit[1] = entity_get_int(ent, EV_INT_iuser2);
  5597. digit[2] = entity_get_int(ent, EV_INT_iuser3);
  5598. digit[3] = entity_get_int(ent, EV_INT_iuser4);
  5599.  
  5600. //delete the digits on the clock if they're valid
  5601. if (is_valid_ent(digit[0])) remove_entity(digit[0]);
  5602. if (is_valid_ent(digit[1])) remove_entity(digit[1]);
  5603. if (is_valid_ent(digit[2])) remove_entity(digit[2]);
  5604. if (is_valid_ent(digit[3])) remove_entity(digit[3]);
  5605.  
  5606. //delete the clock face
  5607. remove_entity(ent);
  5608.  
  5609. //successfully deleted the clock
  5610. return true;
  5611. }
  5612.  
  5613. return false;
  5614. }
  5615.  
  5616. scaleClockAiming(id, Float:fScaleAmount)
  5617. {
  5618. //get the clock the player is aiming at (if any)
  5619. new clock = get_clock_aiming(id);
  5620.  
  5621. //if player is aiming at a clock
  5622. if (clock)
  5623. {
  5624. //get the clocks digit entities
  5625. new digit[4];
  5626. new bSuccess = get_clock_digits(clock, digit);
  5627.  
  5628. //if successfully got clocks digit entities
  5629. if (bSuccess)
  5630. {
  5631. new Float:vOrigin[3];
  5632. new Float:vNormal[3];
  5633. new Float:vAngles[3];
  5634.  
  5635. //get the clocks current scale and add on the specified amount
  5636. new Float:fScale = entity_get_float(clock, EV_FL_scale);
  5637. fScale += fScaleAmount;
  5638.  
  5639. //make sure the scale isn't negative
  5640. if (fScale > 0.01)
  5641. {
  5642. //set the clocks scale
  5643. entity_set_float(clock, EV_FL_scale, fScale);
  5644.  
  5645. //get the clocks origin and angles
  5646. entity_get_vector(clock, EV_VEC_origin, vOrigin);
  5647. entity_get_vector(clock, EV_VEC_angles, vAngles);
  5648.  
  5649. //get the clocks normal vector from the angles
  5650. angle_vector(vAngles, ANGLEVECTOR_FORWARD, vNormal);
  5651.  
  5652. //set the normal to point in the opposite direction
  5653. vNormal[0] = -vNormal[0];
  5654. vNormal[1] = -vNormal[1];
  5655. vNormal[2] = -vNormal[2];
  5656.  
  5657. //enlarge the clocks digits by the specified amount
  5658. for (new i = 0; i < 4; ++i)
  5659. {
  5660. //set the digits scale
  5661. entity_set_float(digit[i], EV_FL_scale, fScale);
  5662.  
  5663. //adjust the digits origin because of the new scale
  5664. set_digit_origin(i, digit[i], vOrigin, vNormal, fScale);
  5665. }
  5666. }
  5667. }
  5668. }
  5669. }
  5670.  
  5671. saveClocks(id)
  5672. {
  5673. //make sure player has access to this command
  5674. if (get_user_flags(id) & ADMIN_CLOCK)
  5675. {
  5676. new ent = -1;
  5677. new Float:vOrigin[3];
  5678. new Float:vAngles[3];
  5679. new Float:fScale;
  5680. new clockCount = 0;
  5681. new szData[128];
  5682.  
  5683. //open file for writing
  5684. new file = fopen(gszFile, "wt");
  5685. new clockType;
  5686.  
  5687. while ((ent = find_ent_by_class(ent, gszClockClassname)))
  5688. {
  5689. //get clock info
  5690. entity_get_vector(ent, EV_VEC_origin, vOrigin);
  5691. entity_get_vector(ent, EV_VEC_angles, vAngles);
  5692. fScale = entity_get_float(ent, EV_FL_scale);
  5693. clockType = entity_get_int(ent, EV_INT_groupinfo);
  5694.  
  5695. //format clock info and save it to file
  5696. formatex(szData, 128, "%c %f %f %f %f %f %f %f^n", gClockSaveIds[clockType], vOrigin[0], vOrigin[1], vOrigin[2], vAngles[0], vAngles[1], vAngles[2], fScale);
  5697. fputs(file, szData);
  5698.  
  5699. //increment clock count
  5700. ++clockCount;
  5701. }
  5702.  
  5703. //get players name
  5704. new szName[32];
  5705. get_user_name(id, szName, 32);
  5706.  
  5707. //notify all admins that the player saved clocks to file
  5708. for (new i = 1; i <= 32; ++i)
  5709. {
  5710. //make sure player is connected
  5711. if (is_user_connected(i))
  5712. {
  5713. if (get_user_flags(i) & ADMIN_CLOCK)
  5714. {
  5715. client_print(i, print_chat, "%s'%s' saved %d clock%s to file!", gszPrefix, szName, clockCount, (clockCount == 1 ? "" : "s"));
  5716. }
  5717. }
  5718. }
  5719.  
  5720. //close file
  5721. fclose(file);
  5722. }
  5723. }
  5724.  
  5725. loadClocks(id)
  5726. {
  5727. //if the clock save file exists
  5728. if (file_exists(gszFile))
  5729. {
  5730. new szData[128];
  5731. new szType[2];
  5732. new oX[13], oY[13], oZ[13];
  5733. new aX[13], aY[13], aZ[13];
  5734. new szScale[13];
  5735. new Float:vOrigin[3];
  5736. new Float:vAngles[3];
  5737. new Float:vNormal[3];
  5738. new Float:fScale;
  5739. new clockCount = 0;
  5740.  
  5741. //open the file for reading
  5742. new file = fopen(gszFile, "rt");
  5743.  
  5744. //iterate through all the lines in the file
  5745. while (!feof(file))
  5746. {
  5747. szType = "";
  5748. fgets(file, szData, 128);
  5749. parse(szData, szType, 2, oX, 12, oY, 12, oZ, 12, aX, 12, aY, 12, aZ, 12, szScale, 12);
  5750.  
  5751. vOrigin[0] = str_to_float(oX);
  5752. vOrigin[1] = str_to_float(oY);
  5753. vOrigin[2] = str_to_float(oZ);
  5754. vAngles[0] = str_to_float(aX);
  5755. vAngles[1] = str_to_float(aY);
  5756. vAngles[2] = str_to_float(aZ);
  5757. fScale = str_to_float(szScale);
  5758.  
  5759. if (strlen(szType) > 0)
  5760. {
  5761. //get the normal vector from the angles
  5762. angle_vector(vAngles, ANGLEVECTOR_FORWARD, vNormal);
  5763.  
  5764. //set the normal to point in the opposite direction
  5765. vNormal[0] = -vNormal[0];
  5766. vNormal[1] = -vNormal[1];
  5767. vNormal[2] = -vNormal[2];
  5768.  
  5769. //create the clock depending on the clock type
  5770. switch (szType[0])
  5771. {
  5772. case 'C': createClock(CM_SERVERTIME, vOrigin, vAngles, vNormal, fScale);
  5773. case 'T': createClock(CM_BUILDTIMELEFT, vOrigin, vAngles, vNormal, fScale);
  5774. }
  5775.  
  5776. ++clockCount;
  5777. }
  5778. }
  5779.  
  5780. //close the file
  5781. fclose(file);
  5782.  
  5783. //if a player is loading the clocks
  5784. if (id > 0 && id <= 32)
  5785. {
  5786. //get players name
  5787. new szName[32];
  5788. get_user_name(id, szName, 32);
  5789.  
  5790. //notify all admins that the player loaded clocks from file
  5791. for (new i = 1; i <= 32; ++i)
  5792. {
  5793. //make sure player is connected
  5794. if (is_user_connected(i))
  5795. {
  5796. if (get_user_flags(i) & ADMIN_CLOCK)
  5797. {
  5798. client_print(i, print_chat, "%s'%s' loaded %d clock%s from file!", gszPrefix, szName, clockCount, (clockCount == 1 ? "" : "s"));
  5799. }
  5800. }
  5801. }
  5802. }
  5803. }
  5804. }
  5805.  
  5806. get_clock_aiming(id)
  5807. {
  5808. //get hit point for where player is aiming
  5809. new origin[3];
  5810. new Float:vOrigin[3];
  5811. get_user_origin(id, origin, 3);
  5812. IVecFVec(origin, vOrigin);
  5813.  
  5814. new ent = -1;
  5815.  
  5816. //find all entities within a 2 unit sphere
  5817. while ((ent = find_ent_in_sphere(ent, vOrigin, 2.0)))
  5818. {
  5819. //if entity is a clock
  5820. if (isClock(ent))
  5821. {
  5822. return ent;
  5823. }
  5824. }
  5825.  
  5826. return 0;
  5827. }
  5828.  
  5829. bool:traceClockAngles(id, Float:vAngles[3], Float:vNormal[3], Float:fDistance)
  5830. {
  5831. //get players origin and add on their view offset
  5832. new Float:vPlayerOrigin[3];
  5833. new Float:vViewOfs[3];
  5834. entity_get_vector(id, EV_VEC_origin, vPlayerOrigin);
  5835. entity_get_vector(id, EV_VEC_view_ofs, vViewOfs);
  5836. vPlayerOrigin[0] += vViewOfs[0];
  5837. vPlayerOrigin[1] += vViewOfs[1];
  5838. vPlayerOrigin[2] += vViewOfs[2];
  5839.  
  5840. //calculate the end point for trace using the players view angle
  5841. new Float:vAiming[3];
  5842. entity_get_vector(id, EV_VEC_v_angle, vAngles);
  5843. vAiming[0] = vPlayerOrigin[0] + floatcos(vAngles[1], degrees) * fDistance;
  5844. vAiming[1] = vPlayerOrigin[1] + floatsin(vAngles[1], degrees) * fDistance;
  5845. vAiming[2] = vPlayerOrigin[2] + floatsin(-vAngles[0], degrees) * fDistance;
  5846.  
  5847. //trace a line and get the normal for the plane it hits
  5848. new trace = trace_normal(id, vPlayerOrigin, vAiming, vNormal);
  5849.  
  5850. //convert the normal into an angle vector
  5851. vector_to_angle(vNormal, vAngles);
  5852.  
  5853. //spin the angle vector 180 degrees around the Y axis
  5854. vAngles[1] += 180.0;
  5855. if (vAngles[1] >= 360.0) vAngles[1] -= 360.0;
  5856.  
  5857. return bool:trace;
  5858. }
  5859.  
  5860. set_digit_origin(i, digit, Float:vOrigin[3], Float:vNormal[3], Float:fScale)
  5861. {
  5862. //make sure the digit entity is valid
  5863. if (is_valid_ent(digit))
  5864. {
  5865. new Float:vDigitNormal[3];
  5866. new Float:vPos[3];
  5867. new Float:fVal;
  5868.  
  5869. //change the normals to get the left and right depending on the digit
  5870. vDigitNormal = vNormal;
  5871. if (i == 0 || i == 1) vDigitNormal[X] = -vDigitNormal[X];
  5872. if (i == 2 || i == 3) vDigitNormal[Y] = -vDigitNormal[Y];
  5873.  
  5874. //setup digit position
  5875. fVal = (((gfClockSize[X] / 2) * gfDigitOffsetMultipliers[i])) * fScale;
  5876. vPos[X] = vOrigin[X] + (vDigitNormal[Y] * fVal);
  5877. vPos[Y] = vOrigin[Y] + (vDigitNormal[X] * fVal);
  5878. vPos[Z] = vOrigin[Z] + vNormal[Z] - ((gfTitleSize / 2.0 )* fScale);
  5879.  
  5880. //bring digit sprites forwards off the clock face to prevent flickering
  5881. vPos[0] += (vNormal[0] * 0.5);
  5882. vPos[1] += (vNormal[1] * 0.5);
  5883. vPos[2] += (vNormal[2] * 0.5);
  5884.  
  5885. //set the digits origin
  5886. entity_set_origin(digit, vPos);
  5887. }
  5888. }
  5889.  
  5890. bool:getTimeDigits(clockType, digitValues[4])
  5891. {
  5892. switch (clockType)
  5893. {
  5894. case CM_SERVERTIME:
  5895. {
  5896. new bool:bChanged = false;
  5897. new szTime[5];
  5898. new timeOffset = get_cvar_num("cm_timeoffset");
  5899. new hourType = get_cvar_num("cm_hourtype");
  5900.  
  5901. //get the time
  5902. new hour, mins;
  5903. time(hour, mins);
  5904.  
  5905. //add on the time offset
  5906. hour += timeOffset;
  5907.  
  5908. //make sure hour hasnt gone out of bounds
  5909. while (hour < 0)
  5910. {
  5911. hour += 24;
  5912. }
  5913.  
  5914. while (hour >= 24)
  5915. {
  5916. hour -= 24;
  5917. }
  5918.  
  5919. //if server is set to use 12 hour clocks
  5920. if (hourType == 0)
  5921. {
  5922. if (hour > 12)
  5923. {
  5924. hour -= 12;
  5925. }
  5926. if (hour == 0)
  5927. hour = 12
  5928. }
  5929.  
  5930. //format the time into a string
  5931. format(szTime, 4, "%s%d%s%d", (hour < 10 ? "0" : ""), hour, (mins < 10 ? "0" : ""), mins);
  5932.  
  5933. //calculate time digits from string
  5934. digitValues[0] = szTime[0] - 48;
  5935. digitValues[1] = szTime[1] - 48;
  5936. digitValues[2] = szTime[2] - 48;
  5937. digitValues[3] = szTime[3] - 48;
  5938.  
  5939. //if the time has changed
  5940. if (!equal(gszTime, szTime))
  5941. {
  5942. gszTime = szTime;
  5943. bChanged = true;
  5944. }
  5945.  
  5946. //if the hour type has changed
  5947. if (hourType != gHourTypeOld)
  5948. {
  5949. gHourTypeOld = hourType;
  5950. bChanged = true;
  5951. }
  5952.  
  5953. //if the time offset value has changed
  5954. if (timeOffset != gTimeOffsetOld)
  5955. {
  5956. gTimeOffsetOld = timeOffset;
  5957. bChanged = true;
  5958. }
  5959.  
  5960. return bChanged;
  5961. }
  5962.  
  5963. case CM_BUILDTIMELEFT:
  5964. {
  5965. new mins = count_down / 60
  5966. new secs = count_down % 60
  5967.  
  5968. //format the timeleft into a string
  5969. new szTime[5];
  5970. format(szTime, 4, "%s%d%s%d", (mins < 10 ? "0" : ""), mins, (secs < 10 ? "0" : ""), secs);
  5971.  
  5972. //calculate time digits from string
  5973. digitValues[0] = szTime[0] - 48;
  5974. digitValues[1] = szTime[1] - 48;
  5975. digitValues[2] = szTime[2] - 48;
  5976. digitValues[3] = szTime[3] - 48;
  5977.  
  5978. return true;
  5979. }
  5980. }
  5981.  
  5982. return false;
  5983. }
  5984.  
  5985. bool:get_clock_digits(clock, digit[4])
  5986. {
  5987. //if the entity is a clock
  5988. if (isClock(clock))
  5989. {
  5990. //get entity IDs of digits on the clock
  5991. digit[0] = entity_get_int(clock, EV_INT_iuser1);
  5992. digit[1] = entity_get_int(clock, EV_INT_iuser2);
  5993. digit[2] = entity_get_int(clock, EV_INT_iuser3);
  5994. digit[3] = entity_get_int(clock, EV_INT_iuser4);
  5995.  
  5996. //make sure all the clock digits are valid
  5997. for (new i = 0; i < 4; ++i)
  5998. {
  5999. if (!is_valid_ent(digit[i]))
  6000. {
  6001. log_amx("%sInvalid digit entity in clock", gszPrefix);
  6002.  
  6003. return false;
  6004. }
  6005. }
  6006. }
  6007.  
  6008. return true;
  6009. }
  6010.  
  6011. set_clock_digits(clock, digitValues[4])
  6012. {
  6013. //get the clocks digit entities
  6014. new digits[4];
  6015. new bool:bSuccess = get_clock_digits(clock, digits);
  6016.  
  6017. //if successfully got clocks digit entities
  6018. if (bSuccess)
  6019. {
  6020. //setup clock digits
  6021. entity_set_float(digits[0], EV_FL_frame, float(digitValues[0]));
  6022. entity_set_float(digits[1], EV_FL_frame, float(digitValues[1]));
  6023. entity_set_float(digits[2], EV_FL_frame, float(digitValues[2]));
  6024. entity_set_float(digits[3], EV_FL_frame, float(digitValues[3]));
  6025. }
  6026. }
  6027.  
  6028. alertHour(hour, half)
  6029. {
  6030. //if we're set to speak the hour
  6031. if (get_cvar_num("cm_hourannounce") > 0)
  6032. {
  6033. new szMeridiem[4] = "am";
  6034. new szHour[16];
  6035.  
  6036. new timeOffset = get_cvar_num("cm_timeoffset");
  6037. hour += timeOffset;
  6038.  
  6039. //setup hour. Make sure hour isn't above 12 and isn't 00 o'clock
  6040. if (hour >= 12) szMeridiem = "pm";
  6041. if (hour > 12) hour -= 12;
  6042. if (hour == 0) hour = 12;
  6043.  
  6044. //get the hour as a word
  6045. num_to_word(hour, szHour, 15);
  6046.  
  6047. //speak the time
  6048. if (half)
  6049. client_cmd(0, "spk ^"fvox/bell _period %s thirty %s^"", szHour, szMeridiem);
  6050. else
  6051. client_cmd(0, "spk ^"fvox/bell _period %s %s^"", szHour, szMeridiem);
  6052. }
  6053. }
  6054.  
  6055. bool:isClock(ent)
  6056. {
  6057. //if entity is valid
  6058. if (is_valid_ent(ent))
  6059. {
  6060. //get classname of entity
  6061. new szClassname[32];
  6062. entity_get_string(ent, EV_SZ_classname, szClassname, 32);
  6063.  
  6064. //if classname of entity matches global clock classname
  6065. if (equal(szClassname, gszClockClassname))
  6066. {
  6067. //entity is a clock
  6068. return true;
  6069. }
  6070. }
  6071.  
  6072. return false;
  6073. }
  6074.  
  6075. public find_minmaxs()
  6076. {
  6077. new Float:origin[3], i
  6078. new ent = engfunc(EngFunc_FindEntityByString,g_MaxPlayers,"classname","info_player_deathmatch")
  6079. while(ent)
  6080. {
  6081. if(pev_valid(ent))
  6082. {
  6083. pev(ent,pev_origin,origin)
  6084. for(i=0;i<3;i++)
  6085. {
  6086. if(origin[i] < g_mins[i])
  6087. g_mins[i] = origin[i]
  6088. if(origin[i] > g_maxs[i])
  6089. g_maxs[i] = origin[i]
  6090. }
  6091. }
  6092. ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_deathmatch")
  6093. }
  6094.  
  6095. /*ent = engfunc(EngFunc_FindEntityByString,g_MaxPlayers,"classname","info_player_start")
  6096. while(ent)
  6097. {
  6098. if(pev_valid(ent))
  6099. {
  6100. pev(ent,pev_origin,origin)
  6101. for(i=0;i<3;i++)
  6102. {
  6103. if(origin[i] < g_mins[1][i])
  6104. g_mins[1][i] = origin[i]
  6105. if(origin[i] > g_maxs[1][i])
  6106. g_maxs[1][i] = origin[i]
  6107. }
  6108. }
  6109. ent = engfunc(EngFunc_FindEntityByString,ent,"classname","info_player_start")
  6110. }*/
  6111.  
  6112. g_maxs[2] += 70.0
  6113. //g_mins[1][2] -= 70.0
  6114. g_maxs[0] += 32.0
  6115. //g_mins[1][0] -= 32.0
  6116. g_maxs[1] += 32.0
  6117. //g_mins[1][1] -= 32.0
  6118.  
  6119. for(new j=0;j<3;j++)
  6120. {
  6121. I_max[j] = floatround(g_maxs[j])
  6122. I_min[j] = floatround(g_mins[j])
  6123. }
  6124. }
  6125.  
  6126. new cur_offset[33]
  6127. new options_on_menu[8][33]
  6128.  
  6129. public show_colors_menu(id,offset)
  6130. {
  6131. if(offset<0) offset = 0
  6132.  
  6133. new keys, curnum, menu[2048]
  6134. for(new i=offset;i<RAINBOW;i++)
  6135. {
  6136. /*if(i==24)
  6137. {
  6138. options_on_menu[curnum][id] = 24
  6139. keys += (1<<curnum)
  6140. curnum++
  6141. format(menu,2047,"%s^n%d. Random",menu,curnum)
  6142. break;
  6143. }
  6144. else
  6145. {*/
  6146. options_on_menu[curnum][id] = i
  6147. keys += (1<<curnum)
  6148.  
  6149. curnum++
  6150. format(menu,2047,"%s^n%d. %s",menu,curnum,g_ColorName[i])
  6151.  
  6152. if(curnum==8)
  6153. break;
  6154. //}
  6155. }
  6156.  
  6157. format(menu,2047,"\ySelect Your Color:^nCurrent: \r%s\w^n^n%s^n", g_ColorName[g_pColor[id]],menu)
  6158. if(curnum==8 && offset<12)
  6159. {
  6160. keys += (1<<8)
  6161. format(menu,2047,"%s^n9. Next",menu)
  6162. }
  6163. if(offset)
  6164. {
  6165. keys += (1<<9)
  6166. format(menu,2047,"%s^n0. Back",menu)
  6167. }
  6168.  
  6169. show_menu(id,keys,menu,-1,"ColorsSelect")
  6170. }
  6171.  
  6172. public colors_pushed(id,key)
  6173. {
  6174. if(key<8)
  6175. {
  6176. g_pColor[id] = options_on_menu[key][id]
  6177. print_color(id, "%s You have picked ^x04%s^x01 as your color", formatmodname, g_ColorName[g_pColor[id]])
  6178. cur_offset[id] = 0
  6179. }
  6180. else
  6181. {
  6182. if(key==8)
  6183. cur_offset[id] += 8
  6184. if(key==9)
  6185. cur_offset[id] -= 8
  6186. show_colors_menu(id,cur_offset[id])
  6187. }
  6188.  
  6189. return ;
  6190. }
  6191.  
  6192.  
  6193. /*-------------------------------------------------------------------------------------------------|
  6194. |-----------------------------------End Items Menu Code--------------------------------------------|
  6195. |-------------------------------------------------------------------------------------------------*/
  6196.  
  6197. Log(const message_fmt[], any:...)
  6198. {
  6199. static message[256];
  6200. vformat(message, sizeof(message) - 1, message_fmt, 2);
  6201.  
  6202. static filename[96];
  6203. static dir[64];
  6204. if( !dir[0] )
  6205. {
  6206. get_basedir(dir, sizeof(dir) - 1);
  6207. add(dir, sizeof(dir) - 1, "/logs");
  6208. }
  6209.  
  6210. format_time(filename, sizeof(filename) - 1, "%m-%d-%Y");
  6211. format(filename, sizeof(filename) - 1, "%s/ADMIN_ACTIVITY_%s.log", dir, filename);
  6212.  
  6213. log_to_file(filename, "%s", message);
  6214. }
  6215.  
  6216. public get_load_key(id)
  6217. {
  6218. get_user_ip(id, g_AuthID[id], charsmax(g_AuthID[]));
  6219. LoadLevel(id);
  6220. }
  6221.  
  6222. SaveLevel(id)
  6223. {
  6224. new szData[512];
  6225. new szKey[128];
  6226.  
  6227. formatex( szKey , 127 , "%s-ID-Upgrades", g_AuthID[id]);
  6228. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i" , credits[id], g_unHPLevel[id], g_unAPLevel[id], g_unGRLevel[id], g_unINLevel[id], hasplayed[id], g_unSPLevel[id], g_pColor[id], g_pThirdPerson[id]);
  6229.  
  6230. nvault_set( g_Vault , szKey , szData );
  6231.  
  6232. ////////////////////////////////////////////////////////////////////////////////////
  6233.  
  6234. formatex( szKey , 127 , "%s-ID-Unlocks", g_AuthID[id]);
  6235. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
  6236. g_galil[id],g_aug[id],g_m4a1[id],g_famas[id],g_ak47[id],
  6237. g_tmp[id],g_mp5[id],g_ump[id],g_p90[id],
  6238. g_m3[id],g_xm1014[id],g_scout[id],g_awp[id],g_para[id],
  6239. g_p228[id],g_five[id],g_elite[id],g_glock[id],g_deagle[id]);
  6240.  
  6241. nvault_set( g_Vault , szKey , szData );
  6242.  
  6243. ////////////////////////////////////////////////////////////////////////////////////
  6244.  
  6245. formatex( szKey , 127 , "%s-ID", g_AuthID[id]);
  6246. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i %i %i %i" ,
  6247. g_PlayerAchievements[id][0], zombiekills[id],
  6248. g_PlayerAchievements[id][1], humankills[id],
  6249. g_PlayerAchievements[id][2], objectsmoved[id],
  6250. g_PlayerAchievements[id][3], headshots[id],
  6251. g_PlayerAchievements[id][4], connects[id],
  6252. g_PlayerAchievements[id][5], killedby[id]);
  6253.  
  6254. nvault_set( g_Vault , szKey , szData );
  6255.  
  6256. ////////////////////////////////////////////////////////////////////////////////////
  6257.  
  6258. formatex( szKey , 127 , "%s-ID-2", g_AuthID[id]);
  6259. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i %i %i %i" ,
  6260. g_PlayerAchievements[id][6], clubdread[id],
  6261. g_PlayerAchievements[id][7], totaldamage[id],
  6262. g_PlayerAchievements[id][8], pistolonly[id],
  6263. g_PlayerAchievements[id][9], invisibleman[id],
  6264. g_PlayerAchievements[id][10],
  6265. g_PlayerAchievements[id][11], weaponsbought[id],
  6266. g_PlayerAchievements[id][12]);
  6267.  
  6268. nvault_set( g_Vault , szKey , szData );
  6269.  
  6270. ////////////////////////////////////////////////////////////////////////////////////
  6271.  
  6272. formatex( szKey , 127 , "%s-ID-3", g_AuthID[id]);
  6273. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i" ,
  6274. g_PlayerAchievements[id][13],
  6275. g_PlayerAchievements[id][14],
  6276. g_PlayerAchievements[id][15],
  6277. g_PlayerAchievements[id][16],
  6278. g_PlayerAchievements[id][17],
  6279. g_PlayerAchievements[id][18],
  6280. g_PlayerAchievements[id][19], g_itemsbought[id],
  6281. g_PlayerAchievements[id][20]);
  6282.  
  6283. nvault_set( g_Vault , szKey , szData );
  6284.  
  6285. return PLUGIN_CONTINUE
  6286. }
  6287.  
  6288. LoadLevel(id)
  6289. {
  6290. new szData[512];
  6291. new szKey[128];
  6292.  
  6293. formatex( szKey , 127 , "%s-ID-Upgrades", g_AuthID[id]);
  6294. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i" , credits[id], g_unHPLevel[id], g_unAPLevel[id], g_unGRLevel[id], g_unINLevel[id], hasplayed[id], g_unSPLevel[id], g_pColor[id], g_pThirdPerson[id]);
  6295.  
  6296. nvault_get(g_Vault, szKey, szData, 511)
  6297.  
  6298. new unlocknum[32], hplevel[32], aplevel[32], grlevel[32], inlevel[32], haspl[32], splevel[32], color[32], third[32]
  6299.  
  6300. parse(szData, unlocknum, 31, hplevel, 31, aplevel, 31, grlevel, 31, inlevel, 31, haspl, 31, splevel, 31, color, 31, third, 31)
  6301.  
  6302. credits[id] = str_to_num(unlocknum)
  6303. g_unHPLevel[id] = str_to_num(hplevel)
  6304. g_unAPLevel[id] = str_to_num(aplevel)
  6305. g_unGRLevel[id] = str_to_num(grlevel)
  6306. g_unINLevel[id] = str_to_num(inlevel)
  6307. hasplayed[id] = str_to_num(haspl)
  6308. g_unSPLevel[id] = str_to_num(splevel)
  6309. g_pColor[id] = str_to_num(color)
  6310. g_pThirdPerson[id] = str_to_num(third)
  6311.  
  6312. ////////////////////////////////////////////////////////////////////////////////////
  6313.  
  6314. formatex( szKey , 127 , "%s-ID-Unlocks", g_AuthID[id]);
  6315. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
  6316. g_galil[id],g_aug[id],g_m4a1[id],g_famas[id],g_ak47[id],
  6317. g_tmp[id],g_mp5[id],g_ump[id],g_p90[id],
  6318. g_m3[id],g_xm1014[id],g_scout[id],g_awp[id],g_para[id],
  6319. g_p228[id],g_five[id],g_elite[id],g_glock[id],g_deagle[id])
  6320.  
  6321. nvault_get(g_Vault, szKey, szData, 511)
  6322.  
  6323. new galil[32],aug[32],m4a1[32],famas[32],ak47[32],
  6324. tmp[32],mp5[32],ump[32],p90[32],
  6325. m3[32],xm1014[32],scout[32],awp[32],para[32],
  6326. p228[32],five[32],elite[32],glock[32],deagle[32]
  6327.  
  6328. parse(szData, galil, 31, aug, 31, m4a1, 31, famas, 31, ak47, 31,
  6329. tmp, 31, mp5, 31, ump, 31, p90, 31,
  6330. m3, 31, xm1014, 31, scout, 31, awp, 31, para, 31,
  6331. p228, 31, five, 31, elite, 31, glock, 31, deagle, 31)
  6332.  
  6333. g_galil[id] = str_to_num(galil)
  6334. g_aug[id] = str_to_num(aug)
  6335. g_m4a1[id] = str_to_num(m4a1)
  6336. g_famas[id] = str_to_num(famas)
  6337. g_ak47[id] = str_to_num(ak47)
  6338.  
  6339. g_tmp[id] = str_to_num(tmp)
  6340. g_mp5[id] = str_to_num(mp5)
  6341. g_ump[id] = str_to_num(ump)
  6342. g_p90[id] = str_to_num(p90)
  6343.  
  6344. g_m3[id] = str_to_num(m3)
  6345. g_xm1014[id] = str_to_num(xm1014)
  6346. g_scout[id] = str_to_num(scout)
  6347. g_awp[id] = str_to_num(awp)
  6348. g_para[id] = str_to_num(para)
  6349.  
  6350. g_p228[id] = str_to_num(p228)
  6351. g_five[id] = str_to_num(five)
  6352. g_elite[id] = str_to_num(elite)
  6353. g_glock[id] = str_to_num(glock)
  6354. g_deagle[id] = str_to_num(deagle)
  6355.  
  6356. ////////////////////////////////////////////////////////////////////////////////////
  6357.  
  6358. formatex( szKey , 127 , "%s-ID", g_AuthID[id]);
  6359. formatex(szData , 511, "%i %i %i %i %i %i %i %i %i %i %i %i",
  6360. g_PlayerAchievements[id][0], zombiekills[id],
  6361. g_PlayerAchievements[id][1], humankills[id],
  6362. g_PlayerAchievements[id][2], objectsmoved[id],
  6363. g_PlayerAchievements[id][3], headshots[id],
  6364. g_PlayerAchievements[id][4], connects[id],
  6365. g_PlayerAchievements[id][5], killedby[id]);
  6366.  
  6367. nvault_get(g_Vault, szKey, szData, 511)
  6368.  
  6369. new ach1[32], zkills[32],
  6370. ach2[32], hkills[32],
  6371. ach3[32], objects[32],
  6372. ach4[32], headsh[32],
  6373. ach5[32], conne[32],
  6374. ach6[32], killby[32]
  6375.  
  6376. parse(szData, ach1, 31, zkills, 31,
  6377. ach2, 31, hkills, 31,
  6378. ach3, 31, objects, 31,
  6379. ach4, 31, headsh, 31,
  6380. ach5, 31, conne, 31,
  6381. ach6, 31, killby, 31)
  6382.  
  6383. g_PlayerAchievements[id][0] = str_to_num(ach1)
  6384. zombiekills[id] = str_to_num(zkills)
  6385. g_PlayerAchievements[id][1] = str_to_num(ach2)
  6386. humankills[id] = str_to_num(hkills)
  6387. g_PlayerAchievements[id][2] = str_to_num(ach3)
  6388. objectsmoved[id] = str_to_num(objects)
  6389. g_PlayerAchievements[id][3] = str_to_num(ach4)
  6390. headshots[id] = str_to_num(headsh)
  6391. g_PlayerAchievements[id][4] = str_to_num(ach5)
  6392. connects[id] = str_to_num(conne)
  6393. g_PlayerAchievements[id][5] = str_to_num(ach6)
  6394. killedby[id] = str_to_num(killby)
  6395.  
  6396. ////////////////////////////////////////////////////////////////////////////////////
  6397.  
  6398. formatex( szKey , 127 , "%s-ID-2", g_AuthID[id]);
  6399. formatex(szData , 511, "%i %i %i %i %i %i %i %i %i %i %i %i",
  6400. g_PlayerAchievements[id][6], clubdread[id],
  6401. g_PlayerAchievements[id][7], totaldamage[id],
  6402. g_PlayerAchievements[id][8], pistolonly[id],
  6403. g_PlayerAchievements[id][9], invisibleman[id],
  6404. g_PlayerAchievements[id][10],
  6405. g_PlayerAchievements[id][11], weaponsbought[id],
  6406. g_PlayerAchievements[id][12]);
  6407.  
  6408. nvault_get(g_Vault, szKey, szData, 511)
  6409.  
  6410. new ach7[32], cdread[32],
  6411. ach8[32], dmg[32],
  6412. ach9[32], pist[32],
  6413. ach10[32], invis[32],
  6414. ach11[32],
  6415. ach12[32], weps[32],
  6416. ach13[32]
  6417.  
  6418. parse(szData, ach7, 31, cdread, 31,
  6419. ach8, 31, dmg, 31,
  6420. ach9, 31, pist, 31,
  6421. ach10, 31, invis, 31,
  6422. ach11, 31,
  6423. ach12, 31, weps, 31,
  6424. ach13, 31)
  6425.  
  6426. g_PlayerAchievements[id][6] = str_to_num(ach7)
  6427. clubdread[id] = str_to_num(cdread)
  6428. g_PlayerAchievements[id][7] = str_to_num(ach8)
  6429. totaldamage[id] = str_to_float(dmg)
  6430. g_PlayerAchievements[id][8] = str_to_num(ach9)
  6431. pistolonly[id] = str_to_num(pist)
  6432. g_PlayerAchievements[id][9] = str_to_num(ach10)
  6433. invisibleman[id] = str_to_num(invis)
  6434. g_PlayerAchievements[id][10] = str_to_num(ach11)
  6435. g_PlayerAchievements[id][11] = str_to_num(ach12)
  6436. weaponsbought[id] = str_to_num(weps)
  6437. g_PlayerAchievements[id][12] = str_to_num(ach13)
  6438.  
  6439. ////////////////////////////////////////////////////////////////////////////////////
  6440.  
  6441. formatex( szKey , 127 , "%s-ID-3", g_AuthID[id]);
  6442. formatex( szData , 511 , "%i %i %i %i %i %i %i %i %i" ,
  6443. g_PlayerAchievements[id][13],
  6444. g_PlayerAchievements[id][14],
  6445. g_PlayerAchievements[id][15],
  6446. g_PlayerAchievements[id][16],
  6447. g_PlayerAchievements[id][17],
  6448. g_PlayerAchievements[id][18],
  6449. g_PlayerAchievements[id][19], g_itemsbought[id],
  6450. g_PlayerAchievements[id][20]);
  6451.  
  6452. nvault_get(g_Vault, szKey, szData, 511)
  6453.  
  6454. new ach14[32],
  6455. ach15[32],
  6456. ach16[32],
  6457. ach17[32],
  6458. ach18[32],
  6459. ach19[32],
  6460. ach20[32], items[32],
  6461. ach21[32]
  6462.  
  6463. parse(szData, ach14, 31,
  6464. ach15, 31,
  6465. ach16, 31,
  6466. ach17, 31,
  6467. ach18, 31,
  6468. ach19, 31,
  6469. ach20, 31, items, 31,
  6470. ach21, 31)
  6471.  
  6472. g_PlayerAchievements[id][13] = str_to_num(ach14)
  6473. g_PlayerAchievements[id][14] = str_to_num(ach15)
  6474. g_PlayerAchievements[id][15] = str_to_num(ach16)
  6475. g_PlayerAchievements[id][16] = str_to_num(ach17)
  6476. g_PlayerAchievements[id][17] = str_to_num(ach18)
  6477. g_PlayerAchievements[id][18] = str_to_num(ach19)
  6478. g_PlayerAchievements[id][19] = str_to_num(ach20)
  6479. g_itemsbought[id] = str_to_num(items)
  6480. g_PlayerAchievements[id][20] = str_to_num(ach21)
  6481.  
  6482. connects[id]++
  6483. }
  6484.  
  6485. print_color(target, const message[], any:...)
  6486. {
  6487. static buffer[512], i, argscount
  6488. argscount = numargs()
  6489.  
  6490. // Send to everyone
  6491. if (!target)
  6492. {
  6493. static player
  6494. for (player = 1; player <= g_MaxPlayers; player++)
  6495. {
  6496. if (!g_isconnected[player])
  6497. continue;
  6498.  
  6499. static changed[5], changedcount
  6500. changedcount = 0
  6501.  
  6502. for (i = 2; i < argscount; i++)
  6503. {
  6504. if (getarg(i) == LANG_PLAYER)
  6505. {
  6506. setarg(i, 0, player)
  6507. changed[changedcount] = i
  6508. changedcount++
  6509. }
  6510. }
  6511. vformat(buffer, charsmax(buffer), message, 3)
  6512.  
  6513. message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, _, player)
  6514. write_byte(player)
  6515. write_string(buffer)
  6516. message_end()
  6517.  
  6518. for (i = 0; i < changedcount; i++)
  6519. setarg(changed[i], 0, LANG_PLAYER)
  6520. }
  6521. }
  6522. // Send to specific target
  6523. else
  6524. {
  6525. vformat(buffer, charsmax(buffer), message, 3)
  6526.  
  6527. message_begin(MSG_ONE, gmsgSayText, _, target)
  6528. write_byte(target)
  6529. write_string(buffer)
  6530. message_end()
  6531. }
  6532. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement