begin declare curexperience int(4) unsigned; declare curlevel int(4) unsigned; declare nextlevel int(4) unsigned; select character_level into curlevel, character_experience into curexperience from characters where character_id = CID select CalculateExperienceForLevel(curlevel + 1) into nextlevel; if (nextlevel < (curexperience + ExperienceDelta) then update characters set character_level = curlevel+1, character_experience = curexperience+ExperienceDelta where character_id = CID; return 1; end if; select CalculateExperienceForLevel(curlevel ) into nextlevel; if ((curexperience + ExperienceDelta) < nextlevel) then update characters set character_level = curlevel-1, character_experience = curexperience+ExperienceDelta where character_id = CID; return -1; end if update characters set character_experience = curexperience+ExperienceDelta where character_id = CID; return 0; end