Shield Teleport

Shield Teleport 1.2.5

Нет прав для скачивания
C++:
/*
 * Authors:
 * - Original SourceMod plugin by: Drumanid (https://dev-cs.ru/members/2742/)
 */

#include <amxmodx>
#include <hamsandwich>
#include <reapi>

#pragma semicolon 1

public stock const PluginName[] = "Shield Teleport";
public stock const PluginVersion[] = "1.2.5";
public stock const PluginAuthor[] = "twisterniq";
public stock const PluginURL[] = "https://github.com/twisterniq/Shield-Teleport";
public stock const PluginDescription[] = "Gives protection to player after using a teleport. Moreover, player cannot do damage at this time";

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

#define is_user_valid(%0) (1 <= %0 <= MaxClients)

const TASK_ID_TIMESHIELD = 100;

new Float:g_flTime[MAX_PLAYERS + 1];

enum _:CVARS
{
    Float:CVAR_TIMER,
    CVAR_GLOW,
    CVAR_TIMEBLOCK,
    CVAR_TEAM,
    CVAR_MESSAGE,
    Float:CVAR_MESSAGE_HUD_X,
    Float:CVAR_MESSAGE_HUD_Y,
    Float:CVAR_MESSAGE_HUD_TIME
};

new g_eCvar[CVARS];

new g_iSyncHudMessage;

public plugin_init()
{
#if AMXX_VERSION_NUM == 190
    register_plugin(
        .plugin_name = PluginName,
        .version = PluginVersion,
        .author = PluginAuthor);
#endif

    register_dictionary("shield_teleport.txt");

    RegisterHookChain(RG_CBasePlayer_TraceAttack, "@OnPlayerTraceAttack_Pre", false);
    RegisterHam(Ham_Touch, "trigger_teleport", "@OnTouchTriggerTeleport_Post", true, true);

    g_iSyncHudMessage = CreateHudSyncObj();

    func_RegisterCvars();
}

