32

» WarCraft 3 / Хэш-таблицы

Принятый ответ
Ну как насчет хотябы ошибки устранять и немного подумать:
function Delete_Destructable takes nothing returns nothing
    local timer t = GetExpiredTimer()                  //Наш таймер - истёкший
    local integer h = GetHandleId(t)                   //Узнаём id таймера
    local integer i = 1
   
   loop
        exitwhen i > 10
        call KillDestructable(LoadDestructableHandle(hash,h,i))
        set i = i + 1
    endloop
    
    call DestroyTimer(t) //Уничтожаем таймер
    //Очищаем хеш-таблицу, чтобы избежать утечек и наложений
    call FlushChildHashtable(hash,h) //Очищаем ключ по id
    
    //Не забываем устранять утечки
    set t = null
endfunction
 
function Hashtable_Actions takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local real cx 
    local real cy
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    local integer i = 1
    local destructable d
    
    if GetSpellTargetUnit() == null then
        set cx = GetSpellTargetX()
        set cy = GetSpellTargetY()
    else
        set cx = GetUnitX(GetSpellTargetUnit())
        set cy = GetUnitY(GetSpellTargetUnit())
    endif
    loop
        exitwhen i > 1
            set d = CreateDeadDestructable('LTlt',cx + 200.00 * Cos( i * 0.6285708 ), cy + 200.00 * Sin( i * 0.6285708 ), 36.00 * i, 1.00, GetRandomInt(1, 10))
            call SetDestructableAnimation(d,"birth")
            call SaveDestructableHandle(hash, id, i, d )
            call SetDestructableLife( d, I2R(GetHeroStatBJ(bj_HEROSTAT_INT, Caster, true)) )
        set i = i + 1
    endloop

    call TimerStart(t, 10.00, false, function  Delete_Destructable)
    set Caster = null
    set t = null
    set d = null
endfunction

function Hashtable_Cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A014'
endfunction

//===========================================================================
function InitTrig_Hashtable takes nothing returns nothing
    local trigger ForestKeeperTrees = CreateTrigger()
    local integer index = 0
    loop
        exitwhen index > 12
        call TriggerRegisterPlayerUnitEvent(ForestKeeperTrees,Player(index),EVENT_PLAYER_UNIT_SPELL_CAST,null)
        set index = index + 1
    endloop
    call TriggerAddCondition( ForestKeeperTrees, Condition(function Hashtable_Cond) )
    call TriggerAddAction( ForestKeeperTrees, function Hashtable_Actions )
    set ForestKeeperTrees = null
endfunction
  1. нафига лишние действия и лишние переменные, будь проще.
  2. нахрена тебе упали локейшены, все делается без них.
  3. утечки, еще раз утечки... обнулять то хендлы кто будет, кастер, таймер, дерево - это все требует обнуления.
  4. Ты забываешь что останутся пеньки после смерти деревьев, нужно доработать код чтобы они исчезали.
32

» WarCraft 3 / Утечки?

Нахрена вам области, что мешает узнать в редакторе координаты и занести их в массив и спаунить юнитов по координатам?
32

» WarCraft 3 / Как сделать пассивную способность активной?

Сделать кастомный аналог, и никак больше, механику работы дефолтных способностей варкравта изменить никак нельзя, пассива ауры возмездия так и будет аурой возмездия, и точка. Собственно опишите подробнее, что вы собрались делать?
32

» WarCraft 3 / IssueImmediateOrderById

Код в студию, приказ способности можно узнать банальным дебагом, просто триггер с событием юнит отдал приказ, и дебаг сообщением с номером приказа, берем юзаем свиток защиты ручками и смотрим.
32

» WarCraft 3 / Адресса кнопок

Принятый ответ
Varzik, в мемхаке есть, 'Amov' называется, она как и прочие базовые абилки лежит по одному и тому же оффсету от адреса юнита.
/pointer to 'Amov' is located at offset 123 of unit object, Aatk is at offset 122, and AInv is offset 124

//Hides all command buttons and sets the Ward flag. Unit will keep its current order, and player can’t give new orders
//Notice the the unit can’t be ordered with triggers as well. To issue an order you need to temporarily reenable control
function DisableUnitControl takes unit u returns nothing
	local integer pUnit = ConvertHandle(u)
	local integer flags
	local integer Amov
	local integer Aatk
	local integer AInv
	if pUnit > 0 then
		set flags = RMem(pUnit+0x248)
		set Amov = RMem(pUnit+0x1EC)
		set Aatk = RMem(pUnit+0x1E8)
		set AInv = RMem(pUnit+0x1F8)
	//	call echo("disabled on "+GetUnitName(u))
		if not IsFlagBitSet(flags,512) then
			call WMem(pUnit+0x248, flags + 512)
		endif
		if Amov >0 then
			call WMem(Amov+0x40, RMem(Amov+0x40) + 1)
		endif
		if Aatk >0 then
			call WMem(Aatk+0x40, RMem(Aatk+0x40) + 1)
		endif
		if AInv >0 then
			call WMem(AInv+0x3C, RMem(AInv+0x3C) + 1)
		endif
		
	endif
