наверно у меня только такое опять после выстрела кнопка начинает работать((
У меня тоже( Беда , вот бы рабочий плагин да еще интегрированный в меню админа с включением и отключением !!!
наверно у меня только такое опять после выстрела кнопка начинает работать((
[CSGO] - ︻デ═一 AWP No Scope - AlliedModders@FrozDark, А можно ли сделать по голосованию? что-бы игроки например писаль !nozoom
Это через встроенное голосование , а вот сделали бы как в player votes например
Ну так напиши в теме плагина.Это через встроенное голосование , а вот сделали бы как в player votes например
#include <sourcemod>
#include <sdktools>
#pragma newdecls required
#pragma semicolon 1
bool g_bNoScopeActive = false;
bool g_bVoteInProgress = false;
int g_iLastVoteTime = 0;
ConVar g_hNoScopeCvar;
#define VOTE_SOUND "ui/vote_started.wav"
public Plugin myinfo = {
name = "No Sniper Scope (Menu + Admin Bypass)",
author = "Google AI Assistant",
version = "1.2",
url = ""
};
public void OnPluginStart() {
g_hNoScopeCvar = CreateConVar("sm_noscope_all", "0", "Блокировать ли прицел", FCVAR_NOTIFY);
g_hNoScopeCvar.AddChangeHook(OnCvarChanged);
// Регистрируем команду как консольную, чтобы она была доступна всем
RegConsoleCmd("sm_noscope", Command_NoScopeMenu, "Открыть меню NoScope");
AutoExecConfig(true, "NoScope");
CreateTimer(120.0, Timer_Ads, _, TIMER_REPEAT);
}
public void OnMapStart() {
PrecacheSound(VOTE_SOUND, true);
}
public void OnCvarChanged(ConVar convar, const char[] oldValue, const char[] newValue) {
g_bNoScopeActive = view_as<bool>(convar.IntValue);
}
public Action Timer_Ads(Handle timer) {
if (!g_bNoScopeActive) {
PrintToChatAll(" \x04[NoScope]\x01 Хотите запретить прицелы? Напишите \x03!noscope");
}
return Plugin_Continue;
}
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) {
if (g_bNoScopeActive && IsPlayerAlive(client) && (buttons & IN_ATTACK2)) {
int iWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
if (iWeapon != -1) {
char sWeapon[64];
GetEntityClassname(iWeapon, sWeapon, sizeof(sWeapon));
if (StrContains(sWeapon, "awp") != -1 || StrContains(sWeapon, "scout") != -1 ||
StrContains(sWeapon, "sg550") != -1 || StrContains(sWeapon, "g3sg1") != -1) {
buttons &= ~IN_ATTACK2;
SetEntProp(client, Prop_Send, "m_iFOV", 0);
PrintHintText(client, "Прицел ЗАПРЕЩЕН!");
return Plugin_Changed;
}
}
}
return Plugin_Continue;
}
public Action Command_NoScopeMenu(int client, int args) {
if (client == 0) return Plugin_Handled;
// Проверяем наличие флага админа (например, флаг GENERIC - 'b')
AdminId admin = GetUserAdmin(client);
bool isAdmin = (admin != INVALID_ADMIN_ID && GetAdminFlag(admin, Admin_Generic));
if (isAdmin) {
AdminChoiceMenu(client);
} else {
TryStartPlayerVote(client);
}
return Plugin_Handled;
}
void AdminChoiceMenu(int client) {
Menu menu = new Menu(Handler_AdminChoice);
menu.SetTitle("Управление NoScope (Админ)");
char buffer[128];
Format(buffer, sizeof(buffer), "Мгновенно: %s", g_bNoScopeActive ? "Включить прицелы" : "Отключить прицелы");
menu.AddItem("toggle", buffer);
menu.AddItem("vote", "Запустить голосование (без КД)");
menu.ExitButton = true;
menu.Display(client, 20);
}
public int Handler_AdminChoice(Menu menu, MenuAction action, int param1, int param2) {
if (action == MenuAction_Select) {
char info[32];
menu.GetItem(param2, info, sizeof(info));
if (StrEqual(info, "toggle")) {
g_bNoScopeActive = !g_bNoScopeActive;
g_hNoScopeCvar.SetInt(g_bNoScopeActive ? 1 : 0);
PrintToChatAll(" \x04[SM]\x01 Админ %N %s прицелы.", param1, g_bNoScopeActive ? "ЗАПРЕТИЛ" : "РАЗРЕШИЛ");
} else if (StrEqual(info, "vote")) {
StartNoScopeVote();
}
} else if (action == MenuAction_End) {
delete menu;
}
return 0;
}
void TryStartPlayerVote(int client) {
if (IsVoteInProgress() || g_bVoteInProgress) {
PrintToChat(client, " \x04[SM]\x01 Голосование уже идет.");
return;
}
int iElapsed = GetTime() - g_iLastVoteTime;
if (iElapsed < 300 && g_iLastVoteTime != 0) {
PrintToChat(client, " \x04[SM]\x01 Ждите %d сек. до нового голосования.", 300 - iElapsed);
return;
}
StartNoScopeVote();
}
void StartNoScopeVote() {
if (IsVoteInProgress() || g_bVoteInProgress) return;
Menu menu = new Menu(Handler_VoteNoScope);
menu.SetTitle(g_bNoScopeActive ? "Разрешить прицелы?" : "Запретить прицелы?");
menu.AddItem("y", "Да");
menu.AddItem("n", "Нет");
menu.ExitButton = false;
g_bVoteInProgress = true;
g_iLastVoteTime = GetTime(); // Записываем время старта
EmitSoundToAll(VOTE_SOUND);
menu.DisplayVoteToAll(20);
}
public int Handler_VoteNoScope(Menu menu, MenuAction action, int param1, int param2) {
if (action == MenuAction_End) {
g_bVoteInProgress = false;
delete menu;
} else if (action == MenuAction_VoteEnd) {
int iVotes, iTotalVotes;
GetMenuVoteInfo(param2, iVotes, iTotalVotes);
// 60% голосов "ЗА" (param2 - это индекс выбранного пункта, "y" имеет индекс 0)
if (param2 == 0 && (float(iVotes) / float(iTotalVotes) >= 0.60)) {
g_bNoScopeActive = !g_bNoScopeActive;
g_hNoScopeCvar.SetInt(g_bNoScopeActive ? 1 : 0);
PrintToChatAll(" \x04[SM]\x01 Голосование завершено! Прицелы %s.", g_bNoScopeActive ? "ЗАПРЕЩЕНЫ" : "РАЗРЕШЕНЫ");
} else {
PrintToChatAll(" \x04[SM]\x01 Голосование не набрало 60%% голосов.");
}
}
return 0;
}
Это чтобы наверняка?C-подобный:#include <sourcemod> #include <sourcemod>