Вчера я задавал вопрос, и когда я получил советы, то занялся делом, почитал статью про хеш таблицы сделал всё максимально приближенно к тому, что там, но к сожалению не работает, и я не могу понять, где именно. Подскажите, что я сделал не правильно??
Я сделал на основе нескольких триггеров, в первом я добавляю созданных юнитов и привязанное к ним здание в Хеш-таблицу.
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, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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

Ещё можно удобно сохранять данные
Загруженные файлы
0
4
5 лет назад
Отредактирован Black Soul
0
NazarPunk:
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели.
Это можно сделать через сохранение групп в хеш-таблицу.
Плюс ещё кучу всего, чтоб равномерно распределять хп между всеми применившими заклинание.
В смысле, равномерно? А изначально там неравномерное распределение?
Притом хотел ещё учесть такой вариант, что если два кастера применяют заклинание у одной цели, то первый применивший дамажил второго. Тут то мне таблиц и нехватило.
Можно записывать кастера в хеш-таблицу с хэндлом цели. Если кто-то еще применит заклинание, то проверить, есть ли в хеш-таблице кастер. Если да, то начать нанесение урона. Или же это можно сделать через запись группы в хеш-таблицу с хэндлом цели. При применении заклинания проверять, сколько в группе кастеров.
В любом случае, заклинание не из простых, поэтому думать придется много.
5
28
5 лет назад
Отредактирован PT153
5
NazarPunk, хватит всем сувать Lua, проще всего GUI, не хватает - есть Jass. Если надо будет сделать что-то действительно грандиозное, сами изучат vJass и Lua. В вопросах большая часть людей новички, что вообще далеки от программирования, и для их целнй хватит зачастую обычного Jass и GUI.
Тут то мне таблиц и нехватило.
Если хорошо уметь, то всего хватит)
ArhiMEN:
там человек ниже правильно написал
Кто написал? Вы вообще делали мой способ, что я предложил? Тем более Black Soul сделал целую наработку.
0
29
5 лет назад
0
Это можно сделать через сохранение групп в хеш-таблицу.
К сожалению молнии нельзя сохранять в группы.
В смысле, равномерно? А изначально там неравномерное распределение?
Если одну цель сосут два кастера, то урон/хп происходят только от самой сильной абилки и хп распределяется между кастерами.
Можно записывать кастера в хеш-таблицу с хэндлом цели.
Представьте пять кастеров, каждый из которых применил заклинание один на другого. Притом между двумя кастерами не должно отрисовываться двух молний.
хватит всем сувать Lua, проще всего GUI
Хватит всем набирать код руками, ноги выбор мастеров.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.