Создание ночного видения

Сообщения
73
Реакции
8
Всем привет!

Хочу на сервере добавить ночное видение с помощью плагина.
Стандартное видение, на сколько я знаю, сильно жрет fps на слабых пк.

На одном сервере увидел, что ночное видение как будто убирает с карты все тени для определенного игрока, карта становится ярче и с fps все супер.
Как можно реализовать подобное ?
1 Июл 2019
17603
17604
 

Download all Attachments

  • 1.3 MB Просмотры: 260
  • 1.7 MB Просмотры: 261
Сообщения
133
Реакции
441
Помог
2 раз(а)
Раз пример:
Код:
#include <amxmodx>
#include <fakemeta>

new const PLUGIN_VERSION[] = "1.0"

new g_nightvision[33]

new g_default_map_light[32]

new g_fwLightStyle

new g_msgScreenFade

public plugin_precache()
{
    register_plugin("New NightVision", PLUGIN_VERSION, "Fai")
   
    g_fwLightStyle = register_forward(FM_LightStyle, "fw_LightStyle")
}

public plugin_init()
{
    unregister_forward(FM_LightStyle, g_fwLightStyle)
   
    g_msgScreenFade = get_user_msgid("ScreenFade")
   
    register_message(g_msgScreenFade, "message_screenfade")
    register_message(get_user_msgid("NVGToggle"), "message_nvgtoggle")
   
    set_cvar_num("sv_skycolor_r", 0)
    set_cvar_num("sv_skycolor_g", 0)
    set_cvar_num("sv_skycolor_b", 0)
}

public fw_LightStyle(style, const val[])
{
    if (!style)
        copy(g_default_map_light, charsmax(g_default_map_light), val)
}

public message_screenfade(msg_id, msg_dest, msg_entity)
{
    if (!g_nightvision[msg_entity])
        return PLUGIN_CONTINUE;
   
    if (get_msg_arg_int(4) != 255 || get_msg_arg_int(5) != 255 || get_msg_arg_int(6) != 255 || get_msg_arg_int(7) < 200)
        return PLUGIN_CONTINUE;
   
    remove_task(msg_entity)
    set_task(get_msg_arg_int(1) / 4096.0, "task_restore_screenfade", msg_entity)
   
    return PLUGIN_CONTINUE;
}

public message_nvgtoggle(msg_id, msg_dest, msg_entity)
{
    static flag
    flag = get_msg_arg_int(1)
   
    message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, msg_entity)
    write_byte(0)
   
    if (flag)
        write_string("#")
    else
        write_string(g_default_map_light)
   
    message_end()
   
    if (!task_exists(msg_entity))
    {
        message_begin(MSG_ONE, g_msgScreenFade, _, msg_entity)
        write_short((1<<12))
        write_short(0)
        write_short(0x0004)
       
        if (flag)
        {
            write_byte(128)
            write_byte(255)
            write_byte(128)
            write_byte(73)
        }
        else
        {
            write_byte(0)
            write_byte(0)
            write_byte(0)
            write_byte(0)
        }
       
        message_end()
    }
   
    g_nightvision[msg_entity] = flag
   
    return PLUGIN_HANDLED;
}

public task_restore_screenfade(id)
{
    if (!g_nightvision[id])
        return;
   
    message_begin(MSG_ONE, g_msgScreenFade, _, id)
    write_short((1<<12))
    write_short(0)
    write_short(0x0004)
    write_byte(128)
    write_byte(255)
    write_byte(128)
    write_byte(73)
    message_end()
}
Два пример:
Код:
#include <amxmodx>
#include <fakemeta>

#include <q>

#pragma semicolon 1

#define PLUGIN "Q::Nightvision"
#define VERSION "1.1b"
#define AUTHOR "Quaker"

new g_cvar_nightvision;
new g_cvar_nightvision_type;

new g_player_nightvision[33];

new g_forward_LightStyle;

new g_map_defaultLightStyle[32];

public plugin_precache() {
    g_forward_LightStyle = register_forward(FM_LightStyle, "forward_LightStyle");
}

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    g_cvar_nightvision = register_cvar("q_nightvision", "1");
    g_cvar_nightvision_type = register_cvar("q_nightvision_type", "1");
    
    unregister_forward(FM_LightStyle, g_forward_LightStyle);
    register_forward(FM_AddToFullPack, "forward_AddToFullPack", 1);
    
    register_clcmd("nightvision", "clcmd_nightvision");
}

public plugin_cfg() {
    q_registerCvar(g_cvar_nightvision, "1", "Toggle nightvision plugin.");
    q_registerCvar(g_cvar_nightvision_type, "1", "Set nightvision type:^n1 - Light area around the player^n2 - Change map light style. Do not use this if there is another plugin that messes with the map light style (e.g. zombie mods).");
}

public client_connect(id) {
    g_player_nightvision[id] = false;
}

public clcmd_nightvision(id, level, cid) {
    switch(get_pcvar_num(g_cvar_nightvision_type)) {
    case 1: {
        toggle_typeOne(id);
    }
    case 2: {
        toggle_typeTwo(id);
    }
    default: {
        log_amx("Error! Invalid q_nightvision_type cvar value. Using default nightvision type.");
        toggle_typeOne(id);
    }
    }
    
    return PLUGIN_HANDLED;
}

toggle_typeOne(id) {
    if(!get_pcvar_num(g_cvar_nightvision)) {
        switch(g_player_nightvision[id]) {
        case 1: {
            g_player_nightvision[id] = false;
        }
        case 2: {
            g_player_nightvision[id] = false;
            
            message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, id);
            write_byte(0);
            write_string(g_map_defaultLightStyle);
            message_end();
        }
        }
        
        return;
    }
    
    switch(g_player_nightvision[id]) {
    case 0: {
        g_player_nightvision[id] = 1;
    }
    case 1: {
        g_player_nightvision[id] = 0;
    }
    case 2: {
        g_player_nightvision[id] = 0;
        
        message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, id);
        write_byte(0);
        write_string(g_map_defaultLightStyle);
        message_end();
    }
    }
}

toggle_typeTwo(id) {
    if(!get_pcvar_num(g_cvar_nightvision)) {
        switch(g_player_nightvision[id]) {
        case 1: {
            g_player_nightvision[id] = false;
        }
        case 2: {
            g_player_nightvision[id] = false;
            
            message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, id);
            write_byte(0);
            write_string(g_map_defaultLightStyle);
            message_end();
        }
        }
        
        return;
    }
    
    switch(g_player_nightvision[id]) {
    case 0: {
        g_player_nightvision[id] = 2;
        
        message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, id);
        write_byte(0);
        write_string("#");
        message_end();
    }
    case 1: {
        g_player_nightvision[id] = 0;
    }
    case 2: {
        g_player_nightvision[id] = 0;
        
        message_begin(MSG_ONE_UNRELIABLE, SVC_LIGHTSTYLE, _, id);
        write_byte(0);
        write_string(g_map_defaultLightStyle);
        message_end();
    }
    }
}

public forward_AddToFullPack(es_handle, e, ent, host, hostflags, player, pset) {
    if(player && (g_player_nightvision[host] == 1) && (ent == host)) {
        set_es(es_handle, ES_Effects, get_es(es_handle, ES_Effects) | EF_BRIGHTLIGHT);
    }
}

public forward_LightStyle(style, const value[]) {
    if(!style) {
        copy(g_map_defaultLightStyle, charsmax(g_map_defaultLightStyle), value);
    }
}
 
Последнее редактирование:

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

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