- igor doesn't give boxes if you choose to explore a bit, but he takes the contract anyway [quest-breaking] *Fixed. Moved some dialog around so you couldn't skip out on taking the quest after you gave up the letter. - key 'Pilgrims Cave Key' it_pilgrimscavek to plot-locked door isn't provided anywhere [quest-breaking] *Not a bug. Key drops from the Elder Goblin Shaman in Pilgrim's Cave Full compile. Updated release archive. - can't get farmer bouillon's quest if already offered to buy an ox [quest-breaking] *Couldn't replicate. Nothing in the dialog is locked regarding this. - jerusalem watch captain doesn't recognise letter to ogre mage [quest-breaking] *Fixed. Quest item tag was mispelled. - plot key 'amulet of thievery' [amuletofthievery] to plot-locked door never given anywhere *Not fixed. This may be for an incomplete area or quest. No NPC named "Fremmy South" exists in the module, nor is the name mentioned in dialogs. - key 'Lomendel's Front Door Key' [it_LomFrontKey] to plot-locked door never given anywhere. *Not fixed. This appears to be a DM or system area. No NPC named Lomendel exists & the only mention of them in the dialogs is by the Efreeti merchant in the area. - key it_RachelsRoomKey [rachelskey] to plot-locked door never given anywhere *Not fixed. This may be for an incomplete area or quest. No NPC named "Rachel" exists in the module, nor is the name mentioned in dialogs. There is nothing of note in the room. - east tower key given but no doors on any east towers anywhere *Not fixed. There is no "East Tower Key" in the item palette at all. Balkan East Tower doesn't require a key. - transitions within areas don't jump henchmen with pc *Fixed. Changed the triggers to use scripted transitions that bring all associates with the PC. - rd to bethlehem - broken trans [gate to nowhere] *Not fixed. Not an actual transition, There is no "Convent" in the area list. Gate description now tells you it's barred. - faction bugs with guards at pilgrims' rest *Maybe fixed. I added a "faction zoo" and set the merchant faction to neutral to all of the other factions. - faction bugs with watchmen in jerusalem *See above - dwarf captives in svirfneblin lair - invalid exit waypoint *Fixed. Added missing waypoint. - elvish grove quest journal doesn't close *Couldn't replicate. Journal entry cleared normally upon completion of the quest. - dwarven mine quest journal doesn't close *Fixed. Final journal entry wasn't set to close the quest. - idun's apple quest journal doesn't close *Fixed. Final journal entry wasn't set to close the quest. - implementation of climbing rope, while well-intentioned, doesn't work correctly *Couldn't replicate. Worked fine for me. https://i.imgur.com/45UC3xS.jpeg - doors close automatically without anyone to close them *Not a bug, desired behaivior. - henchmen don't level up *Fixed - when henchmen are dismissed, they don't just go back to where they were; they're destroyed and respawned *Fixed
227 lines
5.3 KiB
Plaintext
227 lines
5.3 KiB
Plaintext
|
|
#include "nw_i0_plot"
|
|
|
|
|
|
//PrC Consortium stuff
|
|
//#include "prc_inc_function"
|
|
|
|
|
|
//function to destroy PC inventory items randomly (default 1% chance per item)
|
|
//currently disabled
|
|
|
|
void DestroyItems(object oPC)
|
|
{
|
|
|
|
object oItem;
|
|
|
|
oItem = GetFirstItemInInventory(oPC);
|
|
while (GetIsObjectValid(oItem))
|
|
{
|
|
|
|
if (GetPlotFlag(oItem))
|
|
{
|
|
//do nothing, it's a Plot item
|
|
}
|
|
|
|
//1% chance of item being destroyed
|
|
else if (d100() == 1)
|
|
{
|
|
DestroyObject(oItem);
|
|
}
|
|
|
|
oItem = GetNextItemInInventory(oPC);
|
|
}
|
|
}
|
|
//end of random item destroy
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------
|
|
// 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()
|
|
{
|
|
|
|
object oPC = GetEnteringObject();
|
|
|
|
AddJournalQuestEntry("JRNL_XPCHART", 1, oPC, FALSE, FALSE, FALSE);
|
|
AddJournalQuestEntry("JRNL_LA_BUYOFF", 1, oPC, FALSE, FALSE, FALSE);
|
|
|
|
// Death Amulet Activities
|
|
if(HasItem(oPC, "Death"))
|
|
{
|
|
|
|
object oItemToTake;
|
|
oItemToTake = GetItemPossessedBy(oPC, "Death");
|
|
if(GetIsObjectValid(oItemToTake) != 0)
|
|
DestroyObject(oItemToTake);
|
|
|
|
ApplyPenalty(oPC);
|
|
|
|
//jump PC to Death plane
|
|
object oTarget;
|
|
location lTarget;
|
|
oTarget = GetWaypointByTag("WP_TUAT");
|
|
lTarget = GetLocation(oTarget);
|
|
|
|
AssignCommand(oPC, ClearAllActions());
|
|
|
|
AssignCommand(oPC, ActionJumpToLocation(lTarget));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Illegal items removal - no perma-haste, immunity, or regeneration items
|
|
|
|
// Boots of Speed
|
|
object oBoots;
|
|
oBoots = GetItemPossessedBy(oPC, "NW_IT_MBOOTS005");
|
|
if(GetIsObjectValid(oBoots) != 0)
|
|
DestroyObject(oBoots);
|
|
|
|
|
|
// Lesser Ring of Power
|
|
object oRing;
|
|
oRing = GetItemPossessedBy(oPC, "NW_IT_MRING029");
|
|
if(GetIsObjectValid(oRing) != 0)
|
|
DestroyObject(oRing);
|
|
|
|
|
|
// Ring of Regeneration
|
|
object oRing2;
|
|
oRing2 = GetItemPossessedBy(oPC, "NW_IT_MRING004");
|
|
if(GetIsObjectValid(oRing2) != 0)
|
|
DestroyObject(oRing2);
|
|
|
|
|
|
// Belt of Guiding Light
|
|
object oGuidingLight;
|
|
oGuidingLight = GetItemPossessedBy(oPC, "nw_it_mbelt016");
|
|
if(GetIsObjectValid(oGuidingLight) != 0)
|
|
DestroyObject(oGuidingLight);
|
|
|
|
|
|
// Graceblood Bow
|
|
object oGraceblood;
|
|
oGraceblood = GetItemPossessedBy(oPC, "NW_WBWMXH006");
|
|
if(GetIsObjectValid(oGraceblood) != 0)
|
|
DestroyObject(oGraceblood);
|
|
|
|
|
|
// Holy Grail
|
|
object oGrail;
|
|
oGrail = GetItemPossessedBy(oPC, "it_HolyGrail");
|
|
if(GetIsObjectValid(oGrail) != 0)
|
|
DestroyObject(oGrail);
|
|
|
|
|
|
// Original Spellhelper
|
|
object oSpellhelper;
|
|
oSpellhelper = GetItemPossessedBy(oPC, "it_spellhelper");
|
|
if(GetIsObjectValid(oSpellhelper) != 0)
|
|
DestroyObject(oSpellhelper);
|
|
|
|
|
|
// Risktaker
|
|
object oRisktaker;
|
|
oRisktaker = GetItemPossessedBy(oPC, "X2_WSWMDG006");
|
|
if(GetIsObjectValid(oRisktaker) != 0)
|
|
DestroyObject(oRisktaker);
|
|
|
|
|
|
// High Forest
|
|
object oHighForest;
|
|
oHighForest = GetItemPossessedBy(oPC, "NW_WBWMXL004");
|
|
if(GetIsObjectValid(oHighForest) != 0)
|
|
DestroyObject(oHighForest);
|
|
|
|
//destroys items from inventory randomly (simulates wear & tear)
|
|
//DestroyItems(oPC);
|
|
|
|
//Disallow various buggy or unbalanced PrCs
|
|
|
|
/* if (GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oPC) == 0)
|
|
{
|
|
SetLocalInt(oPC,"X1_AllowShadow",1);
|
|
} */
|
|
|
|
/*
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_PNP_SHIFTER, oPC) == 0)
|
|
{
|
|
SetLocalInt(oPC,"X2_AllowPNPSfr",1);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oPC) == 0)
|
|
{
|
|
SetLocalInt(oPC,"X2_AllowDivcha",1);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_LICH, oPC) == 0)
|
|
{
|
|
SetLocalInt(oPC,"PNP_AllowLich",1);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_VASSAL, oPC) == 0)
|
|
{
|
|
SetLocalInt(oPC,"X1_AllowVassal",1);
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
}
|