26

» WarCraft 3 / как заранее автоматически узнать кодировку каждого символа в строке?

host_pi, у меня предположение - проходится по строке циклом и брать подстроку из 1 символа. Если подстрока оказывается пустой и при этом еще не конец строки, значит дальше идет символ занимающий 2 символа как минимум, или 3. Далее проверка аналогичная, берем подстроку из 2 символов, если пусто то длина = 3 ибо других вариантов быть не может. Смещаем индекс на 3 и снова чекаем подстроку из 1 символа. Ну и так ты можешь насчитать кол-во "видимых" символов.
26

» WarCraft 3 / Возможно ли триггерно пришить юниту тип героя и аттрибуты? +Мемхак

Netherstorm, еще вариант - все книги заранее просто пустышки, которые при подборе заменяются на нужную книгу, если подобрал герой. Если юнит - делай замену на героя и потом заменяй на нужную книгу.
26

» WarCraft 3 / Возможно ли триггерно пришить юниту тип героя и аттрибуты? +Мемхак

Или при первом таком "взаимодействии" перед взаимодействием заменить юнита на героя, сделанного на подобии этого юнита, и дальше этот юнит будет героем, но вряд-ли тебя устроит такое решение...
26

» WarCraft 3 / БольКрафт

Сила природы - Срубленные деревья, рядом со стартовой базой нуба превращаются в энтов сражающимися на стороне синего игрока.
Кто такой синий игрок? :D
26

» WarCraft 3 / Предеметы для ИИ героя

FIRERANGER, да можно так для всех игроков, в отдельную папку закинь триггеры эти да и все.
По поводу зелек ну не проблема, можешь даже запилить один общий таймер для всех игроков, каждые 50 сек чекать.
В целом советую такие вещи делать через циклы и массивы. К примеру героев можно занести в массив. Так тебе просто меньше строк триггеров придется писать. Когда запускаешь цикл для всех игроков для каждого героя чекнуть зельки и инвентарь и дать этому герою зельку если надо.
26

» WarCraft 3 / We import the model in mdx format (through crutch) into blender

ScorpioT1000, да это жестко. Поэтому думаю пока что пользователи могут создавать 2 копии своих ресурсов со ссылками друг на друга Ру и En версии. Как никак сайт в первую очередь русскоязычный и чисто инглиш контент такое себе...
26

» WarCraft 3 / Как сменить UI на карте Warcraft 3?

В сценарии поставь расу игрока Альянс и галочку фиксированная позиция.
26

» WarCraft 3 / We import the model in mdx format (through crutch) into blender

Anime Chan, я так понимаю сейчас для такого функционала делают дубликаты ресурса + ссылки друг на друга типа "Русская версия" и "English version".
26

» WarCraft 3 / Предеметы для ИИ героя

Принятый ответ
Короче, вот тебе наработка.
Первый триггер отвечает за появление героя (если у компа есть выбор кого нанять, то ты будешь давать шмотки первому герою, которого он купит, но для себя ты можешь изменить этот триггер). Если игрок может купить несколько героев то добавь действие отключить этот триггер.
Так-же запускаем таймер до выдачи предмета (окно чисто для теста, у себя ты можешь удалить это действие).
Далее уже шаблон каждого триггера, где проверяем, если герой мертв или инвентарь заполнен - то запустить таймер еще раз. Иначе выдаем предмет, выключаем этот триггер, запускаем таймер и запускаем следующий триггер на следующий предмет. Второй триггер с предмет будет абсолютно такой-же, и так по цепочке.
Можно, конечно, сделать один триггер на все предметы, усложнив систему, добавив переменные времени, предметов за счет использования массивов. Могу показать как.
Загруженные файлы
26

» WarCraft 3 / Предеметы для ИИ героя

SсRealm, по поводу слотов все делается проще, проверяется есть ли предмет в каждом слоте. И если хотя бы 1 свободен то через ИЛИ мы получим Да.
26

» WarCraft 3 / Предеметы для ИИ героя

FIRERANGER, и зачем проверять, если есть такой-же предмет. Типа ну нашел герой такой-же предмет, и? Ты же хочешь выдать конкретные предметы в течении времени независимо от того, что он находит. Или для тебя это важно?
26

