30

» WarCraft 3 / Игровые зоны.

Так можно добавить все Rect в Region и использовать IsPointInRegion().
30

» WarCraft 3 / Jass возрождение курьера! Хелпаните друзья!

Стоит курьеру сдохнуть над непроходимым местом (именно рельефом, а не деструктаблами, склон или еще чего ).
А если ему перерождение выдать?
30

» WarCraft 3 / Jass возрождение курьера! Хелпаните друзья!

Где???
Здесь я помню делал разложение в ноль, чтоб сразу исчезали. А так да, проще сохранить предметы и количество зарядов в таблицу и тупо пересоздавать.

Или можно проще, сразу создавать нового курьера, передавать ему вещи и хайдить.
30

» WarCraft 3 / Jass возрождение курьера! Хелпаните друзья!

Bergi_Bear, Так установить время разложения летуна в 100500 и ручками удалять.

Код там правильный
Зато мой вариант читабельней)
30

» WarCraft 3 / Jass возрождение курьера! Хелпаните друзья!

Итак попросил одного грамотного человека в Jass
Что то я сомневаюсь в его грамотности, скорее всего это гуишник. Грамотный человек бы использовал zinc.
//! zinc
library Courier {
    function onInit() {
        udg_GAME_BASE_RECT = gg_rct_Baza;
        udg_GAME_RECT_BACKCOUR = gg_rct_KURA;
        udg_GAME_COURIER_UP_COST[1] = 100;
        udg_GAME_COURIER_UP_COST[2] = 500;
        udg_GAME_BUYER_TYPE = 'H017';
    
        udg_GAME_COURIER_TYPE[1] = 'u000';
        udg_GAME_COURIER_TYPE[2] = 'u00J';
        udg_GAME_COURIER_TYPE[3] = 'u00A';
    
        udg_GAME_COURIER_SPELLS[1] = 'A0EA';
        udg_GAME_COURIER_SPELLS[2] = 'A0E9';
        udg_GAME_COURIER_SPELLS[3] = 'S001';
        udg_GAME_COURIER_SPELLS[4] = 'S002';

        trigger t = CreateTrigger();

        for (0 <= i < bj_MAX_PLAYER_SLOTS){
            TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_DEATH, null);
        }

        TriggerAddCondition(t, Filter(function() -> boolean {
            return GetUnitTypeId(GetDyingUnit()) == udg_GAME_COURIER_TYPE[1] 
                    || 
                    GetUnitTypeId(GetDyingUnit()) == udg_GAME_COURIER_TYPE[2] 
                    || 
                    GetUnitTypeId(GetDyingUnit()) == udg_GAME_COURIER_TYPE[3];
        }));

        TriggerAddAction( t, function() {
            unit d = GetDyingUnit();
            player p = GetOwningPlayer(d);
            item ITEM[];
            timer t = CreateTimer();
            timerdialog td = CreateTimerDialog(t);
            integer i, HNDL = GetHandleId(t);
            for (0 <= i < 6){
                ITEM[i] = UnitItemInSlot(d, i);
            }
            TimerStart(t, 30.00, false, null);
            TimerDialogSetTitle(td, "Курьер: ");
            if (GetLocalPlayer() == p){
                TimerDialogDisplay(td, true)
            }
            TriggerSleepAction( 30.00 );
            
            unit cu = CreateUnit(p, GetUnitTypeId(d), GetRectCenterX(udg_GAME_RECT_BACKCOUR), GetRectCenterY(udg_GAME_RECT_BACKCOUR), 270.00);
            DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl", GetRectCenterX(udg_GAME_RECT_BACKCOUR), GetRectCenterY(udg_GAME_RECT_BACKCOUR)));
            
            for (0 <= i < 6){
                UnitAddItemByIdSwapped( GetItemTypeId(ITEM[i]), cu);
            }
            cu = null;
            d = null;
            DestroyTimer(t);
            t = null;
            DestroyTimerDialog(td);
            td = null;
        });

        t = null;    
    }
}
//! endzinc
TriggerSleepAction это вобще зло и нужно нормально на таймерах/хэштаблицах делать.
30

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

с typescript не знаком, но выглядит интересно.
Там основная идея отлавливать ошибки в compile-time, а не гадать, что же лежит в переменной.
30

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

Nelloy, зачем в рантайме проверки типа переменной делать? Если хочется строгих проверок типов, то typescript в помощь. Там и ООП есть)
30

» WarCraft 3 / Оптимизация.

Открой любую старую компанию близавскую, и посмотри как они в 10 тригеров вмещают часовую компанию с заданиями.
Так у них же все способности стандартные.
У них используются тригеры с одним событием, а дальше куча условий и действий для них. это никак не ломает и не тормозит игру, если не сидеть в ней по 10 часов.
Каждый случай нужно разбирать отдельно, вот например в отлове урона на 1.26 используется один триггер и для каждого юнита вешается событие.
Оптимизируй лучше вес карты, выкидывай тригерные способности которые можно заменить обычными правками в ПО
Зааачем? Если все способности триггерные, то к ним легче добавить нестандартное поведение. Например столкновение снарядов.
в 1.26 лучше все делать на jass.
Не просто jass, а vjass / zinc.
30

» WarCraft 3 / Есть ли у вакрафта проблема со строками и вывода текста?

понял что там какая то таблица, которая не дает генерировать похожие строки
Если в кратце то есть таблица строк, в которой все строки уникальны и если генерить 100500 разных строк, то она быстро засрётся. По логике вещей она должна очищаться со временем, но это варкрафт.
а нужно ли записывать все тексты в глобальный массив.
Это целиком вопрос удобства разработки. Тобишь делай как угодно.
Как это делает в гуи. Если записать текст в гуи, и создать. Потом эта строка заносится в массив
Гуи складывает всё в war3map.wts. При длительной разработке там может много хлама собраться.
но думаю можно попробовать искусственно вызвать тормоза
Можешь попробовать убрать весь текст и проверить, действительно ли в нём проблема.
NazarPunk, спасибо за отклик на глупые вопросы
Блин, забыл сказать, чё ты как нубяра на гуи пишешь, переходи на zinc/lua и будь нормальным мужиком!
30

» WarCraft 3 / Есть ли у вакрафта проблема со строками и вывода текста?

О лимитах строк можно почитать здесь. И если память не изменяет, там ещё какой-то баг, был, из-за которого строки навсегда оставались в памяти.
30

» Гильдия «Черамор» / Набор кандидат на пост руководителя с 2021 года

четкий план составь по разрешению на бухло, с пометками где брать бухло и как пить, что бы не обнаружить на утро заблеванный персидский ковер, которого не было раньше)
Это уже индивидуально
30

» WarCraft 3 / Оптимизация.

Чтобы оптимизировать гуй муй, нужно перейти на jass(vjass/zinc) в 1.26 или lua в Reforged. Дальше в 1.26 о количестве триггеров можно не волноваться, а на lua можно сделать например так.
30

» WarCraft 3 / Возрождение с помощью камня воскрешения

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

Как сделать с помощью триггеров, и чтобы было не так поломано, воскрешение с помошью камня воскрешения, как в кампании рексара?
Скопировать из кампании Рексара.
30

» WarCraft 3 / Отнятие 50% хп и восстановление их обратно в течении времени

Какие все добрые, раньше посылали статьи читать а теперь 3 примера скинули
Это демо версия сообщества, по истечении пробного периода включается токсичность участников)
30

» WarCraft 3 / Отнятие 50% хп и восстановление их обратно в течении времени

так не муи же
Дык берём индексер, запускаем таймер и при касте записываем в массив нужное количество хп, добавляем в группу героя и перебираем на каждый тик)