hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.20. 04:21



Jelenlévő felhasználók

Jelenleg 248 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 247 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Majestic-12 [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Smoke Gránát
HozzászólásElküldve: 2017.09.03. 21:33 
Offline
Senior Tag
Avatar

Csatlakozott: 2016.02.04. 10:58
Hozzászólások: 219
Megköszönt másnak: 11 alkalommal
Megköszönték neki: 18 alkalommal
Hali, én 1 olyan plugint keresek ami le tiltja a Smoke gránátot.
Köszi előre :)

_________________
STEAM
[steam]konfigos[/steam]
YOUTUBE

Szerverek
Kép
_
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Smoke Gránát
HozzászólásElküldve: 2017.09.04. 16:17 
Offline
Őstag
Avatar

Csatlakozott: 2017.08.21. 15:51
Hozzászólások: 1109
Megköszönt másnak: 36 alkalommal
Megköszönték neki: 195 alkalommal
DR.AnimaL írta:
Hali, én 1 olyan plugint keresek ami le tiltja a Smoke gránátot.
Köszi előre :)


Nem találtam semmit.
Ez alapján próbáld:
Ez limitálja a megvásárolható gránátokat, tehát gondolom 0 értéken tiltani is tudja.

  1. /**
  2.     Credit:
  3.         AMXX Dev Team: Restrict Weapons
  4.         hoboman313: Hobo Nade Management (offsets, etc.)
  5.         OT: Flashbang Remote Control (gravity check)
  6.  
  7.     Description:
  8.         Limit the number of grenades a player can buy/use
  9.         Block limited action before they can be performed instead of taking away
  10.         hp from players afterward
  11.  
  12.     Compatibility:
  13.         Tested to work with all known weapon drop plugins:
  14.         Real Nade Drops, Real Weapon Drop, Weapons Drop Ability, etc.
  15.  
  16.     CVars:
  17.         nl_limit_buy 1:
  18.         nl_limit_use 0:
  19.             0: no limit
  20.             1: enabled
  21.  
  22.         nl_buy_flash 3:
  23.         nl_buy_hegren 2:
  24.         nl_buy_sgren 2:
  25.         nl_buy_all 5:
  26.         nl_use_flash 3:
  27.         nl_use_hegren 2:
  28.         nl_use_sgren 2:
  29.         nl_use_all 5:
  30.             0: no limit
  31.             positive values: limit amount
  32.  
  33.         nl_early_msg 1:
  34.             0: message when exceeding limit
  35.             1: message when reaching limit
  36.  
  37.     Command:
  38.         nl_reset:
  39.             Reset count for all players
  40.  
  41.     Client commands:
  42.         say /nl:
  43.         say_team /nl:
  44.             Display limits in chat
  45.  
  46.     Changelog:
  47.         0.5.2:
  48.             Minor optimization: no longer uses add string native
  49.  
  50.         0.5.1:
  51.             Minor code optimization
  52.             Reorganized some code; added comments
  53.  
  54.         0.5:
  55.             Improved compatibility of grenade throw detection
  56.             Improved behavior when switching to last weapon
  57.             Added primary attack check (optional)
  58.             Added ML support
  59.             Added say /nl command, report limits set by the server
  60.             Removed many loops; uses trie in some part
  61.             Removed dependency on csx module
  62.             CVar changes:
  63.                 Changed nbl prefix to nl
  64.                 Removed nbl_limit_type, now always per respawn
  65.                 Renamed nbl_limit_msg to nl_early_msg
  66.                 Removed nade-specific limit cvars
  67.                 Added nade-specific limit cvars for each action type
  68.                 Added nl_limit_buy, works similarly to nl_limit_use
  69.                 Negative values no longer have any effect
  70.                 Changed some default values (see CVars section for details)
  71.  
  72.         0.4:
  73.             Added nbl_limit_use cvar
  74.             Added nbl_limit_msg cvar
  75.             Added nbl_all cvar
  76.             Setting a limit to 0 now disables that specific limit
  77.             Various bug fixes
  78.             Reorganized some code
  79.             Fixed tag mismatch compiler warnings
  80.  
  81.         0.3:
  82.             Bug fix for rebuy/autobuy
  83.  
  84.         0.2:
  85.             Bug fix
  86.             Added nbl_reset command
  87.  
  88.         0.1:
  89.             Initial release
  90. **/
  91.  
  92. // In case something was missed by the CurWeapon hook
  93. // Will be called every frame when the attack button is held down
  94. // #define USE_CHECK_PRIMARY_ATTACK
  95.  
  96. // Affect:
  97.     // buy command (rebuy/autobuy)
  98.     // class name (last weapon switch)
  99.     // model (grenade throw)
  100. // Not really necessary as far as I can tell
  101. // #define CASE_INSENSITIVE_TRIE
  102.  
  103. #include <amxmodx>
  104. #include <amxmisc>
  105. #include <cstrike>
  106. #include <fakemeta>
  107. #include <hamsandwich>
  108.  
  109. /// Constants & globals ///
  110. // Constants
  111. const player_id_max = 33
  112. enum action_id { action_buy, action_use, action_id_max }
  113. const nade_id_max = 3
  114. new action_cmd[][] = {"buy", "use"}
  115. new nade_cmd[][] = {"flash", "hegren", "sgren", "all"}
  116. new nade_wid[] = {CSW_FLASHBANG, CSW_HEGRENADE, CSW_SMOKEGRENADE}
  117. new nade_wname[][] = {"weapon_flashbang", "weapon_hegrenade", "weapon_smokegrenade"}
  118. new nade_wname_i = 7 // "weapon_" prefix length
  119. new nade_model[][] = {"w_flashbang.mdl", "w_hegrenade.mdl", "w_smokegrenade.mdl"}
  120. new nade_model_i = 7 // "models/" prefix length
  121. new nade_menu_name[] = "BuyItem" // Old-style menu
  122. new nade_menu_id = -34 // VGUI menu
  123. new nade_menu_key[] = {MENU_KEY_3, MENU_KEY_4, MENU_KEY_5}
  124. new nade_ammo_max[] = {2, 1, 1}
  125. new nade_ammo_offset[] = {387, 388, 389}
  126. new last_item_offset = 375
  127. new last_item_alt[] = "weapon_knife"
  128. // These will be initialized in plugin_init
  129. new Trie:nade_cmd_trie
  130. new Trie:nade_wname_trie
  131. new Trie:nade_model_trie
  132.  
  133. // CVars
  134. // Initial values will be replaced by cvar pointers by register_cvar_num
  135. new action_limit[] = {1, 0}
  136. new nade_limit[][] = {{3, 2, 2, 5}, {3, 2, 2, 5}}
  137. new early_msg = 1
  138.  
  139. // Other globals
  140. new nade_count[player_id_max][_:action_id_max][nade_id_max + 1]
  141.  
  142. /// Utilities ///
  143. // String
  144. // Length constants for temporary buffers
  145. const str_len = 128
  146. const str_len2 = 32
  147. const str_len3 = 16
  148.  
  149. // As a convention, the last parameter is always the output string
  150. #define concat(%1,%2,%3) concat_l(%1,%2,%3,sizeof %3)
  151. #define concat_sd(%1,%2,%3) concat_l_sd(%1,%2,%3,sizeof %3)
  152. #define concat_s_s(%1,%2,%3) concat_l_s_s(%1,%2,%3,sizeof %3)
  153. #define str_copy(%1,%2) str_l_copy(%1,%2,sizeof %2)
  154. #define str_upper(%1,%2) str_l_upper(%1,%2,sizeof %2)
  155. #define num_str(%1,%2) num_l_str(%1,%2,sizeof %2)
  156. #define mls_str(%1,%2,%3,%4) (mls_l_str_l(%1,%2,%3,%4,sizeof %4),%4)
  157. // With explicit length as the last parameter
  158. #define concat_l(%1,%2,%3,%4) (formatex(%3,%4-1,"%s%s",%1,%2),%3)
  159. #define concat_l_sd(%1,%2,%3,%4) (formatex(%3,%4-1,"%s%d",%1,%2),%3)
  160. #define concat_l_s_s(%1,%2,%3,%4) (formatex(%3,%4-1,"%s_%s",%1,%2),%3)
  161. #define str_l_copy(%1,%2,%3) (copy(%2,%3-1,%1),%2)
  162. #define str_l_upper(%1,%2,%3) (strtoupper(str_l_copy(%1,%2,%3)),%2)
  163. #define num_l_str(%1,%2,%3) (num_to_str(%1,%2,%3-1),%2)
  164. #define mls_l_str_l(%1,%2,%3,%4,%5) formatex(%4,%5-1,"%L",%1,%2,%3)
  165.  
  166. // Message
  167. const Float:welcome_msg_delay = 25.0
  168. #define action_ml(%1,%2) action_l_ml(%1,%2,sizeof %2)
  169. #define nade_ml(%1,%2) nade_l_ml(%1,%2,sizeof %2)
  170. #define action_l_ml(%1,%2,%3) str_l_upper(action_cmd[%1],%2,%3)
  171. #define nade_l_ml(%1,%2,%3) str_l_upper(nade_cmd[%1],%2,%3)
  172.  
  173. // CVar/command
  174. register_cvar_num(&p, const c[])
  175. {
  176.     new s[str_len3]
  177.     p = register_cvar(c, num_str(p, s))
  178. }
  179. register_saycmd(const cmd[], const func[], flag, const info[])
  180. {
  181.     new say_prefix[][] = {"say ", "say_team "}, s[str_len2]
  182.     for(new i; i < sizeof say_prefix; i++)
  183.         register_clcmd(concat(say_prefix[i], cmd, s), func, flag, info)
  184. }
  185.  
  186. // CVar access
  187. cvar_enabled(c, n = 0, &v = 0)
  188.     return (v = get_pcvar_num(c)) > n
  189. limiting_nade(j, i, &l = 0)
  190.     return cvar_enabled(nade_limit[j][i], 0, l)
  191. limiting_action(actn)
  192.     return cvar_enabled(action_limit[actn])
  193. limiting_id_action(id, actn)
  194.     return is_user_alive(id) && limiting_action(actn)
  195.  
  196. // Trie access
  197. #if defined CASE_INSENSITIVE_TRIE
  198. trie_name_nid(Trie:t, const n[], &i)
  199. {
  200.     new s[str_len2]
  201.     return trie_name_str_nid(t, str_copy(n, s), i)
  202. }
  203. trie_name_str_nid(Trie:t, s[], &i) return TrieGetCell(t, (strtolower(s), s), i)
  204. #else
  205. trie_name_nid(Trie:t, const n[], &i) return TrieGetCell(t, n, i)
  206. trie_name_str_nid(Trie:t, s[], &i) return trie_name_nid(t, s, i)
  207. #endif
  208.  
  209. /// Main ///
  210. public plugin_init()
  211. {
  212.     register_plugin("Nade Limit", "0.5", "K.Nk")
  213.     register_dictionary("nadelimit.txt")
  214.  
  215.     register_concmd("nl_reset", "reset_count_all", ADMIN_LEVEL_A)
  216.     register_cvar_num(early_msg, "nl_early_msg")
  217.  
  218.     new s[str_len2], s2[str_len2]
  219.     // Action-specific cvars
  220.     for(new j; j < _:action_id_max; j++)
  221.     {
  222.         register_cvar_num(action_limit[j],
  223.             concat_s_s("nl_limit", action_cmd[j], s))
  224.         // Nade-specific cvars
  225.         for(new i; i <= nade_id_max; i++)
  226.             register_cvar_num(nade_limit[j][i],
  227.                 concat_s_s(concat_s_s("nl", action_cmd[j], s), nade_cmd[i], s2))
  228.     }
  229.     // Initialize tries
  230.     nade_cmd_trie = TrieCreate()
  231.     nade_wname_trie = TrieCreate()
  232.     nade_model_trie = TrieCreate()
  233.     // Other nade-specific stuff
  234.     for(new i; i < nade_id_max; i++)
  235.     {
  236.         // Buy menu/command hook
  237.         register_menucmd(register_menuid(nade_menu_name, 1),
  238.             nade_menu_key[i], concat_sd("buy_command", i, s))
  239.         register_menucmd(nade_menu_id,
  240.             nade_menu_key[i], concat_sd("buy_command", i, s))
  241.         register_clcmd(nade_cmd[i], concat_sd("buy_command", i, s))
  242. #if defined USE_CHECK_PRIMARY_ATTACK
  243.         // Primary attack hook
  244.         RegisterHam(Ham_Weapon_PrimaryAttack,
  245.             nade_wname[i], concat_sd("primary_attack", i, s))
  246. #endif
  247.         // CurWeapon hook
  248.         register_event("CurWeapon", concat_sd("cur_weapon", i, s), "be",
  249.             "1=1", concat_sd("2=", nade_wid[i], s2))
  250.         // Populate tries
  251.         TrieSetCell(nade_cmd_trie, nade_cmd[i], i)
  252.         TrieSetCell(nade_wname_trie, nade_wname[i][nade_wname_i], i)
  253.         TrieSetCell(nade_model_trie, nade_model[i], i)
  254.     }
  255.     // SetModel hook
  256.     register_forward(FM_SetModel, "set_model_post", 1)
  257.     // Reset condition hook
  258.     RegisterHam(Ham_Spawn, "player", "reset_count", 1)
  259.     // Say command
  260.     register_saycmd("/nl", "say_nl", 0, "- display nade limit info.")
  261. }
  262.  
  263. /// Misc. ///
  264. // Count reset
  265. public reset_count(pid)
  266. {
  267.     // Can't assign multidimensional array directly, so loop
  268.     new zeros[nade_id_max]
  269.     for(new j; j < _:action_id_max; j++)
  270.         nade_count[pid][j] = zeros
  271. }
  272. public reset_count_all()
  273.     for(new i; i < player_id_max; i++)
  274.         reset_count(i)
  275.  
  276. // Welcome message
  277. public client_putinserver(pid)
  278.     is_user_bot(pid) ||
  279.         set_task(welcome_msg_delay, "show_welcome_msg", pid)
  280. public show_welcome_msg(id)
  281.     // Don't display welcome message if no limit is set
  282.     // Check if any action limit is set
  283.     for(new j; j < _:action_id_max; j++)
  284.         if(limiting_action(j))
  285.             // Check if any nade limit for action j is set
  286.             for(new i; i <= nade_id_max; i++)
  287.                 if(limiting_nade(j, i))
  288.                 {
  289.                     // Now display welcome message
  290.                     client_print(id, print_chat, "%L", id, "WELCOME")
  291.                     return
  292.                 }
  293.  
  294. // Say command, report limits
  295. public say_nl(id)
  296. {
  297.     new j, s2[str_len2], s3[str_len3]
  298.     // For each action type
  299.     for(; j < _:action_id_max; j++)
  300.     {
  301.         new s[str_len]
  302.         // Get limit info in s
  303.         say_action(id, j, s, s2, s3)
  304.         // Print s
  305.         client_print(id, print_chat, "%L",
  306.             id, concat_s_s("REPORT", action_ml(j, s2), s3), s)
  307.     }
  308.     return PLUGIN_HANDLED
  309. }
  310.  
  311. say_action(id, j, s[], s2[], s3[],
  312.     s_len = sizeof s, s2_len = sizeof s2, s3_len = sizeof s3)
  313.     limiting_action(j) &&
  314.         // Get nade limits for action j, starting at nid = 0
  315.         say_nade(id, j, 0, 0, s, s2, s3, s_len, s2_len, s3_len) ||
  316.             // Report disabled if no nade limit
  317.             mls_l_str_l(id, "REPORT_DISABLED", "", s, s_len)
  318.  
  319. say_nade(id, j, i, k, s[], s2[], s3[], s_len, s2_len, s3_len)
  320. {
  321.     if(i <= nade_id_max)
  322.     {
  323.         new l, r
  324.         if(limiting_nade(j, i, l))
  325.         {
  326.             r = mls_l_str_l(id, \
  327.                 concat_l_s_s("REPORT_NADE", nade_l_ml(i, s, s_len), s2, s2_len), \
  328.                 num_l_str(l, s3, s3_len), s, s_len)
  329.             k++ && (r = mls_l_str_l(id, "REPORT_NADE_SEPARATOR", s, s2, s2_len),
  330.                 str_l_copy(s2, s, s_len))
  331.         }
  332.         // Get next nade limit
  333.         return say_nade(id, j, i + 1, k, s[r], s2, s3, s_len - r, s2_len, s3_len)
  334.     }
  335.     return k
  336. }
  337.  
  338. /// Check helpers ///
  339. print_limit_msg(pid, actn, nid)
  340. {
  341.     new s[str_len2], s2[str_len2], s3[str_len2], s4[str_len2]
  342.     client_print(pid, print_center, "%L", pid,
  343.         // "NOTIFY_*"
  344.         concat_s_s("NOTIFY", action_ml(actn, s), s2),
  345.         // "NOTIFY_NADE_*"
  346.         mls_str(pid, concat_s_s("NOTIFY_NADE", nade_ml(nid, s3), s4), "", s3))
  347.     return true
  348. }
  349.  
  350. limit_check_and_notify(pid, actn, nid)
  351.     return \
  352.         limit_reached(pid, actn, nade_id_max) &&
  353.             print_limit_msg(pid, actn, nade_id_max) ||
  354.         limit_reached(pid, actn, nid) &&
  355.             print_limit_msg(pid, actn, nid)
  356.  
  357. limit_reached(id, j, i, &l = 0)
  358.     return limiting_nade(j, i, l) && nade_count[id][j][i] >= l
  359. limit_reached_any(id, j, i)
  360.     return limit_reached(id, j, i) || limit_reached(id, j, nade_id_max)
  361. nade_count_inc(id, actn, i)
  362. {
  363.     nade_count[id][actn][i]++
  364.     nade_count[id][actn][nade_id_max]++
  365. }
  366.  
  367. /// Buy check ///
  368. buy_limit_check(pid, nid)
  369. {
  370.     if(limit_check_and_notify(pid, action_buy, nid))
  371.         return PLUGIN_HANDLED
  372.     else
  373.         // Ammo check
  374.         get_pdata_int(pid, nade_ammo_offset[nid]) < nade_ammo_max[nid] && (
  375.             // Nade will be bought, increase counter
  376.             nade_count_inc(pid, action_buy, nid),
  377.             // Early message
  378.             cvar_enabled(early_msg) &&
  379.                 limit_check_and_notify(pid, action_buy, nid))
  380.     return PLUGIN_CONTINUE
  381. }
  382.  
  383. // Forward from cstrike module for rebuy/autobuy
  384. public CS_InternalCommand(id, const cmd[])
  385. {
  386.     if(limiting_id_action(id, action_buy))
  387.     {
  388.         new i
  389.         if(trie_name_nid(nade_cmd_trie, cmd, i))
  390.             return buy_limit_check(id, i)
  391.     }
  392.     return PLUGIN_CONTINUE
  393. }
  394.  
  395. public buy_command0(id) return buy_command(id, 0)
  396. public buy_command1(id) return buy_command(id, 1)
  397. public buy_command2(id) return buy_command(id, 2)
  398. buy_command(id, i)
  399.     return \
  400.         limiting_id_action(id, action_buy) ?
  401.             buy_limit_check(id, i) :
  402.             PLUGIN_CONTINUE
  403.  
  404. /// Use check ///
  405. use_weapon_switch(id)
  406. {
  407.     // Switch to last weapon,
  408.     // unless that weapon is a nade and the limit for that nade is reached,
  409.     // then we use the default alternative
  410.     new ent = get_pdata_cbase(id, last_item_offset)
  411.     if(pev_valid(ent))
  412.     {
  413.         new s[str_len2], i
  414.         pev(ent, pev_classname, s, str_len2 - 1)
  415.         // Check entity class name, is it a nade?
  416.         // If so, has its limit been reached?
  417.         if(!trie_name_str_nid(nade_wname_trie, s[nade_wname_i], i) ||
  418.             !limit_reached_any(id, action_use, i))
  419.         {
  420.             // Switch to last weapon
  421.             client_cmd(id, "lastinv")
  422.             return
  423.         }
  424.     }
  425.     // Switch to default alternative
  426.     client_cmd(id, last_item_alt)
  427. }
  428.  
  429. // Grenade throw detection
  430. // Similar to the grenade_throw forward from csx module, but more reliable
  431. public set_model_post(ent, const mdl[])
  432. {
  433.     if(pev_valid(ent))
  434.     {
  435.         new Float:f
  436.         pev(ent, pev_gravity, f)
  437.         // Thrown grenade has gravity
  438.         if(f != 0.0)
  439.         {
  440.             // Now get the owner
  441.             new id = pev(ent, pev_owner)
  442.             if(limiting_id_action(id, action_use))
  443.             {
  444.                 new i
  445.                 // Is this actually a nade?
  446.                 if(trie_name_nid(nade_model_trie, mdl[nade_model_i], i))
  447.                 {
  448.                     // So a nade's been thrown, increase counter
  449.                     // Check the limit before that however so early message
  450.                     // would work correctly
  451.                     new b = limit_check_and_notify(id, action_use, i)
  452.                     // Now increase counter
  453.                     nade_count_inc(id, action_use, i)
  454.                     // Early message
  455.                     b || cvar_enabled(early_msg) &&
  456.                         limit_check_and_notify(id, action_use, i)
  457.                 }
  458.             }
  459.         }
  460.     }
  461.     return FMRES_IGNORED
  462. }
  463.  
  464. #if defined USE_CHECK_PRIMARY_ATTACK
  465. public primary_attack0(ent) primary_attack(ent, 0)
  466. public primary_attack1(ent) primary_attack(ent, 1)
  467. public primary_attack2(ent) primary_attack(ent, 2)
  468. primary_attack(ent, i)
  469.     pev_valid(ent) &&
  470.         cur_weapon(pev(ent, pev_owner), i)
  471. #endif
  472.  
  473. public cur_weapon0(id) cur_weapon(id, 0)
  474. public cur_weapon1(id) cur_weapon(id, 1)
  475. public cur_weapon2(id) cur_weapon(id, 2)
  476. cur_weapon(id, i)
  477.     limiting_id_action(id, action_use) &&
  478.         limit_check_and_notify(id, action_use, i) &&
  479.             use_weapon_switch(id)

Ők köszönték meg Pika nek ezt a hozzászólást: DR.AnimaL (2017.09.06. 07:31)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Smoke Gránát
HozzászólásElküldve: 2017.09.06. 07:32 
Offline
Senior Tag
Avatar

Csatlakozott: 2016.02.04. 10:58
Hozzászólások: 219
Megköszönt másnak: 11 alkalommal
Megköszönték neki: 18 alkalommal
na majd bele nézek :)

_________________
STEAM
[steam]konfigos[/steam]
YOUTUBE

Szerverek
Kép
_
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 10 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole