AMX MOD X
Пятница, 09.01.2026, 20:31:30



Приветствую Вас Гость | RSS
[ Главная ] [ Отлавливание звуковых MSG и применение к ним своих настроек - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Отлавливание звуковых MSG и применение к ним своих настроек
BruteДата: Суббота, 09.08.2008, 04:01:44 | Сообщение # 1
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Собственно рассмотрим плагин VEN'a: "Fun Radio"
Code
#include <amxmodx>
#include <engine>

public plugin_init() {
  register_plugin("Fun Radio", "0.1", "VEN")
  register_message(get_user_msgid("SendAudio"), "msg_send_audio")
  register_cvar("amx_funradio_playspeed", "130")
}

public msg_send_audio() {
  if (get_msg_arg_int(3) == 100)
   set_msg_arg_int(3, ARG_SHORT, get_cvar_num("amx_funradio_playspeed"))
}

Сначало он регистрирует месагу, тем самым получает возможность её отловить. А потом применяет к ней свои настройки.

Так вот мне нужно что-то аналогичное, чтобы отловить радио-месаги "Контры вин" и "Теры вин", и оглушить их нафиг, чтобы не кто их не услышал.

Также нужно поймать аудио-месаги, которые будут вытекать через команду spk и приминить к ним спид, как в плагине VEN'a

Добавлено (2008-08-09, 4:01 Am)
---------------------------------------------

Quote (Brute)
Так вот мне нужно что-то аналогичное, чтобы отловить радио-месаги "Контры вин" и "Теры вин", и оглушить их нафиг, чтобы не кто их не услышал.

А можно их вообще заблокировать!?
 
VENДата: Суббота, 09.08.2008, 13:22:02 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
То же самое, только проверяешь второй аргумент сообщения: если он равен "%!MRAD_terwin" или "%!MRAD_ctwin", то возвращаешь PLUGIN_HANDLED.

Примечание: "%!MRAD_rounddraw" - для варианта "ничья".

Quote
Также нужно поймать аудио-месаги, которые будут вытекать через команду spk и приминить к ним спид
Насколько я знаю, это невозможно.
 
BruteДата: Суббота, 09.08.2008, 14:04:24 | Сообщение # 3
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Code
#include <amxmodx>
#include <engine>

public plugin_init() {
   register_plugin("Burda", "0.1", "X3")
   register_message(get_user_msgid("SendAudio"), "msg_send_audio")
}

public msg_send_audio() {
   if (get_msg_arg_string(2) == "%!MRAD_terwin" || "%!MRAD_ctwin")
    PLUGIN_HANDLED
}

Что-то очень просто, буду пробывать, спасибо за ответ

Quote (VEN)
Насколько я знаю, это невозможно.

Ну тебе можно верить наслово!
 
VENДата: Воскресенье, 10.08.2008, 10:38:28 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
if (get_msg_arg_string(2) == "%!MRAD_terwin" || "%!MRAD_ctwin")
Это не верно, т.к. ты оперируешь со строками. Подсказки ниже.
Quote (messages.inc)
/* Gets the value of argn. */
native get_msg_arg_int(argn);
native Float:get_msg_arg_float(argn);
native get_msg_arg_string(argn, szReturn[], iLength);

Quote (string.inc)
/* Checks if two strings equal. If len var is set
* then there are only c chars comapred. */
native equal(const a[],const b[],c=0);

/* Compares two strings with the C function strcmp(). Returns 0 on equal. */
native strcmp(const string1[], const string2[], ignorecase=0);

Кстати, #include <engine> уже не требуется, т.к. *msg* функции были в свое время перемещены в AMX Mod X core.

 
BruteДата: Воскресенье, 10.08.2008, 13:05:22 | Сообщение # 5
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
вот на писал плагин
Code
#include <amxmodx>

public plugin_init()
{
  register_plugin("msg_blocker", "1.0.0.0", "Brute")
  register_message(get_user_msgid("SendAudio"), "msg_send_audio")
  register_cvar("amx_msg_block", "1")
}

public msg_send_audio()
{
  if(get_cvar_num("amx_msg_block") == 1)
  {
   client_print(0, print_console, "Message In")
   new arg[15]
   get_msg_arg_string(2, arg, 14)
   client_print(0, print_console, "Message arg is: %s", arg)
   if(equal(arg, "%!MRAD_terwin") || equal(arg, "%!MRAD_ctwin"))
   {
    client_print(0, print_console, "Message Blocked suc.")
    set_msg_block(get_user_msgid("SendAudio"), BLOCK_ONCE)
   }
  }
}

Quote ( Вырезка из консоли)
Message In
Message arg is: !MRAD_LETSGO
Message In
Message arg is: !MRAD_LETSGO
] kill
Message In
Message arg is: !MRAD_ctwin
Message Blocked suc.
Brute died

