UW2_PRC8/_module/nss/q2a_enter_rooms.nss
Jaysyn904 5197ad9a4d Initial upload
Initial upload
2023-09-25 20:24:01 -04:00

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));
}
}