Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Перехват attacked a teammate

, Вывод своего сообщения о тиматтак и вывод всех сообщений (админам)
Статус пользователя Bloo
сообщение 26.9.2014, 13:09
Сообщение #1


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Ребят, задался такой проблемой, сообщения attacked a teammate выводятся только своей команде, но админам полезно знать что в противоположной команде кто то долбит своих. Ну и заодно перевести данное сообщение.
Поиск результата не дал, точнее нашелся плагин для SM https://forums.alliedmods.net/showthread.php?p=1589457
Сложно ли это реализовать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 26.9.2014, 13:13
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Легко.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 13:14
Сообщение #3


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Safety1st, т.е. надежда есть, что кто то за спасибо накатает?)
Тогда подожду, альтруистов) Ребят кому не сложно накатайте. Буду очень признателен.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 26.9.2014, 13:20
Сообщение #4
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Да, за спасибо вполне реально. Там 5 строчек.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя qvadro
сообщение 26.9.2014, 13:29
Сообщение #5


Стаж: 16 лет

Сообщений: 358
Благодарностей: 147
Полезность: 579

Show Team-Attacks


Достойно парировать, к сожалению, умеют далеко не многие. Нельзя наказывать людей за критику.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 13:53
Сообщение #6


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

qvadro, вот спасибо, видать плохо шарился по аленям)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 26.9.2014, 14:34
Сообщение #7


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Bloo,
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Show All MSG Team-Attacks"
#define VERSION "0.1"
#define AUTHOR "Fintok!"

#define is_user_valid_connected(%1) (1 <= %1 <= g_iMaxPlayers && is_user_connected(%1))
#define fm_cs_get_user_team_index(%1) get_pdata_int(%1, 114)

new g_iMaxPlayers

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_message(get_user_msgid("TextMsg"), "msg_TextMsg")

RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_Post", 1)

g_iMaxPlayers = get_maxplayers()
}

public msg_TextMsg()
{
if(get_msg_argtype(2) != ARG_STRING)
return PLUGIN_CONTINUE

new szArg[64]
get_msg_arg_string(2, szArg, charsmax(szArg))

if(equali(szArg, "#Game_teammate_attack"))
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

public fw_TakeDamage_Post(victim, weapon, attacker, Float:damage, damagebits)
{
if(victim == attacker || !is_user_valid_connected(attacker) || !is_user_valid_connected(victim)
|| fm_cs_get_user_team_index(attacker) != fm_cs_get_user_team_index(victim))
return

new szAttName[32], szVicName[32]

get_user_name(attacker, szAttName, charsmax(szAttName))
get_user_name(victim, szVicName, charsmax(szVicName))

client_print(0, print_chat, "%s напал на товарища по команде %s", szAttName, szVicName)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 14:43
Сообщение #8


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Fintok, я так понял тут будет всем показывать сообщения обеих команд? Желательно бы что бы было как в плагине выше, т.е. простым игрокам только свою команду, а админам обоих. И тут сообщения будут вылазить после каждого попадания? Спрашиваю по тому как в HLDS вроде как какой то тайм аут есть между сообщениями что бы не зафлудить чат.
А так спасибо большое!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 26.9.2014, 15:00
Сообщение #9


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Bloo, да, всем игрокам. В плагине выше, я только что посмотрел, реализована функция показа сообщений всем игрокам или только админам.
Разделения на команды там нет. В обоих плагинах сообщение вылезают после каждого выстрела. Проблем с выводом сообщений не будет.
Максимум только при активной стрельбе захламляется небольшим флудом чат и все.

Отредактировал: Fintok, - 26.9.2014, 15:03
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 15:06
Сообщение #10


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Fintok, а разделить сложно будет?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 26.9.2014, 15:07
Сообщение #11
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Антифлуд нужен. Реагируй просто на отправку месседжа #Game_teammate_attack игрой через register_event() и дублируй его, кому следует.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 26.9.2014, 16:00
Сообщение #12


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Нашаманил, пробуй.
Скрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN "Show Team Attack"
#define VERSION "1.0"
#define AUTHOR "Stimul"

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))

#define MAX_PLAYERS 32

#define is_valid_player(%1) (1 <= %1 <= g_iMaxPlayers)

#define GAME_TEAMMATE_ATTACK "#Game_teammate_attack"

#define TIME_DELAY 1 // Время задержки сообщений

new g_bIsConnected;
new g_bIsAdmin;

new g_iTeam[MAX_PLAYERS+1];
new g_iDelay[MAX_PLAYERS+1];
new g_iTextMsg;
new g_iMaxPlayers;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

g_iTextMsg = get_user_msgid("TextMsg");

register_message(get_user_msgid("TextMsg"), "MessageTextMsg");

RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", true);

