Author Sticky: Post Working Scripts Here
Grus Posted: Friday, 28 June 11:19PM
NWScript:
void ApplyPercentPenalty(object oDead,

                         float flPenaltyXP,

                         float flPenaltyGold)

{

  // Written by Grus Kel'fer - grus1968@yahoo.com

  // I used the ApplyPenalty script in the handbook,

  // P. 30 as a template.

  // This function is called to subract a percentage of

  // the PC's experience and gold.

  // Usage Example (called from OnRespawn script):

  // ApplyPercentPenalty(oDead, .10, .30);

  // This call would subract 10% of the PC's XP, and

  // 30% of the PC's gold.

  // Error check penalty arguments to make sure they

  // are between 0 and 1.0 inclusive.

  flPenaltyXP = flPenaltyXP < 0.0 ? 0.0 : flPenaltyXP;

  flPenaltyXP = flPenaltyXP > 1.0 ? 1.0 : flPenaltyXP;

  flPenaltyGold = 

            flPenaltyGold < 0.0 ? 0.0 : flPenaltyGold;

  flPenaltyGold = 

            flPenaltyGold > 1.0 ? 1.0 : flPenaltyGold;

  

  // Get current PC experience and level

  int nCurrentXP = GetXP(oDead);

  int nCharacterLevel = GetHitDice(oDead);

  // Compute new experience points based on penalty

  int nLostXP = FloatToInt(flPenaltyXP*nCurrentXP);

  int nNewXP = nCurrentXP - nLostXP;

  // Make sure new PC experience points do not cause a 

  // level loss

  int nLowerBoundXP = ((nCharacterLevel *

                       (nCharacterLevel-1)) /

                        2 * 1000);

  nNewXP = 

        nNewXP < nLowerBoundXP ? nLowerBoundXP : nNewXP;

  // Set new XP, and take gold based on penalty

  SetXP(oDead, nNewXP);

  AssignCommand(oDead,

                TakeGoldFromCreature(FloatToInt(

                    flPenaltyGold * GetGold(oDead)),

                    oDead, TRUE));

}