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

ScreenFade  [Выполнено]

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

В данном разделе форума разрешено создавать темы только с поиском исполнителя или заказчика.

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

ScreenFade

Сообщение MARSHO » 17 дек 2016, 23:30

Всем привет!
Может кто помочь/добавить в плагин функции, чтобы получилось так:
1) Чтобы при обычном убийстве экран моргал синим цветом
2) Чтобы при убийстве в голову моргал зеленым цветом
3) Чтобы у того, кого убили в голову, моргал красным цветом?
Код: Выделить всё
// Copyright © 2016 Vaqtincha

#define UNRELIABLE_MESSAGE
// #define DEBUG

#include <amxmodx>
#include <reapi>


enum Colors{ red, green, blue, alpha }

new g_iColors[Colors], g_pFadeTime, g_pHoldTime, g_pColors
new g_iMsgIdScreenFade
, Float:g_flFadeTime, Float:g_flHoldTime
new bool
:g_bScreenFade[MAX_CLIENTS+1], g_iPlayerColors[MAX_CLIENTS+1][Colors]

public plugin_init()
{
    register_plugin("[ReApi] Killer ScreenFade", "0.0.4", "Vaqtincha")
    register_clcmd("say /fade", "ClCmd_Switch")
    register_clcmd("say_team /fade", "ClCmd_Switch")

    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    
    RegisterHookChain
(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
    
    g_iMsgIdScreenFade 
= get_user_msgid("ScreenFade")

    g_pColors = register_cvar("ks_default_colors", "0 200 20 40")
    g_pFadeTime = register_cvar("ks_fadeouttime", "0.5")    // плавное исчезновение
    g_pHoldTime = register_cvar("ks_holdtime", "0.8")        // продолжительность

    Event_NewRound()
}

public Event_NewRound()
{
    new szColors[16], szRed[4], szGreen[4], szBlue[4], szAlpha[4]
    get_pcvar_string(g_pColors, szColors, charsmax(szColors))

    if(parse(szColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue), szAlpha, charsmax(szAlpha)) == 4)
    {
        g_iColors[red] = clamp(str_to_num(szRed), 0, 255)
        g_iColors[green] = clamp(str_to_num(szGreen), 0, 255)
        g_iColors[blue] = clamp(str_to_num(szBlue), 0, 255)
        g_iColors[alpha] = clamp(str_to_num(szAlpha), 0, 255)

        g_flFadeTime = get_pcvar_float(g_pFadeTime)
        g_flHoldTime = get_pcvar_float(g_pHoldTime)
    }
}

public client_putinserver(id)
{
    if(is_user_bot(id) || is_user_hltv(id))
        return

    g_bScreenFade
[id] = true

    new szUserColors
[16], szRed[4], szGreen[4], szBlue[4], szAlpha[4]
    get_user_info(id, "ks_colors", szUserColors, charsmax(szUserColors))

    if(!szUserColors[0]) // default
    {
        g_iPlayerColors[id][red] = g_iColors[red]
        g_iPlayerColors[id][green] = g_iColors[green]
        g_iPlayerColors[id][blue] = g_iColors[blue]
        g_iPlayerColors[id][alpha] = g_iColors[alpha]
    }else{
        if(parse(szUserColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue), szAlpha, charsmax(szAlpha)) == 4)
        {
            g_iPlayerColors[id][red] = clamp(str_to_num(szRed), 0, 255)
            g_iPlayerColors[id][green] = clamp(str_to_num(szGreen), 0, 255)
            g_iPlayerColors[id][blue] = clamp(str_to_num(szBlue), 0, 255)
            g_iPlayerColors[id][alpha] = clamp(str_to_num(szAlpha), 0, 255)
        #if defined DEBUG
            server_print("^n[FADE] UserColors: Red = %d | Green = %d | Blue = %d | Alpha = %d", g_iPlayerColors[id][red], g_iPlayerColors[id][green], g_iPlayerColors[id][blue], g_iPlayerColors[id][alpha])
        #endif
        }
    }
}

public ClCmd_Switch(id)
{
    if(g_bScreenFade[id])
    {
        g_bScreenFade[id] = false
        client_print
(id, print_center, "ScreenFade disabled!")
    }
    else{
        g_bScreenFade[id] = true
        client_print
(id, print_center, "ScreenFade enabled!")
    }

    return PLUGIN_HANDLED
}

public CBasePlayer_Killed(id, killer)
{
    if(id != killer && is_user_alive(killer) && g_bScreenFade[killer] && !is_player_blinded(killer))
        __UTIL_ScreenFade(killer, g_iPlayerColors[killer], g_flFadeTime, g_flHoldTime)

    return HC_CONTINUE
}


stock __UTIL_ScreenFade(id, iColor[Colors] = {0, 0, 0, 0}, Float:flFxTime = 1.0, Float:flHoldTime = 1.0)
{
    const FFADE_IN = 0x0000

#if defined UNRELIABLE_MESSAGE
    message_begin(MSG_ONE_UNRELIABLE, g_iMsgIdScreenFade, .player = id)
#else
    message_begin(MSG_ONE, g_iMsgIdScreenFade, .player = id)
#endif    
    write_short(FixedUnsigned16(flFxTime, 1<<12))
    write_short(FixedUnsigned16(flHoldTime, 1<<12))
    write_short(FFADE_IN)
    write_byte(iColor[red])
    write_byte(iColor[green])
    write_byte(iColor[blue])
    write_byte(iColor[alpha])
    message_end()
}

stock FixedUnsigned16(Float:flValue, iScale)
{
    new iOutput

    iOutput 
= floatround(flValue * iScale)

    if(iOutput < 0)
        iOutput = 0

    if
(iOutput > 0xFFFF)
        iOutput = 0xFFFF

    return iOutput
}

stock bool:is_player_blinded(id)
{
    return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) >= get_gametime())
    // /* m 2.*/ return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) + Float:get_member(id, m_blindHoldTime) >= get_gametime())
}


Не бесплатно, конечно же
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Re: ScreenFade

Сообщение Subb98 » 18 дек 2016, 01:05

Тема перемещена в раздел "Биржа труда"
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4787
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1263 раз.
Поблагодарили: 2171 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: ScreenFade

Сообщение MARSHO » 11 янв 2017, 12:47

Меню с выбором цвета итд нужно вообще убрать, он нафиг не нужен.

Цена вопроса 100 руб.
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Re: ScreenFade

Сообщение Subb98 » 11 янв 2017, 13:07

MARSHO, готов выполнить. Оплату принимаю только на QIWI.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4787
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1263 раз.
Поблагодарили: 2171 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: ScreenFade

Сообщение Juice » 11 янв 2017, 13:26

Проверить не могу. Если всё устраивает, то милости прошу в личку.

Код: Выделить всё
// Copyright © 2016 Vaqtincha

#define UNRELIABLE_MESSAGE

#include <amxmodx>
#include <reapi>

enum _:Cvars{ CVAR_COLORS_DEFAULT, CVAR_COLORS_HS_KILLER, CVAR_COLORS_HS_VICTIM }
enum Colors{ red, green, blue, alpha }

new g_iColors[Cvars][Colors], g_pFadeTime, g_pHoldTime, g_pColors[Cvars]
new g_iMsgIdScreenFade, Float:g_flFadeTime, Float:g_flHoldTime

