16 Commits
v0.02 ... v0.07

Author SHA1 Message Date
Jaysyn904
6585d40a0f Major script update for 8 class support
Major script update for 8 class support.

prc_wipeNSB.nss

PRC_S_spellb.nss

prc_amagsys_gain.nss	- AMSCompatibilityCheck()

prc_prereq.nss			- Dragonheart(), KnightWeave()

prc_onenter.nss			- OnEnter_AMSCompatibilityCheck()

prc_metamagic.nss		- GetHasSpontaneousNSBClass()

prc_feats.nss

prc_dracactive.nss

prc_debug_hfeatm.nss

prc_cbtmed_spnhl.nss

psi_powconv.nss

psi_pow_bstpwr.nss

x2_pc_umdcheck.nss
2023-03-11 12:04:30 -05:00
Jaysyn904
a668275943 Major include update for 8 class support
Major include update for 8 class support

inv_inc_invfunc.nss		- GetHighestInvokerLevel(), GetFirstInvocationClassPosition(), GetPrimaryInvocationClass()

inc_epicspellfnc.nss	- GetCanLearnSeed()

inc_newspellbook.nss 	- CheckNewSpellbooks(), GetSpellslotLevel()

moi_inc_moifunc.nss		- GetHighestMeldshaperLevel(), GetPrimaryIncarnumClass(), GetFirstIncarnumClassPosition()

nw_o2_coninclude.nss	- nDetermineClassToUse()

prc_inc_castlvl.nss		- GetArcanePRCLevels(), GetDivinePRCLevels(), GetFirstArcaneClassPosition(), GetFirstDivineClassPosition(), GetPrimaryArcaneClass(), GetPrimaryDivineClass(), GetPrimarySpellcastingClass(), UrPriestCL(), GetLevelByTypeArcane(), GetLevelByTypeDivine(), [Needs marker feats]

prc_inc_clsfunc.nss		- [Needs marker feats]

prc_inc_core.nss		- PRCGetSpellLevel(), UseNewSpellBook(), PRCGetHasSpell(), PRCGetIsRealSpellKnown()

prc_inc_domain.nss		- CastDomainSpell()

prc_inc_function.nss	- SetupCharacterData(), [Needs marker feats]

prc_inc_itmrstr.nss		- _prc_inc_itmrstr_ApplyWizardry()

prc_inc_leadersh.nss	- StoreCohort()

prc_inc_spells.nss		- GetPrCAdjustedCasterLevelByType(), GetLevelByTypeArcaneFeats(), GetLevelByTypeDivineFeats(), PRCDecrementRemainingSpellUses(), PRCGetSpellUsesLeft()

prc_shifter_info.nss	- _prc_inc_PrintDebugItem(), _prc_inc_PrintShape()

psi_inc_core.nss		- GetHighestManifesterLevel(), GetPrimaryPsionicClass(), GetFirstPsionicClassPosition()

shd_inc_shdfunc.nss		- GetHighestShadowcasterLevel(), GetPrimaryShadowMagicClass(), GetFirstShadowMagicClassPosition()

tob_inc_recovery.nss	- RecoverPrCAbilities()

tob_inc_tobfunc.nss		- GetHighestInitiatorLevel(), GetPrimaryBladeMagicClass(), GetFirstBladeMagicClassPosition()

true_inc_trufunc.nss	- GetHighestTrueSpeakerLevel()
2023-03-11 01:13:46 -05:00
Jaysyn904
b266d1350e Removed changed includes
Removed changed includes.  Screwed up previous commit.
2023-03-11 01:12:18 -05:00
Jaysyn904
525a4f8ccc Revert "Revert "Major update""
This reverts commit 5de4086e8e.
2023-03-11 01:08:00 -05:00
Jaysyn904
5de4086e8e Revert "Major update"
This reverts commit d37dc3e68d.
2023-03-11 01:06:21 -05:00
Jaysyn904
d37dc3e68d Major update
inv_inc_invfunc.nss		- GetHighestInvokerLevel(), GetFirstInvocationClassPosition(), GetPrimaryInvocationClass()

inc_epicspellfnc.nss	- GetCanLearnSeed()

inc_newspellbook.nss 	- CheckNewSpellbooks(), GetSpellslotLevel()

moi_inc_moifunc.nss		- GetHighestMeldshaperLevel(), GetPrimaryIncarnumClass(), GetFirstIncarnumClassPosition()

nw_o2_coninclude.nss	- nDetermineClassToUse()

prc_inc_castlvl.nss		- GetArcanePRCLevels(), GetDivinePRCLevels(), GetFirstArcaneClassPosition(), GetFirstDivineClassPosition(), GetPrimaryArcaneClass(), GetPrimaryDivineClass(), GetPrimarySpellcastingClass(), UrPriestCL(), GetLevelByTypeArcane(), GetLevelByTypeDivine(), [Needs marker feats]

prc_inc_clsfunc.nss		- [Needs marker feats]

prc_inc_core.nss		- PRCGetSpellLevel(), UseNewSpellBook(), PRCGetHasSpell(), PRCGetIsRealSpellKnown()

prc_inc_domain.nss		- CastDomainSpell()

prc_inc_function.nss	- SetupCharacterData(), [Needs marker feats]

prc_inc_itmrstr.nss		- _prc_inc_itmrstr_ApplyWizardry()

prc_inc_leadersh.nss	- StoreCohort()

prc_inc_spells.nss		- GetPrCAdjustedCasterLevelByType(), GetLevelByTypeArcaneFeats(), GetLevelByTypeDivineFeats(), PRCDecrementRemainingSpellUses(), PRCGetSpellUsesLeft()

prc_shifter_info.nss	- _prc_inc_PrintDebugItem(), _prc_inc_PrintShape()

psi_inc_core.nss		- GetHighestManifesterLevel(), GetPrimaryPsionicClass(), GetFirstPsionicClassPosition()

shd_inc_shdfunc.nss		- GetHighestShadowcasterLevel(), GetPrimaryShadowMagicClass(), GetFirstShadowMagicClassPosition()

tob_inc_recovery.nss	- RecoverPrCAbilities()

tob_inc_tobfunc.nss		- GetHighestInitiatorLevel(), GetPrimaryBladeMagicClass(), GetFirstBladeMagicClassPosition()

true_inc_trufunc.nss	- GetHighestTrueSpeakerLevel()
2023-03-11 01:04:56 -05:00
Jaysyn904
e2d524963b Updated Invoking include to allow invoking past 3rd class
Updated Invoking include to allow invoking past 3rd class.  Updated epic spell include to allow epic spellcasting past 3rd class.  Updated nwscript compiler for .35.  Added .35 change log / notes.
2023-03-10 19:04:21 -05:00
Jaysyn904
ef28d788a3 Updated Disciple of Dispater's Iron Power for new weapon types
Updated Disciple of Dispater's Iron Power for new weapon types. Added note about adding new weapons.
2023-03-10 10:12:48 -05:00
Jaysyn904
f59214cb64 @hbwhipshot fixed template stacking
@hbwhipshot fixed template stacking
2023-03-09 14:06:10 -05:00
Jaysyn904
6d37f86b11 Create prc_kngtw_sp_gen.nss
Reenable spellcasting for Knight of the Weave.
2023-03-07 17:52:00 -05:00
Jaysyn904
85dd497fd8 Create nwsyc commands.txt 2023-03-06 17:49:23 -05:00
Jaysyn904
033f03b473 Updated TLK
Updated TLK & release archive.
2023-03-03 19:14:10 -05:00
Jaysyn904
238a29a9ca Updated Foe Hunter for new Favored Enemies
Updated Foe Hunter for new Favored Enemies
2023-03-03 18:00:07 -05:00
Jaysyn904
dcfc06d620 Update feat.2da
Disabled Craft Rod & related feats.
2023-03-03 16:13:58 -05:00
Jaysyn904
ea678dd90a Fixed Eagle Claw being a martial weapon
Fixed Eagle Claw being a martial weapon.  Set Duskblade to have Scythe prof @ 1st level.
2023-03-03 14:52:44 -05:00
Jaysyn904
28140be897 Update Archmage check.
Update Archmage check.
2023-02-27 22:07:09 -05:00
51 changed files with 2319 additions and 1233 deletions

Binary file not shown.

11
nwsyc commands.txt Normal file
View File

@@ -0,0 +1,11 @@
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents Path of Ascension" /var/www/html/poa/ "/mnt/pve/nwn/poa/server/modules/poa.mod"
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents Land of Destiny" /var/www/html/destiny/ "/mnt/pve/nwn/destiny/server/modules/Land.mod"
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents Underworld 2" /var/www/html/under/ "/mnt/pve/nwn/under/server/modules/underworld.mod"
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents The Frozen North" /var/www/html/north/ "/mnt/pve/nwn/north/server/modules/tfn.mod"
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents Lankhmar Nights" /var/www/html/ "/mnt/pve/nwn/mouser/server/modules/mouser.mod"
sudo ./nwsync_write --verbose --path "/mnt/pve/maint/server/hak" --description="PRC presents Horde of Orcs" /var/www/html/horde/ "/mnt/pve/nwn/horde/server/modules/horde.mod"

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +1,37 @@
2DA V2.0
FeatLabel FeatIndex List GrantedOnLevel OnMenu
0 Hated_Enemy_Dwarf 4326 2 1 0
1 Hated_Enemy_elf 4327 2 1 0
2 Hated_Enemy_gnome 4328 2 1 0
3 Hated_Enemy_halfling 4329 2 1 0
4 Hated_Enemy_halfelf 4330 2 1 0
5 Hated_Enemy_halforc 4331 2 1 0
6 Hated_Enemy_human 4332 2 1 0
7 Hated_Enemy_abberation 4333 2 1 0
8 Hated_Enemy_animal 4334 2 1 0
9 Hated_Enemy_beast 4335 2 1 0
10 Hated_Enemy_construct 4336 2 1 0
11 Hated_Enemy_dragon 4337 2 1 0
12 Hated_Enemy_goblin 4338 2 1 0
13 Hated_Enemy_monstrous 4339 2 1 0
14 Hated_Enemy_orc 4340 2 1 0
15 Hated_Enemy_reptile 4341 2 1 0
16 Hated_Enemy_elemental 4342 2 1 0
17 Hated_Enemy_fey 4343 2 1 0
18 Hated_Enemy_giant 4344 2 1 0
19 Hated_Enemy_mbeast 4345 2 1 0
20 Hated_Enemy_outsider 4346 2 1 0
21 Hated_Enemy_shapechanger 4347 2 1 0
22 Hated_Enemy_undead 4348 2 1 0
23 Hated_Enemy_vermin 4349 2 1 0
24 Rancor 4322 3 1 0
25 Death_Attack 4325 3 10 1
26 DR 4323 3 2 0
27 SR 4324 3 4 0
28 FEAT_EPIC_BLINDING_SPEED 491 0 -1 1
29 DefArrow 8 0 -1 0
30 TwoWeap 41 0 -1 0
31 Ambidex 1 0 -1 0
FeatLabel FeatIndex List GrantedOnLevel OnMenu
0 Hated_Enemy_Dwarf 4326 2 1 0
1 Hated_Enemy_elf 4327 2 1 0
2 Hated_Enemy_gnome 4328 2 1 0
3 Hated_Enemy_halfling 4329 2 1 0
4 Hated_Enemy_halfelf 4330 2 1 0
5 Hated_Enemy_halforc 4331 2 1 0
6 Hated_Enemy_human 4332 2 1 0
7 Hated_Enemy_abberation 4333 2 1 0
8 Hated_Enemy_animal 4334 2 1 0
9 Hated_Enemy_beast 4335 2 1 0
10 Hated_Enemy_construct 4336 2 1 0
11 Hated_Enemy_dragon 4337 2 1 0
12 Hated_Enemy_goblin 4338 2 1 0
13 Hated_Enemy_monstrous 4339 2 1 0
14 Hated_Enemy_orc 4340 2 1 0
15 Hated_Enemy_reptile 4341 2 1 0
16 Hated_Enemy_elemental 4342 2 1 0
17 Hated_Enemy_fey 4343 2 1 0
18 Hated_Enemy_giant 4344 2 1 0
19 Hated_Enemy_mbeast 4345 2 1 0
20 Hated_Enemy_outsider 4346 2 1 0
21 Hated_Enemy_shapechanger 4347 2 1 0
22 Hated_Enemy_undead 4348 2 1 0
23 Hated_Enemy_vermin 4349 2 1 0
24 FEAT_HATED_ENEMY_OOZE 3469 2 1 0
25 FEAT_HATED_ENEMY_PLANT 3470 2 1 0
26 Rancor 4322 3 1 0
27 Death_Attack 4325 3 10 1
28 DR 4323 3 2 0
29 SR 4324 3 4 0
30 FEAT_EPIC_BLINDING_SPEED 491 0 -1 1
31 DefArrow 8 0 -1 0
32 TwoWeap 41 0 -1 0
33 Ambidex 1 0 -1 0

View File

@@ -3470,8 +3470,8 @@
3466 FEAT_AP_CONTAGION3 777 16825553 is_Contagion **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2087 3467 1 3 **** **** **** **** **** **** **** **** **** **** **** FEAT_AP_CONTAGION3 3 **** **** **** **** **** 0 1
3467 FEAT_AP_CONTAGION4 777 16825553 is_Contagion **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2087 3468 1 4 **** **** **** **** **** **** **** **** **** **** **** FEAT_AP_CONTAGION4 3 **** **** **** **** **** 0 1
3468 FEAT_AP_CONTAGION5 777 16825553 is_Contagion **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2087 **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_AP_CONTAGION5 3 **** **** **** **** **** 0 1
3469 **** 16825602 16825603 is_CharmPer **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3470 1 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_CO_CORRUPTSOUL1 3 **** **** **** **** **** 0 1
3470 **** 16825602 16825603 is_CharmPer **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3471 1 2 **** **** **** **** **** **** **** **** **** **** **** FEAT_CO_CORRUPTSOUL2 3 **** **** **** **** **** 0 1
3469 FEAT_HATED_ENEMY_OOZE 16790073 16824269 ife_racehate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** 55 **** **** 2354 **** **** **** **** **** **** **** FEAT_HATED_ENEMY_OOZE 6 **** **** **** **** **** 0 1
3470 FEAT_HATED_ENEMY_PLANT 16790074 16824269 ife_racehate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** 55 **** **** 2355 **** **** **** **** **** **** **** FEAT_HATED_ENEMY_PLANT 6 **** **** **** **** **** 0 1
3471 **** 16825602 16825603 is_CharmPer **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3472 1 3 **** **** **** **** **** **** **** **** **** **** **** FEAT_CO_CORRUPTSOUL3 3 **** **** **** **** **** 0 1
3472 **** 16825602 16825603 is_CharmPer **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3473 1 4 **** **** **** **** **** **** **** **** **** **** **** FEAT_CO_CORRUPTSOUL4 3 **** **** **** **** **** 0 1
3473 **** 16825602 16825603 is_CharmPer **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_CO_CORRUPTSOUL5 3 **** **** **** **** **** 0 1
@@ -7951,7 +7951,7 @@
7947 WP_Maul 16834189 16834258 ife_wepprof_mau **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** 45 1 **** 86 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_PROFICIENCY_MAUL 1 **** **** **** **** **** 0 1
7948 WP_Double_Scimitar 16834198 16834259 ife_wepprof_dsc **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** 44 1 **** 87 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR 1 **** **** **** **** **** 0 1
7949 WP_Goad 16834207 16834257 ife_wepprof_goa **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** 46 1 **** 85 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_PROFICIENCY_GOAD 1 **** **** **** **** **** 0 1
7950 WP_EagleClaw 16793721 16834259 ife_wepprof_ssw **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** 45 1 **** 86 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_PROFICIENCY_SHORTSWORD 1 **** **** **** **** **** 0 1
7950 WP_EagleClaw 16793721 16834259 ife_wepprof_ssw **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** 44 1 **** 87 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW 1 **** **** **** **** **** 0 1
7951 ReservedForISCAndESS **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
7952 ReservedForISCAndESS **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
7953 ReservedForISCAndESS **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1

View File

@@ -0,0 +1,54 @@
2DA V2.0
Name Label Cost Value
0 **** Random 0 0
1 1045 1 1 1
2 1046 2 2 2
3 1047 3 3 3
4 1048 4 4 4
5 1049 5 5 5
6 1050 6 6 6
7 1051 7 7 7
8 1052 8 8 8
9 1053 9 9 9
10 1054 10 10 10
11 1954 11 11 11
12 1992 12 12 12
13 2113 13 13 13
14 2119 14 14 14
15 2139 15 15 15
16 2163 16 16 16
17 2164 17 17 17
18 2187 18 18 18
19 2191 19 19 19
20 2192 20 20 20
21 2332 21 21 21
22 2333 22 22 22
23 2334 23 23 23
24 2335 24 24 24
25 2336 25 25 25
26 2337 26 26 26
27 2338 27 27 27
28 2339 28 28 28
29 2340 29 29 29
30 2341 30 30 30
31 2342 31 31 31
32 2343 32 32 32
33 2344 33 33 33
34 2345 34 34 34
35 2346 35 35 35
36 2347 36 36 36
37 2348 37 37 37
38 2349 38 38 38
39 2350 39 39 39
40 2351 40 40 40
41 2352 41 41 41
42 2353 42 42 42
43 2354 43 43 43
44 2355 44 44 44
45 2356 45 45 45
46 2357 46 46 46
47 2358 47 47 47
48 2359 48 48 48
49 2360 49 49 49
50 2361 50 50 50

View File

@@ -0,0 +1,73 @@
Scripts changed for .35:
prc_wipeNSB.nss
PRC_S_spellb.nss
prc_amagsys_gain.nss - AMSCompatibilityCheck()
prc_prereq.nss - Dragonheart(), KnightWeave()
prc_onenter.nss - OnEnter_AMSCompatibilityCheck()
prc_metamagic.nss - GetHasSpontaneousNSBClass()
prc_feats.nss
prc_dracactive.nss
prc_debug_hfeatm.nss
prc_cbtmed_spnhl.nss
psi_powconv.nss
psi_pow_bstpwr.nss
x2_pc_umdcheck.nss
Includes & Functions changed for .35:
inc_sp_gain_mem.nss - set MAX_CLASSES to 8
inv_inc_invfunc.nss - GetHighestInvokerLevel(), GetFirstInvocationClassPosition(), GetPrimaryInvocationClass()
inc_epicspellfnc.nss - GetCanLearnSeed()
inc_newspellbook.nss - CheckNewSpellbooks(), GetSpellslotLevel()
moi_inc_moifunc.nss - GetHighestMeldshaperLevel(), GetPrimaryIncarnumClass(), GetFirstIncarnumClassPosition()
nw_o2_coninclude.nss - nDetermineClassToUse()
prc_inc_castlvl.nss - GetArcanePRCLevels(), GetDivinePRCLevels(), GetFirstArcaneClassPosition(), GetFirstDivineClassPosition(), GetPrimaryArcaneClass(), GetPrimaryDivineClass(), GetPrimarySpellcastingClass(), UrPriestCL(), GetLevelByTypeArcane(), GetLevelByTypeDivine(), [Needs marker feats]
prc_inc_clsfunc.nss - [Needs marker feats]
prc_inc_core.nss - PRCGetSpellLevel(), UseNewSpellBook(), PRCGetHasSpell(), PRCGetIsRealSpellKnown()
prc_inc_domain.nss - CastDomainSpell()
prc_inc_function.nss - SetupCharacterData(), [Needs marker feats]
prc_inc_itmrstr.nss - _prc_inc_itmrstr_ApplyWizardry()
prc_inc_leadersh.nss - StoreCohort()
prc_inc_spells.nss - GetPrCAdjustedCasterLevelByType(), GetLevelByTypeArcaneFeats(), GetLevelByTypeDivineFeats(), PRCDecrementRemainingSpellUses(), PRCGetSpellUsesLeft()
prc_shifter_info.nss - _prc_inc_PrintDebugItem(), _prc_inc_PrintShape()
psi_inc_core.nss - GetHighestManifesterLevel(), GetPrimaryPsionicClass(), GetFirstPsionicClassPosition()
shd_inc_shdfunc.nss - GetHighestShadowcasterLevel(), GetPrimaryShadowMagicClass(), GetFirstShadowMagicClassPosition()
tob_inc_recovery.nss - RecoverPrCAbilities()
tob_inc_tobfunc.nss - GetHighestInitiatorLevel(), GetPrimaryBladeMagicClass(), GetFirstBladeMagicClassPosition()
true_inc_trufunc.nss - GetHighestTrueSpeakerLevel()

View File

@@ -0,0 +1,25 @@
Scripts that need to be updated whenever we get a new weapon type:
prc_misc_const.nss - New weapon constants go here
prc_dispater.nss - Metal / Iron weapons
inc_item_props.nss - Missing Light lance
inc_rand_equip.nss - Missing all new weapons
prc_craft_inc.nss
prc_inc_clsfunc.nss - Missing Light Lance & new weapons. Needs update for .35
prc_inc_combat.nss - Missing Light lance, elf blades & new weapons.
prc_inc_fork.nss - Missing Light Lance & new weapons.
prc_inc_wpnrest.nss - Missing Light Lance for some functions
prc_x2_itemprop.nss - Missing Light lance.
psi_callweapon.nss - May need to make a new default version for each new weapon, needs testing.
prc_ad_falskeen.nss - Missing Light lance, elf blades & new weapons.
prc_battletempus.nss - Martial melee weapons. Missing new Martial weapons.
prc_intuiatk.nss - Simple melee weapons. Missing new Simple weapons.
prc_swashweak.nss - All melee weapons. Missing Light lance, elf blades & new weapons.
prc_ipfeat_const.nss - Weapon Feat constants go here.
2DAs that need updating for new weapon types:
baseitems.2da - Obviously.
prc_weap_items.2da

View File

