смотрю тут юзается хэш юнита, а если у меня будут названия совпадать с твоими стрингхэшами и будет происходить перезапись? получается эта наработка поломает челу карту
rsfghd, касательно того, что некоторые юниты в игноре, то это потому-что там условие на расстояние до крипа
могу предположить только что ты спелл не для юза другими игроками делал, то есть не для импорта, а просто показать, что ты можешь сделать на данный момент
rsfghd, с пораболой я уже разобрался и я не совсем понял,что за структуры?
Сейчас дело в том, что часть "снарядов" надвигается с места. Я решил проверить почему и выяснил, что в среднем у трёх эффектов дистанция равна нулю. Возможно дело в том, что я использую функции МемХака и из-за скорости движения что-то сбивается?
Смотри, я делал способность с накопительным эффектом от ударов, механика та же самая.
Пример
//! nocjass
library Horror requires MemoryHackDamageEventHook
globals
group HorrorGroup = CreateGroup()
endglobals
function HorrorCheckGroup takes nothing returns nothing
local real HorrorTime = LoadReal(H, GetHandleId(GetEnumUnit()), StringHash("HorrorTime"))
local effect HorrorEffect = LoadEffectHandle(H, GetHandleId(GetEnumUnit()), StringHash("HorrorEffect"))
local unit Isazam = LoadUnitHandle(H, GetHandleId(GetEnumUnit()), StringHash("Isazam"))
local real TargetX = GetUnitX(GetEnumUnit())
local real TargetY = GetUnitY(GetEnumUnit())
local real IsazamX = GetUnitX(Isazam)
local real IsazamY = GetUnitY(Isazam)
local integer HorrorQuest = LoadInteger(H, GetHandleId(Isazam), StringHash("HorrorQuest"))
if HorrorTime >= 20 then
set HorrorQuest = 1
call SaveInteger(H, GetHandleId(Isazam), StringHash("HorrorQuest"), HorrorQuest)
endif
if SquareRoot((IsazamX - TargetX) * (IsazamX - TargetX) + (IsazamY - TargetY) * (IsazamY - TargetY)) >= 700 then //Указываем желаемую дальность увеличенного снижения ужаса
set HorrorTime = HorrorTime - 1.5
else
set HorrorTime = HorrorTime - 1
endif
if HorrorTime <= 0 then
call DestroyEffect(HorrorEffect)
call GroupRemoveUnit(HorrorGroup, GetEnumUnit())
set HorrorTime = 0
else
call PingMinimapEx(TargetX, TargetY, 1, 255, 0, 0, false)
endif
call SaveReal(H, GetHandleId(GetEnumUnit()), StringHash("HorrorTime"), HorrorTime)
set HorrorEffect = null
set Isazam = null
endfunction
function HorrorCheckAction takes nothing returns nothing
call ForGroup(HorrorGroup, function HorrorCheckGroup)
endfunction
function Damaged_Handler takes unit source, unit target, real dmg returns nothing
local integer evnt = GetDamageEventESPData()
local integer data = ReadRealMemory(evnt + 0x00)
local real init_dmg = CleanReal(IndexToReal(ReadRealMemory(evnt + 0x04)))
local integer flags = ReadRealMemory(data + 0x0C)
local integer atk_t = ReadRealMemory(data + 0x20)
local real HorrorTime = LoadReal(H, GetHandleId(target), StringHash("HorrorTime"))
local effect HorrorEffect
local unit Isazam
local integer HorrorQuest = LoadInteger(H, GetHandleId(source), StringHash("HorrorQuest"))
if GetUnitTypeId(source) == 'U000' then // Ставим свой ID Исазама
call SaveReal(H, GetHandleId(target), StringHash("HorrorTime"), HorrorTime + 2 + HorrorQuest)
if HorrorTime <= 0 then
set HorrorEffect = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\UnholyFrenzy\\UnholyFrenzyTarget.mdl", target, "chest")
call SaveEffectHandle(H, GetHandleId(target), StringHash("HorrorEffect"), HorrorEffect)
call SaveUnitHandle(H, GetHandleId(target), StringHash("Isazam"), source)
call GroupAddUnit(HorrorGroup, target)
elseif (IsFlagBitSet(flags, 0x100) or IsFlagBitSet(flags, 0x101)) and atk_t != 0 and HorrorTime > 0 then
set HorrorEffect = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", source, "origin")
call DestroyEffectTimer(HorrorEffect, 0.3)
call SetUnitState(source, UNIT_STATE_LIFE, (GetUnitState(source, UNIT_STATE_LIFE) + init_dmg * 0.2))
endif
endif
set HorrorEffect = null
set Isazam = null
endfunction
function Damage_Event takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger( ) )
call Damaged_Handler( GetEventDamageSource( ), GetTriggerUnit( ), GetEventDamage( ) )
call EnableTrigger( GetTriggeringTrigger( ) )
endfunction
endlibrary
function InitTrig_Horror takes nothing returns nothing
local group gMain = CreateGroup()
local unit uTemp
local trigger trTemp = CreateTrigger()
local trigger HorrorCheck = CreateTrigger()
if true then
call GroupEnumUnitsInRect( gMain, bj_mapInitialPlayableArea, null )
loop
set uTemp = FirstOfGroup( gMain )
exitwhen uTemp == null
call TriggerRegisterUnitEvent( trTemp, uTemp, EVENT_UNIT_DAMAGED )
call GroupRemoveUnit( gMain, uTemp )
endloop
call TriggerAddAction( trTemp, function Damage_Event )
endif
call TriggerRegisterTimerEvent(HorrorCheck, 1, true)
call TriggerAddAction(HorrorCheck, function HorrorCheckAction)
call DestroyGroup(gMain)
set gMain = null
set trTemp = null
set HorrorCheck = null
endfunction
Мне нужно только мемхаки Unit API, Ability API, Item API, Group API, Agent API, а остальное не нужно какие триггеры нужно копировать с этими мемхаками.
Так просто удали остальные триггеры и в триггере InitMemoryHack удали вызов к нимм
» Darkest Dungeon / Darkest Dungeon
» WarCraft 3 / Огненная бомба
» WarCraft 3 / Время действия
» WarCraft 3 / Огненная бомба
» WarCraft 3 / Время действия
» WarCraft 3 / Огненная бомба
» WarCraft 3 / Отлов определенных атак
Ред. ArhiMEN
» WarCraft 3 / Счётчик Хендлов на WURST
» WarCraft 3 / Счётчик Хендлов на WURST
» XGM Конкурсы / Конкурс становления героев
» XGM Конкурсы / Конкурс становления героев
» Мастерская переводов | Кампании WC3 на русском / Война Разложения
Ред. ArhiMEN
» WarCraft 3 / Ошибка в способности
» WarCraft 3 / Ошибка в способности
» WarCraft 3 / loop
» WarCraft 3 / loop
» WarCraft 3 / loop
» Мастерская переводов | Кампании WC3 на русском / Рассвет Эльфов Крови 3.0
» WarCraft 3 / Ошибка в способности
» WarCraft 3 / Ошибка в способности
Ред. ArhiMEN
» WarCraft 3 / Несколько вопросов про мемхак
» WarCraft 3 / редактор не реагирует на библиотеку и скоп
» WarCraft 3 / Время действия
Обновление
» WarCraft 3 / Кел'Тузад из Heroes of the Storm
» WarCraft 3 / Кел'Тузад из Heroes of the Storm