babka68
Участник
- Сообщения
- 2,124
- Реакции
- 956
@Пьяный , @TRUE DI , @MichaikKratos
Для CSS OB,но по сути должно и на cs go работать.
Установка:
1. Поместить VIP_JoinSound.smx по пути /addons/sourcemod/plugins/vip
2. Пройти по пути /addons/sourcemod/data/vip/cfg и прописать в файл groups.ini
3. Положить сам звук по выше указанному пути или же создать свои директории
4. Обновить Fastdll и перезапустить сервер.
P.S Ради интереса разбирал плагин и комментировал
Для CSS OB,но по сути должно и на cs go работать.
Установка:
1. Поместить VIP_JoinSound.smx по пути /addons/sourcemod/plugins/vip
2. Пройти по пути /addons/sourcemod/data/vip/cfg и прописать в файл groups.ini
C-подобный:
"JoinSound" "vip/joinsound/vip1.mp3" // Путь к звуку без указания папки sound!
4. Обновить Fastdll и перезапустить сервер.
P.S Ради интереса разбирал плагин и комментировал

[VIP] Join Sound.sp:
#pragma semicolon 1 //;
#include <sdktools_stringtables>
#include <sdktools_sound>
#include <vip_core> // Подключаем библиотеку VIP
#pragma newdecls required // Плагин написан на новом синтаксисе
public Plugin myinfo =
{
name = "[VIP] Join Sound",
author = "Drumanid, babka68",
version = "1.1",
url = "http://vk.com/drumanid, tmb-css.ru",
};
static const char g_sFeature[] = "JoinSound";
// static const применяется, если значение в этой переменной/массиве не будет изменяться в нашем случае JoinSound
bool g_bUse[MAXPLAYERS +1];
public void OnPluginStart() // Старт плагина
{
// VIP_IsVIPLoaded Добавляет новую VIP-функцию, VIP_OnVIPLoaded Вызывается когда VIP-функция была зарегистрирована.
if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();
}
public void OnMapStart() // Старт карты
{
char sBuffer[2][128]; // Строки с заданными размерами.
// BuildPath Строит путь относительно папки SourceMod
BuildPath(Path_SM, sBuffer[0], sizeof(sBuffer[]), "data/vip/cfg/groups.ini");
KeyValues kv = new KeyValues("VIP_GROUPS"); // Создаем объект типа KeyValues
/* SetFailState Заставляет плагин перейти в состояние сбоя.
Будет выдана ошибка, и плагин будет приостановлен до тех пор, пока он не будет выгружен или перезагружен.
ImportFromFile - Загружает KV структуру из файла */
if(!kv.ImportFromFile(sBuffer[0])) SetFailState("Not found file: %s", sBuffer[0]);
if(kv.GotoFirstSubKey()) // GotoFirstSubKey - Переходит к первому ключу внутри текущей секции.
{
do
{
kv.GetString("JoinSound", sBuffer[0], sizeof(sBuffer[])); // GetString - Получает строку по ключу
if(sBuffer[0][0])
{
FormatEx(sBuffer[1], sizeof(sBuffer[]), "sound/%s", sBuffer[0]);
// FormatEx Форматирует строку в соответствии с правилами форматирования SourceMod
AddFileToDownloadsTable(sBuffer[1]);
/* AddFileToDownloadsTable Добавляет файл в таблицу сетевых строк загружаемых файлов.
Это заставляет клиента загружать файл, если он еще не установлен.*/
PrecacheSound(sBuffer[0], true); // Предварительно кэширует заданный звук.
}
}
while(kv.GotoNextKey()); // GotoNextKey Переходит к следующему ключу в секции на уровень выше.
}
delete kv; // Удаляем kv
}
public void OnPluginEnd() // OnPluginEnd Вызывается, когда плагин собирается выгрузиться.
{
if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
/* CanTestFeatures Возвращает, будет ли "GetFeatureStatus" работать.
GetFeatureStatus Возвращает, существует ли функция, и если да, то можно ли ее использовать.*/
{
VIP_UnregisterFeature(g_sFeature); // VIP_UnregisterFeature Удаляет все VIP-функции зарегистрированные плагином
}
}
public void VIP_OnVIPLoaded() // VIP_OnVIPLoaded Вызывается когда VIP-функция была зарегистрирована.
{
VIP_RegisterFeature(g_sFeature, STRING); // VIP_RegisterFeature Удаляет VIP-функцию.
}
public void VIP_OnVIPClientLoaded(int iClient) // VIP_OnVIPClientLoaded Вызывается когда игрок получает VIP-статус.
{
if(IsClientInGame(iClient) && g_bUse[iClient] && VIP_IsClientFeatureUse(iClient, g_sFeature))
/* IsClientInGame в игре ли игрок, VIP_IsClientFeatureUse Получает целочисленное значение параметра VIP-функции у игрока.*/
{
char sBuffer[2][128];
VIP_GetClientFeatureString(iClient, g_sFeature, sBuffer[0], sizeof(sBuffer[]));
// VIP_GetClientFeatureString Выдает игроку VIP-функцию и устанавливает её значение (на время сессии).
EmitSoundToAll(sBuffer[0], SOUND_FROM_LOCAL_PLAYER, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_NOFLAGS, 0.4);
//EmitSoundToAll Обертка для выдачи звука всем клиентам.
g_bUse[iClient] = false;
}
}
public void OnClientDisconnect(int iClient) // OnClientDisconnect Вызывается, когда клиент отключается от сервера.
{
g_bUse[iClient] = true;
}
Вложения
Последнее редактирование: