[APS-CORE] сервер не видит причины для наказания

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
51
Реакции
6
Ошибка
меню причин для наказания пуст
ОС
Linux
Amx Mod X
AMX Mod X 1.10.0.5402 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Jun 24 2020 13:50:39
Built from: https://github.com/alliedmodders/amxmodx/commit/b261180
Build ID: 5402:b261180
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.7.0.698-dev
Build date: 10:14:22 Aug 19 2020 (2321)
Build from: https://github.com/dreamstalker/rehlds/commit/376bc15
ReGamedll
ReGameDLL version: 5.18.0.474-dev
Build date: 11:07:34 Jul 16 2020
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/efb06a7
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] Reunion RUN - reunion.so v0.1.0.92 ini Start Never
[ 2] Revoice RUN - revoice.so v0.1.0.32 ini Start Never
[ 3] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 5] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 6] AMX Mod X RUN - amxmodx_mm_i386.so v1.10.0.5402 ini Start ANY
[ 7] MySQL RUN - mysql_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
[ 8] ReAPI RUN - reapi_amxx_i386.so v5.15.0.197-dev pl6 ANY Never
[ 9] gRIP RUN - grip_amxx_i386.so v0.1.5 Beta pl6 ANY ANY
[10] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl6 ANY Never
[11] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
[12] Engine RUN - engine_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
[13] CSX RUN - csx_amxx_i386.so v1.9.0.5271 pl6 ANY ANY

[14] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
[15] Fun RUN - fun_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
[16] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5271 pl6 ANY ANY
16 plugins, 16 running
Список плагинов
Currently loaded plugins:
id name version author url file status
[ 1] 0 FreshBans 1.4.3b kanagava unknown fresh_bans_ running
[ 2] 1 ReAimDetector API 0.2.2 ReHLDS Team unknown reaimdetect running
[ 3] 2 Admin Base 1.9.0.5271 AMXX Dev Team unknown admin.amxx running
[ 4] 3 Admin Commands 1.9.0.5271 AMXX Dev Team unknown admincmd.am running
[ 5] 4 Map Manager: GUI 0.0.4 Mistrick unknown map_manager running
[ 6] 5 Menus Front-End 1.5 neugomon unknown menufront_e running
[ 7] 6 Commands Menu 1.9.0.5271 AMXX Dev Team unknown cmdmenu.amx running
[ 8] 7 Players Menu 1.7 neugomon unknown players_men running
[ 9] 8 Maps Menu 1.9.0.5271 AMXX Dev Team unknown mapsmenu.am running
[ 10] 9 Plugin Menu 1.9.0.5271 AMXX Dev Team unknown pluginmenu. running