endfunction
32

» WarCraft 3 / KillUnit

DazzleFirst, только не так, удаляешь неуязвимость и все астралы и наносишь несколько тысяч единиц физического урона, тогда цель наверняка умрет.
32

» WarCraft 3 / Нанесение урона триггерным способом

В игре одна функция нанесения урона -
UnitDamageTarget - её юзает что jass что остальная игра, все абилки и атаки юнитов. Ты указываешь кто источник урона а кто цель, какого количество этого урона, является урон атакой ближнего боя, или дальнего, а так же тип атаки, тип урона, тип оружия. Если источник урона еще существует в игре на момент смерти другого юнита от этого урона, то убийца будет источник этого урона.
Насчет подсчетов - непонял, а что вы там считаете и как?
32

» WarCraft 3 / Отслеживание статуса выполнения приказа юнита

Ну вот, тут код без сжатия имен, и все имена функуций и переменных на месте, отлично подъходит для изучения, эта версия доты без правки вряд-ли взлетит на 1.26а, но оно и не нужно, открываем и изучаем ИИ код, как проверяется может ли кастануть скилл юнит, и кастует ли он его в данный момент.
Загруженные файлы
32

» WarCraft 3 / Как восстановить триггеры

Начин, ну а что ты забыл тогда в чужой карте, меня это убивает, нет ну я ниче незнаю и не понимаю, то точно знаю что сделал бы карту лучше (нет), прежде чем что то собираться делать неплохо бы поучится, а еще есть карты которые изначально пишутся на jass и там привычных вам триггеров нету, и код весьма сложен, тот же пудж варс взять. Поэтому берем и учимся, за все все ваши хотелки никто не сделает, не говоря про то что если у тебя будет уровень чуть выше среднего - тебе не усрется ни одна чужая карта, сам сел и сделал с нуля за недельку, просто посмотрев что и как в игре работает.
Потом будьте оригинальны, сделайте что то свое, подсмотреть некоторые идеи у других, не стыдно, стыдно ломать чужие карты.
32

» WarCraft 3 / Отслеживание статуса выполнения приказа юнита

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

» WarCraft 3 / Десинхроны в карте

У тебя вейты, в том числе длинные, после которых идет создания юнитов и прочее, так вот вейты неточны, это может приводить к дисинхам, когда разница между игроками станет критичной.
Так же из причин - длина звукового файла, почему то GetSoundFileDuration не точный, у разных игроков почему то он дает иногда разную длинну файла, поэтому длинну звука всегда задаем вручную.
Проверяем.
32

» WarCraft 3 / Протект

Ну могу помочь, но только делать фиксы будите сами. Основная проблема - несовмесимость с 1.26?
32

» WarCraft 3 / Как восстановить триггеры

Начин, ну во взломанной карте ты ничего не восстановишь, ты только можешь ручками переиминовать имена функций и переменных согласно твоему мнению исходя из того что они делают в карте. Это обычно не имеет смысла, т.к можно исправить код и так, достаточно только разбиратся что к чему, я так в доте фрога делал модификации на заказ...
32

» WarCraft 3 / о том как сделать...один скилл в редакторе

Надо кодом делать, обычный сон и сокрытие юнита, спавн на его месте зомби.
32

» WarCraft 3 / Событие "спасен" ("rescued") в редакторе Warcraft 3

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

» WarCraft 3 / Создать условие победы/поражения в melee

Они стандартные же, есть по умолчанию в каждой новой созданной карте, проигрывает тот игрок у кого не осталось здания или прошло больше (вроде бы 3х) минут с момента последнего добытого ресурса или смерти здания.
32

» WarCraft 3 / Изменение типа юнита героя

Принятый ответ
Ну морф в земноводного юнита, руной или вручением и удалением морфа медведя друида, где нормальная форма боевой еденицы - этот тот в кого ты хочешь морфнутся, а альтернативная форма боевой единицы - тот кем являлся до морфа. Естественно 2 типа юнита - один из них чисто наземный, второй земноводный.