s.indexOf выполняется только если s уже равен null. Кроме того, код дублируется: в двух ветках выполняется одно и то же.
for (var h = 1; h >= 1; --h) {
errCode = iimPlay("CODE:TAG POS=1 TYPE=TABLE ATTR=TXT:*Владыка* EXTRACT=TXT");
var s = iimGetLastExtract();
if (s != null) {
// s не пустой
errCode = iimPlay("CODE:URL GOTO=http://mgero.mobi/game/battle/mercenary/new?type=gold");
errCode = iimPlay("CODE:TAG POS=1 TYPE=A ATTR=TXT:Сражаться");
errCode = iimPlay("CODE:WAIT SECONDS=3");
} else if (s.indexOf('Владыка')!=-1) {
// s пустой. зачем-то ищем в нем подстроку
errCode = iimPlay("влад.js");
} else {
// каждое присвоение затирает errCode
errCode = iimPlay("CODE:URL GOTO=http://mgero.mobi/game/battle/mercenary/new?type=gold");
errCode = iimPlay("CODE:TAG POS=1 TYPE=A ATTR=TXT:Сражаться");
errCode = iimPlay("CODE:WAIT SECONDS=3");
}
}