- Ошибка
-
Нужна помощь плагина духовки по замене моделей
- Компилятор
- Локальный
- Amx Mod X
- 1.9.0
- Исходный код
-
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <playermodel>
new const PLUGIN_NAME[] = "Models Manager";
new const PLUGIN_VERSION[] = "1.0";
new const PLUGIN_AUTHOR[] = "gyxoBka";
new const g_szFileName[] = "PlayerModels.ini";
new const MODELSDIR[] = "models/player";
new const g_szDefaultPassKey[] = "_pw";
const MAX_MODEL_LENGTH = 32
const MAXPLAYERS = 32
new const model[] = "model"
new g_szModel[MAXPLAYERS+1][MAX_MODEL_LENGTH];
new g_bitModeledPlayers, g_iMaxPlayers;
#define MarkPlayerModeled(%0) g_bitModeledPlayers |= 1<<(%0&31)
#define ClearPlayerModeled(%0) g_bitModeledPlayers &= ~(1<<(%0&31))
#define CheckPlayerModeled(%0) (g_bitModeledPlayers & 1<<(%0&31))
#define IsPlayer(%0) ( 1 <= %0 <= g_iMaxPlayers )
// pdata
const g_ulModelIndexPlayer = 491;
const m_iPlayerTeam = 114;
const XO_PLAYER = 5;
new HamHook:g_iHam, g_iFwd, g_iMsg;
new gmsgClCorpse;
enum _:PlayerTeam
{
TEAM_TT = 1,
TEAM_CT
}
enum _:DataModels
{
MODEL_TYPE[10],
MODEL_AUTH[36],
MODEL_PASS[36],
MODEL_TEAM[6],
MODEL_NAME[64]
}
new g_szPlayerModel[MAXPLAYERS + 1][PlayerTeam][MAX_MODEL_LENGTH];
new g_szPassKey[12];
new g_iArraySize;
new Array:g_aPlayerModels;
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
gmsgClCorpse = get_user_msgid("ClCorpse")
g_iMaxPlayers = get_maxplayers()
}
public plugin_natives()
{
register_library("playermodel")
register_native("fm_update_user_model", "_update_user_model")
//register_native("fm_get_user_model", "_get_user_model")
register_native("fm_set_user_model", "_set_user_model")
register_native("fm_reset_user_model", "_reset_user_model")
}
public _update_user_model()
{
new id = get_param(1)
if(!IsPlayer(id))
{
log_error(AMX_ERR_NATIVE, "Invalid index %d", id)
return 0
}
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "Player %d not connected", id)
return 0
}
if(CheckPlayerModeled(id))
{
new iTeam = get_pdata_int(id, m_iPlayerTeam, XO_PLAYER);
copy(g_szModel[id], charsmax(g_szModel[]), g_szPlayerModel[id][iTeam]);
set_user_info(id, model, g_szPlayerModel[id][iTeam]);
}
return 1;
}
public _set_user_model(id, szModel[MAX_MODEL_LENGTH])
{
if(!id) id = get_param(1)
if(!IsPlayer(id))
{
log_error(AMX_ERR_NATIVE, "Invalid index %d", id)
return 0
}
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "Player %d not connected", id)
return 0
}
MarkPlayerModeled(id);
CheckForwards();
//new szModel[MAX_MODEL_LENGTH]
if(!szModel[0]) get_string(2, szModel, charsmax(szModel))
copy(g_szModel[id], charsmax(g_szModel[]), szModel)
set_user_info(id, model, szModel)
return 1
}
public _reset_user_model()
{
new id = get_param(1)
if(!IsPlayer(id))
{
log_error(AMX_ERR_NATIVE, "Invalid index %d", id)
return 0
}
if(!CheckPlayerModeled(id))
{
return 0
}
ClearPlayerModeled(id)
if(is_user_connected(id))
{
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id))
}
CheckForwards();
return 1
}
public plugin_precache()
{
g_aPlayerModels = ArrayCreate(DataModels);
new fHandle, szConfigDir[64], szConfigFile[250];
get_localinfo("amxx_configsdir", szConfigDir, charsmax(szConfigDir));
formatex(szConfigFile, charsmax(szConfigFile), "%s/%s", szConfigDir, g_szFileName);
if(!(fHandle = fopen(szConfigFile, "rt")))
{
new const szInstructions[] =
{
"\
; Instruction for use:^n\
; [Types]^n\
; 1 - SteamId^n\
; 2 - IP^n\
; 3 - Name^n\
; 4 - Flag^n\
; 5 - Steam^n\
; 6 - Team^n\
^n\
; [Syntax]^n\
; ^"Type^" ^"IP | SteamId | Name | Flag | Team | *(for modes Steam | Team)^" ^"Password^" ^"Team: TT | CT | ANY^" ^"Model name (without .mdl)^"^n\
^n\
; [Examples]^n\
; ^"SteamId^" ^"STEAM_0:0:1234567^" ^"qwerty^" ^"TT^" ^"chicken^"^n\
; ^"IP^" ^"192.168.1.1^" ^"^" ^"ANY^" ^"Gaben^"^n\
; ^"Name^" ^"Gaben^" ^"qwerty^" ^"CT^" ^"chicken^"^n\
; ^"Flag^" ^"d^" ^"^" ^"CT^" ^"gign^"^n\
; ^"Steam^" ^"^" ^"^" ^"TT^" ^"steam_tt^"^n\
; ^"Steam^" ^"^" ^"^" ^"CT^" ^"steam_ct^"^n\
; ^"Team^" ^"^" ^"^" ^"CT^" ^"CT_model^"^n\
; ^"Team^" ^"^" ^"^" ^"TT^" ^"TT_model^"^n\
^n\
; Key for setinfo^n\
pass_key = _pw"
};
if(!file_exists(szConfigFile))
{
log_amx("[WARNING] Config file ^"%s^" not found! Will be created automatically!", szConfigFile);
if(!write_file(szConfigFile, szInstructions))
{
set_fail_state("[ERROR] Config file ^"%s^" not created! No access to write!", szConfigFile);
}else{
log_amx("Config File '%s' was created!", szConfigFile);
}
}
}
else
{
new szTemp[512], szPrecache[250];
new szKey[32], szValue[12];
new aData[DataModels];
while(!feof(fHandle))
{
fgets(fHandle, szTemp, charsmax(szTemp));
trim(szTemp);
if(!szTemp[0] || szTemp[0] == ';' || szTemp[0] == '/') continue;
strtok(szTemp, szKey, charsmax(szKey), szValue, charsmax(szValue), '=');
trim(szKey);
trim(szValue);
if(equal(szKey, "pass_key"))
{
copy(g_szPassKey, charsmax(g_szPassKey), szValue);
continue;
}
new iArgsNum = parse(szTemp,
aData[MODEL_TYPE], charsmax(aData[MODEL_TYPE]),
aData[MODEL_AUTH], charsmax(aData[MODEL_AUTH]),
aData[MODEL_PASS], charsmax(aData[MODEL_PASS]),
aData[MODEL_TEAM], charsmax(aData[MODEL_TEAM]),
aData[MODEL_NAME], charsmax(aData[MODEL_NAME])
);
if(iArgsNum < 5)
{
log_amx("Line '%s' not valid, will be skipped.", szTemp);
continue;
}
strtolower(aData[MODEL_TYPE]);
strtolower(aData[MODEL_TEAM]);
formatex(szPrecache, charsmax(szPrecache), "%s/%s/%s.mdl", MODELSDIR, aData[MODEL_NAME], aData[MODEL_NAME]);
if(file_exists(szPrecache))
{
g_iArraySize++;
precache_model(szPrecache);
ArrayPushArray(g_aPlayerModels, aData);
}
else log_amx("[WARN] Model '%s' not found!", szPrecache);
}
if(!g_szPassKey[0])
{
formatex(g_szPassKey, charsmax(g_szPassKey), "%s", g_szDefaultPassKey);
}
fclose(fHandle);
}
}
public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_HANDLED;
new aData[DataModels];
for(new i; i < g_iArraySize; i++)
{
if(!ArrayGetArray(g_aPlayerModels, i, aData)) continue;
if(equali(aData[MODEL_TYPE], "steamid"))
{
new szSteamId[36]; get_user_authid(id, szSteamId, charsmax(szSteamId));
if(equal(aData[MODEL_AUTH], szSteamId))
{
SavePlayerModel(id, aData);
}
}
else if(equali(aData[MODEL_TYPE], "ip"))
{
new szIP[16]; get_user_ip(id, szIP, charsmax(szIP));
if(equal(aData[MODEL_AUTH], szIP))
{
SavePlayerModel(id, aData);
}
}
else if(equali(aData[MODEL_TYPE], "name"))
{
new szName[32]; get_user_name(id, szName, charsmax(szName));
if(equal(aData[MODEL_AUTH], szName))
{
SavePlayerModel(id, aData);
}
}
else if(equali(aData[MODEL_TYPE], "flag"))
{
if(get_user_flags(id) & read_flags(aData[MODEL_AUTH]))
{
SavePlayerModel(id, aData);
}
}
else if(aData[MODEL_AUTH][0] == '*')
{
if(equali(aData[MODEL_TYPE], "team", 4) || (equali(aData[MODEL_TYPE], "steam", 5) && funcIsUserSteam(id)))
{
SavePlayerModel(id, aData);
}
}
}
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
ClearPlayerModeled(id);
CheckForwards();
g_szModel[id] = "";
if(g_iArraySize)
{
g_szPlayerModel[id][TEAM_TT] = "";
g_szPlayerModel[id][TEAM_CT] = "";
}
}
public HamHook_Player_Spawn(const id)
{
if(!is_user_alive(id)) return HAM_IGNORED;
new iTeam = get_pdata_int(id, m_iPlayerTeam, XO_PLAYER);
if(CheckPlayerModeled(id))
_set_user_model(id, g_szPlayerModel[id][iTeam]);
//fm_set_user_model(id, g_szPlayerModel[id][iTeam], false);
return HAM_IGNORED;
}
public SetClientKeyValue(id, szInfoBuffer[], szKey[], szValue[])
{
if(CheckPlayerModeled(id) && equal(szKey, model) && !equal(szValue, g_szModel[id]))
{
set_user_info(id, model, g_szModel[id])
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public Message_ClCorpse()
{
new id = get_msg_arg_int(12);
if(CheckPlayerModeled(id))
{
set_msg_arg_string(1, g_szModel[id]);
}
}
public plugin_end()
{
ArrayDestroy(g_aPlayerModels);
}
SavePlayerModel(const id, aData[DataModels])
{
new szUserPass[32]; get_user_info(id, g_szPassKey, szUserPass, charsmax(szUserPass));
if(aData[MODEL_PASS])
{
if(equal(aData[MODEL_PASS], szUserPass))
{
FormatModel(id, aData);
}
}
else FormatModel(id, aData);
}
FormatModel(const id, aData[DataModels])
{
MarkPlayerModeled(id);
CheckForwards();
if(equal(aData[MODEL_TEAM], "any", 3))
{
formatex(g_szPlayerModel[id][TEAM_TT], charsmax(g_szPlayerModel[][]), "%s", aData[MODEL_NAME]);
formatex(g_szPlayerModel[id][TEAM_CT], charsmax(g_szPlayerModel[][]), "%s", aData[MODEL_NAME]);
}
else formatex(g_szPlayerModel[id][aData[MODEL_TEAM][0] == 't' ? TEAM_TT : TEAM_CT], charsmax(g_szPlayerModel[][]), "%s", aData[MODEL_NAME]);
}
CheckForwards()
{
if(g_bitModeledPlayers)
{
if(!g_iFwd) g_iFwd = register_forward(FM_SetClientKeyValue, "SetClientKeyValue");
if(!g_iHam) EnableHamForward(g_iHam = RegisterHam(Ham_Spawn, "player", "HamHook_Player_Spawn", true));
if(!g_iMsg) g_iMsg = register_message(gmsgClCorpse, "Message_ClCorpse");
}
else
{
if(g_iFwd)
{
unregister_forward(FM_SetClientKeyValue, g_iFwd);
g_iFwd = 0;
}
if(g_iHam)
{
DisableHamForward(g_iHam);
}
if(g_iMsg)
{
unregister_message(gmsgClCorpse, g_iMsg);
g_iMsg = 0;
}
}
}
bool:funcIsUserSteam(const id)
{
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))) {
server_cmd("dp_clientinfo %d", id);
server_exec();
return bool: (get_pcvar_num(dp_pointer) == 2);
}
return false;
}
Ребят такая ситуация покупал плагин еще в 2018 году у ДУХОВКИ по замене моделей по стим ид и нику
Еще тогда я не смог скомпилировать плагин, выдавал ошибку. мне духовка скомпилировал и сказал потому что приватный ( шутканул якобы)
Все работало под 1.8.2 и на реканий не было
Спустя вот 3 года я уже на 1.9.0 и решил опять установить его плагин. взял уже им ранее скомпилированный плагин
плагин работает но временами модели не отображает. помогает перезапуск сервера или вот случай был в plugin.ini прописал плагин почти в самый верх
модели стали показывать но на 1-2 дня.
И вот я обратился к автору с просьбой помочь на что он ответил я не занимаюсь плагинами и кинул в чс
Я щас пробовал скомпилировать в 1.9.0 но опять же выдаёт ошибку
Еще тогда я не смог скомпилировать плагин, выдавал ошибку. мне духовка скомпилировал и сказал потому что приватный ( шутканул якобы)
Все работало под 1.8.2 и на реканий не было
Спустя вот 3 года я уже на 1.9.0 и решил опять установить его плагин. взял уже им ранее скомпилированный плагин
плагин работает но временами модели не отображает. помогает перезапуск сервера или вот случай был в plugin.ini прописал плагин почти в самый верх
модели стали показывать но на 1-2 дня.
И вот я обратился к автору с просьбой помочь на что он ответил я не занимаюсь плагинами и кинул в чс
Я щас пробовал скомпилировать в 1.9.0 но опять же выдаёт ошибку
В этой теме было размещено решение! Перейти к решению.
Вложения
-
19.2 KB Просмотры: 169