Вопрос с SET_TASK

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
182
Реакции
4
Привет ребята, хотел создать плагин эффектов для Хэллоуина, идея такая:
- Во время раунда должны воспроизводиться рандомные страшные звуки.

C#:
#include <amxmodx>
#include <reapi>

// Режим тестирования
#define TEST

new szSound[][]=
{
    "zombie_plague/nemesis1.wav",
    "zombie_plague/nemesis2.wav",
    "zombie_plague/survivor1.wav",
    "zombie_plague/survivor2.wav",
    "zombie_plague/thunder1.wav",
    "zombie_plague/thunder2.wav"
},i;

public plugin_init()
{
    register_plugin("Halloween Effects","1.0","Slove.");
  
    #if defined TEST
    register_clcmd("say /test", "PlayEffects");
    register_clcmd("say_team /test", "PlayEffects");
    #endif
  
    register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");
}

public client_putinserver(id)
{
    set_task(1.0, "PlayOneEffect", id);
}

public plugin_precache()
{
    for(i=0;i<sizeof(szSound);i++)
    {
        precache_sound(szSound[i]);
    }
}

public EventRoundStart()
{
    for(new id = 1;id <= get_maxplayers(); id++)
    {
        PlayEffects(id);
    }
}

public PlayEffects(id)
{
    new szRandom=random_num(0,sizeof(szSound));
    if(is_user_valid(id))
    {
        rg_send_audio(id, szSound[szRandom]);
        #if defined TEST
        client_print_color(id, print_team_default, "^1Эффект: ^4воспроизведён.");
        #endif
        set_task(20.00, "PlayEffects", id);
    }
}

public PlayOneEffect(id)
{
    new szRandom=random_num(0,sizeof(szSound));
    if(is_user_valid(id))
    {
        rg_send_audio(id, szSound[szRandom]);
        #if defined TEST
        client_print_color(id, print_team_default, "^1Эффект приветствия: ^4воспроизведён.");
        #endif
    }
}

stock bool: is_user_valid(id){
    if(!is_user_connected(id) || is_user_bot(id) || is_user_hltv(id))
        return false;
    return true;
}
Проблема в том что запускается лишь таск с одним звуком, а остальные не воспроизводятся.
В чем может быть причина?
 

Вложения

Сообщения
335
Реакции
93
Помог
2 раз(а)
С самим task вроде должно быть всё нормально.
C++:
-register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");
+RegisterHookChain(RG_CSGameRules_RestartRound, "RoundRestart", false)

-sizeof(szSound)
+charsmax(szSound)

// Здесь вы лишний раз даёте отправку для бота, хлтв, connecting, поэтому проверку лучше сделать ещё здесь.
for(new id = 1;id <= get_maxplayers(); id++)
    {
        if(is_user_valid(id)) PlayEffects(id)
    }

// Только сейчас осознал, что надо было конец через && у себя делать.
stock is_user_valid(id){
    return (!is_user_bot(id) || !is_user_hltv(id) || !is_user_connecting(id) && is_user_connected(id))
}

// Вообще без понятия как у тебя звук заработал, если вроде бы всё от корня указывается.
-rg_send_audio(id, szSound[szRandom])
+rg_send_audio(id, "sound/%s",szSound[szRandom])
 
Сообщения
182
Реакции
4
Noob_with_cheats, спасибо за подсказки, вот только при компиляции выскакивает:
error 035: argument type mismatch (argument 3)
Это сдесь:
Код:
rg_send_audio(id, "sound/%s",szSound[szRandom]);
25 Окт 2021
Noob_with_cheats, если оставить как было строку то всё нормально работает и всё воспроизводит правильно!
 
Сообщения
335
Реакции
93
Помог
2 раз(а)
SlovePRO, вы правы.

C++:
-rg_send_audio(id, "sound/%s",szSound[szRandom])

+new szText[128];
+format(szText,charsmax(szText),"sound/%s",szSound[szRandom])
+rg_send_audio(id, szText)

@Noob_with_cheats, если оставить как было строку то всё нормально работает и всё воспроизводит правильно!
Ну и хорошо. Тогда я немного ошибся, думая, что прям из корня.
 
Последнее редактирование:
Сообщения
182
Реакции
4
Noob_with_cheats,
C#:
L 10/25/2021 - 11:44:19: [AMXX] Run time error 4: index out of bounds
L 10/25/2021 - 11:44:19: [AMXX] [0] halloweeneffects.sma::PlayEffects
Что-то не нравится в rg_send_audio(id, szText);
 
Сообщения
335
Реакции
93
Помог
2 раз(а)
SlovePRO, debug сделай. Ещё ошибку я сделал. В голове другой цикл стоит, поэтому проверку такую дал.
C++:
stock is_user_valid(id){
    return (!is_user_bot(id) && !is_user_hltv(id) && !is_user_connecting(id) && is_user_connected(id))
}

Что-то не нравится в rg_send_audio(id, szText);
Если работает тот твой метод, то оставь его.
 
Сообщения
182
Реакции
4
Noob_with_cheats, всё работает, только вот сыпит в консоль:

C#:
L 10/25/2021 - 11:59:44: [AMXX] Displaying debug trace (plugin "halloweeneffects.amxx", version "1.0")
L 10/25/2021 - 11:59:44: [AMXX] Run time error 4: index out of bounds
L 10/25/2021 - 11:59:44: [AMXX]    [0] halloweeneffects.sma::PlayEffects (line 51)
Я не понимаю, вектор же правильный, на что он ругается?!
 

Вложения

Сообщения
182
Реакции
4
Limbooc, неправильно использую rg_send_audio?
Вот так?
rg_send_audio(id, szText, PITCH_NORM)
 
Сообщения
14
Реакции
6
SlovePRO,
new szRandom=random_num(0,sizeof(szSound));
->
new szRandom=random_num(0, charsmax(szSound));


+ если амхх >= 1.9, то можно сделать так
Код:
-new szText[128];
-format(szText,charsmax(szText),"sound/%s",szSound[szRandom])
-rg_send_audio(id, szText)

+rg_send_audio(id, fmt("sound/%s",szSound[szRandom]));
 
Сообщения
182
Реакции
4
Phoix, Noob_with_cheats, спасибо большое за помощь:good2:

Вот сам плагин, может кому-то пригодится!
 

Вложения

Последнее редактирование:
Сообщения
182
Реакции
4
Ах да, если есть еще идеи с улучшением плагина то пишите!
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу