int g_iCurrentPlayersCount;
// ...
public void OnEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
g_iCurrentPlayersCount = GetClientCount(false);
}
// ...
public void OnAnotherEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
// ... iClient - кому пишем.
PrintToChat(iClient, "Кол-во игроков на сервере - %d", g_iCurrentPlayersCount);
}
Для некоторых режимов требуется сделать луч поменьше в диаметре у игрока на экране. (в данном случае режим invis для csgo)@Loco, а тебе для чего его менять-то?
В плагине нет никаких параметров для изменения его размера (не уверен, что таковые вообще в игре имеются).
Вроде всё просто выглядит с виду, но я с такой функцией не работал. Можно чуть-чуть подробней.@alexmy, если я правильно понял.
C++:int g_iCurrentPlayersCount; // ... public void OnEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast) { g_iCurrentPlayersCount = GetClientCount(false); } // ... public void OnAnotherEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast) { // ... iClient - кому пишем. PrintToChat(iClient, "Кол-во игроков на сервере - %d", g_iCurrentPlayersCount); }
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#include <gloves>
public OnPluginStart()
{
HookEvent("player_spawn", Event_team, EventHookMode_PostNoCopy);
}
public void Event_team(Event event, const char[] sEvName, bool bDontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if (!client || !IsPlayerAlive(client))
{
return;
}
CreateTimer(0.01, Timer_set, client);
}
public Action:Timer_set(Handle:hTimer, any client)
{
if(GetClientTeam(client)==3){
SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_blue.mdl");
Gloves_RegisterCustomArms(client, "models/weapons/ct_arms_sas.mdl");
}
else if(GetClientTeam(client)==2){
SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_red.mdl");
}
}
#include <sdktools_functions>
#include <gloves>
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
CreateTimer(0.0, Timer_set, event.GetInt("userid"));
}
public Action Timer_set(Handle timer, int client)
{
static team;
if(!(client = GetClientOfUserId(client)) || (team = GetClientTeam(client)) < 2) {}
else if(team == 3)
{
SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_blue.mdl");
Gloves_RegisterCustomArms(client, "models/weapons/ct_arms_sas.mdl");
}
else SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_red.mdl");
}
Сделал так, если в плагине не указать PrecacheModel, то сервер крашит при установки этой модели, в случает рук, то их просто невидно.@Loco, убери EventHookMode_PostNoCopy
и в таймер лучше передавать userid, а не индекс
#include <sdktools_functions>
#include <gloves>
#define model_ct "models/player/custom_player/ktm/rocket_raccoon_blue.mdl"
#define arms "models/player/custom_player/ktm/banana_joe_arms.mdl"
#define model_t "models/player/custom_player/ktm/rocket_raccoon_red.mdl"
public void OnPluginStart()
{
HookEvent("player_spawn", Event_Spawn);
HookEvent("player_team", Event_Spawn);
}
public OnMapStart()
{
PrecacheModel(model_ct, true);
PrecacheModel(arms, true);
PrecacheModel(model_t, true);
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
CreateTimer(0.001, Timer_set, event.GetInt("userid"));
}
public Action Timer_set(Handle timer, int client)
{
Gloves_SetArmsModel(client, arms);
if(GetClientTeam(client) == 3)
SetEntityModel(client, model_ct);
if(GetClientTeam(client) == 2)
SetEntityModel(client, model_t);
}
[ANY] SelfMute [v1.0, 2013-05-11] - AlliedModdersПодскажите кодом, игрок вводит /lmute и он никого не слышит и /lunmute и слышит.
Всех игроков сразу одной командой.. не то что надо.. я его ставил
Вот обрезанный, только-что тестил на сервере, игрок который напишет, ему не будет слышно ни чата, ни голосового чата, и сообщения игрок не будет видно другим (он типо в домике)Всех игроков сразу одной командой.. не то что надо.. я его ставил
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
public OnPluginStart()
{
RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing");
RegAdminCmd("sm_su", selfUnmute, 0, "Unmute player by typing");
}
public OnClientPutInServer(client)
{
new maxplayers = GetMaxClients();
for (new id = 1; id <= maxplayers ; id++){
if (id != client && IsClientInGame(id)){
SetListenOverride(id, client, Listen_Yes);
}
}
}
public Action:selfMute(client, args)
{
new maxplayers = GetMaxClients();
for (new id = 1; id <= maxplayers ; id++){
if (id != client && IsClientInGame(id)){
SetListenOverride(client, id, Listen_No);
}
}
}
public Action:selfUnmute(client, args)
{
new maxplayers = GetMaxClients();
for (new id = 1; id <= maxplayers ; id++){
if (id != client && IsClientInGame(id)){
SetListenOverride(client, id, Listen_Yes);
}
}
}
а по адекватнее решение есть без циклов? нашел такоеВот обрезанный, только-что тестил на сервере, игрок который напишет, ему не будет слышно ни чата, ни голосового чата, и сообщения игрок не будет видно другим (он типо в домике)
ОффтопМожешь зайти ко мне на старый сервер и протестить сам, если хочешь
PHP:#pragma semicolon 1 #include <sourcemod> #include <sdktools> public OnPluginStart() { RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing"); RegAdminCmd("sm_su", selfUnmute, 0, "Unmute player by typing"); } public OnClientPutInServer(client) { new maxplayers = GetMaxClients(); for (new id = 1; id <= maxplayers ; id++){ if (id != client && IsClientInGame(id)){ SetListenOverride(id, client, Listen_Yes); } } } public Action:selfMute(client, args) { new maxplayers = GetMaxClients(); for (new id = 1; id <= maxplayers ; id++){ if (id != client && IsClientInGame(id)){ SetListenOverride(client, id, Listen_No); } } } public Action:selfUnmute(client, args) { new maxplayers = GetMaxClients(); for (new id = 1; id <= maxplayers ; id++){ if (id != client && IsClientInGame(id)){ SetListenOverride(client, id, Listen_Yes); } } }
Подредактируй, когда сделаю уже полноценный, залью его в ресурсы.а по адекватнее решение есть без циклов? нашел такое
SetClientListeningFlags(client, SPEAK_MUTED);
SetClientListeningFlags(client, SPEAK_NORMAL);
Это что делает?
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
new sm[MAXPLAYERS+1];
new maxplayers;
#include <colors>
public OnPluginStart()
{
RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing");
}
// Фиск, ибо если не делать, и если игрок пропишет !sm, то ему все игроки размутяться, вместо того, что бы замутиться
public OnClientPutInServer(client)
{
FakeClientCommand(client, "sm_sm");
}
public Action:selfMute(client, args)
{
maxplayers = GetMaxClients();
if (sm[client])
{
for (new id = 1; id <= maxplayers; id++)
{
if (IsClientInGame(id) && id != client)
{
SetListenOverride(client, id, Listen_No);
}
}
CPrintToChat(client, "{lime}[KTM] {darkred}Вы выключили чат");
sm[client] = false;
}
else{
for (new id = 1; id <= maxplayers; id++)
{
if (IsClientInGame(id) && id != client)
{
SetListenOverride(client, id, Listen_Yes);
}
}
CPrintToChat(client, "{lime}[KTM] {green}Вы включили чат");
sm[client] = true;
}
}