Further PRC integration

Further PRC integration.  Fixed Rod of Ruin.  Full compile.
This commit is contained in:
Jaysyn904
2022-10-10 08:16:23 -04:00
parent b257fba4d9
commit 2bf42182fd
1710 changed files with 1758 additions and 244 deletions

View File

@@ -5,16 +5,25 @@
//:: Created By: Script Wizard
//:: Created On: 9/11/2008 11:46:37 AM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_DRUID, GetPCSpeaker()) >= 1)
return TRUE;
object oPC = GetPCSpeaker();
// Restrict based on the player's class
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_DRUID, oPC)
+GetLevelByClass(CLASS_TYPE_HATHRAN, oPC);
if(nClass <= 0)
return FALSE;
return FALSE;
return TRUE;
}

View File

@@ -5,14 +5,21 @@
//:: Created By: Script Wizard
//:: Created On: 9/11/2008 11:46:56 AM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
object oPC = GetPCSpeaker();
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_PALADIN, GetPCSpeaker()) >= 1)
iPassed = 1;
if(iPassed == 0)
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_PALADIN, oPC)
+GetLevelByClass(CLASS_TYPE_SOHEI, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;

View File

@@ -5,14 +5,20 @@
//:: Created By: Script Wizard
//:: Created On: 9/11/2008 12:18:32 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
object oPC = GetPCSpeaker();
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_RANGER, GetPCSpeaker()) >= 1)
iPassed = 1;
if(iPassed == 0)
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_RANGER, oPC)
+GetLevelByClass(CLASS_TYPE_TOTEMIST, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;

View File

@@ -5,14 +5,23 @@
//:: Created By: Script Wizard
//:: Created On: 9/11/2008 12:19:02 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
object oPC = GetPCSpeaker();
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_SORCERER, GetPCSpeaker()) >= 1)
iPassed = 1;
if(iPassed == 0)
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
+GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
+GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC)
+GetLevelByClass(CLASS_TYPE_WARLOCK, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;

View File

@@ -5,27 +5,75 @@
//:: Created By: Script Wizard
//:: Created On: 2/9/2008 5:09:16 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_ASSASSIN, GetPCSpeaker()) >= 1)
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_BARD, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_MONK, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_PALADIN, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_PALE_MASTER, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetPCSpeaker()) >= 1))
iPassed = 1;
if(iPassed == 0)
object oPC = GetPCSpeaker();
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC)
+GetLevelByClass(CLASS_TYPE_BARD, oPC)
+GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC)
+GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)
+GetLevelByClass(CLASS_TYPE_MONK, oPC)
+GetLevelByClass(CLASS_TYPE_PALADIN, oPC)
+GetLevelByClass(CLASS_TYPE_HEALER, oPC)
+GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oPC)
+GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oPC)
+GetLevelByClass(CLASS_TYPE_HEALER, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_MIDDLECIRCLE, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_BAELNORN, oPC)
+GetLevelByClass(CLASS_TYPE_MORNINGLORD, oPC)
+GetLevelByClass(CLASS_TYPE_SKULLCLAN_HUNTER, oPC)
+GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oPC)
+GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC)
+GetLevelByClass(CLASS_TYPE_HEARTWARDER, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC)
+GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC)
+GetLevelByClass(CLASS_TYPE_VASSAL, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER, oPC)
+GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oPC)
+GetLevelByClass(CLASS_TYPE_OLLAM, oPC)
+GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)
+GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC)
+GetLevelByClass(CLASS_TYPE_DIABOLIST, oPC)
+GetLevelByClass(CLASS_TYPE_UR_PRIEST, oPC)
+GetLevelByClass(CLASS_TYPE_OCULAR, oPC)
+GetLevelByClass(CLASS_TYPE_JUDICATOR, oPC)
+GetLevelByClass(CLASS_TYPE_NIGHTSHADE, oPC)
+GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL, oPC)
+GetLevelByClass(CLASS_TYPE_DISPATER, oPC)
+GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oPC)
+GetLevelByClass(CLASS_TYPE_ORCUS, oPC)
+GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oPC)
+GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oPC)
+GetLevelByClass(CLASS_TYPE_NECROCARNATE, oPC)
+GetLevelByClass(CLASS_TYPE_GHOST_FACED_KILLER, oPC)
+GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_MEPH, oPC)
+GetLevelByClass(CLASS_TYPE_SOUL_EATER, oPC)
+GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC)
+GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC)
+GetLevelByClass(CLASS_TYPE_PYROKINETICIST, oPC)
+GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC)
+GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, oPC)
+GetLevelByClass(CLASS_TYPE_SAMURAI, oPC)
+GetLevelByClass(CLASS_TYPE_IAIJUTSU_MASTER, oPC)
+GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oPC)
+GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oPC)
+GetLevelByClass(CLASS_TYPE_SOHEI, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT, oPC)
+GetLevelByClass(CLASS_TYPE_SOULBORN, oPC)
+GetLevelByClass(CLASS_TYPE_INCARNUM_BLADE, oPC)
+GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC);
//:: Restrict based on the player's class
if (nClass <= 0)
return FALSE;
return TRUE;
}
}

View File

@@ -1,17 +1,54 @@
#include "prc_class_const"
int StartingConditional()
{
object oPC = GetPCSpeaker();
object oPC = GetPCSpeaker();
//If the speaker is a spell caster!
if ((GetLevelByClass(CLASS_TYPE_BARD, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_CLERIC, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_DRUID, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_PALADIN, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_RANGER, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_SORCERER, oPC)>0)||
(GetLevelByClass(CLASS_TYPE_WIZARD, oPC)>0))
return TRUE;
//:: If the speaker is a spellcaster return TRUE
else //Otherwise if they aren't a caster dont' show the line!
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_RANGER, oPC)
+GetLevelByClass(CLASS_TYPE_CLERIC, oPC)
+GetLevelByClass(CLASS_TYPE_DRUID, oPC)
+GetLevelByClass(CLASS_TYPE_PALADIN, oPC)
+GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
+GetLevelByClass(CLASS_TYPE_WIZARD, oPC)
+GetLevelByClass(CLASS_TYPE_HARPER, oPC)
+GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC)
+GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC)
+GetLevelByClass(CLASS_TYPE_UR_PRIEST, oPC)
+GetLevelByClass(CLASS_TYPE_OCULAR, oPC)
+GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC)
+GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC)
+GetLevelByClass(CLASS_TYPE_HEALER, oPC)
+GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC)
+GetLevelByClass(CLASS_TYPE_CULTIST_SHATTERED_PEAK, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC)
+GetLevelByClass(CLASS_TYPE_VASSAL, oPC)
+GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oPC)
+GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWLORD, oPC)
+GetLevelByClass(CLASS_TYPE_JUSTICEWW, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_MIDDLECIRCLE, oPC)
+GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
+GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC)
+GetLevelByClass(CLASS_TYPE_SHAMAN, oPC)
+GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)
+GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC)
+GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC)
+GetLevelByClass(CLASS_TYPE_SOHEI, oPC)
+GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_NENTYAR_HUNTER, oPC)
+GetLevelByClass(CLASS_TYPE_BLIGHTER, oPC);
if (nClass >= 1)
{
return TRUE;
}
else //Otherwise if they aren't a caster don't show the line!
return FALSE;
}
}