@@ -1,4 +1,6 @@
//:: Updated for .35 by Jaysyn 2023/03/10
int GetFeatForSeed(int nSeedID);
int GetIPForSeed(int nSeedID);
int GetDCForSeed(int nSeedID);
@@ -25,6 +27,8 @@ int GetSpellFromAbrev(string sAbrev);
/* Includes */
//////////////////////////////////////////////////
#include "inc_utility"
//#include "inc_epicspelldef"
@@ -132,7 +136,7 @@ int GetCanLearnSeed(object oPC, int nSeedID)
{
int nRestr = GetClassForSeed(nSeedID);
int i, nClass;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oPC);
if(_CheckEpicSpellcastingForClass(oPC, nClass)//this class has epic spellcasting

View File

@@ -373,12 +373,12 @@ void SetCompositeBonus(object oItem, string sBonus, int iVal, int iType, int iSu
iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType);
iCurVal -= GetPersistantLocalInt(GetItemPossessor(oItem), "LetoAbility_"+IntToString(iSubType));
if (DEBUG) DoDebug("Ability Decrease #1: oItem "+GetName(oItem)+" sBonus "+sBonus+" iChange "+IntToString(iChange)+" iCurVal "+IntToString(iCurVal)+" iSubType "+IntToString(iSubType));
/*if ((iCurVal + iChange) > 12)
if ((iCurVal + iChange) > 50)
{
iVal -= iCurVal + iChange - 12;
iCurVal = 12;
iVal -= iCurVal + iChange - 50;
iCurVal = 50;
iChange = 0;
}*/
}
if(iCurVal+iChange > 0)
{
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(iSubType, iCurVal + iChange), oItem);
@@ -764,10 +764,10 @@ void SetCompositeBonusT(object oItem, string sBonus, int iVal, int iType, int iS
{
case ITEM_PROPERTY_ABILITY_BONUS:
iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType);
if ((iCurVal + iChange) > 12)
if ((iCurVal + iChange) > 50)
{
iVal -= iCurVal + iChange - 12;
iCurVal = 12;
iVal -= iCurVal + iChange - 50;
iCurVal = 50;
iChange = 0;
}
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAbilityBonus(iSubType, iCurVal + iChange), oItem,9999.0);

View File

@@ -349,7 +349,7 @@ int GetSpellslotLevel(int nClass, object oPC)
int nArcSpellslotLevel;
int nDivSpellslotLevel;
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nTempClass = GetClassByPosition(i, oPC);
//spellcasting prc
@@ -832,7 +832,7 @@ void CheckNewSpellbooks(object oPC)
{
WipeSpellbookHideFeats(oPC);
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
int nLevel = GetLevelByClass(nClass, oPC);

View File

@@ -15,12 +15,19 @@ Created: May 1, 2008
//#include "prc_inc_core" //granted access via parent (inc_newspellbook)
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_newspellbook.nss"
//:: Test Void
//void main (){}
//:://////////////////////////////////////////////
//:: Constants
//:://////////////////////////////////////////////
// max. number of classes a PC (or creature) can take (3 for NWN, 4 for NWN2)
const int MAX_CLASSES = 3;
// max. number of classes a PC (or creature) can take (8 for NWN, 4 for NWN2)
const int MAX_CLASSES = 8;
//////////////////////////////////////////////////
/* Aid functions */

View File

@@ -1,6 +1,6 @@
//::///////////////////////////////////////////////
//:: Invocation include: Miscellaneous
//:: tob_inc_tobfunc
//:: inv_inc_invfunc
//::///////////////////////////////////////////////
/** @file
Defines various functions and other stuff that
@@ -12,6 +12,8 @@
@author Fox
@date Created - 2008.1.25
Updated for .35 by Jaysyn 2023/03/10
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
@@ -230,14 +232,37 @@ int GetIsInvocationUser(object oCreature)
);
}
int GetHighestInvokerLevel(object oCreature)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
{
nTemp = GetInvokerLevel(oCreature, GetClassByPosition(n, oCreature));
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestInvokerLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
);
}
} */
int GetIsInvocationClass(int nClass)
{
@@ -278,7 +303,7 @@ int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF)
{
int nClass;
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE))
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) //: Kinda pointless for .35
{
int nInvocationPos = GetFirstInvocationClassPosition(oCreature);
if (!nInvocationPos) return CLASS_TYPE_INVALID; // no invoking class
@@ -288,18 +313,30 @@ int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF)
else
{
int nClassLvl;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oCreature);
nClass2 = GetClassByPosition(2, oCreature);
nClass3 = GetClassByPosition(3, oCreature);
nClass4 = GetClassByPosition(4, oCreature);
nClass5 = GetClassByPosition(5, oCreature);
nClass6 = GetClassByPosition(6, oCreature);
nClass7 = GetClassByPosition(7, oCreature);
nClass8 = GetClassByPosition(8, oCreature);
if(GetIsInvocationClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
if(GetIsInvocationClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
if(GetIsInvocationClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
if(GetIsInvocationClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
if(GetIsInvocationClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
if(GetIsInvocationClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
if(GetIsInvocationClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
if(GetIsInvocationClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
nClass = nClass1;
nClassLvl = nClass1Lvl;
if(nClass2Lvl > nClassLvl)
{
nClass = nClass2;
@@ -310,6 +347,32 @@ int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF)
nClass = nClass3;
nClassLvl = nClass3Lvl;
}
if(nClass4Lvl > nClassLvl)
{
nClass = nClass4;
nClassLvl = nClass4Lvl;
}
if(nClass5Lvl > nClassLvl)
{
nClass = nClass5;
nClassLvl = nClass5Lvl;
}
if(nClass6Lvl > nClassLvl)
{
nClass = nClass6;
nClassLvl = nClass6Lvl;
}
if(nClass7Lvl > nClassLvl)
{
nClass = nClass7;
nClassLvl = nClass7Lvl;
}
if(nClass8Lvl > nClassLvl)
{
nClass = nClass8;
nClassLvl = nClass8Lvl;
}
if(nClassLvl == 0)
nClass = CLASS_TYPE_INVALID;
}
@@ -325,7 +388,17 @@ int GetFirstInvocationClassPosition(object oCreature = OBJECT_SELF)
return 2;
if (GetIsInvocationClass(GetClassByPosition(3, oCreature)))
return 3;
if (GetIsInvocationClass(GetClassByPosition(4, oCreature)))
return 4;
if (GetIsInvocationClass(GetClassByPosition(5, oCreature)))
return 5;
if (GetIsInvocationClass(GetClassByPosition(6, oCreature)))
return 6;
if (GetIsInvocationClass(GetClassByPosition(7, oCreature)))
return 7;
if (GetIsInvocationClass(GetClassByPosition(8, oCreature)))
return 8;
return 0;
}

View File

@@ -12,10 +12,15 @@
@author Stratovarius
@date Created - 2019.12.28
Updated for .35 by Jaysyn 2023/03/10
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Test Void
//void main () {}
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
@@ -203,13 +208,35 @@ int GetIncarnumLevelForClass(int nSpecificClass, object oMeldshaper)
}
int GetHighestMeldshaperLevel(object oMeldshaper)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oMeldshaper) != CLASS_TYPE_INVALID)
{
nTemp = GetMeldshaperLevel(oMeldshaper, GetClassByPosition(n, oMeldshaper),-1);
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestMeldshaperLevel(object oMeldshaper)
{
return max(max(GetClassByPosition(1, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(1, oMeldshaper), -1) : 0,
GetClassByPosition(2, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(2, oMeldshaper), -1) : 0
),
GetClassByPosition(3, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(3, oMeldshaper), -1) : 0
);
}
} */
int GetIsIncarnumClass(int nClass)
{
@@ -260,18 +287,30 @@ int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF)
else
{
int nClassLvl;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
nClass1 = GetClassByPosition(1, oMeldshaper);
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oMeldshaper);
nClass2 = GetClassByPosition(2, oMeldshaper);
nClass3 = GetClassByPosition(3, oMeldshaper);
nClass4 = GetClassByPosition(4, oMeldshaper);
nClass5 = GetClassByPosition(5, oMeldshaper);
nClass6 = GetClassByPosition(6, oMeldshaper);
nClass7 = GetClassByPosition(7, oMeldshaper);
nClass8 = GetClassByPosition(8, oMeldshaper);
if(GetIsIncarnumClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oMeldshaper);
if(GetIsIncarnumClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oMeldshaper);
if(GetIsIncarnumClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oMeldshaper);
if(GetIsIncarnumClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oMeldshaper);
if(GetIsIncarnumClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oMeldshaper);
if(GetIsIncarnumClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oMeldshaper);
if(GetIsIncarnumClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oMeldshaper);
if(GetIsIncarnumClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oMeldshaper);
nClass = nClass1;
nClassLvl = nClass1Lvl;
if(nClass2Lvl > nClassLvl)
{
nClass = nClass2;
@@ -282,6 +321,32 @@ int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF)
nClass = nClass3;
nClassLvl = nClass3Lvl;
}
if(nClass4Lvl > nClassLvl)
{
nClass = nClass4;
nClassLvl = nClass4Lvl;
}
if(nClass5Lvl > nClassLvl)
{
nClass = nClass5;
nClassLvl = nClass5Lvl;
}
if(nClass6Lvl > nClassLvl)
{
nClass = nClass6;
nClassLvl = nClass6Lvl;
}
if(nClass7Lvl > nClassLvl)
{
nClass = nClass7;
nClassLvl = nClass7Lvl;
}
if(nClass8Lvl > nClassLvl)
{
nClass = nClass8;
nClassLvl = nClass8Lvl;
}
if(nClassLvl == 0)
nClass = CLASS_TYPE_INVALID;
}
@@ -297,6 +362,16 @@ int GetFirstIncarnumClassPosition(object oMeldshaper = OBJECT_SELF)
return 2;
if (GetIsIncarnumClass(GetClassByPosition(3, oMeldshaper)))
return 3;
if (GetIsIncarnumClass(GetClassByPosition(4, oMeldshaper)))
return 4;
if (GetIsIncarnumClass(GetClassByPosition(5, oMeldshaper)))
return 5;
if (GetIsIncarnumClass(GetClassByPosition(6, oMeldshaper)))
return 6;
if (GetIsIncarnumClass(GetClassByPosition(7, oMeldshaper)))
return 7;
if (GetIsIncarnumClass(GetClassByPosition(8, oMeldshaper)))
return 8;
return 0;
}

View File