public plugin_init
()
{
    register_plugin("[ReApi] Killer ScreenFade", "0.0.4", "Vaqtincha/MARSHO")

    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    
    RegisterHookChain
(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
    
    g_iMsgIdScreenFade 
= get_user_msgid("ScreenFade")

    g_pColors[CVAR_COLORS_DEFAULT] = register_cvar("ks_colors_default", "0 0 200 40")
    g_pColors[CVAR_COLORS_HS_KILLER] = register_cvar("ks_colors_hs_killer", "0 200 0 40")
    g_pColors[CVAR_COLORS_HS_VICTIM] = register_cvar("ks_colors_hs_victim", "200 0 0 40")
    g_pFadeTime = register_cvar("ks_fadeouttime", "0.5")    // плавное исчезновение
    g_pHoldTime = register_cvar("ks_holdtime", "0.8")        // продолжительность

    Event_NewRound()
}

public Event_NewRound()
{
    new szColors[16], szRed[4], szGreen[4], szBlue[4], szAlpha[4]
    
    for
(new i = 0; i < Cvars; i++)
    {
        get_pcvar_string(g_pColors[i], szColors, charsmax(szColors))

        if(parse(szColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue), szAlpha, charsmax(szAlpha)) == 4)
        {
            g_iColors[i][red] = clamp(str_to_num(szRed), 0, 255)
            g_iColors[i][green] = clamp(str_to_num(szGreen), 0, 255)
            g_iColors[i][blue] = clamp(str_to_num(szBlue), 0, 255)
            g_iColors[i][alpha] = clamp(str_to_num(szAlpha), 0, 255)
        }
        else
        
{
            set_fail_state("Please check formatting on ^"ks_colors_*^" CVars!");
        }
    }
    
    g_flFadeTime 
= get_pcvar_float(g_pFadeTime)
    g_flHoldTime = get_pcvar_float(g_pHoldTime)
}

public CBasePlayer_Killed(id, killer)
{
    if(id != killer)
    {
        if(get_member(id, m_bHeadshotKilled))
        {
            if(is_user_alive(killer) && !is_player_blinded(killer))
                __UTIL_ScreenFade(killer, g_iColors[CVAR_COLORS_HS_KILLER], g_flFadeTime, g_flHoldTime)
            if(is_user_connected(id) && !is_player_blinded(id))
           __UTIL_ScreenFade(killer, g_iColors[CVAR_COLORS_HS_VICTIM], g_flFadeTime, g_flHoldTime)
        }
        else
        
{
            if(is_user_alive(killer) && !is_player_blinded(killer))
           __UTIL_ScreenFade(killer, g_iColors[CVAR_COLORS_DEFAULT], g_flFadeTime, g_flHoldTime)
        }
    }
    return HC_CONTINUE
}

stock __UTIL_ScreenFade(id, iColor[Colors] = {0, 0, 0, 0}, Float:flFxTime = 1.0, Float:flHoldTime = 1.0)
{
    const FFADE_IN = 0x0000

#if defined UNRELIABLE_MESSAGE
    message_begin(MSG_ONE_UNRELIABLE, g_iMsgIdScreenFade, .player = id)
#else
    message_begin(MSG_ONE, g_iMsgIdScreenFade, .player = id)
#endif    
    write_short(FixedUnsigned16(flFxTime, 1<<12))
    write_short(FixedUnsigned16(flHoldTime, 1<<12))
    write_short(FFADE_IN)
    write_byte(iColor[red])
    write_byte(iColor[green])
    write_byte(iColor[blue])
    write_byte(iColor[alpha])
    message_end()
}

stock FixedUnsigned16(Float:flValue, iScale)
{
    new iOutput

    iOutput 
= floatround(flValue * iScale)

    if(iOutput < 0)
        iOutput = 0

    if
(iOutput > 0xFFFF)
        iOutput = 0xFFFF

    return iOutput
}

stock bool:is_player_blinded(id)
{
    return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) >= get_gametime())
    // /* m 2.*/ return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) + Float:get_member(id, m_blindHoldTime) >= get_gametime())
}
Аватара пользователя
Juice
 
Сообщения: 31
Зарегистрирован: 13 дек 2009, 14:30
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет

Re: ScreenFade  [Выполнено]

Сообщение MARSHO » 11 янв 2017, 19:24

Subb98 писал(а):MARSHO, готов выполнить. Оплату принимаю только на QIWI.


Заметано. Когда будет готово? Напиши мне в лс, я сам не умею толком в лс писать
Аватара пользователя
MARSHO
 
Сообщения: 59
Зарегистрирован: 09 фев 2016, 15:39
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.

Re: ScreenFade

Сообщение Juice » 16 янв 2017, 20:02

Исправил ошибку.
Обидно за то, что предыдущий мой пост был проигнорирован.

Код: Выделить всё
// Copyright © 2016 Vaqtincha

#define UNRELIABLE_MESSAGE

#include <amxmodx>
#include <reapi>

enum _:Cvars{ CVAR_COLORS_DEFAULT, CVAR_COLORS_HS_KILLER, CVAR_COLORS_HS_VICTIM }
enum Colors{ red, green, blue, alpha }

new g_iColors[Cvars][Colors], g_pFadeTime, g_pHoldTime, g_pColors[Cvars]
new g_iMsgIdScreenFade, Float:g_flFadeTime, Float:g_flHoldTime

public plugin_init
()
{
    register_plugin("[ReApi] Killer ScreenFade", "0.0.4", "Vaqtincha/MARSHO")

    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    
    RegisterHookChain
(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
    
    g_iMsgIdScreenFade 
= get_user_msgid("ScreenFade")

    g_pColors[CVAR_COLORS_DEFAULT] = register_cvar("ks_colors_default", "0 0 200 40")
    g_pColors[CVAR_COLORS_HS_KILLER] = register_cvar("ks_colors_hs_killer", "0 200 0 40")
    g_pColors[CVAR_COLORS_HS_VICTIM] = register_cvar("ks_colors_hs_victim", "200 0 0 40")
    g_pFadeTime = register_cvar("ks_fadeouttime", "0.5")    // плавное исчезновение
    g_pHoldTime = register_cvar("ks_holdtime", "0.8")        // продолжительность

    Event_NewRound()
}

public Event_NewRound()
{
    new szColors[16], szRed[4], szGreen[4], szBlue[4], szAlpha[4]
    
    for
(new i = 0; i < Cvars; i++)
    {
        get_pcvar_string(g_pColors[i], szColors, charsmax(szColors))

        if(parse(szColors, szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue), szAlpha, charsmax(szAlpha)) == 4)
        {
            g_iColors[i][red] = clamp(str_to_num(szRed), 0, 255)
            g_iColors[i][green] = clamp(str_to_num(szGreen), 0, 255)
            g_iColors[i][blue] = clamp(str_to_num(szBlue), 0, 255)
            g_iColors[i][alpha] = clamp(str_to_num(szAlpha), 0, 255)
        }
        else
        
{
            set_fail_state("Please check formatting on ^"ks_colors_*^" CVars!");
        }
    }
    
    g_flFadeTime 
= get_pcvar_float(g_pFadeTime)
    g_flHoldTime = get_pcvar_float(g_pHoldTime)
}

public CBasePlayer_Killed(id, killer)
{
    if(id != killer)
    {
        if(get_member(id, m_bHeadshotKilled))
        {
            if(is_user_alive(killer) && !is_player_blinded(killer))
                __UTIL_ScreenFade(killer, g_iColors[CVAR_COLORS_HS_KILLER], g_flFadeTime, g_flHoldTime)
            if(is_user_connected(id) && !is_player_blinded(id))
           __UTIL_ScreenFade(id, g_iColors[CVAR_COLORS_HS_VICTIM], g_flFadeTime, g_flHoldTime)
        }
        else
        
{
            if(is_user_alive(killer) && !is_player_blinded(killer))
           __UTIL_ScreenFade(killer, g_iColors[CVAR_COLORS_DEFAULT], g_flFadeTime, g_flHoldTime)
        }
    }
    return HC_CONTINUE
}

stock __UTIL_ScreenFade(id, iColor[Colors] = {0, 0, 0, 0}, Float:flFxTime = 1.0, Float:flHoldTime = 1.0)
{
    const FFADE_IN = 0x0000

#if defined UNRELIABLE_MESSAGE
    message_begin(MSG_ONE_UNRELIABLE, g_iMsgIdScreenFade, .player = id)
#else
    message_begin(MSG_ONE, g_iMsgIdScreenFade, .player = id)
#endif    
    write_short(FixedUnsigned16(flFxTime, 1<<12))
    write_short(FixedUnsigned16(flHoldTime, 1<<12))
    write_short(FFADE_IN)
    write_byte(iColor[red])
    write_byte(iColor[green])
    write_byte(iColor[blue])
    write_byte(iColor[alpha])
    message_end()
}

stock FixedUnsigned16(Float:flValue, iScale)
{
    new iOutput

    iOutput 
= floatround(flValue * iScale)

    if(iOutput < 0)
        iOutput = 0

    if
(iOutput > 0xFFFF)
        iOutput = 0xFFFF

    return iOutput
}

stock bool:is_player_blinded(id)
{
    return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) >= get_gametime())
    // /* m 2.*/ return bool:(Float:get_member(id, m_blindStartTime) + Float:get_member(id, m_blindFadeTime) + Float:get_member(id, m_blindHoldTime) >= get_gametime())
}
 
Аватара пользователя
Juice
 
Сообщения: 31
Зарегистрирован: 13 дек 2009, 14:30
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет

Re: ScreenFade

Сообщение Subb98 » 16 янв 2017, 20:13

Juice писал(а):Обидно за то, что предыдущий мой пост был проигнорирован.

Juice писал(а):Исправил ошибку.

Так может быть, как раз из-за ошибки, которую вы позднее исправили, ваш пост и был проигнорирован?

П.с.: а вообще, ответил в тему я первым, вас, тем не менее, нисколько это не смутило и вы решили предоставить исходник даже перед оплатой, лишь бы оплата за этот заказ досталась вам. Не слишком красиво поступили, обидно тут должно было быть мне. :-) Урок и вам, и мне на будущее.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4787
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1263 раз.
Поблагодарили: 2171 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: ScreenFade

Сообщение Juice » 16 янв 2017, 20:22

Subb98 писал(а):Так может быть, как раз из-за ошибки, которую вы позднее исправили, ваш пост и был проигнорирован?

Гадать не станем, но ёпрст, можно же отписать в тему о том, что убийце при хедшоте рисуется красный фейд. Ведь я сообщил о том что не могу проверить работу плагина.

Subb98 писал(а):П.с.: а вообще, ответил в тему я первым, вас, тем не менее, нисколько это не смутило

Ни капли не смутило! Потому что Ваш пост еще не был опубликован когда я стал вносить коррективы в код из ОП поста :)
Аватара пользователя
Juice
 
Сообщения: 31
Зарегистрирован: 13 дек 2009, 14:30
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет

Re: ScreenFade

Сообщение Subb98 » 16 янв 2017, 20:30

Juice писал(а):Гадать не станем, но ёпрст, можно же отписать что убийце при любом раскладе рисуется красный фейд. Ведь я сообщил о том что не могу проверить работу плагина.

Верно, гадать не за чем, это ничего не изменит.

Juice писал(а):Ни капли не смутило! Потому что Ваш пост еще не был опубликован когда я стал вносить коррективы в код из ОП поста :)

А какая разница, когда вы стали редактировать код? Это ваше личное дело. :-) Вы не заявили в теме, что готовы выполнять работу, следовательно, занимались своими делами, я это так понимаю. Так или иначе, мой пост появился в теме раньше на 19 минут, на него стоило бы обратить внимание. :-)

Добавлено спустя 2 минуты 58 секунд:
П.с.: вы, разумеется, вольны работать в таком формате, запретить вам никто не в праве. И, думаю, риски такого подхода тоже не нужно вам объяснять. Но тогда странно слышать, что вам обидно: вы же сами так работаете. :-)
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4787
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1263 раз.
Поблагодарили: 2171 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

След.

Вернуться в Поиск исполнителей / заказчиков

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0