View File

@@ -5,17 +5,30 @@
//:: Created By: Script Wizard
//:: Created On: 4/24/2008 3:43:53 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_BARBARIAN, GetPCSpeaker()) >= 1)
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_BARD, GetPCSpeaker()) >= 1))
iPassed = 1;
if(iPassed == 0)
object oPC = GetPCSpeaker();
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_PYROKINETICIST, oPC)
+GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC)
+GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)
+GetLevelByClass(CLASS_TYPE_BARD, oPC)
+GetLevelByClass(CLASS_TYPE_BATTLERAGER, oPC)
+GetLevelByClass(CLASS_TYPE_TEMPUS, oPC)
+GetLevelByClass(CLASS_TYPE_RUNESCARRED, oPC)
+GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC)
+GetLevelByClass(CLASS_TYPE_WEREWOLF, oPC)
+GetLevelByClass(CLASS_TYPE_FRE_BERSERKER, oPC)
+GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC);
//:: Restrict based on the player's class
if(nClass <= 0)
return FALSE;
return TRUE;
}
}

View File

@@ -5,17 +5,34 @@
//:: Created By: Script Wizard
//:: Created On: 4/24/2008 3:18:33 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, GetPCSpeaker()) >= 1)
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_PALADIN, GetPCSpeaker()) >= 1))
iPassed = 1;
if(iPassed == 0)
object oPC = GetPCSpeaker();
int nClass;
//:: Restrict based on the player's class
nClass = GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC)
+GetLevelByClass(CLASS_TYPE_PALADIN, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC)
+GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC)
+GetLevelByClass(CLASS_TYPE_VASSAL, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER, oPC)
+GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oPC)
+GetLevelByClass(CLASS_TYPE_OLLAM, oPC)
+GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)
+GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC)
+GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC)
+GetLevelByClass(CLASS_TYPE_HEARTWARDER, oPC)
+GetLevelByClass(CLASS_TYPE_MORNINGLORD, oPC)
+GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;
}
}

View File

@@ -5,18 +5,35 @@
//:: Created By: Script Wizard
//:: Created On: 4/24/2008 3:37:39 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, GetPCSpeaker()) >= 1)
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_MONK, GetPCSpeaker()) >= 1))
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_PALADIN, GetPCSpeaker()) >= 1))
iPassed = 1;
if(iPassed == 0)
object oPC = GetPCSpeaker();
int nClass;
//:: Restrict based on the player's class
nClass = GetLevelByClass(CLASS_TYPE_DIABOLIST, oPC)
+GetLevelByClass(CLASS_TYPE_PALADIN, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC)
+GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC)
+GetLevelByClass(CLASS_TYPE_VASSAL, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER, oPC)
+GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oPC)
+GetLevelByClass(CLASS_TYPE_OLLAM, oPC)
+GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)
+GetLevelByClass(CLASS_TYPE_MONK, oPC)
+GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, oPC)
+GetLevelByClass(CLASS_TYPE_SAMURAI, oPC)
+GetLevelByClass(CLASS_TYPE_IAIJUTSU_MASTER, oPC)
+GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oPC)
+GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oPC)
+GetLevelByClass(CLASS_TYPE_SOHEI, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;

View File

@@ -5,17 +5,31 @@
//:: Created By: Script Wizard
//:: Created On: 4/24/2008 3:19:55 PM
//:://////////////////////////////////////////////
#include "prc_class_const"
int StartingConditional()
{
// Restrict based on the player's class
int iPassed = 0;
if(GetLevelByClass(CLASS_TYPE_ASSASSIN, GetPCSpeaker()) >= 1)
iPassed = 1;
if((iPassed == 0) && (GetLevelByClass(CLASS_TYPE_PALE_MASTER, GetPCSpeaker()) >= 1))
iPassed = 1;
if(iPassed == 0)
object oPC = GetPCSpeaker();
int nClass;
//:: Restrict based on the player's class
nClass = GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC)
+GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC)
+GetLevelByClass(CLASS_TYPE_OCULAR, oPC)
+GetLevelByClass(CLASS_TYPE_JUDICATOR, oPC)
+GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL, oPC)
+GetLevelByClass(CLASS_TYPE_DISPATER, oPC)
+GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oPC)
+GetLevelByClass(CLASS_TYPE_ORCUS, oPC)
+GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oPC)
+GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oPC)
+GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_MEPH, oPC)
+GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC)
+GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC);
if(nClass <= 0)
return FALSE;
return TRUE;
}
}

View File

@@ -1,28 +1,47 @@
//IMPORTANT, use the Save As button FIRST, before you Edit This Script!
//Put this script OnClick or OnFailToOpen
#include "prc_class_const"
void main()
{
object oPC = GetClickingObject();
object oMe = OBJECT_SELF;
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
+GetLevelByClass(CLASS_TYPE_WIZARD, oPC)
+GetLevelByClass(CLASS_TYPE_BARD, oPC)
+GetLevelByClass(CLASS_TYPE_HARPER, oPC)
+GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC)
+GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC)
+GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC)
+GetLevelByClass(CLASS_TYPE_CULTIST_SHATTERED_PEAK, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oPC)
+GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWLORD, oPC)
+GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
+GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC);
if (!GetIsPC(oPC)) return;
object oPC = GetClickingObject();
object oMe = OBJECT_SELF;
if (!GetIsPC(oPC)) return;
if (nClass >= 5)
{
SetLocked(OBJECT_SELF, FALSE);
if (GetLevelByClass(CLASS_TYPE_BARD, oPC)>=5 || GetLevelByClass(CLASS_TYPE_WIZARD, oPC)>=5 ||
GetLevelByClass(CLASS_TYPE_SORCERER, oPC)>=5)
{
SetLocked(OBJECT_SELF, FALSE);
ActionOpenDoor(OBJECT_SELF);
ActionOpenDoor(OBJECT_SELF);
DelayCommand(7.0, ActionCloseDoor(OBJECT_SELF));
DelayCommand(7.0, ActionCloseDoor(OBJECT_SELF));
DelayCommand(7.1, SetLocked(OBJECT_SELF, TRUE));
}
DelayCommand(7.1, SetLocked(OBJECT_SELF, TRUE));
}
else
{
FloatingTextStringOnCreature("Only Magic Users are allowed within..", oPC, TRUE);
}
}
else
{
FloatingTextStringOnCreature("Only practicioners of the arcane arts are allowed within...", oPC, TRUE);
}
}

