Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Добавление рандомных звуков к готовому плагину
ORdli Дата: Вторник, 25.01.2022, 21:26:51 | Сообщение # 1
Сообщений: 11
Репутация: 0 [ +/- ]
Имеется готовый рабочий плагин который проигрывает звук при убийстве с ножа, но я бы хотел сделать так что бы звуков было несколько а не 1, что мне нужно для этого добавить и с какой строки? помогите кто чем может.

Вот плагин.

#include <sourcemod>
#include <sdktools>

public Plugin:myinfo =
{
name = "Knife Kill Sound",
version = "1.0",
}

public OnPluginStart()
{
HookEvent("player_death", Death);
}

public OnMapStart()
{
AddFileToDownloadsTable("sound/your_sound.mp3");
AddToStringTable(FindStringTable("soundprecache"), "*your_sound.mp3");
}

public Death(Handle:event, const String:name[], bool:dontBroadcast)
{
decl String:str[32];
GetEventString(event, "weapon", str, sizeof(str));
if(strcmp(str, "knife", true) == 0)
{
decl clients[MaxClients];
new total = 0;

for (new i=1; i<=MaxClients; i++)
{
if (IsClientInGame(i))
{
clients[total++] = i;
}
}
EmitSound(clients, total, "*your_sound.mp3");
}
}


Сообщение отредактировал ORdli - Вторник, 25.01.2022, 21:27:39
 
_wS_ Дата: Среда, 26.01.2022, 02:22:38 | Сообщение # 2
Код
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_sound>
#include <sdktools_stringtables>

public Plugin myinfo =
{
    name = "Knife Kill Sound",
    version = "1.0"
};

#define SOUND_LENGTH 128

ArrayList g_hAr;
int g_iCount = 0;
int g_iCurrent = -1;

int g_soundprecache;
bool g_bCSGO;

public void OnPluginStart()
{
    if((g_soundprecache = FindStringTable("soundprecache")) == INVALID_STRING_TABLE) {
        SetFailState("!soundprecache");
    }
    
    g_bCSGO = GetEngineVersion() == Engine_CSGO;
    g_hAr   = new ArrayList(ByteCountToCells(SOUND_LENGTH));
    
    /////
    
    // Звуки без "sound/" и без *:
    AddSound("folder/sound1.mp3");
    AddSound("folder/sound2.mp3");
    
    /////
    
    if (g_iCount < 1) {
        SetFailState("!g_iCount");
    }
    
    HookEvent("player_death", Event_player_death, EventHookMode_Post);
}

static void AddSound(const char[] sound)
{
    if (g_bCSGO)
    {
        char s[SOUND_LENGTH];
        FormatEx(s, sizeof(s), "*%s", sound);
        g_hAr.PushString(s);
    }
    else{
        g_hAr.PushString(sound);
    }
    g_iCount++;
}

public void OnMapStart()
{
    int index = g_bCSGO ? 1 : 0;
    
    char sound[SOUND_LENGTH];
    char path [SOUND_LENGTH + 8];
    
    for (int i = 0; i < g_iCount; i++)
    {
        g_hAr.GetString(i, sound, sizeof(sound));
        AddToStringTable(g_soundprecache, sound);
        
        FormatEx(path, sizeof(path), "sound/%s", sound[index]);
        AddFileToDownloadsTable(path);
    }
}

void Event_player_death(Event event, const char[] name, bool dontBroadcast)
{
    char w[32];
    event.GetString("weapon", w, sizeof(w));
    
    if (w[0] && (strcmp(w, "bayonet") == 0 || StrContains(w, "knife") != -1))
    {
        if (++g_iCurrent >= g_iCount) {
            g_iCurrent = 0;
        }
        
        char sound[SOUND_LENGTH];
        g_hAr.GetString(g_iCurrent, sound, sizeof(sound));
        
        EmitSoundToAll(sound);
    }
}

AddSound
 
ORdli Дата: Среда, 26.01.2022, 06:10:24 | Сообщение # 3
Сообщений: 11
Репутация: 0 [ +/- ]
Хотел прояснить что я в создании плагинов вообще не шарю, всегда просто редактировал лишь пути и названия файлов, так что заранее пардон.
такой вот вопрос еще а можно на другую игру этот плагин перенести, раньше кто-то делал из друзей давно, но сейчас игра обновилась и ничего не работает, может как то по другому надо делать, просто не понимаю в этом, игра Zombie Panic Source, нужно сделать также звук на убийство оружием, любым, всего один звук, раньше использовал на старых версиях игры плагин из кс го, который кинул выше и всё работало, сейчас плагин этот тоже работает, звуки скачиваются, в Plugins list тоже всё ок, но прикол в том что после убийства ничего не происходит, звук просто не проигрывается, не каких ошибок в консоли нет, лишь надпись события по типу Player1 killed The Player2 with crowbar. сами разработчики не занимаются Sourcemod'ом по их же словам, и направляют на форумы соурсмода за помощью.


Сообщение отредактировал ORdli - Среда, 26.01.2022, 06:17:50
 
_wS_ Дата: Среда, 26.01.2022, 07:06:57 | Сообщение # 4
Ничего не знаю про Zombie Panic Source.
Судя по символу * перед именем звука, я подумал это для csgo.

Если раньше работали "*такие_звуки.mp3", то попробуй вместо этого:
Код
g_bCSGO = GetEngineVersion() == Engine_CSGO;


Сделать это:
Код
g_bCSGO = true;


Попробуй после:
Код
event.GetString("weapon", w, sizeof(w));


Добавить для теста:
Код
PrintToChatAll("weapon = '%s'", w);


Может там не "knife", а что-то другое (в чат будет всем писать имя оружия после каждой смерти).

Ещё можешь попробовать удалить всё, что связано с g_soundprecache, и это:
Код
AddToStringTable(g_soundprecache, sound);


Заменить на это:
Код
PrecacheSound(sound);
 
ORdli Дата: Среда, 26.01.2022, 07:30:55 | Сообщение # 5
Сообщений: 11
Репутация: 0 [ +/- ]
Да это не поможет, мне вообще хотелось бы это для Zombie Panic source сделать, изначально тему просто не так создал, а тот плагин просто который я выше кинул подходит абсолютно для всех игр, он универсальный, в Half-life 2 deathmatch проверял работает, и в большинстве модов на движке Source, (Проверено) просто вместо knife меняю названия оружия например на rpg или crowbar, и пишу названия звукового файла, этот плагин и сейчас работает для Half-life 2 Deathmatch Хотя сделан якобы под кс го, но вот в zombie panic проблема полная, там еще говорят плагины теперь на AngelScript, может мне у кого то спросить кто в AngelScript Разбирается? возможно вообще создать звук убийства на AngelScript, по типу того что я скинул? просто играл на серверах и там были рабочие плагины на AngelScript, ладно буду дальше искать, спасибо что хотя бы ответили.
 
  • Страница 1 из 1
  • 1
Поиск: