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

Убрать свечение игрока при использовании фонарика

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

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

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

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

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

Убрать свечение игрока при использовании фонарика

Сообщение hANSON » 12 июн 2018, 17:46

Всем привет!
Озадачился убрать свечение вокруг игрока при использовании фонарика (impulse 100).Причина думаю всем известна - на маломощных видеокартах начинаются лаги.
Попробовал вывод мессаги TE_DLIGHT через client_PreThink, но стало жалко процессор. Подскажите, есть ли альтернативные варианты убрать свечение вокруг игрока при использовании фонарика?
Код: Выделить всё
/* **************************** CUSTOMIZATION AREA ******************************** */

new const SOUND_FLASHLIGHT_ON[] = "items/flashlight1.wav"
new const SOUND_FLASHLIGHT_OFF[] = "items/flashlight1.wav"

/* ******************************************************************************** */

#define MAX_PLAYERS   32


new g_iMaxPlayers

new bool
:g_bFlashLight[MAX_PLAYERS+1]

new g_msgidFlashlight

new g_iShowAll 
= 0
new g_iRadius 
= 4
new g_iDistanceMax 
= 2000

public plugin_precache
()
{
    precache_sound(SOUND_FLASHLIGHT_ON)
    precache_sound(SOUND_FLASHLIGHT_OFF)
}

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    
    register_impulse
(100, "Impulse_100")
    g_msgidFlashlight = get_user_msgid("Flashlight")
    
    register_event
("HLTV", "Event_HLTV_newround", "a", "1=0", "2=0")
    register_event("DeathMsg", "Event_DeathMsg", "a")
    
}

public client_putinserver(id)
{
    reset(id)
}

public Event_HLTV_newround()
{
    for(new id=1; id<=g_iMaxPlayers; id++)
    {
        reset(id)
    }
}

public Event_DeathMsg()
{
    reset(read_data(2))
}

reset(id)
{
    if( 1 <= id <= g_iMaxPlayers )
    {
        g_bFlashLight[id] = false
    
}
}
 

public Impulse_100
( id )
{

    if(is_user_alive(id))
    {
        if( g_bFlashLight[id] ) FlashlightTurnOff(id)
        else FlashlightTurnOn(id)
    }
    
    return PLUGIN_CONTINUE
}

public client_PreThink(id)
{
    if(g_bFlashLight[id])
    {
        Make_FlashLight(id)
    }
}

Make_FlashLight(id)
{
    static iOrigin[3], iAim[3], iDist
    get_user_origin
(id, iOrigin, 1)
    get_user_origin(id, iAim, 3)
    
    iDist 
= get_distance(iOrigin, iAim)
    
    if
( iDist > g_iDistanceMax )
    return
    
    static iDecay
, iAttn
    
    iDecay 
= iDist * 255 / g_iDistanceMax
    iAttn 
=256 + iDecay * 5 // barney/dontaskme
    
    if
( g_iShowAll )
    {
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    }
    else
    
{
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id)
    }
    write_byte( TE_DLIGHT )
    write_coord( iAim[0] )
    write_coord( iAim[1] )
    write_coord( iAim[2] )
    write_byte( g_iRadius )
    write_byte( 255  )
    write_byte( 255  )
    write_byte( 255  )
    write_byte( 1 )
    write_byte( iDecay )
    message_end()
}

FlashlightTurnOff(id)
{
    emit_sound(id, CHAN_WEAPON, SOUND_FLASHLIGHT_OFF, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    
    g_bFlashLight
[id] = false
    
    FlashlightHudDraw
(id, 0)
    
}

FlashlightTurnOn(id)
{
    emit_sound(id, CHAN_WEAPON, SOUND_FLASHLIGHT_ON, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)    
    g_bFlashLight
[id] = true    
    FlashlightHudDraw
(id, 1)    
}

FlashlightHudDraw(id, iFlag)
{
        if( g_iShowAll )
        {
                emessage_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
                ewrite_byte(iFlag)
                ewrite_byte(100)
                emessage_end()
            }
        else
        
{
                message_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
                write_byte(iFlag)
                write_byte(100)
                message_end()
            }
}
 
Аватара пользователя
hANSON
 
Сообщения: 1
Зарегистрирован: 12 апр 2017, 01:03
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Убрать свечение игрока при использовании фонарика

Сообщение KOTOKU » 14 июн 2018, 22:53

Код: Выделить всё
set_user_rendering(id

Пихать в Impulse_100 в проверку if(is_user_alive(id)) после кода else
Но этот способ будет постоянно сбрасывать свечение даже если его нет, но суть ясна.
Разрабатываю мод "JailBreak" с нуля
Разработка мода началась: 09.02.17 :zzz:
Last Update: 0.4 Alpha [01.12.17]
Тестовый IP: 195.2.252.112:27028[NEW]
Готовность: 80%
Мы в ВК: VK.COM/LM.Pawn
P.S.: Ушел в разработку MMORPG, пока нет планов в AMXX
Аватара пользователя
KOTOKU
 
Сообщения: 714
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 8 раз.
Поблагодарили: 107 раз.
Опыт программирования: Больше трех лет


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

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

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