View File

@@ -1,17 +1,30 @@
#include "prc_class_const"
void main()
{
object oDoor = OBJECT_SELF;
object oDoor = OBJECT_SELF;
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int nClass;
//:: Restrict based on the player's class
nClass = GetLevelByClass(CLASS_TYPE_WIZARD, oPC)
+GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
+GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
+GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC)
+GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC)
+GetLevelByClass(CLASS_TYPE_ARCHMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_WARLOCK, oPC);
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int class1 = GetLevelByClass(CLASS_TYPE_WIZARD, oPC);
int class2 = GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
int pass = class1 + class2;
if (pass >=20){
if (nClass >= 20)
{
AssignCommand(oDoor, ActionOpenDoor(oDoor));
SendMessageToPC(oPC, "You may pass.");
}
AssignCommand(oDoor, ActionOpenDoor(oDoor));
SendMessageToPC(oPC, "You may pass.");
}
else{
SendMessageToPC(oPC, "You will not pass.");
}
}
else
{
SendMessageToPC(oPC, "You will not pass.");
}
}

View File

@@ -1,20 +1,37 @@
#include "prc_class_const"
void main()
{
object oDoor = OBJECT_SELF;
object oDoor = OBJECT_SELF;
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int nClass;
//:: Restrict based on the player's class
nClass = GetLevelByClass(CLASS_TYPE_CRUSADER, oPC)
+GetLevelByClass(CLASS_TYPE_FIGHTER, oPC)
+GetLevelByClass(CLASS_TYPE_KNIGHT, oPC)
+GetLevelByClass(CLASS_TYPE_MARSHAL, oPC)
+GetLevelByClass(CLASS_TYPE_SAMURAI, oPC)
+GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oPC)
+GetLevelByClass(CLASS_TYPE_WARBLADE, oPC)
+GetLevelByClass(CLASS_TYPE_PSYWAR, oPC)
+GetLevelByClass(CLASS_TYPE_RANGER, oPC)
+GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)
+GetLevelByClass(CLASS_TYPE_MONK, oPC)
+GetLevelByClass(CLASS_TYPE_SWORDSAGE, oPC)
+GetLevelByClass(CLASS_TYPE_SOULKNIFE, oPC)
+GetLevelByClass(CLASS_TYPE_SOHEI, oPC);
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int class1 = GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC);
int class2 = GetLevelByClass(CLASS_TYPE_FIGHTER, oPC);
int class3 = GetLevelByClass(CLASS_TYPE_MONK, oPC);
int class4 = GetLevelByClass(CLASS_TYPE_PALADIN, oPC);
int class5 = GetLevelByClass(CLASS_TYPE_RANGER, oPC);
int pass = class1 + class2 + class3 + class4 + class5;
if (pass >=20){
if (nClass >= 20)
{
AssignCommand(oDoor, ActionOpenDoor(oDoor));
SendMessageToPC(oPC, "You may pass.");
}
AssignCommand(oDoor, ActionOpenDoor(oDoor)) ;
SendMessageToPC(oPC, "You may pass.");
}
else{
SendMessageToPC(oPC, "You will not pass.");
}
}
else
{
SendMessageToPC(oPC, "You will not pass.");
}
}

View File

@@ -0,0 +1,106 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT1
/*
Default OnHeartbeat script for NPCs.
This script causes NPCs to perform default animations
while not otherwise engaged.
This script duplicates the behavior of the default
script and just cleans up the code and removes
redundant conditional checks.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
ExecuteScript("prc_npc_hb", OBJECT_SELF);
// * if not runnning normal or better Ai then exit for performance reasons
if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
// Buff ourselves up right away if we should
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
{
// This will return TRUE if an enemy was within 40.0 m
// and we buffed ourselves up instantly to respond --
// simulates a spellcaster with protections enabled
// already.
if(TalentAdvancedBuff(40.0))
{
// This is a one-shot deal
SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
// This return means we skip sending the user-defined
// heartbeat signal in this one case.
return;
}
}
if(GetHasEffect(EFFECT_TYPE_SLEEP))
{
// If we're asleep and this is the result of sleeping
// at night, apply the floating 'z's visual effect
// every so often
if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
{
effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
if(d10() > 6)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
}
}
}
// If we have the 'constant' waypoints flag set, walk to the next
// waypoint.
else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
{
WalkWayPoints();
}
// Check to see if we should be playing default animations
// - make sure we don't have any current targets
else if ( !GetIsObjectValid(GetAttemptedAttackTarget())
&& !GetIsObjectValid(GetAttemptedSpellTarget())
// && !GetIsPostOrWalking())
&& !GetIsObjectValid(GetNearestSeenEnemy()))
{
if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) ||
GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE))
{
// This handles special attacking/fleeing behavior
// for omnivores & herbivores.
DetermineSpecialBehavior();
}
else if (!IsInConversation(OBJECT_SELF))
{
if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
|| GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
|| GetIsEncounterCreature())
{
PlayMobileAmbientAnimations();
}
else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS))
{
PlayImmobileAmbientAnimations();
}
}
}
// Send the user-defined event signal if specified
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT));
}
}

View File

@@ -0,0 +1,166 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT2
/*
Default OnPerception event handler for NPCs.
Handles behavior when perceiving a creature for the
first time.
*/
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
ExecuteScript("prc_npc_percep", OBJECT_SELF);
// * if not runnning normal or better Ai then exit for performance reasons
// * if not runnning normal or better Ai then exit for performance reasons
if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
object oPercep = GetLastPerceived();
int bSeen = GetLastPerceptionSeen();
int bHeard = GetLastPerceptionHeard();
if (bHeard == FALSE)
{
// Has someone vanished in front of me?
bHeard = GetLastPerceptionVanished();
}
// This will cause the NPC to speak their one-liner
// conversation on perception even if they are already
// in combat.
if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION)
&& GetIsPC(oPercep)
&& bSeen)
{
SpeakOneLinerConversation();
}
// March 5 2003 Brent
// Had to add this section back in, since modifications were not taking this specific
// example into account -- it made invisibility basically useless.
//If the last perception event was hearing based or if someone vanished then go to search mode
if ((GetLastPerceptionVanished()) && GetIsEnemy(GetLastPerceived()))
{
object oGone = GetLastPerceived();
if((GetAttemptedAttackTarget() == GetLastPerceived() ||
GetAttemptedSpellTarget() == GetLastPerceived() ||
GetAttackTarget() == GetLastPerceived()) && GetArea(GetLastPerceived()) != GetArea(OBJECT_SELF))
{
ClearAllActions();
DetermineCombatRound();
}
}
// This section has been heavily revised while keeping the
// pre-existing behavior:
// - If we're in combat, keep fighting.
// - If not and we've perceived an enemy, start to fight.
// Even if the perception event was a 'vanish', that's
// still what we do anyway, since that will keep us
// fighting any visible targets.
// - If we're not in combat and haven't perceived an enemy,
// see if the perception target is a PC and if we should
// speak our attention-getting one-liner.
if (GetIsInCombat(OBJECT_SELF))
{
// don't do anything else, we're busy
//MyPrintString("GetIsFighting: TRUE");
}
// * BK FEB 2003 Only fight if you can see them. DO NOT RELY ON HEARING FOR ENEMY DETECTION
else if (GetIsEnemy(oPercep) && bSeen)
{ // SpawnScriptDebugger();
//MyPrintString("GetIsEnemy: TRUE");
// We spotted an enemy and we're not already fighting
if(!GetHasEffect(EFFECT_TYPE_SLEEP)) {
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
{
//MyPrintString("DetermineSpecialBehavior");
DetermineSpecialBehavior();
} else
{
//MyPrintString("DetermineCombatRound");
SetFacingPoint(GetPosition(oPercep));
SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
DetermineCombatRound();
}
}
}
else
{
if (bSeen)
{
//MyPrintString("GetLastPerceptionSeen: TRUE");
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
DetermineSpecialBehavior();
} else if (GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION)
&& GetIsPC(oPercep))
{
// The NPC will speak their one-liner conversation
// This should probably be:
// SpeakOneLinerConversation(oPercep);
// instead, but leaving it as is for now.
ActionStartConversation(OBJECT_SELF);
}
}
else
// * July 14 2003: Some minor reactions based on invisible creatures being nearby
if (bHeard && GetIsEnemy(oPercep))
{
// SpeakString("vanished");
// * don't want creatures wandering too far after noises
if (GetDistanceToObject(oPercep) <= 7.0)
{
// if (GetHasSpell(SPELL_TRUE_SEEING) == TRUE)
if (GetHasSpell(SPELL_TRUE_SEEING))
{
ActionCastSpellAtObject(SPELL_TRUE_SEEING, OBJECT_SELF);
}
else
// if (GetHasSpell(SPELL_SEE_INVISIBILITY) == TRUE)
if (GetHasSpell(SPELL_SEE_INVISIBILITY))
{
ActionCastSpellAtObject(SPELL_SEE_INVISIBILITY, OBJECT_SELF);
}
else
// if (GetHasSpell(SPELL_INVISIBILITY_PURGE) == TRUE)
if (GetHasSpell(SPELL_INVISIBILITY_PURGE))
{
ActionCastSpellAtObject(SPELL_INVISIBILITY_PURGE, OBJECT_SELF);
}
else
{
ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 0.5);
ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT, 0.5);
ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD, 0.5);
}
}
}
// activate ambient animations or walk waypoints if appropriate
if (!IsInConversation(OBJECT_SELF)) {
if (GetIsPostOrWalking()) {
WalkWayPoints();
} else if (GetIsPC(oPercep) &&
(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
|| GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
|| GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)
|| GetIsEncounterCreature()))
{
SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE);
}
}
}
// Send the user-defined event if appropriate
if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && GetLastPerceptionSeen())
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_PERCEIVE));
}
}

