30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

есть ссылки на статьи? пошёл погуглить
Да всё просто, TriggerSleepAction игнорирует паузу и может десинкнуть из-за неточности внутреннего таймера.
30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

имелись ввиду глобалки простые типа integer и string
Я только одну локалку использовал, всё остальное глобалки.
trigger t = CreateTrigger();
в общем хештейбл я так понял это как словарь
Это и есть хэш-таблица. Для простоты можешь относиться к ней как к к двумерному массиву с числовыми ключами.
ht[0][1] = somevalue;

данном случае тянется номер игрока по привязанному к нему id таймера. классное решение
Сохранение данных на хэндл это основа практически каждого MUI заклинания.
30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

т.е. на глобалках и таймерах подобный код не сделать с отдельным таймером для каждого плеера?
У меня код с отдельным таймером для каждого игрока какраз на глобалках. Можешь проверить через Multiwindow.
Вот здесь идёт получение номера игрока из ХТ. Игрока можно просто получить через Player(i).
Загруженные файлы
30

» WarCraft 3 / Депротект (знаю заеженная тема)

или ты думаешь движок сайта xgm тоже с нуля писан и не задействует никаких сторонних библиотек?
Людочка, ты не поверишь.
30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

из них у 1го игрока идёт общий подсчёт действий, у остальных без подсчёта
Держи. Каждому игроку по таймеру с подсчётом.
Хэштаблица хранит по хэндлу, так что можешь свою HandleHT переиспользовать.
//! zinc
library MyTimerLib {
    string msg = "-run";
    integer i, action[];
    timer ticker[];
    boolean running[];
    hashtable ht = InitHashtable();

    function onInit() {
        trigger t = CreateTrigger();

        for (0 <= i < bj_MAX_PLAYER_SLOTS) {
            if ( GetPlayerController(Player(i)) == MAP_CONTROL_USER && GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING) {
                TriggerRegisterPlayerChatEvent(t, Player(i), msg, false);
                action[i] = - 1;
                running[i] = false;
                ticker[i] = CreateTimer();
                SaveInteger(ht, GetHandleId(ticker[i]), 0, i);
            }
        }

        TriggerAddAction(t, function() {
            i = GetPlayerId(GetTriggerPlayer());

            if (running[i]) {
                PauseTimer(ticker[i]);
                action[i] = - 1;
                running[i] = false;
                BJDebugMsg("Player: " + I2S(i) + ", stop");
                return;
            }
            running[i] = true;

            TimerStart(ticker[i], .3, true, function() {
                i = LoadInteger(ht, GetHandleId(GetExpiredTimer()), 0);

                action[i] += 1;

                BJDebugMsg("Player: " + I2S(i) + ", action: "  + I2S(action[i]));

                if (action[i] == 2) action[i] = - 1;
            });
        });

        t = null;
    }
}
//! endzinc
30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

как передать GetPlayerId(GetTriggerPlayer()) в таймерную функцию MyTimerLib___anon__0 ?
Через глобалку или через ХТ. Вот пример через глобалку сделал.
//! zinc
library MyTimerLib {
    integer n = - 1;
    timer ticker = CreateTimer();
    string msg = "-run";
    boolean running = false;
    player p;
    
    function onInit() {
        trigger t = CreateTrigger();

        for (0 <= i < bj_MAX_PLAYER_SLOTS){
            if ( GetPlayerController(Player(i)) == MAP_CONTROL_USER && GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING)
                TriggerRegisterPlayerChatEvent(t, Player(i), msg, false);
        }

        TriggerAddAction(t, function(){
            p = GetTriggerPlayer();
            if (running) {
                PauseTimer(ticker);
                n = -1;
                running = false;
                BJDebugMsg("stop");
                return;
            }
            running = true;

            TimerStart(ticker, .3, true, function() {
                n += 1;

                if (n == 0) {
                    BJDebugMsg("action 1: " + I2S(i));
                }

                if (n == 1) {
                    BJDebugMsg("action 2: " + I2S(i));
                }

                if (n == 2) {
                    BJDebugMsg("action 3: " + I2S(i));
                    n = - 1;
                }
            });
        });

        t = null;
    }
}
//! endzinc
30

» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?

как сделать 3 разных действия с одной периодичностью по таймеру?
//! zinc
    library MyTimerLib {
        integer n = - 1;
        timer ticker = CreateTimer();

        function onInit() {
            TimerStart(ticker, .3, true, function() {
                n += 1;

                if (n == 0) {
                    BJDebugMsg("111 " + I2S(i));
                }

                if (n == 1) {
                    BJDebugMsg("222 " + I2S(i));
                }

                if (n == 2) {
                    BJDebugMsg("333 " + I2S(i));
                    n = - 1;
                }
            });
        }
    }
//! endzinc
30

» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?

host_pi, создать параллельные массивы точек и синхронизировать по индексу игрока религия запрещает?
30

» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?

что под этим понятием имеется ввиду?
Подрузамевается синхронизация значений между игроками.
какие несколько методов имеются ввиду?
Какая версия игры имеется ввиду?
30

» WarCraft 3 / Спавн врага на определенном радиусе через триггеры

Хорошо, а как?
  • Спавнишь юнита
  • Находишь расстояние до игрока
  • Отодвигаешь от игрока на 100 единиц
30

» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?

если одна глобальная переменная у разных игроков имеет разное значение - это десинх или нет?
До того момента пока эта переменная не будет использоваться где-то в синх данных, то норм.
30

» WarCraft 3 / Равкоды

Вышла новая версия!
Прокрутить к ресурсу
Добавилась база из .slk, позволяющая узнать, использует ли игра равкод.
Загруженные файлы
30

» WarCraft 3 / Равкоды

clojurmagictime, я б с удовольствием посмотрел, но на MacOS не запускается. Да и 0x нотации нет.
Загруженные файлы
30

» WarCraft 3 / Депротект (знаю заеженная тема)

Господи, в чем проблема использовать w3x2lni?)
Наверно в том, что она может превратить карту в тыкву.
30

» WarCraft 3 / Депротект (знаю заеженная тема)

всем, кто задаёт подобные вопросы я бы предложил прикладывать к своим постам скриншоты о прохождении проверки лицушности винды
У меня всё лицушное кроме 1.26 которую нельзя приобрести легальным способом. Что дальше?