Вчера я задавал вопрос, и когда я получил советы, то занялся делом, почитал статью про хеш таблицы сделал всё максимально приближенно к тому, что там, но к сожалению не работает, и я не могу понять, где именно. Подскажите, что я сделал не правильно??
Я сделал на основе нескольких триггеров, в первом я добавляю созданных юнитов и привязанное к ним здание в Хеш-таблицу.
function Trig_Create_Groops_____________________u_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'h003' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Create_Groops_____________________u_Actions takes nothing returns nothing
    local unit q
    local unit w = GetTriggerUnit()
    local group g
    local integer h
    local integer j = GetHandleId(w)
    call CreateNUnitsAtLoc( 3, 'h00C', GetOwningPlayer(GetTriggerUnit()), GetUnitLoc(GetTriggerUnit()), bj_UNIT_FACING )
    set q = GetLastCreatedUnit()
    call GroupAddUnitSimple( q, g )
    set h = GetHandleId(q)
    call SaveUnitHandle(udg_hash,j,1,w)
    call SaveGroupHandle(udg_hash,h,1,g)
    set q = null
    set w = null
    set g = null
    
endfunction

//===========================================================================
function InitTrig_Create_Groops_jass takes nothing returns nothing
    set gg_trg_Create_Groops_jass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Create_Groops_jass, EVENT_PLAYER_UNIT_UPGRADE_FINISH )
    call TriggerAddCondition( gg_trg_Create_Groops_jass, Condition( function Trig_Create_Groops_____________________u_Conditions ) )
    call TriggerAddAction( gg_trg_Create_Groops_jass, function Trig_Create_Groops_____________________u_Actions )
endfunction
Во втором триггере я при использовании способности, которая находиться в здании передвигаю тех 3-х юнитов.
function Trig_Move2_jass_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Move2_jass_Func001A takes nothing returns nothing 
    call IssuePointOrderLoc( GetEnumUnit(), "move", GetSpellTargetLoc() )
endfunction

function Trig_Move2_jass_Actions takes nothing returns nothing
    local unit cast = GetTriggerUnit()
    local integer h = GetHandleId(cast)
    local group movegroup 
    set movegroup = LoadGroupHandle(udg_hash, h,1)
    call ForGroupBJ( movegroup, function Trig_Move2_jass_Func001A )
endfunction

//===========================================================================
function InitTrig_Move2_jass takes nothing returns nothing
    set gg_trg_Move2_jass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Move2_jass, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Move2_jass, Condition( function Trig_Move2_jass_Conditions ) )
    call TriggerAddAction( gg_trg_Move2_jass, function Trig_Move2_jass_Actions )
endfunction
Я решил связать группу из 3-х юнитов и здание через id здания, рядом с которым они создаются. Как я понимаю в первом триггере всё идёт нормально, но а во втором только до момента выбора группы. Прошу исправить мне в коде то, в чём я ошибся или хотя бы объяснить, где у меня происходит баг.
Заранее спасибо)

Принятый ответ

ArhiMEN:
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Так не нужно ничего самому делать. Я прикрепил к тому сообщению карту. В ней я уже все сделал сам. Тебе осталось только скопировать триггеры оттуда в свою карту и заменить юнитов на тех, которые тебе нужны. Вот та карта:
Bergi_Bear, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
16
5 лет назад
1
а в батлнете не полтора землекопа, понял принял
0
28
5 лет назад
0
DracoL1ch, я в свою карту быстро набираю лобби в баттлнете.
0
4
5 лет назад
Отредактирован Black Soul
0
ArhiMEN:
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Так не нужно ничего самому делать. Я прикрепил к тому сообщению карту. В ней я уже все сделал сам. Тебе осталось только скопировать триггеры оттуда в свою карту и заменить юнитов на тех, которые тебе нужны. Вот та карта:
Bergi_Bear, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
Принятый ответ
0
29
5 лет назад
0
хеш-таблицы — это проще простого.
Хэштаблицы проще чем lua?
0
4
5 лет назад
0
NazarPunk, не знаю, насколько сложен Lua, но хеш-таблицы очень легко освоить, как я написал выше. Достаточно только понять принцип их работы.
0
29
5 лет назад
0
но хеш-таблицы очень легко освоить
Хэштаблицы это неповоротливый костыль, который можно использовать только для хранения this структуры по хэндлу таймера.
0
4
5 лет назад
0
NazarPunk, почему? Везде, где использовал, отлично работали. В той наработке, которую я сделал, они работали так, как нужно, хоть там и не таймер. Хеш-таблица — универсальный хранитель информации.
0
29
5 лет назад
Отредактирован nazarpunk
0
Хеш-таблица — универсальный хранитель информации.
Как сможете без лишних сущностей сохранить n двумерных массивов на хэндл юнита, тогда я вам поверю. За сохранение в хэштаблице безымянной функции я вообще молчу.
0
4
5 лет назад
0
NazarPunk, не вижу смысла сохранять двумерные массивы в хеш-таблицу.
Функции? Их разве можно вообще куда-либо сохранять?
4
24
5 лет назад
4
Что хештаблицы, что вжасс структуры - уродливые костыли на фоне Луа. А так - я тоже не вижу большой проблемы с хештаблицами, ну кривые, ну бывает медленные, но работают и при правильном использовании это далеко не самая большая проблема.
0
29
5 лет назад
Отредактирован nazarpunk
0
не вижу смысла сохранять двумерные массивы в хеш-таблицу.
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели. Плюс ещё кучу всего, чтоб равномерно распределять хп между всеми применившими заклинание. Притом хотел ещё учесть такой вариант, что если два кастера применяют заклинание у одной цели, то первый применивший дамажил второго. Тут то мне таблиц и нехватило.
Функции? Их разве можно вообще куда-либо сохранять?
В lua их даже возвращать можно)
function sum(a)
	return function(b)
		return a + b
	end
end
print(sum(2)(3)) --> 5

Ещё можно удобно сохранять данные
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.