Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
418 lines
16 KiB
Plaintext
418 lines
16 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
If this is the first time the client is entering this area - he's coming
|
|
from Cutscene 1 - so spawn in the assassin in the First room.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Keith Warner
|
|
//:: Created On: Oct 30/02
|
|
//:://////////////////////////////////////////////
|
|
// Updated July 2/03 - Several changes to script to accomodate low level
|
|
// characters. Further comments in body of this script.
|
|
//UPDATED JAN 6/03 - Changed to - On entry of hero PC - strip of all equipment.
|
|
// Place equipment in the chest at the foot of the PCs bed. Create key for
|
|
// chest on the PC and initiate dialog with prologue object
|
|
|
|
//UPDATED June 20/03 While removing all the item, total the value of their equipment.
|
|
//If they have less than 15000 gp in items, spawn a longsword +3
|
|
//(or quarterstaff +3 if wizard, monk, druid) and a ring of protection +3.
|
|
|
|
//UPDATE AUGUST 11/03 - Now the plan is to have the drow 'thief' steal the chest with
|
|
//the PCs stuff (which may turn up later on)..So store all the stuff in a box in the
|
|
//Random Treasure area.. Spawn in the assassin when the area is first entered..
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_ecl"
|
|
|
|
//::///////////////////////////////////////////////
|
|
//:: ExcludeItem
|
|
//:: Copyright (c) 2003 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
A function just to return true if this
|
|
item should not be allowed when the player first enters
|
|
the game.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Brent
|
|
//:: Created On: June 2003
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
|
int ExcludeItem(object oGear)
|
|
{
|
|
string sTag = GetTag(oGear);
|
|
// * don't filter Tynan out. Is an easter egg in c2
|
|
if (sTag == "PortableDoor" || sTag == "x0_spellstaff" || sTag == "x0_powerstone"
|
|
||sTag == "golemmakerkey" || sTag == "Library_Pen" || sTag == "Library_Inkwell"
|
|
|| sTag=="q1monkitem" || sTag == "q1sorcereritem" || sTag == "q1rangeritem"
|
|
|| sTag == "q1clericitem" || sTag == "q1rogueitem" || sTag == "q1barbitem"
|
|
|| sTag == "q1paladinitem" || sTag == "q1barditem" || sTag == "q1mageitem"
|
|
|| sTag == "q1fighteritem" || sTag == "q1druiditem"
|
|
|| sTag == "q1footstagtrophy" || sTag == "TempleRites" || sTag == "x1dragontooth"
|
|
|| sTag == "x1mask" || sTag == "xp1_pcjournal" || sTag == "ShadowGem"
|
|
|| sTag == "NW_MSMLMISC23" || sTag == "NW_MSMLMISC10" || sTag == "NW_MSMLMISC19"
|
|
|| sTag == "NW_MSMISC17" || sTag == "Q2_KEY_PUZZLE_ROOM" || sTag == "q3_promissary"
|
|
|| sTag == "Q2_PROTECTIVE_HELMET"
|
|
)
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
|
|
}
|
|
void DeMagnitizePC(object oPC)
|
|
{
|
|
effect eEffect = GetFirstEffect(oPC);
|
|
while (GetIsEffectValid(eEffect) == TRUE)
|
|
{
|
|
RemoveEffect(oPC, eEffect);
|
|
eEffect = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
void main()
|
|
{
|
|
|
|
//Level character up to 15, if character is below level 15
|
|
object oPC = GetEnteringObject();
|
|
if (GetIsPC(oPC) == FALSE)
|
|
return;
|
|
|
|
|
|
// * Oct 1
|
|
// * Brent
|
|
// *
|
|
// * If started with a low level character, saved, then
|
|
// * reloaded, restart the "level me up" dialog
|
|
// *
|
|
// * LOGIC: If in the start "second floor room"
|
|
// * and still I am not level 15, then try starting the conversation again
|
|
string sArea = GetTag(GetArea(oPC));
|
|
int nHitDie = GetECL(oPC);
|
|
// SendMessageToPC(oPC, sArea);
|
|
// SendMessageToPC(oPC, IntToString(nHitDie));
|
|
if (sArea == "q2a_yprooms" && nHitDie <12)
|
|
{
|
|
//variable for rest message for the room door
|
|
SetLocalInt(oPC, "X2_Q2ARestMessage", 1);
|
|
|
|
AssignCommand(oPC, ClearAllActions());
|
|
DelayCommand(2.0, AssignCommand(oPC, ActionStartConversation(OBJECT_SELF, "bk_levelup", FALSE, FALSE)));
|
|
return;
|
|
}
|
|
|
|
|
|
// *************************
|
|
// * If less than level 12
|
|
// * then entering this area
|
|
// * as a newbie. Should not
|
|
// * get the assassin until the
|
|
// * next day
|
|
// * BRENT
|
|
// *************************
|
|
|
|
/* BRENT MODIFICATION
|
|
|
|
For low level characters this conversation will not play the first time
|
|
|
|
*/
|
|
if (GetECL(oPC) < 12)
|
|
{
|
|
return; // * This will be ran when they return from the other cutscene
|
|
}
|
|
|
|
//Check to make sure enterer is a PC and assassin has never spawned (and that the PC has been to the cutscene and hasn't just saved and loaded in the rooms)
|
|
if (GetIsPC(oPC) && (GetLocalInt(GetModule(), "nAssassin") != 1 || GetLocalInt(GetModule(), "INIT_IMMOBILIZE_REMOVED") == 0)
|
|
&& GetLocalInt(oPC, "X2_Q2ASpawnTheAssassin") == 1)
|
|
{
|
|
if(GetLocalInt(GetModule(), "INIT_IMMOBILIZE_REMOVED") == 0 && GetLocalInt(GetModule(), "nAssassin") == 1)
|
|
{
|
|
object oDialog = GetObjectByTag("q2aprologue");
|
|
DelayCommand(1.5, AssignCommand(oDialog, ActionStartConversation(oPC, "pre_awake1")));
|
|
return;
|
|
|
|
}
|
|
//variable for rest message for the room door
|
|
SetLocalInt(oPC, "X2_Q2ARestMessage", 0);
|
|
|
|
BlackScreen(oPC);
|
|
DeMagnitizePC(oPC);
|
|
// * September 2003: Disable relic of reaper from working
|
|
// * until this variable is turned off (after the rogue is dead)
|
|
SetLocalInt(GetModule(), "x2_g_disabled", 10);
|
|
|
|
AddJournalQuestEntry("portalstone", 20, oPC, FALSE);
|
|
|
|
object oContainer = GetObjectByTag("x2_chapter1pcequip"); //NEW CONTAINER -
|
|
// This container is in the final area of Chapter 1!
|
|
|
|
// * pick up any equipment lying on the ground
|
|
// * Thanks Mr. Cheater!
|
|
object oArea = OBJECT_INVALID;
|
|
object oItem = GetFirstObjectInArea(oArea);
|
|
while (GetIsObjectValid(oItem) == TRUE)
|
|
{
|
|
if (GetObjectType(oItem) == OBJECT_TYPE_ITEM)
|
|
{
|
|
CopyItem(oItem, oContainer);
|
|
SetPlotFlag(oItem, FALSE);
|
|
DestroyObject(oItem, 0.1);
|
|
}
|
|
oItem = GetNextObjectInArea(oArea);
|
|
}
|
|
|
|
//if this is the main PC - who has had the dream
|
|
if (GetLocalInt(oPC, "nPCNumber") == 1)
|
|
{
|
|
|
|
//if this is the case, strip PC of all equipment, place
|
|
//it on the weapons rack ("q2a_pc_equip" and
|
|
//spawn in the assassin ("q2adrowassassin")
|
|
// Removing PC's equipment.
|
|
object oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
|
|
object oGear2;
|
|
//object oContainer = GetObjectByTag("q2a_pc_equip");//OLD CONTAINER - IN PC START ROOM
|
|
int nGold = 0;
|
|
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
|
|
if(GetIsObjectValid(oGear) && GetTag(oGear) != "lichamulet" )
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC);
|
|
if(GetIsObjectValid(oGear))
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
|
|
//Empty all items from the PCs inventory
|
|
//Destroy any XP1 specific items
|
|
//UPDATE 08/11/03 - Keep XP1 items for now
|
|
oGear = GetFirstItemInInventory(oPC);
|
|
while (oGear != OBJECT_INVALID)
|
|
{
|
|
//Don't destroy the reaper stone, rogue stone or Deekin's book
|
|
//if (GetTag(oGear) != "x2_p_reaper" && GetTag(oGear) != "x2_p_rogue" && GetTag(oGear) != "bookoflegends")
|
|
//{
|
|
|
|
// don't destroy PRC items
|
|
// Lich's Phylactery or soul stones
|
|
// Shifters spark of life archfocusofpower
|
|
// Archmage Focus Power
|
|
if(GetTag(oGear) != "soul_gem" &&
|
|
GetTag(oGear) != "sparkoflife" &&
|
|
GetTag(oGear) != "lichamulet" &&
|
|
GetTag(oGear) != "archfocusofpower" &&
|
|
GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC) != oGear &&
|
|
GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC) != oGear &&
|
|
GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC) != oGear &&
|
|
GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC) != oGear
|
|
)
|
|
{
|
|
nGold = nGold + GetGoldPieceValue(oGear);
|
|
oGear2 = CopyItem(oGear, oContainer);
|
|
SetPlotFlag(oGear, FALSE);
|
|
DestroyObject(oGear);
|
|
}
|
|
|
|
oGear = GetNextItemInInventory(oPC);
|
|
}
|
|
|
|
//Get Rid of Gold
|
|
TakeGoldFromCreature(GetGold(oPC), oPC, TRUE);
|
|
// ******************************
|
|
// * EXTRA ITEM SPAWNING
|
|
// ******************************
|
|
|
|
|
|
//If they have less than 15000 gp in items, spawn a longsword +3
|
|
//(or quarterstaff +3 if wizard, monk, druid) and a ring of protection +3.
|
|
if (nGold < 15000)
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oPC) > 5 ||
|
|
GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC) > 5 ||
|
|
GetLevelByClass(CLASS_TYPE_MONK, oPC) > 5 ||
|
|
GetLevelByClass(CLASS_TYPE_DRUID, oPC) > 5)
|
|
{
|
|
//create quarterstaff
|
|
CreateItemOnObject("nw_wdbmqs009", oContainer);
|
|
}
|
|
else
|
|
{
|
|
//create longsword
|
|
CreateItemOnObject("nw_wswmls012", oContainer);
|
|
}
|
|
//Create ring of protection
|
|
CreateItemOnObject("nw_it_mring018", oContainer);
|
|
}
|
|
|
|
object oDialog = GetObjectByTag("q2aprologue");
|
|
DelayCommand(1.5, AssignCommand(oDialog, ActionStartConversation(oPC, "pre_awake1")));
|
|
|
|
|
|
// * July 2 2003: Spawn in reaper stone - BK
|
|
//if (GetIsObjectValid(GetItemPossessedBy(oPC, "x2_p_reaper")) == FALSE)
|
|
//{
|
|
object oStone = CreateItemOnObject("x2_p_reaper", oPC);
|
|
SetItemCursedFlag(oStone, TRUE);
|
|
// * create one rogue stone
|
|
CreateItemOnObject("x2_p_rogue", oPC, 1);
|
|
|
|
//}
|
|
|
|
|
|
// * Spawn Deekin's book on the player
|
|
CreateItemOnObject("bookoflegends", oPC);
|
|
}
|
|
else
|
|
{
|
|
|
|
//destroy any portal stones held by other players
|
|
if (GetIsObjectValid(GetItemPossessedBy(oPC, "x2_p_reaper")) == TRUE)
|
|
{
|
|
object oStone = GetItemPossessedBy(oPC, "x2_p_reaper");
|
|
DestroyObject(oStone);
|
|
}
|
|
}
|
|
|
|
//Do the following only the first time the area is entered
|
|
if (GetLocalInt(OBJECT_SELF, "nSaved") == 1)
|
|
return;
|
|
|
|
SetLocalInt(OBJECT_SELF, "nSaved", 1);
|
|
DoSinglePlayerAutoSave();
|
|
|
|
object oKiller = CreateObject(OBJECT_TYPE_CREATURE, "q2adrowassassin", GetLocation(GetWaypointByTag("wp_q2a_assassin")));
|
|
|
|
object oChest = GetObjectByTag("q2a_pc_equip");
|
|
AssignCommand(oKiller, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 60.0));
|
|
SetLocalInt(GetModule(), "nAssassin", 1);
|
|
|
|
|
|
// * Spawn and add the new complementary dagger
|
|
object oDagger = CreateItemOnObject("x2_newdag", oPC);
|
|
AssignCommand(oPC, ActionEquipItem(oDagger, INVENTORY_SLOT_RIGHTHAND));
|
|
|
|
// Added by: Brad Prince. This was done to cover the naked PC bumping that
|
|
// happened before drow assassin. Looked unpolished.
|
|
|
|
DelayCommand(1.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
|
|
}
|
|
|
|
|
|
}
|