Добавлен Naadir
Почему вылетает фатал при попытке выдать одной абилке перезарядку при применении другой? Я совершенно ничего не понимаю.
код карты
// reserved native for call 4 integer function and return BOOLEAN value
native MergeUnits takes integer qty, integer a, integer b, integer make returns boolean
// reserved native for call 2 integer function and return BOOLEAN value (can be converted to int!)
native ConvertUnits takes integer qty, integer id returns boolean
// reserved native for call 1 integer function and return integer value
native IgnoredUnits takes integer unitid returns integer
function CallFastCallWith1Args takes integer pFuncFastcallAddr, integer arg1 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0xB9F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg1)
call WriteRealMemory(pReservedExecutableMemory2+8, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+16, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith2Args takes integer pFuncFastcallAddr, integer arg1, integer arg2 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0xBAF68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg2)
call WriteRealMemory(pReservedExecutableMemory2+8, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg1)
call WriteRealMemory(pReservedExecutableMemory2+16, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+24, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith3Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg3)
call WriteRealMemory(pReservedExecutableMemory2+8, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg2)
call WriteRealMemory(pReservedExecutableMemory2+16, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg1)
call WriteRealMemory(pReservedExecutableMemory2+24, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+32, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function FUCKINGCallWith4Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg4)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg3)
call WriteRealMemory(pReservedExecutableMemory2+16, 0xB8F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg2)
call WriteRealMemory(pReservedExecutableMemory2+24, 0xBFF68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg1)
call WriteRealMemory(pReservedExecutableMemory2+32, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+40, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith4Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg4)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg3)
call WriteRealMemory(pReservedExecutableMemory2+16, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg2)
call WriteRealMemory(pReservedExecutableMemory2+24, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg1)
call WriteRealMemory(pReservedExecutableMemory2+32, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+40, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith5Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4, integer arg5 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg5)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg4)
call WriteRealMemory(pReservedExecutableMemory2+16, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg3)
call WriteRealMemory(pReservedExecutableMemory2+24, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg2)
call WriteRealMemory(pReservedExecutableMemory2+32, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, arg1)
call WriteRealMemory(pReservedExecutableMemory2+40, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+44, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+48, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith6Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4, integer arg5, integer arg6 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg6)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg5)
call WriteRealMemory(pReservedExecutableMemory2+16, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg4)
call WriteRealMemory(pReservedExecutableMemory2+24, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg3)
call WriteRealMemory(pReservedExecutableMemory2+32, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, arg2)
call WriteRealMemory(pReservedExecutableMemory2+40, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+44, arg1)
call WriteRealMemory(pReservedExecutableMemory2+48, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+52, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+56, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith7Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4, integer arg5, integer arg6, integer arg7 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg7)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg6)
call WriteRealMemory(pReservedExecutableMemory2+16, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg5)
call WriteRealMemory(pReservedExecutableMemory2+24, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg4)
call WriteRealMemory(pReservedExecutableMemory2+32, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, arg3)
call WriteRealMemory(pReservedExecutableMemory2+40, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+44, arg2)
call WriteRealMemory(pReservedExecutableMemory2+48, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+52, arg1)
call WriteRealMemory(pReservedExecutableMemory2+56, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+60, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+64, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallFastCallWith8Args takes integer pFuncFastcallAddr, integer arg1, integer arg2, integer arg3 , integer arg4, integer arg5, integer arg6, integer arg7, integer arg8 returns integer
local integer pOffset1
call WriteRealMemory(pReservedExecutableMemory2, 0x68F68B56)
call WriteRealMemory(pReservedExecutableMemory2+4, arg8)
call WriteRealMemory(pReservedExecutableMemory2+8, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+12, arg7)
call WriteRealMemory(pReservedExecutableMemory2+16, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+20, arg6)
call WriteRealMemory(pReservedExecutableMemory2+24, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+28, arg5)
call WriteRealMemory(pReservedExecutableMemory2+32, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+36, arg4)
call WriteRealMemory(pReservedExecutableMemory2+40, 0x68F68B90)
call WriteRealMemory(pReservedExecutableMemory2+44, arg3)
call WriteRealMemory(pReservedExecutableMemory2+48, 0xBAF68B90)
call WriteRealMemory(pReservedExecutableMemory2+52, arg2)
call WriteRealMemory(pReservedExecutableMemory2+56, 0xB9F68B90)
call WriteRealMemory(pReservedExecutableMemory2+60, arg1)
call WriteRealMemory(pReservedExecutableMemory2+64, 0xBEF68B90)
call WriteRealMemory(pReservedExecutableMemory2+68, pFuncFastcallAddr)
call WriteRealMemory(pReservedExecutableMemory2+72, 0xC35ED6FF)
if pIgnoredUnitsOffset == 0 then
set pIgnoredUnitsOffset = CreateJassNativeHook(pIgnoredUnits, pReservedExecutableMemory2 )
else
call WriteRealMemory(pIgnoredUnitsOffset,pReservedExecutableMemory2)
endif
set pOffset1 = IgnoredUnits(0)
call WriteRealMemory(pIgnoredUnitsOffset, pIgnoredUnits)
return pOffset1
endfunction
function CallThisCallWith1Args takes integer pFuncThiscallAddr, integer arg1 returns integer
return CallFastCallWith2Args(pFuncThiscallAddr,arg1,0)
endfunction
function CallThisCallWith2Args takes integer pFuncThiscallAddr, integer arg1, integer arg2 returns integer
return CallFastCallWith3Args(pFuncThiscallAddr,arg1,0,arg2)
endfunction
function CallThisCallWith3Args takes integer pFuncThiscallAddr, integer arg1, integer arg2, integer arg3 returns integer
return CallFastCallWith4Args(pFuncThiscallAddr,arg1,0,arg2,arg3)
endfunction
function CallThisCallWith4Args takes integer pFuncThiscallAddr, integer arg1, integer arg2, integer arg3, integer arg4 returns integer
return CallFastCallWith5Args(pFuncThiscallAddr,arg1,0,arg2,arg3,arg4)
endfunction
function CallThisCallWith5Args takes integer pFuncThiscallAddr, integer arg1, integer arg2, integer arg3, integer arg4, integer arg5 returns integer
return CallFastCallWith6Args(pFuncThiscallAddr,arg1,0,arg2,arg3,arg4,arg5)
endfunction
function CallThisCallWith6Args takes integer pFuncThiscallAddr, integer arg1, integer arg2, integer arg3, integer arg4, integer arg5, integer arg6 returns integer
return CallFastCallWith7Args(pFuncThiscallAddr,arg1,0,arg2,arg3,arg4,arg5,arg6)
endfunction
function CallThisCallWith7Args takes integer pFuncThiscallAddr, integer arg1, integer arg2, integer arg3, integer arg4, integer arg5, integer arg6, integer arg7 returns integer
return CallFastCallWith8Args(pFuncThiscallAddr,arg1,0,arg2,arg3,arg4,arg5,arg6,arg7)
endfunction
function StartAbilityCD takes integer pAbility, real cd returns nothing
set Memory[pReserverdIntArg1/4] = cleanInt(realToIndex(cd))
call CallThisCallWith2Args(pStartAbilityCD,pAbility, pReserverdIntArg1)
endfunction
код абилки
function Trig_Eviscerate_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A00J' ) ) then
return false
endif
return true
endfunction
function Trig_Eviscerate_Actions takes nothing returns nothing
call UnitDamageTargetBJ( GetSpellAbilityUnit(), GetSpellTargetUnit(), ( I2R(udg_ComboPoints) * ( 3.00 + ( 2.00 * I2R(GetUnitAbilityLevelSwapped('A00J', GetSpellAbilityUnit())) ) ) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
set udg_ComboPoints = ( udg_ComboPoints + ( GetUnitAbilityLevelSwapped('A00I', GetSpellAbilityUnit()) * 10 ) )
call StartAbilityCD('A00I',10)
endfunction
//===========================================================================
function InitTrig_Eviscerate takes nothing returns nothing
set gg_trg_Eviscerate = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Eviscerate, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Eviscerate, Condition( function Trig_Eviscerate_Conditions ) )
call TriggerAddAction( gg_trg_Eviscerate, function Trig_Eviscerate_Actions )
endfunction
Принятый ответ
Похожие вопросы:
ответ
Возможно "канал" так же имеет отличную от остальных абилок структуруРабочий вариантfunction StartAbilityCD takes unit whichUnit, integer abilityId returns boolean
local integer pAbility = 0
local real cd = GetAbilityCD(abilityId, GetPlayerId(GetOwningPlayer(whichUnit))+1)
if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId ) < 1 or cd == 0.00 then
return false
endif
set pAbility = GetUnitAbility(whichUnit, abilityId)
if pAbility < 1 then
return false
else
if RMem(pAbility+0x134)==-1 and RMem(pAbility+0x138)==-1 then
call WMem(pAbility+0x134,0)
call WMem(pAbility+0x138,0)
endif
set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
return IsAbilityOnCooldown( pAbility )
endif
return false
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Naadir