[ 11] 10 Admin Chat 1.9.0.5271 AMXX Dev Team unknown adminchat.a running
[ 12] 11 Admin Votes 1.9.0.5271 AMXX Dev Team unknown adminvote.a running
[ 13] 12 Pause Plugins 1.9.0.5271 AMXX Dev Team unknown pausecfg.am running
[ 14] 13 Stats Configuration 1.9.0.5271 AMXX Dev Team unknown statscfg.am running
[ 15] 14 AES: StatsX 0.5.9 [REA serfreeman1337/s unknown aes_statsx_ running
[ 16] 15 StatsX 1.9.0.5271 AMXX Dev Team unknown statsx.amxx running
[ 17] 16 Parachute Lite [ReAPI] 11.0 Leo_[BH] unknown parachute.a running
[ 18] 17 Knife Duel with Telepo 1.2 neygomon unknown duel.amxx running
[ 19] 18 CSStatsX SQL 0.7.4+2 serfreeman1337 unknown csstatsx_sq running
[ 20] 19 Stop the Bastards 1.7.0 F@nt0M unknown stop_the_ba running
[ 21] 20 Team Select 1.6.0 F@nt0M unknown teamselect. running

[ 22] 21 Plugin 1.0 Nunfy unknown nadpis.amxx running
[ 23] 22 V.I.P Environment 2.1.1 Vaqtincha unknown vip_environ running
[ 24] 23 FreeAmmoEveryRound 0.1 SHLAKBAUM unknown freeammoeve running
[ 25] 24 Reset Score ReFreshed 0.0.1 wopox1337@Dev-CS unknown rs.amxx running
[ 26] 25 PF-Editor 0.0.8 wellasgood unknown PluginsFile running
[ 27] 26 Killer ScreenFade 0.0.5 Vaqtincha unknown reapi_kille running
[ 28] 27 Damager 0.0.5 steelzzz unknown damager.amx running
[ 29] 28 Reklama 20.05.2020 mx?! unknown reklama.amx running
[ 30] 29 [ReAPI] No Team Flash 0.0.3 Vaqtincha unknown no_team_fla running
[ 31] 30 Advanced Gag 1.9.0 neygomon unknown amx_gag.amx running
[ 32] 31 AFK Control ReNew 1.2(a) neygomon unknown afk_control running

[ 33] 32 Welcome_Music 1.7 ExE unknown welcome_mus running
[ 34] 33 Mode 2x2 2.5re s1lent unknown mode.amxx running
[ 35] 34 [ReAPI] Knife Round 1.3 pUzzlik unknown re_knife_ro running
[ 36] 35 Menu System 0.1.2 serfreeman1337 unknown menuSystem. running
[ 37] 36 Advanced Experience Sy 0.5.9 [REA serfreeman1337/s unknown aes_main.am running
[ 38] 37 AES: CStrike Addon 0.5.9 [REA serfreeman1337/s unknown aes_exp_cst running
[ 39] 38 AES: Informer 0.5 Vega serfreeman1337 unknown aes_informe running
[ 40] 39 GM-X Core 0.1.86-alp GM-X Team unknown gmx.amxx running
[ 41] 40 GM-X Cache 0.1.67 GM-X Team unknown gmx_cache.a running
[ 42] 41 GM-X Access 0.1.67 GM-X Team unknown gmx_access. running
[ 43] 42 [APS] Core 0.1.84-alp GM-X Team unknown aps_core.am running

[ 44] 43 [APS] Players Menu 0.1.84-alp GM-X Team unknown aps_plmenu. running
[ 45] 44 [APS] Log 0.1.0-manu GM-X Team unknown aps_log.amx running
[ 46] 45 [APS] Ban 0.1.0-manu GM-X Team unknown aps_ban.amx running
[ 47] 46 [APS] Voice Chat 0.1.0-manu GM-X Team unknown aps_voice_c running
[ 48] 47 [APS] Text Chat 0.1.0-manu GM-X Team unknown aps_text_ch running
[ 49] 48 [APS] Mixed 0.1.0-manu GM-X Team unknown aps_mixed.a running
[ 50] 49 [APS] Chat Voice ReAPI 0.1.0-manu GM-X Team unknown aps_chat_vo running
[ 51] 50 [APS] Chat CM Addon 0.1.0-manu GM-X Team unknown aps_chat_te running
[ 52] 51 Map Manager: Core 3.0.7 Mistrick unknown map_manager running
[ 53] 52 Map Manager: Scheduler 0.1.5 Mistrick unknown map_manager running
[ 54] 53 Map Manager: Rtv 0.1.1 Mistrick unknown map_manager running

[ 55] 54 Map Manager: Nominatio 0.1.2 Mistrick unknown map_manager running
[ 56] 55 Map Manager: BlockList 0.0.3 Mistrick unknown map_manager running
[ 57] 56 Map Manager: Online so 0.0.2 Mistrick unknown map_manager running
[ 58] 57 Map Manager: Effects 0.0.9 Mistrick unknown map_manager running
[ 59] 58 Map Manager: Informer 0.0.5 Mistrick unknown map_manager running
[ 60] 59 Block Slash Symbol 13.10.2018 w0w unknown block_slash running
[ 61] 60 [UAC] Core 0.1.0-manu GM-X Team unknown uac_core.am running
[ 62] 61 [UAC] GM-X Loader 0.1.0-manu GM-X Team unknown uac_gmx_loa running
[ 63] 62 [UAC] AmxBans Loader 0.1.0-manu F@nt0M unknown uac_amxbans running
[ 64] 63 [UAC] Logger 0.1.0-manu GM-X Team unknown uac_logger. running
[ 65] 64 [UAC] Commands 0.1.0-manu GM-X Team unknown uac_command running

[ 66] 65 Custom Player Models A 0.2.1 F@nt0M & BlackSi unknown custom_play running
[ 67] 66 Custom Player Models C 0.2.1 BlackSignature unknown custom_play running
[ 68] 67 Custom Player Models T 0.2.1 BlackSignature unknown custom_play running
68 plugins, 68 running
Автор плагина
GM-X Team
Версия плагина
0.1.84-alpha
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <grip>
#include <aps>
#include <gmx_stocks>

#define CHECK_NATIVE_TYPE(%1,%2) \
if (0 > %1 || %1 >= TypesNum) { \
return %2; \
}

#define CHECK_NATIVE_TYPE_ERROR(%1,%2) \
if (0 > %1 || %1 >= TypesNum) { \
log_error(AMX_ERR_NATIVE, "Invalid type %d", %1); \
return %2; \
}

enum {
FWD_PlayerPunishing,
FWD_PlayerPunished,
FWD_PlayerAmnestying,
FWD_PlayerAmnestied,
FWD_PlayerChecking,
FWD_PlayerChecked,

FWD_LAST
}

new Forwards[FWD_LAST], FwdReturn;

new Array:Types, TypesNum;

enum _:PunishmentStruc {
PunishmentID,
PunishmentType,
PunishmentExtra,
PunishmentCreated,
PunishmentTime,
PunishmentExpired,
PunishmentReason[APS_MAX_REASON_LENGTH],
PunishmentDetails[APS_MAX_DETAILS_LENGTH],
APS_PunisherType:PunishmentPunisherType,
PunishmentPunisherID,
APS_PunishmentStatus:PunishmentStatus
};

new Punishment[PunishmentStruc];

new Array:PlayersPunishment[MAX_PLAYERS + 1];
new PluginId;

public plugin_init() {
PluginId = register_plugin("[APS] Core", APS_VERSION_STR, "GM-X Team");
Types = ArrayCreate(APS_MAX_TYPE_LENGTH, 0);
for (new i = 1; i <= MAX_PLAYERS; i++) {
PlayersPunishment[i] = ArrayCreate(PunishmentStruc, 0);
}

Forwards[FWD_PlayerPunishing] = CreateMultiForward("APS_PlayerPunishing", ET_STOP, FP_CELL, FP_CELL);
Forwards[FWD_PlayerPunished] = CreateMultiForward("APS_PlayerPunished", ET_IGNORE, FP_CELL, FP_CELL);
Forwards[FWD_PlayerAmnestying] = CreateMultiForward("APS_PlayerAmnestying", ET_STOP, FP_CELL, FP_CELL);
Forwards[FWD_PlayerAmnestied] = CreateMultiForward("APS_PlayerAmnestied", ET_IGNORE, FP_CELL, FP_CELL);
Forwards[FWD_PlayerChecking] = CreateMultiForward("APS_PlayerChecking", ET_STOP, FP_CELL);
Forwards[FWD_PlayerChecked] = CreateMultiForward("APS_PlayerChecked", ET_IGNORE, FP_CELL);
}

public plugin_cfg() {
checkAPIVersion();

new fwdIniting = CreateMultiForward("APS_Initing", ET_IGNORE);
new fwdInited = CreateMultiForward("APS_Inited", ET_IGNORE);

ExecuteForward(fwdIniting, FwdReturn);
TypesNum = ArraySize(Types);
ExecuteForward(fwdInited, FwdReturn);

DestroyForward(fwdIniting);
DestroyForward(fwdInited);
}

public plugin_end() {
ArrayDestroy(Types);
for (new i = 1; i <= MAX_PLAYERS; i++) {
ArrayDestroy(PlayersPunishment[i]);
}

for (new i = 0; i < sizeof Forwards; i++) {
DestroyForward(Forwards[i]);
}
}

public client_connect(id) {
ArrayClear(PlayersPunishment[id]);
}

public client_disconnected(id) {
remove_task(id);
}

public GMX_PlayerLoaded(const id, GripJSONValue:data) {
ArrayClear(PlayersPunishment[id]);
ExecuteForward(Forwards[FWD_PlayerChecking], FwdReturn, id);
if (FwdReturn == PLUGIN_HANDLED) {
return;
}

new GripJSONValue:punishments = grip_json_object_get_value(data, "punishments");
if (punishments == Invalid_GripJSONValue) {
return;
}

new bool:hasPunishments = false;
for (new i = 0, n = grip_json_array_get_count(punishments), GripJSONValue:tmp; i < n; i++) {
tmp = grip_json_array_get_value(punishments, i);
if (grip_json_get_type(tmp) == GripJSONObject) {
parsePunishment(tmp);
ArrayPushArray(PlayersPunishment[id], Punishment, sizeof Punishment);
ExecuteForward(Forwards[FWD_PlayerPunished], FwdReturn, id, Punishment[PunishmentType]);
hasPunishments = true;
}
grip_destroy_json_value(tmp);
}
grip_destroy_json_value(punishments);

ExecuteForward(Forwards[FWD_PlayerChecked], FwdReturn, id);
if (hasPunishments) {
set_task_ex(1.0, "TaskCheckPlayer", id + 100, .flags = SetTask_Repeat);
}
}

public OnPunished(const GmxResponseStatus:status, GripJSONValue:data, const userid) {
if (status != GmxResponseStatusOk) {
return;
}

new id = GMX_GetPlayerByUserID(userid);
if (!id) {
return;
}

if (grip_json_get_type(data) != GripJSONObject) {
return;
}

new GripJSONValue:tmp = grip_json_object_get_value(data, "punishment");
parsePunishment(tmp);
grip_destroy_json_value(tmp);
ArrayPushArray(PlayersPunishment[id], Punishment, sizeof Punishment);
ExecuteForward(Forwards[FWD_PlayerPunished], FwdReturn, id, Punishment[PunishmentType]);

if (!task_exists(id + 100)) {
set_task_ex(1.0, "TaskCheckPlayer", id + 100, .flags = SetTask_Repeat);
}
}

public OnAmnestied(const GmxResponseStatus:status, GripJSONValue:data, const userid) {
if (status != GmxResponseStatusOk) {
return;
}

new id = GMX_GetPlayerByUserID(userid);
if (!id) {
return;
}

if (grip_json_get_type(data) != GripJSONObject) {
return;
}

new GripJSONValue:tmp = grip_json_object_get_value(data, "punishment");
new punishmentID = grip_json_object_get_number(tmp, "id");
grip_destroy_json_value(tmp);

for (new i = 0, n = ArraySize(PlayersPunishment[id]); i < n; i++) {
ArrayGetArray(PlayersPunishment[id], i, Punishment, sizeof Punishment);
if (Punishment[PunishmentStatus] != APS_PunishmentStatusActive) {
continue;
}

if (Punishment[PunishmentID] != punishmentID) {
continue;
}

ExecuteForward(Forwards[FWD_PlayerAmnestying], FwdReturn, id, Punishment[PunishmentType]);
if (FwdReturn != PLUGIN_HANDLED) {
Punishment[PunishmentStatus] = APS_PunishmentStatusAmnestied;
ArraySetArray(PlayersPunishment[id], i, Punishment, sizeof Punishment);
ExecuteForward(Forwards[FWD_PlayerAmnestied], FwdReturn, id, Punishment[PunishmentType]);
}
}
}

public TaskCheckPlayer(id) {
id -= 100;

if (!is_user_connected(id)) {
return;
}

new now = get_systime() + GMX_GetServerTimeDiff(), active = 0;
for (new i = 0, n = ArraySize(PlayersPunishment[id]); i < n; i++) {
ArrayGetArray(PlayersPunishment[id], i, Punishment, sizeof Punishment);
if (Punishment[PunishmentStatus] != APS_PunishmentStatusActive) {
continue;
}
if (Punishment[PunishmentExpired] > now) {
active++;
continue;
}

ExecuteForward(Forwards[FWD_PlayerAmnestying], FwdReturn, id, Punishment[PunishmentType]);
if (FwdReturn != PLUGIN_HANDLED) {
Punishment[PunishmentStatus] = APS_PunishmentStatusExpired
ArraySetArray(PlayersPunishment[id], i, Punishment, sizeof Punishment);
ExecuteForward(Forwards[FWD_PlayerAmnestied], FwdReturn, id, Punishment[PunishmentType]);
} else {
active++;
}
}

if (active == 0) {
remove_task(id + 100);
}
}

bool:punishPlayer(const player) {
ExecuteForward(Forwards[FWD_PlayerPunishing], FwdReturn, player, Punishment[PunishmentType]);
if (FwdReturn == PLUGIN_HANDLED) {
return false;
}

new GripJSONValue:request = grip_json_init_object();

new type[APS_MAX_TYPE_LENGTH];
ArrayGetString(Types, Punishment[PunishmentType], type, charsmax(type));
grip_json_object_set_string(request, "type", type);
if (Punishment[PunishmentExtra] == 0) {
grip_json_object_set_null(request, "extra");
} else {
grip_json_object_set_number(request, "extra", Punishment[PunishmentExtra]);
}
grip_json_object_set_number(request, "time", Punishment[PunishmentTime]);
grip_json_object_set_string(request, "reason", Punishment[PunishmentReason]);
if (Punishment[PunishmentDetails][0] != EOS) {
grip_json_object_set_string(request, "details", Punishment[PunishmentDetails]);
} else {
grip_json_object_set_null(request, "details");
}

if (Punishment[PunishmentPunisherID] > 0) {
grip_json_object_set_number(request, "punisher_id", Punishment[PunishmentPunisherID]);
}

if (GMX_PlayerIsLoaded(player)) {
grip_json_object_set_number(request, "player_id", GMX_PlayerGetPlayerId(player));
GMX_MakeRequest("punish", request, "OnPunished", get_user_userid(player));
grip_destroy_json_value(request);
} else {
new steamid[24], nick[32], ip[32];
get_user_authid(player, steamid, charsmax(steamid));
get_user_name(player, nick, charsmax(nick));
get_user_ip(player, ip, charsmax(ip), 1);

new emulator = 0;
if (has_reunion()) {
emulator = _:REU_GetAuthtype(player);
}

grip_json_object_set_number(request, "emulator", emulator);
grip_json_object_set_string(request, "steamid", steamid);
grip_json_object_set_string(request, "nick", nick);
grip_json_object_set_string(request, "ip", ip);
GMX_MakeRequest("punish/immediately", request, "OnPunished", get_user_userid(player));
grip_destroy_json_value(request);
}

return true;
}

bool:amnestyPlayer(const player) {
new GripJSONValue:request = grip_json_init_object();
grip_json_object_set_number(request, "punishment_id", Punishment[PunishmentID]);
GMX_MakeRequest("punish/amnesty", request, "OnAmnestied", get_user_userid(player));
grip_destroy_json_value(request);
return true;
}

parsePunishment(const GripJSONValue:punishment) {
arrayset(Punishment, 0, sizeof Punishment);
new GripJSONValue:tmp;

Punishment[PunishmentID] = grip_json_object_get_number(punishment, "id");
Punishment[PunishmentTime] = grip_json_object_get_number(punishment, "time");

new type[32];
grip_json_object_get_string(punishment, "type", type, charsmax(type));
Punishment[PunishmentType] = ArrayFindString(Types, type);

tmp = grip_json_object_get_value(punishment, "extra");
Punishment[PunishmentExtra] = grip_json_get_type(tmp) != GripJSONNull ? grip_json_get_number(tmp) : 0;
grip_destroy_json_value(tmp);

Punishment[PunishmentCreated] = grip_json_object_get_number(punishment, "created_at");

tmp = grip_json_object_get_value(punishment, "expired_at");
Punishment[PunishmentExpired] = grip_json_get_type(tmp) != GripJSONNull ? grip_json_get_number(tmp) : 0;
grip_destroy_json_value(tmp);

tmp = grip_json_object_get_value(punishment, "punisher_id");
if (grip_json_get_type(tmp) == GripJSONNumber) {
Punishment[PunishmentPunisherType] = APS_PunisherTypePlayer;
Punishment[PunishmentPunisherID] = grip_json_get_number(tmp);
grip_destroy_json_value(tmp);
} else {
grip_destroy_json_value(tmp);
tmp = grip_json_object_get_value(punishment, "punisher_user_id");
if (grip_json_get_type(tmp) == GripJSONNumber) {
Punishment[PunishmentPunisherType] = APS_PunisherTypeUser;
Punishment[PunishmentPunisherID] = grip_json_get_number(tmp);
} else {
Punishment[PunishmentPunisherType] = APS_PunisherTypeServer;
Punishment[PunishmentPunisherID] = 0;
}
grip_destroy_json_value(tmp);
}

tmp = grip_json_object_get_value(punishment, "reason");
if (grip_json_get_type(tmp) == GripJSONObject) {
grip_json_object_get_string(tmp, "title", Punishment[PunishmentReason], charsmax(Punishment[PunishmentReason]));
}
grip_destroy_json_value(tmp);

tmp = grip_json_object_get_value(punishment, "details");
if (grip_json_get_type(tmp) == GripJSONString) {
grip_json_get_string(tmp, Punishment[PunishmentDetails], charsmax(Punishment[PunishmentDetails]));
}
grip_destroy_json_value(tmp);
}

public plugin_natives() {
register_native("APS_RegisterType", "NativeRegisterType", 0);
register_native("APS_IsValidType", "NativeIsValidType", 0);
register_native("APS_GetTypesNum", "NativeGetTypesNum", 0);
register_native("APS_GetTypeIndex", "NativeGetTypeIndex", 0);
register_native("APS_GetTypeName", "NativeGetTypeName", 0);
register_native("APS_PunishPlayer", "NativePunishPlayer", 0);
register_native("APS_AmnestyPlayer", "NativeAmnestyPlayer", 0);
register_native("APS_GetPlayerPunishment", "NativeGetPlayerPunishment", 0);
register_native("APS_GetId", "NativeGetId", 0);
register_native("APS_GetExtra", "NativeGetExtra", 0);
register_native("APS_SetExtra", "NativeSetExtra", 0);
register_native("APS_GetTime", "NativeGetTime", 0);
register_native("APS_SetTime", "NativeSetTime", 0);
register_native("APS_GetCreated", "NativeGetCreated", 0);
register_native("APS_SetCreated", "NativeSetCreated", 0);
register_native("APS_GetExpired", "NativeGetExpired", 0);
register_native("APS_SetExpired", "NativeSetExpired", 0);
register_native("APS_GetReason", "NativeGetReason", 0);
register_native("APS_SetReason", "NativeSetReason", 0);
register_native("APS_GetDetails", "NativeGetDetails", 0);
register_native("APS_SetDetails", "NativeSetDetails", 0);
register_native("APS_GetPunisherType", "NativeGetPunisherType", 0);
register_native("APS_SetPunisherType", "NativeSetPunisherType", 0);
register_native("APS_GetPunisherId", "NativeGetPunisherId", 0);
register_native("APS_SetPunisherId", "NativeSetPunisherId", 0);
//register_native("APS_CheckPlayer", "NativeCheckPlayer", 0);
}

public APS_Type:NativeRegisterType(const plugin, const argc) {
enum { arg_type = 1 };

CHECK_NATIVE_ARGS_NUM(argc, 1, APS_InvalidType)

new type[APS_MAX_TYPE_LENGTH];
get_string(arg_type, type, charsmax(type));
return APS_Type:ArrayPushString(Types, type);
}

public bool:NativeIsValidType(const plugin, const argc) {
enum { arg_type = 1 };
if (argc < arg_type) {
return false;
}
return bool:(0 <= get_param(arg_type) < TypesNum);
}

public NativeGetTypesNum(const plugin, const argc) {
return TypesNum;
}

public APS_Type:NativeGetTypeIndex(const plugin, const argc) {
enum { arg_type = 1 };

CHECK_NATIVE_ARGS_NUM(argc, 1, APS_InvalidType)

new type[APS_MAX_TYPE_LENGTH];
get_string(arg_type, type, charsmax(type));
return APS_Type:ArrayFindString(Types, type);
}

public NativeGetTypeName(const plugin, const argc) {
enum { arg_type = 1, arg_value, arg_len };

CHECK_NATIVE_ARGS_NUM(argc, 1, 0)

new typeIndex = get_param(arg_type);
CHECK_NATIVE_TYPE_ERROR(typeIndex, 0)
new type[APS_MAX_TYPE_LENGTH];
ArrayGetString(Types, typeIndex, type, charsmax(type));
return set_string(arg_value, type, get_param(arg_len));
}

public bool:NativePunishPlayer(const plugin, const argc) {
enum { arg_player = 1, arg_type, arg_time, arg_reason, arg_details, arg_punisher_id, arg_extra };
arrayset(Punishment, 0, sizeof Punishment);

CHECK_NATIVE_ARGS_NUM(argc, 4, false)

new player = get_param(arg_player);
CHECK_NATIVE_PLAYER(player, false)

Punishment[PunishmentType] = get_param(arg_type);
CHECK_NATIVE_TYPE_ERROR(Punishment[PunishmentType], false)

Punishment[PunishmentTime] = get_param(arg_time);
get_string(arg_reason, Punishment[PunishmentReason], charsmax(Punishment[PunishmentReason]));
get_string(arg_details, Punishment[PunishmentDetails], charsmax(Punishment[PunishmentDetails]));
new punisher = get_param(arg_punisher_id);
if (punisher != 0 && is_user_connected(punisher) && GMX_PlayerIsLoaded(punisher)) {
Punishment[PunishmentPunisherID] = GMX_PlayerGetPlayerId(punisher);
Punishment[PunishmentPunisherType] = APS_PunisherTypePlayer;
} else {
Punishment[PunishmentPunisherID] = 0;
Punishment[PunishmentPunisherType] = APS_PunisherTypeServer;
}
Punishment[PunishmentExtra] = get_param(arg_extra);

return punishPlayer(player);
}

public bool:NativeAmnestyPlayer(const plugin, const argc) {
enum { arg_player = 1, arg_type };

CHECK_NATIVE_ARGS_NUM(argc, 2, false)

new player = get_param(arg_player);
CHECK_NATIVE_PLAYER(player, false)

new type = get_param(arg_type);
CHECK_NATIVE_TYPE_ERROR(type, false)

for (new i = 0, n = ArraySize(PlayersPunishment[player]); i < n; i++) {
ArrayGetArray(PlayersPunishment[player], i, Punishment, sizeof Punishment);
if (Punishment[PunishmentStatus] != APS_PunishmentStatusActive) {
continue;
}
if (Punishment[PunishmentType] == type) {
return amnestyPlayer(player);
}
}

return false;
}

public bool:NativeGetPlayerPunishment(const plugin, const argc) {
enum { arg_player = 1, arg_type };
arrayset(Punishment, 0, sizeof Punishment);

CHECK_NATIVE_ARGS_NUM(argc, 2, false)

new player = get_param(arg_player);
CHECK_NATIVE_PLAYER(player, false)

new type = get_param(arg_type);
CHECK_NATIVE_TYPE_ERROR(type, false)

for (new i = 0, n = ArraySize(PlayersPunishment[player]); i < n; i++) {
ArrayGetArray(PlayersPunishment[player], i, Punishment, sizeof Punishment);
if (Punishment[PunishmentStatus] != APS_PunishmentStatusActive) {
continue;
}
if (Punishment[PunishmentType] == type) {
return true;
}
}

return false;
}

public NativeGetId(const plugin, const argc) {
return Punishment[PunishmentID];
}

public NativeGetExtra(const plugin, const argc) {
return Punishment[PunishmentExtra];
}

public NativeSetExtra(const plugin, const argc) {
enum { arg_value = 1};
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentExtra] = get_param(arg_value);
return 1;
}

public NativeGetTime(const plugin, const argc) {
return Punishment[PunishmentTime];
}

public NativeSetTime(const plugin, const argc) {
enum { arg_value = 1};
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentTime] = get_param(arg_value);
return 1;
}

public NativeGetCreated(const plugin, const argc) {
return Punishment[PunishmentCreated];
}

public NativeSetCreated(const plugin, const argc) {
enum { arg_value = 1};
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentCreated] = get_param(arg_value);
return 1;
}

