RU
RU
UA
EN
PL
ГЛАВНАЯ
УСЛУГИ
ПЛАГИНЫ
КАРТЫ
REBUY
SCANMON
CASSA
SALE
ФОРУМ
МОНИТОР
HELP
КОНТАКТ
Главная
/
Plugins
/
Weapon Limit 0.6
Weapon Limit 0.6
Теги:
Скачать плагины csgo
Серверные
Отличие плагина от сторонних в минимальной нагрузке на сервер в отличии от аналогов а так же в блокировке дропа оружия на клавишу USE
Компилятор: 1.10.0
+ZIP
1010
Команды:
Команды:
sm_weapon_reload перезагрузка конфига
.sma / .sp
#pragma semicolon 1 #include
#include
#include
#include
#include
#define USE_MAX_DISTANCE 660.0 #pragma newdecls required ConVar g_cvar_admin_immune = null; //int ConVar g_cvar_admin_immune_flag = null; //int public Plugin myinfo = { name = "Weapon Limit (mmcs.pro)", author = "NoTiCE, SAZONISCHE", description = "Weapon Limit", version = "0.6", url = "mmcs.pro" }; enum { Block_Players, Block_Limit }; StringMap g_Limits = null; KeyValues g_KvConfig = null; int m_hMyWeapons = -1; int user_flag; public void OnPluginStart() { LoadTranslations("weapon_limit.phrases"); g_cvar_admin_immune = CreateConVar("sm_weapon_immune", "1", "Enable/Disable Admin immunity", 0, true, 0.0, true, 1.0); g_cvar_admin_immune_flag = CreateConVar("sm_weapon_immune_flag", "a", "Flag for immunity, blank=any flag", FCVAR_NOTIFY); AutoExecConfig(true, "weapon_limit"); g_cvar_admin_immune_flag.AddChangeHook(OnCvarChanged); m_hMyWeapons = FindSendPropInfo("CCSPlayer", "m_hMyWeapons"); char[] szPath = new char[PLATFORM_MAX_PATH]; strcopy(szPath, PLATFORM_MAX_PATH, "addons/sourcemod/configs/weapon_limit.cfg"); if(!FileExists(szPath)) SetFailState("Config file '%s' is not exists", szPath); g_KvConfig = new KeyValues("weapon_limit"); if(!g_KvConfig.ImportFromFile(szPath)) SetFailState("Error parsing config file '%s'", szPath); g_Limits = new StringMap(); HookEvent("player_team", Event_PlayerTeam); for (int client = 1; client <= MaxClients; client++) { if(!IsClientInGame(client)) continue; SDKHook(client, SDKHook_WeaponCanUse, Hook_WeaponCanUse); } UpdateLimits(CalcPlayers()); } public void OnAutoConfigsBuffered() { char m_BaseFlags[32]; GetConVarString(g_cvar_admin_immune_flag, m_BaseFlags, 32); user_flag = ReadFlagString(m_BaseFlags); } public void OnCvarChanged(ConVar convar, const char[] oldValue, const char[] newValue) { if (convar == g_cvar_admin_immune_flag) { user_flag = ReadFlagString(newValue); } } public void Event_PlayerTeam(Event event, const char[] name, bool dontBroadcast) { int team = event.GetInt("team"); int oldteam = event.GetInt("oldteam"); bool disconnect = event.GetBool("disconnect"); if(team > CS_TEAM_SPECTATOR && oldteam <= CS_TEAM_SPECTATOR) UpdateLimits(CalcPlayers() + 1); else if(oldteam > CS_TEAM_SPECTATOR && (team <= CS_TEAM_SPECTATOR || disconnect)) UpdateLimits(CalcPlayers() - 1); } public void OnClientPostAdminCheck(int client) { SDKHook(client, SDKHook_WeaponCanUse, Hook_WeaponCanUse); } public Action Hook_WeaponCanUse(int client, int weapon) { if(!(g_cvar_admin_immune.BoolValue && (GetUserFlagBits(client) & user_flag))) { static char szBuffer[32]; static int iStartIdx, iLimit; static float fLastMessage[MAXPLAYERS + 1], fTime; if(IsValidEdict(weapon) && GetEdictClassname(weapon, szBuffer, 32)) { iStartIdx = strncmp(szBuffer, "weapon_", 7, false) == 0 ? 7 : 0; if((iLimit = AllowWeapon(GetClientTeam(client), szBuffer[iStartIdx])) != -1) { fTime = GetEngineTime(); if(fTime - fLastMessage[client] > 3.0) { if(iLimit == 0) { CPrintToChat(client, "%t", "weapon_blocked", szBuffer[iStartIdx]); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } else { CPrintToChat(client, "%t", "weapon_blocked2", szBuffer[iStartIdx], iLimit); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } fLastMessage[client] = fTime; } return Plugin_Handled; } } } return Plugin_Continue; } public Action CS_OnCSWeaponDrop(int client, int weaponIndex) { if(!(g_cvar_admin_immune.BoolValue && (GetUserFlagBits(client) & user_flag))) { static char szClientWeapon[32], szTargetWeapon[32]; static int iLimit, iEnt; static float fClientPos[3], fEntPos[3]; if(GetClientButtons(client) & IN_USE) { iEnt = GetClientAimTarget(client, false); if(IsValidEdict(iEnt) && GetEdictClassname(iEnt, szTargetWeapon, 32) && strncmp(szTargetWeapon, "weapon_", 7) == 0) { GetClientEyePosition(client, fClientPos); GetEntPropVector(iEnt, Prop_Send, "m_vecOrigin", fEntPos); if(GetVectorDistance(fClientPos, fEntPos) > USE_MAX_DISTANCE) return Plugin_Continue; if((iLimit = AllowWeapon(GetClientTeam(client), szTargetWeapon[7])) != -1) { if(IsValidEdict(weaponIndex) && GetEdictClassname(weaponIndex, szClientWeapon, 32) && StrEqual(szClientWeapon, szTargetWeapon)) return Plugin_Continue; if(iLimit == 0) { CPrintToChat(client, "%t", "weapon_blocked", szTargetWeapon[7]); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } else { CPrintToChat(client, "%t", "weapon_blocked2", szTargetWeapon[7], iLimit); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } return Plugin_Handled; } } } } return Plugin_Continue; } public Action CS_OnBuyCommand(int client, const char[] weapon) { if(!(g_cvar_admin_immune.BoolValue && (GetUserFlagBits(client) & user_flag))) { static int iLimit; if((iLimit = AllowWeapon(GetClientTeam(client), weapon)) != -1) { if(iLimit == 0) { CPrintToChat(client, "%t", "weapon_blocked", weapon); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } else { CPrintToChat(client, "%t", "weapon_blocked2", weapon, iLimit); ClientCommand(client, "play ui/weapon_cant_buy.wav"); } return Plugin_Handled; } } return Plugin_Continue; } int AllowWeapon(int team, const char[] weapon) { static int limit; if(!g_Limits.GetValue(weapon, limit)) return -1; return (GetTeamWeaponCount(team, weapon) >= limit) ? limit : -1; } int GetTeamWeaponCount(const int team, const char[] weapon) { int count = 0, iEnt; char[] szBuffer = new char[32]; for (int client = 1, i; client <= MaxClients; client++) { if(!IsClientInGame(client) || !IsPlayerAlive(client) || GetClientTeam(client) != team) continue; for (i = 0; i < 128; i += 4) { iEnt = GetEntDataEnt2(client, m_hMyWeapons + i); if (iEnt > MaxClients && IsValidEdict(iEnt) && GetEdictClassname(iEnt, szBuffer, 32) && StrContains(szBuffer, weapon) != -1) count++; } } return count; } int CalcPlayers() { int count = 0; for (int client = 1; client <= MaxClients; client++) { if (!IsClientInGame(client) || GetClientTeam(client) <= CS_TEAM_SPECTATOR) continue; count++; } return count; } void UpdateLimits(int players) { g_Limits.Clear(); g_KvConfig.Rewind(); if(g_KvConfig.GotoFirstSubKey()) { ArrayList array = new ArrayList(2); char[] szWeapon = new char[32]; char[] szBuffer = new char[16]; int limit, idx, temp_players, temp_limit, iStartIdx, iSize; do { g_KvConfig.GetSectionName(szWeapon, 32); iStartIdx = strncmp(szWeapon, "weapon_", 7, false) == 0 ? 7 : 0; limit = g_KvConfig.GetNum("limit", -1); if(g_KvConfig.GotoFirstSubKey()) { array.Clear(); do { g_KvConfig.GetSectionName(szBuffer, 16); if((temp_players = StringToInt(szBuffer)) == 0) continue; temp_limit = g_KvConfig.GetNum("limit", -1); idx = array.Push(temp_players); array.Set(idx, temp_limit, Block_Limit); } while (g_KvConfig.GotoNextKey()); if((iSize = array.Length) > 0) { SortADTArray(array, Sort_Descending, Sort_Integer); for (int i = 0; i < iSize; i++) { if(players >= array.Get(i)) { limit = array.Get(i, Block_Limit); break; } } } g_KvConfig.GoBack(); } if(limit != -1) g_Limits.SetValue(szWeapon[iStartIdx], limit); } while (g_KvConfig.GotoNextKey()); delete array; } }
Отправить
Загрузил
ADEPT
2020-06-03 00:55:42
0
62
Установить на сервер
Скачать
Нет оплаченых серверов
Купить сервер CS 1.6
Купить сервер CS:GO
Купить сервер CSS v34
Подключить свой VDS к панели
УКРАЇНСЬКИЙ - ПАТРІОТ [ 2013 - 2024 ] © 18+
195.211.60.213:27015
УКРАЇНА - Б А Н Д Е Р Ш Т А Т - [2000 FPS] 18+
195.211.60.213:27018
В І Л Ь Н А - У К Р А Ї Н А [ RYZEN 9 - 5.7 GHZ ]
195.211.60.213:27016
(Д) (І) (В) (О) (Ч) (А) - (В) (Л) (А) (Д) (А) | 18+
195.211.60.213:27017
Данная иконка означает, что плагин был проверен администрацией хостинга на тестовом сервере, и проблем с ним не было выявлено. Рекомендуем ставить исключительно проверенные плагины.
Плагин загружен на сервер, но проверка еще не была проведена.
CSHOST.COM.UA 2012-2024 Хостинг игровых серверов