Информация
Плагин включает mp_solid_teammates (проход через тиммейтов) в начале раунда на короткий срок
Настройки:
Код: Выбрать все
// Включить плагин
// -
// По умолчанию: "1.0"
// Минимальное: "0.000000"
// Максимальное: "1.000000"
sm_snb "1.0"
// Огонь по своим отключён во время спауна? Если серверная переменная ff - 0 то установите 0
// -
// По умолчанию: "1.0"
// Минимальное: "0.000000"
// Максимальное: "1.000000"
sm_snb_ff "0"
// Сколько секунд будет действовать плагин в начале раунда?
// -
// По умолчанию: "10.0"
// Минимальное: "1.000000"
sm_snb_time "10.0"
// [CSGO] Версия плагина Spawn NoBlock
// -
// По умолчанию: "1.2"
sm_snb_v "1.2"
Установка:
Скомпилировать при необходимости
Раскидать файлы плагина sourcemod по папкам
Исходный код
Код: Выбрать все
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#define COLLISION_GROUP_PUSHAWAY 17
#define VERSION "1.2"
public Plugin:myinfo =
{
name = "Spawn NoBlock for CSGO",
author = "dzej dzej",
description = "Simple spawn noblock",
version = VERSION,
url = "http://strefa-go.pl/"
};
//Value Holders
new bool:nbEnabled = false;
new Float:nbTime = 0.0;
new bool:nbFire = true;
//{ ConVars Handles & Value Holders
new Handle:g_Timer_One = INVALID_HANDLE;
new Handle:g_Timer_Two = INVALID_HANDLE;
new Handle:snbTime = INVALID_HANDLE;
new Handle:snbEnabled = INVALID_HANDLE;
new Handle:snbfreeze = INVALID_HANDLE;
new Handle:snbFire = INVALID_HANDLE;
new Handle:snbFF = INVALID_HANDLE;
public OnPluginStart() {
LoadTranslations("snb.phrases");
HookEvent( "round_start", Event_RoundStart );
snbTime = CreateConVar("sm_snb_time", "10.0", "Spawn NoBlock time.", FCVAR_PLUGIN,true,1.0);
snbEnabled = CreateConVar("sm_snb", "1.0", "plugin enable", FCVAR_PLUGIN,true,0.0,true,1.0);
CreateConVar("sm_snb_v", VERSION, "[CSGO] Spawn NoBlock version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
snbfreeze = FindConVar("mp_freezetime");
snbFF = FindConVar("mp_friendlyfire");
snbFire = CreateConVar("sm_snb_ff", "1.0", "Frendlyfire disable on spawn? If server cvar ff is 0 set it to 0", FCVAR_PLUGIN,true,0.0,true,1.0);
HookConVarChange(snbEnabled, MyCvarChange);
HookConVarChange(snbTime, MyCvarChange);
nbFire = GetConVarBool(snbFF);
RefreshSettings();
AutoExecConfig( true, "sm_spawn_noblock" );
}
//{ Settings Section
public MyCvarChange(Handle:convar, const String:oldValue[], const String:newValue[]) {
if(strcmp(oldValue, newValue)==0) return; //No change
RefreshSettings(convar);
}
RefreshSettings(Handle:convar=INVALID_HANDLE) {
decl bool:boolval;
if(convar == INVALID_HANDLE || convar == snbTime) {
nbTime = GetConVarFloat(snbTime);
if(nbTime<0.0) nbTime = 0.0;
ServerCommand("mp_solid_teammates 0");
if(convar != INVALID_HANDLE) return;
}
if(convar == INVALID_HANDLE || convar == snbEnabled) {
boolval = GetConVarBool(snbEnabled);
if(boolval != nbEnabled) {
if(boolval) { //Enable
nbEnabled = true;
TryEnablePlugin();
} else { //Disable
DisablePlugin();
nbEnabled = false;
}
}
if(convar != INVALID_HANDLE) return;
}
}
public OnMapStart() {
RefreshSettings();
TryEnablePlugin();
}
TryEnablePlugin() {
nbEnabled = true;
PrintToChatAll("\x01\x0B\x04%t", "Enabled");
}
DisablePlugin() {
nbEnabled = false;
PrintToChatAll("\x01\x0B\x04%t", "Disabled");
}
EBlock(client)
{
SetEntProp(client, Prop_Data, "m_CollisionGroup", COLLISION_GROUP_PUSHAWAY);
}
public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast )
{
PrintToChatAll("\x01\x0B\x04%t", "Enabled");
///////
//if(nbFire == true) {
//if(GetConVarBool(snbFire) == true) {
//ServerCommand("mp_friendlyfire 0");
//nbFire = true;
// } else { //Disable
// ServerCommand("mp_friendlyfire 1");
// }
// } else {
// ServerCommand("mp_friendlyfire 0");
// nbFire = true;
// }
if(GetConVarBool(snbFire) == true) {
ServerCommand("mp_friendlyfire 0");
} //else { //Disable
// return;
//}
ServerCommand("mp_solid_teammates 0");
g_Timer_One = CreateTimer(GetConVarInt(snbfreeze) * 1.0, snbFreeze);
}
public Action:snbFreeze(Handle:timer)
{
KillTimer(g_Timer_One);
g_Timer_Two = CreateTimer(GetConVarInt(snbTime) * 1.0, snbSolid);
}
public Action:snbSolid(Handle:timer)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i))
{
EBlock(i);
}
}
ServerCommand("mp_solid_teammates 1");
///////////////////////////////////////////////////////
if(GetConVarBool(snbFire) == true) {
ServerCommand("mp_friendlyfire 1");
}
PrintToChatAll("\x01\x0B\x04%t", "Disabled");
KillTimer(g_Timer_Two);
}