func_RegisterCvars()
{
    bind_pcvar_float(create_cvar(
        .name = "shield_teleport_timer",
        .string = "3.0",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_TIMER"),
        .has_min = true,
        .min_val = 0.1), g_eCvar[CVAR_TIMER]);

    bind_pcvar_num(create_cvar(
        .name = "shield_teleport_glow",
        .string = "1",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_GLOW"),
        .has_min = true,
        .min_val = 0.0,
        .has_max = true,
        .max_val = 1.0), g_eCvar[CVAR_GLOW]);

    bind_pcvar_num(create_cvar(
        .name = "shield_teleport_time_block",
        .string = "10",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_TIME_BLOCK"),
        .has_min = true,
        .min_val = 0.0), g_eCvar[CVAR_TIMEBLOCK]);

    bind_pcvar_num(create_cvar(
        .name = "shield_teleport_team",
        .string = "1",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_TEAM"),
        .has_min = true,
        .min_val = 1.0,
        .has_max = true,
        .max_val = 3.0), g_eCvar[CVAR_TEAM]);

    bind_pcvar_num(create_cvar(
        .name = "shield_teleport_message",
        .string = "2",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_MESSAGE"),
        .has_min = true,
        .min_val = 0.0,
        .has_max = true,
        .max_val = 3.0), g_eCvar[CVAR_MESSAGE]);

    bind_pcvar_float(create_cvar(
        .name = "shield_message_hud_x",
        .string = "-1.0",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_HUD_X")), g_eCvar[CVAR_MESSAGE_HUD_X]);

    bind_pcvar_float(create_cvar(
        .name = "shield_message_hud_y",
        .string = "0.70",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_HUD_Y")), g_eCvar[CVAR_MESSAGE_HUD_Y]);

    bind_pcvar_float(create_cvar(
        .name = "shield_message_hud_time",
        .string = "3.0",
        .flags = FCVAR_NONE,
        .description = fmt("%L", LANG_SERVER, "SHIELD_TELEPORT_CVAR_HUD_TIME"),
        .has_min = true,
        .min_val = 0.1), g_eCvar[CVAR_MESSAGE_HUD_TIME]);

    AutoExecConfig(true, "shield_teleport");
}

public client_disconnected(id)
{
    remove_task(id+TASK_ID_TIMESHIELD);
}

@OnPlayerTraceAttack_Pre(const iVictim, iAttacker, Float:flDamage, Float:flVecDir[3], iTraceHandle, iBitsDamageType)
{
    #pragma unused flDamage, flVecDir, iTraceHandle, iBitsDamageType

    if (is_user_connected(iAttacker) && (task_exists(iVictim+TASK_ID_TIMESHIELD) || task_exists(iAttacker+TASK_ID_TIMESHIELD)))
    {
        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}

@OnTouchTriggerTeleport_Post(const iEnt, const id)
{
    if (is_user_valid(id))
    {
        func_TeleportUse(id);
    }
}

func_TeleportUse(const id)
{
    if (g_eCvar[CVAR_TEAM] != 1 && (get_member(id, m_iTeam) != (g_eCvar[CVAR_TEAM] - 1)))
    {
        return;
    }

    new Float:flGameTime = get_gametime();

    if (g_flTime[id] > flGameTime)
    {
        func_ShowMessage(id, "%l", "SHIELD_TELEPORT_COOLDOWN", g_flTime[id] - flGameTime);
        return;
    }

    g_flTime[id] = flGameTime + g_eCvar[CVAR_TIMEBLOCK];
    func_ShowMessage(id, "%l", "SHIELD_TELEPORT_ENABLED", g_eCvar[CVAR_TIMER]);

    remove_task(id+TASK_ID_TIMESHIELD);
    set_task(g_eCvar[CVAR_TIMER], "@task_TimeShield", id+TASK_ID_TIMESHIELD);

    if (!g_eCvar[CVAR_GLOW])
    {
        return;
    }

    rg_set_user_rendering(id, kRenderFxGlowShell, 165.0, 42.0, 42.0, kRenderNormal, 255.0);
}

@task_TimeShield(id)
{
    id -= TASK_ID_TIMESHIELD;

    if (!is_user_alive(id))
    {
        remove_task(id+TASK_ID_TIMESHIELD);
        return;
    }

    if (g_eCvar[CVAR_GLOW])
    {
        rg_set_user_rendering(id);
    }

    remove_task(id+TASK_ID_TIMESHIELD);
    func_ShowMessage(id, "%l", "SHIELD_TELEPORT_DISABLED");
}

func_ShowMessage(const id, szMessage[], any:...)
{
    new szText[192];
    vformat(szText, charsmax(szText), szMessage, 3);

    enum { message_type_chat = 1, message_type_center, message_type_hud };

    switch(g_eCvar[CVAR_MESSAGE])
    {
        case message_type_chat:
        {
            client_print_color(id, print_team_default, szText);
        }
        case message_type_center:
        {
            client_print(id, print_center, szText);
        }
        case message_type_hud:
        {
            set_hudmessage(255, 255, 255, g_eCvar[CVAR_MESSAGE_HUD_X], g_eCvar[CVAR_MESSAGE_HUD_Y], 0, 0.5, g_eCvar[CVAR_MESSAGE_HUD_TIME], 0.5, 0.5);
            ShowSyncHudMsg(id, g_iSyncHudMessage, szText);
        }
    }
}

stock rg_set_user_rendering(id, iRenderFx = kRenderFxNone, Float:flRed = 255.0, Float:flGreen = 255.0, Float:flBlue = 255.0, iRender = kRenderNormal, Float:flAmount = 16.0)
{
    new Float:flRenderColor[3];
    flRenderColor[0] = flRed;
    flRenderColor[1] = flGreen;
    flRenderColor[2] = flBlue;

    set_entvar(id, var_renderfx, iRenderFx);
    set_entvar(id, var_rendercolor, flRenderColor);
    set_entvar(id, var_rendermode, iRender);
    set_entvar(id, var_renderamt, flAmount);
}
Назад
Верх