А при выходе из режима призрака как сделать чтобы все наместо возврашалось?
native SetClientListeningFlags(client, flags)
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>
new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...},
bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};
public OnPluginStart()
{
AddCommandListener(OnCommandStart, "ghost");
}
public OnClientPutInServer(iClient)
{
g_bIsClientGhost[iClient] = false;
g_bIsClientMuted[iClient] = false;
}
public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
g_bIsClientMuted[iClient] = bMuteState;
}
public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
if (iClient)
{
Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL);
}
}
stock Function_SetClientListeningFlags(iClient, iFlags)
{
// думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
// в том смысле, что через GetClientListengFlags или нет, так что так пока
if (g_bIsClientMuted[iClient] == false)
{
SetClientListeningFlags(iClient, iFlags);
}
}
А как сделать возврат голоса в конце раунда?Заранее спасибо)native SetClientListeningFlags(client, flags)
--- Добавлено позже ---
--- Добавлено позже ---PHP:#include <sourcemod> #include <basecomm> #include <sdktools_voice> new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...}, bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...}; public OnPluginStart() { AddCommandListener(OnCommandStart, "ghost"); } public OnClientPutInServer(iClient) { g_bIsClientGhost[iClient] = false; g_bIsClientMuted[iClient] = false; } public BaseComm_OnClientMute(iClient, bool:bMuteState) { g_bIsClientMuted[iClient] = bMuteState; } public Action:OnCommandStart(iClient, const String:szCommand[], iArgs) { if (iClient) { Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL); } } stock Function_SetClientListeningFlags(iClient, iFlags) { // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает // в том смысле, что через GetClientListengFlags или нет, так что так пока if (g_bIsClientMuted[iClient] == false) { SetClientListeningFlags(iClient, iFlags); } }
а вообще да, с такими вопросами в запросы или в заказы
голос должен вернуться, если клиент пропишет снова ghost, по крайней мере такая идеяА как сделать возврат голоса в конце раунда?Заранее спасибо)
Да когда снова прописывает возврашается, но можно Авто возвращение в начале нового раунда как нибудь сделатьголос должен вернуться, если клиент пропишет снова ghost, по крайней мере такая идея
в конце раунда вернет голосДа когда снова прописывает возврашается, но можно Авто возвращение в начале нового раунда как нибудь сделать
--- Добавлено позже ---
И чтобы нельзя было со второго ввода включать голос а только в начале след раунда он автоматом включался
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>
new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...},
bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};
public OnPluginStart()
{
HookEvent("round_end", Event_OnRoundEnd);
AddCommandListener(OnCommandStart, "ghost");
}
public OnClientPutInServer(iClient)
{
g_bIsClientGhost[iClient] = false;
g_bIsClientMuted[iClient] = false;
}
public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
g_bIsClientMuted[iClient] = bMuteState;
}
public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
for (new iClient = 1; iClient <= MaxClients; ++iClient)
{
if (IsClientInGame(iClient) == true)
{
if (IsFakeClient(iClient) == false)
{
Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
g_bIsClientGhost[iClient] = false;
}
}
}
}
public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
if (iClient)
{
Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL);
}
}
stock Function_SetClientListeningFlags(iClient, iFlags)
{
// думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
// в том смысле, что через GetClientListengFlags или нет, так что так пока
if (g_bIsClientMuted[iClient] == false)
{
SetClientListeningFlags(iClient, iFlags);
}
}
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>
new bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};
public OnPluginStart()
{
HookEvent("round_end", Event_OnRoundEnd);
AddCommandListener(OnCommandStart, "ghost");
}
public OnClientPutInServer(iClient)
{
g_bIsClientMuted[iClient] = false;
}
public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
g_bIsClientMuted[iClient] = bMuteState;
}
public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
for (new iClient = 1; iClient <= MaxClients; ++iClient)
{
if (IsClientInGame(iClient) == true)
{
if (IsFakeClient(iClient) == false)
{
Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
}
}
}
}
public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
if (iClient)
{
Function_SetClientListeningFlags(iClient, VOICE_MUTED);
}
}
stock Function_SetClientListeningFlags(iClient, iFlags)
{
// думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
// в том смысле, что через GetClientListengFlags или нет, так что так пока
if (g_bIsClientMuted[iClient] == false)
{
SetClientListeningFlags(iClient, iFlags);
}
}
хотя, глянул плагин, лучше туда вставить этот код)) а иначе плохо получается, очень
можешь попробоватьМожешь тогда вставить?
--- Добавлено позже ---
#include <sourcemod>
#include <basecomm>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#pragma semicolon 1
#define PLUGIN_VERSION "1.3"
new blockCommand;
new g_Collision;
new bool:g_IsGhost[MAXPLAYERS+1];
public Plugin:myinfo =
{
name = "Redie RUS",
author = "MeoW,adapted-AcDc ",
description = "Return as a ghost after you died.",
version = PLUGIN_VERSION,
url = "http://www.trident-gaming.net/"
};
// ---
new bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};
// ---
public OnPluginStart()
{
HookEvent("round_start", Event_Round_Start, EventHookMode_Pre);
HookEvent("player_spawn", Event_Player_Spawn);
RegConsoleCmd("sm_ghost", Command_Ghost);
CreateConVar("sm_redie_version", PLUGIN_VERSION, "Redie Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
g_Collision = FindSendPropInfo("CBaseEntity", "m_CollisionGroup");
// ---
HookEvent("round_end", Event_OnRoundEnd);
// ---
}
// ---
public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
for (new iClient = 1; iClient <= MaxClients; ++iClient)
{
if (IsClientInGame(iClient) == true)
{
if (IsFakeClient(iClient) == false)
{
Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
}
}
}
blockCommand = false;
}
public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
g_bIsClientMuted[iClient] = bMuteState;
}
// ---
public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
// ---
g_bIsClientMuted[client] = false;
// ---
}
public OnClientPostAdminCheck(client)
{
g_IsGhost[client] = false;
}
public Action:Event_Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
blockCommand = true;
}
public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if(g_IsGhost[client])
{
SetEntProp(client, Prop_Send, "m_nHitboxSet", 2);
g_IsGhost[client] = false;
}
else
{
SetEntProp(client, Prop_Send, "m_nHitboxSet", 0);
}
}
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
if(GetEntProp(client, Prop_Send, "m_lifeState") == 1)
{
buttons &= ~IN_USE;
}
return Plugin_Continue;
}
public Action:Command_Ghost(client, args)
{
// ---
if (!client) return Plugin_Handled;
// ---
if (blockCommand)
{
if (!IsPlayerAlive(client))
{
if (GetClientTeam(client) > 1)
{
g_IsGhost[client] = true;
CS_RespawnPlayer(client);
new weaponIndex;
for (new i = 0; i <= 3; i++)
{
if ((weaponIndex = GetPlayerWeaponSlot(client, i)) != -1)
{
RemovePlayerItem(client, weaponIndex);
RemoveEdict(weaponIndex);
}
}
SetEntProp(client, Prop_Send, "m_lifeState", 1);
SetEntData(client, g_Collision, 2, 4, true);
PrintToChat(client, " \x04[\x03Ghost\x04] \x01Ты теперь призрак.");
// ---
Function_SetClientListeningFlags(client, VOICE_MUTED);
// ---
}
else
{
PrintToChat(client, " \x04[\x03Ghost\x04] \x01Вы должны быть в Команде.");
}
}
else
{
PrintToChat(client, " \x04[\x03Ghost\x04] \x01Ты умереть чтобы стать призраком.");
}
}
else
{
PrintToChat(client, " \x04[\x03Ghost\x04] \x01Слишком поздно, дождитесь нового раунда.");
}
return Plugin_Handled;
}
public Action:OnWeaponCanUse(client, weapon)
{
if(GetEntProp(client, Prop_Send, "m_lifeState") == 1)
return Plugin_Handled;
return Plugin_Continue;
}
// ---
stock Function_SetClientListeningFlags(iClient, iFlags)
{
if (g_bIsClientMuted[iClient] == false)
{
SetClientListeningFlags(iClient, iFlags);
}
}
// ---
Все работает но в чате вот такможешь попробовать
а сам как думаешь?Изза кодировки чтоли?