Доделать плагин со звуками

Сообщения
258
Реакции
262
Помог
5 раз(а)
Сообщения
37
Реакции
12
Subb98,
C++:
public cmd_killson(id)

{
set_user_info(id,"kills","ON")
g_checkKillsinf[id]= "ON"
client_cmd(id, "spk vox/activated")
client_print( iPlayer, print_chat, "Звуки убийств отключены." );
if(get_cvar_num("amx_kills_log") == 1)
{
new map[32]
get_mapname(map, 31)
new name[32]
get_user_name(id, name, 31)
get_time("20%y.%m.%d", logdate, 63)
formatex(logfile, 63, "killsounds_%s.log", logdate)
log_to_file(logfile, "[KILLS SPK ON] [%s] [%s]", name, map)
}
return PLUGIN_CONTINUE
}


public cmd_killsoff(id)
{
set_user_info(id,"kills","OFF")
g_checkKillsinf[id]= "OFF"
client_cmd(id, "spk vox/deactivated")
if(get_cvar_num("amx_kills_log") == 1)
{
new map[32]
get_mapname(map, 31)
new name[32]
get_user_name(id, name, 31)
get_time("20%y.%m.%d", logdate, 63)
formatex(logfile, 63, "killsounds_%s.log", logdate)
log_to_file(logfile, "[KILLSOUNDS SPK OFF] [%s] [%s]", name, map)
}
return PLUGIN_CONTINUE
}
так??
2 Июл 2017
а как же
C++:
client_cmd(id, "spk vox/activated")
тоже же могут блокировать
 
Сообщения
258
Реакции
262
Помог
5 раз(а)
Да. И ещё раз обращаю внимание, что через set_user_info настройка будет храниться на сервере до тех пор, пока игрок не отключится от сервера.

а как же
client_cmd(id, "spk vox/activated")
тоже же могут блокировать
Почему вы так решили? GitHub - shelru/ExtraMirror: Protection System For Counter-Strike 1.6 Скачать CT-Shield v2.0 - (Больше, чем Protector!) для CS 1.6 бесплатно Вот два самых популярных протектора сегодня. Ещё CSXGuard. Можете ориентироваться на их настройки.
 
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
Subb98, как там звуки нормально отправлять, сток мессага была. На основе emit_sound
 
Сообщения
258
Реакции
262
Помог
5 раз(а)
wopox1337, а я думал, это просто абстрактный пример. Теперь только увидел в коде...
 
Сообщения
37
Реакции
12
wopox1337, ты про это
C++:
emit_sound(id, 6,"soundkills/grenade.wav",1.0, 0.80, 0, 99)
??
2 Июл 2017
А нет, так Ее слышат окружающие ещё , а нам нужно отдельно каждому , наверное emit_sound2?
2 Июл 2017
Да именно
C++:

/*
* id - индекс игрока который издаёт звук
* receiver - индекс игрока который получает звук
* channel - канал
* sample - воспроизводимый звук
* volume - громкость звука
* attn - ослабление звука
* pitch - скорость звука
* origin - Координаты звука, если id равняется 0.
*/

native emit_sound2(id,receiver,channel,const sample[],Float:volume,Float:attn,flags,pitch,Float:origin[3] = {0.0,0.0,0.0});

2 Июл 2017
И так, вроде проснулся...
P.S.: сынишка шалунишка (8 мес.) проснулся ночью и так я с ним и уснул на руках :blush2:
2 Июл 2017
set_user_info настройка будет храниться на сервере до тех пор, пока игрок не отключится от сервера
- т.е. получается хранить на клиенте не получиться :crazy:? Ну хорошо. Я хоть посмотрел как оно работает. А что по поводу протекторов: я считаю всё таки попробовать сделать тогда client_cmd, а там уж, используют они протектор или нет :derisive:
Хотя так не правильно.... Плюнуть надо на этот setinfo (в данном случае), да через БД уже провести...:scratch_one-s_head:
2 Июл 2017
Subb98, как там звуки нормально отправлять, сток мессага была. На основе emit_sound
пока смотрел emit_sound2, нарвался уже и на rh_emit_sound2 в re_api
2 Июл 2017
Dmitriy Korolev, ReHLDS? :blush2:у Вас стоит?
 
Сообщения
258
Реакции
262
Помог
5 раз(а)
Сообщения
37
Реакции
12
PHP:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define SAVE
#if defined(SAVE)
#include <nvault>
#define FILE_NAME "kills"
#define SAVE_TYPE 2
#define AUTORESET
#define AUTORESET_DAYS 30
new g_nVault;
#endif

#define MAX_CLIENTS 32
#define m_LastHitGroup 75
#define m_bitsDamageType 76
#define m_pActiveItem 373
#define m_iId 43

new g_iKillCount[ MAX_CLIENTS +1 ];

new bool: g_bszFirstBlood;

new bool:g_bszSoundsEnable[MAX_CLIENTS +1];

