Всем привет. В плагине не предусмотрено внутриигровое меню, все изменения вносятся в конфиге (координаты), но я в них ничего не понимаю. Нужно исправить баг на обновленном de_dust2 (который вышел сегодня). Проблема в том, что теперь на Т-респе машина выше чем была и забравшись на неё можно перепрыгнуть забор (который ограничивал плант б при малом количестве игроков). Нужно немного поднять забор, чтобы на него нельзя было запрыгнуть (подсадиться не смогут - сквозь своих проходят), но и под ним чтобы слишком большой дыры не было (иначе под ним пролезут).
Тут код, но какая часть конкретно отвечает за забор рядом с машиной сказать не могу - не знаю, подскажите как определить и я уточню этот момент
#include <sourcemod>
#include <colors>
#include <sdktools>
#define PLUGIN_VERSION "1.1fix"
#pragma newdecls required
ArrayList props;
Handle g_AutoReload;
Handle g_Message;
public Plugin myinfo =
{
name = "AbNeR Map Restrictions",
author = "AbNeR_CSS",
description = "Area restrictions in maps.",
version = PLUGIN_VERSION,
url = "TecnoHard Fórum | O melhor fórum brasileiro para suporte ao CS:GO e CS:S"
}
public void OnPluginStart()
{
AutoExecConfig(true, "abner_maprestrictions");
g_AutoReload = CreateConVar("abner_maprestrictions_autorefresh", "0", "Refresh props when player joins a team our disconnect.");
g_Message = CreateConVar("abner_maprestrictions_msgs", "1", "Show message when round starts");
props = new ArrayList();
HookEvent("round_start", EventRoundStart);
HookEvent("player_team", PlayerJoinTeam);
HookEvent("player_disconnect", PlayerJoinTeam);
RegAdminCmd("refreshprops", CmdReloadProps, ADMFLAG_ROOT);
CreateConVar("abner_maprestrictions_version", PLUGIN_VERSION, "Plugin version", FCVAR_REPLICATED);
}
public Action PlayerJoinTeam(Handle ev, char[] name, bool dbroad){
if(GetConVarInt(g_AutoReload) == 1)
CreateTimer(0.1, ReloadPropsTime);
}
public Action CmdReloadProps(int client, int args){
ReloadProps();
}
public Action ReloadPropsTime(Handle time){
ReloadProps();
}
public Action EventRoundStart(Handle ev, char[] name, bool db){
ReloadProps();
if(GetConVarInt(g_Message) != 1)
return Plugin_Continue;
PrintMessage();
return Plugin_Continue;
}
void ReloadProps(){
DeleteAllProps();
CreateProps();
}
void DeleteAllProps(){
for(int i = 0;i < props.Length;i++){
int Ent = props.Get(i);
if(IsValidEntity(Ent))
AcceptEntityInput(props.Get(i), "kill");
}
props.Clear();
}
void PrintMessage(){
char mapname[100];
GetCurrentMap(mapname, sizeof(mapname))
int PlayerCount = GetTeamClientCount(3) + GetTeamClientCount(2);
KeyValues kv = new KeyValues("Messages");
char path[PLATFORM_MAX_PATH];
BuildPath(Path_SM, path, sizeof(path), "data/abner_maprestrictions/%s.ini", mapname);
if(!FileToKeyValues(kv, path)) return;
if(kv.JumpToKey("Messages") && kv.GotoFirstSubKey()){
do
{
char Message[500];
int MoreThan = kv.GetNum("morethan", 0);
int LessThan = kv.GetNum("lessthan", 0);
kv.GetString("message", Message, sizeof(Message));
if(!StrEqual(Message, "") && PlayerCount > MoreThan && (LessThan == 0 || PlayerCount < LessThan))
{
CPrintToChatAll("{green}[V.P arena]{default} {lightgreen}%d{default}x{lightgreen}%d {default}- {green}%s", GetTeamClientCount(2), GetTeamClientCount(3), Message);
}
}while(kv.GotoNextKey());
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
delete kv;
}
void CreateProps(){
char mapname[100];
GetCurrentMap(mapname, sizeof(mapname))
props.Clear();
int PlayerCount = GetTeamClientCount(3) + GetTeamClientCount(2);
KeyValues kv = new KeyValues("Positions");
char path[PLATFORM_MAX_PATH];
BuildPath(Path_SM, path, sizeof(path), "data/abner_maprestrictions/%s.ini", mapname);
if(!FileToKeyValues(kv, path)) return;
if(kv.JumpToKey("Positions") && kv.GotoFirstSubKey())
{
do
{
char model[PLATFORM_MAX_PATH];
kv.GetString("model", model, sizeof(model));
int MoreThan = kv.GetNum("morethan", 0);
int LessThan = kv.GetNum("lessthan", 0);
if(kv.GotoFirstSubKey())
{
do
{
float origin[3];
float angles[3];
kv.GetVector("origin", origin);
kv.GetVector("angles", angles);
if(PlayerCount > MoreThan && (LessThan == 0 || PlayerCount < LessThan))
{
if(PrecacheModel(model,true) == 0)
SetFailState("[AbNeR MapRestrictions] - Error precaching model '%s'", model);
int Ent = CreateEntityByName("prop_physics_override");
DispatchKeyValue(Ent, "physdamagescale", "0.0");
DispatchKeyValue(Ent, "model", model);
DispatchSpawn(Ent);
SetEntityMoveType(Ent, MOVETYPE_PUSH);
TeleportEntity(Ent, origin, angles, NULL_VECTOR);
props.Push(Ent);
}
}while(kv.GotoNextKey());
kv.GoBack();
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
}while(kv.GotoNextKey());
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
delete kv;
}
#include <colors>
#include <sdktools>
#define PLUGIN_VERSION "1.1fix"
#pragma newdecls required
ArrayList props;
Handle g_AutoReload;
Handle g_Message;
public Plugin myinfo =
{
name = "AbNeR Map Restrictions",
author = "AbNeR_CSS",
description = "Area restrictions in maps.",
version = PLUGIN_VERSION,
url = "TecnoHard Fórum | O melhor fórum brasileiro para suporte ao CS:GO e CS:S"
}
public void OnPluginStart()
{
AutoExecConfig(true, "abner_maprestrictions");
g_AutoReload = CreateConVar("abner_maprestrictions_autorefresh", "0", "Refresh props when player joins a team our disconnect.");
g_Message = CreateConVar("abner_maprestrictions_msgs", "1", "Show message when round starts");
props = new ArrayList();
HookEvent("round_start", EventRoundStart);
HookEvent("player_team", PlayerJoinTeam);
HookEvent("player_disconnect", PlayerJoinTeam);
RegAdminCmd("refreshprops", CmdReloadProps, ADMFLAG_ROOT);
CreateConVar("abner_maprestrictions_version", PLUGIN_VERSION, "Plugin version", FCVAR_REPLICATED);
}
public Action PlayerJoinTeam(Handle ev, char[] name, bool dbroad){
if(GetConVarInt(g_AutoReload) == 1)
CreateTimer(0.1, ReloadPropsTime);
}
public Action CmdReloadProps(int client, int args){
ReloadProps();
}
public Action ReloadPropsTime(Handle time){
ReloadProps();
}
public Action EventRoundStart(Handle ev, char[] name, bool db){
ReloadProps();
if(GetConVarInt(g_Message) != 1)
return Plugin_Continue;
PrintMessage();
return Plugin_Continue;
}
void ReloadProps(){
DeleteAllProps();
CreateProps();
}
void DeleteAllProps(){
for(int i = 0;i < props.Length;i++){
int Ent = props.Get(i);
if(IsValidEntity(Ent))
AcceptEntityInput(props.Get(i), "kill");
}
props.Clear();
}
void PrintMessage(){
char mapname[100];
GetCurrentMap(mapname, sizeof(mapname))
int PlayerCount = GetTeamClientCount(3) + GetTeamClientCount(2);
KeyValues kv = new KeyValues("Messages");
char path[PLATFORM_MAX_PATH];
BuildPath(Path_SM, path, sizeof(path), "data/abner_maprestrictions/%s.ini", mapname);
if(!FileToKeyValues(kv, path)) return;
if(kv.JumpToKey("Messages") && kv.GotoFirstSubKey()){
do
{
char Message[500];
int MoreThan = kv.GetNum("morethan", 0);
int LessThan = kv.GetNum("lessthan", 0);
kv.GetString("message", Message, sizeof(Message));
if(!StrEqual(Message, "") && PlayerCount > MoreThan && (LessThan == 0 || PlayerCount < LessThan))
{
CPrintToChatAll("{green}[V.P arena]{default} {lightgreen}%d{default}x{lightgreen}%d {default}- {green}%s", GetTeamClientCount(2), GetTeamClientCount(3), Message);
}
}while(kv.GotoNextKey());
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
delete kv;
}
void CreateProps(){
char mapname[100];
GetCurrentMap(mapname, sizeof(mapname))
props.Clear();
int PlayerCount = GetTeamClientCount(3) + GetTeamClientCount(2);
KeyValues kv = new KeyValues("Positions");
char path[PLATFORM_MAX_PATH];
BuildPath(Path_SM, path, sizeof(path), "data/abner_maprestrictions/%s.ini", mapname);
if(!FileToKeyValues(kv, path)) return;
if(kv.JumpToKey("Positions") && kv.GotoFirstSubKey())
{
do
{
char model[PLATFORM_MAX_PATH];
kv.GetString("model", model, sizeof(model));
int MoreThan = kv.GetNum("morethan", 0);
int LessThan = kv.GetNum("lessthan", 0);
if(kv.GotoFirstSubKey())
{
do
{
float origin[3];
float angles[3];
kv.GetVector("origin", origin);
kv.GetVector("angles", angles);
if(PlayerCount > MoreThan && (LessThan == 0 || PlayerCount < LessThan))
{
if(PrecacheModel(model,true) == 0)
SetFailState("[AbNeR MapRestrictions] - Error precaching model '%s'", model);
int Ent = CreateEntityByName("prop_physics_override");
DispatchKeyValue(Ent, "physdamagescale", "0.0");
DispatchKeyValue(Ent, "model", model);
DispatchSpawn(Ent);
SetEntityMoveType(Ent, MOVETYPE_PUSH);
TeleportEntity(Ent, origin, angles, NULL_VECTOR);
props.Push(Ent);
}
}while(kv.GotoNextKey());
kv.GoBack();
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
}while(kv.GotoNextKey());
}
else
{
SetFailState("[AbNeR MapRestrictions] - Corrupted %s.ini file", mapname);
}
delete kv;
}
"TrSpawn"
{
"lessthan" "10"
"model" "models/props_wasteland/exterior_fence001b.mdl"
"10"
{
"origin" "-1449.78 -860.39 179.12"
"angles" "0.00 -1.64 0.00"
}
"11"
{
"origin" "-1449.78 -610.00 179.12"
"angles" "0.00 -1.64 0.00"
}
"12"
{
"origin" "-1320.65 -485.32 179.54"
"angles" "0.00 -86.46 0.00"
}
"13"
{
"origin" "-1062.27 -470.00 179.54"
"angles" "0.00 -86.46 0.00"
}
}
{
"lessthan" "10"
"model" "models/props_wasteland/exterior_fence001b.mdl"
"10"
{
"origin" "-1449.78 -860.39 179.12"
"angles" "0.00 -1.64 0.00"
}
"11"
{
"origin" "-1449.78 -610.00 179.12"
"angles" "0.00 -1.64 0.00"
}
"12"
{
"origin" "-1320.65 -485.32 179.54"
"angles" "0.00 -86.46 0.00"
}
"13"
{
"origin" "-1062.27 -470.00 179.54"
"angles" "0.00 -86.46 0.00"
}
}