Официалният форум на iPlay.bg 

  • Заявка за един уникален плъгин [endsounds]

  • Искате да ви намерим определен плъгин, или пък да ви изработим такъв? Пишете тук!
Искате да ви намерим определен плъгин, или пък да ви изработим такъв? Пишете тук!
 #401501  от PuBL!c
 пон ное 07, 2016 10:45 pm
Здравейте на всички! Знам, че има такъв плъгин, но аз искам друго...

Става въпрос аз End Round Sounds

Аз не искам от всеки team да са различни звуците, а искам следното: когато свърши рунда, да се пускат звуци, но на всички един и същ.

Разбрахте ли ме? :D
Последна промяна от OciXCrom™ на пон ное 07, 2016 11:12 pm, променено общо 2 пъти. Причина: Опитай се да слагаш "по-уникални" заглавия...
 #401508  от OciXCrom™
 пон ное 07, 2016 11:11 pm
Код: Избери всички
#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define PLUGIN_VERSION "2.0"

new const g_szPrefix[] = "^4[REMusic]^1"

new Array:g_aSounds,
    g_iArraySize,
    g_iVault,
    g_msgSayText
    
new g_iBlocked[33]

enum
{
    TYPE_INVALID = 0,
    TYPE_WAV,
    TYPE_MP3
}

public plugin_init()
{
    register_plugin("Round End Music", PLUGIN_VERSION, "OciXCrom")
    register_logevent("eventRoundEnd", 2, "1=Round_End")
    register_clcmd("say /ers", "cmdMute")
    register_clcmd("say_team /ers", "cmdMute")
    g_msgSayText = get_user_msgid("SayText")
    g_iVault = nvault_open("REMusic")
}

public plugin_precache()
{
    g_aSounds = ArrayCreate(32, 1)
    fileRead()
}

public plugin_end()
    ArrayDestroy(g_aSounds)

public client_putinserver(id)
{
    g_iBlocked[id] = 0
    
    if(IsValidSteam(id))
        UseVault(id, 1)
}

public client_disconnect(id)
    if(IsValidSteam(id))
        UseVault(id, 0)

UseVault(id, iType)
{        
    new szAuthId[32], szData[2]
    get_user_authid(id, szAuthId, charsmax(szAuthId))
    
    switch(iType)
    {
        case 0:
        {
            num_to_str(g_iBlocked[id], szData, charsmax(szData))
            nvault_set(g_iVault, szAuthId, szData)
        }
        case 1:
        {
            nvault_get(g_iVault, szAuthId, szData, charsmax(szData))
            g_iBlocked[id] = str_to_num(szData)
        }
    }
}
    
public eventRoundEnd()
{
    new szSound[32], iPlayers[32], iPnum
    ArrayGetString(g_aSounds, random(g_iArraySize), szSound, charsmax(szSound))
    get_players(iPlayers, iPnum)
    
    new iType = get_sound_type(szSound)
    
    for(new i; i < iPnum; i++)
    {
        if(g_iBlocked[iPlayers[i]] == 1)
            ColorChat(iPlayers[i], "Round end sounds are turned off for you. Type ^3/ers ^1to enable them.")
        else
            client_cmd(iPlayers[i], "%s%s", iType == TYPE_WAV ? "spk " : "mp3 play sound/", szSound)
    }
}

public cmdMute(id)
{
    g_iBlocked[id] = (g_iBlocked[id] == 1) ? 0 : 1
    ColorChat(id, "Round end sounds have been ^3turned %s^1.", (g_iBlocked[id] == 1) ? "off" : "on")
    return PLUGIN_HANDLED
}

fileRead()
{
    new szConfigsName[256], szFilename[256]
    get_configsdir(szConfigsName, charsmax(szConfigsName))
    formatex(szFilename, charsmax(szFilename), "%s/EndSounds.ini", szConfigsName)
    new iFilePointer = fopen(szFilename, "rt")
    
    if(iFilePointer)
    {
        new szData[128]
        
        while(!feof(iFilePointer))
        {
            fgets(iFilePointer, szData, charsmax(szData))
            trim(szData)
            
            switch(szData[0])
            {
                case EOS, ';': continue
                default:
                {
                    switch(get_sound_type(szData))
                    {
                        case TYPE_WAV, TYPE_MP3: precache_sound(szData)
                        case TYPE_INVALID: continue
                    }
                    
                    ArrayPushString(g_aSounds, szData)
                }
            }    
        }
        
        g_iArraySize = ArraySize(g_aSounds)
        fclose(iFilePointer)
    }
}

