НУжна помощь с компиляцией плагина или кто знает причина не отображение моделей

Сообщения
14
Реакции
0
Ошибка
Нужна помощь плагина духовки по замене моделей
Компилятор
Локальный
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 но опять же выдаёт ошибку
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Сообщения
44
Реакции
27
tehmast3r, судя по используемым функциям, походу это оно.


UPD: Хотя.... update user model там нету(
 

Вложения

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу