Fixed missing Factions on Animated Statues. Added XP to next level for lvl 40+ characters. Added Dragon AI for CODI Core AI. Tweaked Beholders & some Dragons to use CODI Core AI. Fixed CODI Core NPC onSPawn script to run PRC scripts properly. Full compile. Updated release archive.
373 lines
12 KiB
Plaintext
373 lines
12 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;
|
|
case 41: nXP = 780000; break;
|
|
case 42: nXP = 820000; break;
|
|
case 43: nXP = 861000; break;
|
|
case 44: nXP = 903000; break;
|
|
case 45: nXP = 946000; break;
|
|
case 46: nXP = 990000; break;
|
|
case 47: nXP = 1035000; break;
|
|
case 48: nXP = 1081000; break;
|
|
case 49: nXP = 1128000; break;
|
|
case 50: nXP = 1176000; break;
|
|
case 51: nXP = 1225000; break;
|
|
case 52: nXP = 1275000; break;
|
|
case 53: nXP = 1326000; break;
|
|
case 54: nXP = 1378000; break;
|
|
case 55: nXP = 1431000; break;
|
|
case 56: nXP = 1485000; break;
|
|
case 57: nXP = 1540000; break;
|
|
case 58: nXP = 1596000; break;
|
|
case 59: nXP = 1653000; break;
|
|
case 60: nXP = 1711000; 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 = 820000; break;
|
|
case 41: nXP = 861000; break;
|
|
case 42: nXP = 903000; break;
|
|
case 43: nXP = 946000; break;
|
|
case 44: nXP = 990000; break;
|
|
case 45: nXP = 1035000; break;
|
|
case 46: nXP = 1081000; break;
|
|
case 47: nXP = 1128000; break;
|
|
case 48: nXP = 1176000; break;
|
|
case 49: nXP = 1225000; break;
|
|
case 50: nXP = 1275000; break;
|
|
case 51: nXP = 1326000; break;
|
|
case 52: nXP = 1378000; break;
|
|
case 53: nXP = 1431000; break;
|
|
case 54: nXP = 1485000; break;
|
|
case 55: nXP = 1540000; break;
|
|
case 56: nXP = 1596000; break;
|
|
case 57: nXP = 1653000; break;
|
|
case 58: nXP = 1711000; break;
|
|
case 59: nXP = 1770000; break;
|
|
case 60: nXP = 1830000; 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;
|
|
case 41: nXP = 820000; break;
|
|
case 42: nXP = 861000; break;
|
|
case 43: nXP = 903000; break;
|
|
case 44: nXP = 946000; break;
|
|
case 45: nXP = 990000; break;
|
|
case 46: nXP = 1035000; break;
|
|
case 47: nXP = 1081000; break;
|
|
case 48: nXP = 1128000; break;
|
|
case 49: nXP = 1176000; break;
|
|
case 50: nXP = 1225000; break;
|
|
case 51: nXP = 1275000; break;
|
|
case 52: nXP = 1326000; break;
|
|
case 53: nXP = 1378000; break;
|
|
case 54: nXP = 1431000; break;
|
|
case 55: nXP = 1485000; break;
|
|
case 56: nXP = 1540000; break;
|
|
case 57: nXP = 1596000; break;
|
|
case 58: nXP = 1653000; break;
|
|
case 59: nXP = 1711000; break;
|
|
case 60: nXP = 1770000; 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.
|
|
}
|
|
} |