Barkelay
Участник
- Сообщения
- 520
- Реакции
- 61
- Операционная система
- Windows
- Текст ошибки
-
if(strcmp(sWeapon[7], "awp") == 0)
- Список мета-модулей
-
Не важно
- Список плагинов SM
-
Не важно
- Список расширений SM
-
Не важно
Всем привет, нашёл один плагин, но кажется автор на него забил и я решил спросить тут
Может кто подскажет переменную, которая отвечает за стрельбу без прицела, если таковая имеется
Или же хотя бы как сделать в этом плагине, чтобы ноузум работал не только на AWP, но и на Scout и Скорострелках
Вот код... Там стоит только AWP, как добавить и другое оружие?
P.S. Нужное выделено "жирным"
NoZoom Rounds Voting
Пользователь jasmine разместил новый ресурс: NoZoomSystem - Голосование за игру без прицелов. С помощью данного плагина игроки смогут голосовать за игру без прицелов. Плагин может писать в чат об убийствах без прицела. Узнать больше об этом ресурсе...
hlmod.ru
Может кто подскажет переменную, которая отвечает за стрельбу без прицела, если таковая имеется
Или же хотя бы как сделать в этом плагине, чтобы ноузум работал не только на AWP, но и на Scout и Скорострелках
Вот код... Там стоит только AWP, как добавить и другое оружие?
P.S. Нужное выделено "жирным"
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
#include <csgo_colors>
#undef REQUIRE_PLUGIN
#include <adminmenu>
#pragma newdecls required
int g_iRounds, g_iCooldown, g_iPercent;
bool g_bPrintKills, g_bPrintAdv, g_bDisableDeagle;
bool g_bNZ, g_bVoted[MAXPLAYERS+1], g_bAdminStart;
int g_iNZRounds, g_iVotes, g_iRemainRounds, m_flNextSecondaryAttack = -1;
char g_sPrefix[32];
ConVar g_hCvar[7];
TopMenu g_hAdminMenu = null;
public Plugin myinfo =
{
name = "NoZoom Rounds Voting",
author = "d4Ck(vk.com/geliydaun)",
version = "2.0.0",
url = "CRYSTALS SOURCEMOD PLUGINS"
};
public void OnPluginStart()
{
RegConsoleCmd("sm_nz", OnVoteCmd);
RegConsoleCmd("sm_nozoom", OnVoteCmd);
RegConsoleCmd("sm_nzrv", OnVoteCmd);
HookEvent("round_start", OnRoundStart);
HookEvent("player_death", OnPlayerDeath);
m_flNextSecondaryAttack = FindSendPropInfo("CBaseCombatWeapon", "m_flNextSecondaryAttack");
g_hCvar[0] = CreateConVar("sm_nzrv_rounds", "1", "Количество раундов без прицела после успешного голосования.");
g_hCvar[1] = CreateConVar("sm_nzrv_cooldown_rounds", "0", "Количество раундов между голосованиями.");
g_hCvar[2] = CreateConVar("sm_nzrv_voting_percent", "50", "Процент от всех игроков, требуемый для начала игры без прицелов.");
g_hCvar[3] = CreateConVar("sm_nzrv_print_kills", "1", "Писать в чат об убийствах без прицела?\nВо время NoZoom раундов функция автоматически отключается.\n1 - Да.\n0 - Нет.");
g_hCvar[4] = CreateConVar("sm_nzrv_print_adv", "0", "Включена ли реклама в начале раунда?\n1 - Да.\n0 - Нет.");
g_hCvar[5] = CreateConVar("sm_nzrv_disable_deagle", "0", "Отключен ли дигл на время раундов без прицела?\n1 - Да.\n0 - Нет.");
g_hCvar[6] = CreateConVar("sm_nzrv_chat_prefix", "[Без прицела]", "Префикс плагина в чате.");
AutoExecConfig(true, "nzrv");
LoadTranslations("nzrv.phrases");
if (LibraryExists("adminmenu"))
{
TopMenu hTopMenu;
hTopMenu = GetAdminTopMenu();
if (hTopMenu != null)
{
OnAdminMenuReady(hTopMenu);
}
}
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
OnClientPutInServer(i);
}
}
}
public void OnConfigsExecuted()
{
g_iRounds = GetConVarInt(g_hCvar[0]);
g_iCooldown = GetConVarInt(g_hCvar[1]) + 1;
g_iPercent = GetConVarInt(g_hCvar[2]);
g_bPrintKills = GetConVarBool(g_hCvar[3]);
g_bPrintAdv = GetConVarBool(g_hCvar[4]);
g_bDisableDeagle = GetConVarBool(g_hCvar[5]);
GetConVarString(g_hCvar[6], g_sPrefix, sizeof(g_sPrefix));
}
public void OnAdminMenuReady(Handle aTopMenu)
{
TopMenu hTopMenu = TopMenu.FromHandle(aTopMenu);
if (hTopMenu == g_hAdminMenu)
return;
g_hAdminMenu = hTopMenu;
TopMenuObject hCategory = g_hAdminMenu.FindCategory("ServerCommands");
if (hCategory != INVALID_TOPMENUOBJECT)
g_hAdminMenu.AddItem("AdminStart", StartNoZoomCallback, hCategory, "start_nozoom", ADMFLAG_ROOT);
}
public void StartNoZoomCallback(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
case TopMenuAction_DrawOption:
{
if(g_bNZ || g_bAdminStart) sBuffer[0] = ITEMDRAW_DISABLED;
}
case TopMenuAction_DisplayOption:
{
FormatEx(sBuffer, maxlength, "Начать битву без прицелов");
}
case TopMenuAction_SelectOption:
{
g_bAdminStart = true;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "next round alert");
}
}
}
public void OnMapStart()
{
g_bNZ = g_bAdminStart = false;
g_iRemainRounds = g_iCooldown;
}
public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_PreThink, OnPreThink);
if(g_bDisableDeagle) SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
}
public void OnClientDisconnect(int client)
{
if(g_bVoted[client])
{
g_bVoted[client] = false;
--g_iVotes;
}
}
public Action OnPreThink(int client)
{
if(g_bNZ) SetNoScope(GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"));
return Plugin_Continue;
}
public void OnPlayerDeath(Event hEvent, const char[] name, bool dontBroadcast)
{
if(g_bPrintKills && !g_bNZ)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
if (attacker > 0 && IsClientInGame(attacker))
{
if (attacker != client)
{
char sWeapon[32];
GetEventString(hEvent, "weapon", sWeapon, sizeof(sWeapon));
if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && StrContains(sWeapon, "awp", false) != -1)
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "nozoom kill", attacker, client);
}
}
}
}
public Action OnVoteCmd(int client, int args)
{
if(client)
{
if(!g_bNZ)
{
int need = RoundToCeil(float(GetClientCount(true)) * (float(g_iPercent) / 100.0));
if(!g_bAdminStart && g_iVotes < need)
{
int rounds = GameRules_GetProp("m_totalRoundsPlayed");
if(g_iRemainRounds <= rounds)
{
if(!g_bVoted[client])
{
++g_iVotes;
g_bVoted[client] = true;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "vote msg", client, g_iVotes, need);
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "already voted");
if(g_iVotes >= need) CGOPrintToChatAll("%s{default} %t", g_sPrefix, "next round alert");
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "cooldown alert", g_iRemainRounds - rounds);
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "enough votes");
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "already happening");
}
return Plugin_Handled;
}
public void OnRoundStart(Event hEvent, const char[] name, bool dontBroadcast)
{
if(!g_bNZ)
{
if(g_bAdminStart || g_iVotes >= RoundToCeil(float(GetClientCount(true)) * (float(g_iPercent) / 100.0)))
{
g_bNZ = true;
g_bAdminStart = false;
}
if (g_bPrintAdv && !g_bNZ && g_iRemainRounds <= GameRules_GetProp("m_totalRoundsPlayed"))
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "advertisement");
}
if(g_iNZRounds >= g_iRounds)
{
g_bNZ = false;
g_iNZRounds = g_iVotes = 0;
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
g_bVoted = false;
}
}
g_iRemainRounds = GameRules_GetProp("m_totalRoundsPlayed") + g_iCooldown;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "battle end");
}
if(g_bNZ)
{
++g_iNZRounds;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "round start alert");
if(g_bDisableDeagle)
{
char sWeapon[64];
int iEnt = GetMaxEntities();
for (int i = 1; i < iEnt; ++i)
{
if (IsValidEdict(i) && IsValidEntity(i))
{
GetEdictClassname(i, sWeapon, sizeof(sWeapon));
if (strcmp(sWeapon[7], "deagle") == 0) RemoveEdict(i);
}
}
}
}
}
void SetNoScope(int weapon)
{
if (IsValidEdict(weapon))
{
char sWeapon[32];
GetEdictClassname(weapon, sWeapon, sizeof(sWeapon));
if(strcmp(sWeapon[7], "awp") == 0)
SetEntDataFloat(weapon, m_flNextSecondaryAttack, GetGameTime() + 2.0);
}
}
public Action OnWeaponCanUse(int client, int weapon)
{
char sWeapon[32];
GetEdictClassname(weapon, sWeapon, sizeof(sWeapon));
if(g_bNZ && strcmp(sWeapon[7], "deagle") == 0)
return Plugin_Handled;
return Plugin_Continue;
}
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
#include <csgo_colors>
#undef REQUIRE_PLUGIN
#include <adminmenu>
#pragma newdecls required
int g_iRounds, g_iCooldown, g_iPercent;
bool g_bPrintKills, g_bPrintAdv, g_bDisableDeagle;
bool g_bNZ, g_bVoted[MAXPLAYERS+1], g_bAdminStart;
int g_iNZRounds, g_iVotes, g_iRemainRounds, m_flNextSecondaryAttack = -1;
char g_sPrefix[32];
ConVar g_hCvar[7];
TopMenu g_hAdminMenu = null;
public Plugin myinfo =
{
name = "NoZoom Rounds Voting",
author = "d4Ck(vk.com/geliydaun)",
version = "2.0.0",
url = "CRYSTALS SOURCEMOD PLUGINS"
};
public void OnPluginStart()
{
RegConsoleCmd("sm_nz", OnVoteCmd);
RegConsoleCmd("sm_nozoom", OnVoteCmd);
RegConsoleCmd("sm_nzrv", OnVoteCmd);
HookEvent("round_start", OnRoundStart);
HookEvent("player_death", OnPlayerDeath);
m_flNextSecondaryAttack = FindSendPropInfo("CBaseCombatWeapon", "m_flNextSecondaryAttack");
g_hCvar[0] = CreateConVar("sm_nzrv_rounds", "1", "Количество раундов без прицела после успешного голосования.");
g_hCvar[1] = CreateConVar("sm_nzrv_cooldown_rounds", "0", "Количество раундов между голосованиями.");
g_hCvar[2] = CreateConVar("sm_nzrv_voting_percent", "50", "Процент от всех игроков, требуемый для начала игры без прицелов.");
g_hCvar[3] = CreateConVar("sm_nzrv_print_kills", "1", "Писать в чат об убийствах без прицела?\nВо время NoZoom раундов функция автоматически отключается.\n1 - Да.\n0 - Нет.");
g_hCvar[4] = CreateConVar("sm_nzrv_print_adv", "0", "Включена ли реклама в начале раунда?\n1 - Да.\n0 - Нет.");
g_hCvar[5] = CreateConVar("sm_nzrv_disable_deagle", "0", "Отключен ли дигл на время раундов без прицела?\n1 - Да.\n0 - Нет.");
g_hCvar[6] = CreateConVar("sm_nzrv_chat_prefix", "[Без прицела]", "Префикс плагина в чате.");
AutoExecConfig(true, "nzrv");
LoadTranslations("nzrv.phrases");
if (LibraryExists("adminmenu"))
{
TopMenu hTopMenu;
hTopMenu = GetAdminTopMenu();
if (hTopMenu != null)
{
OnAdminMenuReady(hTopMenu);
}
}
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
OnClientPutInServer(i);
}
}
}
public void OnConfigsExecuted()
{
g_iRounds = GetConVarInt(g_hCvar[0]);
g_iCooldown = GetConVarInt(g_hCvar[1]) + 1;
g_iPercent = GetConVarInt(g_hCvar[2]);
g_bPrintKills = GetConVarBool(g_hCvar[3]);
g_bPrintAdv = GetConVarBool(g_hCvar[4]);
g_bDisableDeagle = GetConVarBool(g_hCvar[5]);
GetConVarString(g_hCvar[6], g_sPrefix, sizeof(g_sPrefix));
}
public void OnAdminMenuReady(Handle aTopMenu)
{
TopMenu hTopMenu = TopMenu.FromHandle(aTopMenu);
if (hTopMenu == g_hAdminMenu)
return;
g_hAdminMenu = hTopMenu;
TopMenuObject hCategory = g_hAdminMenu.FindCategory("ServerCommands");
if (hCategory != INVALID_TOPMENUOBJECT)
g_hAdminMenu.AddItem("AdminStart", StartNoZoomCallback, hCategory, "start_nozoom", ADMFLAG_ROOT);
}
public void StartNoZoomCallback(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
case TopMenuAction_DrawOption:
{
if(g_bNZ || g_bAdminStart) sBuffer[0] = ITEMDRAW_DISABLED;
}
case TopMenuAction_DisplayOption:
{
FormatEx(sBuffer, maxlength, "Начать битву без прицелов");
}
case TopMenuAction_SelectOption:
{
g_bAdminStart = true;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "next round alert");
}
}
}
public void OnMapStart()
{
g_bNZ = g_bAdminStart = false;
g_iRemainRounds = g_iCooldown;
}
public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_PreThink, OnPreThink);
if(g_bDisableDeagle) SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
}
public void OnClientDisconnect(int client)
{
if(g_bVoted[client])
{
g_bVoted[client] = false;
--g_iVotes;
}
}
public Action OnPreThink(int client)
{
if(g_bNZ) SetNoScope(GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"));
return Plugin_Continue;
}
public void OnPlayerDeath(Event hEvent, const char[] name, bool dontBroadcast)
{
if(g_bPrintKills && !g_bNZ)
{
int client = GetClientOfUserId(hEvent.GetInt("userid"));
int attacker = GetClientOfUserId(hEvent.GetInt("attacker"));
if (attacker > 0 && IsClientInGame(attacker))
{
if (attacker != client)
{
char sWeapon[32];
GetEventString(hEvent, "weapon", sWeapon, sizeof(sWeapon));
if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && StrContains(sWeapon, "awp", false) != -1)
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "nozoom kill", attacker, client);
}
}
}
}
public Action OnVoteCmd(int client, int args)
{
if(client)
{
if(!g_bNZ)
{
int need = RoundToCeil(float(GetClientCount(true)) * (float(g_iPercent) / 100.0));
if(!g_bAdminStart && g_iVotes < need)
{
int rounds = GameRules_GetProp("m_totalRoundsPlayed");
if(g_iRemainRounds <= rounds)
{
if(!g_bVoted[client])
{
++g_iVotes;
g_bVoted[client] = true;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "vote msg", client, g_iVotes, need);
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "already voted");
if(g_iVotes >= need) CGOPrintToChatAll("%s{default} %t", g_sPrefix, "next round alert");
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "cooldown alert", g_iRemainRounds - rounds);
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "enough votes");
}
else CGOPrintToChat(client, "%s{default} %t", g_sPrefix, "already happening");
}
return Plugin_Handled;
}
public void OnRoundStart(Event hEvent, const char[] name, bool dontBroadcast)
{
if(!g_bNZ)
{
if(g_bAdminStart || g_iVotes >= RoundToCeil(float(GetClientCount(true)) * (float(g_iPercent) / 100.0)))
{
g_bNZ = true;
g_bAdminStart = false;
}
if (g_bPrintAdv && !g_bNZ && g_iRemainRounds <= GameRules_GetProp("m_totalRoundsPlayed"))
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "advertisement");
}
if(g_iNZRounds >= g_iRounds)
{
g_bNZ = false;
g_iNZRounds = g_iVotes = 0;
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
g_bVoted = false;
}
}
g_iRemainRounds = GameRules_GetProp("m_totalRoundsPlayed") + g_iCooldown;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "battle end");
}
if(g_bNZ)
{
++g_iNZRounds;
CGOPrintToChatAll("%s{default} %t", g_sPrefix, "round start alert");
if(g_bDisableDeagle)
{
char sWeapon[64];
int iEnt = GetMaxEntities();
for (int i = 1; i < iEnt; ++i)
{
if (IsValidEdict(i) && IsValidEntity(i))
{
GetEdictClassname(i, sWeapon, sizeof(sWeapon));
if (strcmp(sWeapon[7], "deagle") == 0) RemoveEdict(i);
}
}
}
}
}
void SetNoScope(int weapon)
{
if (IsValidEdict(weapon))
{
char sWeapon[32];
GetEdictClassname(weapon, sWeapon, sizeof(sWeapon));
if(strcmp(sWeapon[7], "awp") == 0)
SetEntDataFloat(weapon, m_flNextSecondaryAttack, GetGameTime() + 2.0);
}
}
public Action OnWeaponCanUse(int client, int weapon)
{
char sWeapon[32];
GetEdictClassname(weapon, sWeapon, sizeof(sWeapon));
if(g_bNZ && strcmp(sWeapon[7], "deagle") == 0)
return Plugin_Handled;
return Plugin_Continue;
}
Последнее редактирование: