Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Team Semiclip by ConnorMcLeod.

Статус пользователя mysubcult
сообщение 13.12.2013, 14:59
Сообщение #1
Стаж: 12 лет

Сообщений: 382
Благодарностей: 28
Полезность: 86

Народ, всем доброго времени суток, на аленях нашел хороший плагин semiclip, но в нем одно не нравится - прозрачность. Когда игрок находится практически в игроке, то вообще его можно сказать не видно. Собственно плагин ниже, помогите пожалуйста, либо убрать вообще прозрачность, либо ее уменьшить.
Скрытый текст
Код
#define SHOW_NAMES_WHEN_AIM
// #define ENABLE_SHOTS_DAMAGE

#define SEMICLIP_RENDERING_RADIUS 400.0

// #define CHATCOLOR // if you are runing plugin : http://forums.alliedmods.net/showthread.php?p=851160

// /* DON'T EDIT BELOW */

#include < amxmodx >
#include < engine >
#include < fakemeta >
#include < hamsandwich >

#if defined CHATCOLOR
#include < chatcolor >
#endif

#pragma semicolon 1

#define PLUGIN "Team SemiClip"
new const VERSION[] = "0.3.4";

const Float:SEMICLIP_RADIUS = SEMICLIP_RENDERING_RADIUS;

const m_iTeam = 114;

const GROUP_OP_NAND = 1;
#define ENGINE_SETGROUPMASK(%0,%1)    engfunc(EngFunc_SetGroupMask, %0, %1)

const groupNone = 0;

new const CLASS_PLAYER[] = "player";

new g_iMaxPlayers;
#define IsPlayer(%0)    ( 1 <= (%0) <= g_iMaxPlayers )

#define MaskEnt(%0)    ( 1<<(%0 & 31) )

new g_bitIsPlayerInSphere;
#define MarkPlayerInSphere(%0)    g_bitIsPlayerInSphere |= MaskEnt(%0)
#define IsPlayerInSphere(%0)    ( g_bitIsPlayerInSphere & MaskEnt(%0) )

new g_bitIsPlayerInTeam;
#define MarkPlayerInTeam(%0)    g_bitIsPlayerInTeam |= MaskEnt(%0)
#define IsPlayerInTeam(%0)    ( g_bitIsPlayerInTeam & MaskEnt(%0) )

new g_bitIsPlayerAlive;
#define MarkPlayerAlive(%0)    g_bitIsPlayerAlive |= MaskEnt(%0)
#define IsPlayerAlive(%0)    ( g_bitIsPlayerAlive & MaskEnt(%0) )

new g_bitBots;
#define MarkPlayerBot(%0)    g_bitBots |= MaskEnt(%0)
#define ClearPlayerBot(%0)    g_bitBots &= ~MaskEnt(%0)
#define IsUserBot(%0)        ( g_bitBots & MaskEnt(%0) )

new g_bitSeeingPlayers;
#define MarkPlayerSee(%0)        g_bitSeeingPlayers |= MaskEnt(%0)
#define ClearPlayerSee(%0)        g_bitSeeingPlayers &= ~MaskEnt(%0)
#define IsPlayerSeeing(%0)        ( g_bitSeeingPlayers & MaskEnt(%0) )
#define TogglePlayerSeeing(%0)    g_bitSeeingPlayers ^= MaskEnt(%0)

new g_iPlayers[32], g_iNum;

new g_iLastPlayerIndex;

new g_iFhAddToFullPackPost;

new bool:g_bReadPackets;
new bool:g_bClientMessages;

#if defined SHOW_NAMES_WHEN_AIM
    new HamHook:g_iHhPreThink, HamHook:g_iHhPreThinkPost, bool:g_bPreThinkHooked;
#endif

#if defined ENABLE_SHOTS_DAMAGE
    new HamHook:g_iHhPostThink, HamHook:g_iHhPostThinkPost, bool:g_bPostThinkHooked;
#endif

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, "ConnorMcLeod" );
    new pCvar = register_cvar("team_semiclip_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
    set_pcvar_string(pCvar, VERSION);

    register_forward(FM_CmdStart, "OnCmdStart_P", true);

#if defined SHOW_NAMES_WHEN_AIM
    DisableHamForward( g_iHhPreThink = RegisterHam(Ham_Player_PreThink, CLASS_PLAYER, "OnCBasePlayer_PreThink", false) );
    DisableHamForward( g_iHhPreThinkPost = RegisterHam(Ham_Player_PreThink, CLASS_PLAYER, "OnCBasePlayer_PreThink_P", true) );
#endif
    
#if defined ENABLE_SHOTS_DAMAGE
    DisableHamForward( g_iHhPostThink = RegisterHam(Ham_Player_PostThink, CLASS_PLAYER, "OnCBasePlayer_PostThink", false) );
    DisableHamForward( g_iHhPostThinkPost = RegisterHam(Ham_Player_PostThink, CLASS_PLAYER, "OnCBasePlayer_PostThink_P", true) );
#endif

    RegisterHam(Ham_Spawn, CLASS_PLAYER, "OnCBasePlayer_Spawn_P", true);
    RegisterHam(Ham_Killed, CLASS_PLAYER, "OnCBasePlayer_Killed_P", true);

    register_forward(FM_UpdateClientData, "OnUpdateClientData_P", true);

    g_iMaxPlayers = get_maxplayers();

    register_clcmd("say /invis", "ClCmd_Players");
    register_clcmd("say /players", "ClCmd_Players");
}

