Но мне кажется, что дело не в в том что я ковыряю бету а в чем-то другом
Вот код, упростил уже до безобразия
do

	local SpellTrigger = CreateTrigger()

	for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
		local player = Player(i)

		TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)

	end
	TriggerAddAction(SpellTrigger, function()
		local eventId          = GetHandleId(GetTriggerEventId())
		local caster           = GetTriggerUnit()
		local casterX, casterY = GetUnitX(caster), GetUnitY(caster)
		local spellId          = GetSpellAbilityId()

--		local spellX, spellY   = GetSpellTargetX(), GetSpellTargetY()


		if spellId == FourCC('A000') then -- Призыв
			print("призыв")

			local newu = CreateUnit(GetOwningPlayer(caster), FourCC('h000'), casterX, casterY, GetUnitFacing(caster))

		end

	end)
end
Это один единственный триггер и 1 единственный код на всей карте
В общем, просто перестаёт срабатывать, после 3-4 вызова, иногда 1 раз сработает, у меня такое ощущение, что сборщик мусора подгребает локальный триггер и всё гг, как это исправить?

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

prog помог в личке в Дискорде, вот решение
Решение
do
  local f = InitGlobals -- записываем InitGlobals в переменную
  function InitGlobals() -- заменяем оригинальную InitGlobals своей
       f() -- вызываем оригинальную InitGlobals из переменной
       InitMyTrigger()
  end

end

function InitMyTrigger()
   
 local SpellTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
    end
    TriggerAddAction(SpellTrigger, function()
        local eventId          = GetHandleId(GetTriggerEventId())
        local caster           = GetTriggerUnit()
        local casterX, casterY = GetUnitX(caster), GetUnitY(caster)
        local spellId          = GetSpellAbilityId()
--        local spellX, spellY   = GetSpellTargetX(), GetSpellTargetY()
        if spellId == FourCC('A000') then -- Призыв
            print("призыв")
            local newu = CreateUnit(GetOwningPlayer(caster), FourCC('h000'), casterX, casterY, GetUnitFacing(caster))
        end
    end)
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
23
4 года назад
2
а где инжект?
И если я помню то события ломается! Делай через 0.0 таймер или инжект после main
И заодно делай хук CreateUnit своим и добавь сюда готовый FourCC а внешки вызвать как обычно как в старые добрые времена =)
и помню что с бж функция с события нормально работает а основной нативку ломается если не в мейне
1
32
4 года назад
1
prog помог в личке в Дискорде, вот решение
Решение
do
  local f = InitGlobals -- записываем InitGlobals в переменную
  function InitGlobals() -- заменяем оригинальную InitGlobals своей
       f() -- вызываем оригинальную InitGlobals из переменной
       InitMyTrigger()
  end

end

function InitMyTrigger()
   
 local SpellTrigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
        local player = Player(i)
        TriggerRegisterPlayerUnitEvent(SpellTrigger, player, EVENT_PLAYER_UNIT_SPELL_CAST)
    end
    TriggerAddAction(SpellTrigger, function()
        local eventId          = GetHandleId(GetTriggerEventId())
        local caster           = GetTriggerUnit()
        local casterX, casterY = GetUnitX(caster), GetUnitY(caster)
        local spellId          = GetSpellAbilityId()
--        local spellX, spellY   = GetSpellTargetX(), GetSpellTargetY()
        if spellId == FourCC('A000') then -- Призыв
            print("призыв")
            local newu = CreateUnit(GetOwningPlayer(caster), FourCC('h000'), casterX, casterY, GetUnitFacing(caster))
        end
    end)
end
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.