Писал код для мемхак статы но 1 лишь функция ругает что execute нельзя возвращать real
library RPGStat initializer Initialize requires Utils
globals
public Stat STAT_MAX_HP
public Stat STAT_MAX_MP
public Stat STAT_REG_HP
public Stat STAT_REG_MP
public Stat STAT_ATT_STR
public Stat STAT_ATT_AGI
public Stat STAT_ATT_INT
endglobals
public function interface iGet takes unit u returns real
public function interface iSet takes unit u, real r returns nothing
public function interface iAdd takes unit u, real r returns nothing
struct Stat
private iGet g
private iSet s
private iAdd a
static method create takes iGet g, iSet s, iAdd a returns thistype
local thistype this = thistype.allocate()
set .g = g
set .s = s
set .a = a
return this
endmethod
public method getStat takes unit u returns real
local real r = 0.0
if this.g != 0 then
// Тут ругает как его заменить??? если?
set r = this.g.execute(u)
endif
return r
endmethod
public method setStat takes unit u, real r returns nothing
if this.s != 0 then
call this.s.execute(u, r)
endif
endmethod
public method addStat takes unit u, real r returns nothing
if this.s != 0 then
call this.a.execute(u, r)
endif
endmethod
endstruct
public function getMaxHP takes unit u returns real
local integer pOffset2 = getUnitData(convertHandle(u),0xA0)
if pOffset2>0 then
return mI2R(RMem(pOffset2+0x84))
endif
return .0
endfunction
public function setMaxHP takes unit u, real r returns nothing
local integer pOffset2 = getUnitData(convertHandle(u),0xA0)
if pOffset2>0 then
call WMem(pOffset2+0x84,mR2I(r))
endif
endfunction
public function addMaxHP takes unit u, real r returns nothing
call setMaxHP(u, getMaxHP(u) + r)
endfunction
public function getMaxMP takes unit u returns real
local integer pOffset2 = getUnitData(convertHandle(u),0xC0)
if pOffset2>0 then
return mI2R(RMem(pOffset2+0x84))
endif
return .0
endfunction
public function setMaxMP takes unit u, real r returns nothing
local integer pOffset2 = getUnitData(convertHandle(u),0xC0)
if pOffset2>0 then
call WMem(pOffset2+0x84,mR2I(r))
endif
endfunction
public function addMaxMP takes unit u, real r returns nothing
call setMaxMP(u, getMaxMP(u) + r)
endfunction
private function Initialize takes nothing returns nothing
set STAT_MAX_HP = Stat.create(iGet.getMaxHP, iSet.setMaxHP, iAdd.addMaxHP)
set STAT_MAX_MP = Stat.create(iGet.getMaxMP, iSet.setMaxMP, iAdd.addMaxMP)
set STAT_REG_HP = Stat.create(0, 0, 0)
set STAT_REG_MP = Stat.create(0, 0, 0)
set STAT_ATT_STR = Stat.create(0, 0, 0)
set STAT_ATT_AGI = Stat.create(0, 0, 0)
set STAT_ATT_INT = Stat.create(0, 0, 0)
endfunction
endlibrary