Код за потвърждение: Избери целия код
#include <amxmodx>
#include <reapi>
#define PLUGIN "specmenu"
#define VERSION "1.0"
#define AUTHOR "mi0"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHookChain(RG_CBasePlayer_Spawn, "OnPlayerSpawn", 1);
RegisterHookChain(RG_ShowVGUIMenu, "OnShowVGUIMenu");
RegisterHookChain(RG_HandleMenu_ChooseTeam, "OnMenuChooseTeam_Pre");
RegisterHookChain(RG_HandleMenu_ChooseTeam, "OnMenuChooseTeam", 1);
}
public OnShowVGUIMenu(id, VGUIMenu:menu_type, bitsSlots, szOldMenu[]) {
// Ако Чейн-а е стигнал до TeamSelect го force-ваме да направи още един iteration за spectator опцията.
if (!strcmp(szOldMenu, "#IG_Team_Select")) {
SetHookChainArg(3, ATYPE_INTEGER, bitsSlots | (1 << 5));
SetHookChainArg(4, ATYPE_STRING, "#IG_Team_Select_Spect");
}
}
public OnPlayerSpawn(id) {
// понеже играта дава спектатор опцията само през freeze time-а трябва да излъжем играта че играча е във freeze time
// това става с PLAYER_FREEZE_TIME_OVER
set_entvar(id, var_iuser3, get_entvar(id, var_iuser3) | (1 << 1));
}
public OnMenuChooseTeam_Pre(id) {
// когато прави меню-то играта проверява дали играча е във freeze(предполагам защото е client sided) а сървъра проверява game rule m_bFreezePeriod когато някой цъкне 6
// отново лъжем играта че е freeze time
set_member_game(m_bFreezePeriod, 1);
}
public OnMenuChooseTeam(id) {
// вече няма нужда да е freeze period играча вече е spectator
set_member_game(m_bFreezePeriod, 0);
// ако m_bTeamChanged остане 1 играча няма да може да цъкне "m" отново а ще му изпише че вече е избирал отбор...
set_member(id, m_bTeamChanged, 0);
}