30

» WarCraft 3 / Приказ Группе jass

если честно, ничего в этой записи не понимаю
Что из слов native, takes, returns вам непонятно?
30

» WarCraft 3 / Уровень моба

Принятый ответ
Всплывающий текст над головой, где указан integer уровень юнита.
Всплыващий текст обламывается лимитом в сто штук.

Берём модельку
копируем сколько нужно раз, заменяем текстурку на нужные цифирьки и выдаём способностью прям в РО. Даже думать программировать не нужно.
Загруженные файлы
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

да я бы и сам рад откатить её на 1.26
Зачем заниматься некромантией?
30

» WarCraft 3 / Приказ Группе jass

Так сделайте переменную глобальной. А ещё лучше покажите код.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

А что плохого в переборах и массивах?
В том, что данном случае они не нужны.
Это зависит от карты, которую требуется сделать.
Мой пример не зависит от карты и возрождает всех героев, а дополнительные условия всегда можно дописать.
Т.е. решение ты не засчитываешь, верно?
Чисто формально, оно не работает для количества героев больше 8196))
Только потому, что ты ярый противник гуи, так?
Я противник решений, которые это гуи предлагает.
Но теперь то в чем конкретный косяк?
Чисто технически нивчём. Можешь даже наработкой на сайт опубликовать, чтоб другие не мучались)
И что плохого в периодическом событии? Это по сути всего еще один таймер.
В том, что в данном случае оно не нужно.
Это ты мне намекаешь уже на новое задание по гуи насчет снарядов?)
Это я к тому, что смерть героя обычно редкое событие при игре и лишние переборы никто не заметит. Но в случае снарядов, действия выполняются больше десяти раз в секунду и там лишние переборы могут серьёзно залагать карту.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

поэтому ты сможешь указать на слабые места.
Как всегда избыточные костыли GUI: периодический триггер, переборы и массивы. Потом придётся ещё костылить, чтоб работало с расставлеными на карте героями. Притом это ещё простая задача, хоть и популярная. А на движении снарядов количество костылей на GUI уже начнёт зашкаливать))
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

В данном случае, lua лучше, чем гуи.
В данном случае это написано на zinc.
Но мне реально никогда такого не было нужно) Гуи вполне хватало.
Если пилить кинематики на вэйтах, то может и хватит. А вот если понадобятся например задержки или снаряды то гуи внезапно превращается в тыкву.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

будут ли пауки создаваться?
Не будут. Таймер не только создать нужно но и запустить.
Неужели, там действительно таймеры создаются динамически?
Если не разбираться ни в чём, кроме кривого GUI, то нет. Я вообще непонимаю, зачем городить костыли на гуях если можно написать несколько строчек кода.
Жаль, что не могу посмотреть карту вашу, т.к. не хочу ставить 31 патч.
На 1.26 патче кода немного больше, но всёравно так же просто:
//! nocjass
//! zinc
library HeroRevive {
    hashtable HT = InitHashtable();

    function onInit(){
        integer i;
        trigger ReviveTrigger = CreateTrigger();
        
        for (0 <= i < bj_MAX_PLAYER_SLOTS){
            TriggerRegisterPlayerUnitEvent(ReviveTrigger, Player(i), EVENT_PLAYER_HERO_REVIVABLE, null);
        }
        TriggerAddAction(ReviveTrigger, function(){
            unit u = GetTriggerUnit();
            timer t = CreateTimer();
            integer tId = GetHandleId(t);
            timerdialog td = CreateTimerDialog(t);

            SaveUnitHandle(HT, tId, 0, u);
            SaveTimerDialogHandle(HT, tId, 1, td);
            TimerDialogSetTitle(td, GetUnitName(u));
            
            TimerStart(t, GetHeroLevel(u) * 2, false, function(){
                timer t = GetExpiredTimer();
                integer tId = GetHandleId(t);
                unit u = LoadUnitHandle(HT, tId, 0);
                timerdialog td = LoadTimerDialogHandle(HT, tId, 1);
                integer loc = GetPlayerStartLocation(GetOwningPlayer(u));
                FlushChildHashtable(HT, tId);
                ReviveHero(u, GetStartLocationX(loc), GetStartLocationY(loc), true); u = null;
				DestroyTimerDialog(td); td = null;
				DestroyTimer(t); t = null;
			});
			TimerDialogDisplay(td, true);
            t = null;
            u = null;
            td = null;
		});
        ReviveTrigger = null;
    }
}
//! endzinc
//! endnocjass
Загруженные файлы
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Только почему не работает для таймеров превышение Раз. непонятно.
Не смотрел на 1.26, но на последнем патче InitGlobals выглядит так.
function InitGlobals takes nothing returns nothing
    local integer i= 0

    set i=0
    loop
        exitwhen ( i > 3 )
        set udg_TIMER[i]=CreateTimer()
        set i=i + 1
    endloop

