2025/07/22 Update
Updated ruleset.2da. Drug Resistance should be able to target the caster. Changed crafting constants for better compatibility with nwn_script_comp. Made Mirror Image work better.
This commit is contained in:
parent
78615c847f
commit
2181120567
@ -25,7 +25,7 @@
|
|||||||
21 GOOD_AIM_MODIFIER 1
|
21 GOOD_AIM_MODIFIER 1
|
||||||
22 STUNNING_FIST_TO_HIT_MODIFIER -4
|
22 STUNNING_FIST_TO_HIT_MODIFIER -4
|
||||||
23 STUNNING_FIST_DAMAGE_MODIFIER -4
|
23 STUNNING_FIST_DAMAGE_MODIFIER -4
|
||||||
24 STUNNING_FIST_EFFECT_DURATION 6
|
24 STUNNING_FIST_EFFECT_DURATION 6.0
|
||||||
25 STUNNING_FIST_BASE_SAVE_DC 10
|
25 STUNNING_FIST_BASE_SAVE_DC 10
|
||||||
26 CRIPPLING_STRIKE_STRENGTH_MODIFIER 2
|
26 CRIPPLING_STRIKE_STRENGTH_MODIFIER 2
|
||||||
27 **** ****
|
27 **** ****
|
||||||
@ -336,12 +336,12 @@
|
|||||||
332 SKILL_EXAMINE_TRAP_DURATION 4.5f
|
332 SKILL_EXAMINE_TRAP_DURATION 4.5f
|
||||||
333 SKILL_OPEN_LOCK_DURATION 4.5f
|
333 SKILL_OPEN_LOCK_DURATION 4.5f
|
||||||
334 SKILL_LOCK_DURATION 4.5f
|
334 SKILL_LOCK_DURATION 4.5f
|
||||||
335 SKILL_HIDE_IN_PLAIN_SIGHT_COOLDOWN 6
|
335 SKILL_HIDE_IN_PLAIN_SIGHT_COOLDOWN 3000
|
||||||
336 SKILL_TAUNT_COOLDOWN 6000
|
336 SKILL_TAUNT_COOLDOWN 6000
|
||||||
337 SKILL_PICKPOCKET_COOLDOWN 6000
|
337 SKILL_PICKPOCKET_COOLDOWN 6000
|
||||||
338 SKILL_ANIMAL_EMPATHY_COOLDOWN 6000
|
338 SKILL_ANIMAL_EMPATHY_COOLDOWN 6000
|
||||||
339 ENCOUNTERS_ON_ENTER_FIRE_BEFORE_SPAWN 0
|
339 ENCOUNTERS_ON_ENTER_FIRE_BEFORE_SPAWN 0
|
||||||
340 **** ****
|
340 MONK_SPELL_RESISTANCE_CAN_BE_LOWERED 0
|
||||||
341 **** ****
|
341 **** ****
|
||||||
342 **** ****
|
342 **** ****
|
||||||
343 **** ****
|
343 **** ****
|
||||||
@ -522,3 +522,4 @@
|
|||||||
518 CHARGEN_ENABLE_RECOMMENDED_BUTTON 0
|
518 CHARGEN_ENABLE_RECOMMENDED_BUTTON 0
|
||||||
519 MULTICLASS_LIMIT 8
|
519 MULTICLASS_LIMIT 8
|
||||||
520 ALL_ASSOCIATES_CAN_INTERACT 0
|
520 ALL_ASSOCIATES_CAN_INTERACT 0
|
||||||
|
521 EMOTE_ANIMATIONS_USE_MDL_TIMINGS 0
|
||||||
|
@ -2545,7 +2545,7 @@
|
|||||||
2541 DEVILS_EYE 16829518 is_devils_eye D P vs 0x38 0x09 sp_devils_eye **** 3 **** **** **** 3 3 1500 head VCO_MEHEDEVIL01 **** **** SCO_MEGRDEVIL01 VS_CHANT_EVOC_HM VS_CHANT_EVOC_HF self 1000 **** **** **** c_devil_hit1 0 **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 1 16829519 1 0 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** **** **** **** **** **** ****
|
2541 DEVILS_EYE 16829518 is_devils_eye D P vs 0x38 0x09 sp_devils_eye **** 3 **** **** **** 3 3 1500 head VCO_MEHEDEVIL01 **** **** SCO_MEGRDEVIL01 VS_CHANT_EVOC_HM VS_CHANT_EVOC_HF self 1000 **** **** **** c_devil_hit1 0 **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 1 16829519 1 0 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** **** **** **** **** **** ****
|
||||||
2542 DEVILS_TAIL 16829520 **** T **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 16829521 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2542 DEVILS_TAIL 16829520 **** T **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 16829521 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
2543 DREAD_WORD 16829522 is_dread_word V S v 0x1d 0x0a sp_dread_word **** **** **** **** **** 3 3 1500 hand **** VCO_MEHANEVIL02 **** SCO_MEHANEVIL02 VS_CHANT_EVOC_LM VS_CHANT_EVOC_LF out 1000 **** VCA_OUTNEG **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 1 16829523 1 0 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2543 DREAD_WORD 16829522 is_dread_word V S v 0x1d 0x0a sp_dread_word **** **** **** **** **** 3 3 1500 hand **** VCO_MEHANEVIL02 **** SCO_MEHANEVIL02 VS_CHANT_EVOC_LM VS_CHANT_EVOC_LF out 1000 **** VCA_OUTNEG **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 1 16829523 1 0 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
2544 DRUG_RESISTANCE 16829524 is_drug_resist E T v 0x18 0x0a sp_drug_resist **** 1 **** **** **** 1 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2544 DRUG_RESISTANCE 16829524 is_drug_resist E T v 0x18 0x0b sp_drug_resist **** 1 **** **** **** 1 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
2545 ECTOPLASMIC_ENCHANCEMENT 16829526 is_ecto_enhnc N S vs 0x38 0x0c sp_ecto_enhnc **** **** **** **** **** 6 6 1500 hand **** VCO_MEHANEVIL01 **** SCO_MEGRDEVIL01 VS_CHANT_NECR_HM vs_chant_necr_hf Area 1000 **** VCA_OUTNEG **** SDR_GLOBEMAX 0 **** **** **** **** **** **** **** **** **** **** **** **** 8 **** 1 16829527 1 0 **** 0 **** **** **** **** sphere 6.67 **** 4 **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2545 ECTOPLASMIC_ENCHANCEMENT 16829526 is_ecto_enhnc N S vs 0x38 0x0c sp_ecto_enhnc **** **** **** **** **** 6 6 1500 hand **** VCO_MEHANEVIL01 **** SCO_MEGRDEVIL01 VS_CHANT_NECR_HM vs_chant_necr_hf Area 1000 **** VCA_OUTNEG **** SDR_GLOBEMAX 0 **** **** **** **** **** **** **** **** **** **** **** **** 8 **** 1 16829527 1 0 **** 0 **** **** **** **** sphere 6.67 **** 4 **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
2546 ETERNITY_OF_TORTURE 16829528 is_etern_tortr N S vs 0x38 0x0a sp_etern_tortr **** **** **** **** **** **** 9 1500 head VCO_MEHEDEVIL01 **** VCO_LGRINEVIL01 SCO_LGSPREVIL01 VS_CHANT_NECR_LM VS_CHANT_NECR_LF out 1000 **** **** **** SCA_OUTNEG 0 **** **** **** **** **** **** 1 **** **** **** **** **** 2 **** 1 16829529 1 0 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2546 ETERNITY_OF_TORTURE 16829528 is_etern_tortr N S vs 0x38 0x0a sp_etern_tortr **** **** **** **** **** **** 9 1500 head VCO_MEHEDEVIL01 **** VCO_LGRINEVIL01 SCO_LGSPREVIL01 VS_CHANT_NECR_LM VS_CHANT_NECR_LF out 1000 **** **** **** SCA_OUTNEG 0 **** **** **** **** **** **** 1 **** **** **** **** **** 2 **** 1 16829529 1 0 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
2547 EVIL_EYE 16829530 is_evil_eye E S s 0x28 0x0a sp_evil_eye **** **** **** **** **** 3 3 1500 hand **** VCO_MEHANEVIL01 **** SCO_MEHANEVIL01 VS_CHANT_ENCH_HM VS_CHANT_ENCH_HF out 1000 **** VCA_OUTEVIL01 **** SCA_OUTNEG 0 **** **** **** **** **** **** 1 **** **** **** **** **** 2 **** 1 16829531 1 0 **** 1 **** **** **** **** **** **** **** **** 3 **** **** **** **** **** **** **** **** **** **** **** **** ****
|
2547 EVIL_EYE 16829530 is_evil_eye E S s 0x28 0x0a sp_evil_eye **** **** **** **** **** 3 3 1500 hand **** VCO_MEHANEVIL01 **** SCO_MEHANEVIL01 VS_CHANT_ENCH_HM VS_CHANT_ENCH_HF out 1000 **** VCA_OUTEVIL01 **** SCA_OUTNEG 0 **** **** **** **** **** **** 1 **** **** **** **** **** 2 **** 1 16829531 1 0 **** 1 **** **** **** **** **** **** **** **** 3 **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -4402,7 +4402,7 @@
|
|||||||
4398 Sorcerer_Disguise_Self_QS1 16830731 is_Disguise1 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460597177 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4398 Sorcerer_Disguise_Self_QS1 16830731 is_Disguise1 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460597177 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4399 Sorcerer_Disguise_Self_QS2 16830732 is_Disguise2 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460662713 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4399 Sorcerer_Disguise_Self_QS2 16830732 is_Disguise2 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460662713 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4400 Sorcerer_Disguise_Self_QS3 16830733 is_Disguise3 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460728249 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4400 Sorcerer_Disguise_Self_QS3 16830733 is_Disguise3 I P vs 0x3a 0x01 prc_SORC_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 4395 3 16822661 1 0 **** 0 460728249 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4401 Sorcerer_DRUG_RESISTANCE 16830734 is_drug_resist E T v 0x18 0x0a prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10170 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4401 Sorcerer_DRUG_RESISTANCE 16830734 is_drug_resist E T v 0x18 0x0b prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10170 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4402 Sorcerer_Endure_Elements 16830735 is_EndElem A T vs 0x3a 0x2B prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10171 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4402 Sorcerer_Endure_Elements 16830735 is_EndElem A T vs 0x3a 0x2B prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10171 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4403 Sorcerer_ENLARGE_PERSON 16830736 is_Enlarge T S vs 0x3a 0x0B prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 9 **** 1 16829173 1 0 **** 0 10172 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4403 Sorcerer_ENLARGE_PERSON 16830736 is_Enlarge T S vs 0x3a 0x0B prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 9 **** 1 16829173 1 0 **** 0 10172 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
4404 Sorcerer_Expeditious_Retreat 16830737 is_X1ExpRet T P vs 0x3a 0x09 prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 head **** **** vco_megrdodd01 sco_megrdodd01 vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 1 2676 1 0 **** 0 10173 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
4404 Sorcerer_Expeditious_Retreat 16830737 is_X1ExpRet T P vs 0x3a 0x09 prc_SORC_sp_gen **** **** **** **** **** **** 1 1500 head **** **** vco_megrdodd01 sco_megrdodd01 vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 1 2676 1 0 **** 0 10173 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -5308,9 +5308,9 @@
|
|||||||
5304 Ocular_Adept_Quickened_Doom 16831637 is_Doom E M vs 0x3a 0x2A prc_OCU_qu_gen **** **** **** **** **** **** 5 0 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 0 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10882 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5304 Ocular_Adept_Quickened_Doom 16831637 is_Doom E M vs 0x3a 0x2A prc_OCU_qu_gen **** **** **** **** **** **** 5 0 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 0 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10882 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5305 Ocular_Adept_Silent_Doom 16831638 is_Doom E M vs 0x3a 0x2A prc_OCU_si_gen **** **** **** **** **** **** 2 1500 head vco_mehedodd01 **** **** **** **** **** touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10883 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5305 Ocular_Adept_Silent_Doom 16831638 is_Doom E M vs 0x3a 0x2A prc_OCU_si_gen **** **** **** **** **** **** 2 1500 head vco_mehedodd01 **** **** **** **** **** touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10883 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5306 Ocular_Adept_Still_Doom 16831639 is_Doom E M vs 0x3a 0x2A prc_OCU_st_gen **** **** **** **** **** **** 2 1500 **** vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10884 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5306 Ocular_Adept_Still_Doom 16831639 is_Doom E M vs 0x3a 0x2A prc_OCU_st_gen **** **** **** **** **** **** 2 1500 **** vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 10884 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5307 Ocular_Adept_DRUG_RESISTANCE 16831640 is_drug_resist E T v 0x18 0x0a prc_OCU_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10885 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5307 Ocular_Adept_DRUG_RESISTANCE 16831640 is_drug_resist E T v 0x18 0x0b prc_OCU_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10885 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5308 Ocular_Adept_Quickened_DRUG_RESISTANCE 16831641 is_drug_resist E T v 0x18 0x0a prc_OCU_qu_gen **** **** **** **** **** **** 5 0 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 0 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10886 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5308 Ocular_Adept_Quickened_DRUG_RESISTANCE 16831641 is_drug_resist E T v 0x18 0x0b prc_OCU_qu_gen **** **** **** **** **** **** 5 0 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 0 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10886 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5309 Ocular_Adept_Silent_DRUG_RESISTANCE 16831642 is_drug_resist E T v 0x18 0x0a prc_OCU_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10887 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5309 Ocular_Adept_Silent_DRUG_RESISTANCE 16831642 is_drug_resist E T v 0x18 0x0b prc_OCU_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 10887 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5310 Ocular_Adept_Endure_Elements 16831643 is_EndElem A T vs 0x3a 0x2B prc_OCU_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10888 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5310 Ocular_Adept_Endure_Elements 16831643 is_EndElem A T vs 0x3a 0x2B prc_OCU_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10888 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5311 Ocular_Adept_Exteneded_Endure_Elements 16831644 is_EndElem A T vs 0x3a 0x2B prc_OCU_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10889 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5311 Ocular_Adept_Exteneded_Endure_Elements 16831644 is_EndElem A T vs 0x3a 0x2B prc_OCU_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10889 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
5312 Ocular_Adept_Quickened_Endure_Elements 16831645 is_EndElem A T vs 0x3a 0x2B prc_OCU_qu_gen **** **** **** **** **** **** 5 0 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10890 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
5312 Ocular_Adept_Quickened_Endure_Elements 16831645 is_EndElem A T vs 0x3a 0x2B prc_OCU_qu_gen **** **** **** **** **** **** 5 0 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 10890 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -6575,8 +6575,8 @@
|
|||||||
6571 CultistShatteredP_Rouse 16840207 is_mscharm E S vs 0x38 0x0c prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf up 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11993 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6571 CultistShatteredP_Rouse 16840207 is_mscharm E S vs 0x38 0x0c prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf up 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11993 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6572 CultistShatteredP_Silent_Rouse 16840208 is_mscharm E S vs 0x38 0x0c prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** **** **** **** **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11994 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6572 CultistShatteredP_Silent_Rouse 16840208 is_mscharm E S vs 0x38 0x0c prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** **** **** **** **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11994 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6573 CultistShatteredP_Still_Rouse 16840209 is_mscharm E S vs 0x38 0x0c prc_CULTS_st_gen **** **** **** **** **** **** 2 1500 **** **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11995 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6573 CultistShatteredP_Still_Rouse 16840209 is_mscharm E S vs 0x38 0x0c prc_CULTS_st_gen **** **** **** **** **** **** 2 1500 **** **** **** **** **** vs_chant_ench_hm vs_chant_ench_hf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 23 **** 1 16826684 1 0 **** 0 11995 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6574 CultistShatteredP_DRUG_RESISTANCE 16840210 is_drug_resist E T v 0x18 0x0a prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 11996 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6574 CultistShatteredP_DRUG_RESISTANCE 16840210 is_drug_resist E T v 0x18 0x0b prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 11996 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6575 CultistShatteredP_Silent_DRUG_RESISTANCE 16840211 is_drug_resist E T v 0x18 0x0a prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 11997 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6575 CultistShatteredP_Silent_DRUG_RESISTANCE 16840211 is_drug_resist E T v 0x18 0x0b prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 11997 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6576 CultistShatteredP_Nybors_Gentle_Reminder 16840212 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 11998 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6576 CultistShatteredP_Nybors_Gentle_Reminder 16840212 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 11998 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6577 CultistShatteredP_Exteneded_Nybors_Gentle_Reminder 16840213 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 11999 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6577 CultistShatteredP_Exteneded_Nybors_Gentle_Reminder 16840213 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 11999 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6578 CultistShatteredP_Silent_Nybors_Gentle_Reminder 16840214 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehanmind01 **** **** **** **** out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 12000 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6578 CultistShatteredP_Silent_Nybors_Gentle_Reminder 16840214 is_nybgentrem E S vs 0x3a 0x0a prc_CULTS_si_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehanmind01 **** **** **** **** out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 12000 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -6667,7 +6667,7 @@
|
|||||||
6663 Beguiler_Disguise_Self_QS1 16840299 is_Disguise1 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484781857 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6663 Beguiler_Disguise_Self_QS1 16840299 is_Disguise1 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484781857 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6664 Beguiler_Disguise_Self_QS2 16840300 is_Disguise2 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484847393 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6664 Beguiler_Disguise_Self_QS2 16840300 is_Disguise2 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484847393 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6665 Beguiler_Disguise_Self_QS3 16840301 is_Disguise3 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484912929 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6665 Beguiler_Disguise_Self_QS3 16840301 is_Disguise3 I P vs 0x3a 0x01 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1528 head vco_smhannatr01 **** **** sco_mehannatr01 **** **** up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 6660 3 16822661 1 0 **** 0 484912929 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6666 Beguiler_DRUG_RESISTANCE 16840302 is_drug_resist E T v 0x18 0x0a prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 12066 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6666 Beguiler_DRUG_RESISTANCE 16840302 is_drug_resist E T v 0x18 0x0b prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 12066 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6667 Beguiler_Expeditious_Retreat 16840303 is_X1ExpRet T P vs 0x3a 0x09 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 head **** **** vco_megrdodd01 sco_megrdodd01 vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 1 2676 1 0 **** 0 12067 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6667 Beguiler_Expeditious_Retreat 16840303 is_X1ExpRet T P vs 0x3a 0x09 prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 head **** **** vco_megrdodd01 sco_megrdodd01 vs_chant_ench_hm vs_chant_ench_hf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 1 2676 1 0 **** 0 12067 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6668 Beguiler_Mage_Armor 16840304 is_MageArm C T vs 0x3a 0x2B prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 16830210 1 0 **** 0 12068 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6668 Beguiler_Mage_Armor 16840304 is_MageArm C T vs 0x3a 0x2B prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 16830210 1 0 **** 0 12068 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
6669 Beguiler_Nybors_Gentle_Reminder 16840305 is_nybgentrem E S vs 0x3a 0x0a prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 12069 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
6669 Beguiler_Nybors_Gentle_Reminder 16840305 is_nybgentrem E S vs 0x3a 0x0a prc_BEGUI_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehanmind01 **** sco_mehanmind01 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830442 1 0 **** 1 12069 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -8009,7 +8009,7 @@
|
|||||||
8005 ****_DETECT_UNDEAD 16841641 is_detect_evil D M vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** **** **** out 1000 **** vco_gazeevil **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 1 16832271 1 0 **** 0 13269 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8005 ****_DETECT_UNDEAD 16841641 is_detect_evil D M vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** **** **** out 1000 **** vco_gazeevil **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 1 16832271 1 0 **** 0 13269 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8006 ****_Divine_Favor 16841642 is_X1DivFav V P vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanholy01 **** sco_mehanholy01 vs_chant_ench_lm vs_chant_ench_lf area 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 9 **** 1 54 1 0 **** 0 13270 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8006 ****_Divine_Favor 16841642 is_X1DivFav V P vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanholy01 **** sco_mehanholy01 vs_chant_ench_lm vs_chant_ench_lf area 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 9 **** 1 54 1 0 **** 0 13270 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8007 ****_Doom 16841643 is_Doom E M vs 0x3a 0x2A prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13271 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8007 ****_Doom 16841643 is_Doom E M vs 0x3a 0x2A prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13271 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8008 ****_DRUG_RESISTANCE 16841644 is_drug_resist E T v 0x18 0x0a prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13272 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8008 ****_DRUG_RESISTANCE 16841644 is_drug_resist E T v 0x18 0x0b prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13272 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8009 ****_Endure_Elements 16841645 is_EndElem A T vs 0x3a 0x2B prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13273 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8009 ****_Endure_Elements 16841645 is_EndElem A T vs 0x3a 0x2B prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13273 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8010 ****_Entropic_Shield 16841646 is_X1EShield A P vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 521 1 0 **** 0 13274 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8010 ****_Entropic_Shield 16841646 is_X1EShield A P vs 0x3a 0x09 prc_MYST_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 521 1 0 **** 0 13274 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8011 ****_EXTRACT_DRUG 16841647 is_extract_drug C P vs 0x38 0x09 prc_radialbug **** **** **** **** **** **** 1 1500 hand **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 8012 8013 8014 8015 **** **** **** **** 16829541 **** **** **** **** 13275 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8011 ****_EXTRACT_DRUG 16841647 is_extract_drug C P vs 0x38 0x09 prc_radialbug **** **** **** **** **** **** 1 1500 hand **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 8012 8013 8014 8015 **** **** **** **** 16829541 **** **** **** **** 13275 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -8548,9 +8548,9 @@
|
|||||||
8544 Archivist_Quickened_Doom 16842180 is_Doom E M vs 0x3a 0x2A prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 0 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13699 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8544 Archivist_Quickened_Doom 16842180 is_Doom E M vs 0x3a 0x2A prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 0 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13699 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8545 Archivist_Silent_Doom 16842181 is_Doom E M vs 0x3a 0x2A prc_ARCHV_si_gen **** **** **** **** **** **** 2 1500 head vco_mehedodd01 **** **** **** **** **** touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13700 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8545 Archivist_Silent_Doom 16842181 is_Doom E M vs 0x3a 0x2A prc_ARCHV_si_gen **** **** **** **** **** **** 2 1500 head vco_mehedodd01 **** **** **** **** **** touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13700 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8546 Archivist_Still_Doom 16842182 is_Doom E M vs 0x3a 0x2A prc_ARCHV_st_gen **** **** **** **** **** **** 2 1500 **** vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13701 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8546 Archivist_Still_Doom 16842182 is_Doom E M vs 0x3a 0x2A prc_ARCHV_st_gen **** **** **** **** **** **** 2 1500 **** vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf **** 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 13701 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8547 Archivist_DRUG_RESISTANCE 16842183 is_drug_resist E T v 0x18 0x0a prc_ARCHV_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13702 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8547 Archivist_DRUG_RESISTANCE 16842183 is_drug_resist E T v 0x18 0x0b prc_ARCHV_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13702 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8548 Archivist_Quickened_DRUG_RESISTANCE 16842184 is_drug_resist E T v 0x18 0x0a prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 0 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13703 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8548 Archivist_Quickened_DRUG_RESISTANCE 16842184 is_drug_resist E T v 0x18 0x0b prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 0 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13703 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8549 Archivist_Silent_DRUG_RESISTANCE 16842185 is_drug_resist E T v 0x18 0x0a prc_ARCHV_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13704 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8549 Archivist_Silent_DRUG_RESISTANCE 16842185 is_drug_resist E T v 0x18 0x0b prc_ARCHV_si_gen **** **** **** **** **** **** 2 1500 hand **** VCO_MEHANHEAL02 **** **** **** **** touch 1000 **** VCA_OUTHOLY01 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 13704 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8550 Archivist_Endure_Elements 16842186 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13705 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8550 Archivist_Endure_Elements 16842186 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13705 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8551 Archivist_Exteneded_Endure_Elements 16842187 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13706 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8551 Archivist_Exteneded_Endure_Elements 16842187 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_ex_gen **** **** **** **** **** **** 2 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13706 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
8552 Archivist_Quickened_Endure_Elements 16842188 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13707 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8552 Archivist_Quickened_Endure_Elements 16842188 is_EndElem A T vs 0x3a 0x2B prc_ARCHV_qu_gen **** **** **** **** **** **** 5 0 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 13707 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@ -12360,7 +12360,7 @@
|
|||||||
12356 Favoured_Soul_DETECT_UNDEAD 16845992 is_detect_evil D M vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** **** **** out 1000 **** vco_gazeevil **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 1 16832271 1 0 **** 0 16792 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12356 Favoured_Soul_DETECT_UNDEAD 16845992 is_detect_evil D M vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 head **** **** **** **** **** **** out 1000 **** vco_gazeevil **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 1 16832271 1 0 **** 0 16792 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12357 Favoured_Soul_Divine_Favor 16845993 is_X1DivFav V P vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanholy01 **** sco_mehanholy01 vs_chant_ench_lm vs_chant_ench_lf area 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 9 **** 1 54 1 0 **** 0 16793 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12357 Favoured_Soul_Divine_Favor 16845993 is_X1DivFav V P vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanholy01 **** sco_mehanholy01 vs_chant_ench_lm vs_chant_ench_lf area 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 0 **** **** **** **** **** 9 **** 1 54 1 0 **** 0 16793 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12358 Favoured_Soul_Doom 16845994 is_Doom E M vs 0x3a 0x2A prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 16794 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12358 Favoured_Soul_Doom 16845994 is_Doom E M vs 0x3a 0x2A prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 head vco_mehedodd01 **** **** sco_mehedodd01 vs_chant_ench_lm vs_chant_ench_lf touch 1000 **** **** **** **** 0 **** **** **** **** **** Mind_Affecting 1 **** **** **** **** **** 2 **** 1 16830215 1 0 **** 1 16794 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12359 Favoured_Soul_DRUG_RESISTANCE 16845995 is_drug_resist E T v 0x18 0x0a prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 16795 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12359 Favoured_Soul_DRUG_RESISTANCE 16845995 is_drug_resist E T v 0x18 0x0b prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** VCO_MEHANHEAL02 **** SCO_MEHANMIND01 VS_CHANT_ENCH_LM VS_CHANT_ENCH_LF touch 1000 **** VCA_OUTHOLY01 **** SDR_SANCTUARY 0 **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 1 16829525 1 0 **** 0 16795 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12360 Favoured_Soul_Endure_Elements 16845996 is_EndElem A T vs 0x3a 0x2B prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 16796 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12360 Favoured_Soul_Endure_Elements 16845996 is_EndElem A T vs 0x3a 0x2B prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_mehannatr02 **** sco_mehannatr02 vs_chant_conj_lm vs_chant_conj_lf up 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 6147 1 0 **** 0 16796 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12361 Favoured_Soul_Entropic_Shield 16845997 is_X1EShield A P vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 521 1 0 **** 0 16797 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12361 Favoured_Soul_Entropic_Shield 16845997 is_X1EShield A P vs 0x3a 0x09 prc_FAVSO_sp_gen **** **** **** **** **** **** 1 1500 hand **** vco_smhanelec01 **** sco_mehanelec01 vs_chant_conj_lm vs_chant_conj_lf self 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 13 **** 1 521 1 0 **** 0 16797 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
12362 Favoured_Soul_EXTRACT_DRUG 16845998 is_extract_drug C P vs 0x38 0x09 prc_radialbug **** **** **** **** **** **** 1 1500 hand **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 12363 12364 12365 12366 **** **** **** **** 16829541 **** **** **** **** 16798 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12362 Favoured_Soul_EXTRACT_DRUG 16845998 is_extract_drug C P vs 0x38 0x09 prc_radialbug **** **** **** **** **** **** 1 1500 hand **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** 12363 12364 12365 12366 **** **** **** **** 16829541 **** **** **** **** 16798 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
@ -173,7 +173,7 @@
|
|||||||
169 AOE_PER_PYROTECHNICS_SMOKE C 6.096 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
169 AOE_PER_PYROTECHNICS_SMOKE C 6.096 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
170 AOE_PER_FIRE_TRAP C 1.524 **** **** sp_fire_trapA **** **** 0 **** vps_delfireb vps_delfireb vps_delfireb 5 5 5 3400 1100 1900 0 0 0.25 **** sps_delfireb **** **** **** vps_delfireb_L vps_delfireb_L vps_delfireb_L
|
170 AOE_PER_FIRE_TRAP C 1.524 **** **** sp_fire_trapA **** **** 0 **** vps_delfireb vps_delfireb vps_delfireb 5 5 5 3400 1100 1900 0 0 0.25 **** sps_delfireb **** **** **** vps_delfireb_L vps_delfireb_L vps_delfireb_L
|
||||||
171 VFX_PER_PRISMATIC_WALL R **** 15 1 sp_prism_wallA **** **** **** 891 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
171 VFX_PER_PRISMATIC_WALL R **** 15 1 sp_prism_wallA **** **** **** 891 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
172 VFX_MOB_RING_OF_BLADES C 1.524 **** **** sp_ring_bldsa **** sp_ring_bldsC **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
172 VFX_MOB_RING_OF_BLADES C 1.524 **** **** sp_ring_bldsa **** sp_ring_bldsc **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
173 VFX_PER_PRISMATIC_SPHERE C 3.048 **** **** sp_prismt_sphrA sp_prismt_sphrB **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
173 VFX_PER_PRISMATIC_SPHERE C 3.048 **** **** sp_prismt_sphrA sp_prismt_sphrB **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
174 VFX_PER_OTILUKES_RESILIENT_SPHERE C 3.048 **** **** sp_otiluke_rsA sp_otiluke_rsB **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
174 VFX_PER_OTILUKES_RESILIENT_SPHERE C 3.048 **** **** sp_otiluke_rsA sp_otiluke_rsB **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
175 VFX_PER_SLEET_STORM C 12.192 **** **** sp_sleet_stormA sp_sleet_stormB sp_sleet_stormC 0 248 vps_sstorm vps_sstorm vps_sstorm 15 15 15 3400 1100 1900 0 0 0.25 **** sps_storm **** **** **** vps_sstorm_L vps_sstorm_L vps_sstorm_L
|
175 VFX_PER_SLEET_STORM C 12.192 **** **** sp_sleet_stormA sp_sleet_stormB sp_sleet_stormC 0 248 vps_sstorm vps_sstorm vps_sstorm 15 15 15 3400 1100 1900 0 0 0.25 **** sps_storm **** **** **** vps_sstorm_L vps_sstorm_L vps_sstorm_L
|
||||||
|
@ -1069,11 +1069,11 @@ void CreateSwitchNameArray()
|
|||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_MAXLEVEL);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_MAXLEVEL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_COSTMODIFIER);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_COSTMODIFIER);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_SCRIBESCROLL_COSTMODIFIER);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_SCRIBESCROLL_COSTMODIFIER);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_MAXLEVEL);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_MAXLEVEL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_COSTMODIFIER);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_COSTMODIFIER);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE);
|
||||||
|
623
nwn/nwnprc/trunk/include/nw_inc_gff.nss
Normal file
623
nwn/nwnprc/trunk/include/nw_inc_gff.nss
Normal file
@ -0,0 +1,623 @@
|
|||||||
|
// This is a helper library for advanced use: It allows constructing arbitrary gff data.
|
||||||
|
// You can then spawn your object via JsonToObject().
|
||||||
|
//
|
||||||
|
// The data format is the same as https://github.com/niv/neverwinter.nim@1.4.3+.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// json j = GffCreateObject(OBJECT_TYPE_ITEM);
|
||||||
|
// j = GffAddInt(j, "BaseItem", BASE_ITEM_BELT);
|
||||||
|
// j = GffAddInt(j, "ModelPart1", 12);
|
||||||
|
// j = GffAddLocString(j, "LocalizedName", "hi!");
|
||||||
|
// object belt = JsonToObject(j, GetLocation(OBJECT_SELF));
|
||||||
|
|
||||||
|
|
||||||
|
const string GFF_FIELD_TYPE_STRUCT = "struct";
|
||||||
|
const string GFF_FIELD_TYPE_LIST = "list";
|
||||||
|
const string GFF_FIELD_TYPE_BYTE = "byte";
|
||||||
|
const string GFF_FIELD_TYPE_CHAR = "char";
|
||||||
|
const string GFF_FIELD_TYPE_WORD = "word";
|
||||||
|
const string GFF_FIELD_TYPE_SHORT = "short";
|
||||||
|
const string GFF_FIELD_TYPE_DWORD = "dword";
|
||||||
|
const string GFF_FIELD_TYPE_INT = "int";
|
||||||
|
const string GFF_FIELD_TYPE_DWORD64 = "dword64";
|
||||||
|
const string GFF_FIELD_TYPE_INT64 = "int64";
|
||||||
|
const string GFF_FIELD_TYPE_FLOAT = "float";
|
||||||
|
const string GFF_FIELD_TYPE_DOUBLE = "double";
|
||||||
|
const string GFF_FIELD_TYPE_RESREF = "resref";
|
||||||
|
const string GFF_FIELD_TYPE_STRING = "cexostring";
|
||||||
|
const string GFF_FIELD_TYPE_LOC_STRING = "cexolocstring";
|
||||||
|
|
||||||
|
|
||||||
|
// Create a empty object of the given type. You need to manually fill in all
|
||||||
|
// GFF data with GffAddXXX. This will require understanding of the GFF file format
|
||||||
|
// and what data fields each object type requires.
|
||||||
|
json GffCreateObject(int nObjectType);
|
||||||
|
// Create a combined area format(CAF) object. You need to manually create the ARE and GIT objects with their required data fields.
|
||||||
|
json GffCreateArea(json jARE, json jGIT);
|
||||||
|
|
||||||
|
// Returns the OBJECT_TYPE_* of jGff.
|
||||||
|
// Note: Will return 0 for invalid object types, including areas.
|
||||||
|
int GffGetObjectType(json jGff);
|
||||||
|
// Returns TRUE if jGff is a combined area format(CAF) object.
|
||||||
|
int GffGetIsArea(json jGff);
|
||||||
|
|
||||||
|
// Returns TRUE if a field named sLabel of sType exists in jGff.
|
||||||
|
// * sLabel: Can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// * sType: An optional GFF_FIELD_TYPE_*, leave empty to check if sLabel exists regardless of type.
|
||||||
|
int GffGetFieldExists(json jGff, string sLabel, string sType = "");
|
||||||
|
|
||||||
|
|
||||||
|
// Add a new field, will overwrite any existing fields with the same label even if the type is different.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to add the tag of an area to an empty combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = GffCreateArea(JsonObject(), JsonObject());
|
||||||
|
// jArea = GffAddString(jArea, "ARE/value/Tag", "AREA_TAG");
|
||||||
|
|
||||||
|
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1);
|
||||||
|
json GffAddList(json jGff, string sLabel, json jList);
|
||||||
|
json GffAddByte(json jGff, string sLabel, int v);
|
||||||
|
json GffAddChar(json jGff, string sLabel, int v);
|
||||||
|
json GffAddWord(json jGff, string sLabel, int v);
|
||||||
|
json GffAddShort(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDword(json jGff, string sLabel, int v);
|
||||||
|
json GffAddInt(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDword64(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddInt64(json jGff, string sLabel, int v);
|
||||||
|
json GffAddFloat(json jGff, string sLabel, float v);
|
||||||
|
// Note: Only data of type float will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDouble(json jGff, string sLabel, float v);
|
||||||
|
json GffAddResRef(json jGff, string sLabel, string v);
|
||||||
|
json GffAddString(json jGff, string sLabel, string v);
|
||||||
|
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1);
|
||||||
|
|
||||||
|
|
||||||
|
// Replace a field, the type must match and the field must exist.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to replace the name of an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = ObjectToStruct(GetFirstArea());
|
||||||
|
// jArea = GffReplaceLocString(jArea, "ARE/value/Name", "New Area Name");
|
||||||
|
|
||||||
|
json GffReplaceStruct(json jGff, string sLabel, json jStruct);
|
||||||
|
json GffReplaceList(json jGff, string sLabel, json jList);
|
||||||
|
json GffReplaceByte(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceChar(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceWord(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceShort(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDword(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceInt(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDword64(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceInt64(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceFloat(json jGff, string sLabel, float v);
|
||||||
|
// Note: Only data of type float will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDouble(json jGff, string sLabel, float v);
|
||||||
|
json GffReplaceResRef(json jGff, string sLabel, string v);
|
||||||
|
json GffReplaceString(json jGff, string sLabel, string v);
|
||||||
|
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1);
|
||||||
|
|
||||||
|
|
||||||
|
// Remove a field, the type must match and the field must exist.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to remove all placeables from an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = ObjectToStruct(GetFirstArea());
|
||||||
|
// jArea = GffRemoveList(jArea, "GIT/value/Placeable List");
|
||||||
|
|
||||||
|
json GffRemoveStruct(json jGff, string sLabel);
|
||||||
|
json GffRemoveList(json jGff, string sLabel);
|
||||||
|
json GffRemoveByte(json jGff, string sLabel);
|
||||||
|
json GffRemoveChar(json jGff, string sLabel);
|
||||||
|
json GffRemoveWord(json jGff, string sLabel);
|
||||||
|
json GffRemoveShort(json jGff, string sLabel);
|
||||||
|
json GffRemoveDword(json jGff, string sLabel);
|
||||||
|
json GffRemoveInt(json jGff, string sLabel);
|
||||||
|
json GffRemoveDword64(json jGff, string sLabel);
|
||||||
|
json GffRemoveInt64(json jGff, string sLabel);
|
||||||
|
json GffRemoveFloat(json jGff, string sLabel);
|
||||||
|
json GffRemoveDouble(json jGff, string sLabel);
|
||||||
|
json GffRemoveResRef(json jGff, string sLabel);
|
||||||
|
json GffRemoveString(json jGff, string sLabel);
|
||||||
|
json GffRemoveLocString(json jGff, string sLabel);
|
||||||
|
|
||||||
|
|
||||||
|
// Get a field's value as json object.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// Note: Json types do not implicitly convert between types, this means you cannot convert a JsonInt to a string with JsonGetString(), etc.
|
||||||
|
// You may need to check the type with JsonGetType() and then do the appropriate cast yourself.
|
||||||
|
// For GffGet*() functions the json type returned is noted in the function description.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// INCORRECT: string s = JsonGetString(GffGetInt());
|
||||||
|
// CORRECT: string s = IntToString(JsonGetInt(GffGetInt()));
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to get the resref of an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jResRef = GffGetResRef(ObjectToStruct(GetFirstArea()), "ARE/value/ResRef");
|
||||||
|
// if (jResRef != JsonNull())
|
||||||
|
// {
|
||||||
|
// string sResRef = JsonGetString(jResRef);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// WriteTimestampedLogEntry("Failed to get area ResRef: " + JsonGetError(jResRef));
|
||||||
|
|
||||||
|
// Returns the struct as JsonObject() on success.
|
||||||
|
json GffGetStruct(json jGff, string sLabel);
|
||||||
|
// Returns a JsonArray() with all the list elements on success.
|
||||||
|
json GffGetList(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetByte(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetChar(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetWord(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetShort(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetDword(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetInt(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetDword64(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetInt64(json jGff, string sLabel);
|
||||||
|
// Returns a JsonFloat() on success.
|
||||||
|
json GffGetFloat(json jGff, string sLabel);
|
||||||
|
// Returns a JsonFloat() on success.
|
||||||
|
json GffGetDouble(json jGff, string sLabel);
|
||||||
|
// Returns a JsonString() on success.
|
||||||
|
json GffGetResRef(json jGff, string sLabel);
|
||||||
|
// Returns a JsonString() on success.
|
||||||
|
json GffGetString(json jGff, string sLabel);
|
||||||
|
// Returns a JsonObject() on success.
|
||||||
|
// Key "0" will have a JsonString() with the string, if set.
|
||||||
|
// Key "id" will have a JsonInt() with the strref, if set.
|
||||||
|
json GffGetLocString(json jGff, string sLabel);
|
||||||
|
|
||||||
|
|
||||||
|
// *** Internal Helper Functions
|
||||||
|
json AddPatchOperation(json jPatchArray, string sOp, string sPath, json jValue)
|
||||||
|
{
|
||||||
|
json jOperation = JsonObject();
|
||||||
|
jOperation = JsonObjectSet(jOperation, "op", JsonString(sOp));
|
||||||
|
jOperation = JsonObjectSet(jOperation, "path", JsonString(sPath));
|
||||||
|
jOperation = JsonObjectSet(jOperation, "value", jValue);
|
||||||
|
return JsonArrayInsert(jPatchArray, jOperation);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddField(json jGff, string sLabel, string sType, json jValue, int nType = -1)
|
||||||
|
{
|
||||||
|
json jField = JsonObject();
|
||||||
|
jField = JsonObjectSet(jField, "type", JsonString(sType));
|
||||||
|
jField = JsonObjectSet(jField, "value", jValue);
|
||||||
|
if (sType == GFF_FIELD_TYPE_STRUCT && nType != -1)
|
||||||
|
jField = JsonObjectSet(jField, "__struct_id", JsonInt(nType));
|
||||||
|
|
||||||
|
return JsonPatch(jGff, AddPatchOperation(JsonArray(), "add", "/" + sLabel, jField));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceField(json jGff, string sLabel, string sType, json jValue)
|
||||||
|
{
|
||||||
|
json jPatch = JsonArray();
|
||||||
|
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
|
||||||
|
jPatch = AddPatchOperation(jPatch, "replace", "/" + sLabel + "/value", jValue);
|
||||||
|
return JsonPatch(jGff, jPatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveField(json jGff, string sLabel, string sType)
|
||||||
|
{
|
||||||
|
json jPatch = JsonArray();
|
||||||
|
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
|
||||||
|
jPatch = AddPatchOperation(jPatch, "remove", "/" + sLabel, JsonNull());
|
||||||
|
return JsonPatch(jGff, jPatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFieldType(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return JsonPointer(jGff, "/" + sLabel + "/type");
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFieldValue(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return JsonPointer(jGff, "/" + sLabel + "/value");
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetField(json jGff, string sLabel, string sType)
|
||||||
|
{
|
||||||
|
json jType = GffGetFieldType(jGff, sLabel);
|
||||||
|
if (jType == JsonNull())
|
||||||
|
return jType;
|
||||||
|
else if (jType != JsonString(sType))
|
||||||
|
return JsonNull("field type does not match");
|
||||||
|
else
|
||||||
|
return GffGetFieldValue(jGff, sLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffLocString(string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
json jLocString = JsonObject();
|
||||||
|
if (v != "")
|
||||||
|
jLocString = JsonObjectSet(jLocString, "0", JsonString(v)); // english/any
|
||||||
|
if (nStrRef != -1)
|
||||||
|
jLocString = JsonObjectSet(jLocString, "id", JsonInt(nStrRef));
|
||||||
|
|
||||||
|
return jLocString;
|
||||||
|
}
|
||||||
|
//***
|
||||||
|
|
||||||
|
json GffCreateObject(int nObjectType)
|
||||||
|
{
|
||||||
|
string ot;
|
||||||
|
if (nObjectType == OBJECT_TYPE_CREATURE) ot = "UTC ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_ITEM) ot = "UTI ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_TRIGGER) ot = "UTT ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_DOOR) ot = "UTD ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_WAYPOINT) ot = "UTW ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_PLACEABLE) ot = "UTP ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_STORE) ot = "UTM ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_ENCOUNTER) ot = "UTE ";
|
||||||
|
|
||||||
|
if (ot == "") return JsonNull("invalid object type");
|
||||||
|
|
||||||
|
json ret = JsonObject();
|
||||||
|
ret = JsonObjectSet(ret, "__data_type", JsonString(ot));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffCreateArea(json jARE, json jGIT)
|
||||||
|
{
|
||||||
|
json jCAF = JsonObject();
|
||||||
|
jCAF = JsonObjectSet(jCAF, "__data_type", JsonString("CAF "));
|
||||||
|
jCAF = GffAddStruct(jCAF, "ARE", jARE, 0);
|
||||||
|
jCAF = GffAddStruct(jCAF, "GIT", jGIT, 1);
|
||||||
|
return jCAF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int GffGetObjectType(json jGff)
|
||||||
|
{
|
||||||
|
json jDataType = JsonObjectGet(jGff, "__data_type");
|
||||||
|
if (jDataType == JsonNull())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string sObjectType = JsonGetString(jDataType);
|
||||||
|
|
||||||
|
if (sObjectType == "UTC ") return OBJECT_TYPE_CREATURE;
|
||||||
|
else if (sObjectType == "UTI ") return OBJECT_TYPE_ITEM;
|
||||||
|
else if (sObjectType == "UTT ") return OBJECT_TYPE_TRIGGER;
|
||||||
|
else if (sObjectType == "UTD ") return OBJECT_TYPE_DOOR;
|
||||||
|
else if (sObjectType == "UTW ") return OBJECT_TYPE_WAYPOINT;
|
||||||
|
else if (sObjectType == "UTP ") return OBJECT_TYPE_PLACEABLE;
|
||||||
|
else if (sObjectType == "UTM ") return OBJECT_TYPE_STORE;
|
||||||
|
else if (sObjectType == "UTE ") return OBJECT_TYPE_ENCOUNTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GffGetIsArea(json jGff)
|
||||||
|
{
|
||||||
|
return JsonObjectGet(jGff, "__data_type") == JsonString("CAF ");
|
||||||
|
}
|
||||||
|
|
||||||
|
int GffGetFieldExists(json jGff, string sLabel, string sType = "")
|
||||||
|
{
|
||||||
|
json jFieldType = GffGetFieldType(jGff, sLabel);
|
||||||
|
return sType == "" ? jFieldType != JsonNull() : jFieldType == JsonString(sType);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct, nType);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddList(json jGff, string sLabel, json jList)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddByte(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddChar(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddWord(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddShort(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDword(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddInt(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDword64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddInt64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddFloat(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDouble(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddResRef(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddString(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffReplaceStruct(json jGff, string sLabel, json jStruct)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceList(json jGff, string sLabel, json jList)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceByte(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceChar(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceWord(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceShort(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDword(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceInt(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDword64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceInt64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceFloat(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDouble(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceResRef(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceString(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffRemoveStruct(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveList(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveByte(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveChar(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveWord(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveShort(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDword(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveInt(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDword64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveInt64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveFloat(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDouble(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveResRef(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveLocString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffGetStruct(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetList(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetByte(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetChar(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetWord(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetShort(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDword(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetInt(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDword64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetInt64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFloat(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDouble(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetResRef(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetLocString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
|
||||||
|
}
|
@ -1961,45 +1961,46 @@ const string PRC_CRAFTING_BASE_ITEMS = "PRC_CRAFTING_BASE_ITEMS";
|
|||||||
* Max level of spells brewed into potions
|
* Max level of spells brewed into potions
|
||||||
* defaults to 3
|
* defaults to 3
|
||||||
*/
|
*/
|
||||||
const string X2_CI_BREWPOTION_MAXLEVEL = "X2_CI_BREWPOTION_MAXLEVEL";
|
//const string X2_CI_BREWPOTION_MAXLEVEL = "X2_CI_BREWPOTION_MAXLEVEL";
|
||||||
|
const string PRC_X2_BREWPOTION_MAXLEVEL = "PRC_X2_BREWPOTION_MAXLEVEL";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells brewed into poitions
|
* cost modifier of spells brewed into poitions
|
||||||
* defaults to 50
|
* defaults to 50
|
||||||
*/
|
*/
|
||||||
const string X2_CI_BREWPOTION_COSTMODIFIER = "X2_CI_BREWPOTION_COSTMODIFIER";
|
const string PRC_X2_BREWPOTION_COSTMODIFIER = "PRC_X2_BREWPOTION_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells scribed into scrolls
|
* cost modifier of spells scribed into scrolls
|
||||||
* defaults to 25
|
* defaults to 25
|
||||||
*/
|
*/
|
||||||
const string X2_CI_SCRIBESCROLL_COSTMODIFIER = "X2_CI_SCRIBESCROLL_COSTMODIFIER";
|
const string PRC_X2_SCRIBESCROLL_COSTMODIFIER = "PRC_X2_SCRIBESCROLL_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Max level of spells crafted into wands
|
* Max level of spells crafted into wands
|
||||||
* defaults to 4
|
* defaults to 4
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTWAND_MAXLEVEL = "X2_CI_CRAFTWAND_MAXLEVEL";
|
const string PRC_X2_CRAFTWAND_MAXLEVEL = "PRC_X2_CRAFTWAND_MAXLEVEL";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells crafted into wands
|
* cost modifier of spells crafted into wands
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTWAND_COSTMODIFIER = "X2_CI_CRAFTWAND_COSTMODIFIER";
|
const string PRC_X2_CRAFTWAND_COSTMODIFIER = "PRC_X2_CRAFTWAND_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells crafted into rods
|
* cost modifier of spells crafted into rods
|
||||||
* note that adding a second spell costs 75% and 3 or more costs 50%
|
* note that adding a second spell costs 75% and 3 or more costs 50%
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTROD_COSTMODIFIER = "X2_CI_CRAFTROD_COSTMODIFIER";
|
const string PRC_X2_CRAFTROD_COSTMODIFIER = "PRC_X2_CRAFTROD_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells crafted into staffs
|
* cost modifier of spells crafted into staffs
|
||||||
* note that adding a second spell costs 75% and 3 or more costs 50%
|
* note that adding a second spell costs 75% and 3 or more costs 50%
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTSTAFF_COSTMODIFIER = "X2_CI_CRAFTSTAFF_COSTMODIFIER";
|
const string PRC_X2_CRAFTSTAFF_COSTMODIFIER = "PRC_X2_CRAFTSTAFF_COSTMODIFIER";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the use of arbitrary itemproperties and uses NWN item costs
|
* Allows the use of arbitrary itemproperties and uses NWN item costs
|
||||||
|
@ -44,14 +44,14 @@ const string X2_CI_CRAFTSKILL_CONV ="x2_p_craftskills";
|
|||||||
/* moved to be code switches
|
/* moved to be code switches
|
||||||
|
|
||||||
const int X2_CI_BREWPOTION_MAXLEVEL = 3; // Max Level for potions
|
const int X2_CI_BREWPOTION_MAXLEVEL = 3; // Max Level for potions
|
||||||
const int X2_CI_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier
|
const int PRC_X2_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier
|
||||||
|
|
||||||
// Scribe Scroll related constants
|
// Scribe Scroll related constants
|
||||||
const int X2_CI_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier
|
const int PRC_X2_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier
|
||||||
|
|
||||||
// Craft Wand related constants
|
// Craft Wand related constants
|
||||||
const int X2_CI_CRAFTWAND_MAXLEVEL = 4;
|
const int PRC_X2_CRAFTWAND_MAXLEVEL = 4;
|
||||||
const int X2_CI_CRAFTWAND_COSTMODIFIER = 750;
|
const int PRC_X2_CRAFTWAND_COSTMODIFIER = 750;
|
||||||
*/
|
*/
|
||||||
const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation
|
const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation
|
||||||
const int X2_CI_SCRIBESCROLL_FEAT_ID = 945;
|
const int X2_CI_SCRIBESCROLL_FEAT_ID = 945;
|
||||||
@ -593,7 +593,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// check if spell is below maxlevel for brew potions
|
// check if spell is below maxlevel for brew potions
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nPotionMaxLevel = GetPRCSwitch(X2_CI_BREWPOTION_MAXLEVEL);
|
int nPotionMaxLevel = GetPRCSwitch(PRC_X2_BREWPOTION_MAXLEVEL);
|
||||||
if(nPotionMaxLevel == 0)
|
if(nPotionMaxLevel == 0)
|
||||||
nPotionMaxLevel = 3;
|
nPotionMaxLevel = 3;
|
||||||
|
|
||||||
@ -624,7 +624,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nCostModifier = GetPRCSwitch(X2_CI_BREWPOTION_COSTMODIFIER);
|
int nCostModifier = GetPRCSwitch(PRC_X2_BREWPOTION_COSTMODIFIER);
|
||||||
if(nCostModifier == 0)
|
if(nCostModifier == 0)
|
||||||
nCostModifier = 50;
|
nCostModifier = 50;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_BREW_POTION_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_BREW_POTION_CASTER_LEVEL);
|
||||||
@ -728,7 +728,7 @@ int CICraftCheckScribeScroll(object oSpellTarget, object oCaster, int nID = 0)
|
|||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nLevel = CIGetSpellInnateLevel(nID,TRUE);
|
int nLevel = CIGetSpellInnateLevel(nID,TRUE);
|
||||||
int nCostModifier = GetPRCSwitch(X2_CI_SCRIBESCROLL_COSTMODIFIER);
|
int nCostModifier = GetPRCSwitch(PRC_X2_SCRIBESCROLL_COSTMODIFIER);
|
||||||
if(nCostModifier == 0)
|
if(nCostModifier == 0)
|
||||||
nCostModifier = 25;
|
nCostModifier = 25;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
||||||
@ -884,7 +884,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// check if spell is below maxlevel for craft want
|
// check if spell is below maxlevel for craft want
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nMaxLevel = GetPRCSwitch(X2_CI_CRAFTWAND_MAXLEVEL);
|
int nMaxLevel = GetPRCSwitch(PRC_X2_CRAFTWAND_MAXLEVEL);
|
||||||
if(nMaxLevel == 0)
|
if(nMaxLevel == 0)
|
||||||
nMaxLevel = 4;
|
nMaxLevel = 4;
|
||||||
if (nLevel > nMaxLevel)
|
if (nLevel > nMaxLevel)
|
||||||
@ -896,7 +896,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTWAND_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTWAND_COSTMODIFIER);
|
||||||
if(nCostMod == 0)
|
if(nCostMod == 0)
|
||||||
nCostMod = 750;
|
nCostMod = 750;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_WAND_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_WAND_CASTER_LEVEL);
|
||||||
@ -1027,7 +1027,7 @@ int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0
|
|||||||
These dont work as IPs since they are hardcoded */
|
These dont work as IPs since they are hardcoded */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTSTAFF_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTSTAFF_COSTMODIFIER);
|
||||||
if(!nCostMod) nCostMod = 750;
|
if(!nCostMod) nCostMod = 750;
|
||||||
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
||||||
@ -1175,7 +1175,7 @@ int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0)
|
|||||||
These dont work as IPs since they are hardcoded */
|
These dont work as IPs since they are hardcoded */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTROD_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTROD_COSTMODIFIER);
|
||||||
if(!nCostMod) nCostMod = 750;
|
if(!nCostMod) nCostMod = 750;
|
||||||
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
||||||
|
94
nwn/nwnprc/trunk/scripts/mirror_image_sa.nss
Normal file
94
nwn/nwnprc/trunk/scripts/mirror_image_sa.nss
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include "inc_debug"
|
||||||
|
#include "prc_inc_spells"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oSummoned = OBJECT_SELF;
|
||||||
|
|
||||||
|
// Get the caster of the potential dispel
|
||||||
|
object oCaster = GetLastSpellCaster();
|
||||||
|
int nCasterLevel = GetCasterLevel(oCaster);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: EVENT_NPC_ONSPELLCASTAT triggered.");
|
||||||
|
|
||||||
|
// Get the spell ID
|
||||||
|
int nSpellId = GetLastSpell();
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel spell ID: " + IntToString(nSpellId));
|
||||||
|
|
||||||
|
// Check if the spell ID is a dispel spell
|
||||||
|
if (nSpellId == SPELL_DISPEL_MAGIC || nSpellId == SPELL_LESSER_DISPEL || nSpellId == SPELL_GREATER_DISPELLING || nSpellId == SPELL_MORDENKAINENS_DISJUNCTION
|
||||||
|
|| nSpellId == SPELL_SLASHING_DISPEL || nSpellId == SPELL_DISPELLING_TOUCH || nSpellId == SPELL_PIXIE_DISPEL || nSpellId == SPELL_GREAT_WALL_OF_DISPEL)
|
||||||
|
{
|
||||||
|
// Get the target of the spell
|
||||||
|
object oTarget = OBJECT_SELF;
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Spell targeted at: " + GetName(oTarget));
|
||||||
|
|
||||||
|
// Check if the target is OBJECT_SELF
|
||||||
|
if (oTarget == OBJECT_SELF)
|
||||||
|
{
|
||||||
|
// Retrieve the original caster of the Spiritual Weapon spell from oSummon
|
||||||
|
object oSummon = OBJECT_SELF;
|
||||||
|
object oOriginalCaster = GetLocalObject(oSummon, "oMaster");
|
||||||
|
|
||||||
|
// Ensure oOriginalCaster is valid
|
||||||
|
if (GetIsObjectValid(oOriginalCaster))
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Original caster found. Caster level: " + IntToString(GetCasterLevel(oOriginalCaster)));
|
||||||
|
|
||||||
|
// Determine the DC for the dispel check
|
||||||
|
int nDispelDC = 11 + GetCasterLevel(oOriginalCaster);
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel DC: " + IntToString(nDispelDC));
|
||||||
|
|
||||||
|
// Determine the maximum cap for the dispel check
|
||||||
|
int nDispelCap = 0;
|
||||||
|
if (nSpellId == SPELL_LESSER_DISPEL)
|
||||||
|
nDispelCap = 5;
|
||||||
|
else if (nSpellId == SPELL_DISPEL_MAGIC || nSpellId == SPELL_SLASHING_DISPEL || nSpellId == SPELL_DISPELLING_TOUCH || nSpellId == SPELL_PIXIE_DISPEL || nSpellId == INVOKE_VORACIOUS_DISPELLING)
|
||||||
|
nDispelCap = 10;
|
||||||
|
else if (nSpellId == SPELL_GREATER_DISPELLING || nSpellId == SPELL_GREAT_WALL_OF_DISPEL)
|
||||||
|
nDispelCap = 15;
|
||||||
|
else if (nSpellId == SPELL_MORDENKAINENS_DISJUNCTION)
|
||||||
|
nDispelCap = 0; // No cap for Disjunction
|
||||||
|
|
||||||
|
// Roll for the dispel check
|
||||||
|
int nDispelRoll = d20();
|
||||||
|
int nCappedCasterLevel = nCasterLevel;
|
||||||
|
|
||||||
|
if (nDispelCap > 0 && nCasterLevel > nDispelCap)
|
||||||
|
nCappedCasterLevel = nDispelCap;
|
||||||
|
|
||||||
|
nDispelRoll += nCappedCasterLevel;
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel roll: " + IntToString(nDispelRoll) + " (Caster Level: " + IntToString(nCappedCasterLevel) + ", Cap: " + IntToString(nDispelCap) + ")");
|
||||||
|
|
||||||
|
// Compare the dispel result to the DC
|
||||||
|
if (nDispelRoll >= nDispelDC)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel check succeeded.");
|
||||||
|
|
||||||
|
// Dispel succeeded, destroy oSummon
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel Magic succeeded. Destroying Mirror Image.");
|
||||||
|
|
||||||
|
// Set flags and destroy objects with delays
|
||||||
|
SetPlotFlag(oSummon, FALSE);
|
||||||
|
SetImmortal(oSummon, FALSE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_DISPEL), oSummon);
|
||||||
|
|
||||||
|
DelayCommand(1.0f, DestroyObject(oSummon));
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Mirror Image destruction scheduled.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Dispel check failed.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("mirror_image_sa: Original caster not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
@ -21,6 +21,22 @@
|
|||||||
#include "shd_inc_myst"
|
#include "shd_inc_myst"
|
||||||
#include "prc_inc_template"
|
#include "prc_inc_template"
|
||||||
|
|
||||||
|
void RemoveExtraImages(object oPC)
|
||||||
|
{
|
||||||
|
string sImage1 = "PC_IMAGE"+ObjectToString(oPC)+"mirror";
|
||||||
|
string sImage2 = "PC_IMAGE"+ObjectToString(oPC)+"flurry";
|
||||||
|
|
||||||
|
object oCreature = GetFirstObjectInArea(GetArea(oPC));
|
||||||
|
while (GetIsObjectValid(oCreature))
|
||||||
|
{
|
||||||
|
if(GetTag(oCreature) == sImage1 || GetTag(oCreature) == sImage2)
|
||||||
|
{
|
||||||
|
DestroyObject(oCreature, 0.0);
|
||||||
|
}
|
||||||
|
oCreature = GetNextObjectInArea(GetArea(oPC));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PrcFeats(object oPC)
|
void PrcFeats(object oPC)
|
||||||
{
|
{
|
||||||
if(DEBUG) DoDebug("prc_rest: Evaluating PC feats for " + DebugObject2Str(oPC));
|
if(DEBUG) DoDebug("prc_rest: Evaluating PC feats for " + DebugObject2Str(oPC));
|
||||||
@ -349,6 +365,8 @@ void RestStarted(object oPC)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
RemoveExtraImages(oPC);
|
||||||
|
|
||||||
if (GetIsPC(oPC)) SetLocalInt(oPC, "PnP_Rest_InitialHP", GetCurrentHitPoints(oPC));
|
if (GetIsPC(oPC)) SetLocalInt(oPC, "PnP_Rest_InitialHP", GetCurrentHitPoints(oPC));
|
||||||
SetLocalInt(oPC, "PnP_Rest_InitialMax", GetMaxHitPoints(oPC));
|
SetLocalInt(oPC, "PnP_Rest_InitialMax", GetMaxHitPoints(oPC));
|
||||||
if(DEBUG) DoDebug("prc_rest: HPs for " + DebugObject2Str(oPC)+"n/n/"+" nCurrent: "+IntToString(GetCurrentHitPoints(oPC))+" nMax: "+IntToString(GetMaxHitPoints(oPC)));
|
if(DEBUG) DoDebug("prc_rest: HPs for " + DebugObject2Str(oPC)+"n/n/"+" nCurrent: "+IntToString(GetCurrentHitPoints(oPC))+" nMax: "+IntToString(GetMaxHitPoints(oPC)));
|
||||||
|
@ -40,9 +40,127 @@ dead after being hit by a fireball).
|
|||||||
//:: Created By: Stratovarius
|
//:: Created By: Stratovarius
|
||||||
//:: Created On: August 20, 2004
|
//:: Created On: August 20, 2004
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
#include "nw_inc_gff"
|
||||||
#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
|
|
||||||
|
// Validates and tracks mirror image alignment with master
|
||||||
|
void TrackMirrorImage(object oSummoned)
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> TrackMirrorImage: Running.");
|
||||||
|
|
||||||
|
if (!GetIsObjectValid(oSummoned))
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> TrackMirrorImage: oSummoned invalid.");
|
||||||
|
//SendMessageToPC(GetFirstPC(), "TrackMirrorImage >> oSummon or oMaster invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
object oMaster = GetLocalObject(oSummoned, "oMaster");
|
||||||
|
if (!GetIsObjectValid(oMaster))
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> TrackMirrorImage: oMaster invalid.");
|
||||||
|
//SendMessageToPC(GetFirstPC(), "TrackMirrorImage >> oSummon or oMaster invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float fRelX = GetLocalFloat(oSummoned, "rel_x");
|
||||||
|
float fRelY = GetLocalFloat(oSummoned, "rel_y");
|
||||||
|
|
||||||
|
vector vMaster = GetPosition(oMaster);
|
||||||
|
float fFacing = GetFacing(oMaster);
|
||||||
|
float fRadians = fFacing * 3.14159 / 180.0;
|
||||||
|
|
||||||
|
// Apply facing-based 2D rotation to the stored offset
|
||||||
|
float fX = vMaster.x + fRelX * cos(fRadians) - fRelY * sin(fRadians);
|
||||||
|
float fY = vMaster.y + fRelX * sin(fRadians) + fRelY * cos(fRadians);
|
||||||
|
|
||||||
|
location lTarget = Location(GetArea(oMaster), Vector(fX, fY, vMaster.z), fFacing);
|
||||||
|
|
||||||
|
// Ensure these commands only execute under needed context
|
||||||
|
AssignCommand(oSummoned, ClearAllActions());
|
||||||
|
AssignCommand(oSummoned, ActionJumpToLocation(lTarget));
|
||||||
|
|
||||||
|
// Schedule next update in 0.25 seconds
|
||||||
|
DelayCommand(0.1, TrackMirrorImage(oSummoned));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initializes the summoning and tracking system
|
||||||
|
void StartMirrorImageTracking(object oSummoned, object oMaster)
|
||||||
|
{
|
||||||
|
if (!GetIsObjectValid(oMaster))
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> StartMirrorImageTracking: oMaster invalid.");
|
||||||
|
//SendMessageToPC(GetFirstPC(), "TrackMirrorImage >> oSummon or oMaster invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vector vMaster = GetPosition(oMaster);
|
||||||
|
vector vSummoned = GetPosition(oSummoned);
|
||||||
|
|
||||||
|
float fRelX = vSummoned.x - vMaster.x;
|
||||||
|
float fRelY = vSummoned.y - vMaster.y;
|
||||||
|
|
||||||
|
SetLocalFloat(oSummoned, "rel_x", fRelX);
|
||||||
|
SetLocalFloat(oSummoned, "rel_y", fRelY);
|
||||||
|
SetLocalObject(oSummoned, "summoner", oMaster);
|
||||||
|
|
||||||
|
SetLocalObject(oSummoned, "oMaster", oMaster);
|
||||||
|
|
||||||
|
DoDebug("sp_mirror >> StartMirrorImageTracking: Firing TrackMirrorImage().");
|
||||||
|
TrackMirrorImage(oSummoned);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetMirrorImageScripts(object oImage)
|
||||||
|
{
|
||||||
|
|
||||||
|
string sTag = GetTag(oImage);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("sp_mirror >> SetMirrorImageScripts: Setting OnSpellCastAt script on "+ sTag +".");
|
||||||
|
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_DEATH, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_NOTICE, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_RESTED, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, "");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "mirror_image_sa");
|
||||||
|
SetEventScript(oImage, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
json JsonModifyRacialType(json jCreature, int nNewRacialType)
|
||||||
|
{
|
||||||
|
if(DEBUG)DoDebug("sp_mirror >> JsonModifyRacialType: Entering function");
|
||||||
|
|
||||||
|
// Retrieve the RacialType field
|
||||||
|
json jRacialTypeField = JsonObjectGet(jCreature, "Race");
|
||||||
|
|
||||||
|
if (JsonGetType(jRacialTypeField) == JSON_TYPE_NULL)
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> JsonModifyRacialType: JsonGetType error 1: " + JsonGetError(jRacialTypeField));
|
||||||
|
//SpeakString("JsonGetType error 1: " + JsonGetError(jRacialTypeField));
|
||||||
|
return JsonNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve the value to modify
|
||||||
|
json jRacialTypeValue = JsonObjectGet(jRacialTypeField, "value");
|
||||||
|
|
||||||
|
if (JsonGetType(jRacialTypeValue) != JSON_TYPE_INTEGER)
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> JsonModifyRacialType: JsonGetType error 2: " + JsonGetError(jRacialTypeValue));
|
||||||
|
//SpeakString("JsonGetType error 2: " + JsonGetError(jRacialTypeValue));
|
||||||
|
return JsonNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
jCreature = GffReplaceByte(jCreature, "Race", nNewRacialType);
|
||||||
|
|
||||||
|
// Return the new creature object
|
||||||
|
return jCreature;
|
||||||
|
}
|
||||||
|
|
||||||
void CleanCopy(object oImage)
|
void CleanCopy(object oImage)
|
||||||
{
|
{
|
||||||
@ -108,21 +226,37 @@ void MakeMoreImages(object oImage, int iImages, int nDuration)
|
|||||||
{
|
{
|
||||||
string sImage = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"mirror";
|
string sImage = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"mirror";
|
||||||
|
|
||||||
effect eImage = EffectCutsceneParalyze();
|
object oMaster = OBJECT_SELF;
|
||||||
|
|
||||||
|
if (!GetIsObjectValid(oMaster))
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror >> MakeMoreImages: oMaster invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLocalObject(oImage, "oMaster", oMaster);
|
||||||
|
|
||||||
|
effect //eImage = EffectCutsceneParalyze();
|
||||||
eImage = SupernaturalEffect(eImage);
|
eImage = SupernaturalEffect(eImage);
|
||||||
effect eGhost = EffectCutsceneGhost();
|
effect eGhost = EffectCutsceneGhost();
|
||||||
eGhost = SupernaturalEffect(eGhost);
|
eGhost = SupernaturalEffect(eGhost);
|
||||||
effect eNoSpell = EffectSpellFailure(100);
|
effect eNoSpell = EffectSpellFailure(100);
|
||||||
eNoSpell = SupernaturalEffect(eNoSpell);
|
eNoSpell = SupernaturalEffect(eNoSpell);
|
||||||
|
effect eSpeed = EffectMovementSpeedIncrease(200);
|
||||||
|
eSpeed = SupernaturalEffect(eSpeed);
|
||||||
|
|
||||||
int iPlus;
|
int iPlus;
|
||||||
for (iPlus = 0; iPlus < iImages; iPlus++)
|
for (iPlus = 0; iPlus < iImages; iPlus++)
|
||||||
{
|
{
|
||||||
object oImage2 = CopyObject(oImage, GetLocation(OBJECT_SELF), OBJECT_INVALID, sImage);
|
object oImage2 = CopyObject(oImage, GetLocation(OBJECT_SELF), OBJECT_INVALID, sImage);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImage, oImage2);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImage, oImage2);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNoSpell, oImage2);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNoSpell, oImage2);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeed, oImage2);
|
||||||
ChangeFaction(oImage2, oImage);
|
ChangeFaction(oImage2, oImage);
|
||||||
SetIsTemporaryFriend(OBJECT_SELF, oImage2, FALSE);
|
SetIsTemporaryFriend(OBJECT_SELF, oImage2, FALSE);
|
||||||
DelayCommand(3.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oImage2));
|
DelayCommand(0.0f, SetMirrorImageScripts(oImage2));
|
||||||
|
DelayCommand(0.5f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oImage2));
|
||||||
|
StartMirrorImageTracking(oImage2, OBJECT_SELF);
|
||||||
DestroyObject(oImage2, TurnsToSeconds(nDuration)); // they dissapear after a minute per level
|
DestroyObject(oImage2, TurnsToSeconds(nDuration)); // they dissapear after a minute per level
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -145,7 +279,9 @@ void RemoveExtraImages()
|
|||||||
|
|
||||||
void main2()
|
void main2()
|
||||||
{
|
{
|
||||||
int iLevel = PRCGetCasterLevel(OBJECT_SELF);
|
object oCaster = OBJECT_SELF;
|
||||||
|
|
||||||
|
int iLevel = PRCGetCasterLevel(oCaster);
|
||||||
int iAdd = iLevel/3;
|
int iAdd = iLevel/3;
|
||||||
int iImages = d4(1) + iAdd;
|
int iImages = d4(1) + iAdd;
|
||||||
if(iImages >8)
|
if(iImages >8)
|
||||||
@ -158,18 +294,37 @@ void main2()
|
|||||||
nDuration = nDuration *2; //Duration is +100%
|
nDuration = nDuration *2; //Duration is +100%
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string sImage = "PC_IMAGE"+ObjectToString(oCaster)+"mirror";
|
||||||
|
|
||||||
string sImage = "PC_IMAGE"+ObjectToString(OBJECT_SELF)+"mirror";
|
effect //eImage = EffectCutsceneParalyze();
|
||||||
|
|
||||||
effect eImage = EffectCutsceneParalyze();
|
|
||||||
eImage = SupernaturalEffect(eImage);
|
eImage = SupernaturalEffect(eImage);
|
||||||
effect eGhost = EffectCutsceneGhost();
|
effect eGhost = EffectCutsceneGhost();
|
||||||
eGhost = SupernaturalEffect(eGhost);
|
eGhost = SupernaturalEffect(eGhost);
|
||||||
effect eNoSpell = EffectSpellFailure(100);
|
effect eNoSpell = EffectSpellFailure(100);
|
||||||
eNoSpell = SupernaturalEffect(eNoSpell);
|
eNoSpell = SupernaturalEffect(eNoSpell);
|
||||||
|
effect eSpeed = EffectMovementSpeedIncrease(200);
|
||||||
|
eSpeed = SupernaturalEffect(eSpeed);
|
||||||
|
|
||||||
|
//:: Convert to a construct.
|
||||||
|
object oImage;
|
||||||
|
json jImage = ObjectToJson(oCaster);
|
||||||
|
|
||||||
|
jImage = JsonModifyRacialType(jImage, RACIAL_TYPE_CONSTRUCT);
|
||||||
|
|
||||||
|
oImage = JsonToObject(jImage, GetLocation(oCaster));
|
||||||
|
|
||||||
|
if (!GetIsObjectValid(oImage))
|
||||||
|
{
|
||||||
|
DoDebug("sp_mirror: Image failed to spawn");
|
||||||
|
//SpeakString("Image failed to spawn.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// make, then clean up, first image and copy it, not the PC for subsequent images
|
// make, then clean up, first image and copy it, not the PC for subsequent images
|
||||||
object oImage = CopyObject(OBJECT_SELF, GetLocation(OBJECT_SELF), OBJECT_INVALID, sImage);
|
//object oImage = CopyObject(OBJECT_SELF, GetLocation(OBJECT_SELF), OBJECT_INVALID, sImage);
|
||||||
|
|
||||||
|
SetTag(oImage, sImage);
|
||||||
|
|
||||||
CleanCopy(oImage);
|
CleanCopy(oImage);
|
||||||
|
|
||||||
// images will have only 1 HP
|
// images will have only 1 HP
|
||||||
@ -181,12 +336,20 @@ void main2()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImage, oImage);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImage, oImage);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNoSpell, oImage);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNoSpell, oImage);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDamage, oImage);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDamage, oImage);
|
||||||
if(!GetIsPC(OBJECT_SELF))
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeed, oImage);
|
||||||
ChangeFaction(oImage, OBJECT_SELF);
|
|
||||||
|
SetMirrorImageScripts(oImage);
|
||||||
|
|
||||||
|
DelayCommand(0.0, SetLocalObject(oImage, "oMaster", oCaster));
|
||||||
|
|
||||||
|
if(!GetIsPC(oCaster))
|
||||||
|
ChangeFaction(oImage, oCaster);
|
||||||
else
|
else
|
||||||
ChangeToStandardFaction(oImage, STANDARD_FACTION_DEFENDER);
|
ChangeToStandardFaction(oImage, STANDARD_FACTION_DEFENDER);
|
||||||
SetIsTemporaryFriend(OBJECT_SELF, oImage, FALSE);
|
|
||||||
DelayCommand(3.0f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oImage));
|
SetIsTemporaryFriend(oCaster, oImage, FALSE);
|
||||||
|
DelayCommand(0.5f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oImage));
|
||||||
|
StartMirrorImageTracking(oImage, OBJECT_SELF);
|
||||||
DestroyObject(oImage, TurnsToSeconds(nDuration)); // they dissapear after a minute per level
|
DestroyObject(oImage, TurnsToSeconds(nDuration)); // they dissapear after a minute per level
|
||||||
|
|
||||||
--iImages; // made one already
|
--iImages; // made one already
|
||||||
@ -197,13 +360,6 @@ void main()
|
|||||||
{
|
{
|
||||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||||
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ILLUSION);
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ILLUSION);
|
||||||
/*
|
|
||||||
Spellcast Hook Code
|
|
||||||
Added 2003-06-23 by GeorgZ
|
|
||||||
If you want to make changes to all spells,
|
|
||||||
check x2_inc_spellhook.nss to find out more
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!X2PreSpellCastCode())
|
if (!X2PreSpellCastCode())
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user