CheezPuff

[Free] iGaming DR Custom Shop [By CheezPuff)

Jul 11th, 2024 (edited)
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.57 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5. #include <nvault>
  6. #include <engine>
  7.  
  8. #define PLUGIN "Custom USP Shop Ultimate Optimized"
  9. #define VERSION "1.3"
  10. #define AUTHOR "Ariel - CheezPuff"
  11.  
  12. #define m_pPlayer 41
  13. #define m_flAccuracy 108
  14. #define MAX_PLAYERS 32
  15. #define TASK_SHOWHUD 1000
  16.  
  17. enum {
  18.     USP_DEFAULT,
  19.     USP_SILENCER,
  20.     USP_MATCH,
  21.     USP_EXPERT,
  22.     USP_GUARDIAN,
  23.     MAX_USP_MODELS
  24. }
  25.  
  26. new const g_usp_names[MAX_USP_MODELS][] = { "Default USP", "USP Silencer", "USP Match", "USP Expert", "USP Guardian" }
  27. new const g_usp_models[MAX_USP_MODELS][] = { "models/v_usp.mdl", "models/v_usp_silencer.mdl", "models/v_usp_match.mdl", "models/v_usp_expert.mdl", "models/v_usp_guardian.mdl" }
  28. new const g_usp_prices[MAX_USP_MODELS] = { 0, 1000, 2000, 3000, 4000 }
  29.  
  30. // Stats
  31. new const g_usp_damage_base[MAX_USP_MODELS] = { 34, 35, 35, 36, 37 }
  32. new const g_usp_accuracy_base[MAX_USP_MODELS] = { 65, 68, 70, 72, 75 }
  33. new const g_usp_recoil_text[MAX_USP_MODELS][] = { "High", "Medium", "Medium", "Low", "Very Low" }
  34. new const g_usp_firerate_base[MAX_USP_MODELS] = { 380, 390, 400, 410, 420 }
  35.  
  36. new g_player_usp_model[MAX_PLAYERS + 1], g_player_usp_level[MAX_PLAYERS + 1]
  37. new g_player_cash[MAX_PLAYERS + 1], g_player_xp[MAX_PLAYERS + 1]
  38. new const g_upgrade_costs[] = { 500, 1000, 1500, 2000, 2500 }
  39.  
  40. new g_vault, g_HudSync
  41.  
  42. public plugin_init() {
  43.     register_plugin(PLUGIN, VERSION, AUTHOR)
  44.    
  45.     register_clcmd("say /uspshop", "cmd_usp_shop")
  46.    
  47.     RegisterHam(Ham_Item_Deploy, "weapon_usp", "fw_USPDeploy_Post", 1)
  48.     RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  49.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_usp", "fw_WeaponPrimaryAttack_Post", 1)
  50.     register_event("DeathMsg", "event_death", "a")
  51.  
  52.     g_vault = nvault_open("usp_shop_data")
  53.     g_HudSync = CreateHudSyncObj()
  54.    
  55.     set_task(1.0, "update_hud_global", TASK_SHOWHUD, .flags = "b")
  56. }
  57.  
  58. public plugin_precache() {
  59.     for (new i = 0; i < MAX_USP_MODELS; i++) precache_model(g_usp_models[i])
  60. }
  61.  
  62. public client_putinserver(id) {
  63.     load_player_data(id)
  64. }
  65.  
  66. public client_disconnected(id) {
  67.     save_player_data(id)
  68. }
  69.  
  70. public cmd_usp_shop(id) {
  71.     if (!is_user_alive(id)) {
  72.         client_print_color(id, print_team_default, "^4[USP Shop] ^1You must be alive to use the shop.")
  73.         return PLUGIN_HANDLED
  74.     }
  75.     show_usp_models_menu(id)
  76.     return PLUGIN_HANDLED
  77. }
  78.  
  79. public show_usp_models_menu(id) {
  80.     static szTitle[64], szItem[64], szData[4];
  81.     formatex(szTitle, charsmax(szTitle), "\yUSP Shop^n\wYour Cash: \r$%d^n", g_player_cash[id])
  82.    
  83.     new menu = menu_create(szTitle, "menu_handler_models")
  84.    
  85.     for (new i = 0; i < MAX_USP_MODELS; i++) {
  86.         formatex(szItem, charsmax(szItem), "%s \y[$%d]", g_usp_names[i], g_usp_prices[i])
  87.         formatex(szData, charsmax(szData), "%d", i)
  88.         menu_additem(menu, szItem, szData)
  89.     }
  90.     menu_display(id, menu, 0)
  91. }
  92.  
  93. public menu_handler_models(id, menu, item) {
  94.     if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
  95.    
  96.     static szData[6]; menu_item_getinfo(menu, item, _, szData, charsmax(szData))
  97.     show_usp_details(id, str_to_num(szData))
  98.    
  99.     menu_destroy(menu); return PLUGIN_HANDLED
  100. }
  101.  
  102. public show_usp_details(id, model) {
  103.     static szTitle[64], szItem[64], szData[16];
  104.     formatex(szTitle, charsmax(szTitle), "\yViewing: \w%s^n", g_usp_names[model])
  105.    
  106.     new menu = menu_create(szTitle, "menu_handler_usp_details")
  107.    
  108.     formatex(szItem, charsmax(szItem), "\wYour Cash: \y$%d", g_player_cash[id])
  109.     menu_additem(menu, szItem, "none")
  110.    
  111.     formatex(szItem, charsmax(szItem), "\wUSP Price: \y$%d^n", g_usp_prices[model])
  112.     menu_additem(menu, szItem, "none")
  113.    
  114.     formatex(szData, charsmax(szData), "stats_%d", model)
  115.     menu_additem(menu, "\wView USP Stats", szData)
  116.    
  117.     if (g_player_usp_model[id] == model) {
  118.         if (g_player_usp_level[id] < 5) {
  119.             formatex(szItem, charsmax(szItem), "\wUpgrade [\y$%d\w]", g_upgrade_costs[g_player_usp_level[id]])
  120.             formatex(szData, charsmax(szData), "upgrade_%d", model)
  121.             menu_additem(menu, szItem, szData)
  122.         } else {
  123.             menu_additem(menu, "\dMaximum Level Reached", "none")
  124.         }
  125.     } else {
  126.         formatex(szData, charsmax(szData), "buy_%d", model)
  127.         menu_additem(menu, "\rPurchase", szData)
  128.     }
  129.    
  130.     menu_display(id, menu, 0)
  131. }
  132.  
  133. public menu_handler_usp_details(id, menu, item) {
  134.     if (item == MENU_EXIT) { menu_destroy(menu); show_usp_models_menu(id); return PLUGIN_HANDLED; }
  135.    
  136.     static szData[20]; menu_item_getinfo(menu, item, _, szData, charsmax(szData))
  137.    
  138.     if (contain(szData, "stats_") != -1) {
  139.         show_usp_abilities(id, str_to_num(szData[6]))
  140.     } else if (contain(szData, "buy_") != -1) {
  141.         purchase_usp(id, str_to_num(szData[4]))
  142.     } else if (contain(szData, "upgrade_") != -1) {
  143.         upgrade_usp(id)
  144.     }
  145.    
  146.     menu_destroy(menu); return PLUGIN_HANDLED
  147. }
  148.  
  149. public show_usp_abilities(id, model) {
  150.     static szTitle[64], szItem[64], szData[4];
  151.     new level = (g_player_usp_model[id] == model) ? g_player_usp_level[id] : 0
  152.    
  153.     formatex(szTitle, charsmax(szTitle), "\y%s \w- Stats (Lvl %d)^n", g_usp_names[model], level)
  154.     new menu = menu_create(szTitle, "menu_handler_back")
  155.    
  156.     formatex(szItem, charsmax(szItem), "\wDamage: \y%d", g_usp_damage_base[model] + (level * 2))
  157.     menu_additem(menu, szItem)
  158.    
  159.     formatex(szItem, charsmax(szItem), "\wAccuracy: \y%d%%", g_usp_accuracy_base[model] + (level * 2))
  160.     menu_additem(menu, szItem)
  161.    
  162.     formatex(szItem, charsmax(szItem), "\wRecoil: \y%s", g_usp_recoil_text[model])
  163.     menu_additem(menu, szItem)
  164.    
  165.     formatex(szItem, charsmax(szItem), "\wFire Rate: \y%d RPM", g_usp_firerate_base[model] + (level * 10))
  166.     menu_additem(menu, szItem)
  167.    
  168.     formatex(szItem, charsmax(szItem), "\wWall Bang: \y%s^n", (level >= 3) ? "\rEnabled" : "\dDisabled")
  169.     menu_additem(menu, szItem)
  170.    
  171.     formatex(szData, charsmax(szData), "%d", model)
  172.     menu_additem(menu, "\yBack", szData)
  173.    
  174.     menu_display(id, menu, 0)
  175. }
  176.  
  177. public menu_handler_back(id, menu, item) {
  178.     if (item != MENU_EXIT) {
  179.         static szData[6]; menu_item_getinfo(menu, item, _, szData, charsmax(szData))
  180.         show_usp_details(id, str_to_num(szData))
  181.     }
  182.     menu_destroy(menu); return PLUGIN_HANDLED
  183. }
  184.  
  185. // --- Logic ---
  186.  
  187. public purchase_usp(id, model) {
  188.     if (g_player_cash[id] < g_usp_prices[model]) {
  189.         client_print_color(id, print_team_default, "^4[USP Shop] ^1Not enough cash!");
  190.         return
  191.     }
  192.     g_player_cash[id] -= g_usp_prices[model]
  193.     g_player_usp_model[id] = model
  194.     g_player_usp_level[id] = 0
  195.    
  196.     if (get_user_weapon(id) == CSW_USP) set_pev(id, pev_viewmodel2, g_usp_models[model])
  197.     client_print_color(id, print_team_default, "^4[USP Shop] ^1Purchased ^3%s^1!", g_usp_names[model])
  198. }
  199.  
  200. public upgrade_usp(id) {
  201.     new level = g_player_usp_level[id]
  202.     if (level >= 5 || g_player_cash[id] < g_upgrade_costs[level]) return
  203.    
  204.     g_player_cash[id] -= g_upgrade_costs[level]
  205.     g_player_usp_level[id]++
  206.     client_print_color(id, print_team_default, "^4[USP Shop] ^1Upgraded to Level ^3%d^1!", g_player_usp_level[id])
  207. }
  208.  
  209. public fw_USPDeploy_Post(weapon_ent) {
  210.     new id = get_pdata_cbase(weapon_ent, m_pPlayer, 4)
  211.     if (is_user_connected(id)) set_pev(id, pev_viewmodel2, g_usp_models[g_player_usp_model[id]])
  212. }
  213.  
  214. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits) {
  215.     if (!is_user_connected(attacker) || get_user_weapon(attacker) != CSW_USP) return HAM_IGNORED
  216.    
  217.     new Float:mult = 1.0 + (float(g_player_usp_model[attacker]) * 0.05) + (float(g_player_usp_level[attacker]) * 0.02)
  218.     SetHamParamFloat(4, damage * mult)
  219.     return HAM_HANDLED
  220. }
  221.  
  222. public fw_WeaponPrimaryAttack_Post(entity) {
  223.     new id = pev(entity, pev_owner)
  224.     set_pdata_float(entity, m_flAccuracy, 1.0 - (float(g_player_usp_level[id]) * 0.05), 4)
  225. }
  226.  
  227. public event_death() {
  228.     new killer = read_data(1)
  229.     if (!is_user_connected(killer)) return
  230.    
  231.     g_player_cash[killer] += (cs_get_user_team(killer) == CS_TEAM_T) ? 300 : 150
  232.     g_player_xp[killer] += 10
  233. }
  234.  
  235. public update_hud_global() {
  236.     static id, szBuffer[128];
  237.     for (id = 1; id <= MaxClients; id++) {
  238.         if (!is_user_alive(id)) continue
  239.        
  240.         formatex(szBuffer, charsmax(szBuffer), "Cash: $%d | XP: %d | USP: %s (Lvl %d)",
  241.             g_player_cash[id], g_player_xp[id], g_usp_names[g_player_usp_model[id]], g_player_usp_level[id])
  242.            
  243.         set_hudmessage(0, 255, 0, 0.02, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
  244.         ShowSyncHudMsg(id, g_HudSync, "%s", szBuffer)
  245.     }
  246. }
  247.  
  248. save_player_data(id) {
  249.     static szAuthid[32], szData[64];
  250.     get_user_authid(id, szAuthid, charsmax(szAuthid))
  251.     formatex(szData, charsmax(szData), "%d %d %d %d", g_player_usp_model[id], g_player_usp_level[id], g_player_cash[id], g_player_xp[id])
  252.     nvault_set(g_vault, szAuthid, szData)
  253. }
  254.  
  255. load_player_data(id) {
  256.     static szAuthid[32], szData[64];
  257.     get_user_authid(id, szAuthid, charsmax(szAuthid))
  258.     if (nvault_get(g_vault, szAuthid, szData, charsmax(szData))) {
  259.         static szM[4], szL[4], szC[12], szX[12]
  260.         parse(szData, szM, charsmax(szM), szL, charsmax(szL), szC, charsmax(szC), szX, charsmax(szX))
  261.         g_player_usp_model[id] = str_to_num(szM)
  262.         g_player_usp_level[id] = str_to_num(szL)
  263.         g_player_cash[id] = str_to_num(szC)
  264.         g_player_xp[id] = str_to_num(szX)
  265.     }
  266. }
  267.  
  268. public plugin_end() nvault_close(g_vault)
Advertisement
Add Comment
Please, Sign In to add comment