View File

@@ -0,0 +1,58 @@
//::///////////////////////////////////////////////
//:: Default: End of Combat Round
//:: NW_C2_DEFAULT3
//:: Copyright (c) 2008 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Modified By: Deva Winblood
//:: Modified On: Feb 16th, 2008
//:: Added Support for Mounted Combat Feat Support
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
void main()
{
ExecuteScript("prc_npc_combat", OBJECT_SELF);
if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
{ // set variables on target for mounted combat
DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT");
if (GetHasFeat(FEAT_MOUNTED_COMBAT,OBJECT_SELF))
{ // check for AC increase
int nRoll=d20()+GetSkillRank(SKILL_RIDE);
nRoll=nRoll-10;
if (nRoll>4)
{ // ac increase
nRoll=nRoll/5;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACIncrease(nRoll),OBJECT_SELF,8.5);
} // ac increase
} // check for AC increase
} // set variables on target for mounted combat
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior();
}
else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
DetermineCombatRound();
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
}
}

View File

@@ -0,0 +1,92 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT4
/*
Default OnConversation event handler for NPCs.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
ExecuteScript("prc_npc_conv", OBJECT_SELF);
// * if petrified, jump out
if (GetHasEffect(EFFECT_TYPE_PETRIFY, OBJECT_SELF) == TRUE)
{
return;
}
// * If dead, exit directly.
if (GetIsDead(OBJECT_SELF) == TRUE)
{
return;
}
// See if what we just 'heard' matches any of our
// predefined patterns
int nMatch = GetListenPatternNumber();
object oShouter = GetLastSpeaker();
if (nMatch == -1)
{
// Not a match -- start an ordinary conversation
if (GetCommandable(OBJECT_SELF))
{
ClearActions(CLEAR_NW_C2_DEFAULT4_29);
BeginConversation();
}
else
// * July 31 2004
// * If only charmed then allow conversation
// * so you can have a better chance of convincing
// * people of lowering prices
if (GetHasEffect(EFFECT_TYPE_CHARMED) == TRUE)
{
ClearActions(CLEAR_NW_C2_DEFAULT4_29);
BeginConversation();
}
}
// Respond to shouts from friendly non-PCs only
else if (GetIsObjectValid(oShouter)
&& !GetIsPC(oShouter)
&& GetIsFriend(oShouter))
{
object oIntruder = OBJECT_INVALID;
// Determine the intruder if any
if(nMatch == 4)
{
oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER");
}
else if (nMatch == 5)
{
oIntruder = GetLastHostileActor(oShouter);
if(!GetIsObjectValid(oIntruder))
{
oIntruder = GetAttemptedAttackTarget();
if(!GetIsObjectValid(oIntruder))
{
oIntruder = GetAttemptedSpellTarget();
if(!GetIsObjectValid(oIntruder))
{
oIntruder = OBJECT_INVALID;
}
}
}
}
// Actually respond to the shout
RespondToShout(oShouter, nMatch, oIntruder);
}
// Send the user-defined event if appropriate
if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE));
}
}

View File

@@ -0,0 +1,109 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT6
//:: Default OnDamaged handler
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
//:://////////////////////////////////////////////////
//:: Modified By: Deva Winblood
//:: Modified On: Jan 17th, 2008
//:: Added Support for Mounted Combat Feat Support
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
#include "x3_inc_horse"
void main()
{
ExecuteScript("prc_npc_damaged", OBJECT_SELF);
object oDamager = GetLastDamager();
object oMe=OBJECT_SELF;
int nHPBefore;
if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
if (GetHasFeat(FEAT_MOUNTED_COMBAT)&&HorseGetIsMounted(OBJECT_SELF))
{ // see if can negate some damage
if (GetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL"))
{ // last attack was physical
nHPBefore=GetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
if (!GetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT"))
{ // haven't already had a chance to use this for the round
SetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT",TRUE);
int nAttackRoll=GetBaseAttackBonus(oDamager)+d20();
int nRideCheck=GetSkillRank(SKILL_RIDE,OBJECT_SELF)+d20();
if (nRideCheck>=nAttackRoll&&!GetIsDead(OBJECT_SELF))
{ // averted attack
if (GetIsPC(oDamager)) SendMessageToPC(oDamager,GetName(OBJECT_SELF)+GetStringByStrRef(111991));
//if (GetIsPC(OBJECT_SELF)) SendMessageToPCByStrRef(OBJECT_SELF,111992");
if (GetCurrentHitPoints(OBJECT_SELF)<nHPBefore)
{ // heal
effect eHeal=EffectHeal(nHPBefore-GetCurrentHitPoints(OBJECT_SELF));
AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oMe));
} // heal
} // averted attack
} // haven't already had a chance to use this for the round
} // last attack was physical
} // see if can negate some damage
if(GetFleeToExit()) {
// We're supposed to run away, do nothing
} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
// don't do anything?
} else {
if (!GetIsObjectValid(oDamager)) {
// don't do anything, we don't have a valid damager
} else if (!GetIsFighting(OBJECT_SELF)) {
// If we're not fighting, determine combat round
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
DetermineSpecialBehavior(oDamager);
} else {
if(!GetObjectSeen(oDamager)
&& GetArea(OBJECT_SELF) == GetArea(oDamager)) {
// We don't see our attacker, go find them
ActionMoveToLocation(GetLocation(oDamager), TRUE);
ActionDoCommand(DetermineCombatRound());
} else {
DetermineCombatRound();
}
}
} else {
// We are fighting already -- consider switching if we've been
// attacked by a more powerful enemy
object oTarget = GetAttackTarget();
if (!GetIsObjectValid(oTarget))
oTarget = GetAttemptedAttackTarget();
if (!GetIsObjectValid(oTarget))
oTarget = GetAttemptedSpellTarget();
// If our target isn't valid
// or our damager has just dealt us 25% or more
// of our hp in damager
// or our damager is more than 2HD more powerful than our target
// switch to attack the damager.
if (!GetIsObjectValid(oTarget)
|| (
oTarget != oDamager
&& (
GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4)
|| (GetHitDice(oDamager) - 2) > GetHitDice(oTarget)
)
)
)
{
// Switch targets
DetermineCombatRound(oDamager);
}
}
}
// Send the user-defined event signal
if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DAMAGED));
}
}

View File

@@ -0,0 +1,30 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT8
/*
Default OnDisturbed event handler for NPCs.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
ExecuteScript("prc_npc_disturb", OBJECT_SELF);
object oTarget = GetLastDisturbed();
// If we've been disturbed and are not already fighting,
// attack our disturber.
if (GetIsObjectValid(oTarget) && !GetIsFighting(OBJECT_SELF)) {
DetermineCombatRound(oTarget);
}
// Send the disturbed flag if appropriate.
if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) {
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DISTURBED));
}
}

View File

@@ -0,0 +1,20 @@
//::///////////////////////////////////////////////
//:: Default: On Rested
//:: NW_C2_DEFAULTA
//:: Copyright (c) 2002 Bioware Corp.
//:://////////////////////////////////////////////
/*
Determines the course of action to be taken
after having just rested.
*/
//:://////////////////////////////////////////////
//:: Created By: Don Moar
//:: Created On: April 28, 2002
//:://////////////////////////////////////////////
void main()
{
ExecuteScript("prc_npc_rested", OBJECT_SELF);
return;
}