endfunction
Так что должно работать.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

1.26.0.6401
Я же писал, что нужен последний патч.
Когда у переменной timer размер массива 1
Если вы за это поле при создании переменной
То это не размер массива, а количество установленных значений. Например для целлочисленного массива с размером 3 и значением 6 будет выглядеть так [6,6,6].
Загруженные файлы
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Так как раз проблема наличия множества героев и не решена
Правда?
Там все сделано на одном герое и таймер закреплен именно за ним
Вы про локальные переменные вообще читали?
А я сначала подумал, что таймер сразу прикрепляется к другому герою.
При смерти героя создаётся таймер, после завершения которого именно этот герой и воскреснет. На jass такое делали при помощи хэштаблиц.
Не могу открыть все-равно:(
Патч игры какой?
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

А вы мне свою на lua.
Так я ж статью про воскрешение написал, там и скачайте.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Т.е. Вы даже не проверяли?)
Так вы карту не скинули.
Просто Массив из таймеров с 3го значения почему-то не определяется корректно
Значит решение кривое
т.е. герой воскрешается через нужное время
Неправда, если после смерти поставить игру на паузу, то wait её проигнорирует и по игровому времени герой воскреснет быстрее или вообще не воскреснет.
А где в вашем решении описана смерть героя? И вообще, где проверка, что герой мертв?
TriggerRegisterPlayerUnitEvent(ReviveTrigger, player, EVENT_PLAYER_HERO_REVIVABLE)
TimerStart - это встроенная функция? Просто не понимаю, каким образом воскрешение запускается именно после окончания таймера? Т.е. lua позволяет повесить условие на любой таймер, который только что создался?
Статьи читать нужно, в этой например подробно всё разжёвано. Вызвать callback из таймера ещё jass позволял, просто в lua удобно переменные через замыкания передавать.

Кстати, а где остальные игроки?
Загруженные файлы
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Lord_Teo, тоесть задачу вы не решили:
У любого игрока может быть любое количество героев
Притом использовали wait который не точен и игнорирует паузу, вместо лаконичного решения на lua.
local ReviveTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
	local player = Player(i)
	if GetPlayerController(player) == MAP_CONTROL_USER and GetPlayerSlotState(player) == PLAYER_SLOT_STATE_PLAYING then
		TriggerRegisterPlayerUnitEvent(ReviveTrigger, player, EVENT_PLAYER_HERO_REVIVABLE)
	end
end
TriggerAddAction(ReviveTrigger, function()
	local hero      = GetTriggerUnit()
	local heroOwner = GetOwningPlayer(hero)
	if GetPlayerController(heroOwner) ~= MAP_CONTROL_USER or GetPlayerSlotState(heroOwner) ~= PLAYER_SLOT_STATE_PLAYING then return end

	local timer  = CreateTimer()
	local dialog = CreateTimerDialog(timer)
	TimerDialogSetTitle(dialog, GetUnitName(hero))
	TimerStart(timer, GetHeroLevel(hero) * 2, false, function()
		local x, y   = GetPlayerStartLocationX(heroOwner), GetPlayerStartLocationY(heroOwner)
		ReviveHero(hero, x, y, true)
		DestroyTimerDialog(dialog)
		DestroyTimer(GetExpiredTimer())
	end)
	TimerDialogDisplay(dialog, true)
end)
30

» WarCraft 3 / О критических ударах и уклонениях...

Можно положить в спеллбук и его спрятать, чтобы место на панели не занимать
Или попробовать запретить для игрока, по идее это только иконку скрывает
30

» WarCraft 3 / variable ot is uninitillized

Новый pjass.exe это обнаруживает и сообщает.
А zinc вообще позволяет их использовать))
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Если немного точнее сформулируешь задачу
Да запросто. У любого игрока может быть любое количество героев. После смерти героя запускается таймер с окном на 2*уровень героя секунд. После завершения таймера герой воскрешается.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Я пока не сталкивался с невыполнимыми задачами на gui.
Хочу посмотреть на воскрешение героев на GUI для любого количества героев любого игрока.
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Lord_Teo, а ещё лучше переходить на последний патч с lua и не использовать gui.
30

» WarCraft 3 / Триггерный приказ каста "массовой телепортации"

но на GUI я могу хоть что-то, в отличии от jass.
Не понимая, что потом происходит с гуи сложно что-то нормально сделать.
30

» WarCraft 3 / Расстояние от рудника до ратуши

Принятый ответ
В редакторе спокойно ставится, а вот в самой игре раб не может поставить ферму близко к руднику)
Это захардкожено в самой игре. Если изменение карты путей ратуши не поможет, то уже ничего не поможет.