public client_putinserver(id)
{
    if( is_user_bot(id) )
    {
        MarkPlayerBot(id);
    }
    else
    {
        ClearPlayerBot(id);
    }
    MarkPlayerSee(id);
}

public OnCmdStart_P(id)
{
    if( !g_bReadPackets )
    {
        g_bReadPackets = true;

        static plr;
        get_players g_iPlayers, g_iNum, "a";
        for(--g_iNum; g_iNum>=0; g_iNum--)
        {
            plr = g_iPlayers[ g_iNum ];
            entity_set_int plr, EV_INT_groupinfo, get_pdata_int(plr, m_iTeam);
        }
        g_iLastPlayerIndex = 0;
    }

    if( g_iLastPlayerIndex && is_user_alive(g_iLastPlayerIndex) )
    {
        entity_set_int g_iLastPlayerIndex, EV_INT_groupinfo, get_pdata_int(g_iLastPlayerIndex, m_iTeam);
    }

    if( is_user_alive(id) )
    {
        static group;
        group = get_pdata_int(id, m_iTeam);
        entity_set_int id, EV_INT_groupinfo, group;
        ENGINE_SETGROUPMASK(group, GROUP_OP_NAND);
        if( IsPlayerSeeing(id) )
        {
#if defined SHOW_NAMES_WHEN_AIM
            if( !g_bPreThinkHooked )
            {
                EnableHamForward g_iHhPreThink;
                EnableHamForward g_iHhPreThinkPost;
                g_bPreThinkHooked = true;
            }
#endif
#if defined ENABLE_SHOTS_DAMAGE
            if( !g_bPostThinkHooked )
            {
                EnableHamForward g_iHhPostThink;
                EnableHamForward g_iHhPostThinkPost;
                g_bPostThinkHooked = true;
            }
#endif
        }
        else // empty statement when nothing is defined ?
        {
#if defined SHOW_NAMES_WHEN_AIM
            if( g_bPreThinkHooked )
            {
                DisableHamForward g_iHhPreThink;
                DisableHamForward g_iHhPreThinkPost;
                g_bPreThinkHooked = false;
            }
#endif
#if defined ENABLE_SHOTS_DAMAGE
            if( g_bPostThinkHooked )
            {
                DisableHamForward g_iHhPostThink;
                DisableHamForward g_iHhPostThinkPost;
                g_bPostThinkHooked = false;
            }
#endif
        }
    }
    else
    {
        entity_set_int id, EV_INT_groupinfo, groupNone;
        g_iLastPlayerIndex = id;
#if defined SHOW_NAMES_WHEN_AIM
        if( g_bPreThinkHooked )
        {
            DisableHamForward g_iHhPreThink;
            DisableHamForward g_iHhPreThinkPost;
            g_bPreThinkHooked = false;
        }
#endif
#if defined ENABLE_SHOTS_DAMAGE
        if( g_bPostThinkHooked )
        {
            DisableHamForward g_iHhPostThink;
            DisableHamForward g_iHhPostThinkPost;
            g_bPostThinkHooked = false;
        }
#endif
    }
}

public OnCBasePlayer_PreThink(id)
{
    entity_set_int id, EV_INT_groupinfo, groupNone;
}

public OnCBasePlayer_PreThink_P(id)
{
    entity_set_int id, EV_INT_groupinfo, get_pdata_int(id, m_iTeam);
}

public OnCBasePlayer_PostThink(id)
{
    entity_set_int id, EV_INT_groupinfo, groupNone;
}

public OnCBasePlayer_PostThink_P(id)
{
    entity_set_int id, EV_INT_groupinfo, get_pdata_int(id, m_iTeam);
}

public OnCBasePlayer_Spawn_P(id)
{
    if( is_user_alive(id) )
    {
        entity_set_int id, EV_INT_groupinfo, get_pdata_int(id, m_iTeam);
    }
}

public OnCBasePlayer_Killed_P(id)
{
    if( !is_user_alive(id) )
    {
        entity_set_int id, EV_INT_groupinfo, groupNone;
    }
}

// maybe this could be moved to first UpdateClientData ??
// in any ways, SV_Physics gonna be executed with clipping players
public server_frame()
{
    g_iLastPlayerIndex = 0;
    g_bReadPackets = false;
    g_bClientMessages = false;

    static id;
    get_players g_iPlayers, g_iNum, "a";
    for(--g_iNum; g_iNum>=0; g_iNum--)
    {
        id = g_iPlayers[ g_iNum ];
        entity_set_int id, EV_INT_groupinfo, 0;
    }
}

public OnUpdateClientData_P(id, sendweapons, cd)
{
    if( IsUserBot(id) )
    {
        return;
    }

    if( !g_bClientMessages )
    {
        g_bClientMessages = true;

        g_bitIsPlayerAlive = 0;
        get_players g_iPlayers, g_iNum, "a";
        for(--g_iNum; g_iNum>=0; g_iNum--)
        {
            MarkPlayerAlive( g_iPlayers[ g_iNum ] ); // safe to cache alive players here because nobody can die/spawn during rendering
        }
    }

    if( IsPlayerAlive(id) )
    {
        if( IsPlayerSeeing(id) )
        {
            static player;

            g_bitIsPlayerInTeam = 0;

            get_players g_iPlayers, g_iNum, "ae", get_pdata_int(id, m_iTeam) == 1 ? "TERRORIST" : "CT";

            for(--g_iNum; g_iNum>=0; g_iNum--)
            {
                player = g_iPlayers[ g_iNum ];
                if( player != id )
                {
                    MarkPlayerInTeam( player );
                }
            }
            g_iNum = find_sphere_class(id, CLASS_PLAYER, SEMICLIP_RADIUS, g_iPlayers, g_iMaxPlayers);
            
            g_bitIsPlayerInSphere = 0;
            for(--g_iNum; g_iNum>=0; g_iNum--)
            {
                player = g_iPlayers[ g_iNum ];
                if( player != id && IsPlayerInTeam( player ) )
                {
                    MarkPlayerInSphere( player );
                }
            }
            if( g_bitIsPlayerInSphere )
            {
                if( !g_iFhAddToFullPackPost )
                {
                    g_iFhAddToFullPackPost = register_forward(FM_AddToFullPack, "OnAddToFullPack_P", true);
                }
            }
            else if( g_iFhAddToFullPackPost )
            {
                unregister_forward FM_AddToFullPack, g_iFhAddToFullPackPost, true;
                g_iFhAddToFullPackPost = 0;
            }
        }
        else if( g_iFhAddToFullPackPost )
        {
            unregister_forward FM_AddToFullPack, g_iFhAddToFullPackPost, true;
            g_iFhAddToFullPackPost = 0;
        }
    }
}

public OnAddToFullPack_P(es, e, ent, id, hostflags, player, pSet)
{
    if( player )
    {
        if( IsPlayerAlive(ent) && IsPlayerInSphere(ent) )
        {
            set_es es, ES_Solid, SOLID_NOT;
            set_es es, ES_RenderMode, kRenderTransAlpha;
            set_es es, ES_RenderAmt, floatround(entity_range(id, ent) * 255.0 / SEMICLIP_RADIUS, floatround_floor);
        }
    }
    else
    {
        unregister_forward FM_AddToFullPack, g_iFhAddToFullPackPost, true;
        g_iFhAddToFullPackPost = 0;
    }
}

public ClCmd_Players(id)
{
    TogglePlayerSeeing(id);
#if defined CHATCOLOR
    client_print_color(id, Red, "^4[Invis] ^1Players are now %sisible.", IsPlayerSeeing(id) ? "^4V" :"^3Inv");
#else
    client_print(id, print_chat, "[Invis] Players are now %sisible.", IsPlayerSeeing(id) ? "V" :"Inv");
#endif
}

p.s. прозрачность изменяется в зависимости от расстояния до игрока, т.е. чем он билже, тем он прозрачнее, как-нибудь вот это хочу поправить, или может расстояние изменить, на котором прозрачность увеличивается, потому что когда игрок буквально в метре от меня, я его уже можно сказать не вижу вообще.
p.s.s из-за этого плагина у стимов пропадают местами звуки и жаловались на стрельбу.

Отредактировал: mysubcult, - 13.12.2013, 15:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
CannibaL
сообщение 13.12.2013, 16:02
Сообщение #2
Стаж: 12 лет

Сообщений: 415
Благодарностей: 59
Полезность: 0

Ты этот нашел ? тык я поставил доволен ! глюков ошибок нет !
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mysubcult
сообщение 13.12.2013, 16:12
Сообщение #3
Стаж: 12 лет

Сообщений: 382
Благодарностей: 28
Полезность: 86

Цитата(CannibaL @ 13.12.2013, 18:02) *
Ты этот нашел ? тык я поставил доволен ! глюков ошибок нет !

Неа, но щас этот попробую.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 13.12.2013, 16:31
Сообщение #4
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Растояние в юнитах:
Код:
#define SEMICLIP_RENDERING_RADIUS 400.0

Вот этот кусок отвечает за саму прозрачность:
Код:
  set_es es, ES_RenderMode, kRenderTransAlpha;
set_es es, ES_RenderAmt, floatround(entity_range(id, ent) * 255.0 / SEMICLIP_RADIUS, floatround_floor);

Где RenderAmt - яркость игрока :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: