#include "NW_i0_plot" int XPForLevel(int level) { if (level > 0) return ((level * (level - 1)) / 2) * 1000; else return 0; } void main() { object oPlayer = GetLastRespawnButtonPresser(); if (!GetIsObjectValid(oPlayer)) return; effect eRes = EffectResurrection(); ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oPlayer); effect eHeal = EffectHeal(GetMaxHitPoints(oPlayer)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer); RemoveEffects(oPlayer); SetLocalInt(oPlayer, "BLEED_STATUS", 0); // Penalty: lose 1 level (but don't fall below 1st level/0 xp) int iCurrentXP = GetXP(oPlayer); int iExtraXP = iCurrentXP - XPForLevel(GetHitDice(oPlayer)); int iNewXP = XPForLevel(GetHitDice(oPlayer) - 1) + iExtraXP; if (iNewXP < 0) iNewXP = 0; SetXP(oPlayer, iNewXP); AssignCommand(oPlayer, ClearAllActions()); AssignCommand(oPlayer, ActionJumpToLocation(GetStartingLocation())); }