HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2.   Here is the original Cheer Plugin that I modified to allow purchasing and other enhancements :) :) :)
  3.   Original Cheer Plugin: https://www.csplague.com/plugin-cs-1-6-eklentiler/1174-cheer-plugini-gulucuk-plugini.html
  4.  
  5. */
  6.  
  7. #include <amxmodx>
  8. #include <amxmisc>
  9. #include <fakemeta_util>
  10. #include <colorchat>
  11. #include <nvault>
  12. #include <cstrike>
  13.  
  14. #define PLUGIN "Cheer System"
  15. #define VERSION "2.0"
  16. #define AUTHOR "Nanosuit"
  17.  
  18. #define MAX_EMOJI 5
  19. #define LANG_FILE "CheerSystem.txt"
  20.  
  21. new const PREFIX[] = "^1[^4Cheer System^1]"
  22. new const SPRITE[] = "sprites/cheer/sprite_cheer.spr"
  23.  
  24. enum _:INFO {
  25. File[128],
  26. Name[128],
  27. Price
  28. };
  29.  
  30. new const Cheer[][INFO] = {
  31. { "cheer/GoblinLaugh.wav", "CHEER1", 1000 },
  32. { "cheer/HuhCatMeme.wav", "CHEER2", 2000 },
  33. { "cheer/DoorStuck.wav", "CHEER3", 3000 },
  34. { "cheer/Bruh.wav", "CHEER4", 4000 },
  35. { "cheer/Skibidi.wav", "CHEER5", 5000 }
  36. };
  37.  
  38. new g_PurchaseEmoji[33][5],
  39. bool:g_activeEmoji[33][MAX_EMOJI],
  40. sprites,
  41. g_nVault,
  42. iSteamID[33][32];
  43.  
  44. // CS Player PData Offsets (win32)
  45. const OFFSET_CSMENUCODE = 205
  46.  
  47. // Menu keys (Here i use Zombie Plague Menu Style Not The New Style Because The Keys Doesn't Work)
  48. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  49.  
  50. public plugin_init()
  51. {
  52. register_plugin(PLUGIN , VERSION, AUTHOR)
  53.  
  54. register_clcmd("+startcheer", "_StartEmoji")
  55. register_clcmd("-stopcheer", "_StopEmoji")
  56. register_clcmd("say /cheer", "_ShowCheerMenu")
  57.  
  58. register_dictionary(LANG_FILE)
  59.  
  60. register_menu("Cheers Menu", KEYSMENU, "_ShowCheerMenuHandle")
  61. }
  62.  
  63. public plugin_precache()
  64. {
  65. for(new i; i < sizeof(Cheer); i++) precache_sound(Cheer[i][File])
  66. sprites = precache_model(SPRITE)
  67. }
  68. public client_putinserver(id) {
  69. if (is_user_bot(id)) return
  70. get_user_authid(id, iSteamID[id], charsmax(iSteamID))
  71. if (containi(iSteamID[id], "_ID_LAN") != -1 || containi(iSteamID[id], "HLTV") != -1) get_user_ip(id, iSteamID[id], charsmax(iSteamID), 1)
  72. LoadData(id)
  73. }
  74.  
  75. public client_disconnect(id) {
  76. if (is_user_bot(id)) return
  77. SaveData(id)
  78. }
  79.  
  80. public _ShowCheerMenu(id)
  81. {
  82. new String[121]
  83. format(String, charsmax(String), "%L", id , "CHEER_MAIN_MENU")
  84. new menu = menu_create(String, "_ShowCheerMenuHandle")
  85.  
  86. for(new i; i < sizeof(Cheer); i++){
  87. new item[128]
  88. if (g_PurchaseEmoji[id][i] == 0) {
  89. format(item, charsmax(item), "\w%L \d| \r$%i", id, Cheer[i][Name], Cheer[i][Price])
  90. } else {
  91. format(item, charsmax(item), "\d%L [\r%L\d]", id, Cheer[i][Name], id, g_activeEmoji[id][i] ? "ENABLED" : "DISABLED")
  92. }
  93. menu_additem(menu, item, fmt("%i", i + 1))
  94. }
  95.  
  96. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  97. menu_setprop(menu, MPROP_BACKNAME, "Back")
  98. menu_setprop(menu, MPROP_NEXTNAME, "Next")
  99. menu_setprop(menu, MPROP_EXITNAME, "Exit")
  100.  
  101. menu_display(id, menu, 0)
  102. return PLUGIN_HANDLED
  103. }
  104.  
  105. public _ShowCheerMenuHandle(id, menu, item)
  106. {
  107. if(item == MENU_EXIT)
  108. {
  109. menu_destroy(menu)
  110. return
  111. }
  112.  
  113. new data[9], szName[64]
  114. new access, callback
  115. menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback)
  116. new key = str_to_num(data) - 1
  117.  
  118. if(g_PurchaseEmoji[id][key] == 0)
  119. {
  120. if(cs_get_user_money(id) >= Cheer[key][Price])
  121. {
  122. g_PurchaseEmoji[id][key] = 1
  123. cs_set_user_money(id, cs_get_user_money(id) - Cheer[key][Price])
  124. ColorChat(id, GREEN, "%s %L ^"%L^"", PREFIX, id, "BUY_CHEER_CHAT", id, Cheer[key][Name])
  125. client_cmd(id, "spk items/gunpickup2.wav")
  126. }
  127. else
  128. {
  129. ColorChat(id, GREEN, "%s %L", PREFIX, id, "DONT_HAVE_ENOUGH", Cheer[key][Price] - cs_get_user_money(id))
  130. }
  131. }
  132. else
  133. {
  134. g_activeEmoji[id][key] = !g_activeEmoji[id][key]
  135.  
  136. if(g_activeEmoji[id][key])
  137. {
  138. for (new i = 0; i < MAX_EMOJI; i++) {
  139. if (i != key) g_activeEmoji[id][i] = false
  140. }
  141. }
  142. set_task(0.3, "_ShowCheerMenu", id)
  143. }
  144. _ShowCheerMenu(id)
  145. }
  146.  
  147. public _StartEmoji(id)
  148. {
  149. if (!is_user_alive(id))
  150. return PLUGIN_HANDLED;
  151.  
  152. _PlayEmoji(id);
  153. return PLUGIN_HANDLED;
  154. }
  155.  
  156. public _StopEmoji(id)
  157. {
  158. _MuteEmoji(id);
  159. return PLUGIN_HANDLED;
  160. }
  161.  
  162. public _PlayEmoji(id)
  163. {
  164. if (!is_user_connected(id))
  165. return;
  166.  
  167. for (new i = 0; i < MAX_EMOJI; i++) {
  168. if (g_activeEmoji[id][i] == true) {
  169. _ShowEmojiEffect(id);
  170. _PlayCheerSound(id, i);
  171. return;
  172. }
  173. }
  174.  
  175. ColorChat(id, GREEN, "%s %L", PREFIX, id, "NO_ACTIVE_CHEER");
  176. }
  177. stock _ShowEmojiEffect(id)
  178. {
  179. message_begin(MSG_ALL, SVC_TEMPENTITY);
  180. write_byte(TE_PLAYERATTACHMENT); // Attach effect to player
  181. write_byte(id); // Player ID
  182. write_coord(50); // Position (X)
  183. write_short(sprites); // Sprite to attach
  184. write_short(25); // Attachment type (id)
  185. message_end();
  186. }
  187.  
  188. stock _PlayCheerSound(id, index)
  189. {
  190. // Retrieve the sound file name and play the cheer sound
  191. new soundFile[128];
  192. format(soundFile, charsmax(soundFile), Cheer[index][File]);
  193. emit_sound(id, CHAN_VOICE, soundFile, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  194. }
  195.  
  196. stock _MuteEmoji(id)
  197. {
  198. message_begin(MSG_ALL, SVC_TEMPENTITY);
  199. write_byte(125); // Message type for mute
  200. write_byte(id); // Player ID
  201. message_end();
  202. }
  203.  
  204. public plugin_cfg()
  205. {
  206. g_nVault = nvault_open( "SaveCheers")
  207. if(g_nVault == INVALID_HANDLE) set_fail_state("ERROR Cheer System nVault Data cannot be opened, the file does not exist!")
  208. }
  209.  
  210. SaveData(id)
  211. {
  212. if (g_nVault == INVALID_HANDLE)
  213. {
  214. server_print("ERROR: Could not save data for player %d - nVault handle is invalid", id);
  215. return;
  216. }
  217.  
  218. new szAuthid[32]
  219. get_user_authid(id, szAuthid, charsmax(szAuthid))
  220.  
  221. new szVaultKey[128], szVaultData[512]
  222. formatex(szVaultKey, 127, "EMOJI_%s", szAuthid)
  223. formatex(szVaultData, 511, "%i %i %i %i %i %i %i %i %i %i",
  224. g_PurchaseEmoji[id][0], g_PurchaseEmoji[id][1], g_PurchaseEmoji[id][2],
  225. g_PurchaseEmoji[id][3], g_PurchaseEmoji[id][4],
  226. g_activeEmoji[id][0], g_activeEmoji[id][1],
  227. g_activeEmoji[id][2], g_activeEmoji[id][3], g_activeEmoji[id][4])
  228.  
  229. nvault_set(g_nVault, szVaultKey, szVaultData)
  230. }
  231. LoadData(id)
  232. {
  233. if (g_nVault == INVALID_HANDLE)
  234. {
  235. server_print("ERROR: Could not load data for player %d - nVault handle is invalid", id);
  236. return;
  237. }
  238.  
  239. new szAuthid[32]
  240. get_user_authid(id, szAuthid, charsmax(szAuthid))
  241.  
  242. new szVaultKey[128], szVaultData[512]
  243. formatex(szVaultKey, 127, "EMOJI_%s", szAuthid)
  244. nvault_get(g_nVault, szVaultKey, szVaultData, 511)
  245.  
  246. new SavePurchase[MAX_EMOJI][64], Active[MAX_EMOJI][64]
  247.  
  248. parse(szVaultData, SavePurchase[0], 63, SavePurchase[1], 63, SavePurchase[2], 63,
  249. SavePurchase[3], 63, SavePurchase[4], 63,
  250. Active[0], 63, Active[1], 63, Active[2], 63,
  251. Active[3], 63, Active[4], 63)
  252.  
  253. for (new i = 0; i < MAX_EMOJI; i++) {
  254. g_PurchaseEmoji[id][i] = str_to_num(SavePurchase[i]);
  255. g_activeEmoji[id][i] = str_to_num(Active[i]);
  256. }
  257. server_print("Data loaded for player with ID: %d", id);
  258. }
  259.  
  260.  
  261. public plugin_end() {
  262. if (g_nVault != INVALID_HANDLE) {
  263. nvault_close(g_nVault)
  264. }
  265. }