PoA_PRC8/_module/nss/setxp_inc.nss
Jaysyn904 8d97886c3f Changed folder name.
Changed folder name.
2022-10-07 21:08:37 -04:00

313 lines
9.3 KiB
Plaintext

//Created By Guile 5/5/08
//IMPORTANT////////////////////////////////////////////////////////////////////
//This is an include not an actual script (It has prototype functions in it!)
//Function which you can use in any script!! Just.....
//Be sure you place #include "setxp_inc" at the top of
//any script you wish to utilize any function within this script.
///////////////////////////////////////////////////////////////////////////////
//This is the ULTIMATE XP Include Script, it can do just about any function
//you want it to do, and all you have to do is type in the function below
//you want to use in your script and put #include "setxp_inc"
//at the very top of the script your creating.
/* Example Script -
#include "setxp_inc"
void main()
{
object oPC = GetPCSpeaker();
Relevel(oPC);
}
Yes, it's that simple and awesome!
*/
///////////////////////////////////////////////////////////////////////////////
//There are function below in green which are example of how you would
//utilize each function.
//I used oTarget instead of oPC, but you can use Take1Level(oPC); if you wish,
//as you must define what oTarget is in your script, though oTarget can be
//anything like oSpeaker, oPC, oNPC, oWhatever. =)
//NOTE: I have tested releveling Palemaster & Red Dragon Disciples with this
//script and they did not retain thier AC or Ability Bonuses from the class.
//you should double check this yourself to verify it.
///////////////////////////////////////////////////////////////////////////////
//This function Take1Level(oTarget); will take 1 level from the Target.
//It set's thier xp to the base required XP for the next lowest level.
void Take1Level(object oTarget)
{
int cLvl = GetHitDice(oTarget);
int nXP;
switch (cLvl)
{
case 1: nXP = 0; break;
case 2: nXP = 0; break;
case 3: nXP = 1000; break;
case 4: nXP = 3000; break;
case 5: nXP = 6000; break;
case 6: nXP = 10000; break;
case 7: nXP = 15000; break;
case 8: nXP = 21000; break;
case 9: nXP = 28000; break;
case 10: nXP = 36000; break;
case 11: nXP = 45000; break;
case 12: nXP = 55000; break;
case 13: nXP = 66000; break;
case 14: nXP = 78000; break;
case 15: nXP = 91000; break;
case 16: nXP = 105000; break;
case 17: nXP = 120000; break;
case 18: nXP = 136000; break;
case 19: nXP = 153000; break;
case 20: nXP = 171000; break;
case 21: nXP = 190000; break;
case 22: nXP = 210000; break;
case 23: nXP = 231000; break;
case 24: nXP = 263000; break;
case 25: nXP = 276000; break;
case 26: nXP = 300000; break;
case 27: nXP = 325000; break;
case 28: nXP = 351000; break;
case 29: nXP = 378000; break;
case 30: nXP = 406000; break;
case 31: nXP = 435000; break;
case 32: nXP = 465000; break;
case 33: nXP = 496000; break;
case 34: nXP = 528000; break;
case 35: nXP = 561000; break;
case 36: nXP = 595000; break;
case 37: nXP = 630000; break;
case 38: nXP = 666000; break;
case 39: nXP = 703000; break;
case 40: nXP = 741000; break;
}
SetXP(oTarget, nXP);
}
//The Function Below Give1Level(oTarget); gives the Target one level.
//IMPORTANT: This function cannot be used with Take1Level(oTarget);
//or it will delevel the target!!!!
//I created this exlusively for the purose of my DM wand
//and other scripts which only give the PC one level as a reward.
void Give1Level(object oTarget)
{
int cLvl = GetHitDice(oTarget);
int nXP;
switch (cLvl)
{
case 1: nXP = 1000; break;
case 2: nXP = 3000; break;
case 3: nXP = 6000; break;
case 4: nXP = 10000; break;
case 5: nXP = 15000; break;
case 6: nXP = 21000; break;
case 7: nXP = 28000; break;
case 8: nXP = 36000; break;
case 9: nXP = 45000; break;
case 10: nXP = 55000; break;
case 11: nXP = 66000; break;
case 12: nXP = 78000; break;
case 13: nXP = 91000; break;
case 14: nXP = 105000; break;
case 15: nXP = 120000; break;
case 16: nXP = 136000; break;
case 17: nXP = 153000; break;
case 18: nXP = 171000; break;
case 19: nXP = 190000; break;
case 20: nXP = 210000; break;
case 21: nXP = 231000; break;
case 22: nXP = 263000; break;
case 23: nXP = 276000; break;
case 24: nXP = 300000; break;
case 25: nXP = 325000; break;
case 26: nXP = 351000; break;
case 27: nXP = 378000; break;
case 28: nXP = 406000; break;
case 29: nXP = 435000; break;
case 30: nXP = 465000; break;
case 31: nXP = 496000; break;
case 32: nXP = 528000; break;
case 33: nXP = 561000; break;
case 34: nXP = 595000; break;
case 35: nXP = 630000; break;
case 36: nXP = 666000; break;
case 37: nXP = 703000; break;
case 38: nXP = 741000; break;
case 39: nXP = 780000; break;
case 40: nXP = GetHitDice(oTarget) + 40000; break;
}
SetXP(oTarget, nXP);
}
//This function below Relevel(oTarget), will relevel a Creature minus
//50 Gold & XP / Level (They must have the cost of gold or nothing happens!
//This function can go in almost any script!(Define oTarget in that script!)
//Can go in OnClick / OnUsed / OnEnter (whichever event you wish to use it in)
//Example: Relevel(oPC); (That's all you need to relevel the PC!)
void Relevel(object oTarget)
{
int nLvl = GetHitDice(oTarget);
int nGold = nLvl * 50;
int nCCXP;
nCCXP = GetXP(oTarget);
SetLocalInt(oTarget, "pc_exact_xp", nCCXP);
int gXP = GetLocalInt(oTarget, "pc_exact_xp");
if(GetGold(oTarget)>nGold)
{
TakeGoldFromCreature(nGold, oTarget, TRUE);
SetXP(oTarget, 0);
DelayCommand(1.0, GiveXPToCreature(oTarget, gXP));
}
else
{
SendMessageToPC(oTarget, "You do not have enough gold to relevel!");
}
}
//The Function Relevel1(oTarget) will take 1 level from the Target and give
//back thier orginal XP. This script does not cause xp loss whatsoever.
void Relevel1(object oTarget)
{
int nCCXP;
nCCXP = GetXP(oTarget);
SetLocalInt(oTarget, "pc_exact_xp", nCCXP);
int gXP = GetLocalInt(oTarget, "pc_exact_xp");
Take1Level(oTarget);
DelayCommand(1.0, SetXP(oTarget, gXP));
}
//The Function Relevel3(oTarget) will take 3 levels from the Target and give
//back thier orginal XP. This script does not cause xp loss whatsoever.
void Relevel5(object oTarget)
{
int nCCXP;
nCCXP = GetXP(oTarget);
SetLocalInt(oTarget, "pc_exact_xp", nCCXP);
int gXP = GetLocalInt(oTarget, "pc_exact_xp");
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
DelayCommand(1.0, SetXP(oTarget, gXP));
}
//The Function Relevel5(oTarget) will take 5 levels from the Target and give
//back thier orginal XP. This script does not cause xp loss whatsoever.
void Relevel10(object oTarget)
{
int nGold = GetHitDice(oTarget) * 50;
if(GetGold(oTarget) >= nGold)
{
int nCCXP;
nCCXP = GetXP(oTarget);
SetLocalInt(oTarget, "pc_exact_xp", nCCXP);
int gXP = GetLocalInt(oTarget, "pc_exact_xp");
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
Take1Level(oTarget);
DelayCommand(1.0, SetXP(oTarget, gXP));
}
}
//This function penalizes a the person repsawning it goes in the (see below)
//Example of Function: ApplyRespawnPenalty(oPC); (onplayerrespawn) event.
//They cannot lose a level with this function.
//They lose 20% of the excessive XP over the XP required for thier current level.
//They lose 10% of thier gold.
//Note This is a good script if your using Legendary Levels :)
void ApplyRespawnPenalty(object oPlayer)
{
int cLvl = GetHitDice(oPlayer);
int nXP;
//We need this switch to determine what xp they must keep..
switch (cLvl)
{
case 1: nXP = 0; break;
case 2: nXP = 1000; break;
case 3: nXP = 3000; break;
case 4: nXP = 6000; break;
case 5: nXP = 10000; break;
case 6: nXP = 15000; break;
case 7: nXP = 21000; break;
case 8: nXP = 28000; break;
case 9: nXP = 36000; break;
case 10: nXP = 45000; break;
case 11: nXP = 55000; break;
case 12: nXP = 66000; break;
case 13: nXP = 78000; break;
case 14: nXP = 91000; break;
case 15: nXP = 105000; break;
case 16: nXP = 120000; break;
case 17: nXP = 136000; break;
case 18: nXP = 153000; break;
case 19: nXP = 171000; break;
case 20: nXP = 190000; break;
case 21: nXP = 210000; break;
case 22: nXP = 231000; break;
case 23: nXP = 263000; break;
case 24: nXP = 276000; break;
case 25: nXP = 300000; break;
case 26: nXP = 325000; break;
case 27: nXP = 351000; break;
case 28: nXP = 378000; break;
case 29: nXP = 406000; break;
case 30: nXP = 435000; break;
case 31: nXP = 465000; break;
case 32: nXP = 496000; break;
case 33: nXP = 528000; break;
case 34: nXP = 561000; break;
case 35: nXP = 595000; break;
case 36: nXP = 630000; break;
case 37: nXP = 666000; break;
case 38: nXP = 703000; break;
case 39: nXP = 741000; break;
case 40: nXP = 780000; break;
}
int aXP = GetXP(oPlayer);
int bXP = aXP - nXP; //Subtract thier minimum XP needed for the level
int dXP = bXP + 100; //Give 100 XP to Prevent the divide by 0 error
int mXP = dXP / 100; //Break thier xp up into a percentile
int oXP = mXP * 80; //Returns thier 80% of their XP (-20%)
int pXP = oXP - 100; //This subtracts the 100 given earlier
int zXP = pXP + nXP; //The 20% Loss + Min XP For Their Current Level.
int nGold = GetGold(oPlayer);
int oGold = nGold / 100;
int pGold = oGold * 10; //(calculate 10%)
if(pXP >0)//Saftey in case they didn't have enough XP over level required
{
SetXP(oPlayer, zXP);
TakeGoldFromCreature(pGold, oPlayer, TRUE); //Take 10% of their gold.
}
else
{
SetXP(oPlayer, nXP); //Set them to the minimum required for level.
TakeGoldFromCreature(pGold, oPlayer, TRUE); //Take 10% of their gold.
}
}