@@ -11,6 +11,8 @@
//:://////////////////////////////////////////////
//:: Created By: Brent, Andrew
//:: Created On: November - May
//::
//:: Updated for .35 by Jaysyn 2023/03/10
//:://////////////////////////////////////////////
// :: MODS
// April 23 2002: Removed animal parts. They were silly.
@@ -4703,23 +4705,59 @@ int nDetermineClassToUse(object oCharacter)
int nClass1 = GetClassByPosition(1, oCharacter);
int nClass2 = GetClassByPosition(2, oCharacter);
int nClass3 = GetClassByPosition(3, oCharacter);
int nClass4 = GetClassByPosition(4, oCharacter);
int nClass5 = GetClassByPosition(5, oCharacter);
int nClass6 = GetClassByPosition(6, oCharacter);
int nClass7 = GetClassByPosition(7, oCharacter);
int nClass8 = GetClassByPosition(8, oCharacter);
int nState1 = GetLevelByClass(nClass1, oCharacter) * 100 / nTotal;
int nState2 = GetLevelByClass(nClass2, oCharacter) * 100 / nTotal + nState1;
// nState3 will always be 100 if there is a third class, or 0 if there isn't
//int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
int nState4 = GetLevelByClass(nClass4, oCharacter) * 100 / nTotal + nState3;
int nState5 = GetLevelByClass(nClass5, oCharacter) * 100 / nTotal + nState4;
int nState6 = GetLevelByClass(nClass6, oCharacter) * 100 / nTotal + nState5;
int nState7 = GetLevelByClass(nClass7, oCharacter) * 100 / nTotal + nState6;
// nState8 will always be 100 if there is an eigth class, or 0 if there isn't
//int nState8 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState7;
// correct for unrecognized classes - assumes the first class will be a non-prestige player class
if(nClass2 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass2))
{
nClass2 = CLASS_TYPE_INVALID;
nState1 = nState2;
}
}
if(nClass3 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass3))
{
nClass3 = CLASS_TYPE_INVALID;
if(nClass2 != CLASS_TYPE_INVALID)
nState2 = 100;
nState1 = nState3;
}
if(nClass4 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass4))
{
nClass4 = CLASS_TYPE_INVALID;
nState1 = nState4;
}
if(nClass5 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass5))
{
nClass5 = CLASS_TYPE_INVALID;
nState1 = nState5;
}
if(nClass6 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass6))
{
nClass6 = CLASS_TYPE_INVALID;
nState1 = nState6;
}
if(nClass7 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass7))
{
nClass7 = CLASS_TYPE_INVALID;
nState1 = nState7;
}
if(nClass8 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass8))
{
nClass8 = CLASS_TYPE_INVALID;
if(nClass7 != CLASS_TYPE_INVALID)
nState7 = 100;
else nState1 = 100;
}
@@ -4748,4 +4786,6 @@ int nDetermineClassToUse(object oCharacter)
return nClass;
}
//:: Test Void
//void main () {}

View File

@@ -1710,6 +1710,8 @@ const int FEAT_HATED_ENEMY_OUTSIDER = 4346;
const int FEAT_HATED_ENEMY_SHAPECHANGER = 4347;
const int FEAT_HATED_ENEMY_UNDEAD = 4348;
const int FEAT_HATED_ENEMY_VERMIN = 4349;
const int FEAT_HATED_ENEMY_OOZE = 3469;
const int FEAT_HATED_ENEMY_PLANT = 3470;
// Thrall of Graz'zt
const int FEAT_TOG_SUMMON_DEMON = 2889;

View File

@@ -8,6 +8,8 @@
* functions. If this ends up like prc_inc_spells, you get slapped.
*/
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
@@ -785,12 +787,18 @@ int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF)
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
{
int nArcane;
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nArcane;
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nFourthClass = GetClassByPosition(4, oCaster);
int nFifthClass = GetClassByPosition(5, oCaster);
int nSixthClass = GetClassByPosition(6, oCaster);
int nSeventhClass = GetClassByPosition(7, oCaster);
int nEightClass = GetClassByPosition(8, oCaster);
if (GetFirstArcaneClassPosition(oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
@@ -834,7 +842,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
if (nClass)
@@ -857,7 +865,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
* first class slot is NOT divine AND second class slot is arcane OR
* first AND second class slot is NOT divine AND 3rd class slot is arcane
*/
if (nOozeMLevel)
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
{
if (GetIsArcaneClass(nFirstClass, oCaster)
|| (!GetIsDivineClass(nFirstClass, oCaster)
@@ -922,9 +930,15 @@ int GetDivinePRCLevels(object oCaster)
{
int nDivine;
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nFirstClass = GetClassByPosition(1, oCaster);
int nSecondClass = GetClassByPosition(2, oCaster);
int nThirdClass = GetClassByPosition(3, oCaster);
int nFourthClass = GetClassByPosition(4, oCaster);
int nFifthClass = GetClassByPosition(5, oCaster);
int nSixthClass = GetClassByPosition(6, oCaster);
int nSeventhClass = GetClassByPosition(7, oCaster);
int nEightClass = GetClassByPosition(8, oCaster);
// This section accounts for full progression classes
nDivine += GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
@@ -967,7 +981,7 @@ int GetDivinePRCLevels(object oCaster)
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
}
if (nOozeMLevel)
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
{
if (GetIsDivineClass(nFirstClass, oCaster)
|| (!GetIsArcaneClass(nFirstClass, oCaster)
@@ -984,7 +998,7 @@ int GetDivinePRCLevels(object oCaster)
int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF)
{
int i;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
if(GetIsArcaneClass(GetClassByPosition(i, oCaster), oCaster))
return i;
@@ -996,7 +1010,7 @@ int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF)
int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF)
{
int i;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
if(GetIsDivineClass(GetClassByPosition(i, oCaster), oCaster))
return i;
@@ -1019,7 +1033,7 @@ int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
else
{
int i, nClassTmp, nClassLvl;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsArcaneClass(nClassTmp, oCaster) && nClassTmp != CLASS_TYPE_SUBLIME_CHORD)
@@ -1063,7 +1077,7 @@ int GetPrimaryDivineClass(object oCaster = OBJECT_SELF)
else
{
int i, nClassTmp, nClassLvl;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsDivineClass(nClassTmp, oCaster))
@@ -1088,7 +1102,7 @@ int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF)
int nClass;
int i, nClassTmp, nClassLvl;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
nClassTmp = GetClassByPosition(i, oCaster);
if(GetIsArcaneClass(nClassTmp, oCaster)
@@ -1121,40 +1135,40 @@ int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels)
switch(iCastingClass)
{
case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break;
case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break;
case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break;
case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break;
case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break;
case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break;
case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break;
case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break;
case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break;
case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break;
case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break;
case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break;
case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break;
case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break;
case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break;
case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break;
case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break;
case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break;
case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break;
case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break;
case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break;
case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break;
case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break;
case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break;
case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break;
case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break;
case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break;
case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break;
case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break;
case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break;
case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break;
case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break;
case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break;
case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break;
case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break;
case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break;
case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break;
case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break;
case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break;
case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break;
case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break;
case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break;
case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break;
case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break;
case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break;
case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break;
case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break;
case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break;
case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break;
case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break;
case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break;
case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break;
case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break;
case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break;
case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break;
case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break;
case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break;
case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break;
case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break;
case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break;
case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break;
case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break;
case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break;
case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break;
case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break;
case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break;
case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break;
case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break;
default: return 0;
}
@@ -1512,10 +1526,21 @@ int UrPriestCL(object oCaster, int nCastingClass)
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(7, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
/*if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
@@ -1536,31 +1561,72 @@ int UrPriestCL(object oCaster, int nCastingClass)
if (DEBUG) DoDebug("UrPriestCL Divine - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));*/
int iFirstArcane = GetPrimaryArcaneClass(oCaster);
iClass1 = GetClassByPosition(1, oCaster);
iClass2 = GetClassByPosition(2, oCaster);
iClass3 = GetClassByPosition(3, oCaster);
iClass1Lev = GetLevelByPosition(1, oCaster);
iClass2Lev = GetLevelByPosition(2, oCaster);
iClass3Lev = GetLevelByPosition(3, oCaster);
iClass1 = GetClassByPosition(1, oCaster);
iClass2 = GetClassByPosition(2, oCaster);
iClass3 = GetClassByPosition(3, oCaster);
iClass4 = GetClassByPosition(4, oCaster);
iClass5 = GetClassByPosition(5, oCaster);
iClass6 = GetClassByPosition(6, oCaster);
iClass7 = GetClassByPosition(7, oCaster);
iClass8 = GetClassByPosition(8, oCaster);
iClass1Lev = GetLevelByPosition(1, oCaster);
iClass2Lev = GetLevelByPosition(2, oCaster);
iClass3Lev = GetLevelByPosition(3, oCaster);
iClass4Lev = GetLevelByPosition(4, oCaster);
iClass5Lev = GetLevelByPosition(5, oCaster);
iClass6Lev = GetLevelByPosition(6, oCaster);
iClass7Lev = GetLevelByPosition(7, oCaster);
iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster);
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster);
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster);
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster);
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
nTotal += iClass1Lev + iClass2Lev + iClass3Lev;
if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));
nTotal += iClass1Lev + iClass2Lev + iClass3Lev + iClass4Lev + iClass5Lev + iClass6Lev + iClass7Lev + iClass8Lev;
if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "
+IntToString(iClass2Lev)+" iClass3Lev "
+IntToString(iClass3Lev)+" iClass4Lev "
+IntToString(iClass4Lev)+" iClass5Lev "
+IntToString(iClass5Lev)+" iClass6Lev "
+IntToString(iClass6Lev)+" iClass7Lev "
+IntToString(iClass7Lev)+" iClass8Lev "
+IntToString(iClass8Lev));
if (DEBUG) DoDebug("UrPriestCL Total - nTotal "+IntToString(nTotal));
return nTotal/2;
}
@@ -1619,30 +1685,66 @@ int GetLevelByTypeArcane(object oCaster = OBJECT_SELF)
int iBest = 0;
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(8, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster);
if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster);
if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster);
if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster);
if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
@@ -1653,30 +1755,69 @@ int GetLevelByTypeDivine(object oCaster = OBJECT_SELF)
int iBest = 0;
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(8, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_PALADIN || iClass4 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_PALADIN || iClass5 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_PALADIN || iClass6 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_PALADIN || iClass7 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_PALADIN || iClass8 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster);
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster);
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster);
if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster);
if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster);
if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster);
if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster);
if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster);
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev);
if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsDivineClass(iClass8, oCaster)) iClass8Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
}
//:: Test Void
//void main (){}

View File

@@ -6,7 +6,7 @@
Stratovarius
*/
//:: Updated for .35 by Jaysyn 2023/03/10
////////////////Begin Generic////////////////
@@ -1606,6 +1606,8 @@ void RemoveOldSongs(object oPC)
// since in NWN character can have max 3 classes. We also know that Eldritch Theurge
// is at positon 3 (unless player is cheating).
// So we just need to check the third class.
//:: [PRC .35] This function will require marker feats
int GetETArcaneClass(object oPC)
{
int nClass = GetClassByPosition(1, oPC);

View File

@@ -1,6 +1,7 @@
/* Core functions taken from high up the branch
which are needed lower. */
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Function Prototypes */
@@ -446,7 +447,7 @@ int PRCGetSpellLevel(object oCreature, int nSpell)
return nSpellLevel;
int i;
for (i=1;i<=3;i++)
for (i=1;i<=8;i++)
{
nClass = GetClassByPosition(i, oCreature);
int nCharLevel = GetLevelByClass(nClass, oCreature);
@@ -514,7 +515,7 @@ int GetIsNSBClass(int nClass)
int UseNewSpellBook(object oCreature)
{
int i;
for (i = 1; i <= 3; i++)
for (i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oCreature);
if(GetIsNSBClass(nClass))
@@ -557,7 +558,7 @@ int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF)
int nClass, nSpellbookID, nCount, nMeta, i, j;
int nSpellbookType, nSpellLevel;
string sFile, sFeat;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oCreature);
sFile = GetFileForClass(nClass);
@@ -609,7 +610,7 @@ int PRCGetIsRealSpellKnown(int nRealSpellID, object oPC = OBJECT_SELF)
return TRUE; // means they know the spell (close enough)
int nClass;
int nClassSlot = 1;
while(nClassSlot <= 3)
while(nClassSlot <= 8)
{
nClass = GetClassByPosition(nClassSlot, oPC);
if(GetIsDivineClass(nClass) || GetIsArcaneClass(nClass))

View File

@@ -8,6 +8,8 @@
//:: Created On: August 31st, 2005
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/10
// Function returns the domain in the input slot.
// A person can have a maximum of 5 bonus domains.
@@ -240,7 +242,7 @@ void CastDomainSpell(object oPC, int nSlot, int nLevel)
if(!nCount)
{
int n;
for(n = 1; n < 4; n++)
for(n = 1; n < 8; n++)
{
nClass = GetClassByPosition(n, oPC);

View File

@@ -15,6 +15,8 @@
//:: Created On: Dec 19, 2003
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/10
//--------------------------------------------------------------------------
// This is the "event" that is called to re-evalutate PRC bonuses. Currently
// it is fired by OnEquip, OnUnequip and OnLevel. If you want to move any
@@ -23,6 +25,10 @@
// feats to their own self-contained script
//--------------------------------------------------------------------------
//:: Test Void
//void main (){}
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
@@ -89,7 +95,7 @@ void SetupCharacterData(object oPC)
// use bitwise to combine flags
int i, iData, iShifting;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClassType = GetClassByPosition(i, oPC);
if(nClassType != CLASS_TYPE_INVALID)
@@ -268,8 +274,13 @@ void SetupCharacterData(object oPC)
SetPersistantLocalInt(oPC, "PRC_UNI_SHIFT_SCRIPT", 1);
//Setup class info for onleveldown script
int nCharData = ((GetClassByPosition(3, oPC) & 0xFF) << 16) |
((GetClassByPosition(2, oPC) & 0xFF) << 8) |
int nCharData = ((GetClassByPosition(8, oPC) & 0xFF) << 56) |
((GetClassByPosition(7, oPC) & 0xFF) << 48) |
((GetClassByPosition(5, oPC) & 0xFF) << 40) |
((GetClassByPosition(5, oPC) & 0xFF) << 32) |
((GetClassByPosition(4, oPC) & 0xFF) << 24) |
((GetClassByPosition(3, oPC) & 0xFF) << 16) |
((GetClassByPosition(2, oPC) & 0xFF) << 8) |
(GetClassByPosition(1, oPC) & 0xFF);
SetPersistantLocalInt(oPC, "PRC_Character_Data", nCharData);
@@ -558,6 +569,7 @@ void EvalPRCFeats(object oPC)
// Must be after all evaluationscripts that need said function.
ExecuteScript("prc_bab_caller", oPC);
//:: [PRC .35] Needs marker feats
// Classes an invoker can take
if(GetLevelByClass(CLASS_TYPE_MAESTER, oPC) ||
GetLevelByClass(CLASS_TYPE_ACOLYTE, oPC) ||

View File

@@ -6,7 +6,7 @@
*/
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Constants */
@@ -38,7 +38,11 @@ void CheckForPnPHolyAvenger(object oItem);
#include "inc_utility"
#include "prc_inc_newip"
#include "prc_inc_castlvl"
#include "inc_newspellbook"
//:: Test Void
//void main (){}
//////////////////////////////////////////////////
/* Internal functions */
@@ -134,7 +138,7 @@ void _prc_inc_itmrstr_ApplyWizardry(object oPC, object oItem, int nSpellLevel, s
SetLocalInt(oItem, "PRC_Wizardry"+IntToString(nSpellLevel), TRUE);
int nClass, nSlots, i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oPC);
if((sType == "A" && GetIsArcaneClass(nClass)) || (sType == "D" && GetIsDivineClass(nClass)))

View File

@@ -1,3 +1,5 @@
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
@@ -589,6 +591,11 @@ void StoreCohort(object oCohort)
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class1", GetClassByPosition(1, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class2", GetClassByPosition(2, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class3", GetClassByPosition(3, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class4", GetClassByPosition(4, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class5", GetClassByPosition(5, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class6", GetClassByPosition(6, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class7", GetClassByPosition(7, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_class8", GetClassByPosition(8, oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_order", GetLawChaosValue(oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_moral", GetGoodEvilValue(oCohort));
SetCampaignInt( COHORT_DATABASE, "Cohort_"+IntToString(nCohortCount)+"_ethran", GetHasFeat(FEAT_ETHRAN, oCohort));
@@ -1032,3 +1039,5 @@ void AddPremadeCohortsToDB()
SetCampaignInt(COHORT_DATABASE, "PremadeCohorts", TRUE);
}
//:: Test Void
//void main (){}

View File

@@ -14,6 +14,8 @@
be necessary, except when new casting feats are created.
*/
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Function prototypes */
@@ -407,28 +409,50 @@ int GetPrCAdjustedCasterLevel(int nClass, object oCaster = OBJECT_SELF, int bAdj
int GetPrCAdjustedCasterLevelByType(int nClassType, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE)
{
int nHighest;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
int nClassLvl;
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oCaster);
nClass2 = GetClassByPosition(2, oCaster);
nClass3 = GetClassByPosition(3, oCaster);
nClass4 = GetClassByPosition(4, oCaster);
nClass5 = GetClassByPosition(5, oCaster);
nClass6 = GetClassByPosition(6, oCaster);
nClass7 = GetClassByPosition(7, oCaster);
nClass8 = GetClassByPosition(8, oCaster);
if(nClassType == TYPE_ARCANE && (GetFirstArcaneClassPosition(oCaster) > 0))
{
if (GetIsArcaneClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsArcaneClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster);
}
else if (nClassType == TYPE_DIVINE && (GetFirstDivineClassPosition(oCaster) > 0))
{
if (GetIsDivineClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster);
if (GetIsDivineClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster);
}
nHighest = nClass1Lvl;
int nHighest = nClass1Lvl;
if (nClass2Lvl > nHighest) nHighest = nClass2Lvl;
if (nClass3Lvl > nHighest) nHighest = nClass3Lvl;
return nHighest;
if (nClass4Lvl > nHighest) nHighest = nClass4Lvl;
if (nClass5Lvl > nHighest) nHighest = nClass5Lvl;
if (nClass6Lvl > nHighest) nHighest = nClass6Lvl;
if (nClass7Lvl > nHighest) nHighest = nClass7Lvl;
if (nClass8Lvl > nHighest) nHighest = nClass8Lvl;
return nHighest;
}
int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
@@ -438,9 +462,20 @@ int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(7, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster);
@@ -454,27 +489,58 @@ int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0;
if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0;
if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0;
if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0;
if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0;
if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0;
if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0;
if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0;
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster);
if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster);
if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster);
iClass1Lev += iBoost;
iClass2Lev += iBoost;
iClass3Lev += iBoost;
iClass4Lev += iBoost;
iClass5Lev += iBoost;
iClass6Lev += iBoost;
iClass7Lev += iBoost;
iClass8Lev += iBoost;
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass1Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass2Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass3Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass1Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass2Lev);
if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
@@ -485,10 +551,21 @@ int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
int iClass1 = GetClassByPosition(1, oCaster);
int iClass2 = GetClassByPosition(2, oCaster);
int iClass3 = GetClassByPosition(3, oCaster);
int iClass4 = GetClassByPosition(4, oCaster);
int iClass5 = GetClassByPosition(5, oCaster);
int iClass6 = GetClassByPosition(6, oCaster);
int iClass7 = GetClassByPosition(7, oCaster);
int iClass8 = GetClassByPosition(8, oCaster);
int iClass1Lev = GetLevelByPosition(1, oCaster);
int iClass2Lev = GetLevelByPosition(2, oCaster);
int iClass3Lev = GetLevelByPosition(3, oCaster);
int iClass4Lev = GetLevelByPosition(4, oCaster);
int iClass5Lev = GetLevelByPosition(5, oCaster);
int iClass6Lev = GetLevelByPosition(6, oCaster);
int iClass7Lev = GetLevelByPosition(7, oCaster);
int iClass8Lev = GetLevelByPosition(8, oCaster);
if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster);
int iBoost = ShadowWeave(oCaster, iSpellID) +
@@ -499,36 +576,81 @@ int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1)
if (iClass1 == CLASS_TYPE_PALADIN
|| iClass1 == CLASS_TYPE_RANGER
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
|| iClass1 == CLASS_TYPE_ANTI_PALADIN)
iClass1Lev = iClass1Lev / 2;
if (iClass2 == CLASS_TYPE_PALADIN
|| iClass2 == CLASS_TYPE_RANGER
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
|| iClass2 == CLASS_TYPE_ANTI_PALADIN)
iClass2Lev = iClass2Lev / 2;
if (iClass3 == CLASS_TYPE_PALADIN
|| iClass3 == CLASS_TYPE_RANGER
|| iClass3 == CLASS_TYPE_ANTI_PALADIN)
iClass3Lev = iClass3Lev / 2;
if (iClass4 == CLASS_TYPE_PALADIN
|| iClass4 == CLASS_TYPE_RANGER
|| iClass4 == CLASS_TYPE_ANTI_PALADIN)
iClass4Lev = iClass4Lev / 2;
if (iClass5 == CLASS_TYPE_PALADIN
|| iClass5 == CLASS_TYPE_RANGER
|| iClass5 == CLASS_TYPE_ANTI_PALADIN)
iClass5Lev = iClass5Lev / 2;
if (iClass6 == CLASS_TYPE_PALADIN
|| iClass6 == CLASS_TYPE_RANGER
|| iClass6 == CLASS_TYPE_ANTI_PALADIN)
iClass6Lev = iClass6Lev / 2;
if (iClass7 == CLASS_TYPE_PALADIN
|| iClass7 == CLASS_TYPE_RANGER
|| iClass7 == CLASS_TYPE_ANTI_PALADIN)
iClass7Lev = iClass7Lev / 2;
if (iClass8 == CLASS_TYPE_PALADIN
|| iClass8 == CLASS_TYPE_RANGER
|| iClass8 == CLASS_TYPE_ANTI_PALADIN)
iClass8Lev = iClass7Lev / 2;
if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster);
if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster);
if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster);
if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster);
if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster);
if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster);
if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster);
if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster);
iClass1Lev += iBoost;
iClass2Lev += iBoost;
iClass3Lev += iBoost;
iClass4Lev += iBoost;
iClass5Lev += iBoost;
iClass6Lev += iBoost;
iClass7Lev += iBoost;
iClass8Lev += iBoost;
iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev);
iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev);
iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev);
iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev);
iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev);
iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev);
iClass7Lev += PracticedSpellcasting(oCaster, iClass1, iClass7Lev);
iClass8Lev += PracticedSpellcasting(oCaster, iClass2, iClass8Lev);
if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0;
if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0;
if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0;
if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0;
if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0;
if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0;
if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0;
if (!GetIsDivineClass(iClass8, oCaster)) iClass3Lev = 0;
if (iClass1Lev > iBest) iBest = iClass1Lev;
if (iClass2Lev > iBest) iBest = iClass2Lev;
if (iClass3Lev > iBest) iBest = iClass3Lev;
if (iClass4Lev > iBest) iBest = iClass4Lev;
if (iClass5Lev > iBest) iBest = iClass5Lev;
if (iClass6Lev > iBest) iBest = iClass6Lev;
if (iClass7Lev > iBest) iBest = iClass7Lev;
if (iClass8Lev > iBest) iBest = iClass8Lev;
return iBest;
}
@@ -2041,7 +2163,7 @@ void PRCDecrementRemainingSpellUses(object oCreature, int nSpell)
int nClass, nSpellbookID, nCount, nMeta, i, j;
int nSpellbookType, nSpellLevel;
string sFile, sFeat;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oCreature);
sFile = GetFileForClass(nClass);
@@ -2754,7 +2876,7 @@ int PRCGetSpellUsesLeft(int nRealSpellID, object oCreature = OBJECT_SELF)
int nClass, nSpellbookID, nCount, i, j;
int nSpellbookType, nSpellLevel;
string sFile, sFeat;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oCreature);
sFile = GetFileForClass(nClass);
@@ -2919,4 +3041,7 @@ int X2PreSpellCastCode()
// DeleteLocalInt(oCaster, "PSCC_Ret");
return nReturn;
}
}
//:: Test Void
//void main (){}

