Русское сообщество по скриптингу

[Jail] Приоритет при включение микро  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

[Jail] Приоритет при включение микро

Сообщение limbooc » 09 дек 2017, 14:31

Добрый день,форумчане

есть след. исходный код:
Код: Выделить всё
public FakeMeta_Voice_SetListening(iReceiver, iSender, bool:bListen)
{
    if(IsSetBit(g_iBitUserVoice, iSender) || IsSetBit(g_iBitUserAdmin, iSender) || g_iUserTeam[iSender] == 2 && IsSetBit(g_iBitUserAlive, iSender) || IsSetBit(g_iBitUserVip, iSender)) // микро
    {
        engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
        return FMRES_SUPERCEDE;
    }
    engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
    return FMRES_SUPERCEDE;
}


Можно сделать проверку чтобы при разговоре саймона у всех оффался микро

пробовал следующее:
Код: Выделить всё
public FakeMeta_Voice_SetListening(iReceiver, iSender, bool:bListen)
{
    if(iSender == g_iChiefId)
    {
    engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
    return FMRES_SUPERCEDE;
    }
    else
    if
(IsSetBit(g_iBitUserVoice, iSender) || IsSetBit(g_iBitUserAdmin, iSender) || g_iUserTeam[iSender] == 2 && IsSetBit(g_iBitUserAlive, iSender) || IsSetBit(g_iBitUserVip, iSender)) // микро) // микро
    {
        engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
        return FMRES_HANDLED;
    }
    engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
    return FMRES_SUPERCEDE;


но без результата

а также:

Код: Выделить всё
public FakeMeta_Voice_SetListening(iReceiver, iSender, bool:bListen)
{
    if(IsSetBit(g_iBitUserVoice, iSender) || IsSetBit(g_iBitUserAdmin, iSender) || g_iUserTeam[iSender] == 2 && IsSetBit(g_iBitUserAlive, iSender) || IsSetBit(g_iBitUserVip, iSender) ||IsSetBit(g_iBitUserVip, iSender) || IsSetBit(g_iBitUserBoss, iSender) || IsSetBit(g_iBitUserAvto, iSender) || IsSetBit(g_iBitUserVampir, iSender)) // микро
    {
        if(g_iChiefId == iSender)
        {
        engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
        return FMRES_SUPERCEDE;
        }
        else
        
{
        engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
        return FMRES_SUPERCEDE;
        }
        engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
        return FMRES_SUPERCEDE;
    }
    engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
    return FMRES_SUPERCEDE;


но теперь саймона вообще не слышно.

ваше мнение ребята?
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: [Jail] Приоритет при включение микро

Сообщение oReo » 09 дек 2017, 17:02

Попробуй:
Код: Выделить всё
public FakeMeta_Voice_SetListening(iReceiveriSenderbool:bListen)
{
    if(
iSender == g_iChiefId)
    {
    
engfunc(EngFunc_SetClientListeningiReceiveriSendertrue);
    return 
FMRES_SUPERCEDE;
    }
    else
    if(
IsSetBit(g_iBitUserVoiceiSender) || IsSetBit(g_iBitUserAdminiSender) || g_iUserTeam[iSender] == && IsSetBit(g_iBitUserAliveiSender) || IsSetBit(g_iBitUserVipiSender)) // микро) // микро
    
{
        
engfunc(EngFunc_SetClientListeningiReceiveriSendertrue);
        return 
FMRES_HANDLED;
    } else {
    
engfunc(EngFunc_SetClientListeningiReceiveriSenderfalse);
    return 
FMRES_SUPERCEDE;
  }
}
 
деструктор решает все проблемы: нет переменной - нет проблемы (с) Subb98
Аватара пользователя
oReo
 
Сообщения: 165
Зарегистрирован: 24 май 2017, 05:59
Благодарил (а): 10 раз.
Поблагодарили: 5 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn

Re: [Jail] Приоритет при включение микро

Сообщение KOTOKU » 09 дек 2017, 23:11

Не будет работать.
Вам нужно циклом прогонять игроков, которые уже успели включить микро до Саймона и для игроков добавлять новое условие на проверку, что саймон сейчас не разговаривает.
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: [Jail] Приоритет при включение микро

Сообщение limbooc » 11 дек 2017, 22:20

up
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: [Jail] Приоритет при включение микро

Сообщение артист666 » 12 дек 2017, 09:48

Там надо через глобальную переменную...
Если говорит саймон устанавливать ей true, и так же проверять обычных игроков, если булевая == true - глушить.

Типа того:
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

new bool:g_is_voice_simon    // Говорит, или нет саймон
new g_simon = 1            // Допустим ид саймона

public plugin_init()
{
    
register_clcmd("say /simon""functions")
    
register_clcmd("say_taem /simon""functions")
    
    
register_forward(FM_Voice_SetClientListening, "SetClientListeningPre")
}
public 
functions(id)
{
    
g_simon id
}
public SetClientListeningPre(Sender, Receiver, bool:Listen)
{
    if(
Sender == Receiver) return FMRES_IGNORED
    
if(Sender == g_simon) g_is_voice_simon = Listen
    else if
(g_is_voice_simon && Listen)
    {
        
engfunc(EngFunc_SetClientListening, Sender, Receiver, false)
        
return FMRES_SUPERCEDE
    
}
    
return FMRES_IGNORED


Ну и когда саймон выходит, или перестаёт им быть, нужно сбросить булевую.
Последний раз редактировалось артист666 13 дек 2017, 00:14, всего редактировалось 1 раз.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: [Jail] Приоритет при включение микро

Сообщение Mistrick » 12 дек 2017, 09:53

артист666, а где выключать переменную? Войс не сообщит, что закончил передавать.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: [Jail] Приоритет при включение микро

Сообщение артист666 » 12 дек 2017, 17:02

Говорить - нет. А по тому, слышит ли игрок - да.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: [Jail] Приоритет при включение микро

Сообщение limbooc » 12 дек 2017, 20:51

артист666,

Код: Выделить всё
public FakeMeta_Voice_SetListening(iReceiveriSenderbool:bListen)
{
    
    if(
iSender == iReceiver) return FMRES_IGNORED
    
    
    
if(IsSetBit(g_iBitUserVoiceiSender) || IsSetBit(g_iBitUserAdminiSender) || g_iUserTeam[iSender] == && IsSetBit(g_iBitUserAliveiSender) || IsSetBit(g_iBitUserVipiSender) ||IsSetBit(g_iBitUserVipiSender) || IsSetBit(g_iBitUserBossiSender) || IsSetBit(g_iBitUserAvtoiSender) || IsSetBit(g_iBitUserVampiriSender)) // микро
    
{
        
engfunc(EngFunc_SetClientListeningiReceiveriSendertrue);
        return 
FMRES_SUPERCEDE;
    }
    
    if(
iSender == g_iChiefIdg_is_voice_simon bListen
    
else if(g_is_voice_simon && bListen)
    {
        
engfunc(EngFunc_SetClientListeningiSenderiSenderfalse)
        return 
FMRES_SUPERCEDE
    
}
    return 
FMRES_IGNORED
    
    
/*engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
    return FMRES_SUPERCEDE;*/


нету результата
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: [Jail] Приоритет при включение микро

Сообщение артист666 » 12 дек 2017, 21:01

Я бы для начала протестировал на чистом.
А потом уже ставил бы. :-)

У меня микрофон не работает в кс, поэтому я не могу проверить.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: [Jail] Приоритет при включение микро

Сообщение limbooc » 12 дек 2017, 23:40

артист666, на чистом теперь вообще не работает не на принимающем ни на отправляющем клиенте
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn

След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 16