Erstmal:
Sowohl onBattlerAction als auch onBattlerActionDone werden pro Charakter mehrfach in Folge ausgelöst. Wenn du eine Handlung genau ein mal abfragen willst, dann solltest du dies in onBattlerActionDone mit success == true machen.

Code:
bool onBattlerActionDone (RPG::Battler *battler, bool success)
{
    if(success && !battler->isMonster() ) // Bei Helden, nur das eine mal nach dem die Handlung wirklich ausgeführt wurde
    {
        if(battler->action->kind == RPG::AK_BASIC &&
           (battler->action->basicActionId == RPG::BA_ATTACK ||
           battler->action->basicActionId == RPG::BA_DEFEND))
        {
            battler->mp = battler->mp + 10;
        }
    }
    return true;
}
Ob BA_ATTACK bei mir funktioniert kann ich derzeit nicht testen, da musste dich gedulden ;-)