View File

@@ -1,6 +1,13 @@
//:: Updated for .35 by Jaysyn 2023/03/10
#include "prc_inc_function"
#include "inc_nwnx_funcs"
//:: Test Void
//void main (){}
const int DEBUG_NATURAL_AC_CALCULATION = FALSE;
int MAX_BONUS = GetPRCSwitch(PRC_PNP_SHIFTER_BONUS);
const int MAX_PENALTY = 10;
@@ -1112,6 +1119,12 @@ void _prc_inc_PrintDebugItem(object oPC, string oItemType, object oItem)
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(1, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(2, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(3, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(4, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(5, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(6, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(7, oItem));
_prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(8, oItem));
_prc_inc_PrintShapeInfo(oPC, "------");
_prc_inc_PrintShapeInfo(oPC, "====== Main hand weapon: " + (GetIsWeaponEffective(oItem, FALSE) ? "Effective" : "Ineffective"));
@@ -1259,7 +1272,12 @@ void _prc_inc_PrintShape(object oPC, object oTemplate, int bForceLogPrint)
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(1, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(2, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(3, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(4, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(5, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(6, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(7, oTemplate));
_prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(8, oTemplate));
_prc_inc_PrintShapeInfo(oPC, "==========");
//Harmlessly invisible?

View File

@@ -16,6 +16,7 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/10
//////////////////////////////////////////////////
/* Constants */
@@ -33,6 +34,9 @@ const int POWER_LIST_WARMIND = CLASS_TYPE_WARMIND;
#include "psi_inc_const"
//:: Test Main
//void main (){}
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
@@ -1059,13 +1063,36 @@ int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVAL
}
int GetHighestManifesterLevel(object oCreature)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
{
nTemp = GetManifesterLevel(oCreature, GetClassByPosition(n, oCreature));
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestManifesterLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
);
}
} */
int GetPowerLevel(object oManifester)
{
return GetLocalInt(oManifester, PRC_POWER_LEVEL);
@@ -1115,18 +1142,31 @@ int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF)
else
{
int nClassLvl;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oCreature);
nClass2 = GetClassByPosition(2, oCreature);
nClass3 = GetClassByPosition(3, oCreature);
nClass4 = GetClassByPosition(4, oCreature);
nClass5 = GetClassByPosition(5, oCreature);
nClass6 = GetClassByPosition(6, oCreature);
nClass7 = GetClassByPosition(7, oCreature);
nClass8 = GetClassByPosition(8, oCreature);
if(GetIsPsionicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
if(GetIsPsionicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
if(GetIsPsionicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
if(GetIsPsionicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
if(GetIsPsionicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
if(GetIsPsionicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
if(GetIsPsionicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
if(GetIsPsionicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
if(GetIsPsionicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
nClass = nClass1;
nClassLvl = nClass1Lvl;
if(nClass2Lvl > nClassLvl)
{
nClass = nClass2;
@@ -1137,6 +1177,32 @@ int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF)
nClass = nClass3;
nClassLvl = nClass3Lvl;
}
if(nClass4Lvl > nClassLvl)
{
nClass = nClass4;
nClassLvl = nClass4Lvl;
}
if(nClass5Lvl > nClassLvl)
{
nClass = nClass5;
nClassLvl = nClass5Lvl;
}
if(nClass6Lvl > nClassLvl)
{
nClass = nClass6;
nClassLvl = nClass6Lvl;
}
if(nClass7Lvl > nClassLvl)
{
nClass = nClass7;
nClassLvl = nClass7Lvl;
}
if(nClass8Lvl > nClassLvl)
{
nClass = nClass8;
nClassLvl = nClass8Lvl;
}
if(nClassLvl == 0)
nClass = CLASS_TYPE_INVALID;
}
@@ -1196,7 +1262,17 @@ int GetFirstPsionicClassPosition(object oCreature = OBJECT_SELF)
return 2;
if (GetIsPsionicClass(GetClassByPosition(3, oCreature)))
return 3;
if (GetIsPsionicClass(GetClassByPosition(4, oCreature)))
return 4;
if (GetIsPsionicClass(GetClassByPosition(5, oCreature)))
return 5;
if (GetIsPsionicClass(GetClassByPosition(6, oCreature)))
return 6;
if (GetIsPsionicClass(GetClassByPosition(7, oCreature)))
return 7;
if (GetIsPsionicClass(GetClassByPosition(8, oCreature)))
return 8;
return 0;
}

View File

@@ -16,6 +16,11 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/10
//:: Test Void
// void main (){}
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
@@ -295,13 +300,35 @@ int GetIsShadowMagicUser(object oCreature)
}
int GetHighestShadowcasterLevel(object oCreature)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
{
nTemp = GetShadowcasterLevel(oCreature, GetClassByPosition(n, oCreature));
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestShadowcasterLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
);
}
} */
int GetIsShadowMagicClass(int nClass)
{
@@ -376,18 +403,30 @@ int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF)
else
{
int nClassLvl;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oCreature);
nClass2 = GetClassByPosition(2, oCreature);
nClass3 = GetClassByPosition(3, oCreature);
nClass4 = GetClassByPosition(4, oCreature);
nClass5 = GetClassByPosition(5, oCreature);
nClass6 = GetClassByPosition(6, oCreature);
nClass7 = GetClassByPosition(7, oCreature);
nClass8 = GetClassByPosition(8, oCreature);
if(GetIsShadowMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
if(GetIsShadowMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
if(GetIsShadowMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
if(GetIsShadowMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
if(GetIsShadowMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
if(GetIsShadowMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
if(GetIsShadowMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
if(GetIsShadowMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
nClass = nClass1;
nClassLvl = nClass1Lvl;
if(nClass2Lvl > nClassLvl)
{
nClass = nClass2;
@@ -398,6 +437,32 @@ int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF)
nClass = nClass3;
nClassLvl = nClass3Lvl;
}
if(nClass4Lvl > nClassLvl)
{
nClass = nClass4;
nClassLvl = nClass4Lvl;
}
if(nClass5Lvl > nClassLvl)
{
nClass = nClass5;
nClassLvl = nClass5Lvl;
}
if(nClass6Lvl > nClassLvl)
{
nClass = nClass6;
nClassLvl = nClass6Lvl;
}
if(nClass7Lvl > nClassLvl)
{
nClass = nClass7;
nClassLvl = nClass7Lvl;
}
if(nClass8Lvl > nClassLvl)
{
nClass = nClass8;
nClassLvl = nClass8Lvl;
}
if(nClassLvl == 0)
nClass = CLASS_TYPE_INVALID;
}
@@ -413,7 +478,17 @@ int GetFirstShadowMagicClassPosition(object oCreature = OBJECT_SELF)
return 2;
if (GetIsShadowMagicClass(GetClassByPosition(3, oCreature)))
return 3;
if (GetIsShadowMagicClass(GetClassByPosition(4, oCreature)))
return 4;
if (GetIsShadowMagicClass(GetClassByPosition(5, oCreature)))
return 5;
if (GetIsShadowMagicClass(GetClassByPosition(6, oCreature)))
return 6;
if (GetIsShadowMagicClass(GetClassByPosition(7, oCreature)))
return 7;
if (GetIsShadowMagicClass(GetClassByPosition(8, oCreature)))
return 8;
return 0;
}

View File

@@ -16,6 +16,11 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/10
//:: Test Void
//void main (){}
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////

View File

@@ -16,6 +16,11 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
//:: Test Void
//void main (){}
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
@@ -529,13 +534,35 @@ int GetIsBladeMagicUser(object oCreature)
}
int GetHighestInitiatorLevel(object oCreature)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
{
nTemp = GetInitiatorLevel(oCreature, GetClassByPosition(n, oCreature));
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestInitiatorLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
);
}
} */
int GetIsBladeMagicClass(int nClass)
{
@@ -646,18 +673,30 @@ int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF)
}*/
int nClassLvl;
int nClass1, nClass2, nClass3;
int nClass1Lvl, nClass2Lvl, nClass3Lvl;
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
nClass1 = GetClassByPosition(1, oCreature);
nClass2 = GetClassByPosition(2, oCreature);
nClass3 = GetClassByPosition(3, oCreature);
nClass4 = GetClassByPosition(4, oCreature);
nClass5 = GetClassByPosition(5, oCreature);
nClass6 = GetClassByPosition(6, oCreature);
nClass7 = GetClassByPosition(7, oCreature);
nClass8 = GetClassByPosition(8, oCreature);
if(GetIsBladeMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature);
if(GetIsBladeMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature);
if(GetIsBladeMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature);
if(GetIsBladeMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature);
if(GetIsBladeMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature);
if(GetIsBladeMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature);
if(GetIsBladeMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature);
if(GetIsBladeMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature);
nClass = nClass1;
nClassLvl = nClass1Lvl;
if(nClass2Lvl > nClassLvl)
{
nClass = nClass2;
@@ -668,6 +707,32 @@ int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF)
nClass = nClass3;
nClassLvl = nClass3Lvl;
}
if(nClass4Lvl > nClassLvl)
{
nClass = nClass4;
nClassLvl = nClass4Lvl;
}
if(nClass5Lvl > nClassLvl)
{
nClass = nClass5;
nClassLvl = nClass5Lvl;
}
if(nClass6Lvl > nClassLvl)
{
nClass = nClass6;
nClassLvl = nClass6Lvl;
}
if(nClass7Lvl > nClassLvl)
{
nClass = nClass7;
nClassLvl = nClass7Lvl;
}
if(nClass8Lvl > nClassLvl)
{
nClass = nClass8;
nClassLvl = nClass8Lvl;
}
if(nClassLvl == 0)
nClass = CLASS_TYPE_INVALID;
}
@@ -683,7 +748,17 @@ int GetFirstBladeMagicClassPosition(object oCreature = OBJECT_SELF)
return 2;
if (GetIsBladeMagicClass(GetClassByPosition(3, oCreature)))
return 3;
if (GetIsBladeMagicClass(GetClassByPosition(4, oCreature)))
return 4;
if (GetIsBladeMagicClass(GetClassByPosition(5, oCreature)))
return 5;
if (GetIsBladeMagicClass(GetClassByPosition(6, oCreature)))
return 6;
if (GetIsBladeMagicClass(GetClassByPosition(7, oCreature)))
return 7;
if (GetIsBladeMagicClass(GetClassByPosition(8, oCreature)))
return 8;
return 0;
}

View File

@@ -16,6 +16,11 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
//:: Test Void
//void main (){}
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
@@ -340,13 +345,35 @@ int GetIsTruenamingUser(object oCreature)
}
int GetHighestTrueSpeakerLevel(object oCreature)
{
int n = 0;
int nHighest;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID)
{
nTemp = GetTruespeakerLevel(oCreature, GetClassByPosition(n, oCreature));
if(nTemp > nHighest)
nHighest = nTemp;
}
n++;
}
return nHighest;
}
/* int GetHighestTrueSpeakerLevel(object oCreature)
{
return max(max(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0,
GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0
),
GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0
);
}
} */
int GetIsTruenamingClass(int nClass)
{
@@ -391,7 +418,7 @@ int GetTrueSpeakerDC(object oTrueSpeaker = OBJECT_SELF)
nDC += GetAbilityModifier(GetTruenameAbilityOfClass(nClass), oTrueSpeaker);
int nFeat = -1;
// Focused Lexicon. Bonus vs chosen racial type
// Focused Lexicon. Bonus vs chosen racial type //:: [PRC .35] Needs update for new racialtypes
switch(nRace)
{
case RACIAL_TYPE_ABERRATION: nFeat = FEAT_FOCUSED_LEXICON_ABERRATION; break;

View File

@@ -19,6 +19,9 @@
@date Created - 2006.12.14
*/
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
//:://////////////////////////////////////////////
#include "inc_dynconv"
@@ -529,7 +532,7 @@ void AMSCompatibilityCheck(object oPC)
object oHideToken = GetHideToken(oPC); //ebonfowl: no longer used but I'm leaving it to not have to edit other functions
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
string sSpellbook;

View File

@@ -0,0 +1,6 @@
#include "inc_newspellbook"
void main()
{
NewSpellbookSpell(CLASS_TYPE_KNIGHT_WEAVE, SPELLBOOK_TYPE_SPONTANEOUS);
}

View File

@@ -34,6 +34,9 @@
2 additional power points.
*/
//:: Updated for .35 by Jaysyn 2023/03/10
#include "psi_inc_psifunc"
#include "psi_inc_pwresist"
#include "psi_spellhook"
@@ -70,11 +73,29 @@ void main()
if(manif.bCanManifest)
{
// Determine the target's manifester level
int nTargetManifesterLevel = max(max(GetClassByPosition(1, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(1, oTarget)) : 0,
GetClassByPosition(2, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(2, oTarget)) : 0
),
GetClassByPosition(3, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(3, oTarget)) : 0
);
int n = 0;
int nTargetManifesterLevel;
int nTemp;
while(n <= 8)
{
if(GetClassByPosition(n, oTarget) != CLASS_TYPE_INVALID)
{
nTemp = GetManifesterLevel(oTarget, GetClassByPosition(n, oTarget), -1);
if(nTemp > nTargetManifesterLevel)
nTargetManifesterLevel = nTemp;
}
n++;
}
/* int nTargetManifesterLevel = max(max(GetClassByPosition(1, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(1, oTarget)) : 0,
GetClassByPosition(2, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(2, oTarget)) : 0
),
GetClassByPosition(3, oTarget) != CLASS_TYPE_INVALID ? GetManifesterLevel(oTarget, GetClassByPosition(3, oTarget)) : 0
); */
int nPPGiven = 2 + 2 * manif.nTimesAugOptUsed_1;
// Can't give more than the target has manifester levels
nPPGiven = min(nPPGiven, nTargetManifesterLevel);

View File

@@ -189,7 +189,7 @@ void main()
SetHeader("Select class");
int i, nTest, nPrev;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nTest = GetClassByPosition(i, oPC);
if(GetIsPsionicClass(nTest))

View File

@@ -28,6 +28,9 @@ which fires the spellscript prc_spellbook (#1792 in spells.2da), which then call
conversation script
*/
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
//:://////////////////////////////////////////////

View File

@@ -3,6 +3,10 @@
* Created July 17 2005
* Author: GaiaWerewolf
*/
//:: Updated for .35 by Jaysyn 2023/03/11
#include "prc_inc_spells"
#include "prc_getbest_inc"
@@ -38,7 +42,7 @@ void main()
int nBurnableSpell = -1;
int bBioCastersLoopDone = 0;//will prevent running 'GetBestSpell' loops twice
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
nClass = GetClassByPosition(i, oCaster);

View File

@@ -12,6 +12,8 @@
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_utility"
const string SET_NAME = "PRC_DEBUG_HFeatM_IPs";
@@ -67,6 +69,26 @@ void main()
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(3, oPC)))) + " " + IntToString(GetLevelByPosition(3, oPC))
: ""
)
+ (GetClassByPosition(4, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(4, oPC)))) + " " + IntToString(GetLevelByPosition(4, oPC))
: ""
)
+ (GetClassByPosition(5, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(5, oPC)))) + " " + IntToString(GetLevelByPosition(5, oPC))
: ""
)
+ (GetClassByPosition(6, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(6, oPC)))) + " " + IntToString(GetLevelByPosition(6, oPC))
: ""
)
+ (GetClassByPosition(7, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(7, oPC)))) + " " + IntToString(GetLevelByPosition(7, oPC))
: ""
)
+ (GetClassByPosition(8, oPC) != CLASS_TYPE_INVALID ?
" / " + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetClassByPosition(8, oPC)))) + " " + IntToString(GetLevelByPosition(8, oPC))
: ""
)
);
DoDebug("A duplicate itemproperty feat has been discovered. This is a critical bug, so please report it.\n\n"

View File

@@ -10,33 +10,45 @@ int IsItemMetal(object oItem)
// Any of these Base Item Types can be considered "mostly metal"
if (type==BASE_ITEM_BASTARDSWORD ||
type==BASE_ITEM_BATTLEAXE ||
type==BASE_ITEM_DAGGER ||
type==BASE_ITEM_DIREMACE ||
type==BASE_ITEM_DOUBLEAXE ||
type==BASE_ITEM_DWARVENWARAXE ||
type==BASE_ITEM_GREATAXE ||
type==BASE_ITEM_GREATSWORD ||
type==BASE_ITEM_HALBERD ||
type==BASE_ITEM_HANDAXE ||
type==BASE_ITEM_HEAVYFLAIL ||
type==BASE_ITEM_KAMA ||
type==BASE_ITEM_KATANA ||
type==BASE_ITEM_KUKRI ||
type==BASE_ITEM_LIGHTFLAIL ||
type==BASE_ITEM_LIGHTHAMMER ||
type==BASE_ITEM_LIGHTMACE ||
type==BASE_ITEM_LONGSWORD ||
type==BASE_ITEM_MORNINGSTAR ||
type==BASE_ITEM_RAPIER ||
type==BASE_ITEM_SCIMITAR ||
type==BASE_ITEM_SCYTHE ||
type==BASE_ITEM_SHORTSWORD ||
type==BASE_ITEM_SHURIKEN ||
type==BASE_ITEM_SICKLE ||
type==BASE_ITEM_THROWINGAXE ||
type==BASE_ITEM_TWOBLADEDSWORD ||
type==BASE_ITEM_WARHAMMER)
type==BASE_ITEM_BATTLEAXE ||
type==BASE_ITEM_DAGGER ||
type==BASE_ITEM_DIREMACE ||
type==BASE_ITEM_DOUBLEAXE ||
type==BASE_ITEM_DWARVENWARAXE ||
type==BASE_ITEM_GREATAXE ||
type==BASE_ITEM_GREATSWORD ||
type==BASE_ITEM_HALBERD ||
type==BASE_ITEM_HANDAXE ||
type==BASE_ITEM_HEAVYFLAIL ||
type==BASE_ITEM_KAMA ||
type==BASE_ITEM_KATANA ||
type==BASE_ITEM_KUKRI ||
type==BASE_ITEM_LIGHTFLAIL ||
type==BASE_ITEM_LIGHTHAMMER ||
type==BASE_ITEM_LIGHTMACE ||
type==BASE_ITEM_LONGSWORD ||
type==BASE_ITEM_MORNINGSTAR ||
type==BASE_ITEM_RAPIER ||
type==BASE_ITEM_SCIMITAR ||
type==BASE_ITEM_SCYTHE ||
type==BASE_ITEM_SHORTSWORD ||
type==BASE_ITEM_SHURIKEN ||
type==BASE_ITEM_SICKLE ||
type==BASE_ITEM_THROWINGAXE ||
type==BASE_ITEM_TWOBLADEDSWORD ||
type==BASE_ITEM_WARHAMMER ||
type==BASE_ITEM_HEAVY_PICK ||
type==BASE_ITEM_LIGHT_PICK ||
type==BASE_ITEM_SAI ||
type==BASE_ITEM_FALCHION ||
type==BASE_ITEM_KATAR ||
type==BASE_ITEM_HEAVY_MACE ||
type==BASE_ITEM_MAUL ||
type==BASE_ITEM_DOUBLE_SCIMITAR ||
type==BASE_ITEM_EAGLE_CLAW ||
type==BASE_ITEM_ELVEN_LIGHTBLADE ||
type==BASE_ITEM_ELVEN_THINBLADE ||
type==BASE_ITEM_ELVEN_COURTBLADE)
{
nReturnVal=2; // Mostly metal
}

