Передвижение юнитов через спел на Хеш-таблице
Вчера я задавал вопрос, и когда я получил советы, то занялся делом, почитал статью про хеш таблицы сделал всё максимально приближенно к тому, что там, но к сожалению не работает, и я не могу понять, где именно. Подскажите, что я сделал не правильно??
Я сделал на основе нескольких триггеров, в первом я добавляю созданных юнитов и привязанное к ним здание в Хеш-таблицу.
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 здания, рядом с которым они создаются. Как я понимаю в первом триггере всё идёт нормально, но а во втором только до момента выбора группы. Прошу исправить мне в коде то, в чём я ошибся или хотя бы объяснить, где у меня происходит баг.
Заранее спасибо)

Без ответа.


Просмотров: 368

» Лучшие комментарии


Black Soul #1 - 3 месяца назад 0
И зачем нужно было создавать новый вопрос? А систему передвижения я уже сделал и подробно описал в предыдущем твоем вопросе.
ArhiMEN #2 - 3 месяца назад 0
Black Soul:
И зачем нужно было создавать новый вопрос? А систему передвижения я уже сделал и подробно описал в предыдущем твоем вопросе.
Дело в том, что там человек ниже правильно написал, если будет создаваться не одно подобное здание, а 20-30, то я не смогу все их записывать вот так, поэтому решил создать группу.
Black Soul #3 - 3 месяца назад (отредактировано ) 0
ArhiMEN, посмотри мою наработку в предыдущем вопросе. У тебя может быть хоть 100 зданий на карте — она будет работать в любом случае, т.к. юниты записываются и читаются из хеш-таблицы по хэндлу здания.
Bergi_Bear #4 - 3 месяца назад 2
Вы даже не представляете как же это всё просто делается на луа, не нужны никакие хештаблицы =)
Я думаю если вы начали это изучать, то изучайте самое последнее и крутое средство, это даже полезно будет
ArhiMEN #5 - 3 месяца назад 0
Black Soul:
ArhiMEN, посмотри мою наработку в предыдущем вопросе. У тебя может быть хоть 100 зданий на карте — она будет работать в любом случае, т.к. юниты записываются и читаются из хеш-таблицы по хэндлу здания.
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
NazarPunk #6 - 3 месяца назад 0
Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Если у вас 1.26, то Key не работает из GUI, так что переходите на последний патч с lua, там геммороя намного меньше.
ArhiMEN #7 - 3 месяца назад 0
Тогда вопрос остаётся актуальным, где я совершил ошибку, что ничего не работает??
Bergi_Bear #8 - 3 месяца назад 2
где я совершил ошибку
когда проигнорировал сообщение про луа, там не нужны хештаблицы.
DracoL1ch #9 - 3 месяца назад (отредактировано ) 0
прежде чем кричать, куда переходить, спросите, где автор будет в карту свою играть. 90 к 1, что на гарене, где никогда не будет патча выше 1.26
NazarPunk #10 - 3 месяца назад 0
DracoL1ch, нужно стремиться к светлому будущему, а не утягивать всех в пучину 1.26 с костылями и гареной с полтора землекопа.
DracoL1ch #11 - 3 месяца назад 1
а в батлнете не полтора землекопа, понял принял
PT153 #12 - 3 месяца назад 0
DracoL1ch, я в свою карту быстро набираю лобби в баттлнете.
Black Soul #13 - 3 месяца назад (отредактировано ) 0
ArhiMEN:
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Так не нужно ничего самому делать. Я прикрепил к тому сообщению карту. В ней я уже все сделал сам. Тебе осталось только скопировать триггеры оттуда в свою карту и заменить юнитов на тех, которые тебе нужны. Вот та карта:
Bergi_Bear, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
NazarPunk #14 - 3 месяца назад 0
хеш-таблицы — это проще простого.
Хэштаблицы проще чем lua?
Black Soul #15 - 3 месяца назад 0
NazarPunk, не знаю, насколько сложен Lua, но хеш-таблицы очень легко освоить, как я написал выше. Достаточно только понять принцип их работы.
NazarPunk #16 - 3 месяца назад 0
но хеш-таблицы очень легко освоить
Хэштаблицы это неповоротливый костыль, который можно использовать только для хранения this структуры по хэндлу таймера.
Black Soul #17 - 3 месяца назад 0
NazarPunk, почему? Везде, где использовал, отлично работали. В той наработке, которую я сделал, они работали так, как нужно, хоть там и не таймер. Хеш-таблица — универсальный хранитель информации.
NazarPunk #18 - 3 месяца назад (отредактировано ) 0
Хеш-таблица — универсальный хранитель информации.
Как сможете без лишних сущностей сохранить n двумерных массивов на хэндл юнита, тогда я вам поверю. За сохранение в хэштаблице безымянной функции я вообще молчу.
Black Soul #19 - 3 месяца назад 0
NazarPunk, не вижу смысла сохранять двумерные массивы в хеш-таблицу.
Функции? Их разве можно вообще куда-либо сохранять?
prog #20 - 3 месяца назад 4
Что хештаблицы, что вжасс структуры - уродливые костыли на фоне Луа. А так - я тоже не вижу большой проблемы с хештаблицами, ну кривые, ну бывает медленные, но работают и при правильном использовании это далеко не самая большая проблема.
NazarPunk #21 - 3 месяца назад (отредактировано ) 0
не вижу смысла сохранять двумерные массивы в хеш-таблицу.
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели. Плюс ещё кучу всего, чтоб равномерно распределять хп между всеми применившими заклинание. Притом хотел ещё учесть такой вариант, что если два кастера применяют заклинание у одной цели, то первый применивший дамажил второго. Тут то мне таблиц и нехватило.
Функции? Их разве можно вообще куда-либо сохранять?
В lua их даже возвращать можно)
function sum(a)
	return function(b)
		return a + b
	end