View File

@@ -0,0 +1,159 @@
//::///////////////////////////////////////////////
//:: Default: On Spell Cast At
//:: NW_C2_DEFAULTB
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This determines if the spell just cast at the
target is harmful or not.
GZ 2003-Oct-02 : - New AoE Behavior AI. Will use
Dispel Magic against AOES
- Flying Creatures will ignore
Grease
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Dec 6, 2001
//:: Last Modified On: 2003-Oct-13
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Modified By: Deva Winblood
//:: Modified On: Jan 4th, 2008
//:: Added Support for Mounted Combat Feat Support
//:://////////////////////////////////////////////
#include "nw_i0_generic"
#include "x2_i0_spells"
void main()
{
ExecuteScript("prc_npc_spellat", OBJECT_SELF);
object oCaster = GetLastSpellCaster();
if(GetLastSpellHarmful())
{
SetCommandable(TRUE);
if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
{ // set variables on target for mounted combat
DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
} // set variables on target for mounted combat
// ------------------------------------------------------------------
// If I was hurt by someone in my own faction
// Then clear any hostile feelings I have against them
// After all, we're all just trying to do our job here
// if we singe some eyebrow hair, oh well.
// ------------------------------------------------------------------
if (GetFactionEqual(oCaster, OBJECT_SELF) == TRUE)
{
ClearPersonalReputation(oCaster, OBJECT_SELF);
ClearAllActions(TRUE);
DelayCommand(1.2, ActionDoCommand(DetermineCombatRound(OBJECT_INVALID)));
// Send the user-defined event as appropriate
if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT));
}
return;
}
int bAttack = TRUE;
// ------------------------------------------------------------------
// GZ, 2003-Oct-02
// Try to do something smart if we are subject to an AoE Spell.
// ------------------------------------------------------------------
if (MatchAreaOfEffectSpell(GetLastSpell()) == TRUE)
{
int nAI = (GetBestAOEBehavior(GetLastSpell())); // from x2_i0_spells
switch (nAI)
{
case X2_SPELL_AOEBEHAVIOR_DISPEL_L:
case X2_SPELL_AOEBEHAVIOR_DISPEL_N:
case X2_SPELL_AOEBEHAVIOR_DISPEL_M:
case X2_SPELL_AOEBEHAVIOR_DISPEL_G:
case X2_SPELL_AOEBEHAVIOR_DISPEL_C:
bAttack = FALSE;
ActionCastSpellAtLocation(nAI, GetLocation(OBJECT_SELF));
ActionDoCommand(SetCommandable(TRUE));
SetCommandable(FALSE);
break;
case X2_SPELL_AOEBEHAVIOR_FLEE:
ClearActions(CLEAR_NW_C2_DEFAULTB_GUSTWIND);
oCaster = GetLastSpellCaster();
ActionForceMoveToObject(oCaster, TRUE, 2.0);
DelayCommand(1.2, ActionDoCommand(DetermineCombatRound(oCaster)));
bAttack = FALSE;
break;
case X2_SPELL_AOEBEHAVIOR_IGNORE:
// well ... nothing
break;
case X2_SPELL_AOEBEHAVIOR_GUST:
ActionCastSpellAtLocation(SPELL_GUST_OF_WIND, GetLocation(OBJECT_SELF));
ActionDoCommand(SetCommandable(TRUE));
SetCommandable(FALSE);
bAttack = FALSE;
break;
}
}
// ---------------------------------------------------------------------
// Not an area of effect spell, but another hostile spell.
// If we're not already fighting someone else,
// attack the caster.
// ---------------------------------------------------------------------
if( !GetIsFighting(OBJECT_SELF) && bAttack)
{
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior(oCaster);
}
else
{
DetermineCombatRound(oCaster);
}
}
// We were attacked, so yell for help
SetCommandable(TRUE);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
//Shout that I was attacked
SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
}
else
{
// ---------------------------------------------------------------------
// July 14, 2003 BK
// If there is a valid enemy nearby and a NON HARMFUL spell has been
// cast on me I should call DetermineCombatRound
// I may be invisible and casting spells on myself to buff myself up
// ---------------------------------------------------------------------
// Fix: JE - let's only do this if I'm currently in combat. If I'm not
// in combat, and something casts a spell on me, it'll make me search
// out the nearest enemy, no matter where they are on the level, which
// is kinda dumb.
object oEnemy =GetNearestEnemy();
if ((GetIsObjectValid(oEnemy) == TRUE) && (GetIsInCombat() == TRUE))
{
// SpeakString("keep me in combat");
DetermineCombatRound(oEnemy);
}
}
// Send the user-defined event as appropriate
if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT));
}
}

