void Hurt(object oPC, int level, int max, int cnt, int amt) { if (cnt == 0) AssignCommand(oPC, SpeakString("Testing regen Level: " + IntToString(level-1), TALKVOLUME_WHISPER)); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(amt, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_NORMAL), oPC, 0.2f); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE,FALSE), oPC, 0.0f); if (GetIsDead(oPC) == TRUE) { // AssignCommand(oPC, SpeakString("dead!")); SpeakString(GetName(oPC) + " died at level " + IntToString(level-1) + " hit " + IntToString(cnt+1)); } else { ++cnt; if (cnt < level) { DelayCommand(6.0 / level, Hurt(oPC, level, max, cnt, amt)); } else { ++level; cnt = 0; if (level < max) { DelayCommand(6.0 / level, Hurt(oPC, level, max, cnt, amt)); } else { SpeakString(GetName(oPC) + " passed."); } } } } void main() { object oPC = GetLastUsedBy(); int level = StringToInt(GetTag(OBJECT_SELF)); int amt = GetMaxHitPoints(oPC)-1; if (amt > 10000) amt = 10000; Hurt(oPC, level+1, level + 4, 0, amt); }