HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <reapi>
  3.  
  4. enum player_models { szTTModel[64], szCTModel[64], iFlag }
  5.  
  6. #define SET_MODELINDEX
  7. #define MAX_MODEL_PATH_LEN 128
  8.  
  9. /// FORMAT: "Terrorist Model" "Counter-Terrorist Model" "Access Flag"
  10.  
  11. new const g_eModelsData[][player_models] =
  12. {
  13. { "snowleet", "lolgign", ADMIN_LEVEL_B },
  14. { "viptt", "vipct", ADMIN_LEVEL_H },
  15. { "bomjtt", "bomjct", ADMIN_ALL },
  16.  
  17. {"", "", -1}
  18. }
  19.  
  20. #define IsValidArrayIndex(%1) (0 <= %1 <= sizeof(g_eModelsData)-1)
  21.  
  22. #if defined SET_MODELINDEX
  23. new g_iTTModelIndex[sizeof(g_eModelsData)], g_iCTModelIndex[sizeof(g_eModelsData)]
  24. #endif
  25.  
  26.  
  27. public plugin_precache()
  28. {
  29. if(g_eModelsData[0][iFlag] == -1)
  30. {
  31. set_fail_state("Array g_eModelsData are empty!")
  32. return
  33. }
  34.  
  35. for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
  36. {
  37. #if defined SET_MODELINDEX
  38. g_iTTModelIndex[i] = precache_player_model(g_eModelsData[i][szTTModel])
  39. g_iCTModelIndex[i] = precache_player_model(g_eModelsData[i][szCTModel])
  40. #else
  41. precache_player_model(g_eModelsData[i][szTTModel])
  42. precache_player_model(g_eModelsData[i][szCTModel])
  43. #endif
  44. }
  45. }
  46.  
  47. public plugin_init()
  48. {
  49. register_plugin("[ReAPI] Admin Models", "0.0.2", "Vaqtincha")
  50.  
  51. RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "SetClientUserInfoModel", .post = false)
  52. }
  53.  
  54.  
  55. public SetClientUserInfoModel(const pPlayer, infobuffer[], szNewModel[])
  56. {
  57. new iArrayIndex = get_user_model_by_flag(get_user_flags(pPlayer))
  58.  
  59. if(!IsValidArrayIndex(iArrayIndex))
  60. return HC_CONTINUE
  61.  
  62. switch(get_member(pPlayer, m_iTeam))
  63. {
  64. case TEAM_TERRORIST: {
  65. #if defined SET_MODELINDEX
  66. set_member(pPlayer, m_modelIndexPlayer, g_iTTModelIndex[iArrayIndex])
  67. #endif
  68. SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szTTModel])
  69. }
  70. case TEAM_CT: {
  71. #if defined SET_MODELINDEX
  72. set_member(pPlayer, m_modelIndexPlayer, g_iCTModelIndex[iArrayIndex])
  73. #endif
  74. SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szCTModel])
  75. }
  76. default: return HC_CONTINUE
  77. }
  78.  
  79. return HC_CONTINUE
  80. }
  81.  
  82.  
  83. get_user_model_by_flag(const iUserFlags)
  84. {
  85. const INVALID_INDEX = -1
  86.  
  87. for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
  88. {
  89. if(iUserFlags & g_eModelsData[i][iFlag] || g_eModelsData[i][iFlag] == ADMIN_ALL)
  90. return i
  91. }
  92.  
  93. return INVALID_INDEX // non admin player
  94. }
  95.  
  96. precache_player_model(const szModel[])
  97. {
  98. new szFileToPrecache[MAX_MODEL_PATH_LEN], szErrMsg[MAX_MODEL_PATH_LEN + 64]
  99.  
  100. formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel)
  101.  
  102. if(!file_exists(szFileToPrecache))
  103. {
  104. formatex(szErrMsg, charsmax(szErrMsg), "[Admin Models] ERROR: Model ^"%s^" not found!", szFileToPrecache)
  105. set_fail_state(szErrMsg)
  106. return 0
  107. }
  108.  
  109. return precache_model(szFileToPrecache)
  110. }
  111.