Добавлен Alexander12,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Наработка
**1. Требуется редактор jngp(который может работать с мемхаком), либо jasscraft, либо иной способ, чтобы наработки с мемхаком корректно компились
- Сломанный массив Memory (который позволяет читать и писать в память)**
- Зачем это нужно ? для смены параметров скила (кд, дальность применения, и других данных), для определенного скила, который имеется у конкретного юнита
Собственно код.
function SetAbilityDataAInteger takes integer add,integer lvl,integer newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8 ] = newdata
endif
endfunction
function GetAbilityDataAInteger takes integer add,integer lvl returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8 ]
endif
return 0
endfunction
function SetAbilityDataBInteger takes integer add,integer lvl,integer newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 9] = newdata
endif
endfunction
function GetAbilityDataBInteger takes integer add,integer lvl returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 9]
endif
return 0
endfunction
function SetAbilityDataCInteger takes integer add,integer lvl,integer newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 10 ] = newdata
endif
endfunction
function GetAbilityDataCInteger takes integer add,integer lvl returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 10 ]
endif
return 0
endfunction
function SetAbilityDataDInteger takes integer add,integer lvl,integer newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 11 ] = newdata
endif
endfunction
function GetAbilityDataDInteger takes integer add,integer lvl returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 11 ]
endif
return 0
endfunction
function SetAbilityDataEInteger takes integer add,integer lvl,integer newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 12 ] = newdata
endif
endfunction
function GetAbilityDataEInteger takes integer add,integer lvl,integer newdata returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 12 ]
endif
return 0
endfunction
function SetAbilityDataAReal takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataAReal takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8] ))
endif
return .0
endfunction
function SetAbilityDataBReal takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 9] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataBReal takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 9] ))
endif
return .0
endfunction
function SetAbilityDataCReal takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 10 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataCReal takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 10] ))
endif
return .0
endfunction
function SetAbilityDataDReal takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 11 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataDReal takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 11] ))
endif
return .0
endfunction
function SetAbilityDataEReal takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 12 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataEReal takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 12] ))
endif
return .0
endfunction
function SetAbilityDataCast takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 1 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataCast takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 1 ] ))
endif
return .0
endfunction
function SetAbilityDataDur takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 2 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataDur takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 +2] ))
endif
return .0
endfunction
function SetAbilityDataHeroDur takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 3 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataHeroDur takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 +3] ))
endif
return .0
endfunction
function SetAbilityDataCooldown takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 5 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataCooldown takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 +5] ))
endif
return .0
endfunction
function SetAbilityDataHeroArea takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 6 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataHeroArea takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 +6] ))
endif
return .0
endfunction
function SetAbilityDataHeroRng takes integer add,integer lvl,real newdata returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 7 ] = cleanInt(realToIndex(newdata))
endif
endfunction
function GetAbilityDataHeroRng takes integer add,integer lvl returns real
if Memory[add/4+0x54/4]>0 then
return cleanReal(indexToReal(Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 +7] ))
endif
return .0
endfunction
function SetAbilityManaCostAddr2 takes integer add,integer lvl,integer mc returns nothing
if Memory[add/4+0x54/4]>0 then
set Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 +(lvl-1)*26 + 4 ] = mc
endif
endfunction
function GetAbilityManaCostAddr2 takes integer add,integer lvl returns integer
if Memory[add/4+0x54/4]>0 then
return Memory[ Memory[Memory[add/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 ]
endif
return 0
endfunction
function GetAbilityMaxLevel2 takes integer abil returns integer
return Memory[Memory[abil/4+0x54/4]/4+15]
endfunction
//Вспомогательные функции
function GetAbilityTableId takes integer a returns integer
return Memory[Memory[a/4+0x54/4]/4+0x54/4]
endfunction
function SetAbilityTableId takes integer a,integer TableId returns nothing
set Memory[Memory[a/4+0x54/4]/4+0x54/4] = TableId
endfunction
function GetAbilityDataId takes integer a returns integer
return Memory[a/4+0x54/4]
endfunction
function SetAbilityDataId takes integer a, integer DataId returns nothing
set Memory[a/4+0x54/4] = DataId
endfunction
// Копирование данных о скиле, и присвоению абилити новых данных.
function CloneAbilityData takes integer a returns nothing
local integer Address = malloc(23*4)
local integer AddressTabl = malloc(22*4+26*4*GetAbilityMaxLevel2(a) + 4 )
call CopyMemory(Address,GetAbilityDataId(a),22*4)
call CopyMemory(AddressTabl,GetAbilityTableId(a),26*4*GetAbilityMaxLevel2(a) + 4)
call SetAbilityTableId(a,AddressTabl)
call SetAbilityDataId(a,Address)
endfunction
чтобы можно было менять данные, нужно использовать функцию: function CloneAbilityData takes integer a returns nothing
для конкретного скила у конкретного юнита. после применения этой функции, можно модифицировать скил, рекомендовано, часто не использовать эту функцию.
для конкретного скила у конкретного юнита. после применения этой функции, можно модифицировать скил, рекомендовано, часто не использовать эту функцию.
Пример:
local integer a = GetUnitAbility(u,'A001')
call CloneAbilityData(a)
call SetAbilityDataHeroRng(a,1,5000)
call SetAbilityDataBReal(a,1,450)
call CloneAbilityData(a)
call SetAbilityDataHeroRng(a,1,5000)
call SetAbilityDataBReal(a,1,450)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ClotPh