View File

@@ -0,0 +1,51 @@
//::///////////////////////////////////////////////
//:: Default On Blocked
//:: NW_C2_DEFAULTE
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This will cause blocked creatures to open
or smash down doors depending on int and
str.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 23, 2001
//:://////////////////////////////////////////////
void main()
{
ExecuteScript("prc_npc_blocked", OBJECT_SELF);
object oDoor = GetBlockingDoor();
if (GetObjectType(oDoor) == OBJECT_TYPE_CREATURE)
{
// * Increment number of times blocked
/*SetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED", GetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED") + 1);
if (GetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED") > 3)
{
SpeakString("Blocked by creature");
SetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED",0);
ClearAllActions();
object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);
if (GetIsObjectValid(oEnemy) == TRUE)
{
ActionEquipMostDamagingRanged(oEnemy);
ActionAttack(oEnemy);
}
return;
} */
return;
}
if(GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 5)
{
if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_OPEN) && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 7 )
{
DoDoorAction(oDoor, DOOR_ACTION_OPEN);
}
else if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_BASH))
{
DoDoorAction(oDoor, DOOR_ACTION_BASH);
}
}
}

View File

@@ -0,0 +1,12 @@
//:://////////////////////////////////////////////////
//:: prc_pwonspawn
/*
PRC's OnSpawn event handler for NPCs.
*/
//:://////////////////////////////////////////////////
void main()
{
ExecuteScript("prc_npc_spawn", OBJECT_SELF);
}

View File

@@ -1,24 +1,34 @@
//Put this script OnOpen
#include "prc_class_const"
void main()
{
object oPC = GetLastUnlocked();
object oPC = GetLastUnlocked();
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ROGUE, oPC)
+GetLevelByClass(CLASS_TYPE_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_SCOUT, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC)
+GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC);
if (!GetIsPC(oPC)) return;
if (!GetIsPC(oPC)) return;
if (nClass <= 0)
{
SendMessageToPC(oPC, "You may not pass!");
if ((GetLevelByClass(CLASS_TYPE_ROGUE, oPC)==0))
{
SendMessageToPC(oPC, "You may not pass!");
ActionCloseDoor(OBJECT_SELF);
ActionCloseDoor(OBJECT_SELF);
SetLocked(OBJECT_SELF, TRUE);
}
SetLocked(OBJECT_SELF, TRUE);
else
{
SendMessageToPC(oPC, "You may pass.");
}
}
else
{
SendMessageToPC(oPC, "You may pass.");
}
}
}

View File

@@ -1,36 +1,50 @@
location lTarget;
object oTarget;
//Put this script OnEnter
#include "prc_class_const"
void main()
{
location lTarget;
object oTarget;
object oPC = GetEnteringObject();
object oPC = GetEnteringObject();
int r = GetLevelByClass(CLASS_TYPE_ROGUE, oPC);
int s = GetSkillRank(SKILL_SEARCH, oPC, TRUE);
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ROGUE, oPC)
+GetLevelByClass(CLASS_TYPE_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_SCOUT, oPC)
+GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC)
+GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC);
int nSearch = GetSkillRank(SKILL_SEARCH, oPC, TRUE);
//They must be a level 21 rogue nothing happens
if (r <=20)
{
//Only if they can spot it!
if(s >=30)
FloatingTextStringOnCreature("You notice a strange looking crack in the wall.", oPC, FALSE);
}
else if (r >=21)
{
if(s >=34)
{
SendMessageToPC(oPC, "You found a secrete lever!");
//:: They must be a level 21 rogue nothing happens
if (nClass <= 20)
{
//:: Only if they can spot it!
if(nSearch >= 30)
{
FloatingTextStringOnCreature("You notice a strange looking crack in the wall.", oPC, FALSE);
}
}
oTarget = GetWaypointByTag("royalrogueway");
else if (nClass >= 21)
{
if(nSearch >= 34)
{
SendMessageToPC(oPC, "You found a secret lever!");
lTarget = GetLocation(oTarget);
oTarget = GetWaypointByTag("royalrogueway");
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
lTarget = GetLocation(oTarget);
DelayCommand(2.0, AssignCommand(oPC, ClearAllActions()));
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
DelayCommand(2.0, AssignCommand(oPC, ActionJumpToLocation(lTarget)));
}
}
}
DelayCommand(2.0, AssignCommand(oPC, ClearAllActions()));
DelayCommand(2.0, AssignCommand(oPC, ActionJumpToLocation(lTarget)));
}
}
}

View File

