generated from Jaysyn/ModuleTemplate
1001 lines
44 KiB
Plaintext
1001 lines
44 KiB
Plaintext
/* CEP spells changelog.
|
|
*
|
|
* Here are recorded the changes made to BioWare scripts to accommodate
|
|
* CEP appearances, races, and items (and to fix some ommissions on BioWare's
|
|
* part).
|
|
* The actual functions follow the description of the changes.
|
|
*
|
|
|
|
Include files:
|
|
=============
|
|
|
|
nw_i0_spells
|
|
------------
|
|
AmIAHumanoid() -- Add brownie race (53).
|
|
|
|
x0_i0_spells
|
|
------------
|
|
spellsIsFlying() -- Add BioWare's flying seagull, G'Zhorb, pseudodragon,
|
|
and sharks (goblin, hammerhead, and mako), as well as
|
|
many (over 100) CEP appearances.
|
|
spellsIsImmuneToPetrification() -- Add BioWare's lich, invisible stalker,
|
|
skeleton warrior 2, helmed horror, mingon,
|
|
new golems (diamon, emerald, and ruby),
|
|
archery target, combat dummy, chair, table,
|
|
candelabra, chest, magic sparks (8 colors),
|
|
flame (3 sizes), and drow boat, as well as
|
|
many (over 150) CEP appearances.
|
|
spellsIsMindless() -- Add plant (52).
|
|
|
|
|
|
x0_i0_match
|
|
-----------
|
|
|
|
MatchDoubleHandedWeapon() -- Add falchion (305), falchion2 (316), maul (318),
|
|
mercurial greatsword (320), and double scimitar (321).
|
|
Remove BASE_ITEM_MAGICSTAFF.
|
|
MatchSingleHandedWeapon() -- Add trident (300), heavy pick (301), light pick (302),
|
|
sai (303), nunchaku (304), sap (308), assassin dagger (309), katar (310),
|
|
mace2 (312), kukri2 (313), fashion accessory (314), heavy mace (317),
|
|
mercurial longsword (319), goad (322), wind-fire wheel (323),
|
|
maug double sword (324), and longsword2 (330).
|
|
Add BASE_ITEM_MAGICSTAFF.
|
|
VerifyCombatMeleeTalent() -- Add plant (52).
|
|
Bug fix: single "=" in if's should be doubled: "==".
|
|
|
|
|
|
x2_i0_spells
|
|
------------
|
|
|
|
GetMeleeWeapon() -- Add trident (300), heavy pick (301), light pick (302),
|
|
sai (303), nunchaku (304), falchion (305), sap (308), assassin dagger (309), katar (310),
|
|
mace2 (312), kukri2 (313), fashion accessory (314), falchion2 (316), heavy mace (317), maul (318),
|
|
mercurial longsword (319), mercurial greatsword (320), double scimitar (321),
|
|
goad (322), wind-fire wheel (323), maug double sword (324), and longsword2 (330).
|
|
GetSlashingWeapon() -- Add falchion (305), kukri2 (313), falchion2 (316),
|
|
mercurial longsword (319), mercurial greatsword (320), double scimitar (321),
|
|
wind-fire wheel (323), maug double sword (324), and longsword2 (330).
|
|
|
|
|
|
prc_x2_itemprop
|
|
---------------
|
|
|
|
IPGetIsMeleeWeapon() -- Add trident (300), heavy pick (301), light pick (302),
|
|
sai (303), nunchaku (304), falchion (305), sap (308), assassin dagger (309), katar (310),
|
|
mace2 (312), kukri2 (313), fashion accessory (314), falchion2 (316), heavy mace (317), maul (318),
|
|
mercurial longsword (319), mercurial greatsword (320), double scimitar (321),
|
|
goad (322), wind-fire wheel (323), maug double sword (324), and longsword2 (330).
|
|
IPGetTargetedOrEquippedMeleeWeapon() -- Fix to check all three creature weapon slots.
|
|
|
|
|
|
Spell files recompiled:
|
|
======================
|
|
|
|
nw_s0_daze
|
|
x0_s0_fleshsto
|
|
x0_s0_laugh
|
|
x0_s1_petrbreath
|
|
x0_s1_petrgaze
|
|
x0_s1_petrtouch
|
|
x0_s3_alchem
|
|
x0_s3_calen
|
|
x0_s3_calhb
|
|
x2_s0_blckstff
|
|
x2_s0_bldethst
|
|
x2_s0_blssweap
|
|
x2_s0_darkfire
|
|
x2_s0_deafclng
|
|
x2_s0_flmeweap
|
|
x2_s0_grmagweap
|
|
x2_s0_holysword
|
|
x2_s0_keenedge
|
|
x2_s0_magcweap
|
|
x2_s1_beholdray
|
|
x2_s1_petrgaze
|
|
x2_s2_poisonwp
|
|
|
|
|
|
Spell files changed:
|
|
===================
|
|
|
|
x0_s1_petrtouch: strength of petrification now determined by petrifier, not petrifiee.
|
|
x2_s0_bldethst: spell cast at event now sent to item possessor instead of the item.
|
|
x2_s0_holysword: spell cast at event now sent to item possessor instead of the item.
|
|
x2_s0_keenedge: spell cast at event now sent to item possessor instead of the item.
|
|
x2_s1_beholdray: revised to route the petrification through DoPetrification() in x0_i0_spells.
|
|
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* ===========================================
|
|
* Here are the new versions of the functions
|
|
* from the include files.
|
|
* ===========================================
|
|
*/
|
|
|
|
|
|
// nw_i0_spells
|
|
// ------------
|
|
#include "prc_inc_spells"
|
|
// * Returns true if Target is a humanoid
|
|
int AmIAHumanoid(object oTarget)
|
|
{
|
|
int nRacial = GetRacialType(oTarget);
|
|
|
|
if ( nRacial == RACIAL_TYPE_DWARF ||
|
|
nRacial == RACIAL_TYPE_HALFELF ||
|
|
nRacial == RACIAL_TYPE_HALFORC ||
|
|
nRacial == RACIAL_TYPE_ELF ||
|
|
nRacial == RACIAL_TYPE_GNOME ||
|
|
nRacial == RACIAL_TYPE_HUMANOID_GOBLINOID ||
|
|
nRacial == RACIAL_TYPE_HALFLING ||
|
|
nRacial == RACIAL_TYPE_HUMAN ||
|
|
nRacial == RACIAL_TYPE_HUMANOID_MONSTROUS ||
|
|
nRacial == RACIAL_TYPE_HUMANOID_ORC ||
|
|
nRacial == RACIAL_TYPE_HUMANOID_REPTILIAN ||
|
|
nRacial == 53 ) // CEP: Brownie
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not humanoid.
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
// x0_i0_spells
|
|
// ------------
|
|
|
|
// * Returns TRUE or FALSE depending on whether the creature is flying or not.
|
|
int spellsIsFlying(object oCreature)
|
|
{
|
|
// First check for a flying phenotype.
|
|
int nPheno = GetPhenoType(oCreature);
|
|
if ( nPheno == 16 || nPheno == 25 )
|
|
// Part-based creature set to appear to be flying.
|
|
return TRUE;
|
|
|
|
// We are identifying appearances that are "flying".
|
|
// This operation is optimized into a two-tiered decision tree.
|
|
int nAppearance = GetAppearanceType(oCreature);
|
|
switch ( nAppearance / 100 )
|
|
{
|
|
case 0: // BioWare appearances 0 - 99.
|
|
switch ( nAppearance )
|
|
{
|
|
case 10: // APPEARANCE_TYPE_BAT
|
|
case 11: // APPEARANCE_TYPE_BAT_HORROR
|
|
case 52: // APPEARANCE_TYPE_ELEMENTAL_AIR
|
|
case 53: // APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER
|
|
case 55: // APPEARANCE_TYPE_FAIRY
|
|
case 68: // APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER
|
|
case 69: // APPEARANCE_TYPE_ELEMENTAL_WATER
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 1: // BioWare appearances 100 - 199.
|
|
// Take care of a largish range.
|
|
if ( 103 <= nAppearance && nAppearance <= 116 ) // LANTERN_ARCHON, QUASIT, IMP, MEPHIT_AIR, MEPHIT_DUST, MEPHIT_EARTH,
|
|
return TRUE; // MEPHIT_FIRE, MEPHIT_ICE, MEPHIT_SALT, MEPHIT_OOZE, MEPHIT_STEAM,
|
|
// MEPHIT_MAGMA, MEPHIT_WATER, and WILL_O_WISP.
|
|
// The rest can be done via a switch.
|
|
switch ( nAppearance )
|
|
{
|
|
case 100: // APPEARANCE_TYPE_HELMED_HORROR
|
|
case 144: // APPEARANCE_TYPE_FALCON
|
|
case 145: // APPEARANCE_TYPE_RAVEN
|
|
case 146: // APPEARANCE_TYPE_SHADOW
|
|
case 147: // APPEARANCE_TYPE_SHADOW_FIEND
|
|
case 156: // APPEARANCE_TYPE_SPECTRE
|
|
case 186: // APPEARANCE_TYPE_ALLIP
|
|
case 187: // APPEARANCE_TYPE_WRAITH
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 2: // BioWare appearances 200-299.
|
|
switch ( nAppearance )
|
|
{
|
|
case 291: // APPEARANCE_TYPE_SEAGULL_FLYING
|
|
case 299: // Beholder, G'Zhorb
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 3: // BioWare appearances 300-399.
|
|
if ( 374 <= nAppearance && nAppearance <= 385 ) // FAERIE_DRAGON, PSEUDODRAGON, WYRMLING_RED, WYRMLING_BLUE,
|
|
return TRUE; // WYRMLING_BLACK, WYRMLING_GREEN, WYRMLING_WHITE, WYRMLING_BRASS,
|
|
break; // WYRMLING_COPPER, WYRMLING_BRONZE, WYRMLING_SILVER, WYRMLING_GOLD
|
|
|
|
case 4: // BioWare appearances 400-499.
|
|
switch ( nAppearance )
|
|
{
|
|
case 401: // APPEARANCE_TYPE_BEHOLDER
|
|
case 402: // APPEARANCE_TYPE_BEHOLDER_MAGE
|
|
case 403: // APPEARANCE_TYPE_BEHOLDER_EYEBALL
|
|
case 419: // APPEARANCE_TYPE_HARPY
|
|
case 430: // APPEARANCE_TYPE_DEMI_LICH
|
|
case 447: // APPEARANCE_TYPE_SHARK_MAKO
|
|
case 448: // APPEARANCE_TYPE_SHARK_HAMMERHEAD
|
|
case 449: // APPEARANCE_TYPE_SHARK_GOBLIN
|
|
case 472: // APPEARANCE_TYPE_BEHOLDER_MOTHER
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
// Skipping cases 5-9. There are BioWare appearances, but none fly.
|
|
|
|
case 10: // CEP appearances 1000-1099.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1046: // Beholder: B*
|
|
case 1050: // Stirge: Cave*
|
|
case 1072: // Terradon
|
|
case 1073: // Flying Eye*
|
|
case 1087: // Terradon: Large
|
|
case 1099: // Visage*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 11: // CEP appearances 1100-1199.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1100: // Visage, Greater*
|
|
case 1104: // Belker*
|
|
case 1171: // Bugs*
|
|
case 1172: // Bugs, Large*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 12: // CEP appearances 1200-1299.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1218: // Mechanon, Cutter*
|
|
case 1259: // Vampiric Mist 2*
|
|
case 1275: // Eagle*
|
|
case 1281: // Bat, Battle*
|
|
case 1282: // Bat, Bone*
|
|
case 1290: // Wendigo*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 13: // CEP appearances 1300-1399.
|
|
if ( nAppearance == 1307 ) // Demilich B*
|
|
return TRUE;
|
|
if ( 1342 <= nAppearance && nAppearance <= 1347 ) // Elemental, Air L*; Elemental, Air M*; Elemental, Air S*;
|
|
return TRUE; // Elemental, Smoke L*; Elemental, Smoke M*; Elemental, Smoke S*
|
|
if ( 1354 <= nAppearance && nAppearance <= 1359 ) // Elemental, Water L*; Elemental, Water M*; Elemental, Water S*;
|
|
return TRUE; // Elemental, Fire L*; Elemental, Fire M*; Elemental, Fire S*
|
|
if ( 1366 <= nAppearance && nAppearance <= 1368 ) // Elemental, Radiance L*; Elemental, Radiance M*; Elemental, Radiance S*
|
|
return TRUE;
|
|
if ( 1372 <= nAppearance && nAppearance <= 1377 ) // Elemental, Steam L*; Elemental, Steam M*; Elemental, Steam S*;
|
|
return TRUE; // Elemental, Lightning L*; Elemental, Lightning M*; Elemental, Lightning S*
|
|
if ( 1384 <= nAppearance && nAppearance <= 1389 ) // Elemental, Ash L*; Elemental, Ash M*; Elemental, Ash S*;
|
|
return TRUE; // Elemental, Vacuum L*; Elemental, Vacuum M*; Elemental, Vacuum S*
|
|
break;
|
|
|
|
case 14: // CEP appearances 1400-1499.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1419: // Feather Snake**
|
|
case 1421: // Animated Wheel*
|
|
case 1425: // Animated Tome*
|
|
case 1426: // Animated Chest, Flying*
|
|
case 1431: // Stirge A*
|
|
case 1432: // Stirge B*
|
|
case 1435: // Flying Book A*
|
|
case 1436: // Flying Book B*
|
|
case 1437: // Flying Book C*
|
|
case 1494: // Wasp, Giant*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 15: // CEP appearances 1500-1599.
|
|
if ( nAppearance == 1508 ) // Beholder:Death Tyrant**
|
|
return TRUE;
|
|
if ( 1556 <= nAppearance && nAppearance <= 1565 ) // Dragon: Flying - Red**; Dragon: Flying - Black**; Dragon: Flying - Blue**;
|
|
return TRUE; // Dragon: Flying - Gold**; Dragon: Flying - White**; Dragon: Flying - Silver**;
|
|
// Dragon: Flying - Copper**; Dragon: Flying - Green**;
|
|
// Dragon: Flying - Brass**; Dragon: Flying - Bronze**
|
|
break;
|
|
|
|
// Skipping cases 16 and 17. No flying appearances.
|
|
|
|
case 18: // CEP appearances 1800-1899.
|
|
if ( 1807 <= nAppearance && nAppearance <= 1817 ) // Flying Vampire Female**; Flying Vampire Male**; Flying Kobold**;
|
|
// exclude Werecat Artic [SB]** // Flying Succubus**; [1811 skipped]; Flying Erinyes**; Flying Kobold B**;
|
|
return nAppearance != 1811; // Flying Kobold Chief A**; Flying Kobold Chief B**; Flying Kobold ShamanA**;
|
|
// Flying Kobold ShamanB**
|
|
if ( 1871 <= nAppearance && nAppearance <= 1882 ) // Elemental: Lava**; Elemental: Death**; Elemental: Floral**; Flying Book: Death**;
|
|
// exclude Barghest v2** // Flying Book: Myst**; Shark: Mako - low**; Shark: Goblin - low**; [1878 skipped];
|
|
return nAppearance != 1878; // Shark: Great White**; Shark: Great White - low**; Shark: Tiger**;
|
|
// Shark: Tiger - low**
|
|
if ( 1891 <= nAppearance && nAppearance <= 1893 ) // Eagle, Legend**; Bat: Fruit**; Bat: LeafNosed**
|
|
return TRUE;
|
|
break;
|
|
|
|
case 19: // CEP appearances 1900-1999.
|
|
if ( 1947 <= nAppearance && nAppearance <= 1952 ) // Bird: Owl, Brown**; Bird: Owl, Snowy**; Bird: Owl, Barn**; Bird: Owl, Great**;
|
|
return TRUE; // Bird: Owl, Gray**; Bird: Owl, Black**
|
|
if ( 1956 <= nAppearance && nAppearance <= 1965 ) // Bird: Macaw**; Bird: Macaw, Red**; Bird: Macaw, Blue**; Bird: Parrot, Grey**;
|
|
return TRUE; // Bird: Cockatoo, White**; Bird: Cockatoo, Black**; Bird: Parrot, Green**;
|
|
// Bird: Toucan**; Bird: Albatross**; Bird: Puffin**
|
|
if ( 1975 <= nAppearance && nAppearance <= 1979 ) // Bird: Blue Jay**; Bird: Cardinal**; Bird: Mockingbird**; Bird: Blackbird**;
|
|
return TRUE; // Bird: Oriole**
|
|
if ( nAppearance == 1988 ) // Dragonfly**
|
|
return TRUE;
|
|
if ( 1990 <= nAppearance && nAppearance <= 1998 ) // Fairy: Blue**; Fairy: Purple**; Fairy: Orange**; Fairy: Pink**;
|
|
return TRUE; // Will-O-Wisp: Pink**; Will-O-Wisp: Yellow**; Will-O-Wisp: Purple**;
|
|
// Will-O-Wisp: Orange**; Will-O-Wisp: Green**
|
|
break;
|
|
|
|
// Skipping cases 20 to 24. No flying appearances.
|
|
|
|
case 25: // CEP appearances 2500-2599.
|
|
if ( nAppearance == 2507 ) // Skully
|
|
return TRUE;
|
|
break;
|
|
|
|
// Skipping cases 26 to 30. No flying appearances.
|
|
|
|
case 31: // CEP appearances 3100-3199.
|
|
switch ( nAppearance )
|
|
{
|
|
case 3121: // Efreeti: Noble**
|
|
case 3122: // Dao**
|
|
case 3123: // Marid**
|
|
case 3124: // Djinni**
|
|
case 3127: // Ice Fiend 2**
|
|
case 3129: // Elemental: Fire, Grue
|
|
case 3130: // Elemental: Air, Grue
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
// Skipping cases 32 to 38. No flying appearances.
|
|
|
|
case 39: // CEP appearances 3900-3999.
|
|
if ( nAppearance == 3999 ) // Bat: Fruit, Small**
|
|
return TRUE;
|
|
break;
|
|
}//switch (nAppearance/100)
|
|
|
|
// Default: not flying.
|
|
return FALSE;
|
|
}//spellsIsFlying()
|
|
|
|
// * returns true if the creature has flesh
|
|
int spellsIsImmuneToPetrification(object oCreature)
|
|
{
|
|
// * GZ: Sept 2003 - Prevent people from petrifying DM, resulting in GUI even when
|
|
// effect is not successful.
|
|
// I think this is now prevention. -- TK.
|
|
if ( GetIsDM(oCreature) )
|
|
return TRUE;
|
|
|
|
// We are identifying appearances that have no flesh.
|
|
// (Plus the petrifiers -- medusa, gorgon, cockatrice.)
|
|
// This operation is optimized into a two-tiered decision tree.
|
|
int nAppearance = GetAppearanceType(oCreature);
|
|
switch ( nAppearance / 100 )
|
|
{
|
|
case 0: // BioWare appearances 0 - 99.
|
|
switch ( nAppearance )
|
|
{
|
|
case 11: // APPEARANCE_TYPE_BAT_HORROR
|
|
case 24: // APPEARANCE_TYPE_GOLEM_BONE
|
|
case 36: // APPEARANCE_TYPE_SKELETAL_DEVOURER
|
|
case 39: // APPEARANCE_TYPE_LICH
|
|
case 52: // APPEARANCE_TYPE_ELEMENTAL_AIR
|
|
case 53: // APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER
|
|
case 56: // APPEARANCE_TYPE_ELEMENTAL_EARTH
|
|
case 57: // APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER
|
|
return TRUE;
|
|
}
|
|
if ( 60 <= nAppearance && nAppearance <= 64 ) // APPEARANCE_TYPE_ELEMENTAL_FIRE, APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER,
|
|
return TRUE; // APPEARANCE_TYPE_SKELETON_PRIEST, APPEARANCE_TYPE_SKELETON_COMMON,
|
|
// APPEARANCE_TYPE_INVISIBLE_STALKER
|
|
if ( 68 <= nAppearance && nAppearance <= 71 ) // APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER, APPEARANCE_TYPE_ELEMENTAL_WATER,
|
|
return TRUE; // APPEARANCE_TYPE_SKELETON_WARRIOR_1, APPEARANCE_TYPE_SKELETON_WARRIOR_2
|
|
if ( 89 <= nAppearance && nAppearance <= 92 ) // APPEARANCE_TYPE_GOLEM_IRON, APPEARANCE_TYPE_SHIELD_GUARDIAN,
|
|
return TRUE; // APPEARANCE_TYPE_GOLEM_CLAY, APPEARANCE_TYPE_GOLEM_STONE
|
|
break;
|
|
|
|
case 1: // BioWare appearances 100 - 199.
|
|
switch ( nAppearance )
|
|
{
|
|
case 100: // APPEARANCE_TYPE_HELMED_HORROR
|
|
case 103: // APPEARANCE_TYPE_LANTERN_ARCHON
|
|
case 116: // APPEARANCE_TYPE_WILL_O_WISP
|
|
case 119: // APPEARANCE_TYPE_MINOGON
|
|
case 156: // APPEARANCE_TYPE_SPECTRE
|
|
case 169: // Golem, Emerald
|
|
case 173: // Golem, Ruby
|
|
case 182: // APPEARANCE_TYPE_SKELETON_CHIEFTAIN
|
|
case 186: // APPEARANCE_TYPE_ALLIP
|
|
case 187: // APPEARANCE_TYPE_WRAITH
|
|
return TRUE;
|
|
}
|
|
if ( 146 <= nAppearance && nAppearance <= 150 ) // APPEARANCE_TYPE_SHADOW, APPEARANCE_TYPE_SHADOW_FIEND
|
|
return TRUE; // APPEARANCE_TYPE_SKELETON_MAGE, Golem Diamond,
|
|
// APPEARANCE_TYPE_SKELETON_WARRIOR
|
|
break;
|
|
|
|
case 2: // BioWare appearances 200-299.
|
|
switch ( nAppearance )
|
|
{
|
|
case 200: // APPEARANCE_TYPE_ARCH_TARGET
|
|
case 201: // APPEARANCE_TYPE_COMBAT_DUMMY
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 3: // BioWare appearances 300-399.
|
|
if ( 352 == nAppearance ) // APPEARANCE_TYPE_MEDUSA
|
|
return TRUE;
|
|
if ( 367 <= nAppearance && nAppearance <= 370 ) // APPEARANCE_TYPE_GORGON, APPEARANCE_TYPE_COCKATRICE,
|
|
return TRUE; // APPEARANCE_TYPE_BASILISK, APPEARANCE_TYPE_HEURODIS_LICH
|
|
break;
|
|
|
|
case 4: // BioWare appearances 400-499.
|
|
switch ( nAppearance )
|
|
{
|
|
case 405: // APPEARANCE_TYPE_DRACOLICH
|
|
case 415: // APPEARANCE_TYPE_MINDFLAYER_ALHOON
|
|
case 418: // APPEARANCE_TYPE_DRAGON_SHADOW
|
|
case 420: // APPEARANCE_TYPE_GOLEM_MITHRAL
|
|
case 421: // APPEARANCE_TYPE_GOLEM_ADAMANTIUM
|
|
return TRUE;
|
|
}
|
|
if ( 430 <= nAppearance && nAppearance <= 445 ) // APPEARANCE_TYPE_DEMI_LICH, APPEARANCE_TYPE_OBJECT_CHAIR
|
|
return TRUE; // APPEARANCE_TYPE_OBJECT_TABLE, APPEARANCE_TYPE_OBJECT_CANDLE,
|
|
// APPEARANCE_TYPE_OBJECT_CHEST, APPEARANCE_TYPE_OBJECT_WHITE,
|
|
// APPEARANCE_TYPE_OBJECT_BLUE, APPEARANCE_TYPE_OBJECT_CYAN,
|
|
// APPEARANCE_TYPE_OBJECT_GREEN, APPEARANCE_TYPE_OBJECT_YELLOW,
|
|
// APPEARANCE_TYPE_OBJECT_ORANGE, APPEARANCE_TYPE_OBJECT_RED,
|
|
// APPEARANCE_TYPE_OBJECT_PURPLE, APPEARANCE_TYPE_OBJECT_FLAME_SMALL,
|
|
// APPEARANCE_TYPE_OBJECT_FLAME_MEDIUM, APPEARANCE_TYPE_OBJECT_FLAME_LARGE
|
|
if ( 469 == nAppearance ) // APPEARANCE_TYPE_ANIMATED_CHEST
|
|
return TRUE;
|
|
if ( 473 <= nAppearance && nAppearance <= 475 ) // APPEARANCE_TYPE_OBJECT_BOAT, APPEARANCE_TYPE_DWARF_GOLEM,
|
|
return TRUE; // APPEARANCE_TYPE_DWARF_HALFORC
|
|
break;
|
|
|
|
// Skipping cases 5-9. There are BioWare appearances, but all have flesh.
|
|
|
|
case 10: // CEP appearances 1000-1099.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1030: // Armor Stand*
|
|
case 1031: // Dracolich B*
|
|
case 1047: // Scarecrow*
|
|
case 1049: // Skeleton: Small*
|
|
case 1066: // Ghost Human: F-Red 3**
|
|
case 1095: // Wraith: Hooded 1*
|
|
case 1096: // Wraith: Hooded 2*
|
|
case 1099: // Visage*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 11: // CEP appearances 1100-1199.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1100: // Visage, Greater*
|
|
case 1101: // Demon: Vorlan*
|
|
case 1104: // Belker*
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case 12: // CEP appearances 1200-1299.
|
|
switch ( nAppearance )
|
|
{
|
|
case 1216: // Mechanon, Spiker*
|
|
case 1217: // Mechanon, Spider*
|
|
case 1218: // Mechanon, Cutter*
|
|
case 1257: // Minogon B*
|
|
case 1259: // Vampiric Mist 2*
|
|
case 1277: // Skeleton: Dwarf*
|
|
case 1281: // Bat, Battle*
|
|
case 1282: // Bat, Bone*
|
|
return TRUE;
|
|
}
|
|
if ( 1285 <= nAppearance && nAppearance <= 1289 ) // Skeleton: Red Eyes*; Skeleton: Flaming*; Skeleton: Green*
|
|
return TRUE; // Skeleton: Purple*; Skeleton: Yellow*
|
|
break;
|
|
|
|
case 13: // CEP appearances 1300-1399.
|
|
if ( 1307 == nAppearance || 1325 == nAppearance ) // Demilich B*; Vecna*
|
|
return TRUE;
|
|
if ( 1342 <= nAppearance && nAppearance <= 1389 ) // Elemental, Air L*; Elemental, Air M*; Elemental, Air S*;
|
|
return TRUE; // Elemental, Smoke L*; Elemental, Smoke M*; Elemental, Smoke S*;
|
|
// Elemental, Magma L*; Elemental, Magma M*; Elemental, Magma S*;
|
|
// Elemental, Ooze L*; Elemental, Ooze M*; Elemental, Ooze S*;
|
|
// Elemental, Water L*; Elemental, Water M*; Elemental, Water S*;
|
|
// Elemental, Fire L*; Elemental, Fire M*; Elemental, Fire S*;
|
|
// Elemental, Earth L*; Elemental, Earth M*; Elemental, Earth S*;
|
|
// Elemental, Ice L*; Elemental, Ice M*; Elemental, Ice S*;
|
|
// Elemental, Radiance L*; Elemental, Radiance M*; Elemental, Radiance S*;
|
|
// Elemental, Mineral L*; Elemental, Mineral M*; Elemental, Mineral S*;
|
|
// Elemental, Steam L*; Elemental, Steam M*; Elemental, Steam S*;
|
|
// Elemental, Lightning L*; Elemental, Lightning M*; Elemental, Lightning S*;
|
|
// Elemental, Salt L*; Elemental, Salt M*; Elemental, Salt S*;
|
|
// Elemental, Dust L*; Elemental, Dust M*; Elemental, Dust S*;
|
|
// Elemental, Ash L*; Elemental, Ash M*; Elemental, Ash S*;
|
|
break; // Elemental, Vacuum L*; Elemental, Vacuum M*; Elemental, Vacuum S*
|
|
|
|
case 14: // CEP appearances 1400-1499.
|
|
if ( 1421 <= nAppearance && nAppearance <= 1426 ) // Animated Wheel*; Animated Table*; [1423 skipped]; Animated Chest*;
|
|
// Exclude Jagre** // Animated Tome*; Animated Chest, Flying*
|
|
return nAppearance != 1423;
|
|
if ( 1435 <= nAppearance && nAppearance <= 1437 ) // Flying Book A*; Flying Book B*; Flying Book C*
|
|
return TRUE;
|
|
if ( 1440 <= nAppearance && nAppearance <= 1447 ) // Skeleton, Pirate 1*; Skeleton, Pirate 2*; Skeleton, Pirate 3*; [1443 and 1444 skipped];
|
|
// Exclude Zombie, Pirate 2*; Zombie, Pirate 3*.// Skeleton, Pirate 4*; Skeleton, Pirate 5*; Skeleton, Pirate 6*
|
|
return nAppearance != 1443 && nAppearance != 1444;
|
|
if ( 1449 == nAppearance || 1451 == nAppearance ) // Ghost Pirate*; Skeleton, Ogre*
|
|
return TRUE;
|
|
if ( 1486 <= nAppearance && nAppearance <= 1491 ) // Golem: Ruby*; Golem: Emerald*; Golem: Citrine*; Golem: Sapphire*;
|
|
return TRUE; // Golem: Amethyst*; Golem: Obsidian*
|
|
if ( 1498 <= nAppearance ) // Maug*; Maug, Lieutenant*
|
|
return TRUE;
|
|
break;
|
|
|
|
case 15: // CEP appearances 1500-1599.
|
|
if ( 1500 == nAppearance || 1504 == nAppearance ) // Maug, Commander*; Maug, Captain*
|
|
return TRUE;
|
|
if ( 1509 <= nAppearance && nAppearance <= 1514 ) // Golem: Hematite**; Golem: Topaz**; Golem: Diamond**; [1512 skipped];
|
|
// Exclude Dragon: Saphire** // Golem: Blackrock**; Golem: Maztica**
|
|
return nAppearance != 1512;
|
|
if ( 1532 <= nAppearance && nAppearance <= 1536 ) // Golem: Weathered**; Golem: Damaged 1**; Golem: Damaged 2**;
|
|
// Exclude Ogre, 3.5e DLA** // [1535 skipped]; Basilisk - Large**
|
|
return nAppearance != 1535;
|
|
if ( 1579 <= nAppearance && nAppearance <= 1581 ) // Lizard: Lich**; Lizard: Lich, Chief**; Lizard: Lich, Risen**
|
|
return TRUE;
|
|
break;
|
|
|
|
// Skipping case 16. All appearances have flesh.
|
|
|
|
case 17: // CEP appearances 1700-1799.
|
|
if ( 1755 <= nAppearance && nAppearance <= 1769 ) // Shield Guard Blue**; Shield Guard Vuong**; Shield Guard Wood**;
|
|
// Exclude CEP reserved line. // Elemental: Ice 2**; [1759 skipped]; Shield Guard: Gold**;
|
|
return nAppearance != 1759; // Shield Guard: Fatal**; Shield Guard: Black**; Shield Guard: Clan**;
|
|
// Shield Guard: Mage**; Shield Guard: Knight**; Shield Guard: Mortar**;
|
|
break; // Shield Guard: Bizarro**; Shield Guard: Rust**; Skeleton, Dynamic**
|
|
|
|
case 18: // CEP appearances 1800-1899.
|
|
if ( 1869 <= nAppearance && nAppearance <= 1875 ) // Shadow Lord**; Elemental: Ice**; Elemental: Lava**; Elemental: Death**;
|
|
// Exclude Elemental: Floral** // [1873 skipped]; Flying Book: Death**; Flying Book: Myst**
|
|
return nAppearance != 1873;
|
|
break;
|
|
|
|
case 19: // CEP appearances 1900-1999.
|
|
if ( 1942 == nAppearance ) // Golem: Atlantis**
|
|
return TRUE;
|
|
if ( 1994 <= nAppearance && nAppearance <= 1998 ) // Will-O-Wisp: Pink**; Will-O-Wisp: Yellow**; Will-O-Wisp: Purple**;
|
|
return TRUE; // Will-O-Wisp: Orange**; Will-O-Wisp: Green**
|
|
break;
|
|
|
|
// Skipping cases 20 to 24. All appearances have flesh.
|
|
|
|
case 25: // CEP appearances 2500-2599.
|
|
if ( nAppearance == 2507 ) // Skully
|
|
return TRUE;
|
|
break;
|
|
|
|
// Skipping cases 26 to 30. All appearances have flesh.
|
|
|
|
case 31: // CEP appearances 3100-3199.
|
|
if ( nAppearance <= 3116 ) // Ghost Human: F-Red 1**; Ghost Human: F-Red 2**; Ghost Human: F-Blue 1**;
|
|
return TRUE; // Ghost Human: F-Blue 2**; Ghost Human: F-Blue 3**; Ghost Human: F-Green 1**;
|
|
// Ghost Human: F-Green 2**; Ghost Human: F-Green 3**; Ghost Human: M-Red 1**;
|
|
// Ghost Human: M-Red 2**; Ghost Human: M-Red 3**; Ghost Human: M-Blue 1**;
|
|
// Ghost Human: M-Blue 2**; Ghost Human: M-Blue 3**; Ghost Human: M-Green 1**;
|
|
// Ghost Human: M-Green 2**; Ghost Human: M-Green 3**
|
|
if ( 3126 <= nAppearance && nAppearance <= 3130 ) // Ice Fiend 1**; Ice Fiend 2**; Ice Fiend 3**;
|
|
return TRUE; // Elemental: Fire, Grue; Elemental: Air, Grue
|
|
break;
|
|
}//switch (nAppearance/100)
|
|
|
|
// 03/07/2005 CraigW - Petrification immunity can also be granted as an item property.
|
|
// Default: not immune, unless protected by an item property.
|
|
return ResistSpell(OBJECT_SELF, oCreature) == 2;
|
|
}
|
|
|
|
// * returns true if oCreature does not have a mind
|
|
int spellsIsMindless(object oCreature)
|
|
{
|
|
switch ( GetRacialType(oCreature) )
|
|
{
|
|
case RACIAL_TYPE_ELEMENTAL:
|
|
case RACIAL_TYPE_UNDEAD:
|
|
case RACIAL_TYPE_VERMIN:
|
|
case RACIAL_TYPE_CONSTRUCT:
|
|
case RACIAL_TYPE_OOZE:
|
|
case 52: // CEP: Plant
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: has a mind.
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
// x0_i0_match
|
|
// -----------
|
|
|
|
// TRUE if the item is a double-handed melee weapon (for medium creatures).
|
|
int MatchDoubleHandedWeapon(object oItem)
|
|
{
|
|
switch ( GetBaseItemType(oItem) )
|
|
{
|
|
// BioWare weapons
|
|
case BASE_ITEM_DIREMACE:
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
case BASE_ITEM_QUARTERSTAFF:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
case BASE_ITEM_TRIDENT:
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
// CEP weapons
|
|
case 305: // falchion
|
|
case 316: // falchion2
|
|
case 318: // maul
|
|
case 320: // mercurial greatsword
|
|
case 321: // double scimitar
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not a double-handed melee weapon.
|
|
return FALSE;
|
|
}
|
|
|
|
// TRUE if the item is a single-handed melee weapon (for medium creatures).
|
|
int MatchSingleHandedWeapon(object oItem)
|
|
{
|
|
int nItemType = GetBaseItemType(oItem);
|
|
if ( nItemType < 300 )
|
|
// BioWare weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_CLUB:
|
|
case BASE_ITEM_DAGGER:
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_KAMA:
|
|
case BASE_ITEM_KATANA:
|
|
case BASE_ITEM_KUKRI:
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
case BASE_ITEM_LIGHTMACE:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_MAGICSTAFF:
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
case BASE_ITEM_RAPIER:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_SHORTSWORD:
|
|
case BASE_ITEM_SICKLE:
|
|
case BASE_ITEM_WARHAMMER:
|
|
case BASE_ITEM_WHIP:
|
|
return TRUE;
|
|
}
|
|
else
|
|
// CEP weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case 300: // CEP trident
|
|
case 301: // heavy pick
|
|
case 302: // light pick
|
|
case 303: // sai
|
|
case 304: // nunchaku
|
|
case 308: // sap
|
|
case 309: // assassin dagger
|
|
case 310: // katar
|
|
case 312: // mace2
|
|
case 313: // kukri2
|
|
case 314: // fashion accessory
|
|
case 317: // heavy mace
|
|
case 319: // mercurial longsword
|
|
case 322: // goad
|
|
case 323: // wind-fire wheel
|
|
case 324: // maug double sword
|
|
case 330: // longsword2
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not a single-handed melee weapon.
|
|
return FALSE;
|
|
}
|
|
|
|
int VerifyCombatMeleeTalent(talent tUse, object oTarget)
|
|
{
|
|
// Checks depend on the feat being used.
|
|
int nFeatID = GetIdFromTalent(tUse);
|
|
if ( nFeatID == FEAT_SAP || nFeatID == FEAT_STUNNING_FIST )
|
|
{
|
|
// Do not stun/sap those known to be immune to such things.
|
|
int nRacial = GetRacialType(oTarget);
|
|
return nRacial != RACIAL_TYPE_CONSTRUCT &&
|
|
nRacial != RACIAL_TYPE_UNDEAD &&
|
|
nRacial != RACIAL_TYPE_ELEMENTAL &&
|
|
nRacial != RACIAL_TYPE_VERMIN &&
|
|
nRacial != 52; // plant (CEP)
|
|
}
|
|
else if ( nFeatID == FEAT_SMITE_EVIL )
|
|
// Do not smite the good.
|
|
return GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
|
|
|
|
else if ( nFeatID == FEAT_SMITE_GOOD )
|
|
// Do not smite the evil.
|
|
return GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL;
|
|
|
|
// Not a feat with a special check; allow it.
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// x2_i0_spells
|
|
// ------------
|
|
|
|
// Returns TRUE, if oItem is a melee weapon
|
|
int GetMeleeWeapon(object oItem)
|
|
{
|
|
int nItemType = GetBaseItemType(oItem);
|
|
if ( nItemType < 300 )
|
|
// BioWare weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_CLUB:
|
|
case BASE_ITEM_DAGGER:
|
|
case BASE_ITEM_DIREMACE:
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
case BASE_ITEM_KAMA:
|
|
case BASE_ITEM_KATANA:
|
|
case BASE_ITEM_KUKRI:
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
case BASE_ITEM_LIGHTMACE:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_MAGICSTAFF:
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
case BASE_ITEM_QUARTERSTAFF:
|
|
case BASE_ITEM_RAPIER:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
case BASE_ITEM_SHORTSWORD:
|
|
case BASE_ITEM_SICKLE:
|
|
case BASE_ITEM_TRIDENT:
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
case BASE_ITEM_WARHAMMER:
|
|
case BASE_ITEM_WHIP:
|
|
return TRUE;
|
|
}
|
|
else
|
|
// CEP weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case 300: // CEP trident
|
|
case 301: // heavy pick
|
|
case 302: // light pick
|
|
case 303: // sai
|
|
case 304: // nunchaku
|
|
case 305: // falchion
|
|
case 308: // sap
|
|
case 309: // assassin dagger
|
|
case 310: // katar
|
|
case 312: // mace2
|
|
case 313: // kukri2
|
|
case 314: // fashion accessory
|
|
case 316: // falchion2
|
|
case 317: // heavy mace
|
|
case 318: // maul
|
|
case 319: // mercurial longsword
|
|
case 320: // mercurial greatsword
|
|
case 321: // double scimitar
|
|
case 322: // goad
|
|
case 323: // wind-fire wheel
|
|
case 324: // maug double sword
|
|
case 330: // longsword2
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not a melee weapon.
|
|
return FALSE;
|
|
}
|
|
|
|
// Returns TRUE if oItem is a slashing weapon.
|
|
int GetSlashingWeapon(object oItem)
|
|
{
|
|
int nItemType = GetBaseItemType(oItem);
|
|
if ( nItemType < 300 )
|
|
// BioWare weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_KAMA:
|
|
case BASE_ITEM_KATANA:
|
|
case BASE_ITEM_KUKRI:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_SICKLE:
|
|
case BASE_ITEM_THROWINGAXE:
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
case BASE_ITEM_WHIP:
|
|
return TRUE;
|
|
}
|
|
else
|
|
// CEP weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case 305: // falchion
|
|
case 313: // kukri2
|
|
case 316: // falchion2
|
|
case 319: // mercurial longsword
|
|
case 320: // mercurial greatsword
|
|
case 321: // double scimitar
|
|
case 323: // wind-fire wheel
|
|
case 324: // maug double sword
|
|
case 330: // longsword2
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not a slashing weapon.
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
// prc_x2_itemprop
|
|
// ---------------
|
|
|
|
// Returns TRUE if oItem is a melee weapon.
|
|
int IPGetIsMeleeWeapon(object oItem)
|
|
{
|
|
int nItemType = GetBaseItemType(oItem);
|
|
if ( nItemType < 300 )
|
|
// BioWare weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case BASE_ITEM_BASTARDSWORD:
|
|
case BASE_ITEM_BATTLEAXE:
|
|
case BASE_ITEM_CLUB:
|
|
case BASE_ITEM_DAGGER:
|
|
case BASE_ITEM_DIREMACE:
|
|
case BASE_ITEM_DOUBLEAXE:
|
|
case BASE_ITEM_DWARVENWARAXE:
|
|
case BASE_ITEM_GREATAXE:
|
|
case BASE_ITEM_GREATSWORD:
|
|
case BASE_ITEM_HALBERD:
|
|
case BASE_ITEM_HANDAXE:
|
|
case BASE_ITEM_HEAVYFLAIL:
|
|
case BASE_ITEM_KAMA:
|
|
case BASE_ITEM_KATANA:
|
|
case BASE_ITEM_KUKRI:
|
|
case BASE_ITEM_LIGHTFLAIL:
|
|
case BASE_ITEM_LIGHTHAMMER:
|
|
case BASE_ITEM_LIGHTMACE:
|
|
case BASE_ITEM_LONGSWORD:
|
|
case BASE_ITEM_MAGICSTAFF:
|
|
case BASE_ITEM_MORNINGSTAR:
|
|
case BASE_ITEM_QUARTERSTAFF:
|
|
case BASE_ITEM_RAPIER:
|
|
case BASE_ITEM_SCIMITAR:
|
|
case BASE_ITEM_SCYTHE:
|
|
case BASE_ITEM_SHORTSPEAR:
|
|
case BASE_ITEM_SHORTSWORD:
|
|
case BASE_ITEM_SICKLE:
|
|
case BASE_ITEM_TRIDENT:
|
|
case BASE_ITEM_TWOBLADEDSWORD:
|
|
case BASE_ITEM_WARHAMMER:
|
|
case BASE_ITEM_WHIP:
|
|
return TRUE;
|
|
}
|
|
else
|
|
// CEP weapons.
|
|
switch ( nItemType )
|
|
{
|
|
case 300: // CEP trident
|
|
case 301: // heavy pick
|
|
case 302: // light pick
|
|
case 303: // sai
|
|
case 304: // nunchaku
|
|
case 305: // falchion
|
|
case 308: // sap
|
|
case 309: // assassin dagger
|
|
case 310: // katar
|
|
case 312: // mace2
|
|
case 313: // kukri2
|
|
case 314: // fashion accessory
|
|
case 316: // falchion2
|
|
case 317: // heavy mace
|
|
case 318: // maul
|
|
case 319: // mercurial longsword
|
|
case 320: // mercurial greatsword
|
|
case 321: // double scimitar
|
|
case 322: // goad
|
|
case 323: // wind-fire wheel
|
|
case 324: // maug double sword
|
|
case 330: // longsword2
|
|
return TRUE;
|
|
}
|
|
|
|
// Default: not a melee weapon.
|
|
return FALSE;
|
|
}
|
|
|
|
// Returns the targeted object if it is a melee weapon.
|
|
// Otherwise returns a melee weapon equipped by the target.
|
|
object IPGetTargetedOrEquippedMeleeWeapon()
|
|
{
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
// Abort on an invalid target.
|
|
if ( oTarget == OBJECT_INVALID )
|
|
return OBJECT_INVALID;
|
|
|
|
// See if the target is a melee weapon.
|
|
if ( GetObjectType(oTarget) == OBJECT_TYPE_ITEM )
|
|
{
|
|
if ( IPGetIsMeleeWeapon(oTarget) )
|
|
return oTarget;
|
|
else
|
|
// Items cannot euip other items, so we're done.
|
|
return OBJECT_INVALID;
|
|
}
|
|
|
|
// Check the equipped items.
|
|
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
|
if ( oWeapon != OBJECT_INVALID && IPGetIsMeleeWeapon(oWeapon) )
|
|
return oWeapon;
|
|
|
|
// Tough to have a weapon in the left hand without one in the right, but...
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
|
if ( oWeapon != OBJECT_INVALID && IPGetIsMeleeWeapon(oWeapon) )
|
|
return oWeapon;
|
|
|
|
// Don't forget the creature weapons.
|
|
// These are assumed to be melee weapons.
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget);
|
|
if ( oWeapon != OBJECT_INVALID )
|
|
return oWeapon;
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget);
|
|
if ( oWeapon != OBJECT_INVALID )
|
|
return oWeapon;
|
|
oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget);
|
|
if ( oWeapon != OBJECT_INVALID )
|
|
return oWeapon;
|
|
|
|
// Default: no valid weapon target.
|
|
return OBJECT_INVALID;
|
|
}
|
|
|