HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. ///////////////////////////////////
  2. // //
  3. // Credits: //
  4. // ConnorMcLeod, XxAvalanchexX //
  5. // //
  6. ///////////////////////////////////
  7.  
  8. // Fordította: BBk - Death of Legend
  9.  
  10. #include <amxmodx>
  11. #include <cstrike>
  12. #include <fakemeta>
  13. #include <hamsandwich>
  14.  
  15. #define PLUGIN "Knife Drop"
  16. #define AUTHOR "Alucard"
  17. #define VERSION "1.2"
  18.  
  19. // --------------------START EDIT------------------------ //
  20.  
  21. #define MODEL_ON
  22.  
  23. #define is_user_admin2(%1) (get_user_flags(%1) & ADMIN_KICK)
  24.  
  25. #if defined MODEL_ON
  26. new const V_HAND_MODEL[] = "models/v_hands.mdl"
  27. #endif
  28.  
  29. // --------------------END EDIT------------------------- //
  30.  
  31. new p_Type, p_OnlyAdmins, p_ShowMsg, p_MsgCantDrop,
  32. p_KnifeCost, p_MenuEnable, p_KnifeUsage, p_KnifeKills,
  33. p_ShowMenu
  34.  
  35. new Kills, Menu, Text[48]
  36.  
  37. public plugin_init()
  38. {
  39. register_plugin(PLUGIN, VERSION, AUTHOR)
  40.  
  41. register_cvar("knife_drop", VERSION,FCVAR_SERVER|FCVAR_SPONLY)
  42.  
  43. /* ----------- Events & Forwards ----------- */
  44.  
  45. RegisterHam(Ham_CS_Item_CanDrop, "weapon_knife", "KnifeDrop")
  46.  
  47. register_event("DeathMsg", "DeathMsg", "a", "1>0")
  48.  
  49. /* ----------- Cvars & Commands ----------- */
  50.  
  51. register_clcmd("drop", "HookCmdDrop")
  52. register_clcmd("say /knife", "HookGiveKnife")
  53.  
  54. p_Type = register_cvar("kd_type", "2")
  55. p_OnlyAdmins = register_cvar("kd_onlyadmins", "0")
  56. p_ShowMsg = register_cvar("kd_showmsg", "1")
  57. p_MsgCantDrop = register_cvar("kd_msg_cantdrop", "1")
  58.  
  59. p_KnifeUsage = register_cvar("kd_usage", "1")
  60. p_ShowMenu = register_cvar("kd_showmenu", "1")
  61. p_KnifeKills = register_cvar("kd_kills", "2")
  62.  
  63. p_MenuEnable = register_cvar("kd_menu_enable", "1")
  64. p_KnifeCost = register_cvar("kd_knife_cost", "800")
  65.  
  66. /* ----------- Menu ----------- */
  67.  
  68. Menu = menu_create("\ySzeretnel kest venni?", "KnifeBuy")
  69.  
  70. menu_additem(Menu, "\wIgen", "1")
  71. menu_additem(Menu, "\wNem", "2")
  72.  
  73. menu_addblank(Menu)
  74. menu_addblank(Menu)
  75. menu_addblank(Menu)
  76.  
  77. formatex(Text, charsmax(Text), "A kes ara: \r$%i", get_pcvar_num(p_KnifeCost) )
  78. menu_addtext(Menu, Text)
  79.  
  80. menu_setprop(Menu, MPROP_EXIT, MEXIT_NEVER)
  81. }
  82.  
  83. #if defined MODEL_ON
  84. public plugin_precache()
  85. precache_model(V_HAND_MODEL)
  86.  
  87. public SetModel(id)
  88. {
  89. if(get_pcvar_num(p_Type) == 1 || get_pcvar_num(p_Type) == 2)
  90. {
  91. new Weapons[32], num, weapon
  92. get_user_weapons(id, Weapons, num)
  93.  
  94. for(new i = 0; i < num; i++)
  95. weapon = Weapons[i]
  96.  
  97. if(!weapon)
  98. set_pev(id, pev_viewmodel2, V_HAND_MODEL)
  99. }
  100. }
  101.  
  102. public SetModel2(iKiller)
  103. {
  104. if(get_pcvar_num(p_Type) == 1 || get_pcvar_num(p_Type) == 2)
  105. {
  106. new Weapons[32], num, weapon
  107. get_user_weapons(iKiller, Weapons, num)
  108.  
  109. for(new i = 0; i < num; i++)
  110. weapon = Weapons[i]
  111.  
  112. if(!weapon)
  113. set_pev(iKiller, pev_viewmodel2, V_HAND_MODEL)
  114. }
  115. }
  116. #endif
  117.  
  118. public HookGiveKnife(id)
  119. {
  120. if(!is_user_alive(id) )
  121. {
  122. client_print(id, print_chat, "[Kes-Menu] Csak elo jatekosok tudnak kest venni")
  123. return PLUGIN_HANDLED
  124. }
  125.  
  126. if(user_has_weapon(id, CSW_KNIFE) )
  127. {
  128. client_print(id, print_chat, "[Kes-Menu] Mar van kesed, nem vehetsz meg egyet")
  129. return PLUGIN_HANDLED
  130. }
  131.  
  132. if(!get_pcvar_num(p_MenuEnable) )
  133. {
  134. client_print(id, print_chat, "[Kes-Menu] A kes menu jelenleg kikapcsolva")
  135. return PLUGIN_HANDLED
  136. }
  137.  
  138. menu_display(id, Menu)
  139. return PLUGIN_HANDLED
  140. }
  141.  
  142. public DeathMsg()
  143. {
  144. new iKiller = read_data(1)
  145. new iVictim = read_data(2)
  146.  
  147. new Weapon[32]
  148. read_data(4, Weapon, 31)
  149.  
  150. if(iKiller && (iKiller != iVictim) && equal(Weapon, "knife") )
  151. {
  152. new num = get_pcvar_num(p_KnifeKills)
  153.  
  154. if(get_pcvar_num(p_KnifeUsage) )
  155. {
  156. if( (++Kills == num) || (num == 0) )
  157. {
  158. ham_strip_weapon(iKiller, "weapon_knife")
  159.  
  160. Kills = 0
  161.  
  162. if(get_pcvar_num(p_ShowMenu) )
  163. menu_display(iKiller, Menu)
  164.  
  165. #if defined MODEL_ON
  166. set_task(0.3, "SetModel2", iKiller)
  167. #endif
  168.  
  169. return PLUGIN_HANDLED
  170. }
  171. }
  172. }
  173. return PLUGIN_CONTINUE
  174. }
  175.  
  176. public KnifeBuy(id, Menu, item)
  177. {
  178. if(item == MENU_EXIT)
  179. {
  180. menu_destroy(Menu)
  181. return PLUGIN_HANDLED
  182. }
  183.  
  184. new iData[6]
  185. new iAccess
  186. new iCallback
  187. new iName[64]
  188.  
  189. menu_item_getinfo(Menu, item, iAccess, iData, 5, iName, 63, iCallback)
  190.  
  191. switch(str_to_num(iData))
  192. {
  193. case 1:
  194. {
  195. if(!is_user_alive(id) ) // ppl can't bug with this!!
  196. return PLUGIN_HANDLED
  197. if(user_has_weapon(id, CSW_KNIFE) ) // ppl can't bug with this!!
  198. return PLUGIN_HANDLED
  199. if(!get_pcvar_num(p_MenuEnable) )
  200. return PLUGIN_HANDLED
  201.  
  202. new cash = cs_get_user_money(id) - get_pcvar_num(p_KnifeCost)
  203.  
  204. if(cash < 0)
  205. {
  206. client_print(id, print_chat, "[Kes-Menu] A kes vasarlasahoz nincs eleg penzed")
  207. return PLUGIN_HANDLED
  208. }
  209.  
  210. cs_set_user_money(id, cash, 1)
  211.  
  212. ham_give_weapon(id, "weapon_knife")
  213.  
  214. client_print(id, print_chat, "[Kes-Menu] Kaptal egy jo kest")
  215. }
  216. case 2:
  217. client_print(id, print_chat, "[Kes-Menu] Ok, semmi baj. Gyere vissza kesobb.")
  218. }
  219. return PLUGIN_HANDLED
  220. }
  221.  
  222. public KnifeDrop(ent)
  223. {
  224. if(get_pcvar_num(p_Type) == 2)
  225. SetHamReturnInteger(1)
  226.  
  227. return HAM_SUPERCEDE
  228. }
  229.  
  230. public HookCmdDrop(id)
  231. {
  232. if(!is_user_alive(id) )
  233. return PLUGIN_CONTINUE
  234.  
  235. if(get_user_weapon(id) == CSW_KNIFE)
  236. {
  237. if(!get_pcvar_num(p_Type) )
  238. return get_pcvar_num(p_MsgCantDrop) ? PLUGIN_CONTINUE : PLUGIN_HANDLED
  239.  
  240. if(get_pcvar_num(p_OnlyAdmins) && !is_user_admin2(id) )
  241. {
  242. client_print(id, print_center, "[Kes-eldobas] Csak ADMIN tudja eldobatni a keseiteket!")
  243. return PLUGIN_HANDLED
  244. }
  245.  
  246. if(get_pcvar_num(p_ShowMsg) )
  247. client_print(id, print_center, "[Kes-eldobas] Eldobtad a kesed!")
  248.  
  249. if(get_pcvar_num(p_Type) == 1)
  250. {
  251. ham_strip_weapon(id, "weapon_knife")
  252. return PLUGIN_HANDLED
  253. }
  254. }
  255.  
  256. #if defined MODEL_ON
  257. set_task(0.3, "SetModel", id)
  258. #endif
  259.  
  260. return PLUGIN_CONTINUE
  261. }
  262.  
  263. stock ham_strip_weapon(id,weapon[])
  264. {
  265. if(!equal(weapon, "weapon_", 7) ) return 0
  266.  
  267. new wId = get_weaponid(weapon)
  268. if(!wId) return 0
  269.  
  270. new wEnt
  271. while( (wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname", weapon) ) && pev(wEnt, pev_owner) != id) {}
  272. if(!wEnt) return 0
  273.  
  274. if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
  275.  
  276. if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt) ) return 0
  277. ExecuteHamB(Ham_Item_Kill ,wEnt)
  278.  
  279. set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId) )
  280.  
  281. return 1
  282. }
  283.  
  284. stock ham_give_weapon(id,weapon[])
  285. {
  286. if(!equal(weapon, "weapon_", 7) ) return 0
  287.  
  288. new wEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,weapon) )
  289. if(!pev_valid(wEnt) ) return 0
  290.  
  291. set_pev(wEnt, pev_spawnflags,SF_NORESPAWN)
  292. dllfunc(DLLFunc_Spawn, wEnt)
  293.  
  294. if(!ExecuteHamB(Ham_AddPlayerItem, id, wEnt) )
  295. {
  296. if(pev_valid(wEnt) ) set_pev(wEnt, pev_flags, pev(wEnt, pev_flags) | FL_KILLME)
  297. return 0
  298. }
  299.  
  300. ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, id)
  301. return 1
  302. }