[Любая игра] Map Zones

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

  1. Root

    Root AWOL.

    Сообщения:
    77
    Симпатии:
    184
    Map Zones
    Текущая версия: 1.1

    Доброго времени суток!
    Представляю Вам мой самый крупный плагин. Я хотел его сделать еще давным давно, но не знал как создать визуальное отображение зоны.
    Спасибо Peace-Maker за плагин Anti Rush, который очень в этом мне помог!

    Описание:
    Плагин создает зоны на карте куда не могут проходить игроки. Будь то террористы/красные/союзники, контры/синие/вермахт или вообще все игроки.
    В плагин встроены различные наказания (до 5 стандартных и безлимитное количество "кастомных"). Админам можно выдать иммунитет от наказаний.
    Скриптеры могут создавать свои зоны. Смотри пример такого плагина и второй пост.

    Плагин может быть полезен для:
    • Блокировки прохождения в чужой респаун.
    • Блокировки прохождения в любое другое место.
    • Предотвращения rush'а.
    • Блокировки использования багов/эксплоитов карты.
    • Предотвращения кемперства.
    • Создания невидимых стен.
    И многое другое!

    Требования:
    SourceMod

    Поддерживаются игры:
    • CS: Source
    • CS: GO
    • Team Fortress 2
    • Insurgency
    • Все игры на движке source

    Установка:
    1. Закинуть файл .sp в addons/sourcemod/scripting
    2. Закинуть файл .smx в addons/sourcemod/plugins
    3. Конфиг создается автоматически в cfg/sourcemod/sm_zones.cfg

    Настройки:
    • Напишите !zones в чате и выберите пункт 'Добавить зону' (или создайте зону через Админское меню > Управление сервером > Настроить зоны на карте).
    • Встаньте в первый край зоны и нажмите кнопку E (команда +USE или Medic! в TF2).
    • Затем встаньте в конечную точку зоны (для указания площади) и еще раз нажмите кнопку E.
    • Напишите имя зоны в чате (Например middle).
    • Сохраните зону.
    • Настройте координаты, размер и наказание через главное меню.
    P.S Не забывайте сохранять первые и вторые координаты зон сразу после их изменения, иначе они могут не сохраниться!

    Команды:
    Для управления зонами необходим флаг ADMFLAG_CONFIG ( известен по букве i ).
    Если Вы хотите использовать другой флаг, измените доступ к команде sm_zones_immunity через overrides.
    • sm_zones - Открывает меню зон.
    • sm_actzone - Активирует отключенную зону.
    • sm_diactzone - Отключает зону, не удаляя её с карты.
    После использования оных команд админам будет выскакивать меню с включенными или отключенными зонами на карте.
    Если команда используется через серверный консоль, то необходимо полностью указать имя зоны (для ее включения или отключения соответственно).
    Например: sm_diactzone middle

    Переменные:
    • sm_zones_enable - Включить/выключить плагин зон. (по стандарту вкл.)
    • sm_zones_punishment - Стандартное наказание для любой зоны (если не указано через меню):
      • 1 = Оповещение в чате
      • 2 = Отталкивание назад (стандарт)
      • 3 = Убийство игрока
      • 4 = Предотвращение стрельбы внутри зоны
      • 5 = Использование оружия ближнего боя внутри зоны
      • 6 = Нестандартное (кастомное) наказание
    • sm_zones_admin_immunity - Защищать админов от наказаний зон. (по стандарту выкл.)
    • sm_zones_show_messages - Оповещать игроков в чате когда они заходит или выходит из какой-либо зоны. (по стандарту вкл.)
    • sm_zones_show - Всегда ли показывать очертания зон на карте? (по стандарту выкл.)

    Заметки:
    • Отключенные зоны не удаляются из конфига и всё равно отображаются на карте. Чтобы их снова активировать, откройте пункт Активировать зону или введите !actzone в чате.
    • Вы можете найти конфиги зон для каждой карты в папке sourcemod/data/zones/
    • Все зоны заново создаются после начала раунда, даже если они были отключены ранее.
    • Красный/синий/зеленый цвета зоны означают что красная/синяя/зеленая команда может проходить сквозь эту зону безнаказанно :-D. "Свои" зоны не отображаются для игроков.
    • Если зоны иногда исчезают, укажите наименьший интервал их отображения в строке №27 и скомпилируйте плагин.
    • Не рекомендуется всегда отображать зоны на карте (с целью предотвращения возможных лагов сервера и/или игроков).
    • Плагин работает в любой игре, которую поддерживает SourceMod!
    • Плагин генерирует собственный конфиг (cfg/sourcemod/sm_zones.cfg).
    • Плагин поддерживает различные переводы!

    Серверы с этим плагином

    Скачать плагин
    Посмотреть исходный код
     
    Последнее редактирование модератором: 31 мар 2016
    uaqq, rodgerland, komashchenko и 14 другим нравится это.
  2. Root

    Root AWOL.

    Сообщения:
    77
    Симпатии:
    184
    Re: [ANY] Map Zones (Зоны на карте)

    Больше примеров использования "кастомных" зон.
    PHP:
    #include <sdktools>
    #include <sdkhooks>
    #undef REQUIRE_EXTENSIONS // Чтобы плагин загрузился, нужно отметить дополнения как "необязательные"
    #include <cstrike>
    #include <tf2_stocks>
    #tryinclude <dodhooks> // Для компиляции
    #define MAX_EDICTS (1 << 11)

    // Для дуэльной зоны
    new bool:InDuelingZone[MAXPLAYERS 1] = {false, ...}, numDuellers[MAX_EDICTS];

    public 
    Plugin:myinfo =
    {
        
    name        "SM Custom Zones",
        
    author      "Root",
        
    description "Тестовый плагин \"кастомных\" зон.",
        
    version     "1.0",
        
    url         "http://www.dodsplugins.com/"
    }

    public 
    OnPluginStart()
    {
        
    // HookEventEx не будет выдавать ошибку, если такого события не существует (например в DoD:S)
        
    HookEventEx("round_freeze_end"OnRoundStart);
    }

    public 
    OnEntityCreated(entity, const String:classname[])
    {
        
    // Количество дуэлянтов ограничено! :D
        
    numDuellers[entity] = 0;
    }

    public 
    OnEntityDestroyed(entity)
    {
        
    // Если игрок ушел с сервера, значит он больше не в дуэльной зоне
        
    if (<= entity <= MaxClients)
        {
            
    InDuelingZone[entity] = false;
        }
        if (
    numDuellers[entity])
        {
            
    // Если вдруг удалилась дуэльная зона, тогда "обезвредим" всех дуэлянтов
            
    for (new 1<= MaxClientsi++)
                
    InDuelingZone[i] = false;
        }
    }

    public 
    OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    // Когда раунд начался, активируем 'no rush' зону для терроров
        
    ServerCommand("sm_actzone norush");
        
    CreateTimer(1.0Timer_ActivateZone_TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:Timer_ActivateZone(Handle:timer)
    {
        
    // Т.к. таймер повторяется каждую секунду, создадим счетчик
        
    static TimesRepeated 0;

        switch (++
    TimesRepeated)
        {
            case 
    102030// Каждые 10 секунд...
            
    {
                for (new 
    1<= MaxClientsi++)
                {
                    if (
    IsClientInGame(i))
                    {
                        
    // ... будем показывать террористам ...
                        
    if (GetClientTeam(i) != CS_TEAM_T)
                            continue;

                        
    // ... через сколько секунд они смогут рашить
                        
    PrintToChat(i"Вы сможете атаковать только через %i сек!"40 TimesRepeated);
                    }
                }
            }
            case 
    40// После 40 секунд отключим зону
            
    {
                
    // Обнулим счетчик таймера
                
    TimesRepeated 0;

                
    // Активируем зону (по её названию) через консоль
                
    ServerCommand("sm_diactzone norush");

                
    PrintToChatAll("Готовьтесь к смерти!");

                
    // Остановим повторяющийся таймер
                
    return Plugin_Stop;
            }
        }

        return 
    Plugin_Continue;
    }

    /**
     * OnEnteredProtectedZone()
     *
     * Когда игрок входит в зону.
     *
     * @param zone        Индекс зоны в которую вошел игрок.
     * @param client    Индекс игрока, который вошел в зону.
     * @param prefix    Префикс, отображаемый в чате (когда игрок входит в зону).
     * @noreturn
     * -------------------------------------------------------------------------- */
    public Action:OnEnteredProtectedZone(zoneclient, const String:prefix[])
    {
        
    // Заполучим переменную sm_zones_show_messages, которая показывает сообщения
        
    static Handle:ShowZones   INVALID_HANDLE;
        if (!
    ShowZonesShowZones FindConVar("sm_zones_show_messages");

        if (
    <= client <= MaxClients)
        {
            
    // Заполучим имя зоны (чтобы потом сравнивать в какую конкретно зону вошел игрок)
            
    decl String:m_iName[MAX_NAME_LENGTH*2], String:szMsg[PLATFORM_MAX_PATH];
            
    GetEntPropString(zoneProp_Data"m_iName"m_iNamesizeof(m_iName));

            
    // Пропустим первые 8 символов чтобы игнорировать префикс зоны (sm_zone )
            
    if (StrEqual(m_iName[8], "chat"false))
            {
                
    // Тестовая зона
                
    Format(szMsgsizeof(szMsg), "Вы зашли в зону под названием \"%s\"."m_iName[8]);
            }

            
    // Зона неуязвимости
            
    else if (StrEqual(m_iName[8], "godmode"false))
            {
                
    // Сделаем игрока неуязвимым при помощи плагина, представленного ниже
                // https://forums.alliedmods.net/showthread.php?p=979550
                
    ServerCommand("sm_god #%i 1"GetClientUserId(client));
                
    strcopy(szMsgsizeof(szMsg), "Вы зашли в зону бессмертия!");
            }

            
    // Зона пониженной гравитации
            
    else if (StrEqual(m_iName[8], "lowgrav"false))
            {
                
    // Применим только половинную гравитацию для игрока
                
    SetEntityGravity(client0.5);
                
    strcopy(szMsgsizeof(szMsg), "Вы зашли в зону пониженной гравитации!");
            }

            
    // А это зона где игроки могут закупиться, но не могут стрелять
            
    else if (StrEqual(m_iName[8], "spawnoshoot"false))
            {
                if (
    SDKHookEx(clientSDKHook_PostThinkPostPostThinkPost))
                    
    strcopy(szMsgsizeof(szMsg), "Вы не сможете стрелять пока находитесь в этой зоне!");
            }

            
    // Зона возвращения в респаун
            
    else if (StrEqual(m_iName[8], "spawntele"false))
            {
                
    // Возродим (т.е. возвратим) игрока на свою базу
                
    switch (EngineVersion:GetEngineVersion())
                {
                    
    // CS:S и CS:GO использует свою функцию возрожедния
                    
    case Engine_CSSEngine_CSGOCS_RespawnPlayer(client);
                    case 
    Engine_TF2TF2_RespawnPlayer(client); // И TF2 тоже

    #if defined _dodhooks_included
                    
    case Engine_DODSRespawnPlayer(client); // Для DoD:S необходимо использовать дополнение DoD Hooks
    #endif
                    
    default: TeleportEntity(clientFloat:{123.0456.0789.0}, NULL_VECTORNULL_VECTOR); // Можно просто телепортируем игрока в нужные координаты
                
    }

                
    // Форматируем сообщение
                
    strcopy(szMsgsizeof(szMsg), "You shall not pass, motherfucker!");
            }

            
    // Дуэльная зона
            
    else if (StrEqual(m_iName[8], "dueling"false))
            {
                
    // Увеличим кол-во дуэлянтов
                // Если дуэлянтов меньше или равно 2, то...
                
    if (++numDuellers[zone] <= 2)
                {
                    
    // ... заблокируем получаемый урон от любых игроков, находящихся вне дуэльной зоны
                    
    InDuelingZone[client] = true;
                    
    SDKHook(clientSDKHook_TraceAttack,  TraceAttack);
                    
    SDKHook(clientSDKHook_OnTakeDamageOnTakeDamage);
                    
    strcopy(szMsgsizeof(szMsg), "Вы зашли в зону для дуэлей!");

                    
    // Сделаем так чтобы иные игроки не смогли входить в зону
                    //SetEntProp(zone, Prop_Send, "m_CollisionGroup", 17);
                
    }
            }

            
    // Проверим должно ли отображаться сообщение сразу как только игрок вошел в зону?
            
    if (GetConVarBool(ShowZones))
            {
                
    PrintToChat(client"%s%s"prefixszMsg);
            }
        }
    }

    /**
     * OnLeftProtectedZone()
     *
     * Когда игрок выходит из зоны.
     *
     * @param zone        Индекс зоны из которой вышел игрок.
     * @param client    Индекс игрока, который вышел из зоны.
     * @param prefix    Префикс, отображаемый в чате (когда игрок выходит из зоны).
     * @noreturn
     * -------------------------------------------------------------------------- */
    public Action:OnLeftProtectedZone(zoneclient, const String:prefix[])
    {
        static 
    Handle:ShowZones   INVALID_HANDLE;

        
    // Сохраним носитель переменной (через static) чтобы в дальнейшем переменную не запрашивать
        
    if (!ShowZonesShowZones FindConVar("sm_zones_show_messages");

        if (
    <= client <= MaxClients)
        {
            
    // Необходимо проверять зоны по их названию, иначе "нестандартные" зоны были бы полной чушью
            
    decl String:m_iName[MAX_NAME_LENGTH*2], String:szMsg[PLATFORM_MAX_PATH];
            
    GetEntPropString(zoneProp_Data"m_iName"m_iNamesizeof(m_iName));

            
    // И здесь пропустим префиксы 'sm_zone '
            
    if (StrEqual(m_iName[8], "chat"false))
            {
                
    Format(szMsgsizeof(szMsg), "Вы вышли из зоны \"%s\"."m_iName[8]);
            }
            
    // Имена зон должны строго соответствовать!
            
    else if (StrEqual(m_iName[8], "godmode"false))
            {
                
    // Отключим бессмертие после выхода из зоны неуязвимости
                
    ServerCommand("sm_god #%i 0"GetClientUserId(client));
                
    strcopy(szMsgsizeof(szMsg), "Вы снова простой смертный!");
            }
            else if (
    StrEqual(m_iName[8], "lowgrav"false))
            {
                
    // Вернем стандартную гравитацию
                
    SetEntityGravity(client1.0);
                
    strcopy(szMsgsizeof(szMsg), "Вы вышли из зоны пониженной гравитации!");
            }
            else if (
    StrEqual(m_iName[8], "spawnoshoot"false))
            {
                
    SDKUnhook(clientSDKHook_PostThinkPostPostThinkPost);
                
    strcopy(szMsgsizeof(szMsg), "Вы покинули зону и снова можете стрелять!"); // Звучит двойственно...
            
    }
            else if (
    StrEqual(m_iName[8], "dueling"false))
            {
                
    // Для предотвращения ошибок надо сверить что один из дуэлянтов покинул зону
                
    if (InDuelingZone[client])
                {
                    
    numDuellers[zone]--;
                    
    InDuelingZone[client] = false;
                    
    SDKUnhook(clientSDKHook_TraceAttack,  TraceAttack);
                    
    SDKUnhook(clientSDKHook_OnTakeDamageOnTakeDamage);
                    
    strcopy(szMsgsizeof(szMsg), "Вы вышли из дуэльной зоны!");
                    
    //SetEntProp(zone, Prop_Send, "m_CollisionGroup", 11);
                
    }
            }
            
    // И так далее...

            // Когда игрок умирает, считается что он покинул зону
            
    if (GetConVarBool(ShowZones) && IsPlayerAlive(client))
            {
                
    // Отобразим сообщение только когда живой игрок покидает зону
                
    PrintToChat(client"%s%s"prefixszMsg);
            }
        }
    }

    public 
    PostThinkPost(client)
    {
        
    SetEntPropFloat(clientProp_Send"m_flNextAttack"GetGameTime() + 0.5);
    }

    public 
    Action:TraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotypehitboxhitgroup)
    {
        return (
    InDuelingZone[attacker] && InDuelingZone[victim]) ? Plugin_Continue Plugin_Handled;
    }

    public 
    Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        return (
    InDuelingZone[attacker] && InDuelingZone[victim]) ? Plugin_Continue Plugin_Handled;
    }
     
    Последнее редактирование: 18 фев 2014
    Kaktus777, Серый™ и Konstantin нравится это.
  3. Leckter Hannibal

    Leckter Hannibal

    Сообщения:
    521
    Симпатии:
    146
    Re: [ANY] Map Zones (Зоны на карте)

    Здравствуйте плагин отличный .
    Вот если бы еще доработать в нем чтоб зона запрета настраивалась на срабатывание через определенной время это было бы сильно . Ведь можно было бы ее использовать на карте даст 2 для таких целей чтоб не крысили люди на респе .То есть отметил зону и секунд через тридцать там был бы запрет терам стрелять или тупо выталкивала от туда.Может создатель плагина Root подумает над этим если конечно не трудно или не в лом.Вроде неплохое дополнение было бы.
    P.S. За труды спасибо !!! :beer:
     
    Lominad нравится это.
  4. Lominad

    Lominad

    Сообщения:
    135
    Симпатии:
    27
    Re: [ANY] Map Zones (Зоны на карте)

    Всеми руками и ногами поддерживаю!
     
  5. Root

    Root AWOL.

    Сообщения:
    77
    Симпатии:
    184
    Re: [ANY] Map Zones (Зоны на карте)

    Как то так
    PHP:
    #include <sdktools>
    #include <sdkhooks>

    public OnPluginStart()
    {
        
    // Отловим событие начала раунда
        
    switch (EngineVersion:GetEngineVersion())
        {
            case 
    Engine_DODSHookEvent("dod_round_start",      OnRoundStartEventHookMode_PostNoCopy);
            case 
    Engine_TF2:  HookEvent("teamplay_round_start"OnRoundStartEventHookMode_PostNoCopy);
            default:          
    HookEventEx("round_start",        OnRoundStartEventHookMode_PostNoCopy);
        }
    }

    public 
    OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    // Деактивируем нашу зону в начале раунда
        
    ServerCommand("sm_diactzone myzone");
        
    CreateTimer(30.0Timer_ActivateMyZone_TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:Timer_ActivateMyZone(Handle:timer)
    {
        
    // Активируем зону спустя 30 секунд
        
    ServerCommand("sm_actzone myzone");

        
    // Найдем нашу зону на карте
        
    decl String:class[MAX_NAME_LENGTH*2], zonezone = -1;
        while ((
    zone FindEntityByClassname(zone"trigger_multiple")) != -1)
        {
            if (
    IsValidEntity(zone)
            && 
    GetEntPropString(zoneProp_Data"m_iName", class, sizeof(class))
            && 
    StrEqual(class[8], "myzone"false)) // Сверим её по имени
            
    {
                
    // Сделаем зону отталкивающей
                
    SetEntProp(zoneProp_Send"m_CollisionGroup"17);
            }
        }
    }

    public 
    Action:OnEnteredProtectedZone(zoneclient, const String:prefix[])
    {
        
    // Не забывайте что наказание должно быть "нестандартным"
        
    static Handle:ShowZones   INVALID_HANDLE;
        if (!
    ShowZonesShowZones FindConVar("sm_zones_show_messages");

        if (
    <= client <= MaxClients)
        {
            
    decl String:m_iName[MAX_NAME_LENGTH*2];
            
    GetEntPropString(zoneProp_Data"m_iName"m_iNamesizeof(m_iName));

            
    // Когда игрок заходит в нашу зону
            
    if (StrEqual(m_iName[8], "myzone"false))
            {
                
    // Запретим стрельбу пока игрок находится внутри зоны
                
    SDKHookEx(clientSDKHook_PostThinkPostPostThinkPost);

                if (
    GetConVarBool(ShowZones))
                {
                    
    PrintToChat(client"%sВы не можете стрелять пока находитесь в этой зоне!"prefix)
                }
            }
        }
    }

    public 
    Action:OnLeftProtectedZone(zoneclient, const String:prefix[])
    {
        static 
    Handle:ShowZones   INVALID_HANDLE;
        if (!
    ShowZonesShowZones FindConVar("sm_zones_show_messages");

        if (
    <= client <= MaxClients)
        {
            
    decl String:m_iName[MAX_NAME_LENGTH*2];
            
    GetEntPropString(zoneProp_Data"m_iName"m_iNamesizeof(m_iName));

            if (
    StrEqual(m_iName[8], "myzone"false))
            {
                
    // Разрешим стрельбу
                
    SDKUnhook(clientSDKHook_PostThinkPostPostThinkPost);

                if (
    GetConVarBool(ShowZones) && IsPlayerAlive(client))
                {
                    
    PrintToChat(client"%sВы снова можете стрелять!"prefix);
                }
            }
        }
    }

    public 
    PostThinkPost(client)
    {
        
    SetEntPropFloat(clientProp_Send"m_flNextAttack"GetGameTime() + 0.5);
    }
     
    Последнее редактирование: 18 фев 2014
    dp_ua, Серый™, Lominad и ещё 1-му нравится это.
  6. Root

    Root AWOL.

    Сообщения:
    77
    Симпатии:
    184
    Re: [ANY] Map Zones (Зоны на карте)

    Добавил поддержку Insurgency, но на работоспособность не проверял. Может ли кто-нибудь протестировать?
     

    Вложения:

    • sm_zones.zip
      Размер файла:
      44,4 КБ
      Просмотров:
      19
  7. Niver

    Niver

    Сообщения:
    4
    Симпатии:
    0
    Re: [ANY] Map Zones (Зоны на карте)

    Привет. Отличный плагин, но можно как нибудь сделать так что бы при создать двух точек, что бы с первой точки телепотировало во вторую для всех игроков?
     
    Последнее редактирование: 24 июн 2014
  8. dp_ua

    dp_ua

    Сообщения:
    9
    Симпатии:
    0
    Re: [ANY] Map Zones (Зоны на карте)

    в лефте 1 не пашет. во-первых ошибки при компиляции, во-вторых потом ни на одну команду не отвечает, хотя плаг "стал" после редактирования проблемных строк.
    + "вырванный" лог ошибок из консоли

    L 09/14/2014 - 23:26:46: [SM] Plugin encountered error 4: Invalid parameter or parameter type
    L 09/14/2014 - 23:26:46: [SM] Native "Format" reported: Language phrase "Setup Zones" not found
    L 09/14/2014 - 23:26:46: [SM] Displaying call stack trace for plugin "sm_zones.smx":
    L 09/14/2014 - 23:26:46: [SM] [0] Line 1041, sm_zones.sp::AdminMenu_Zones()
    L 09/14/2014 - 23:26:46: [SM] Plugin encountered error 4: Invalid parameter or parameter type
    L 09/14/2014 - 23:26:46: [SM] Native "Format" reported: Language phrase "Setup Zones" not found
    L 09/14/2014 - 23:26:46: [SM] Displaying call stack trace for plugin "sm_zones.smx":
    L 09/14/2014 - 23:26:46: [SM] [0] Line 1041, sm_zones.sp::AdminMenu_Zones()
    dp_ua: !zones
    L 09/14/2014 - 23:26:53: [SM] Plugin encountered error 4: Invalid parameter or parameter type
    L 09/14/2014 - 23:26:53: [SM] Native "SetMenuTitle" reported: Language phrase "Setup Zones For" not found
    L 09/14/2014 - 23:26:53: [SM] Displaying call stack trace for plugin "sm_zones.smx":
    L 09/14/2014 - 23:26:53: [SM] [0] Line 1067, sm_zones.sp::ShowZonesMainMenu()
    L 09/14/2014 - 23:26:53: [SM] [1] Line 975, sm_zones.sp::Command_SetupZones()
     
  9. FBZA

    FBZA

    Сообщения:
    69
    Симпатии:
    6
    Re: [ANY] Map Zones (Зоны на карте)

    dp_ua, все прекрасно компилируется, возможно, тебе требуется обновить sourcemod или у тебя нет sdkhooks.
    А по-сабжу: ты переводы кинул?
     
  10. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.558
    Симпатии:
    1.143
    Re: [ANY] Map Zones (Зоны на карте)

    dp_ua, у тебя ошибки связанные с транслитом (наверно его нет или не полный).
     
  11. Sam_Fisher

    Sam_Fisher

    Сообщения:
    703
    Симпатии:
    202
    Re: [ANY] Map Zones (Зоны на карте)

    А на CS:S будет работать? Он вроде как для DoD, но вдруг....
     
  12. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Re: [ANY] Map Zones (Зоны на карте)

    Sam_Fisher, будет.
     
    Sam_Fisher нравится это.
  13. Sam_Fisher

    Sam_Fisher

    Сообщения:
    703
    Симпатии:
    202
    Re: [ANY] Map Zones (Зоны на карте)

    R1KO, а его как-то можно использовать в целях блокировки проходов при N-м кол-ве игроков?
     
  14. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    Re: [ANY] Map Zones (Зоны на карте)

    Sam_Fisher, Во вором посте пример использования.
    Нужно сделать как в Blocker passes только с этими зонами
     
    Sam_Fisher нравится это.
  15. Elkroal

    Elkroal

    Сообщения:
    3
    Симпатии:
    1
    Re: [ANY] Map Zones (Зоны на карте)

    Расскажите, пожалуйста, незнающему как добавить телепорт на респавн в плагин
    Буду премного благодарен
     
  16. Max Exception

    Max Exception

    Сообщения:
    1
    Симпатии:
    0
    Re: [ANY] Map Zones (Зоны на карте)

    Вот так сохраняет зоны, без имени и конфинга например что бы в чат только писало а не откидывало

    Игра CS:S

    PHP:
    "Zones"
    {
        
    "0"
        
    {
            
    "zone_ident"        "\"
            "
    coordinates 1"        "1616.219727 348.182709 80.031250"
            "
    coordinates 2"        "1254.987793 332.031250 80.031250"
        }
    }
    Как это исправить?

    А должно быть вот так

    PHP:
    "Zones"
    {
        
    "0"
        
    {
            
    "zone_ident"        "test"
            "restrict_team"        "3"
            "punishment"        "3"
            "coordinates 1"        "1616.219727 348.182709 80.031250"
            "coordinates 2"        "1254.987793 332.031250 80.031250"
        
    }
    }
     
    Последнее редактирование: 20 сен 2014
  17. dp_ua

    dp_ua

    Сообщения:
    9
    Симпатии:
    0
    Re: [ANY] Map Zones (Зоны на карте)

    l4d лог ошибок. так на каждой карте. в чем может быть проблема?

    [SM] Displaying call stack trace for plugin "sm_zones.smx":
    [SM] [0] Line 2330, sm_zones.sp::SpawnZone()
    [SM] [1] Line 485, sm_zones.sp::OnRoundStart()
    Error log file session closed.
    SourceMod error session started

    Info (map "l4d_vs_smalltown03_ranchhouse") (file "errors_20141012.log")
    [SM] Native "CreateEntityByName" reported: Cannot create new entity when no map is running
     
  18. Грешник

    Грешник

    Сообщения:
    1
    Симпатии:
    0
    Re: [ANY] Map Zones (Зоны на карте)

    Css, v80+, все верно залил.
    Сервер не видит плагин( Скорее всего руки из опы...
     
  19. AsJ

    AsJ

    Сообщения:
    17
    Симпатии:
    0
    PHP:
                        case NOSHOOT:
                        {
                            if (
    StartTouch)
                            {
                                
    // Notify player that he is not allowed to shoot
                                
    if (messagesPrintToChat(activator"%s%t"PREFIX"Can't shoot");
                                if (!
    IsTF2)   WeaponPunishment[activator] = true;
                            }
                            else 
    // Nope - player just left zone
                            
    {
                                
    // Dont set weapon punishments for TF2 because players cant drop/equip weapons
                                
    if (messagesPrintToChat(activator"%s%t"PREFIX"Can shoot");
                                if (!
    IsTF2)   WeaponPunishment[activator] = false;
                            }

                            new 
    weapons = -1Float:time GetGameTime();
                            for (
    0MAX_WEAPONS+= 4)
                            {
                                
    // Retrieve all player weapons
                                
    if ((weapons GetEntDataEnt2(activatorm_hMyWeapons i)) != -1)
                                {
                                    
    // Checking for 'alive player' is also required
                                    
    if (StartTouch)
                                    {
                                        
    // Set very very big (an unlimited) cooldown for weapons to prevent shooting
                                        
    SetEntDataFloat(weaponsm_flNextPrimaryAttack,   time 999.9);
                                        
    SetEntDataFloat(weaponsm_flNextSecondaryAttacktime 999.9);
                                    }
                                    else 
    // If player dies in that zone, he will not able to shoot on respawn, so checking for alive player does the trick
                                    
    {
                                        
    // Setup default timestamp to allow shooting by weapons
                                        
    SetEntDataFloat(weaponsm_flNextPrimaryAttack,   time);
                                        
    SetEntDataFloat(weaponsm_flNextSecondaryAttacktime);
                                    }
                                }
                            }
                       
    Че тут нужно изменить чтобы не отнимало оружие ?
     
  20. R1KO

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

    Сообщения:
    5.972
    Симпатии:
    2.977
    AsJ, оно его и не отнимает, а просто не дает стрелять