Ошибка Wrong type of argument 1, when calling function GetHeroName() связана с тем, что когда нет защищающегося героя (битва с нейтралами), то GetDefenderHero возвращает nil, а GetHeroName первым параметром обязана принимать имя героя. И когда в неё прилетает nil, она выдает ошибку. В связи с этим нужна проверка на отличие переменной от nil (код выше)