[CS:S/CS:GO] BuyZone Protector

Тема в разделе "Утверждённые плагины", создана пользователем Reiko1231, 16 ноя 2013.

  1. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    BuyZone Protector
    Текущая версия: 2.1

    Описание:
    Плагин защищает игроков на их закупочной зоне определенный промежуток времени от начала раунда. Как только игрок покидает зону, защита снимается. Если он вернется, то, если время защиты не истекло, защита будет возвращена.
    Так же есть возможность установить вокруг закупочных зон линии, обозначающие область защиты (подробнее об этом в консольных переменных плагина). По истечению времени защиты они пропадают.

    [​IMG][​IMG]
    [​IMG][​IMG]

    Требования:

    Поддерживаются игры:
    • CS: Source
    • CS: Global Offensive

    Установка:
    Распаковать содержимое архива в папку addons

    Переменные:
    Код:
    [I]sm_bzp_prottime[/I] - как долго в секундах будет длится защита зон покупок. По умолчанию: 20.0.
    [I]sm_bzp_drawzone[/I] - рисовать (1) или нет (0) зону защиты. По умолчанию: 1.
    [I]sm_bzp_ctlinecolor[/I] - цвет зоны КТ. По умолчанию: 0 0 255 255.
    [I]sm_bzp_tlinecolor[/I] - цвет зоны Т. По умолчанию: 255 0 0 255.
    [I]sm_bzp_restrictshoot[/I] - запрет (1) или нет (0) стрельбы, будучи защищенным. По умолчанию: 1.
    [I]sm_bzp_changecolor[/I] - менять (1) или нет (0) цвет игрока в своей зоне защиты. По умолчанию: 1.
    [I]sm_bzp_changecolorct[/I] - цвет защищенного КТ. По умолчанию: 0 0 255 125.
    [I]sm_bzp_changecolort[/I] - цвет защищенного Т. По умолчанию: 255 0 0 125.
    [I]sm_bzp_notice[/I] - выводить (1) или нет (0) сообщения о входе или выходе из зоны защиты. По умолчанию: 1.
    Код:
    (17-07-2013) Версия 1.0 - появление плагина. Возможна только защита зон.
    (16-11-2013) Версия 2.0 - плагин переписан, добавлена возможность обозначения зон закупок.
    (17-11-2013) Версия 2.1 - добавлена возможность вывода сообщений игрокам в чат, изменения цвета игроков, запрета стрельбы из зон защиты.
     

    Вложения:

    Последнее редактирование модератором: 5 июл 2015
    san911, trueattack, Лев и 11 другим нравится это.
  2. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    200
    а можно ли сделать, чтобы в нужных местах самому рисовать эти зоны бессмертия?
    хочу на серф поставить этот плагин, но там же вроде нет зон закупок
     
  3. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Обновил плагин до версии 2.1:
    Добавлена возможность вывода сообщений игрокам в чат, изменения цвета игроков, запрета стрельбы из зон защиты.

    Новые консольные переменные:
    sm_bzp_restrictshoot - запрет (1) или нет (0) стрельбы, будучи защищенным. По умолчанию: 1.
    sm_bzp_changecolor - менять (1) или нет (0) цвет игрока в своей зоне защиты. По умолчанию: 1.
    sm_bzp_changecolorct - цвет защищенного КТ. По умолчанию: 0 0 255 125.
    sm_bzp_changecolort - цвет защищенного Т. По умолчанию: 255 0 0 125.
    sm_bzp_notice - выводить (1) или нет (0) сообщения о входе или выходе из зоны защиты. По умолчанию: 1.

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

    // ===========================================================================
    ★Сириус★, думаю, для твоего запроса нужно делать отдельный плагин. Посмотрю позже, если будет время.
     
    CTe6eJIeK_vRn нравится это.
  4. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    Где то на АМ есть вроде похожий плагин, там только зоны можно самому ставить.
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
  6. marlboro

    marlboro

    Сообщения:
    37
    Симпатии:
    18
    плагин работает не корректно, после 30 секунд выделенная зона покупки исчезает, а защита досехпор работает! Как это исправить?
    Код:
    // This file was auto-generated by SourceMod (v1.5.0-dev+3871)
    
    // ConVars for plugin "buyzone_protector.smx"
    
    
    
    
    
    // ENG: change (0) or not (1) player color in their zone
    
    // RUS: изменять (0) или нет (1) цвет игроков в своих зонах
    
    // -
    
    // Default: "1"
    
    sm_bzp_changecolor "1"
    
    
    
    // ENG: color of CT in their zone while protect lasts
    
    // RUS: цвет КТ в своей зоне, пока защита активна
    
    // -
    
    // Default: "0 0 255 125"
    
    sm_bzp_changecolorct "0 0 255 125"
    
    
    
    // ENG: color of T in their zone while protect lasts
    
    // RUS: цвет Т в своей зоне, пока защита активна
    
    // -
    
    // Default: "255 0 0 125"
    
    sm_bzp_changecolort "255 0 0 125"
    
    
    
    // ENG: color of lines ct zone
    
    // RUS: цвет зоны КТ
    
    // -
    
    // Default: "0 0 255 255"
    
    sm_bzp_ctlinecolor "0 0 255 255"
    
    
    
    // ENG: draw (1) or not (0) zone of protection
    
    // RUS: рисовать (1) или нет (0) зону защиты
    
    // -
    
    // Default: "1"
    
    sm_bzp_drawzone "1"
    
    
    
    // ENG: allow (0) or not (1) sending messages about entering/leaving zones
    
    // RUS: разрешить (0) или нет (1) плагину сообщать игрокам о входе/покидании зоны
    
    // -
    
    // Default: "1"
    
    sm_bzp_notice "1"
    
    
    
    // ENG: how long in seconds will lasts protection of buyzone
    
    // RUS: как долго в секундах будет длится защита зон покупок
    
    // -
    
    // Default: "20.0"
    
    sm_bzp_prottime "30.0"
    
    
    
    // ENG: allow (0) or not (1) shooting from their zone or not
    
    // RUS: разрешить (0) или нет (1) стрелять из своих зон или нет
    
    // -
    
    // Default: "1"
    
    sm_bzp_restrictshoot "1"
    
    
    
    // ENG: color of lines t zone
    
    // RUS: цвет зоны Т
    
    // -
    
    // Default: "255 0 0 255"
    
    sm_bzp_tlinecolor "255 0 0 255"
    
    
    
    
    [SM] Listing 41 plugins:
    01 "Basic Chat" (1.5.1) by AlliedModders LLC
    02 "Basic Commands" (1.5.1) by AlliedModders LLC
    03 "Admin Help" (1.5.1) by AlliedModders LLC
    04 "Resetscore" (1.1) by tuty
    05 "Radio Spam Block" (1.0.0) by exvel
    06 "No Fall Damage" (0.0.1.9) by alexip121093
    07 "Advertisements" (0.6.2) by Tsunami, Otstrel.ru Team
    08 "Anti-Flood" (1.5.1) by AlliedModders LLC
    09 "sm_deathbeam" (PLUGIN_VERSION) by Meng
    10 "Player Commands" (1.5.1) by AlliedModders LLC
    11 "RankMe" (2.8.3) by lok1
    12 "MapChooser" (1.5.1) by AlliedModders LLC
    13 "Basic Info Triggers" (1.5.1) by AlliedModders LLC
    14 "Basic Votes" (1.5.1) by AlliedModders LLC
    15 "Show Damage" (1.0.7) by exvel
    16 "Weapon Restrict" (3.1.4) by Dr!fter
    17 "Sound Commands" (1.5.1) by AlliedModders LLC
    18 "Anticamp CS:S and CS:GO" (2.5.2) by stachi
    19 "Basic Comm Control" (1.5.1) by AlliedModders LLC
    20 "SourceBans" (1.4.9) by SourceBans Development Team
    21 "Admin File Reader" (1.5.1) by AlliedModders LLC
    22 "TeamSwitch" (1.4) by MistaGee (Modify by Snake 60)
    23 "Admin Menu" (1.5.1) by AlliedModders LLC
    24 "[ BuyZone Protector ]" (2.1) by Regent
    25 "Map Nominations" (1.5.1) by AlliedModders LLC
    26 "Fun Votes" (1.5.1) by AlliedModders LLC
    27 "Reserved Slots" (1.5.1) by AlliedModders LLC
    28 "Players Votes Redux" (1.1.2) by ReFlexPoison
    29 "Rock The Vote" (1.5.1) by AlliedModders LLC
    30 "NoBlock" (1.4.2) by Otstrel.ru Team
    31 "Nextmap" (1.5.1) by AlliedModders LLC
    32 "Quake Sounds" (1.8) by dalto
    33 "Client Preferences" (1.5.1) by AlliedModders LLC
    34 "Extra Cash" (0.2) by Peoples Army
    35 "Fun Commands" (1.5.1) by AlliedModders LLC
    36 "SourceComms" (0.9.259) by Alex
    37 "Round and Map End Sound" (2.5.0Beta9) by FrozDark (HLModders LLC)
    38 "Auto change map" (1.3) by Mleczam
    39 "THC RPG LVL UP SETTINGS ADDON" (1.0) by [RUS] SenatoR
    40 "[THC RPG] Total HardCore RPG modification by [RUS] SenatoR" (0.9.4) by ArsiRC, modification: [RUS] SenatoR
    41 "THC RPG Team Bets ADDON" (1.0) by GrimReaper,heavily altered by Necavi,altered for THC RPG SenatoR
     
  7. testuser

    testuser

    Сообщения:
    38
    Симпатии:
    1
    Оффтоп
     
  8. trueattack

    trueattack

    Сообщения:
    148
    Симпатии:
    32
    Вот, исправленный. Попросил у Reiko, он сделал. Я лишь добавил morecolors.
    PHP:
    // =============================================================
    // >> INCLUDES
    // =============================================================
    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>
    #include <morecolors>


    // =============================================================
    // >> PLUGIN INFORMATION
    // =============================================================
    public Plugin:myinfo 
    {
        
    name         "[ BuyZone Protector ]",
        
    author         "Regent",
        
    description "protects certain time players, which inside of their buy zone",
        
    version     "2.1",
        
    url         ""
    };


    // =============================================================
    // >> DEFINES
    // =============================================================
    #define EFFECT_MODEL        "materials/sprites/lgtning.vmt"


    // =============================================================
    // >> CONSOLE VARIABLES
    // =============================================================
    new Handle:    g_hConVar_sCTLineColor;
    new 
    Handle:    g_hConVar_sTLineColor;
    new 
    Handle:    g_hConVar_flProtectionTime;
    new 
    Handle:    g_hConVar_bDrawProtectionZone;
    new 
    Handle:    g_hConVar_bRestrictShootFromZone;
    new 
    Handle:    g_hConVar_bChangeColor;
    new 
    Handle:    g_hConVar_sChangeColorCT;
    new 
    Handle:    g_hConVar_sChangeColorT;
    new 
    Handle:    g_hConVar_bNotice;


    // =============================================================
    // >> SHADOW CONSOLE VARIABLES
    // =============================================================
    new Float:    g_flProtectionTime;
    new 
    bool:    g_bDrawProtectionZone;
    new 
    bool:    g_bRestrictShootFromZone;
    new 
    bool:    g_bChangeColor;
    new 
    bool:    g_bNotice;
    new         
    g_iCTLineColor[4];
    new         
    g_iTLineColor[4];
    new         
    g_iCTColor[4];
    new         
    g_iTColor[4];


    // =============================================================
    // >> GLOBAL VARIABLES
    // =============================================================
    new Handle:    g_hProtectionTimer    INVALID_HANDLE;

    new 
    Float:    g_flTBuyZoneMins[2][3];
    new 
    Float:    g_flTBuyZoneMaxs[2][3];
    new 
    Float:    g_flCTBuyZoneMins[2][3];
    new 
    Float:    g_flCTBuyZoneMaxs[2][3];

    new            
    g_iModelEntity;


    // =============================================================
    // >> PLUGIN SOURCE CODE
    // =============================================================
    public OnPluginStart()
    {
        
    LoadTranslations("buyzone_protector.phrases.txt");
        
        
    g_hConVar_bDrawProtectionZone         CreateConVar("sm_bzp_drawzone""1""ENG: draw (1) or not (0) zone of protection\nRUS: рисовать (1) или нет (0) зону защиты"FCVAR_PLUGIN);
        
    g_hConVar_flProtectionTime             CreateConVar("sm_bzp_prottime""20.0""ENG: how long in seconds will lasts protection of buyzone\nRUS: как долго в секундах будет длится защита зон покупок"FCVAR_PLUGIN);
        
    g_hConVar_sCTLineColor                 CreateConVar("sm_bzp_ctlinecolor""0 0 255 255""ENG: color of lines ct zone\nRUS: цвет зоны КТ"FCVAR_PLUGIN);
        
    g_hConVar_sTLineColor                 CreateConVar("sm_bzp_tlinecolor""255 0 0 255""ENG: color of lines t zone\nRUS: цвет зоны Т"FCVAR_PLUGIN);
        
    g_hConVar_bRestrictShootFromZone     CreateConVar("sm_bzp_restrictshoot""1""ENG: allow (0) or not (1) shooting from their zone or not\nRUS: разрешить (0) или нет (1) стрелять из своих зон или нет"FCVAR_PLUGIN);
        
    g_hConVar_bChangeColor                CreateConVar("sm_bzp_changecolor""1""ENG: change (0) or not (1) player color in their zone\nRUS: изменять (0) или нет (1) цвет игроков в своих зонах"FCVAR_PLUGIN);
        
    g_hConVar_sChangeColorCT            CreateConVar("sm_bzp_changecolorct""0 0 255 125""ENG: color of CT in their zone while protect lasts\nRUS: цвет КТ в своей зоне, пока защита активна"FCVAR_PLUGIN);
        
    g_hConVar_sChangeColorT                CreateConVar("sm_bzp_changecolort""255 0 0 125""ENG: color of T in their zone while protect lasts\nRUS: цвет Т в своей зоне, пока защита активна"FCVAR_PLUGIN);
        
    g_hConVar_bNotice                    CreateConVar("sm_bzp_notice""1""ENG: allow (0) or not (1) sending messages about entering/leaving zones\nRUS: разрешить (0) или нет (1) плагину сообщать игрокам о входе/покидании зоны"FCVAR_PLUGIN);
        
        
    HookConVarChange(g_hConVar_bDrawProtectionZone,     Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_flProtectionTime,         Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_sCTLineColor,             Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_sTLineColor,             Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_bRestrictShootFromZone,     Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_bChangeColor,             Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_sChangeColorCT,             Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_sChangeColorT,             Hook_ConVarChanged);
        
    HookConVarChange(g_hConVar_bNotice,                 Hook_ConVarChanged);
        
        
    HookEvent("round_start"Ev_RoundStart);
        
    AutoExecConfig(true"buyzone_protector");
        
    CreateConVar("sm_bzp_version",    "2.0 by Regent""version of plugin"FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    }

    public 
    Hook_ConVarChanged(Handle:hConVar, const String:sOldValue[], const String:sNewValue[])
    {
        if ( 
    hConVar == g_hConVar_bDrawProtectionZone )
        {
            
    g_bDrawProtectionZone GetConVarBool(g_hConVar_bDrawProtectionZone);
        }
        else if ( 
    hConVar == g_hConVar_flProtectionTime )
        {
            
    g_flProtectionTime GetConVarFloat(g_hConVar_flProtectionTime);
        }
        else if ( 
    hConVar == g_hConVar_sCTLineColor )
        {
            
    StringToIntArray(sNewValueg_iCTLineColor);
        }
        else if ( 
    hConVar == g_hConVar_sTLineColor )
        {
            
    StringToIntArray(sNewValueg_iTLineColor);
        }
        else if ( 
    hConVar == g_hConVar_bRestrictShootFromZone )
        {
            
    g_bRestrictShootFromZone GetConVarBool(g_hConVar_bRestrictShootFromZone);
        }
        else if ( 
    hConVar == g_hConVar_bChangeColor )
        {
            
    g_bChangeColor GetConVarBool(g_hConVar_bChangeColor);
        }
        else if ( 
    hConVar == g_hConVar_bNotice )
        {
            
    g_bNotice GetConVarBool(g_hConVar_bNotice);
        }
        else if ( 
    hConVar == g_hConVar_sChangeColorCT )
        {
            
    StringToIntArray(sNewValueg_iCTColor);
        }
        else if ( 
    hConVar == g_hConVar_sChangeColorT )
        {
            
    StringToIntArray(sNewValueg_iTColor);
        }
    }

    public 
    OnPluginEnd()
    {
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )
        {
            
    KillTimer(g_hProtectionTimer);
            
    g_hProtectionTimer INVALID_HANDLE;
        }
    }

    public 
    OnMapStart()
    {
        
    g_hProtectionTimer INVALID_HANDLE;
        
        new 
    iEntity = -1;
        while ((
    iEntity FindEntityByClassname(iEntity"func_buyzone")) != -1)
        {
            
    decl Float:flOrigin[3], Float:flVecMins[3], Float:flVecMaxs[3];
            new 
    iTeam GetEntProp(iEntityProp_Send"m_iTeamNum");
            
    GetEntPropVector(iEntityProp_Send"m_vecMins"flVecMins);
            
    GetEntPropVector(iEntityProp_Send"m_vecMaxs"flVecMaxs);
            
    GetEntPropVector(iEntityProp_Send"m_vecOrigin"flOrigin);
            
            if ( 
    iTeam == )
            {
                
    g_flTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0];
                
    g_flTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1];
                
    g_flTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2];
                
    g_flTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0];
                
    g_flTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1];
                
    g_flTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2];
                
                
    g_flTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0];
                
    g_flTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1];
                
    g_flTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2];
                
    g_flTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0];
                
    g_flTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1];
                
    g_flTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2];
                
                
    SDKHook(iEntitySDKHook_StartTouchOnTZoneStartTouch);
                
    SDKHook(iEntitySDKHook_EndTouchOnTZoneEndTouch);
            }
            else if ( 
    iTeam == )
            {
                
    g_flCTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0];
                
    g_flCTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1];
                
    g_flCTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2];
                
    g_flCTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0];
                
    g_flCTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1];
                
    g_flCTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2];
                
                
    g_flCTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0];
                
    g_flCTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1];
                
    g_flCTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2];
                
    g_flCTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0];
                
    g_flCTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1];
                
    g_flCTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2];
                
                
    SDKHook(iEntitySDKHook_StartTouchOnCTZoneStartTouch);
                
    SDKHook(iEntitySDKHook_EndTouchOnCTZoneEndTouch);
            }
        }
        
        
    g_iModelEntity PrecacheModel(EFFECT_MODEL);
    }

    public 
    OnConfigsExecuted()
    {
        
    g_bDrawProtectionZone         GetConVarBool    (g_hConVar_bDrawProtectionZone);
        
    g_bRestrictShootFromZone     GetConVarBool    (g_hConVar_bRestrictShootFromZone);
        
    g_bChangeColor                 GetConVarBool    (g_hConVar_bChangeColor);
        
    g_bNotice                     GetConVarBool    (g_hConVar_bNotice);
        
    g_flProtectionTime             GetConVarFloat(g_hConVar_flProtectionTime);
        
        
    decl String:sBuffer[20];
        
    GetConVarString(g_hConVar_sCTLineColorsBuffersizeof(sBuffer) - 1);
        
    StringToIntArray(sBufferg_iCTLineColor);
        
        
    GetConVarString(g_hConVar_sTLineColorsBuffersizeof(sBuffer) - 1);
        
    StringToIntArray(sBufferg_iTLineColor);
        
        
    GetConVarString(g_hConVar_sChangeColorCTsBuffersizeof(sBuffer) - 1);
        
    StringToIntArray(sBufferg_iCTColor);
        
        
    GetConVarString(g_hConVar_sChangeColorTsBuffersizeof(sBuffer) - 1);
        
    StringToIntArray(sBufferg_iTColor);
        
        for ( new 
    1<= MaxClientsi++ )
        {
            if ( 
    IsClientInGame(i) )
            {
                
    OnClientPutInServer(i);
            }
        }
    }

    StringToIntArray(const String:sInput[], Array[])
    {
        
    decl String:sBuffer[4][5]
        
    ExplodeString(sInput" "sBuffersizeof(sBuffer), sizeof(sBuffer[]) - 1);
        Array[
    0] = StringToInt(sBuffer[0]);
        Array[
    1] = StringToInt(sBuffer[1]);
        Array[
    2] = StringToInt(sBuffer[2]);
        Array[
    3] = StringToInt(sBuffer[3]);
    }

    public 
    OnClientPutInServer(iClient)
    {
        
    SDKHook(iClientSDKHook_OnTakeDamageOnTakeDamage);
    }

    public 
    OnClientDisconnect_Post(iClient)
    {
        
    SDKUnhook(iClientSDKHook_OnTakeDamageOnTakeDamage);
    }

    public 
    Action:OnTakeDamage(iClient, &iAttacker, &iInflictor, &Float:flDamage, &iDamageType)
    {
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == )
            {
                if ( 
    GetClientTeam(iClient) == )
                {
                    if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )
                    {
                        
    flDamage 0.0;
                        return 
    Plugin_Changed;
                    }
                }
                else if ( 
    GetClientTeam(iClient) == )
                {
                    if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )
                    {
                        
    flDamage 0.0;
                        return 
    Plugin_Changed;
                    }
                }
            }
        }
                
        return 
    Plugin_Continue;
    }

    public 
    Ev_RoundStart(Handle:hEvent, const String:sEvName[], bool:bSilent)
    {
        if ( 
    g_bDrawProtectionZone )
        {
            
    DrawZoneByCoords(g_flCTBuyZoneMinsg_flCTBuyZoneMaxsg_iCTLineColor);
            
    DrawZoneByCoords(g_flTBuyZoneMinsg_flTBuyZoneMaxsg_iTLineColor);
        }
        
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )
        {
            
    KillTimer(g_hProtectionTimer);
        }
        
    g_hProtectionTimer CreateTimer(g_flProtectionTimeTimer_RemoveProtection_TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:Timer_RemoveProtection(Handle:hTimerany:data)
    {
        for ( new 
    1<= MaxClientsi++ )
        {
            if ( 
    IsClientInGame(i) )
            {
                if ( 
    GetClientTeam(i) == )
                {
                    if ( 
    IsClientInside(ig_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )
                    {
                        if ( 
    g_bNotice )
                        {
                            
    CPrintToChat(i"%t""ended");
                        }
                        if ( 
    g_bChangeColor )
                        {
                            
    SetEntityRenderColor(i255255255255);
                            
    SetEntityRenderMode(iRENDER_NORMAL);
                        }
                    }
                }
                else if ( 
    GetClientTeam(i) == )
                {
                    if ( 
    IsClientInside(ig_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )
                    {
                        if ( 
    g_bNotice )
                        {
                            
    CPrintToChat(i"%t""ended");
                        }
                        if ( 
    g_bChangeColor )
                        {
                            
    SetEntityRenderColor(i255255255255);
                            
    SetEntityRenderMode(iRENDER_NORMAL);
                        }
                    }
                }
            }
        }
        
        
    g_hProtectionTimer INVALID_HANDLE;
        return 
    Plugin_Stop;
    }

    DrawZoneByCoords(const Float:flMins[2][3], const Float:flMaxs[2][3], const iColor[4])
    {
        
    decl Float:flBuffer1[3], Float:flBuffer2[3];
        
        
    flBuffer1[0] = flMaxs[0][0];
        
    flBuffer1[1] = flMaxs[0][1];
        
    flBuffer1[2] = flMaxs[0][2];
        
    flBuffer2[0] = flMaxs[1][0];
        
    flBuffer2[1] = flMaxs[1][1];
        
    flBuffer2[2] = flMaxs[0][2];
        
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);
        
    TE_SendToAll();
        
        
    flBuffer1[0] = flMaxs[0][0];
        
    flBuffer1[1] = flMaxs[0][1];
        
    flBuffer1[2] = flMaxs[0][2];
        
    flBuffer2[0] = flMins[1][0];
        
    flBuffer2[1] = flMins[1][1];
        
    flBuffer2[2] = flMaxs[0][2];
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);
        
    TE_SendToAll();
        
        
    flBuffer1[0] = flMins[0][0];
        
    flBuffer1[1] = flMins[0][1];
        
    flBuffer1[2] = flMaxs[0][2];
        
    flBuffer2[0] = flMaxs[1][0];
        
    flBuffer2[1] = flMaxs[1][1];
        
    flBuffer2[2] = flMaxs[0][2];
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);
        
    TE_SendToAll();
        
        
    flBuffer1[0] = flMins[0][0];
        
    flBuffer1[1] = flMins[0][1];
        
    flBuffer1[2] = flMaxs[0][2];
        
    flBuffer2[0] = flMins[1][0];
        
    flBuffer2[1] = flMins[1][1];
        
    flBuffer2[2] = flMaxs[0][2];
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);
        
    TE_SendToAll();
    }

    bool:IsClientInside(const &iClient, const Float:flMins[3], const Float:flMaxs[3])
    {
        
    decl Float:flOrigin[3];
        
    GetClientAbsOrigin(iClientflOrigin);
        
        if (
    flOrigin[0] >= flMins[0] && flOrigin[0] <= flMaxs[0] &&
            
    flOrigin[1] >= flMins[1] && flOrigin[1] <= flMaxs[1] &&
            
    flOrigin[2] >= flMins[2] && flOrigin[2] <= flMaxs[2])
        {
            return 
    true;
        }
        else
        {
            return 
    false;
        }
    }

    public 
    Action:OnPlayerRunCmd(iClient, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2])
    {
        if ( 
    g_bRestrictShootFromZone && g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == )
            {
                if ( 
    buttons IN_ATTACK )
                {
                    if ( 
    GetClientTeam(iClient) == )
                    {
                        if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )
                        {
                            
    buttons &= ~IN_ATTACK;
                            
    PrintCenterText(iClient"%t""shoot blocked");
                        }
                    }
                    else if ( 
    GetClientTeam(iClient) == )
                    {
                        if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )
                        {
                            
    buttons &= ~IN_ATTACK;
                            
    PrintCenterText(iClient"%t""shoot blocked");
                        }
                    }
                }
            }
        }
    }

    public 
    OnTZoneStartTouch(iEntityiToucher)
    {
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( 
    GetClientTeam(iToucher) == )
            {
                if ( 
    g_bNotice )
                {
                    
    CPrintToChat(iToucher"%t""entered");
                }
                if ( 
    g_bChangeColor )
                {
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR);
                    
    SetEntityRenderColor(iToucherg_iTColor[0], g_iTColor[1], g_iTColor[2], g_iTColor[3]);
                }
            }
        }
    }

    public 
    OnCTZoneStartTouch(iEntityiToucher)
    {
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( 
    GetClientTeam(iToucher) == )
            {
                if ( 
    g_bNotice )
                {
                    
    CPrintToChat(iToucher"%t""entered");
                }
                if ( 
    g_bChangeColor )
                {
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR);
                    
    SetEntityRenderColor(iToucherg_iCTColor[0], g_iCTColor[1], g_iCTColor[2], g_iCTColor[3]);
                }
            }
        }
    }

    public 
    OnTZoneEndTouch(iEntityiToucher)
    {
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( !
    IsClientInGame(iToucher) )
            {
                return;
            }
            
            if ( 
    GetClientTeam(iToucher) == )
            {
                if ( 
    g_bNotice )
                {
                    
    CPrintToChat(iToucher"%t""leaved");
                }
                if ( 
    g_bChangeColor )
                {
                    
    SetEntityRenderColor(iToucher255255255255);
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL);
                }
            }
        }
    }

    public 
    OnCTZoneEndTouch(iEntityiToucher)
    {
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )
        {
            if ( !
    IsClientInGame(iToucher) )
            {
                return;
            }
            
            if ( 
    GetClientTeam(iToucher) == )
            {
                if ( 
    g_bNotice )
                {
                    
    CPrintToChat(iToucher"%t""leaved");
                }
                if ( 
    g_bChangeColor )
                {
                    
    SetEntityRenderColor(iToucher255255255255);
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL);
                }
            }
        }
    }
     
    Xummuk97 и marlboro нравится это.
  9. Parlament Admin

    Parlament Admin

    Сообщения:
    69
    Симпатии:
    2
    У меня вопрос, как выделить свою зону в которой игроки не смогут стрелять?
    P.s в первом посту написанно что такая возможность есть, но описания не нашол.
     
  10. trueattack

    trueattack

    Сообщения:
    148
    Симпатии:
    32
    Если ты об этом:
    (16-11-2013) Версия 2.0 - плагин переписан, добавлена возможность обозначения зон закупок.
    Я думаю имелось ввиду выделение зоны спрайтом. А менять зоны, редактировать и добавлять свои - пока нет такой возможности. В скором будущем, возможно, Reiko доработает плагин.
     
  11. Parlament Admin

    Parlament Admin

    Сообщения:
    69
    Симпатии:
    2
    Оффтоп
     
  12. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Уважаемые форумчане, нужна помощь по данному плагину... Хотелось бы реализовать идею в версии v2.2...

    Вот исходный код Версии v2.1 [Fix], выложенный выше...

    PHP:
    // ============================================================= 
    // >> INCLUDES 
    // ============================================================= 
    #include <sourcemod> 
    #include <sdktools> 
    #include <sdkhooks> 
    #include <morecolors> 


    // ============================================================= 
    // >> PLUGIN INFORMATION 
    // ============================================================= 
    public Plugin:myinfo =  

        
    name         "[ BuyZone Protector ]"
        
    author         "Regent"
        
    description "protects certain time players, which inside of their buy zone"
        
    version     "2.1"
        
    url         "" 
    }; 


    // ============================================================= 
    // >> DEFINES 
    // ============================================================= 
    #define EFFECT_MODEL        "materials/sprites/lgtning.vmt" 


    // ============================================================= 
    // >> CONSOLE VARIABLES 
    // ============================================================= 
    new Handle:    g_hConVar_sCTLineColor
    new 
    Handle:    g_hConVar_sTLineColor
    new 
    Handle:    g_hConVar_flProtectionTime
    new 
    Handle:    g_hConVar_bDrawProtectionZone
    new 
    Handle:    g_hConVar_bRestrictShootFromZone
    new 
    Handle:    g_hConVar_bChangeColor
    new 
    Handle:    g_hConVar_sChangeColorCT
    new 
    Handle:    g_hConVar_sChangeColorT
    new 
    Handle:    g_hConVar_bNotice


    // ============================================================= 
    // >> SHADOW CONSOLE VARIABLES 
    // ============================================================= 
    new Float:    g_flProtectionTime
    new 
    bool:    g_bDrawProtectionZone
    new 
    bool:    g_bRestrictShootFromZone
    new 
    bool:    g_bChangeColor
    new 
    bool:    g_bNotice
    new         
    g_iCTLineColor[4]; 
    new         
    g_iTLineColor[4]; 
    new         
    g_iCTColor[4]; 
    new         
    g_iTColor[4]; 


    // ============================================================= 
    // >> GLOBAL VARIABLES 
    // ============================================================= 
    new Handle:    g_hProtectionTimer    INVALID_HANDLE

    new 
    Float:    g_flTBuyZoneMins[2][3]; 
    new 
    Float:    g_flTBuyZoneMaxs[2][3]; 
    new 
    Float:    g_flCTBuyZoneMins[2][3]; 
    new 
    Float:    g_flCTBuyZoneMaxs[2][3]; 

    new            
    g_iModelEntity


    // ============================================================= 
    // >> PLUGIN SOURCE CODE 
    // ============================================================= 
    public OnPluginStart() 

        
    LoadTranslations("buyzone_protector.phrases.txt"); 
         
        
    g_hConVar_bDrawProtectionZone         CreateConVar("sm_bzp_drawzone""1""ENG: draw (1) or not (0) zone of protection\nRUS: рисовать (1) или нет (0) зону защиты"FCVAR_PLUGIN); 
        
    g_hConVar_flProtectionTime             CreateConVar("sm_bzp_prottime""20.0""ENG: how long in seconds will lasts protection of buyzone\nRUS: как долго в секундах будет длится защита зон покупок"FCVAR_PLUGIN); 
        
    g_hConVar_sCTLineColor                 CreateConVar("sm_bzp_ctlinecolor""0 0 255 255""ENG: color of lines ct zone\nRUS: цвет зоны КТ"FCVAR_PLUGIN); 
        
    g_hConVar_sTLineColor                 CreateConVar("sm_bzp_tlinecolor""255 0 0 255""ENG: color of lines t zone\nRUS: цвет зоны Т"FCVAR_PLUGIN); 
        
    g_hConVar_bRestrictShootFromZone     CreateConVar("sm_bzp_restrictshoot""1""ENG: allow (0) or not (1) shooting from their zone or not\nRUS: разрешить (0) или нет (1) стрелять из своих зон или нет"FCVAR_PLUGIN); 
        
    g_hConVar_bChangeColor                CreateConVar("sm_bzp_changecolor""1""ENG: change (0) or not (1) player color in their zone\nRUS: изменять (0) или нет (1) цвет игроков в своих зонах"FCVAR_PLUGIN); 
        
    g_hConVar_sChangeColorCT            CreateConVar("sm_bzp_changecolorct""0 0 255 125""ENG: color of CT in their zone while protect lasts\nRUS: цвет КТ в своей зоне, пока защита активна"FCVAR_PLUGIN); 
        
    g_hConVar_sChangeColorT                CreateConVar("sm_bzp_changecolort""255 0 0 125""ENG: color of T in their zone while protect lasts\nRUS: цвет Т в своей зоне, пока защита активна"FCVAR_PLUGIN); 
        
    g_hConVar_bNotice                    CreateConVar("sm_bzp_notice""1""ENG: allow (0) or not (1) sending messages about entering/leaving zones\nRUS: разрешить (0) или нет (1) плагину сообщать игрокам о входе/покидании зоны"FCVAR_PLUGIN); 
         
        
    HookConVarChange(g_hConVar_bDrawProtectionZone,     Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_flProtectionTime,         Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_sCTLineColor,             Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_sTLineColor,             Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_bRestrictShootFromZone,     Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_bChangeColor,             Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_sChangeColorCT,             Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_sChangeColorT,             Hook_ConVarChanged); 
        
    HookConVarChange(g_hConVar_bNotice,                 Hook_ConVarChanged); 
         
        
    HookEvent("round_start"Ev_RoundStart); 
        
    AutoExecConfig(true"buyzone_protector"); 
        
    CreateConVar("sm_bzp_version",    "2.0 by Regent""version of plugin"FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD); 


    public 
    Hook_ConVarChanged(Handle:hConVar, const String:sOldValue[], const String:sNewValue[]) 

        if ( 
    hConVar == g_hConVar_bDrawProtectionZone 
        { 
            
    g_bDrawProtectionZone GetConVarBool(g_hConVar_bDrawProtectionZone); 
        } 
        else if ( 
    hConVar == g_hConVar_flProtectionTime 
        { 
            
    g_flProtectionTime GetConVarFloat(g_hConVar_flProtectionTime); 
        } 
        else if ( 
    hConVar == g_hConVar_sCTLineColor 
        { 
            
    StringToIntArray(sNewValueg_iCTLineColor); 
        } 
        else if ( 
    hConVar == g_hConVar_sTLineColor 
        { 
            
    StringToIntArray(sNewValueg_iTLineColor); 
        } 
        else if ( 
    hConVar == g_hConVar_bRestrictShootFromZone 
        { 
            
    g_bRestrictShootFromZone GetConVarBool(g_hConVar_bRestrictShootFromZone); 
        } 
        else if ( 
    hConVar == g_hConVar_bChangeColor 
        { 
            
    g_bChangeColor GetConVarBool(g_hConVar_bChangeColor); 
        } 
        else if ( 
    hConVar == g_hConVar_bNotice 
        { 
            
    g_bNotice GetConVarBool(g_hConVar_bNotice); 
        } 
        else if ( 
    hConVar == g_hConVar_sChangeColorCT 
        { 
            
    StringToIntArray(sNewValueg_iCTColor); 
        } 
        else if ( 
    hConVar == g_hConVar_sChangeColorT 
        { 
            
    StringToIntArray(sNewValueg_iTColor); 
        } 


    public 
    OnPluginEnd() 

        if ( 
    g_hProtectionTimer != INVALID_HANDLE 
        { 
            
    KillTimer(g_hProtectionTimer); 
            
    g_hProtectionTimer INVALID_HANDLE
        } 


    public 
    OnMapStart() 

        
    g_hProtectionTimer INVALID_HANDLE
         
        new 
    iEntity = -1
        while ((
    iEntity FindEntityByClassname(iEntity"func_buyzone")) != -1
        { 
            
    decl Float:flOrigin[3], Float:flVecMins[3], Float:flVecMaxs[3]; 
            new 
    iTeam GetEntProp(iEntityProp_Send"m_iTeamNum"); 
            
    GetEntPropVector(iEntityProp_Send"m_vecMins"flVecMins); 
            
    GetEntPropVector(iEntityProp_Send"m_vecMaxs"flVecMaxs); 
            
    GetEntPropVector(iEntityProp_Send"m_vecOrigin"flOrigin); 
             
            if ( 
    iTeam == 
            { 
                
    g_flTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0]; 
                
    g_flTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1]; 
                
    g_flTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2]; 
                
    g_flTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0]; 
                
    g_flTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1]; 
                
    g_flTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2]; 
                 
                
    g_flTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0]; 
                
    g_flTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1]; 
                
    g_flTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2]; 
                
    g_flTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0]; 
                
    g_flTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1]; 
                
    g_flTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2]; 
                 
                
    SDKHook(iEntitySDKHook_StartTouchOnTZoneStartTouch); 
                
    SDKHook(iEntitySDKHook_EndTouchOnTZoneEndTouch); 
            } 
            else if ( 
    iTeam == 
            { 
                
    g_flCTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0]; 
                
    g_flCTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1]; 
                
    g_flCTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2]; 
                
    g_flCTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0]; 
                
    g_flCTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1]; 
                
    g_flCTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2]; 
                 
                
    g_flCTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0]; 
                
    g_flCTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1]; 
                
    g_flCTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2]; 
                
    g_flCTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0]; 
                
    g_flCTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1]; 
                
    g_flCTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2]; 
                 
                
    SDKHook(iEntitySDKHook_StartTouchOnCTZoneStartTouch); 
                
    SDKHook(iEntitySDKHook_EndTouchOnCTZoneEndTouch); 
            } 
        } 
         
        
    g_iModelEntity PrecacheModel(EFFECT_MODEL); 


    public 
    OnConfigsExecuted() 

        
    g_bDrawProtectionZone         GetConVarBool    (g_hConVar_bDrawProtectionZone); 
        
    g_bRestrictShootFromZone     GetConVarBool    (g_hConVar_bRestrictShootFromZone); 
        
    g_bChangeColor                 GetConVarBool    (g_hConVar_bChangeColor); 
        
    g_bNotice                     GetConVarBool    (g_hConVar_bNotice); 
        
    g_flProtectionTime             GetConVarFloat(g_hConVar_flProtectionTime); 
         
        
    decl String:sBuffer[20]; 
        
    GetConVarString(g_hConVar_sCTLineColorsBuffersizeof(sBuffer) - 1); 
        
    StringToIntArray(sBufferg_iCTLineColor); 
         
        
    GetConVarString(g_hConVar_sTLineColorsBuffersizeof(sBuffer) - 1); 
        
    StringToIntArray(sBufferg_iTLineColor); 
         
        
    GetConVarString(g_hConVar_sChangeColorCTsBuffersizeof(sBuffer) - 1); 
        
    StringToIntArray(sBufferg_iCTColor); 
         
        
    GetConVarString(g_hConVar_sChangeColorTsBuffersizeof(sBuffer) - 1); 
        
    StringToIntArray(sBufferg_iTColor); 
         
        for ( new 
    1<= MaxClientsi++ ) 
        { 
            if ( 
    IsClientInGame(i) ) 
            { 
                
    OnClientPutInServer(i); 
            } 
        } 


    StringToIntArray(const String:sInput[], Array[]) 

        
    decl String:sBuffer[4][5
        
    ExplodeString(sInput" "sBuffersizeof(sBuffer), sizeof(sBuffer[]) - 1); 
        Array[
    0] = StringToInt(sBuffer[0]); 
        Array[
    1] = StringToInt(sBuffer[1]); 
        Array[
    2] = StringToInt(sBuffer[2]); 
        Array[
    3] = StringToInt(sBuffer[3]); 


    public 
    OnClientPutInServer(iClient

        
    SDKHook(iClientSDKHook_OnTakeDamageOnTakeDamage); 


    public 
    OnClientDisconnect_Post(iClient

        
    SDKUnhook(iClientSDKHook_OnTakeDamageOnTakeDamage); 


    public 
    Action:OnTakeDamage(iClient, &iAttacker, &iInflictor, &Float:flDamage, &iDamageType

        if ( 
    g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == 
            { 
                if ( 
    GetClientTeam(iClient) == 
                { 
                    if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) ) 
                    { 
                        
    flDamage 0.0
                        return 
    Plugin_Changed
                    } 
                } 
                else if ( 
    GetClientTeam(iClient) == 
                { 
                    if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) ) 
                    { 
                        
    flDamage 0.0
                        return 
    Plugin_Changed
                    } 
                } 
            } 
        } 
                 
        return 
    Plugin_Continue


    public 
    Ev_RoundStart(Handle:hEvent, const String:sEvName[], bool:bSilent

        if ( 
    g_bDrawProtectionZone 
        { 
            
    DrawZoneByCoords(g_flCTBuyZoneMinsg_flCTBuyZoneMaxsg_iCTLineColor); 
            
    DrawZoneByCoords(g_flTBuyZoneMinsg_flTBuyZoneMaxsg_iTLineColor); 
        } 
         
        if ( 
    g_hProtectionTimer != INVALID_HANDLE 
        { 
            
    KillTimer(g_hProtectionTimer); 
        } 
        
    g_hProtectionTimer CreateTimer(g_flProtectionTimeTimer_RemoveProtection_TIMER_FLAG_NO_MAPCHANGE); 


    public 
    Action:Timer_RemoveProtection(Handle:hTimerany:data

        for ( new 
    1<= MaxClientsi++ ) 
        { 
            if ( 
    IsClientInGame(i) ) 
            { 
                if ( 
    GetClientTeam(i) == 
                { 
                    if ( 
    IsClientInside(ig_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) ) 
                    { 
                        if ( 
    g_bNotice 
                        { 
                            
    CPrintToChat(i"%t""ended"); 
                        } 
                        if ( 
    g_bChangeColor 
                        { 
                            
    SetEntityRenderColor(i255255255255); 
                            
    SetEntityRenderMode(iRENDER_NORMAL); 
                        } 
                    } 
                } 
                else if ( 
    GetClientTeam(i) == 
                { 
                    if ( 
    IsClientInside(ig_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) ) 
                    { 
                        if ( 
    g_bNotice 
                        { 
                            
    CPrintToChat(i"%t""ended"); 
                        } 
                        if ( 
    g_bChangeColor 
                        { 
                            
    SetEntityRenderColor(i255255255255); 
                            
    SetEntityRenderMode(iRENDER_NORMAL); 
                        } 
                    } 
                } 
            } 
        } 
         
        
    g_hProtectionTimer INVALID_HANDLE
        return 
    Plugin_Stop


    DrawZoneByCoords(const Float:flMins[2][3], const Float:flMaxs[2][3], const iColor[4]) 

        
    decl Float:flBuffer1[3], Float:flBuffer2[3]; 
         
        
    flBuffer1[0] = flMaxs[0][0]; 
        
    flBuffer1[1] = flMaxs[0][1]; 
        
    flBuffer1[2] = flMaxs[0][2]; 
        
    flBuffer2[0] = flMaxs[1][0]; 
        
    flBuffer2[1] = flMaxs[1][1]; 
        
    flBuffer2[2] = flMaxs[0][2]; 
         
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0); 
        
    TE_SendToAll(); 
         
        
    flBuffer1[0] = flMaxs[0][0]; 
        
    flBuffer1[1] = flMaxs[0][1]; 
        
    flBuffer1[2] = flMaxs[0][2]; 
        
    flBuffer2[0] = flMins[1][0]; 
        
    flBuffer2[1] = flMins[1][1]; 
        
    flBuffer2[2] = flMaxs[0][2]; 
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0); 
        
    TE_SendToAll(); 
         
        
    flBuffer1[0] = flMins[0][0]; 
        
    flBuffer1[1] = flMins[0][1]; 
        
    flBuffer1[2] = flMaxs[0][2]; 
        
    flBuffer2[0] = flMaxs[1][0]; 
        
    flBuffer2[1] = flMaxs[1][1]; 
        
    flBuffer2[2] = flMaxs[0][2]; 
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0); 
        
    TE_SendToAll(); 
         
        
    flBuffer1[0] = flMins[0][0]; 
        
    flBuffer1[1] = flMins[0][1]; 
        
    flBuffer1[2] = flMaxs[0][2]; 
        
    flBuffer2[0] = flMins[1][0]; 
        
    flBuffer2[1] = flMins[1][1]; 
        
    flBuffer2[2] = flMaxs[0][2]; 
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0); 
        
    TE_SendToAll(); 


    bool:IsClientInside(const &iClient, const Float:flMins[3], const Float:flMaxs[3]) 

        
    decl Float:flOrigin[3]; 
        
    GetClientAbsOrigin(iClientflOrigin); 
         
        if (
    flOrigin[0] >= flMins[0] && flOrigin[0] <= flMaxs[0] && 
            
    flOrigin[1] >= flMins[1] && flOrigin[1] <= flMaxs[1] && 
            
    flOrigin[2] >= flMins[2] && flOrigin[2] <= flMaxs[2]) 
        { 
            return 
    true
        } 
        else 
        { 
            return 
    false
        } 


    public 
    Action:OnPlayerRunCmd(iClient, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2]) 

        if ( 
    g_bRestrictShootFromZone && g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == 
            { 
                if ( 
    buttons IN_ATTACK 
                { 
                    if ( 
    GetClientTeam(iClient) == 
                    { 
                        if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) ) 
                        { 
                            
    buttons &= ~IN_ATTACK
                            
    PrintCenterText(iClient"%t""shoot blocked"); 
                        } 
                    } 
                    else if ( 
    GetClientTeam(iClient) == 
                    { 
                        if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) ) 
                        { 
                            
    buttons &= ~IN_ATTACK
                            
    PrintCenterText(iClient"%t""shoot blocked"); 
                        } 
                    } 
                } 
            } 
        } 


    public 
    OnTZoneStartTouch(iEntityiToucher

        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( 
    GetClientTeam(iToucher) == 
            { 
                if ( 
    g_bNotice 
                { 
                    
    CPrintToChat(iToucher"%t""entered"); 
                } 
                if ( 
    g_bChangeColor 
                { 
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR); 
                    
    SetEntityRenderColor(iToucherg_iTColor[0], g_iTColor[1], g_iTColor[2], g_iTColor[3]); 
                } 
            } 
        } 


    public 
    OnCTZoneStartTouch(iEntityiToucher

        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( 
    GetClientTeam(iToucher) == 
            { 
                if ( 
    g_bNotice 
                { 
                    
    CPrintToChat(iToucher"%t""entered"); 
                } 
                if ( 
    g_bChangeColor 
                { 
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR); 
                    
    SetEntityRenderColor(iToucherg_iCTColor[0], g_iCTColor[1], g_iCTColor[2], g_iCTColor[3]); 
                } 
            } 
        } 


    public 
    OnTZoneEndTouch(iEntityiToucher

        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( !
    IsClientInGame(iToucher) ) 
            { 
                return; 
            } 
             
            if ( 
    GetClientTeam(iToucher) == 
            { 
                if ( 
    g_bNotice 
                { 
                    
    CPrintToChat(iToucher"%t""leaved"); 
                } 
                if ( 
    g_bChangeColor 
                { 
                    
    SetEntityRenderColor(iToucher255255255255); 
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL); 
                } 
            } 
        } 


    public 
    OnCTZoneEndTouch(iEntityiToucher

        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE 
        { 
            if ( !
    IsClientInGame(iToucher) ) 
            { 
                return; 
            } 
             
            if ( 
    GetClientTeam(iToucher) == 
            { 
                if ( 
    g_bNotice 
                { 
                    
    CPrintToChat(iToucher"%t""leaved"); 
                } 
                if ( 
    g_bChangeColor 
                { 
                    
    SetEntityRenderColor(iToucher255255255255); 
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL); 
                } 
            } 
        } 
    }  

    Мысль состоит вот в чем, хотелось бы добавить HUD Окошко в котором будет идти отсчет времени до исчезания BuyZone Protected. Не знаю заглядывает автор плагина сюда или нет, но думаю что скриптеры помогут в данной ситуации.
     
    Think Different нравится это.
  13. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Ребят поднимаю тему, нужна помощь, посмотрите пост выше...
     
  14. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Alex Tarasenko, так пробуй
    PHP:
    / =============================================================  
    // >> INCLUDES  
    // =============================================================  
    #include <sourcemod>  
    #include <sdktools>  
    #include <sdkhooks>  
    #include <morecolors>  


    // =============================================================  
    // >> PLUGIN INFORMATION  
    // =============================================================  
    public Plugin:myinfo =   
    {  
        
    name         "[ BuyZone Protector ]",  
        
    author         "Regent",  
        
    description "protects certain time players, which inside of their buy zone",  
        
    version     "2.1",  
        
    url         ""  
    };  


    // =============================================================  
    // >> DEFINES  
    // =============================================================  
    #define EFFECT_MODEL        "materials/sprites/lgtning.vmt"  


    // =============================================================  
    // >> CONSOLE VARIABLES  
    // =============================================================  
    new Handle:    g_hConVar_sCTLineColor;  
    new 
    Handle:    g_hConVar_sTLineColor;  
    new 
    Handle:    g_hConVar_flProtectionTime;  
    new 
    Handle:    g_hConVar_bDrawProtectionZone;  
    new 
    Handle:    g_hConVar_bRestrictShootFromZone;  
    new 
    Handle:    g_hConVar_bChangeColor;  
    new 
    Handle:    g_hConVar_sChangeColorCT;  
    new 
    Handle:    g_hConVar_sChangeColorT;  
    new 
    Handle:    g_hConVar_bNotice;  


    // =============================================================  
    // >> SHADOW CONSOLE VARIABLES  
    // =============================================================  
    new Float:    g_flProtectionTime;  
    new 
    bool:    g_bDrawProtectionZone;  
    new 
    bool:    g_bRestrictShootFromZone;  
    new 
    bool:    g_bChangeColor;  
    new 
    bool:    g_bNotice;  
    new         
    g_iCTLineColor[4];  
    new         
    g_iTLineColor[4];  
    new         
    g_iCTColor[4];  
    new         
    g_iTColor[4];  


    // =============================================================  
    // >> GLOBAL VARIABLES  
    // =============================================================  
    new Handle:    g_hProtectionTimer    INVALID_HANDLE;  

    new 
    Float:    g_flTBuyZoneMins[2][3];  
    new 
    Float:    g_flTBuyZoneMaxs[2][3];  
    new 
    Float:    g_flCTBuyZoneMins[2][3];  
    new 
    Float:    g_flCTBuyZoneMaxs[2][3];  

    new            
    g_iModelEntity;  

    new 
    g_iTicks;

    // =============================================================  
    // >> PLUGIN SOURCE CODE  
    // =============================================================  
    public OnPluginStart()  
    {  
        
    LoadTranslations("buyzone_protector.phrases.txt");  
        
        
    g_hConVar_bDrawProtectionZone         CreateConVar("sm_bzp_drawzone""1""ENG: draw (1) or not (0) zone of protection\nRUS: рисовать (1) или нет (0) зону защиты"FCVAR_PLUGIN);  
        
    g_hConVar_flProtectionTime             CreateConVar("sm_bzp_prottime""20.0""ENG: how long in seconds will lasts protection of buyzone\nRUS: как долго в секундах будет длится защита зон покупок"FCVAR_PLUGIN);  
        
    g_hConVar_sCTLineColor                 CreateConVar("sm_bzp_ctlinecolor""0 0 255 255""ENG: color of lines ct zone\nRUS: цвет зоны КТ"FCVAR_PLUGIN);  
        
    g_hConVar_sTLineColor                 CreateConVar("sm_bzp_tlinecolor""255 0 0 255""ENG: color of lines t zone\nRUS: цвет зоны Т"FCVAR_PLUGIN);  
        
    g_hConVar_bRestrictShootFromZone     CreateConVar("sm_bzp_restrictshoot""1""ENG: allow (0) or not (1) shooting from their zone or not\nRUS: разрешить (0) или нет (1) стрелять из своих зон или нет"FCVAR_PLUGIN);  
        
    g_hConVar_bChangeColor                CreateConVar("sm_bzp_changecolor""1""ENG: change (0) or not (1) player color in their zone\nRUS: изменять (0) или нет (1) цвет игроков в своих зонах"FCVAR_PLUGIN);  
        
    g_hConVar_sChangeColorCT            CreateConVar("sm_bzp_changecolorct""0 0 255 125""ENG: color of CT in their zone while protect lasts\nRUS: цвет КТ в своей зоне, пока защита активна"FCVAR_PLUGIN);  
        
    g_hConVar_sChangeColorT                CreateConVar("sm_bzp_changecolort""255 0 0 125""ENG: color of T in their zone while protect lasts\nRUS: цвет Т в своей зоне, пока защита активна"FCVAR_PLUGIN);  
        
    g_hConVar_bNotice                    CreateConVar("sm_bzp_notice""1""ENG: allow (0) or not (1) sending messages about entering/leaving zones\nRUS: разрешить (0) или нет (1) плагину сообщать игрокам о входе/покидании зоны"FCVAR_PLUGIN);  
        
        
    HookConVarChange(g_hConVar_bDrawProtectionZone,     Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_flProtectionTime,         Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_sCTLineColor,             Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_sTLineColor,             Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_bRestrictShootFromZone,     Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_bChangeColor,             Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_sChangeColorCT,             Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_sChangeColorT,             Hook_ConVarChanged);  
        
    HookConVarChange(g_hConVar_bNotice,                 Hook_ConVarChanged);  
        
        
    HookEvent("round_start"Ev_RoundStart);  
        
    AutoExecConfig(true"buyzone_protector");  
        
    CreateConVar("sm_bzp_version",    "2.0 by Regent""version of plugin"FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);  
    }  

    public 
    Hook_ConVarChanged(Handle:hConVar, const String:sOldValue[], const String:sNewValue[])  
    {  
        if ( 
    hConVar == g_hConVar_bDrawProtectionZone )  
        {  
            
    g_bDrawProtectionZone GetConVarBool(g_hConVar_bDrawProtectionZone);  
        }  
        else if ( 
    hConVar == g_hConVar_flProtectionTime )  
        {  
            
    g_flProtectionTime GetConVarFloat(g_hConVar_flProtectionTime);  
        }  
        else if ( 
    hConVar == g_hConVar_sCTLineColor )  
        {  
            
    StringToIntArray(sNewValueg_iCTLineColor);  
        }  
        else if ( 
    hConVar == g_hConVar_sTLineColor )  
        {  
            
    StringToIntArray(sNewValueg_iTLineColor);  
        }  
        else if ( 
    hConVar == g_hConVar_bRestrictShootFromZone )  
        {  
            
    g_bRestrictShootFromZone GetConVarBool(g_hConVar_bRestrictShootFromZone);  
        }  
        else if ( 
    hConVar == g_hConVar_bChangeColor )  
        {  
            
    g_bChangeColor GetConVarBool(g_hConVar_bChangeColor);  
        }  
        else if ( 
    hConVar == g_hConVar_bNotice )  
        {  
            
    g_bNotice GetConVarBool(g_hConVar_bNotice);  
        }  
        else if ( 
    hConVar == g_hConVar_sChangeColorCT )  
        {  
            
    StringToIntArray(sNewValueg_iCTColor);  
        }  
        else if ( 
    hConVar == g_hConVar_sChangeColorT )  
        {  
            
    StringToIntArray(sNewValueg_iTColor);  
        }  
    }  

    public 
    OnPluginEnd()  
    {  
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )  
        {  
            
    KillTimer(g_hProtectionTimer);  
            
    g_hProtectionTimer INVALID_HANDLE;  
        }  
    }  

    public 
    OnMapStart()  
    {  
        
    g_hProtectionTimer INVALID_HANDLE;  
        
        new 
    iEntity = -1;  
        while ((
    iEntity FindEntityByClassname(iEntity"func_buyzone")) != -1)  
        {  
            
    decl Float:flOrigin[3], Float:flVecMins[3], Float:flVecMaxs[3];  
            new 
    iTeam GetEntProp(iEntityProp_Send"m_iTeamNum");  
            
    GetEntPropVector(iEntityProp_Send"m_vecMins"flVecMins);  
            
    GetEntPropVector(iEntityProp_Send"m_vecMaxs"flVecMaxs);  
            
    GetEntPropVector(iEntityProp_Send"m_vecOrigin"flOrigin);  
            
            if ( 
    iTeam == )  
            {  
                
    g_flTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0];  
                
    g_flTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1];  
                
    g_flTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2];  
                
    g_flTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0];  
                
    g_flTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1];  
                
    g_flTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2];  
                
                
    g_flTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0];  
                
    g_flTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1];  
                
    g_flTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2];  
                
    g_flTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0];  
                
    g_flTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1];  
                
    g_flTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2];  
                
                
    SDKHook(iEntitySDKHook_StartTouchOnTZoneStartTouch);  
                
    SDKHook(iEntitySDKHook_EndTouchOnTZoneEndTouch);  
            }  
            else if ( 
    iTeam == )  
            {  
                
    g_flCTBuyZoneMins[0][0] = flOrigin[0] + flVecMins[0];  
                
    g_flCTBuyZoneMins[0][1] = flOrigin[1] + flVecMins[1];  
                
    g_flCTBuyZoneMins[0][2] = flOrigin[2] + flVecMins[2];  
                
    g_flCTBuyZoneMaxs[0][0] = flOrigin[0] + flVecMaxs[0];  
                
    g_flCTBuyZoneMaxs[0][1] = flOrigin[1] + flVecMaxs[1];  
                
    g_flCTBuyZoneMaxs[0][2] = flOrigin[2] + flVecMaxs[2];  
                
                
    g_flCTBuyZoneMins[1][0] = flOrigin[0] + flVecMins[0];  
                
    g_flCTBuyZoneMins[1][1] = flOrigin[1] + flVecMaxs[1];  
                
    g_flCTBuyZoneMins[1][2] = flOrigin[2] + flVecMins[2];  
                
    g_flCTBuyZoneMaxs[1][0] = flOrigin[0] + flVecMaxs[0];  
                
    g_flCTBuyZoneMaxs[1][1] = flOrigin[1] + flVecMins[1];  
                
    g_flCTBuyZoneMaxs[1][2] = flOrigin[2] + flVecMaxs[2];  
                
                
    SDKHook(iEntitySDKHook_StartTouchOnCTZoneStartTouch);  
                
    SDKHook(iEntitySDKHook_EndTouchOnCTZoneEndTouch);  
            }  
        }  
        
        
    g_iModelEntity PrecacheModel(EFFECT_MODEL);  
    }  

    public 
    OnConfigsExecuted()  
    {  
        
    g_bDrawProtectionZone         GetConVarBool    (g_hConVar_bDrawProtectionZone);  
        
    g_bRestrictShootFromZone     GetConVarBool    (g_hConVar_bRestrictShootFromZone);  
        
    g_bChangeColor                 GetConVarBool    (g_hConVar_bChangeColor);  
        
    g_bNotice                     GetConVarBool    (g_hConVar_bNotice);  
        
    g_flProtectionTime             GetConVarFloat(g_hConVar_flProtectionTime);  
        
        
    decl String:sBuffer[20];  
        
    GetConVarString(g_hConVar_sCTLineColorsBuffersizeof(sBuffer) - 1);  
        
    StringToIntArray(sBufferg_iCTLineColor);  
        
        
    GetConVarString(g_hConVar_sTLineColorsBuffersizeof(sBuffer) - 1);  
        
    StringToIntArray(sBufferg_iTLineColor);  
        
        
    GetConVarString(g_hConVar_sChangeColorCTsBuffersizeof(sBuffer) - 1);  
        
    StringToIntArray(sBufferg_iCTColor);  
        
        
    GetConVarString(g_hConVar_sChangeColorTsBuffersizeof(sBuffer) - 1);  
        
    StringToIntArray(sBufferg_iTColor);  
        
        for ( new 
    1<= MaxClientsi++ )  
        {  
            if ( 
    IsClientInGame(i) )  
            {  
                
    OnClientPutInServer(i);  
            }  
        }  
    }  

    StringToIntArray(const String:sInput[], Array[])  
    {  
        
    decl String:sBuffer[4][5]  
        
    ExplodeString(sInput" "sBuffersizeof(sBuffer), sizeof(sBuffer[]) - 1);  
        Array[
    0] = StringToInt(sBuffer[0]);  
        Array[
    1] = StringToInt(sBuffer[1]);  
        Array[
    2] = StringToInt(sBuffer[2]);  
        Array[
    3] = StringToInt(sBuffer[3]);  
    }  

    public 
    OnClientPutInServer(iClient)  
    {  
        
    SDKHook(iClientSDKHook_OnTakeDamageOnTakeDamage);  
    }  

    public 
    OnClientDisconnect_Post(iClient)  
    {  
        
    SDKUnhook(iClientSDKHook_OnTakeDamageOnTakeDamage);  
    }  

    public 
    Action:OnTakeDamage(iClient, &iAttacker, &iInflictor, &Float:flDamage, &iDamageType)  
    {  
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == )  
            {  
                if ( 
    GetClientTeam(iClient) == )  
                {  
                    if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )  
                    {  
                        
    flDamage 0.0;  
                        return 
    Plugin_Changed;  
                    }  
                }  
                else if ( 
    GetClientTeam(iClient) == )  
                {  
                    if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )  
                    {  
                        
    flDamage 0.0;  
                        return 
    Plugin_Changed;  
                    }  
                }  
            }  
        }  
        
        return 
    Plugin_Continue;  
    }  

    public 
    Ev_RoundStart(Handle:hEvent, const String:sEvName[], bool:bSilent)  
    {  
        if ( 
    g_bDrawProtectionZone )  
        {  
            
    DrawZoneByCoords(g_flCTBuyZoneMinsg_flCTBuyZoneMaxsg_iCTLineColor);  
            
    DrawZoneByCoords(g_flTBuyZoneMinsg_flTBuyZoneMaxsg_iTLineColor);  
        }  
        
        if ( 
    g_hProtectionTimer != INVALID_HANDLE )  
        {  
            
    KillTimer(g_hProtectionTimer);  
        }  
        
    g_iTicks RoundToCeil(g_flProtectionTime);
        
    g_hProtectionTimer CreateTimer(1.0Timer_TicksRemoveProtection_TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);  
    }  

    public 
    Action:Timer_TicksRemoveProtection(Handle:hTimer)  
    {  
        if(--
    g_iTicks == 0)
        {
            
    RemoveProtection();
            return 
    Plugin_Stop;  
        } else 
    PrintCenterTextAll("%i"g_iTicks);
        return 
    Plugin_Continue;  
    }

    RemoveProtection()  
    {  
        for ( new 
    1<= MaxClientsi++ )  
        {  
            if ( 
    IsClientInGame(i) )  
            {  
                if ( 
    GetClientTeam(i) == )  
                {  
                    if ( 
    IsClientInside(ig_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )  
                    {  
                        if ( 
    g_bNotice )  
                        {  
                            
    CPrintToChat(i"%t""ended");  
                        }  
                        if ( 
    g_bChangeColor )  
                        {  
                            
    SetEntityRenderColor(i255255255255);  
                            
    SetEntityRenderMode(iRENDER_NORMAL);  
                        }  
                    }  
                }  
                else if ( 
    GetClientTeam(i) == )  
                {  
                    if ( 
    IsClientInside(ig_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )  
                    {  
                        if ( 
    g_bNotice )  
                        {  
                            
    CPrintToChat(i"%t""ended");  
                        }  
                        if ( 
    g_bChangeColor )  
                        {  
                            
    SetEntityRenderColor(i255255255255);  
                            
    SetEntityRenderMode(iRENDER_NORMAL);  
                        }  
                    }  
                }  
            }  
        }  
        
        
    g_hProtectionTimer INVALID_HANDLE;  
        return 
    Plugin_Stop;  
    }  

    DrawZoneByCoords(const Float:flMins[2][3], const Float:flMaxs[2][3], const iColor[4])  
    {  
        
    decl Float:flBuffer1[3], Float:flBuffer2[3];  
        
        
    flBuffer1[0] = flMaxs[0][0];  
        
    flBuffer1[1] = flMaxs[0][1];  
        
    flBuffer1[2] = flMaxs[0][2];  
        
    flBuffer2[0] = flMaxs[1][0];  
        
    flBuffer2[1] = flMaxs[1][1];  
        
    flBuffer2[2] = flMaxs[0][2];  
        
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);  
        
    TE_SendToAll();  
        
        
    flBuffer1[0] = flMaxs[0][0];  
        
    flBuffer1[1] = flMaxs[0][1];  
        
    flBuffer1[2] = flMaxs[0][2];  
        
    flBuffer2[0] = flMins[1][0];  
        
    flBuffer2[1] = flMins[1][1];  
        
    flBuffer2[2] = flMaxs[0][2];  
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);  
        
    TE_SendToAll();  
        
        
    flBuffer1[0] = flMins[0][0];  
        
    flBuffer1[1] = flMins[0][1];  
        
    flBuffer1[2] = flMaxs[0][2];  
        
    flBuffer2[0] = flMaxs[1][0];  
        
    flBuffer2[1] = flMaxs[1][1];  
        
    flBuffer2[2] = flMaxs[0][2];  
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);  
        
    TE_SendToAll();  
        
        
    flBuffer1[0] = flMins[0][0];  
        
    flBuffer1[1] = flMins[0][1];  
        
    flBuffer1[2] = flMaxs[0][2];  
        
    flBuffer2[0] = flMins[1][0];  
        
    flBuffer2[1] = flMins[1][1];  
        
    flBuffer2[2] = flMaxs[0][2];  
        
    TE_SetupBeamPoints(flBuffer1flBuffer2g_iModelEntity000g_flProtectionTime20.020.000.0iColor0);  
        
    TE_SendToAll();  
    }  

    bool:IsClientInside(const &iClient, const Float:flMins[3], const Float:flMaxs[3])  
    {  
        
    decl Float:flOrigin[3];  
        
    GetClientAbsOrigin(iClientflOrigin);  
        
        if (
    flOrigin[0] >= flMins[0] && flOrigin[0] <= flMaxs[0] &&  
                
    flOrigin[1] >= flMins[1] && flOrigin[1] <= flMaxs[1] &&  
                
    flOrigin[2] >= flMins[2] && flOrigin[2] <= flMaxs[2])  
        {  
            return 
    true;  
        }  
        else  
        {  
            return 
    false;  
        }  
    }  

    public 
    Action:OnPlayerRunCmd(iClient, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2])  
    {  
        if ( 
    g_bRestrictShootFromZone && g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( 
    GetEntProp(iClientProp_Send"m_bInBuyZone") == )  
            {  
                if ( 
    buttons IN_ATTACK )  
                {  
                    if ( 
    GetClientTeam(iClient) == )  
                    {  
                        if ( 
    IsClientInside(iClientg_flTBuyZoneMins[0], g_flTBuyZoneMaxs[0]) )  
                        {  
                            
    buttons &= ~IN_ATTACK;  
                            
    PrintCenterText(iClient"%t""shoot blocked");  
                        }  
                    }  
                    else if ( 
    GetClientTeam(iClient) == )  
                    {  
                        if ( 
    IsClientInside(iClientg_flCTBuyZoneMins[0], g_flCTBuyZoneMaxs[0]) )  
                        {  
                            
    buttons &= ~IN_ATTACK;  
                            
    PrintCenterText(iClient"%t""shoot blocked");  
                        }  
                    }  
                }  
            }  
        }  
    }  

    public 
    OnTZoneStartTouch(iEntityiToucher)  
    {  
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( 
    GetClientTeam(iToucher) == )  
            {  
                if ( 
    g_bNotice )  
                {  
                    
    CPrintToChat(iToucher"%t""entered");  
                }  
                if ( 
    g_bChangeColor )  
                {  
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR);  
                    
    SetEntityRenderColor(iToucherg_iTColor[0], g_iTColor[1], g_iTColor[2], g_iTColor[3]);  
                }  
            }  
        }  
    }  

    public 
    OnCTZoneStartTouch(iEntityiToucher)  
    {  
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( 
    GetClientTeam(iToucher) == )  
            {  
                if ( 
    g_bNotice )  
                {  
                    
    CPrintToChat(iToucher"%t""entered");  
                }  
                if ( 
    g_bChangeColor )  
                {  
                    
    SetEntityRenderMode(iToucherRENDER_TRANSCOLOR);  
                    
    SetEntityRenderColor(iToucherg_iCTColor[0], g_iCTColor[1], g_iCTColor[2], g_iCTColor[3]);  
                }  
            }  
        }  
    }  

    public 
    OnTZoneEndTouch(iEntityiToucher)  
    {  
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( !
    IsClientInGame(iToucher) )  
            {  
                return;  
            }  
            
            if ( 
    GetClientTeam(iToucher) == )  
            {  
                if ( 
    g_bNotice )  
                {  
                    
    CPrintToChat(iToucher"%t""leaved");  
                }  
                if ( 
    g_bChangeColor )  
                {  
                    
    SetEntityRenderColor(iToucher255255255255);  
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL);  
                }  
            }  
        }  
    }  

    public 
    OnCTZoneEndTouch(iEntityiToucher)  
    {  
        if ( 
    iToucher <= MaxClients && g_hProtectionTimer != INVALID_HANDLE )  
        {  
            if ( !
    IsClientInGame(iToucher) )  
            {  
                return;  
            }  
            
            if ( 
    GetClientTeam(iToucher) == )  
            {  
                if ( 
    g_bNotice )  
                {  
                    
    CPrintToChat(iToucher"%t""leaved");  
                }  
                if ( 
    g_bChangeColor )  
                {  
                    
    SetEntityRenderColor(iToucher255255255255);  
                    
    SetEntityRenderMode(iToucherRENDER_NORMAL);  
                }  
            }  
        }  
     
  15. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    2 ошибки при компиляции

    1. (1)errors 010 инвалид функцион ор декларашен
    2. (352)warning 213: tag mismathc
     
  16. marlboro

    marlboro

    Сообщения:
    37
    Симпатии:
    18
    Привет ребят! Кто может поправить:
    Сервер CS: GO
    Код:
    L 08/05/2015 - 21:41:08: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:41:08: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:42:16: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:42:16: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:42:16: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:43:29: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:43:29: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:43:29: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:44:48: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:44:48: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:44:48: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:46:16: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:46:16: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:46:16: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:49:26: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:49:26: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:49:26: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:52:32: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:52:32: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:52:32: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    L 08/05/2015 - 21:54:23: [SM] Native "KillTimer" reported: Invalid timer handle 5da8094b (error 7)
    L 08/05/2015 - 21:54:23: [SM] Displaying call stack trace for plugin "buyzone_protector.smx":
    L 08/05/2015 - 21:54:23: [SM]   [0]  Line 292, C:\Users\Reiko\Desktop\sm15\css\buyzone_protector.sp::Ev_RoundStart()
    [SM] Listing 37 plugins:
    01 "Advertisements" (0.6 CSGO-1.1) by Tsunami (CSGO FIX Феникс)
    02 "Player Commands" (1.7.2) by AlliedModders LLC
    03 "Admin Help" (1.7.2) by AlliedModders LLC
    04 "Resetscore" (2.6.0) by shavit
    05 "[THC RPG] Total HardCore RPG modification by [RUS] SenatoR" (0.9.7) by ArsiRC, modification: [RUS] SenatoR
    06 "Fun Votes" (1.7.2) by AlliedModders LLC
    07 "MapChooser" (1.7.2) by AlliedModders LLC
    08 "SuperLogs: CSS" (1.2.4) by psychonic
    09 "HLstatsX CE Ingame Plugin" (1.6.19) by psychonic
    10 "Basic Chat" (1.7.2) by AlliedModders LLC
    11 "Levels Ranks" (v1.0.3) by RoadSide Romeo
    12 "Basic Info Triggers" (1.7.2) by AlliedModders LLC
    13 "THC RPG LVL UP SETTINGS ADDON" (1.0) by [RUS] SenatoR
    14 "Anti-Flood" (1.7.2) by AlliedModders LLC
    15 "Map Nominations" (1.7.2) by AlliedModders LLC
    16 "SM Parachute" (2.0) by Translate OT Frol
    17 "Anticamp CS:S and CS:GO" (2.5.2) by stachi
    18 "Rock The Vote" (1.7.2) by AlliedModders LLC
    19 "Client Preferences" (1.7.2) by AlliedModders LLC
    20 "NoBlock" (1.4.2) by Otstrel.ru Team
    21 "RandomCycle" (1.7.2) by AlliedModders LLC
    22 "Admin File Reader" (1.7.2) by AlliedModders LLC
    23 "Spawn Protection [Added CS:GO Support]" (1.5 [CS:GO Support]) by Fredd
    24 "Reserved Slots" (1.7.2) by AlliedModders LLC
    25 "Basic Commands" (1.7.2) by AlliedModders LLC
    26 "No Fall Damage" (0.0.1.9) by alexip121093
    27 "Fun Commands" (1.7.2) by AlliedModders LLC
    28 "Admin Menu" (1.7.2) by AlliedModders LLC
    29 "Basic Votes" (1.7.2) by AlliedModders LLC
    30 "Nextmap" (1.7.2) by AlliedModders LLC
    31 "Rotate server graphic banners" (0.3) by HiTmAnY
    32 "Sound Commands" (1.7.2) by AlliedModders LLC
    33 "Basic Comm Control" (1.7.2) by AlliedModders LLC
    34 "[CSS/CS:GO] AbNeR Bunny Hoping" (1.5) by AbNeR_CSS
    35 "ConnectInfo" (1.4.0.0 CSGO) by merk26 - CSGO FIX Феникс
    36 "[ BuyZone Protector ]" (2.1) by Regent
    37 "SourceBans" (1.4.9) by SourceBans Development Team
    Listing 4 plugins:
    [01] SourceMod (1.7.2) by AlliedModders LLC
    [02] CS Tools (1.7.2) by AlliedModders LLC
    [03] SDK Tools (1.7.2) by AlliedModders LLC
    [04] SDK Hooks (1.7.2) by AlliedModders LLC
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Напиши с новой строки в любом месте:
    PHP:
    public OnMapEnd() g_hProtectionTimer INVALID_HANDLE;
    Оффтоп
     
  18. marlboro

    marlboro

    Сообщения:
    37
    Симпатии:
    18
    Спасибо, попробую.
     
  19. marlboro

    marlboro

    Сообщения:
    37
    Симпатии:
    18
    На CS: GO данный плагин работает некорректно, хочет работает, хочет не работает... По крайней мере на Surf картах так...
     
  20. Segey

    Segey

    Сообщения:
    15
    Симпатии:
    0
    0 байт, все файлы пустые?