Писал код для мемхак статы но 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

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

На хайве получил ответ, надо было писать evaluate