View File

@@ -11,6 +11,9 @@
//:: Created On: Nov 17, 2007
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "prc_inc_burn"
#include "prc_inc_breath"
@@ -157,7 +160,7 @@ void main()
//make sure user is a spontaneous caster
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
if((GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS)

View File

@@ -529,6 +529,13 @@ int CheckArchmageClass()
FloatingTextStringOnCreature("Archmage may only advance a single arcane class.", OBJECT_SELF, FALSE);
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
return TRUE;
}
if(iArchClass < 1)
{
FloatingTextStringOnCreature("Archmage must pick one arcane class to advance at first level.", OBJECT_SELF, FALSE);
FloatingTextStringOnCreature("Please reselect your feats.", OBJECT_SELF, FALSE);
return TRUE;
}
}
return FALSE;

View File

@@ -11,6 +11,9 @@
*/
//////////////////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "moi_inc_moifunc"
#include "prc_inc_clsfunc"
@@ -722,17 +725,43 @@ void PRCFeat_AddCompositeBonuses(object oPC, object oSkin)
int nClass1 = GetClassByPosition(1, oPC);
int nClass2 = GetClassByPosition(2, oPC);
int nClass3 = GetClassByPosition(3, oPC);
int nClass4 = GetClassByPosition(4, oPC);
int nClass5 = GetClassByPosition(5, oPC);
int nClass6 = GetClassByPosition(6, oPC);
int nClass7 = GetClassByPosition(7, oPC);
int nClass8 = GetClassByPosition(8, oPC);
int nClass1Lvl = GetLevelByClass(nClass1, oPC);
int nClass2Lvl = GetLevelByClass(nClass2, oPC);
int nClass3Lvl = GetLevelByClass(nClass3, oPC);
int nLevel = nClass1Lvl + nClass2Lvl + nClass3Lvl;
int nClass4Lvl = GetLevelByClass(nClass4, oPC);
int nClass5Lvl = GetLevelByClass(nClass5, oPC);
int nClass6Lvl = GetLevelByClass(nClass6, oPC);
int nClass7Lvl = GetLevelByClass(nClass7, oPC);
int nClass8Lvl = GetLevelByClass(nClass8, oPC);
int nLevel = nClass1Lvl + nClass2Lvl + nClass3Lvl + nClass4Lvl + nClass5Lvl + nClass6Lvl + nClass7Lvl + nClass8Lvl;
int nDie1 = StringToInt(Get2DAString("classes", "HitDie", nClass1));
int nDie2 = StringToInt(Get2DAString("classes", "HitDie", nClass2));
int nDie3 = StringToInt(Get2DAString("classes", "HitDie", nClass3));
int nDie4 = StringToInt(Get2DAString("classes", "HitDie", nClass4));
int nDie5 = StringToInt(Get2DAString("classes", "HitDie", nClass5));
int nDie6 = StringToInt(Get2DAString("classes", "HitDie", nClass6));
int nDie7 = StringToInt(Get2DAString("classes", "HitDie", nClass7));
int nDie8 = StringToInt(Get2DAString("classes", "HitDie", nClass8));
int nFortPenalty = (nLevel * 12 - (nClass1Lvl * nDie1 +
nClass2Lvl * nDie2 +
nClass3Lvl * nDie3 +
nClass4Lvl * nDie4 +
nClass5Lvl * nDie5 +
nClass6Lvl * nDie6 +
nClass7Lvl * nDie7 +
nClass8Lvl * nDie8))/nLevel;
int nFortPenalty = (nLevel * 12 - (nClass1Lvl * nDie1 + nClass2Lvl * nDie2 + nClass3Lvl * nDie3))/nLevel;
/* int nFortPenalty = (nLevel * 12 - (nClass1Lvl * nDie1 + nClass2Lvl * nDie2 + nClass3Lvl * nDie3))/nLevel; */
if(nFortPenalty > 6)
nFortPenalty = 6;
int nConBonus = nFortPenalty * 2;

