public PlVers:__version =
{
version = 5,
filevers = "1.8.0.5928",
date = "10/30/2017",
time = "22:09:24"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
new kills[66];
new headshots[66];
new bool:enabled;
public Plugin:myinfo =
{
name = "Noscope announcement",
description = "",
author = "Grey83",
version = "1.0.0",
url = "
Steam Community :: Group :: Grey83's dedicated game servers"
};
public void:__ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("BfWrite.WriteBool");
MarkNativeAsOptional("BfWrite.WriteByte");
MarkNativeAsOptional("BfWrite.WriteChar");
MarkNativeAsOptional("BfWrite.WriteShort");
MarkNativeAsOptional("BfWrite.WriteWord");
MarkNativeAsOptional("BfWrite.WriteNum");
MarkNativeAsOptional("BfWrite.WriteFloat");
MarkNativeAsOptional("BfWrite.WriteString");
MarkNativeAsOptional("BfWrite.WriteEntity");
MarkNativeAsOptional("BfWrite.WriteAngle");
MarkNativeAsOptional("BfWrite.WriteCoord");
MarkNativeAsOptional("BfWrite.WriteVecCoord");
MarkNativeAsOptional("BfWrite.WriteVecNormal");
MarkNativeAsOptional("BfWrite.WriteAngles");
MarkNativeAsOptional("BfRead.ReadBool");
MarkNativeAsOptional("BfRead.ReadByte");
MarkNativeAsOptional("BfRead.ReadChar");
MarkNativeAsOptional("BfRead.ReadShort");
MarkNativeAsOptional("BfRead.ReadWord");
MarkNativeAsOptional("BfRead.ReadNum");
MarkNativeAsOptional("BfRead.ReadFloat");
MarkNativeAsOptional("BfRead.ReadString");
MarkNativeAsOptional("BfRead.ReadEntity");
MarkNativeAsOptional("BfRead.ReadAngle");
MarkNativeAsOptional("BfRead.ReadCoord");
MarkNativeAsOptional("BfRead.ReadVecCoord");
MarkNativeAsOptional("BfRead.ReadVecNormal");
MarkNativeAsOptional("BfRead.ReadAngles");
MarkNativeAsOptional("BfRead.GetNumBytesLeft");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
MarkNativeAsOptional("Protobuf.ReadInt");
MarkNativeAsOptional("Protobuf.ReadFloat");
MarkNativeAsOptional("Protobuf.ReadBool");
MarkNativeAsOptional("Protobuf.ReadString");
MarkNativeAsOptional("Protobuf.ReadColor");
MarkNativeAsOptional("Protobuf.ReadAngle");
MarkNativeAsOptional("Protobuf.ReadVector");
MarkNativeAsOptional("Protobuf.ReadVector2D");
MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
MarkNativeAsOptional("Protobuf.SetInt");
MarkNativeAsOptional("Protobuf.SetFloat");
MarkNativeAsOptional("Protobuf.SetBool");
MarkNativeAsOptional("Protobuf.SetString");
MarkNativeAsOptional("Protobuf.SetColor");
MarkNativeAsOptional("Protobuf.SetAngle");
MarkNativeAsOptional("Protobuf.SetVector");
MarkNativeAsOptional("Protobuf.SetVector2D");
MarkNativeAsOptional("Protobuf.AddInt");
MarkNativeAsOptional("Protobuf.AddFloat");
MarkNativeAsOptional("Protobuf.AddBool");
MarkNativeAsOptional("Protobuf.AddString");
MarkNativeAsOptional("Protobuf.AddColor");
MarkNativeAsOptional("Protobuf.AddAngle");
MarkNativeAsOptional("Protobuf.AddVector");
MarkNativeAsOptional("Protobuf.AddVector2D");
MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
MarkNativeAsOptional("Protobuf.ReadMessage");
MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
MarkNativeAsOptional("Protobuf.AddMessage");
VerifyCoreVersion();
return void:0;
}
public .2920.PrintHintTextToAll(String:format[])
{
new String:buffer[256];
new i = 1;
while (i <= MaxClients)
{
if (IsClientInGame(i))
{
SetGlobalTransTarget(i);
VFormat(buffer, 254, format, 2);
PrintHintText(i, "%s", buffer);
}
i++;
}
return 0;
}
public .2920.PrintHintTextToAll(String:format[])
{
new String:buffer[256];
new i = 1;
while (i <= MaxClients)
{
if (IsClientInGame(i))
{
SetGlobalTransTarget(i);
VFormat(buffer, 254, format, 2);
PrintHintText(i, "%s", buffer);
}
i++;
}
return 0;
}
public void:OnPluginStart()
{
new var1;
if (GetEngineVersion() != 12 && GetEngineVersion() != 13)
{
SetFailState("Plugin supports CSS and CS:GO only.");
}
LoadTranslations("core.phrases");
new ConVar:CVar;
new var2 = CreateConVar("sm_noscope_enable", "1", "0/1 - Disable/Enable messages", 256, true, 0.0, true, 1.0);
CVar = var2;
ConVar.AddChangeHook(var2, CVarChanged_Enable);
enabled = ConVar.BoolValue.get(CVar);
RegConsoleCmd("noscopes", Cmd_NoScopes, "Shows number NoScope kills and HS", 0);
HookEvent("player_death", OnPlayerDeath, EventHookMode:1);
return void:0;
}
public void:CVarChanged_Enable(ConVar:CVar, String:oldValue[], String:newValue[])
{
enabled = ConVar.BoolValue.get(CVar);
return void:0;
}
public void:OnClientConnected(client)
{
headshots[client] = 0;
kills[client] = 0;
return void:0;
}
public void:OnPlayerDeath(Event:event, String:name[], bool:dontBroadcast)
{
static victim;
static attacker;
new var5 = GetClientOfUserId(Event.GetInt(event, "attacker", 0));
attacker = var5;
new var1;
if (!.5044.IsClientValid(var5, false) || !.5044.IsClientValid(var6, true))
{
return void:0;
}
static String:buffer[32];
Event.GetString(event, "weapon", buffer, 32, "");
new var2;
if ((StrContains(buffer, "awp", true) == -1 && StrContains(buffer, "ssg08", true) == -1 && StrContains(buffer, "scout", true) == -1) && 0 < GetEntProp(attacker, PropType:1, "m_iFOV", 4, 0) < GetEntProp(attacker, PropType:1, "m_iDefaultFOV", 4, 0))
{
kills[attacker]++;
static bool:bHS;
if ((bHS = Event.GetBool(event, "headshot", false)))
{
headshots[attacker]++;
}
if (!enabled)
{
return void:0;
}
static Float:pos[2][3];
new var7 = pos;
GetClientEyePosition(attacker, var7[0][var7]);
GetClientEyePosition(victim, pos[1]);
new var8 = pos;
new var4;
if (bHS)
{
var4 = 3272;
}
else
{
var4 = 3292;
}
.2920.PrintHintTextToAll("%N убил %N без прицела%s\nс расстояния %.2fм", attacker, victim, var4, GetVectorDistance(var8[0][var8], pos[1], false) * 0.01905);
}
return void:0;
}
public Action:Cmd_NoScopes(client, args)
{
if (.5044.IsClientValid(client, false))
{
PrintToChat(client, "Без прицела: %i/%i", headshots[client], kills[client]);
}
return Action:3;
}
public .5044.IsClientValid(client, bool:allow_bots)
{
new var2;
return 0 < client <= MaxClients && IsClientInGame(client) && (allow_bots || !IsFakeClient(client));
}
public .5044.IsClientValid(client, bool:allow_bots)
{
new var2;
return 0 < client <= MaxClients && IsClientInGame(client) && (allow_bots || !IsFakeClient(client));
}