@@ -17,7 +17,9 @@ the X2_ITEM_EVENT_ACTIVATE: script code will run.
*/
////////////////////////////////////////
#include "x2_inc_switches"
#include "prc_class_const"
//Main Script
void main()
@@ -92,8 +94,15 @@ void main()
oTarget = GetItemActivatedTarget(); //The target of the item's power
lway = GetItemActivatedTargetLocation(); //To get the location of the target!
nWLvl = GetLevelByClass(CLASS_TYPE_WIZARD, oPC);
nSLvl = GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
nWLvl = GetLevelByClass(CLASS_TYPE_WIZARD, oPC);
nSLvl = GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
+GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
+GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
+GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC)
+GetLevelByClass(CLASS_TYPE_WARLOCK, oPC)
+GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC);
//Determine effects...
if(nWLvl >=21)
{

View File

@@ -1,38 +1,47 @@
location lTarget;
object oTarget;
//Put this script OnEnter
#include "prc_class_const"
void main()
{
object oPC = GetEnteringObject();
object oTarget;
location lTarget;
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
if (!GetIsPC(oPC)) return;
int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF));
int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF));
if (DoOnce==TRUE) return;
if (DoOnce==TRUE) return;
SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);
SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ROGUE, oPC)
+GetLevelByClass(CLASS_TYPE_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_SCOUT, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC)
+GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC);
if (nClass >= 1)
{
if (GetIsSkillSuccessful(oPC, SKILL_SEARCH, 88))
{
if ((GetLevelByClass(CLASS_TYPE_ROGUE, oPC)>0))
{
if (GetIsSkillSuccessful(oPC, SKILL_SEARCH, 88))
{
oTarget = GetWaypointByTag("crackway1");
oTarget = GetWaypointByTag("crackway1");
lTarget = GetLocation(oTarget);
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
AssignCommand(oPC, ActionJumpToLocation(lTarget));
DelayCommand(1.0, FloatingTextStringOnCreature("You found a magical entrance to a small cave!", oPC));
}
}
}
DelayCommand(1.0, FloatingTextStringOnCreature("You found the magical entrance to a small cave!", oPC));
}
}
}

View File

@@ -1,37 +1,47 @@
location lTarget;
object oTarget;
//Put this script OnEnter
#include "prc_class_const"
void main()
{
object oPC = GetEnteringObject();
object oTarget;
location lTarget;
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
if (!GetIsPC(oPC)) return;
int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF));
int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF));
if (DoOnce==TRUE) return;
if (DoOnce==TRUE) return;
SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);
SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ROGUE, oPC)
+GetLevelByClass(CLASS_TYPE_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_SCOUT, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC)
+GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC);
if (nClass >= 11)
{
if (GetIsSkillSuccessful(oPC, SKILL_SEARCH, 88))
{
if ((GetLevelByClass(CLASS_TYPE_ROGUE, oPC)>10))
{
if (GetIsSkillSuccessful(oPC, SKILL_SEARCH, 88))
{
oTarget = GetWaypointByTag("crackway2");
oTarget = GetWaypointByTag("crackway1");
lTarget = GetLocation(oTarget);
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
AssignCommand(oPC, ActionJumpToLocation(lTarget));
DelayCommand(1.0, FloatingTextStringOnCreature("You found a magical entrance to a small cave!", oPC));
}
}
}
DelayCommand(1.0, FloatingTextStringOnCreature("You found the magical entrance to a small cave!", oPC));
}
}
}

View File

@@ -1,16 +1,23 @@
#include "prc_class_const"
void main()
{
object oDoor = OBJECT_SELF;
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int class1 = GetLevelByClass(CLASS_TYPE_ROGUE, oPC);
int class2 = GetLevelByClass(CLASS_TYPE_BARD, oPC);
int pass = class1 + class2;
if (pass <=14){
AssignCommand(oDoor, ActionCloseDoor(oDoor));
SetLocked(oDoor, TRUE) ;
SendMessageToPC(oPC, "This complex lock has detected tampering, and relocked itself.");
}
object oDoor = OBJECT_SELF;
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int nClass;
nClass = GetLevelByClass(CLASS_TYPE_ROGUE, oPC)
+GetLevelByClass(CLASS_TYPE_NINJA, oPC)
+GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
+GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC)
+GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC);
if (nClass <= 14)
{
AssignCommand(oDoor, ActionCloseDoor(oDoor));
SetLocked(oDoor, TRUE) ;
SendMessageToPC(oPC, "This complex lock has detected tampering, and relocked itself.");
}
}

View File