public NativeGetExpired(const plugin, const argc) {
return Punishment[PunishmentExpired];
}

public NativeSetExpired(const plugin, const argc) {
enum { arg_value = 1};
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentExpired] = get_param(arg_value);
return 1;
}

public NativeGetReason(const plugin, const argc) {
enum { arg_value = 1, arg_len };
CHECK_NATIVE_ARGS_NUM(argc, 2, 0)
return set_string(arg_value, Punishment[PunishmentReason], get_param(arg_len));
}

public NativeSetReason(const plugin, const argc) {
enum { arg_value = 1 };
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
return get_string(arg_value, Punishment[PunishmentReason], charsmax(Punishment[PunishmentReason]));
}

public NativeGetDetails(const plugin, const argc) {
enum { arg_value = 1, arg_len };
CHECK_NATIVE_ARGS_NUM(argc, 2, 0)
return set_string(arg_value, Punishment[PunishmentDetails], get_param(arg_len));
}

public NativeSetDetails(const plugin, const argc) {
enum { arg_value = 1 };
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
return get_string(arg_value, Punishment[PunishmentDetails], charsmax(Punishment[PunishmentDetails]));
}

public APS_PunisherType:NativeGetPunisherType(const plugin, const argc) {
return Punishment[PunishmentPunisherType];
}