get_sound_type(szSound[])
{
    if(contain(szSound, ".wav") != -1)
        return TYPE_WAV
    else if(contain(szSound, ".mp3") != -1)
        return TYPE_MP3
        
    return TYPE_INVALID
}

bool:IsValidSteam(id)
{
    new szAuthId[35]
    get_user_authid(id, szAuthId, charsmax(szAuthId))
    
    if(!equali(szAuthId, "STEAM_", 6) || equal(szAuthId, "STEAM_ID_LAN") || equal(szAuthId, "STEAM_ID_PENDING"))
        return false
    
    return true
}

ColorChat(const id, const szInput[], any:...)
{
    new iPlayers[32], iCount = 1
    static szMessage[191]
    vformat(szMessage, charsmax(szMessage), szInput, 3)
    format(szMessage[0], charsmax(szMessage), "%s %s", g_szPrefix, szMessage)
    
    replace_all(szMessage, charsmax(szMessage), "!g", "^4")
    replace_all(szMessage, charsmax(szMessage), "!n", "^1")
    replace_all(szMessage, charsmax(szMessage), "!t", "^3")
    
    if(id)
        iPlayers[0] = id
    else
        get_players(iPlayers, iCount, "ch")
    
    for(new i; i < iCount; i++)
    {
        if(is_user_connected(iPlayers[i]))
        {
            message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayers[i])
            write_byte(iPlayers[i])
            write_string(szMessage)
            message_end()
        }
    }
}
Звуците се добавят в configs/EndSounds.ini.
 #401510  от PuBL!c
 пон ное 07, 2016 11:16 pm
Във .mp3 формат, нали?
И btw, всеки sound се нарежда нали? В смисъл, ако напиша примерно:

1) Musicc.mp3
2) mkdev.mp3
3) etc..

Ще се редуват?

#3 Ще crash-не ли сървъра, ако добавя повече от 30 звуци?
Тоест, има ли някакъв лимит на слагането?

Иии.. :D В коя папка трябва да сложа звуците?
 #401514  от OciXCrom™
 вт ное 08, 2016 12:20 am
- Форматът може да е .mp3 и .wav.
- Няма ограничение за броя на звуци освен това от самата игра (максимален брой на ресурси (звуци, модели, спрайтове и прочие) = 512 общо)
- Не се редуват, а произволно се избират.
- Нали писах в коя папка?

Sent from my HTC Desire 610 using Tapatalk
 #401551  от PuBL!c
 вт ное 08, 2016 2:48 pm
Аз искам да се редуват, тъй като са над 50 звуци.
- Писал си във кой файл, а не във коя папка.
 #401554  от OciXCrom™
 вт ное 08, 2016 3:01 pm
Код: Избери всички
#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define PLUGIN_VERSION "2.1"

new const g_szPrefix[] = "^4[REMusic]^1"

new Array:g_aSounds,
    g_iArraySize,
    g_iVault,
    g_iSound,
    g_pRandom,
    g_msgSayText
    
new g_iBlocked[33]

enum
{
    TYPE_INVALID = 0,
    TYPE_WAV,
    TYPE_MP3
}

public plugin_init()
{
    register_plugin("Round End Music", PLUGIN_VERSION, "OciXCrom")
    register_logevent("eventRoundEnd", 2, "1=Round_End")
    register_clcmd("say /ers", "cmdMute")
    register_clcmd("say_team /ers", "cmdMute")
    g_pRandom = register_cvar("remusic_random", "0")
    g_msgSayText = get_user_msgid("SayText")
    g_iVault = nvault_open("REMusic")
}

public plugin_precache()
{
    g_aSounds = ArrayCreate(32, 1)
    fileRead()
}

public plugin_end()
    ArrayDestroy(g_aSounds)

public client_putinserver(id)
{
    g_iBlocked[id] = 0
    
    if(IsValidSteam(id))
        UseVault(id, 1)
}

public client_disconnect(id)
    if(IsValidSteam(id))
        UseVault(id, 0)

UseVault(id, iType)
{        
    new szAuthId[32], szData[2]
    get_user_authid(id, szAuthId, charsmax(szAuthId))
    
    switch(iType)
    {
        case 0:
        {
            num_to_str(g_iBlocked[id], szData, charsmax(szData))
            nvault_set(g_iVault, szAuthId, szData)
        }
        case 1:
        {
            nvault_get(g_iVault, szAuthId, szData, charsmax(szData))
            g_iBlocked[id] = str_to_num(szData)
        }
    }
}
    
