Cryengine
Участник
- Сообщения
- 8
- Реакции
- 2
Тебе это зачем?
Отдельная выдача привилегии не цепляющая Админские привилегии. К примеру для Vip игрока.
Тебе это зачем?
Проверял, на ксго чет нет звука
#include <sourcemod>
#pragma newdecls required
#pragma semicolon 1
#define PLUGIN_VERSION "1.00"
public Extension __ext_Connect =
{
name = "Connect",
file = "connect.ext",
autoload = 1,
required = 1,
}
ConVar g_hcvarKickType;
ConVar g_hcvarEnabled;
ConVar g_hcvarReason;
forward bool OnClientPreConnectEx(const char[] name, char password[255], const char[] ip, const char[] steamID, char rejectReason[255]);
public Plugin myinfo =
{
name = "Basic Reserved Slots using Connect",
author = "luki1412",
description = "Simple plugin for reserved slots using Connect",
version = PLUGIN_VERSION,
url = "https://forums.alliedmods.net/member.php?u=43109"
}
public void OnPluginStart()
{
ConVar g_hcvarVer = CreateConVar("sm_brsc_version", PLUGIN_VERSION, "Basic Reserved Slots using Connect - version cvar", FCVAR_NOTIFY|FCVAR_DONTRECORD);
g_hcvarEnabled = CreateConVar("sm_brsc_enabled", "1", "Enables/disables this plugin", FCVAR_NONE, true, 0.0, true, 1.0);
g_hcvarKickType = CreateConVar("sm_brsc_type", "1", "Who gets kicked out: 1 - Highest ping player, 2 - Longest connection time player, 3 - Random player", FCVAR_NONE, true, 1.0, true, 3.0);
g_hcvarReason = CreateConVar("sm_brsc_reason", "Kicked to make room for an admin", "Reason used when kicking players", FCVAR_NONE);
SetConVarString(g_hcvarVer, PLUGIN_VERSION);
AutoExecConfig(true, "Basic_Reserved_Slots_using_Connect");
}
public bool OnClientPreConnectEx(const char[] name, char password[255], const char[] ip, const char[] steamID, char rejectReason[255])
{
if (!GetConVarInt(g_hcvarEnabled))
{
return true;
}
if (GetClientCount(false) < MaxClients)
{
return true;
}
AdminId admin = FindAdminByIdentity(AUTHMETHOD_STEAM, steamID);
if (admin == INVALID_ADMIN_ID)
{
return true;
}
if (GetAdminFlag(admin, Admin_Reservation))
{
int target = SelectKickClient();
if (target)
{
char rReason[255];
GetConVarString(g_hcvarReason, rReason, sizeof(rReason));
KickClientEx(target, "%s", rReason);
}
}
return true;
}
int SelectKickClient()
{
float highestValue;
int highestValueId;
float highestSpecValue;
int highestSpecValueId;
bool specFound;
float value;
for (int i = 1; i <= MaxClients; i++)
{
if (!IsClientConnected(i))
{
continue;
}
int flags = GetUserFlagBits(i);
if (IsFakeClient(i) || flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION || CheckCommandAccess(i, "sm_reskick_immunity", ADMFLAG_RESERVATION, false))
{
continue;
}
value = 0.0;
if (IsClientInGame(i))
{
switch(GetConVarInt(g_hcvarKickType))
{
case 1:
{
value = GetClientAvgLatency(i, NetFlow_Outgoing);
}
case 2:
{
value = GetClientTime(i);
}
default:
{
value = GetRandomFloat(0.0, 100.0);
}
}
if (IsClientObserver(i))
{
specFound = true;
if (value > highestSpecValue)
{
highestSpecValue = value;
highestSpecValueId = i;
}
}
}
if (value >= highestValue)
{
highestValue = value;
highestValueId = i;
}
}
if (specFound)
{
return highestSpecValueId;
}
return highestValueId;
}
ПробуйтеПривет.
Кто сможет подправить плагин авто смены карт при маленьком онлайне.
Нужно, что бы он не учитывал ботов, а только активных игроков.
Можете написать плагин телепорт на спаун, пишешь команду !teleport и тебя телепортирует на спаун. Заранее Спасибо.
#include <sdktools_functions>
float g_fPos[MAXPLAYERS +1][3];
public void OnPluginStart()
{
HookEvent("player_spawn", PlayerSpawn);
RegConsoleCmd("sm_teleport", TeleportCmd);
}
public void PlayerSpawn(Event event, const char[] name, bool dbc)
{
int iClient = GetClientOfUserId(event.GetInt("userid"));
GetClientAbsOrigin(iClient, g_fPos[iClient]);
}
public Action TeleportCmd(int iClient, int iArgs)
{
if(iClient && IsPlayerAlive(iClient)) TeleportEntity(iClient, g_fPos[iClient], NULL_VECTOR, NULL_VECTOR);
return Plugin_Handled;
}
Извини за наглость, можешь еще добавить ограничение использование команды !teleportPHP:#include <sdktools_functions> float g_fPos[MAXPLAYERS +1][3]; public void OnPluginStart() { HookEvent("player_spawn", PlayerSpawn); RegConsoleCmd("sm_teleport", TeleportCmd); } public void PlayerSpawn(Event event, const char[] name, bool dbc) { int iClient = GetClientOfUserId(event.GetInt("userid")); GetClientAbsOrigin(iClient, g_fPos[iClient]); } public Action TeleportCmd(int iClient, int iArgs) { if(iClient && IsPlayerAlive(iClient)) TeleportEntity(iClient, g_fPos[iClient], NULL_VECTOR, NULL_VECTOR); return Plugin_Handled; }
Извини за наглость, можешь еще добавить ограничение использование команды !teleport
К примеру 3 раза максимум и чтобы телепортило через 3 сек. после того как написал команду, что-то на подобии как у !ztele
#include <sdktools_functions>
#define TIMER 3.0 // Время через которое телепортирует игрока
#define LIMIT 3 // Лимит использования телепорта
float g_fPos[MAXPLAYERS +1][3];
Handle g_hTimer[MAXPLAYERS +1];
int g_iLimit[MAXPLAYERS +1];
public void OnPluginStart()
{
HookEvent("player_spawn", PlayerSpawn);
RegConsoleCmd("sm_teleport", TeleportCmd);
}
public void PlayerSpawn(Event event, const char[] name, bool dbc)
{
int iClient = GetClientOfUserId(event.GetInt("userid"));
g_iLimit[iClient] = LIMIT;
GetClientAbsOrigin(iClient, g_fPos[iClient]);
}
public Action TeleportCmd(int iClient, int iArgs)
{
if(iClient && IsPlayerAlive(iClient) && g_iLimit[iClient] > 0)
{
if(g_hTimer[iClient] == null) g_hTimer[iClient] = CreateTimer(TIMER, TimerTeleport, GetClientUserId(iClient));
}
return Plugin_Handled;
}
public Action TimerTeleport(Handle hTimer, any iUserId)
{
int iClient = GetClientOfUserId(iUserId);
if(IsClientInGame(iClient) && IsPlayerAlive(iClient))
{
TeleportEntity(iClient, g_fPos[iClient], NULL_VECTOR, NULL_VECTOR);
g_iLimit[iClient]--;
}
g_hTimer[iClient] = null;
return Plugin_Stop;
}
public void OnClientDisconnect(int iClient)
{
if(g_hTimer[iClient] != null)
{
KillTimer(g_hTimer[iClient]);
g_hTimer[iClient] = null;
}
}