Всё работает, кроме блокировки, звук всё равно произносится:]

Добавлено (2008-08-10, 1:05 Pm)
---------------------------------------------

Code
#include <amxmodx>

public plugin_init()
{
  register_plugin("msg_blocker", "1.0.0.0", "Brute")
  register_message(get_user_msgid("SendAudio"), "msg_send_audio")
  register_cvar("amx_msg_block", "1")
}

public msg_send_audio()
{
  if(get_cvar_num("amx_msg_block") == 1)
  {
   new arg[15]
      get_msg_arg_string(2, arg, 14)  
   if(equal(arg, "%!MRAD_terwin") || equal(arg, "%!MRAD_ctwin"))
   {
    client_print(0, print_console, "Message Blocked suc.")
    set_msg_arg_int(3, ARG_SHORT, 0)
   }
  }
}

Не получилось блокировать, зато получилось остановить! ^^
Прикрепления: msg_blocker.sma (0.6 Kb)
 
DaTaДата: Воскресенье, 10.08.2008, 15:25:58 | Сообщение # 6
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (Brute)
Не получилось блокировать

нужно вернуть PLUGIN_HANDLED, что-бы заблокировать
Code
   if(equal(arg, "%!MRAD_terwin") || equal(arg, "%!MRAD_ctwin"))
       return PLUGIN_HANDLED
 
BruteДата: Воскресенье, 10.08.2008, 15:53:01 | Сообщение # 7
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
DaTa, да что ты говоришь, сначало попробуй откомпилировать
 
DaTaДата: Воскресенье, 10.08.2008, 17:16:04 | Сообщение # 8
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (Brute)
DaTa, да что ты говоришь, сначало попробуй откомпилировать

ну если ты не догадался, компилятор видит, что функция возвращает значение и он полагает, что функция должна вернуть значение в любом случае(т.к. явной спецификации возврата (например void из С) в pawn нету, и не указана cell/int спецификация)
Code
#include <amxmodx>

public plugin_init()
{
  register_plugin("msg_blocker", "1.0.0.0", "Brute")
  register_message(get_user_msgid("SendAudio"), "msg_send_audio")
  register_cvar("amx_msg_block", "1")
}

public msg_send_audio()
{
  if(get_cvar_num("amx_msg_block") == 1)
  {
   new arg[15]
   get_msg_arg_string(2, arg, 14)   
   if(equal(arg, "%!MRAD_terwin") || equal(arg, "%!MRAD_ctwin"))
    return PLUGIN_HANDLED//блокируем поступление сообщения к следующим плагинам и вызов функций движка
  }
   
  return PLUGIN_CONTINUE//"отпускаем" сообщение дальше
}
 
BruteДата: Воскресенье, 10.08.2008, 21:53:40 | Сообщение # 9
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
ММ спасибо!

Добавлено (2008-08-10, 9:53 Pm)
---------------------------------------------

Quote (DaTa)
#include <amxmodx>

public plugin_init()
{
register_plugin("msg_blocker", "1.0.0.0", "Brute")
register_message(get_user_msgid("SendAudio"), "msg_send_audio")
register_cvar("amx_msg_block", "1")
}

public msg_send_audio()
{
if(get_cvar_num("amx_msg_block") == 1)
{
new arg[15]
get_msg_arg_string(2, arg, 14)
if(equal(arg, "%!MRAD_terwin") || equal(arg, "%!MRAD_ctwin"))
return PLUGIN_HANDLED//блокируем поступление сообщения к следующим плагинам и вызов функций движка
}

return PLUGIN_CONTINUE//"отпускаем" сообщение дальше
}


Не хрена не пашет!!! В топку его!!!
 
VENДата: Вторник, 19.08.2008, 19:05:05 | Сообщение # 10
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Попробуй
Code
if(equal(arg[1], "!MRAD_terwin") || equal(arg[1], "!MRAD_ctwin"))
 
BruteДата: Вторник, 19.08.2008, 19:34:33 | Сообщение # 11
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Репутация: 9
Статус: Не в сети
Quote (VEN)
Попробуй
Code
if(equal(arg[1], "!MRAD_terwin") || equal(arg[1], "!MRAD_ctwin"))

Уже реализовано в плагине cs: postal2 fun-stats T 1.1, спасибо. Не забыл и черкнул в кредитах.
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026