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

шлейф за выстрела убийства

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

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

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

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

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

шлейф за выстрела убийства

Сообщение jban1990 » 02 июн 2020, 00:00

Парни как сделать что бы шлейф убийства был только когда умирает последний игрок в раунде, а не во всех убийствах

Код: Выделить всё
#include <amxmod>

#define TE_BEAMPOINTS 0

new m_spriteTexture

public death(){
new 
player_num // A Player incrementer.
new maxpl get_maxplayers()+// Max players.
new killer_id read_data(1// Killer's player ID.
new victim_id read_data(2// Victim's player ID.
new killer_team get_user_team(killer_id// The team the killer's on.

if (get_cvar_num("amx_deathbeams_enabled") == 1)
{
if (
killer_id!=victim_id && killer_id)
{
new 
k_origin[3]
new 
v_origin[3]
get_user_origin(killer_id,k_origin)
get_user_origin(victim_id,v_origin)

for(
player_num 1;player_num maxplplayer_num++)
{
if(
is_user_alive(player_num)==&& get_user_time(player_num)!= 0)
{
message_begin(MSG_ONESVC_TEMPENTITY,{0,0,0},player_num)
write_byteTE_BEAMPOINTS )
write_coord(k_origin[0])
write_coord(k_origin[1])
write_coord(k_origin[2])
write_coord(v_origin[0])
write_coord(v_origin[1])
write_coord(v_origin[2])
write_shortm_spriteTexture )
write_byte// framestart
write_byte// framerate
write_byte100 // life in 0.1's
write_byte25 // width
write_byte// noise

// Set the color of the beam.
if (get_cvar_num("amx_deathbeams_randcolor") == 1)
{
write_byterandom_num(50,255) ) // red
write_byterandom_num(50,255) ) // green
write_byterandom_num(50,255) ) // blue
}
else
{
if (
killer_team == 1)
// Terrorist
write_byte255 // red
write_byte// green
write_byte// blue
}
else
// Counter-terrorist
write_byte// red
write_byte255 // green
write_byte// blue
}
}
write_byte255 // brightness
write_byte40 // speed
message_end()
}
}
}
}
}

public 
plugin_precache()
m_spriteTexture precache_model("sprites/animglow01.spr")

public 
plugin_init()
{
register_plugin("All Death Beams","0.9","SpaceDude")
register_event("DeathMsg","death","a")
register_cvar("amx_deathbeams_enabled","1")
register_cvar("amx_deathbeams_randcolor","0")
}
 
Аватара пользователя
jban1990
 
Сообщения: 46
Зарегистрирован: 30 мар 2020, 17:06
Забанен
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: шлейф за выстрела убийства

Сообщение Leo_[BH] » 02 июн 2020, 07:17

Код: Выделить всё
#include <amxmod>

#define TE_BEAMPOINTS 0

new m_spriteTexture

new g_maxplayers

public plugin_precache
()
m_spriteTexture = precache_model("sprites/animglow01.spr")

public plugin_init()
{
register_plugin("Last Death Beam","0.9a","SpaceDude / Leo_[BH]")
register_event("DeathMsg","death","a")
register_cvar("amx_deathbeams_enabled","1")
register_cvar("amx_deathbeams_randcolor","0")

g_maxplayers = get_maxplayers()
}

public death(){
new player_num = 0 // A Player incrementer.
new killer_id = read_data(1) // Killer's player ID.
new victim_id = read_data(2) // Victim's player ID.
new killer_team = get_user_team(killer_id) // The team the killer's on.

if (get_cvar_num("amx_deathbeams_enabled") == 1)
{
if (killer_id!=victim_id && killer_id)
{
new k_origin[3]
new v_origin[3]
get_user_origin(killer_id,k_origin)
get_user_origin(victim_id,v_origin)

if(
get_my_alive_teammates(victim_id)) // Если у жертвы есть товарищи по команде живые
{
    return; // прекратить выполнение функции
}

for(
player_num = 1;player_num <= g_maxplayers; player_num++)
{
if(
is_user_alive(player_num)==&& get_user_time(player_num)!= 0)
{
message_begin(MSG_ONE, SVC_TEMPENTITY,{0,0,0},player_num)
write_byte( TE_BEAMPOINTS )
write_coord(k_origin[0])
write_coord(k_origin[1])
write_coord(k_origin[2])
write_coord(v_origin[0])
write_coord(v_origin[1])
write_coord(v_origin[2])
write_short( m_spriteTexture )
write_byte( 1 ) // framestart
write_byte( 1 ) // framerate
write_byte( 100 ) // life in 0.1's
write_byte( 25 ) // width
write_byte( 0 ) // noise

// Set the color of the beam.
if (get_cvar_num("amx_deathbeams_randcolor") == 1)
{
write_byte( random_num(50,255) ) // red
write_byte( random_num(50,255) ) // green
write_byte( random_num(50,255) ) // blue
}
else
{
if (killer_team == 1)
{
 // Terrorist
write_byte( 255 ) // red
write_byte( 0 ) // green
write_byte( 0 ) // blue
}
else
{
 // Counter-terrorist
write_byte( 0 ) // red
write_byte( 255 ) // green
write_byte( 0 ) // blue
}
}
write_byte( 255 ) // brightness
write_byte( 40 ) // speed
message_end()
}
}
}
}
}

get_my_alive_teammates(player) // возвращает количество живых товарищей по команде
{
    new iTeamAlive, id
    
    for 
(id = 1; id <= g_maxplayers; id++)
    {
        if (id != player && is_user_alive(id) && get_user_team(id) == get_user_team(player))
            iTeamAlive++
    }
    
    return iTeamAlive
;
}

Добавил функцию get_my_alive_teammates(player), которая возвращает количество живых товарищей по команде.
Сделал проверку - если у жертвы есть товарищи по команде живые, то прекратить выполнение функции, чтобы не отображать луч.
Переставил пару блоков кода местами для удобства (субъективного)

SMA приложил для удобства.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Сохраняйте историю
Аватара пользователя
Leo_[BH]
 
Сообщения: 98
Зарегистрирован: 06 апр 2014, 17:51
Откуда: UA
Благодарил (а): 9 раз.
Поблагодарили: 30 раз.
Опыт программирования: Больше трех лет

Re: шлейф за выстрела убийства

Сообщение jban1990 » 02 июн 2020, 19:45

спасибо Вам)
Аватара пользователя
jban1990
 
Сообщения: 46
Зарегистрирован: 30 мар 2020, 17:06
Забанен
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю


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

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

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