View File

@@ -43,6 +43,8 @@ void SetHatedEnemyRace(object oPC)
else if(GetHasFeat(FEAT_HATED_ENEMY_SHAPECHANGER, oPC)) hatedEnemy = RACIAL_TYPE_SHAPECHANGER;
else if(GetHasFeat(FEAT_HATED_ENEMY_UNDEAD, oPC)) hatedEnemy = RACIAL_TYPE_UNDEAD;
else if(GetHasFeat(FEAT_HATED_ENEMY_VERMIN, oPC)) hatedEnemy = RACIAL_TYPE_VERMIN;
else if(GetHasFeat(FEAT_HATED_ENEMY_OOZE, oPC)) hatedEnemy = RACIAL_TYPE_OOZE;
else if(GetHasFeat(FEAT_HATED_ENEMY_PLANT, oPC)) hatedEnemy = RACIAL_TYPE_PLANT;
SetLocalInt(oPC, "HatedFoe", hatedEnemy);
}

View File

@@ -8,12 +8,14 @@
//:: Created On: 20/09/2009
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_newspellbook"
int GetHasSpontaneousNSBClass(object oPC)
{
int i;
for (i = 1; i <= 3; i++)
for (i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
if (SPELLBOOK_TYPE_SPONTANEOUS == GetSpellbookTypeForClass(nClass))

View File

@@ -1,3 +1,5 @@
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_leto_prc"
#include "x2_inc_switches"
#include "prc_inc_teleport"
@@ -111,7 +113,7 @@ void OnEnter_AMSCompatibilityCheck(object oPC)
{
SetLocalInt(oPC, "AMS_RESTORE", 1);
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
DelayCommand(0.2, DoRestoreAMS(oPC, nClass, oHideToken, oAMSToken));

View File

@@ -8,6 +8,8 @@
//:: Created On: July 3rd, 2004
//:://////////////////////////////////////////////
//:: Updated for .35 by Jaysyn 2023/03/11
#include "inc_epicspells"
#include "prc_inc_sneak"
#include "psi_inc_psifunc"
@@ -153,7 +155,7 @@ void Dragonheart(object oPC)
SetLocalInt(oPC, "PRC_PrereqDragonheart", 1);
int nClassSlot = 1;
while(nClassSlot <= 3)
while(nClassSlot <= 8)
{
int nClass = GetClassByPosition(nClassSlot, oPC);
nClassSlot += 1;
@@ -1037,7 +1039,7 @@ void KnightWeave(object oPC)
int bSpontCaster = FALSE;
//make sure user is a spontaneous arcane caster
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
if((GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS) && GetMaxSpellLevelForCasterLevel(nClass, GetLevelByTypeArcane(oPC)) >= 3)
@@ -1262,7 +1264,7 @@ void main()
//for(i=1;i<3;i++)
int nSpellLevel;
int nClassSlot = 1;
while(nClassSlot <= 3)
while(nClassSlot <= 8)
{
int nClass = GetClassByPosition(nClassSlot, oPC);
nClassSlot += 1;

View File

@@ -28,7 +28,7 @@ void main()
object oPC = OBJECT_SELF;
int i;
for(i = 1; i <= 3; i++)
for(i = 1; i <= 8; i++)
{
int nClass = GetClassByPosition(i, oPC);
DelayCommand(0.5*i, DeleteArrays(oPC, nClass));

View File

@@ -33,6 +33,8 @@ Note: I am not using the effective level of the spell for DC calculation but
*/
//------------------------------------------------------------------------------
//:: Updated for .35 by Jaysyn 2023/03/11
#include "prc_inc_spells"
int DoCastingClassCheck(object oCaster, int nSpellID, int nClass)
@@ -55,7 +57,7 @@ int DoCastingClassCheck(object oCaster, int nSpellID, int nClass)
int UMD_CheckCastingClass(object oCaster, int nSpellID)
{
int i;
for(i = 1; i < 4; i++)
for(i = 1; i < 9; i++)
{
if(DoCastingClassCheck(oCaster, nSpellID, GetClassByPosition(i, oCaster)))
return TRUE;

Binary file not shown.

View File

@@ -2,6 +2,21 @@
<!DOCTYPE tlk SYSTEM "tlk2xml.dtd">
<tlk>
<entry id="0" lang="en" sex="m">Bad Strref</entry>
<entry id="12250" lang="en" sex="m">## NEW NWN .35 DAMAGE TYPES ##</entry>
<entry id="12251" lang="en" sex="m">Force Damage</entry>
<entry id="12252" lang="en" sex="m">&lt;CUSTOM0&gt; Force</entry>
<entry id="12253" lang="en" sex="m">Poison Damage</entry>
<entry id="12254" lang="en" sex="m">&lt;CUSTOM0&gt; Poison</entry>
<entry id="12255" lang="en" sex="m">Psychic Damage</entry>
<entry id="12256" lang="en" sex="m">&lt;CUSTOM0&gt; Psychic</entry>
<entry id="12257" lang="en" sex="m">Radiant Damage</entry>
<entry id="12258" lang="en" sex="m">&lt;CUSTOM0&gt; Radiant</entry>
<entry id="12259" lang="en" sex="m">Subdual Damage</entry>
<entry id="12260" lang="en" sex="m">&lt;CUSTOM0&gt; Subdual</entry>
<entry id="12261" lang="en" sex="m">Untyped Damage</entry>
<entry id="12262" lang="en" sex="m">&lt;CUSTOM0&gt; Untyped</entry>
<entry id="12263" lang="en" sex="m">Vile Damage</entry>
<entry id="12264" lang="en" sex="m">&lt;CUSTOM0&gt; Vile</entry>
<entry id="12288" lang="en" sex="m">Ocular Adept</entry>
<entry id="12289" lang="en" sex="m">Ocular Adepts</entry>
<entry id="12290" lang="en" sex="m">ocular adepts</entry>
@@ -2310,6 +2325,10 @@ Use: Automatic.</entry>
Prerequisite: Elf or Scent ability.
Specifics: Characters with Keen Senses may apply their full Search skill even when making a passive search.
Use: Automatic.</entry>
<entry id="12857" lang="en" sex="m">Hated Enemy: Oozes</entry>
<entry id="12858" lang="en" sex="m">Hated Enemy: Plants</entry>
<entry id="12859" lang="en" sex="m">Favored Enemy: Oozes</entry>
<entry id="12860" lang="en" sex="m">Favored Enemy: Plants</entry>
<entry id="12861" lang="en" sex="m">Practiced Invoker (Dragonfire Adept)</entry>
<entry id="12862" lang="en" sex="m">Practiced Invoker (Warlock)</entry>
<entry id="12863" lang="en" sex="m">Type of Feat: General.
@@ -4796,7 +4815,7 @@ your current position.</entry>
<entry id="16443" lang="en" sex="m">96</entry>
<entry id="16444" lang="en" sex="m">97</entry>
<entry id="16445" lang="en" sex="m">98</entry>
<entry id="16446" lang="en" sex="m">100</entry>
<entry id="16446" lang="en" sex="m">99</entry>
<entry id="16447" lang="en" sex="m">Tomb-Tainted Soul</entry>
<entry id="16448" lang="en" sex="m">Type of Feat: General
Prerequisite: Nongood alignment.
@@ -71236,4 +71255,12 @@ Use: Activated</entry>
<entry id="75280" lang="en" sex="m">Fra</entry>
<entry id="75281" lang="en" sex="m">CSM</entry>
<entry id="75282" lang="en" sex="m">Sht</entry>
<entry id="75290" lang="en" sex="m">##START CASTER PRC MARKER FEATS##</entry>
<entry id="75291" lang="en" sex="m">The Archmage sacrifices the bonus spell slots he would gain in order to take a High Arcana feat at each level. He does, however, add his level to his base caster class when determining spell power (damage, duration...). </entry>
<entry id="75292" lang="en" sex="m">Archmage Spellcasting (Beguiler)</entry>
<entry id="75293" lang="en" sex="m">Archmage Spellcasting (Dread Necromancer)</entry>
<entry id="75294" lang="en" sex="m">Archmage Spellcasting (Sorcerer)</entry>
<entry id="75295" lang="en" sex="m">Archmage Spellcasting (Sublime Chord)</entry>
<entry id="75296" lang="en" sex="m">Archmage Spellcasting (Warmage)</entry>
<entry id="75297" lang="en" sex="m">Archmage Spellcasting (Wizard)</entry>
</tlk>

BIN
trunk/tools/.34_nwnsc.exe Normal file

Binary file not shown.

Binary file not shown.