new const SOUNDS_KILL[ ][ ] =
{
"soundkills/firstkill.wav",
"soundkills/doublekill.wav",
"soundkills/tripplekill.wav",
"soundkills/multikill.wav",
"soundkills/crazy.wav",
"soundkills/rampage.wav",
"soundkills/headshot.wav",
"soundkills/knife.wav",
"soundkills/grenade.wav"
};

public plugin_init( )
{
register_plugin( "", "", "" );

register_logevent( "LogEV_RoundStart", 2, "1=Round_Start" );

register_clcmd( "say /sounds", "Command_Sounds" );
register_clcmd( "say_team /sounds", "Command_Sounds" );

RegisterHam( Ham_Killed, "player", "CPlayer__Killed_Post", .Post = 1 );

#if defined(SAVE)
g_nVault = nvault_open(FILE_NAME);

#if defined(AUTORESET)
nvault_prune(g_nVault, 0, get_systime() - (86400 * AUTORESET_DAYS));
#endif
#endif
}

#if defined(SAVE)
public plugin_end()
nvault_close(g_nVault);

save_data(id)
{
new trackid[64];

if (!get_trackid(id, trackid, charsmax(trackid)))
return 0;

new value[2];
formatex(value, charsmax(value), "%d", g_bszSoundsEnable[id] ? 1 : 2);
nvault_set(g_nVault, trackid, value);

return 1;
}

#if AMXX_VERSION_NUM >= 183 && SAVE_TYPE == 2
load_data(id, const trackid[])
#else
load_data(id)
#endif
{
#if AMXX_VERSION_NUM >= 183 && SAVE_TYPE == 2
if (!authid_is_valid(trackid))
return 0;
#else
new trackid[72];

if (!get_trackid(id, trackid, charsmax(trackid)))
return 0;
#endif

new nResult = nvault_get(g_nVault, trackid);

if (!nResult)
return 0;

#if defined(AUTORESET)
nvault_touch(g_nVault, trackid, -1);
#endif

g_bszSoundsEnable[id] = nResult == 1 ? true : false;

return 1;
}

get_trackid(id, trackid[], len)
{
#if SAVE_TYPE == 1
get_user_name(id, trackid, len);
#elseif SAVE_TYPE == 2
get_user_authid(id, trackid, len);

if (!authid_is_valid(trackid))
return 0;
#elseif SAVE_TYPE == 3
get_user_ip(id, trackid, len, 1);
#endif
return 1;
}

#if AMXX_VERSION_NUM >= 183 && SAVE_TYPE == 2
authid_is_valid(const authid[])
{
if (!strcmp(authid, "STEAM_ID_LAN") || !strcmp(authid, "VALVE_ID_LAN"))
return 0;

return 1;
}
#endif
#endif

public plugin_precache( )
{
for( new i = 0; i < sizeof SOUNDS_KILL; i++ )
engfunc( EngFunc_PrecacheSound, SOUNDS_KILL[ i ] );
}

public LogEV_RoundStart( )
{
g_bszFirstBlood = true;

for( new iPlayers = MAX_CLIENTS; iPlayers > 0; iPlayers-- )
g_iKillCount[ iPlayers ] = 0;
}

public Command_Sounds( iPlayer )
{
if( g_bszSoundsEnable[iPlayer] )
{
g_bszSoundsEnable[iPlayer] = false;

client_print( iPlayer, print_chat, "Звуки убийств отключены." );
}
else
{
g_bszSoundsEnable[iPlayer] = true;

client_print( iPlayer, print_chat, "Звуки убийств включены." );
}

#if defined(SAVE)
save_data(iPlayer);
#endif

return PLUGIN_HANDLED;
}

public CPlayer__Killed_Post( iVictim, iAttacker, iGib )
{
if( iVictim == iAttacker || !is_user_connected( iAttacker ) )
return;

if( !g_bszSoundsEnable[iAttacker] )
return;

new iBitsDamageType = get_pdata_int( iVictim, m_bitsDamageType );
new iLastHitGroup = get_pdata_int( iVictim, m_LastHitGroup );
new iActiveItem = get_pdata_cbase( iAttacker, m_pActiveItem );

if( pev_valid( iActiveItem ) != 2 )
return;

new iId = get_pdata_int( iActiveItem, m_iId, 4 );

g_iKillCount[ iAttacker ]++;

if( iLastHitGroup == HIT_HEAD )
{
if( g_bszFirstBlood )
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 0 ] );

g_bszFirstBlood = false;
}
else
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 6 ] );

return;
}

if( iId == CSW_KNIFE && iBitsDamageType & ( DMG_NEVERGIB | DMG_BULLET ) )
{
if( g_bszFirstBlood )
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 0 ] );

g_bszFirstBlood = false;
}
else
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 7 ] );

return;
}

if( ~iBitsDamageType & ( DMG_NEVERGIB | DMG_BULLET ) )
{
if( g_bszFirstBlood )
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 0 ] );

g_bszFirstBlood = false;
}
else
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 8 ] );

return;
}

if( g_bszFirstBlood )
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 0 ] );

g_bszFirstBlood = false;
}
else
{
switch( g_iKillCount[ iAttacker ] )
{
case 2: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 1 ] );
case 3: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 2 ] );
case 4: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 3 ] );
case 5: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 4 ] );
case 6:
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 5 ] );

g_iKillCount[ iAttacker ] = 5;
}
}
}
}

#if defined(SAVE)
#if AMXX_VERSION_NUM >= 183 && SAVE_TYPE == 2
public client_authorized(iPlayer, const authid[])
#else
public client_authorized(iPlayer)
#endif
{
#if AMXX_VERSION_NUM >= 183 && SAVE_TYPE == 2
if (!load_data(iPlayer, authid))
#else
if (!load_data(iPlayer))
#endif
g_bszSoundsEnable[iPlayer] = true;

g_iKillCount[ iPlayer ] = 0;
}
#else
public client_authorized(iPlayer)
{
g_bszSoundsEnable[iPlayer] = true;
g_iKillCount[ iPlayer ] = 0;
}
#endif
Остаётся только лишь со с воспроизведением звука поработать
 
Сообщения
162
Реакции
4
Помог
3 раз(а)
shram47, спасибо огромное.а что сейчас с ним конкретно не так?
p.s почему то не вижу у себя кнопку сказать спасибо или прибавить репутацию.
 
Сообщения
37
Реакции
12
спасибо огромное.а что сейчас с ним конкретно не так?
1. client_cmd - выполнить команду на стороне клиента не комельфо.
2. Некий намёк от профи ;D
как там звуки нормально отправлять, сток мессага была. На основе emit_sound
3. Из личного интереса к коду.
p.s почему то не вижу у себя кнопку сказать спасибо или прибавить репутацию.
Коротко:
Группа "Пользователь" была урезана в правах, чтобы уменьшить на форуме число негативных моментов от "новорегов"
Подробнее: Новости форума, обновления.
 
Сообщения
162
Реакции
4
Помог
3 раз(а)
shram47, Понял.И подскажите еще пожалуйста как сделать большее кол-во звуков?Допустим до 12.
2 Июл 2017
shram47, При компиляции получились вот такие ошибки:
Безымянный.png
 
Сообщения
37
Реакции
12
Dmitriy Korolev, В данном плагине каждый звук способствует определённому событию...
И просто добавить звук в
C++:
new const SOUNDS_KILL[ ][ ] =
{
"soundkills/firstkill.wav",
"soundkills/doublekill.wav",
"soundkills/tripplekill.wav",
"soundkills/multikill.wav",
"soundkills/crazy.wav",
"soundkills/rampage.wav",
"soundkills/headshot.wav",
"soundkills/knife.wav",
"soundkills/grenade.wav"
};
будет мало, нужно потом приписывать, какой звук должно вызывать событие
к примеру:
C++:
if( iLastHitGroup == HIT_HEAD ) // если убил в голову
{
if( g_bszFirstBlood )
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 0 ] );

g_bszFirstBlood = false;
}
else
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 6 ] ); // то вызывает 7-мую мелодию (отсчёт начинает 1 = 0, поэтому 6 = 7 сроке)

return;
}
постарался более понятным языком
2 Июл 2017
Dmitriy Korolev, версия amxmodx?
 
Последнее редактирование:
Сообщения
162
Реакции
4
Помог
3 раз(а)
shram47, 1.8.2
2 Июл 2017
shram47, а не вот в этой ли части кода дописывать нужно?

Код:
{
switch( g_iKillCount[ iAttacker ] )
{
case 2: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 1 ] );
case 3: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 2 ] );
case 4: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 3 ] );
case 5: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 4 ] );
case 6:
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 5 ] );

g_iKillCount[ iAttacker ] = 5;
}
}
}
}
 
Сообщения
37
Реакции
12
Dmitriy Korolev,
какой звук должно вызывать событие
Смотря какое событие звуки должны сопровождать

Под 1.8.2 сейчас гляну, проверял на Re 1.8.3
2 Июл 2017
Dmitriy Korolev, в той части что вы указали - звуки сопровождают Первая кровь, Двойное убийство и т.д. я Вам в пример привёл убийство в голову... Если вы там захотите добавить убийство с дигла :D Кто же Знает что будут сопровождать другие Ваши звуки
 
Сообщения
162
Реакции
4
Помог
3 раз(а)
shram47, я понял.
2 Июл 2017
shram47, вот так верно будет?
Код:
 switch( g_iKillCount[ iAttacker ] )
{
case 2: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 1 ] );
case 3: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 2 ] );
case 4: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 3 ] );
case 5: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 4 ] );
case 6: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 5 ] );
case 7: client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 6 ] );
{
client_cmd( iAttacker, "spk %s", SOUNDS_KILL[ 7 ] );

g_iKillCount[ iAttacker ] = 7;
 
Сообщения
37
Реакции
12
Dmitriy Korolev, в последовательном порядке де, но тогда нужно будет и изменить строки убийство с ножа, гранаты и т.д.
 

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

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