RegisterHam(Ham_TakeDamage, "player", "fw_PlayerTakeDamage_Post", true);

g_iMaxPlayers = get_maxplayers();
}

public client_putinserver(id)
{
set_bit(g_bIsConnected, id);
is_user_admin(id) ? set_bit(g_bIsAdmin, id) : reset_bit(g_bIsAdmin, id);
}

public client_disconnect(id)
reset_bit(g_bIsConnected, id);

public MessageTextMsg()
{
new szValue[22];
get_msg_arg_string(2, szValue, charsmax(szValue));

return equali(szValue, GAME_TEAMMATE_ATTACK) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
}

public fw_PlayerSpawn_Post(id)
if(is_user_alive(id))
g_iTeam[id] = _:cs_get_user_team(id);

public fw_PlayerTakeDamage_Post(victim, inflictor, attacker, Float:damage, damagebits)
{
if(is_valid_player(victim)
&& is_valid_player(attacker)
&& victim != attacker)
{
if(g_iTeam[attacker] == g_iTeam[victim])
{
static szName[32];
get_user_name(attacker, szName, charsmax(szName));

if(g_iDelay[attacker] <= get_systime())
{
static i;
for(i = 1; i <= g_iMaxPlayers; i++)
{
if(get_bit(g_bIsConnected, i)
&& (get_bit(g_bIsAdmin, i)
|| g_iTeam[attacker] == g_iTeam[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iTextMsg, _, i);
write_byte(3);
write_string(GAME_TEAMMATE_ATTACK);
write_string(szName);
message_end();
}
}

g_iDelay[attacker] = get_systime(TIME_DELAY);
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 16:08
Сообщение #13


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Stimul1, спасибо, я так понял он стандартное сообщение перераспределяет? А свое сформировать можно? Сколько вариантов, чуть позже все попробую.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 26.9.2014, 16:22
Сообщение #14


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Bloo, да, думал так правильнее будет. Ну а так, можешь заменить отправку мессаги на client_print(i, print_chat, "").
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 26.9.2014, 18:51
Сообщение #15


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Safety1st, в #Game_teammate_attack не передается имя жертвы, только атакующего, так что получить индекс жертвы с помощью register_event() не получится.

Отредактировал: Fintok, - 26.9.2014, 18:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 26.9.2014, 22:13
Сообщение #16


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Исправил пару недочетов.
Скрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN "Show Team Attack"
#define VERSION "1.1"
#define AUTHOR "Stimul"

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
#define is_valid_player(%1) (1 <= %1 <= g_iMaxPlayers)

#define MAX_PLAYERS 32 // Максимальное количество игроков на сервере

#define MESSAGE "Игрок %s атаковал товарища по команде" // Сообщение в чат

#define TIME_DELAY 1 // Время задержки сообщений

new g_bIsConnected;
new g_bIsAdmin;

new g_iTeam[MAX_PLAYERS+1];
new g_iDelay[MAX_PLAYERS+1];
new g_iMaxPlayers;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

register_message(get_user_msgid("TextMsg"), "MessageTextMsg");

RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", true);
RegisterHam(Ham_TakeDamage, "player", "fw_PlayerTakeDamage_Post", true);

g_iMaxPlayers = get_maxplayers();
}

public client_putinserver(id)
{
set_bit(g_bIsConnected, id);
is_user_admin(id) ? set_bit(g_bIsAdmin, id) : reset_bit(g_bIsAdmin, id);
}

public client_disconnect(id)
reset_bit(g_bIsConnected, id);

public MessageTextMsg()
{
static szValue[22];
get_msg_arg_string(2, szValue, charsmax(szValue));

return equali(szValue, "#Game_teammate_attack") ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
}

public fw_PlayerSpawn_Post(id)
if(is_user_alive(id))
g_iTeam[id] = _:cs_get_user_team(id);

public fw_PlayerTakeDamage_Post(victim, inflictor, attacker, Float:damage, damagebits)
{
if(is_valid_player(victim) && is_valid_player(attacker) && victim != attacker)
{
if(g_iTeam[attacker] == g_iTeam[victim])
{
if(g_iDelay[attacker] <= get_systime())
{
static i, szName[32];
get_user_name(attacker, szName, charsmax(szName));

for(i = 1; i <= g_iMaxPlayers; i++)
if(get_bit(g_bIsConnected, i) && (get_bit(g_bIsAdmin, i) || g_iTeam[attacker] == g_iTeam[i]))
client_print(i, print_chat, MESSAGE, szName);

g_iDelay[attacker] = get_systime(TIME_DELAY);
}
}
}
}


Отредактировал: Stimul1, - 26.9.2014, 22:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 26.9.2014, 23:16
Сообщение #17


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Stimul1, спасибо! Завтра протестирую оба варианта, сегодня не получилось к сожалению(
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: