124 lines
3.1 KiB
Plaintext
124 lines
3.1 KiB
Plaintext
|
|
#include "nw_i0_plot"
|
|
|
|
|
|
// -----------------------------------------------
|
|
// This code goes in the Module OnClientEnter script.
|
|
// When a PC joins the game this code looks for the item "death".
|
|
//
|
|
// If the item is not found no penalty is applied.
|
|
// If the item is found, a Gold and XP penalty is applied.
|
|
|
|
|
|
|
|
//Penalty applied for having a Death Amulet
|
|
|
|
void ApplyPenalty(object oDead)
|
|
{
|
|
|
|
int nXP = GetXP(oDead);
|
|
|
|
// The XP penalty is currently set to the PC's level x 100 - it is
|
|
// a harsh penalty, but they were trying to cheat so... :)
|
|
//
|
|
// If you wish to reduce the amount taken, reduce the 100 in the line below.
|
|
// Note that this script will never cause a PC to lose a level.
|
|
|
|
int nPenalty = 100 * GetHitDice(oDead);
|
|
int nHD = GetHitDice(oDead);
|
|
// * You can not lose a level with this respawning
|
|
int nMin = ((nHD * (nHD - 1)) / 2) * 1000;
|
|
|
|
int nNewXP = nXP - nPenalty;
|
|
if (nNewXP < nMin)
|
|
nNewXP = nMin;
|
|
SetXP(oDead, nNewXP);
|
|
|
|
// The gold penalty is currently set to 20% of their gold - it is
|
|
// a very harsh penalty, but they were trying to cheat so... :)
|
|
//
|
|
// If you wish to reduce the amount taken, reduce the .20 in the line below.
|
|
// Note that this script will never take more then 10,000 gold.
|
|
|
|
int nGoldToTake = FloatToInt(0.20 * GetGold(oDead));
|
|
// * a cap of 10 000gp taken from you
|
|
if (nGoldToTake > 20000)
|
|
{
|
|
nGoldToTake = 20000;
|
|
}
|
|
AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
|
|
DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
|
|
DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Main Module OnClientEnter Script
|
|
|
|
void main()
|
|
{
|
|
|
|
|
|
|
|
// Death Amulet Activities
|
|
|
|
object oPC = GetEnteringObject();
|
|
if(HasItem(oPC, "Death"))
|
|
{
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC);
|
|
RemoveEffects(oPC);
|
|
|
|
|
|
object oItemToTake;
|
|
oItemToTake = GetItemPossessedBy(oPC, "Death");
|
|
if(GetIsObjectValid(oItemToTake) != 0)
|
|
DestroyObject(oItemToTake);
|
|
|
|
ApplyPenalty(oPC);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//Temporary Boots of Speed remover
|
|
|
|
|
|
object oBoots;
|
|
oBoots = GetItemPossessedBy(oPC, "NW_IT_MBOOTS005");
|
|
|
|
if (GetIsObjectValid(oBoots)) DestroyObject(oBoots);
|
|
|
|
|
|
|
|
|
|
//MW's Factionalising script
|
|
|
|
/* string sGod;
|
|
object oChurch,
|
|
oGnostic,
|
|
oHumanoid,
|
|
oSaracen;
|
|
sGod = GetStringLowerCase(GetDeity(oPC));
|
|
if (GetRacialType(oPC) != RACIAL_TYPE_HUMAN)
|
|
return;
|
|
if (GetAlignmentLawChaos(oPC) != ALIGNMENT_LAWFUL)
|
|
return;
|
|
if ((sGod != "jehova") && (sGod != "jehovah") && (sGod != "mary") && (sGod != "jesus"))
|
|
return;
|
|
oChurch = GetObjectByTag("ct_InquisitionArchbishop");
|
|
oGnostic = GetObjectByTag("ct_GnosticBishop");
|
|
oHumanoid = GetObjectByTag("ct_ELFRANGER015");
|
|
oSaracen = GetObjectByTag("ct_SaracenEmir");
|
|
AdjustReputation(oPC, oChurch, 100);
|
|
AdjustReputation(oPC, oGnostic, -100);
|
|
AdjustReputation(oPC, oHumanoid, -100);
|
|
AdjustReputation(oPC, oSaracen, -100);
|
|
|
|
*/
|
|
|
|
}
|