public NativeSetPunisherType(const plugin, const argc) {
enum { arg_value = 1 };
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentPunisherType] = APS_PunisherType:get_param(arg_value);
return 1;
}

public NativeGetPunisherId(const plugin, const argc) {
return Punishment[PunishmentPunisherID];
}

public NativeSetPunisherId(const plugin, const argc) {
enum { arg_value = 1 };
CHECK_NATIVE_ARGS_NUM(argc, 1, 0)
Punishment[PunishmentPunisherID] = get_param(arg_value);
return 1;
}

checkAPIVersion() {
for(new i, n = get_pluginsnum(), status[2], func; i < n; i++) {
if(i == PluginId) {
continue;
}

get_plugin(i, .status = status, .len5 = charsmax(status));

//status debug || status running
if(status[0] != 'd' && status[0] != 'r') {
continue;
}

func = get_func_id("__aps_version_check", i);

if(func == -1) {
continue;
}

if(callfunc_begin_i(func, i) == 1) {
callfunc_push_int(APS_MAJOR_VERSION);
callfunc_push_int(APS_MINOR_VERSION);
callfunc_end();
}
}
}
В gmx-web причины наказания добавил, но в меню таких как aps_banmenu, aps_plmenu причины не отображаются.
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
aps_reloadreasons введите в консоли сервера
 
  • Нравится
Реакции: Ayk
Статус
В этой теме нельзя размещать новые ответы.

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

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