@@ -1,5 +1,6 @@
#include "X_O2_CONINCLUDE"
#include "GSLOOT_LIB"
#include "prc_class_const"
// Modified by AW Olorin 1-12-2004
// Anti-GS Looting
@@ -2646,6 +2647,43 @@ void CreateWarhammer(object oTarget, object oAdventurer)
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
void CreateWhip(object oTarget, object oAdventurer)
{
string sItem = "";
int nHD = GetHitDice(oAdventurer);
if (GetRange(1, nHD)) // * 800
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(2, nHD)) // * 200 - 2500
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(3, nHD)) // * 800 - 10000
{
int nRandom = Random(2) + 1;
switch (nRandom)
{
case 1: sItem = "x2_it_wpmwhip1"; break;
case 2: sItem = "x2_it_wpmwhip2"; break;
}
}
else if (GetRange(4, nHD)) // * 2500 - 16500
{
sItem = "x2_it_wpmwhip2";
}
else if (GetRange(5, nHD)) // * 8000 - 25000
{
sItem = "x2_it_wpmwhip3";
}
else if (GetRange(6, nHD)) // * 16000 and up
{
sItem = "x2_it_wpmwhip3";
}
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
//::///////////////////////////////////////////////
//:: Prefers
//:: Copyright (c) 2001 Bioware Corp.
@@ -2850,13 +2888,60 @@ location lLoc = GetLocation(OBJECT_SELF);
{
// * if get to this point then the PC did not have Weapon Focus
// * in anything then do additional logic to give an appropriate weapon
if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1)
{
CreateBattleAxe(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1)
{
CreateWhip(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1)
{
CreateSpear(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1)
{
CreateHalberd(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1)
{
CreateSling(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1)
{
CreateLongbow(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1)
{
CreateKatana(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1)
{
CreateRapier(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
{
CreateSpecificDruidWeapon(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1)
{
CreateSpecificWizardWeapon(oContainer, oLastOpener);

View File

@@ -1,5 +1,6 @@
#include "X_O2_CONINCLUDE"
#include "GSLOOT_LIB"
#include "prc_class_const"
// Modified by AW Olorin 1-12-2004
// Anti-GS Looting
@@ -2646,6 +2647,43 @@ void CreateWarhammer(object oTarget, object oAdventurer)
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
void CreateWhip(object oTarget, object oAdventurer)
{
string sItem = "";
int nHD = GetHitDice(oAdventurer);
if (GetRange(1, nHD)) // * 800
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(2, nHD)) // * 200 - 2500
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(3, nHD)) // * 800 - 10000
{
int nRandom = Random(2) + 1;
switch (nRandom)
{
case 1: sItem = "x2_it_wpmwhip1"; break;
case 2: sItem = "x2_it_wpmwhip2"; break;
}
}
else if (GetRange(4, nHD)) // * 2500 - 16500
{
sItem = "x2_it_wpmwhip2";
}
else if (GetRange(5, nHD)) // * 8000 - 25000
{
sItem = "x2_it_wpmwhip3";
}
else if (GetRange(6, nHD)) // * 16000 and up
{
sItem = "x2_it_wpmwhip3";
}
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
//::///////////////////////////////////////////////
//:: Prefers
//:: Copyright (c) 2001 Bioware Corp.
@@ -2850,13 +2888,60 @@ location lLoc = GetLocation(OBJECT_SELF);
{
// * if get to this point then the PC did not have Weapon Focus
// * in anything then do additional logic to give an appropriate weapon
if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1)
{
CreateBattleAxe(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1)
{
CreateWhip(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1)
{
CreateSpear(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1)
{
CreateHalberd(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1)
{
CreateSling(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1)
{
CreateLongbow(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1)
{
CreateKatana(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1)
{
CreateRapier(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
{
CreateSpecificDruidWeapon(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1)
{
CreateSpecificWizardWeapon(oContainer, oLastOpener);

View File

@@ -1,5 +1,6 @@
#include "X_O2_CONINCLUDE"
#include "GSLOOT_LIB"
#include "prc_class_const"
// Modofied by AW Olorin 1-12-2004
// Anti-GS Looting
@@ -2646,6 +2647,43 @@ void CreateWarhammer(object oTarget, object oAdventurer)
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
void CreateWhip(object oTarget, object oAdventurer)
{
string sItem = "";
int nHD = GetHitDice(oAdventurer);
if (GetRange(1, nHD)) // * 800
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(2, nHD)) // * 200 - 2500
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(3, nHD)) // * 800 - 10000
{
int nRandom = Random(2) + 1;
switch (nRandom)
{
case 1: sItem = "x2_it_wpmwhip1"; break;
case 2: sItem = "x2_it_wpmwhip2"; break;
}
}
else if (GetRange(4, nHD)) // * 2500 - 16500
{
sItem = "x2_it_wpmwhip2";
}
else if (GetRange(5, nHD)) // * 8000 - 25000
{
sItem = "x2_it_wpmwhip3";
}
else if (GetRange(6, nHD)) // * 16000 and up
{
sItem = "x2_it_wpmwhip3";
}
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
//::///////////////////////////////////////////////
//:: Prefers
//:: Copyright (c) 2001 Bioware Corp.
@@ -2853,13 +2891,60 @@ location lLoc = GetLocation(OBJECT_SELF);
{
// * if get to this point then the PC did not have Weapon Focus
// * in anything then do additional logic to give an appropriate weapon
if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1)
{
CreateBattleAxe(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1)
{
CreateWhip(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1)
{
CreateSpear(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1)
{
CreateHalberd(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1)
{
CreateSling(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1)
{
CreateLongbow(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1)
{
CreateKatana(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1)
{
CreateRapier(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
{
CreateSpecificDruidWeapon(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1)
{
CreateSpecificWizardWeapon(oContainer, oLastOpener);

View File

@@ -1,5 +1,6 @@
#include "X_O2_CONINCLUDE"
#include "GSLOOT_LIB"
#include "prc_class_const"
// Modifed by AW Olorin 1-12-2004
// Anti-GS Looting
@@ -2646,6 +2647,43 @@ void CreateWarhammer(object oTarget, object oAdventurer)
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
void CreateWhip(object oTarget, object oAdventurer)
{
string sItem = "";
int nHD = GetHitDice(oAdventurer);
if (GetRange(1, nHD)) // * 800
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(2, nHD)) // * 200 - 2500
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(3, nHD)) // * 800 - 10000
{
int nRandom = Random(2) + 1;
switch (nRandom)
{
case 1: sItem = "x2_it_wpmwhip1"; break;
case 2: sItem = "x2_it_wpmwhip2"; break;
}
}
else if (GetRange(4, nHD)) // * 2500 - 16500
{
sItem = "x2_it_wpmwhip2";
}
else if (GetRange(5, nHD)) // * 8000 - 25000
{
sItem = "x2_it_wpmwhip3";
}
else if (GetRange(6, nHD)) // * 16000 and up
{
sItem = "x2_it_wpmwhip3";
}
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
//::///////////////////////////////////////////////
//:: Prefers
//:: Copyright (c) 2001 Bioware Corp.
@@ -2852,13 +2890,60 @@ location lLoc = GetLocation(OBJECT_SELF);
{
// * if get to this point then the PC did not have Weapon Focus
// * in anything then do additional logic to give an appropriate weapon
if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1)
{
CreateBattleAxe(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1)
{
CreateWhip(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1)
{
CreateSpear(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1)
{
CreateHalberd(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1)
{
CreateSling(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1)
{
CreateLongbow(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1)
{
CreateKatana(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1)
{
CreateRapier(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
{
CreateSpecificDruidWeapon(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1)
{
CreateSpecificWizardWeapon(oContainer, oLastOpener);

View File

@@ -1,5 +1,6 @@
#include "X_O2_CONINCLUDE"
#include "GSLOOT_LIB"
#include "prc_class_const"
// Modified by AW Olorin 1-12-2004
// Anti-GS Looting
@@ -2646,6 +2647,43 @@ void CreateWarhammer(object oTarget, object oAdventurer)
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
void CreateWhip(object oTarget, object oAdventurer)
{
string sItem = "";
int nHD = GetHitDice(oAdventurer);
if (GetRange(1, nHD)) // * 800
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(2, nHD)) // * 200 - 2500
{
sItem = "x2_it_wpmwhip1";
}
else if (GetRange(3, nHD)) // * 800 - 10000
{
int nRandom = Random(2) + 1;
switch (nRandom)
{
case 1: sItem = "x2_it_wpmwhip1"; break;
case 2: sItem = "x2_it_wpmwhip2"; break;
}
}
else if (GetRange(4, nHD)) // * 2500 - 16500
{
sItem = "x2_it_wpmwhip2";
}
else if (GetRange(5, nHD)) // * 8000 - 25000
{
sItem = "x2_it_wpmwhip3";
}
else if (GetRange(6, nHD)) // * 16000 and up
{
sItem = "x2_it_wpmwhip3";
}
if (sItem != "")
dbCreateItemOnObject(sItem, oTarget, 1);
}
//::///////////////////////////////////////////////
//:: Prefers
//:: Copyright (c) 2001 Bioware Corp.
@@ -2851,13 +2889,60 @@ location lLoc = GetLocation(OBJECT_SELF);
{
// * if get to this point then the PC did not have Weapon Focus
// * in anything then do additional logic to give an appropriate weapon
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1)
{
CreateBattleAxe(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1)
{
CreateWhip(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1)
{
CreateSpear(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1)
{
CreateHalberd(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1)
{
CreateSling(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1)
{
CreateLongbow(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1)
{
CreateKatana(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1)
{
CreateRapier(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1)
{
CreateSpecificDruidWeapon(oContainer, oLastOpener);
}
else
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1
|| GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1)
{
CreateSpecificWizardWeapon(oContainer, oLastOpener);