public eventRoundEnd()
{
    new szSound[32], iPlayers[32], iPnum, blRandom = get_pcvar_num(g_pRandom) == 1
    ArrayGetString(g_aSounds, blRandom ? random(g_iArraySize) : g_iSound, szSound, charsmax(szSound))
    get_players(iPlayers, iPnum)
    
    new iType = get_sound_type(szSound)
    
    for(new i; i < iPnum; i++)
    {
        if(g_iBlocked[iPlayers[i]] == 1)
            ColorChat(iPlayers[i], "Round end sounds are turned off for you. Type ^3/ers ^1to enable them.")
        else
            client_cmd(iPlayers[i], "%s%s", iType == TYPE_WAV ? "spk " : "mp3 play sound/", szSound)
    }
    
    if(blRandom)
        g_iSound = g_iSound == g_iArraySize ? 0 : g_iSound + 1
}

public cmdMute(id)
{
    g_iBlocked[id] = (g_iBlocked[id] == 1) ? 0 : 1
    ColorChat(id, "Round end sounds have been ^3turned %s^1.", (g_iBlocked[id] == 1) ? "off" : "on")
    return PLUGIN_HANDLED
}

fileRead()
{
    new szConfigsName[256], szFilename[256]
    get_configsdir(szConfigsName, charsmax(szConfigsName))
    formatex(szFilename, charsmax(szFilename), "%s/EndSounds.ini", szConfigsName)
    new iFilePointer = fopen(szFilename, "rt")
    
    if(iFilePointer)
    {
        new szData[128]
        
        while(!feof(iFilePointer))
        {
            fgets(iFilePointer, szData, charsmax(szData))
            trim(szData)
            
            switch(szData[0])
            {
                case EOS, ';': continue
                default:
                {
                    switch(get_sound_type(szData))
                    {
                        case TYPE_WAV, TYPE_MP3: precache_sound(szData)
                        case TYPE_INVALID: continue
                    }
                    
                    ArrayPushString(g_aSounds, szData)
                }
            }    
        }
        
        g_iArraySize = ArraySize(g_aSounds)
        fclose(iFilePointer)
    }
}

get_sound_type(szSound[])
{
    if(contain(szSound, ".wav") != -1)
        return TYPE_WAV
    else if(contain(szSound, ".mp3") != -1)
        return TYPE_MP3
        
    return TYPE_INVALID
}

bool:IsValidSteam(id)
{
    new szAuthId[35]
    get_user_authid(id, szAuthId, charsmax(szAuthId))
    
    if(!equali(szAuthId, "STEAM_", 6) || equal(szAuthId, "STEAM_ID_LAN") || equal(szAuthId, "STEAM_ID_PENDING"))
        return false
    
    return true
}

ColorChat(const id, const szInput[], any:...)
{
    new iPlayers[32], iCount = 1
    static szMessage[191]
    vformat(szMessage, charsmax(szMessage), szInput, 3)
    format(szMessage[0], charsmax(szMessage), "%s %s", g_szPrefix, szMessage)
    
    replace_all(szMessage, charsmax(szMessage), "!g", "^4")
    replace_all(szMessage, charsmax(szMessage), "!n", "^1")
    replace_all(szMessage, charsmax(szMessage), "!t", "^3")
    
    if(id)
        iPlayers[0] = id
    else
        get_players(iPlayers, iCount, "ch")
    
    for(new i; i < iCount; i++)
    {
        if(is_user_connected(iPlayers[i]))
        {
            message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayers[i])
            write_byte(iPlayers[i])
            write_string(szMessage)
            message_end()
        }
    }
} 
Според теб какво означава наклонената черта в "configs/EndSounds.ini"? С това казваш, че не знаеш кои са основните папки в AMXModX.
 #401559  от PuBL!c
 вт ное 08, 2016 3:08 pm
Кром... да, там ще добавя звуците. Но, тези звyци от коя папка ще идват, те питам?
 #401561  от OciXCrom™
 вт ное 08, 2016 3:23 pm
Е, колко папки за звуци има? Разбира се, че всички звуци се добавят в sound папката. Ако искаш да е в друга, слагаш една наклонена черта и пишеш името ѝ, обаче и тя трябва да се намира в sound.
 #401563  от PuBL!c
 вт ное 08, 2016 5:25 pm
Значи: else
client_cmd(iPlayers, "%s%s", iType == TYPE_WAV ? "spk " : "mp3 play Dark-Gaming/sound/", szSound)

Така трябва да стане, така ли?

Добавено преди 1 час 29 минути 57 секунди:
Кром, песните не се чуват. :(
 #401572  от OciXCrom™
 вт ное 08, 2016 5:29 pm
Защо по дяволите пипаш .sma файла при положение, че плъгинът има .ini файл и песните се добавят в него?!
Код: Избери всички
pesen1.wav
pesen2.mp3
papka/blabla.mp3
Dark-Gaming/sound/pesen.wav