» WarCraft 3 / Предеметы для ИИ героя

FIRERANGER, остановить триггер - выключить триггер)
По поводу полного инвентаря - ну после такого запускай таймер на 30 секунд чтобы снова чекнуло, если есть место то выдаст.
26

» WarCraft 3 / Предеметы для ИИ героя

Ну триггерно естественно. Цепочка триггеров с таймером. Если герой мертвый - запускай таймер на 5 секунд чтобы этот триггер снова запустился и снова проверил жив ли герой и если жив выдал предмет. Если нет - снова на 5 сек запуск таймера.
Уловил идею? Знаешь как работать с таймерами?
26

» WarCraft 3 / Переодически подвисает таймер

ScorpioT1000, поэтому идеально для такого использовать таймеры вместе с событиями окончания таймера в отдельных триггерах/функциях.
26

» WarCraft 3 / Переодически подвисает таймер

SсRealm, кстати, только сейчас заметил, схожую тему выше показал EugeAl, но у меня будет еще более точная проверка за счет меньшего слипа + интегрирован сразу же в твой код с твоим таймером, то есть не придется создавать второй параллельный таймер, как если бы ты юзал этот вейт.
26

» WarCraft 3 / Переодически подвисает таймер

Принятый ответ
По сути тут мы проверяем каждые 0.1 сек, когда там таймер завершится (с помощью call TriggerSleepAction(0.1)), и дальше закрываем окно. Все локально, в одном коде без дополнительных событий. Не сказать, что прямо оптимизированно и точно, но для твоей задачи сгодится. Если надо более точное время - ставишь не 0.1 а 0.01 или 0.05 к примеру.
26

» WarCraft 3 / Переодически подвисает таймер

SсRealm, в итоге, подставив реализацию вейта и немного переделав, получится вот такой код:
function Trig_ReadyTime_Actions takes nothing returns nothing
    local timerdialog IvanWindow
    local real Timerivan
    local timer IvanTimer 
    set Timerivan = 10.00 
    set IvanTimer  = CreateTimer()
    call StartTimerBJ( IvanTimer, false, Timerivan )
    call CreateTimerDialogBJ( IvanTimer, ( "Следующая волна:" ) )
    set IvanWindow = bj_lastCreatedTimerDialog
    call TimerDialogDisplayForPlayerBJ( true, IvanWindow, GetOwningPlayer(udg_Hero[1] ))
    call TimerDialogDisplayForPlayerBJ( true, IvanWindow, GetOwningPlayer(udg_Hero[2] ))
    call TimerDialogDisplayForPlayerBJ( true, IvanWindow, GetOwningPlayer(udg_Hero[3] ))
    call TimerDialogDisplayForPlayerBJ( true, IvanWindow, GetOwningPlayer(udg_Hero[4] ))
    call TimerDialogDisplayForPlayerBJ( true, IvanWindow, GetOwningPlayer(udg_Hero[5] ))
    loop
        call TriggerSleepAction(0.1)
        exitwhen TimerGetRemaining(IvanTimer) == 0.
    endloop
    call TimerDialogDisplayBJ( false, IvanWindow )
    call DestroyTimerDialogBJ( IvanWindow )
    call DestroyTimer(IvanTimer)
    set IvanTimer = null
    set IvanWindow = null
    call TriggerExecute( gg_trg_Wawe )
endfunction
Некоторые вещи я тебе тут убрал лишние и добавил уничтожение таймера.
26

» WarCraft 3 / Переодически подвисает таймер

SсRealm, вот как раз проблема внутри вейта... просто таймер и действие TriggerSleepAction с указанием одного и того-же времени на самом деле могут ждать разное время. Одно привязывается к игровому времени а второе к системному.
К примеру если у тебя карта лагает, время может замедлятся/ ускорятся внутри игры, а вот системное будет стабильное. Помню уже были подобные проблемы со временем.
26

» WarCraft 3 / Переодически подвисает таймер

SсRealm, а еще, тебе же надо дождаться окончания таймера, почему бы вместо вейта не использовать ожидание окончания таймера как УЖЕ сделано в вейте? :D
Без отдельного триггера с событием.