HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <xs>
  5. #include <nvault>
  6. #include <colorchat>
  7.  
  8. new g_iBackStabKills[33], g_iBackStabDeaths[33]
  9. new bool: g_bIsBackStab[33]
  10. new g_iSaveType, g_iMenuCvar, g_iTypeInfo, g_iPrefix
  11. new g_iVault
  12.  
  13. public plugin_init()
  14. {
  15. register_plugin("BackSide Kill Counter", "1.1", "Just In Case @ amxx-bg.info")
  16. RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage")
  17. g_iVault = nvault_open("BackSideKillsdata")
  18.  
  19. g_iSaveType = register_cvar("amx_bskc_savetype", "1") // 1 Nevre | 2 IP-re | 3 SteamID-re
  20. g_iMenuCvar = register_cvar("amx_bskc_stats", "1")
  21. g_iTypeInfo = register_cvar("amx_bskc_menuinfo", "2") // 1 CHAT-be | 2 Uj menube
  22. g_iPrefix = register_cvar("amx_bskc_prefix", "BSKC")
  23.  
  24. register_concmd("say /statsback", "OpenMenu")
  25. register_concmd("say_team /statsback", "OpenMenu")
  26. register_concmd("say /checkback", "ShowCounts")
  27. register_concmd("say_team /checkback", "ShowCounts")
  28. }
  29. public client_disconnect(id)
  30. UseVault(id, 0)
  31.  
  32. public client_putinserver(id)
  33. UseVault(id, 1)
  34.  
  35. public OpenMenu( id )
  36. {
  37. if(get_pcvar_num(g_iMenuCvar) == 0)
  38. {
  39. ColorChat(id, RED, "^4[ %s ] ^1Ez a lehetoseg ideiglenesen ki van ^3KAPCSOLVA!", GetPrefix())
  40. return
  41. }
  42.  
  43. new menu = menu_create( "\rMas jatekosok \dBS \rstatisztikai:", "menu_handler" )
  44.  
  45. static iPlayers[32], iNum, iTempId
  46. static szName[32]
  47. get_players( iPlayers, iNum )
  48. for ( new szIp[32], i; i<iNum; i++ )
  49. {
  50. iTempId = iPlayers[i]
  51. get_user_name( iTempId, szName, charsmax( szName ) )
  52. get_user_ip( iTempId, szIp, charsmax(szIp), 1)
  53. menu_additem( menu, szName, szIp, 0 )
  54. }
  55. menu_display( id, menu, 0 )
  56. }
  57. public menu_handler( id, iMenu, iItem )
  58. {
  59. if ( iItem == MENU_EXIT )
  60. {
  61. menu_destroy( iMenu )
  62. return PLUGIN_HANDLED
  63. }
  64.  
  65.  
  66. static szData[6], szName[64]
  67. static _access, item_callback
  68.  
  69. menu_item_getinfo( iMenu, iItem, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback )
  70.  
  71. new iPlayer = find_player( "d", szData )
  72. if ( iPlayer )
  73. {
  74. static szName[32]
  75. get_user_name(iPlayer, szName, charsmax(szName))
  76. switch ( get_pcvar_num( g_iTypeInfo ) ) {
  77. case 1:
  78. SubMenu( id, iPlayer )
  79. case 2:
  80. ColorChat(id, RED, "^4[ %s ] ^3%s ^1jelenleg ^4%i ^1BS Olessel es ^4%i ^1BS Halallal rendelkezik.", GetPrefix(), szName, g_iBackStabKills[ iPlayer], g_iBackStabDeaths[ iPlayer ])
  81.  
  82. }
  83.  
  84. }
  85.  
  86. menu_destroy( iMenu )
  87. return PLUGIN_HANDLED
  88. }
  89. public SubMenu( id, iTarget )
  90. {
  91. static szName[33]
  92. get_user_name(iTarget, szName, charsmax(szName))
  93.  
  94. static szTitle[64], szKills[64], szDeaths[64]
  95. formatex(szTitle, charsmax(szTitle), "\yJatekos: \r%s", szName)
  96. formatex(szKills, charsmax(szKills), "\yBS Olesei: \r%i", g_iBackStabKills[ iTarget ])
  97. formatex(szDeaths, charsmax(szDeaths), "\yBS Halalai: \r%i", g_iBackStabDeaths[ iTarget ])
  98. new iMenua = menu_create(szTitle, "second_handler")
  99. menu_additem(iMenua, szKills)
  100. menu_additem(iMenua, szDeaths)
  101.  
  102. menu_display(id, iMenua)
  103. }
  104. public second_handler(id, iMenu, iItem)
  105. {
  106. menu_destroy( iMenu )
  107. return PLUGIN_HANDLED
  108. }
  109. public ShowCounts( id )
  110. {
  111. ColorChat(id, RED, "^4[ %s ] ^1Jelenleg neked ^3%i ^1BS Olesed es ^3%i ^1BS Halalod van.", GetPrefix(), g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
  112. return PLUGIN_HANDLED
  113. }
  114. public eDeath( )
  115. {
  116. new iAttacker = read_data( 1 )
  117. new iVictim = read_data( 2 )
  118.  
  119. if(g_bIsBackStab[ iVictim ])
  120. {
  121. g_iBackStabKills[ iAttacker ] ++
  122. g_iBackStabDeaths[ iVictim ] ++
  123. }
  124. }
  125. public Player_TakeDamage(iVictim, iInflictor, iAttacker, Float: flDamage, const bitsDamageType)
  126. {
  127. if (!is_user_connected(iAttacker) || !is_user_connected(iAttacker))
  128. return HAM_IGNORED
  129.  
  130. static Float: vecSrc[3];
  131. static Float: vecAngles[3];
  132. static Float: vecForward[3];
  133. static Float: vecAttackDir[3];
  134.  
  135. GetCenter(iVictim, vecSrc);
  136. GetCenter(iInflictor, vecAttackDir);
  137.  
  138. xs_vec_sub(vecAttackDir, vecSrc, vecAttackDir);
  139. xs_vec_normalize(vecAttackDir, vecAttackDir);
  140.  
  141. pev(iVictim, pev_angles, vecAngles);
  142. engfunc(EngFunc_MakeVectors, vecAngles);
  143.  
  144. global_get(glb_v_forward, vecForward);
  145. xs_vec_mul_scalar(vecAttackDir, -1.0, vecAttackDir);
  146.  
  147. if (xs_vec_dot(vecForward, vecAttackDir) > 0.3 )
  148. g_bIsBackStab[ iVictim ] = true
  149. else
  150. g_bIsBackStab[ iVictim ] = false
  151.  
  152. return HAM_IGNORED
  153.  
  154. }
  155. public plugin_end()
  156. nvault_close(g_iVault)
  157.  
  158. UseVault(id, iType) {
  159. static szKey[32], szData[16]
  160. switch ( get_pcvar_num( g_iSaveType ) )
  161. {
  162. case 0: return
  163. case 1: get_user_name(id, szKey, charsmax(szKey))
  164. case 2: get_user_ip(id, szKey, charsmax(szKey), 1)
  165. case 3: get_user_authid(id, szKey, charsmax(szKey))
  166. }
  167.  
  168.  
  169. switch(iType)
  170. {
  171. case 0:
  172. {
  173. formatex(szData, charsmax(szData), "%i|%i", g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
  174. nvault_set(g_iVault, szKey, szData)
  175. }
  176. case 1:
  177. {
  178. nvault_get(g_iVault, szKey, szData, charsmax(szData))
  179. new szArg[2][8]
  180. replace_all(szData, charsmax(szData), "|", " ")
  181. parse(szData, szArg[0], charsmax(szArg[]), szArg[1], charsmax(szArg[]))
  182. g_iBackStabKills[ id ] = str_to_num(szArg[0])
  183. g_iBackStabDeaths[ id ] = str_to_num(szArg[1])
  184. }
  185. }
  186. }
  187. GetCenter(const iEntity, Float: vecSrc[3]) {
  188. static Float: vecAbsMax[3];
  189. static Float: vecAbsMin[3];
  190.  
  191. pev(iEntity, pev_absmax, vecAbsMax);
  192. pev(iEntity, pev_absmin, vecAbsMin);
  193.  
  194. xs_vec_add(vecAbsMax, vecAbsMin, vecSrc);
  195. xs_vec_mul_scalar(vecSrc, 0.5, vecSrc);
  196. }
  197. GetPrefix() {
  198. static szPrefix[10]
  199. get_pcvar_string(g_iPrefix, szPrefix, charsmax(szPrefix))
  200. return szPrefix
  201. }
  202. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  203. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  204. */
  205.