Hammer valve editor изменение объекта по таймеру сервера

Тема в разделе "Программирование / Скриптинг", создана пользователем Primo, 23 авг 2014.

  1. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Доброго времени суток.

    Назрел такой вопрос, а даже, скорее, хочу поднять такой вопрос:
    "Возможно ли связать карту с плагином сервера?"
    А точнее, мне нужно создать таймер на сервере, т.е. через плагин. По истечению этого таймера на карте будет, к примеру, открываться дверь, или же просто удаляться блок.
     
  2. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Да даже не команда.
    Просто открывать дверь на карте по истечению таймера плагина.

    Добавлено через 2 минуты
    Не то. Я имею ввиду:

    Запускается карта, без разницы какая. В начале раунда запускается таймер на 30 сек к примеру, по его истечению открываются двери.
    Или, к примеру, не двери открываются, а удаляется какой-нибудь блок, будь то браш, если это возможно.
     
    Последнее редактирование: 23 авг 2014
  3. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Понимайте как хотите, я привёл пример на таймере, можно и команды)

    Действительно, был мод в cs1.6, назывался BaseBuilder, так там удалялись блоки по таймеру. Однако, так же открывались двери в JailBreak на карте по команде или таймеру. Мне кажется это встраивается не в карту.
     
  4. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Нашел такую вещь:
    http://hlmod.ru/forum/plaginy-dlya-sourcemod/15791-open-door-time.html

    Но мне нужно не отлавливать состояние двери, а потом закрывать дверь.
    Мне нужно по окончанию таймера открывать дверь.

    Добавлено через 3 минуты
    Я просто в этом исходнике не осознаю зачем создаётся Array.
     
    Последнее редактирование: 23 авг 2014
  5. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    PHP:
    new Handle:TimerS;

    public 
    OnPluginStart() 
    {
        
    HookEvent("round_start"RoundStart);
    }

    public 
    RoundStart(Handle:event, const String:name[], bool:silent)
    {
        
    TimerS CreateTimer(30.0Event_DoorOpen);
    }

    public 
    Action:Event_DoorOpen(Handle:timer)
    {
        new 
    ent = -1;
        while ((
    ent FindEntityByClassname(ent"func_door")) != INVALID_ENT_REFERENCE)
        {
            
    AcceptEntityInput(ent"Open");
        }
        
    KillTimer(TimerS);
    }
    Будет ли верным такая функция?
     
  6. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Primo, да.
     
    Primo нравится это.
  7. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Просто думал, что лучше будет остановить таймер. Или же лучше приравнять к INVALID_HANDLE?
    Ваш вариант хотел бы услышать, как лучше поступить с таймером, чтобы он корректно отключился.
     
  8. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Он итак остановлен, если сработал. Имеет смысл лишь закрыть его Handle - тут бы я и сам послушал, есть сомнения.
     
    Primo нравится это.
  9. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Primo, сделай так:
    PHP:

    public OnPluginStart() 
    {
        
    HookEvent("round_start"RoundStartEventHookMode_PostNoCopy);
    }

    public 
    RoundStart(Handle:event, const String:name[], bool:silent)
    {
        
    CreateTimer(30.0Event_DoorOpen);
    }

    public 
    Action:Event_DoorOpen(Handle:timer)
    {
        new 
    ent = -1;
        while ((
    ent FindEntityByClassname(ent"func_door")) != INVALID_ENT_REFERENCE)
        {
            
    AcceptEntityInput(ent"Open");
        }
        return 
    Plugin_Stop;
    }
     
    Primo нравится это.
  10. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    AlmazON, Action: стоит, лучше что нибудь вернуть. Функция то не void.
     
  11. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Все можно, можно через плагин, можно через карту.
     
  12. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    AlmazON, повторяю, функция не void, а Action следовательно она должна возвращать одно из значений:
    Если ты этого не сделаешь она сама вернет 0. Так что от того что я вернул значение хуже не стало.
     
  13. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Нет такого в Павне. Вот твой return из натива таймера:
    @return Plugin_Stop to stop a repeating timer, any other value for default behavior.
    "Plugin_Stop для остановки повторяющегося таймера и любое другое значение по умолчанию".
    wS, например, не пишет в обычных таймерах такого "дополнения.
    Привычку ему ещё такую дашь, ТС везде потом это будет писать)
     
  14. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Пффф.. не смеши меня так.

    Какая разница павн или нет. Тип функции то определен и это закономерно для всех языков подобных си.


    Вот именно "значение по умолчанию", если ты что-то не вернешь то компилятор сделает это за тебя.

    Вот сам подумай.
    PHP:
    bool:IsClientAdeckvat(client)
    {
        if(
    проверкибла-бла)
        {
            return 
    true;
        }
        return 
    false;
    }
    Фукнция имеет тип bool, следовательно она должна возвращать true или false

    PHP:
    GetClientMoney(client)
    {
        return 
    GetEntData(iClientm_iAccount);
    }
    Int ф-я, следовательно она должна возвращать целое число. С float точно так же.
    Но есть пустой тип фукнции - void, он ничего не возвращает.
    Обычно в павне этого не пишут, потому что компилятор сам это дописывает, но иногда пишут (в team switch вроде бы я видел).

    Action это тоже своего рода тип ф-и. И он должен возвращать значение. Если ты его не вернешь это сделеает компилятор и вернет 0.
     
  15. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Я знаком с C, однако, сюда я пишу только с вопросами, касающихся различных функций, которых я не знаю.
    Вы не думайте, что я такой тупой:acute:

    А вообще, прекращайте устраивать споры при встрече в какой-либо теме.
     
  16. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Ты хочешь меньше знать? Писать лишнее, а то и вовсе порой ненужное? Как попытка убить повторяющийся таймер обычным способом)
    Если нечего сказать - не говори, а мы выясним истину) Как, например, R1KO хотел static почаще использовать, но я отговорил. :-D
     
  17. Primo

    Primo Где мои манеры

    Сообщения:
    1.192
    Симпатии:
    310
    Тогда меня интересовал не return plugin_stop, а в каком шаге алгоритма лучше вставить.
    Додумался сам в итоге.

    В этой теме меня интересовал не алгоритм построения функции, а сама функция, вызывающая событие на карте.

    Мне вы новое своими спорами не открываете, вы просто мусолите одну фукнцию, и пытаетесь доказать друг-другу чей способ проще и лучше. А с return Plugin_Stop ты мне уже помогал в прошлый раз, спасибо за это, я еще с того раза запомнил, что просто так повторяющийся таймер не остановить. На века запомнил.
     
  18. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Не собираюсь спорить кто опытнее но уж точно не буду основываться на словах этого еврея. Я не сомневаюсь, я делаю как считаю нужным, а если нахожу более приемлемое решения - изменяю на него.

    Я не говорил что он ругнется. Он сделает это за тебя.

    Как бы это ты мудрил, я сразу сказал что просто можно спокойно опускать пост хук.


    Я предложил, кто ж виноват что тебе жалко пару килобайт памяти, лучше же грузить проц.
     
  19. R1KO

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

    Сообщения:
    6.005
    Симпатии:
    2.994
    Оффтоп
     
  20. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Определённо ставить... SM-овцы в своих плагинах ставят. Если в таймере есть условие if, то return Plugin_Stop, а если просто "одно приравнять к другому", то нет смысла.
    В доках эта аналогия наблюдается.
    Оффтоп
     
    Последнее редактирование: 24 авг 2014