Код:
#include <amxmodx>
#include <amxmisc>
enum _:DP_AUTH
{
DP_AUTH_NONE = 0,
DP_AUTH_DPROTO = 1,
DP_AUTH_STEAM = 2,
DP_AUTH_STEAMEMU = 3,
DP_AUTH_REVEMU = 4,
DP_AUTH_OLDREVEMU = 5,
DP_AUTH_HLTV = 6,
DP_AUTH_SC2009 = 7,
DP_AUTH_AVSMP = 8,
};
new const DP_PROV[][] =
{
"N/A",
"Dproto",
"Native Steam",
"SteamEmu",
"RevEmu",
"Old RevEmu",
"HLTV",
"SteamClient2009",
"AVSMP",
"FutureEmulator"
};
new pcv_dp_r_protocol, pcv_dp_r_id_provider;
new g_protocol[33];
new g_provider[33];
native get_user_protocol(id);
native get_user_provider(id, provider[] = "", provider_size = 0);
public plugin_natives()
{
register_native("get_user_protocol", "native_get_user_protocol");
register_native("get_user_provider", "native_get_user_provider");
}
public plugin_init()
{
register_plugin("dproto testing", "1", "");
register_clcmd("test", "clcmd_test");
pcv_dp_r_protocol = get_cvar_pointer ("dp_r_protocol");
pcv_dp_r_id_provider = get_cvar_pointer ("dp_r_id_provider");
}
public clcmd_test(id)
{
new provider[33];
server_print("---------------------------");
server_print("%i", get_user_protocol(id));
// First call type
new auth = get_user_provider(id);
// Second type call
get_user_provider(id, provider, charsmax(provider));
server_print("%i, %s", auth, provider);
server_print("---------------------------");
}
public client_authorized(id)
{
if (!pcv_dp_r_protocol || !pcv_dp_r_id_provider)
{
log_amx("Can't find dp_r_protocol or dp_r_id_provider cvars.");
return PLUGIN_HANDLED;
}
server_cmd("dp_clientinfo %d", id);
server_exec();
new proto = get_pcvar_num(pcv_dp_r_protocol);
new authprov = get_pcvar_num(pcv_dp_r_id_provider);
new user_name[33];
get_user_name (id, user_name, charsmax(user_name));
g_protocol[id] = proto;
g_provider[id] = authprov;
if (g_provider[id] < DP_AUTH)
server_print("User %s (%d) uses protocol %d; SteamID assigned by %s", user_name, id, proto, DP_PROV[g_provider[id]])
else
server_print("User %s (%d) uses protocol %d; SteamID assigned by %s%i", user_name, id, proto, DP_PROV[DP_AUTH], g_provider[id])
return PLUGIN_HANDLED;
}
/// native get_user_protocol(id);
public native_get_user_protocol(plid, num)
{
if (num != 1)
return -1;
new id = get_param(1);
if (id < 1 || id > 32)
return -1;
return g_protocol[id];
}
/// native get_user_provider(id, provider[] = "", provider_size = 0);
public native_get_user_provider(plid, num)
{
if (num != 3)
return -1;
new id = get_param(1);
if (id < 1 || id > 32)
return -1;
new provider_size = get_param(3);
if (provider_size > 0)
{
new provider[33];
if (g_provider[id] < DP_AUTH)
{
copy(provider, provider_size, DP_PROV[g_provider[id]]);
}
else
{
format(provider, provider_size, "%s%i", DP_PROV[DP_AUTH], g_provider[id]);
}
set_string(2, provider, provider_size);
}
return g_provider[id];
}
Цитата:
User Lev (1) uses protocol 47; SteamID assigned by Dproto
Цитата:
---------------------------
47
1, Dproto
---------------------------
Main problem you had was in that AMXX functions can't have return type of an array. So you have to pass a buffer to fill it in (along with max buffer size).
Also it is
not recommended to use native style 1:
Цитата:
NOTE: Style should always be 0. The "dJeyL" mode value of 1 is deprecated, since it is not properly compatible with any by-reference type.