end
print(sum(2)(3)) --> 5

Ещё можно удобно сохранять данные
прикреплены файлы
Black Soul #22 - 3 месяца назад (отредактировано ) 0
NazarPunk:
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели.
Это можно сделать через сохранение групп в хеш-таблицу.
Плюс ещё кучу всего, чтоб равномерно распределять хп между всеми применившими заклинание.
В смысле, равномерно? А изначально там неравномерное распределение?
Притом хотел ещё учесть такой вариант, что если два кастера применяют заклинание у одной цели, то первый применивший дамажил второго. Тут то мне таблиц и нехватило.
Можно записывать кастера в хеш-таблицу с хэндлом цели. Если кто-то еще применит заклинание, то проверить, есть ли в хеш-таблице кастер. Если да, то начать нанесение урона. Или же это можно сделать через запись группы в хеш-таблицу с хэндлом цели. При применении заклинания проверять, сколько в группе кастеров.
В любом случае, заклинание не из простых, поэтому думать придется много.
PT153 #23 - 3 месяца назад (отредактировано ) 5
NazarPunk, хватит всем сувать Lua, проще всего GUI, не хватает - есть Jass. Если надо будет сделать что-то действительно грандиозное, сами изучат vJass и Lua. В вопросах большая часть людей новички, что вообще далеки от программирования, и для их целнй хватит зачастую обычного Jass и GUI.
Тут то мне таблиц и нехватило.
Если хорошо уметь, то всего хватит)
ArhiMEN:
там человек ниже правильно написал
Кто написал? Вы вообще делали мой способ, что я предложил? Тем более Black Soul сделал целую наработку.
NazarPunk #24 - 3 месяца назад 0
Это можно сделать через сохранение групп в хеш-таблицу.
К сожалению молнии нельзя сохранять в группы.
В смысле, равномерно? А изначально там неравномерное распределение?
Если одну цель сосут два кастера, то урон/хп происходят только от самой сильной абилки и хп распределяется между кастерами.
Можно записывать кастера в хеш-таблицу с хэндлом цели.
Представьте пять кастеров, каждый из которых применил заклинание один на другого. Притом между двумя кастерами не должно отрисовываться двух молний.
хватит всем сувать Lua, проще всего GUI
Хватит всем набирать код руками, ноги выбор мастеров.
Black Soul #25 - 3 месяца назад 0
NazarPunk:
К сожалению молнии нельзя сохранять в группы.
Про молнии ты и не писал:
NazarPunk:
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели.
Здесь написано про хранение целей, а не молний.
Я не знаю, на что способен Lua, но это заклинание, я уверен, можно сделать и без Lua, просто займет оно очень много времени и сил, т.к. оно слишком громоздкое и учитывает много всего.
PT153 #26 - 3 месяца назад (отредактировано ) 0
просто займет оно очень много времени и сил, т.к. оно слишком громоздкое и учитывает много всего.
Не думаю, на сайте есть наработка сохранения молний через хеш, её чуть под себя обновить и 50% готово.
NazarPunk:
Хватит всем набирать код руками, ноги выбор мастеров.
Выходит, что Lua - это ноги? Я думал, что наоборот.
Black Soul #27 - 3 месяца назад 0
PT153, я имел ввиду не только сохранение молний, а полностью все заклинание.
8gabriel8 #28 - 3 месяца назад 0
NazarPunk, очень интересно стало, что за способность, где молнии бросают кастеры, дамажит из них та, что сильнее, но сосут здоровье оба, при этом при касте друг на друга создаётся лишь одна молния, есть ещё особенности?
PT153 #29 - 3 месяца назад 0
8gabriel8, он же ссылку кинул.
Black Soul:
полностью все заклинание.
Я пока вижу только проблему, когда в одну цель несколько похищений.
NazarPunk #30 - 3 месяца назад 0
Я пока вижу только проблему, когда в одну цель несколько похищений.
И ещё одна проблема, если делать лимит целей: нужно обрывать drain, которому меньше всего жить осталось.
Black Soul #31 - 3 месяца назад 0
PT153:
Я пока вижу только проблему, когда в одну цель несколько похищений.
Да. Ему много всего нужно учитывать при этом (например, равномерное распределение, первый кастер дамажит других и т.д.), поэтому это заклинание сложное.
8gabriel8 #32 - 3 месяца назад 0
PT153:
он же ссылку кинул.
Сначала не понял, что это ссылка, два раза пересмотрел, только тогда нашёл. Наверное, плохо различаю тёмно-синий и чёрный текст, так как еле замечаю такие ссылки.
PT153 #33 - 3 месяца назад 0
8gabriel8, было бы неплохо ссылки подчёркивать.