green belly, про перки: удобней всего(наверное) будет создать таблицу, куда занести перки, тип награды за перк и соответственно сами награды за разные уровни мастерства. После написать функцию которая будет проверять наличие нужных перков и их мастерство, определять какой тип награды должен быть и выдавать за них саму награду.
Про статы для боя: думаю, можно определять какой расе принадлежит герой через HasHeroSkill(heroName, ID расовых статов(типа "мастер артефактов" у магов, "контрудар" у рыцарей, мститель у эльфов, "некромантия" у некромантов и т.д.), и если у героя есть тот или иной стат(а он, по стандарту, может быть у героя только один), приписывать его в нужную расу. С лидерством так же, но для проверки уровня мастерства нужно использовать функцию GetHeroSkillMastery(heroName, ID скилла), которая возвращает число от 0 до 4(0 - не владеет перком совсем, 1-3 - начально/развито/искусно, 4 - совершенно(вроде как только для расовых перков, типа "Совершенный контрудар". Напомню, что совершенные уровни расовых перков получаются только благодаря артефакту "Кулон Мастерства")), и в соответствии с уровнем мастерства применять GiveHeroBattleBonus(heroName, HERO_BATTLE_BONUS_MORALE, -нужное число)
p.s. функция баттл-бонусов работает только в версии 3.1)