generated from Jaysyn/ModuleTemplate
Initial commit
Initial commit.
This commit is contained in:
parent
8048d08170
commit
cdaa298e0b
12
README.md
12
README.md
@ -1,14 +1,14 @@
|
||||
# Default Module Template
|
||||
# The Ruins of Tcheou Cherng [PRC8-CEP2]
|
||||
|
||||
Repository for the development of the PRC8 version of .....
|
||||
Repository for the development of the PRC8 version of The Ruins of Tcheou Cherng NWN module.
|
||||
|
||||
[Discussion Thread on Discord](https://discord.gg/ca2ru3KxYd)
|
||||
|
||||
[Original module]()
|
||||
|
||||
## Requirements
|
||||
1.) [Nasher](https://github.com/squattingmonk/nasher), installed in your system path.
|
||||
|
||||
2.) [PRC8](https://gitea.raptio.us/Jaysyn/PRC8/src/branch/main/Release)
|
||||
2.) [Original module resources](https://neverwintervault.org/project/nwn1/module/sks1-ruins-tcheou-cherng-0)
|
||||
|
||||
3.) [CEP3](https://neverwintervault.org/project/nwnee/hakpak/combined/cep-3-community-expansion-pack)
|
||||
3.) [PRC8](https://gitea.raptio.us/Jaysyn/PRC8/src/branch/main/Release)
|
||||
|
||||
4.) [CEP2](https://neverwintervault.org/cep)
|
240
nasher.cfg
240
nasher.cfg
@ -1,9 +1,9 @@
|
||||
[package]
|
||||
name = "Default Module"
|
||||
description = "PRC8 version of ..."
|
||||
version = "1.01prc8"
|
||||
name = "SKS01 - The Ruins of Tcheou Cherng [PRC8-CEP2]"
|
||||
description = "PRC8 version of The Ruins of Tcheou Cherng [PRC8-CEP2]."
|
||||
version = "1.55prc8"
|
||||
url = "https://discord.gg/ca2ru3KxYd"
|
||||
author = "Original Author"
|
||||
author = "Vendalus "
|
||||
author = "Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>"
|
||||
|
||||
[package.sources]
|
||||
@ -15,8 +15,8 @@ author = "Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>"
|
||||
|
||||
[target]
|
||||
name = "default"
|
||||
file = "Default Module.mod"
|
||||
description = "PRC8 version of ..."
|
||||
file = "SKS01 - The Ruins of Tcheou Cherng [PRC8-CEP2].mod"
|
||||
description = "PRC8 version of The Ruins of Tcheou Cherng [PRC8-CEP2]."
|
||||
[target.sources]
|
||||
include = "src/module/**/*"
|
||||
include = "src/include/**/*"
|
||||
@ -227,13 +227,233 @@ description = "PRC8 version of ..."
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui"
|
||||
filter = "xchst_inc.nss"
|
||||
|
||||
[target]
|
||||
name = "tophak"
|
||||
file = "HAKNAME.hak"
|
||||
description = "PRC8 merge hakpak for PRC8 version of ..."
|
||||
file = "sks01_prc8_top.hak"
|
||||
description = "Merge hakpak for PRC8 version of The Ruins of Tcheou Cherng"
|
||||
[target.sources]
|
||||
include = "src/hakpak/HAKNAME/**/*"
|
||||
include = "src/hakpak/sks01_prc8_top/**/*"
|
||||
include = "src/include/**/*"
|
||||
filter = "bnd_inc_bndfunc.nss"
|
||||
filter = "bnd_vestig_const.nss"
|
||||
filter = "inc_2dacache.nss"
|
||||
filter = "inc_abil_damage.nss"
|
||||
filter = "inc_acp.nss"
|
||||
filter = "inc_addragebonus.nss"
|
||||
filter = "inc_area.nss"
|
||||
filter = "inc_array_sort.nss"
|
||||
filter = "inc_cache_setup.nss"
|
||||
filter = "inc_debug.nss"
|
||||
filter = "inc_dispel.nss"
|
||||
filter = "inc_draw.nss"
|
||||
filter = "inc_draw_prc.nss"
|
||||
filter = "inc_draw_text.nss"
|
||||
filter = "inc_draw_tools.nss"
|
||||
filter = "inc_dynconv.nss"
|
||||
filter = "inc_ecl.nss"
|
||||
filter = "inc_epicspellai.nss"
|
||||
filter = "inc_epicspelldef.nss"
|
||||
filter = "inc_epicspellfnc.nss"
|
||||
filter = "inc_epicspells.nss"
|
||||
filter = "inc_eventhook.nss"
|
||||
filter = "inc_heap.nss"
|
||||
filter = "inc_item_props.nss"
|
||||
filter = "inc_logmessage.nss"
|
||||
filter = "inc_lookups.nss"
|
||||
filter = "inc_metalocation.nss"
|
||||
filter = "inc_newspellbook.nss"
|
||||
filter = "inc_npc.nss"
|
||||
filter = "inc_nwnx_funcs.nss"
|
||||
filter = "inc_persistsql.nss"
|
||||
filter = "inc_persist_loca.nss"
|
||||
filter = "inc_pers_array.nss"
|
||||
filter = "inc_poison.nss"
|
||||
filter = "inc_prc_npc.nss"
|
||||
filter = "inc_prc_poly.nss"
|
||||
filter = "inc_rand_equip.nss"
|
||||
filter = "inc_ravage.nss"
|
||||
filter = "inc_rend.nss"
|
||||
filter = "inc_sbr_readme.nss"
|
||||
filter = "inc_set.nss"
|
||||
filter = "inc_spirit_weapn.nss"
|
||||
filter = "inc_sp_gain_mem.nss"
|
||||
filter = "inc_sql.nss"
|
||||
filter = "inc_switch_setup.nss"
|
||||
filter = "inc_target_list.nss"
|
||||
filter = "inc_threads.nss"
|
||||
filter = "inc_time.nss"
|
||||
filter = "inc_timestop.nss"
|
||||
filter = "inc_uniqueid.nss"
|
||||
filter = "inc_utility.nss"
|
||||
filter = "inc_vfx_const.nss"
|
||||
filter = "inv_inc_blast.nss"
|
||||
filter = "inv_inc_invfunc.nss"
|
||||
filter = "inv_inc_invknown.nss"
|
||||
filter = "inv_inc_invoke.nss"
|
||||
filter = "inv_invoc_const.nss"
|
||||
filter = "inv_invokehook.nss"
|
||||
filter = "lookup_2da_spell.nss"
|
||||
filter = "moi_inc_moifunc.nss"
|
||||
filter = "moi_meld_const.nss"
|
||||
filter = "nw_o2_coninclude.nss"
|
||||
filter = "pnp_lich_inc.nss"
|
||||
filter = "pnp_shft_main.nss"
|
||||
filter = "pnp_shft_poly.nss"
|
||||
filter = "prcsp_archmaginc.nss"
|
||||
filter = "prcsp_engine.nss"
|
||||
filter = "prcsp_reputation.nss"
|
||||
filter = "prc_add_spell_dc.nss"
|
||||
filter = "prc_add_spl_pen.nss"
|
||||
filter = "prc_allow_const.nss"
|
||||
filter = "prc_alterations.nss"
|
||||
filter = "prc_ccc_const.nss"
|
||||
filter = "prc_ccc_readme.nss"
|
||||
filter = "prc_class_const.nss"
|
||||
filter = "prc_compan_inc.nss"
|
||||
filter = "prc_craft_inc.nss"
|
||||
filter = "prc_effect_inc.nss"
|
||||
filter = "prc_feat_const.nss"
|
||||
filter = "prc_getbest_inc.nss"
|
||||
filter = "prc_inc_actions.nss"
|
||||
filter = "prc_inc_array.nss"
|
||||
filter = "prc_inc_assoc.nss"
|
||||
filter = "prc_inc_breath.nss"
|
||||
filter = "prc_inc_burn.nss"
|
||||
filter = "prc_inc_castlvl.nss"
|
||||
filter = "prc_inc_chat.nss"
|
||||
filter = "prc_inc_chat_dm.nss"
|
||||
filter = "prc_inc_chat_pow.nss"
|
||||
filter = "prc_inc_chat_shf.nss"
|
||||
filter = "prc_inc_clsfunc.nss"
|
||||
filter = "prc_inc_combat.nss"
|
||||
filter = "prc_inc_combmove.nss"
|
||||
filter = "prc_inc_core.nss"
|
||||
filter = "prc_inc_damage.nss"
|
||||
filter = "prc_inc_descrptr.nss"
|
||||
filter = "prc_inc_domain.nss"
|
||||
filter = "prc_inc_dragsham.nss"
|
||||
filter = "prc_inc_drugfunc.nss"
|
||||
filter = "prc_inc_effect.nss"
|
||||
filter = "prc_inc_factotum.nss"
|
||||
filter = "prc_inc_fork.nss"
|
||||
filter = "prc_inc_function.nss"
|
||||
filter = "prc_inc_hextor.nss"
|
||||
filter = "prc_inc_itmrstr.nss"
|
||||
filter = "prc_inc_leadersh.nss"
|
||||
filter = "prc_inc_listener.nss"
|
||||
filter = "prc_inc_material.nss"
|
||||
filter = "prc_inc_natweap.nss"
|
||||
filter = "prc_inc_nat_hb.nss"
|
||||
filter = "prc_inc_newip.nss"
|
||||
filter = "prc_inc_nwscript.nss"
|
||||
filter = "prc_inc_onhit.nss"
|
||||
filter = "prc_inc_racial.nss"
|
||||
filter = "prc_inc_sbheir.nss"
|
||||
filter = "prc_inc_sb_const.nss"
|
||||
filter = "prc_inc_scry.nss"
|
||||
filter = "prc_inc_shifting.nss"
|
||||
filter = "prc_inc_skills.nss"
|
||||
filter = "prc_inc_skin.nss"
|
||||
filter = "prc_inc_smite.nss"
|
||||
filter = "prc_inc_sneak.nss"
|
||||
filter = "prc_inc_spells.nss"
|
||||
filter = "prc_inc_sp_tch.nss"
|
||||
filter = "prc_inc_stunfist.nss"
|
||||
filter = "prc_inc_switch.nss"
|
||||
filter = "prc_inc_s_det.nss"
|
||||
filter = "prc_inc_teleport.nss"
|
||||
filter = "prc_inc_template.nss"
|
||||
filter = "prc_inc_turning.nss"
|
||||
filter = "prc_inc_unarmed.nss"
|
||||
filter = "prc_inc_util.nss"
|
||||
filter = "prc_inc_wpnrest.nss"
|
||||
filter = "prc_ipfeat_const.nss"
|
||||
filter = "prc_ip_srcost.nss"
|
||||
filter = "prc_misc_const.nss"
|
||||
filter = "prc_racial_const.nss"
|
||||
filter = "prc_shifter_info.nss"
|
||||
filter = "prc_spellf_inc.nss"
|
||||
filter = "prc_spellhook.nss"
|
||||
filter = "prc_spell_const.nss"
|
||||
filter = "prc_sp_func.nss"
|
||||
filter = "prc_template_con.nss"
|
||||
filter = "prc_weap_apt.nss"
|
||||
filter = "prc_x2_craft.nss"
|
||||
filter = "prc_x2_itemprop.nss"
|
||||
filter = "prgt_inc.nss"
|
||||
filter = "prgt_inc_trap.nss"
|
||||
filter = "psi_inc_ac_const.nss"
|
||||
filter = "psi_inc_ac_convo.nss"
|
||||
filter = "psi_inc_ac_manif.nss"
|
||||
filter = "psi_inc_ac_spawn.nss"
|
||||
filter = "psi_inc_augment.nss"
|
||||
filter = "psi_inc_const.nss"
|
||||
filter = "psi_inc_core.nss"
|
||||
filter = "psi_inc_enrgypow.nss"
|
||||
filter = "psi_inc_metapsi.nss"
|
||||
filter = "psi_inc_onhit.nss"
|
||||
filter = "psi_inc_powknown.nss"
|
||||
filter = "psi_inc_ppoints.nss"
|
||||
filter = "psi_inc_psicraft.nss"
|
||||
filter = "psi_inc_psifunc.nss"
|
||||
filter = "psi_inc_pwresist.nss"
|
||||
filter = "psi_inc_soulkn.nss"
|
||||
filter = "psi_power_const.nss"
|
||||
filter = "psi_spellhook.nss"
|
||||
filter = "sbr_include.nss"
|
||||
filter = "shd_inc_metashd.nss"
|
||||
filter = "shd_inc_myst.nss"
|
||||
filter = "shd_inc_mystknwn.nss"
|
||||
filter = "shd_inc_shdfunc.nss"
|
||||
filter = "shd_mysthook.nss"
|
||||
filter = "shd_myst_const.nss"
|
||||
filter = "spinc_bolt.nss"
|
||||
filter = "spinc_burst.nss"
|
||||
filter = "spinc_cone.nss"
|
||||
filter = "spinc_dimdoor.nss"
|
||||
filter = "spinc_engimm.nss"
|
||||
filter = "spinc_fdisk.nss"
|
||||
filter = "spinc_greenfire.nss"
|
||||
filter = "spinc_lessorb.nss"
|
||||
filter = "spinc_maze.nss"
|
||||
filter = "spinc_necro_cyst.nss"
|
||||
filter = "spinc_orb.nss"
|
||||
filter = "spinc_remeffct.nss"
|
||||
filter = "spinc_telecircle.nss"
|
||||
filter = "spinc_teleport.nss"
|
||||
filter = "spinc_trans.nss"
|
||||
filter = "tob_inc_martlore.nss"
|
||||
filter = "tob_inc_move.nss"
|
||||
filter = "tob_inc_moveknwn.nss"
|
||||
filter = "tob_inc_recovery.nss"
|
||||
filter = "tob_inc_tobfunc.nss"
|
||||
filter = "tob_movehook.nss"
|
||||
filter = "tob_move_const.nss"
|
||||
filter = "true_inc_metautr.nss"
|
||||
filter = "true_inc_truespk.nss"
|
||||
filter = "true_inc_trufunc.nss"
|
||||
filter = "true_inc_truknwn.nss"
|
||||
filter = "true_inc_utter.nss"
|
||||
filter = "true_utterhook.nss"
|
||||
filter = "true_utter_const.nss"
|
||||
filter = "utl_i_sqluuid.nss"
|
||||
filter = "x0_i0_transport.nss"
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui"
|
||||
filter = "xchst_inc.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/hakpak/HAKNAME/$ext"
|
||||
"*" = "src/hakpak/sks01_prc8_top/$ext"
|
90
src/hakpak/sks01_prc8_top/2da/ambientmusic.2da
Normal file
90
src/hakpak/sks01_prc8_top/2da/ambientmusic.2da
Normal file
@ -0,0 +1,90 @@
|
||||
2DA V2.0
|
||||
|
||||
Description Resource Stinger1 Stinger2 Stinger3 DisplayName
|
||||
0 61901 **** **** **** **** ****
|
||||
1 61842 mus_ruralday1 **** **** **** ****
|
||||
2 61843 mus_ruralday2 **** **** **** ****
|
||||
3 61844 mus_ruralnite **** **** **** ****
|
||||
4 61845 mus_forestday1 **** **** **** ****
|
||||
5 61846 mus_forestday2 **** **** **** ****
|
||||
6 61847 mus_forestnite **** **** **** ****
|
||||
7 61848 mus_gendungeon1 **** **** **** ****
|
||||
8 61849 mus_sewer **** **** **** ****
|
||||
9 61850 mus_mines1 **** **** **** ****
|
||||
10 61851 mus_mines2 **** **** **** ****
|
||||
11 61852 mus_crypt1 **** **** **** ****
|
||||
12 61853 mus_crypt2 **** **** **** ****
|
||||
13 61854 mus_evildungeon1 **** **** **** ****
|
||||
14 61855 mus_evildungeon2 **** **** **** ****
|
||||
15 61856 mus_cityslumday **** **** **** ****
|
||||
16 61857 mus_cityslumnite **** **** **** ****
|
||||
17 61858 mus_citydockday **** **** **** ****
|
||||
18 61859 mus_citydocknite **** **** **** ****
|
||||
19 61860 mus_citywealthy **** **** **** ****
|
||||
20 61861 mus_citymarket **** **** **** ****
|
||||
21 61862 mus_citynite **** **** **** ****
|
||||
22 61863 mus_tavern1 **** **** **** ****
|
||||
23 61864 mus_tavern2 **** **** **** ****
|
||||
24 61865 mus_tavern3 **** **** **** ****
|
||||
25 61866 mus_richhouse **** **** **** ****
|
||||
26 61867 mus_store **** **** **** ****
|
||||
27 61868 mus_templegood **** **** **** ****
|
||||
28 61869 mus_templeevil **** **** **** ****
|
||||
29 61870 mus_theme_nwn **** **** **** ****
|
||||
30 **** mus_honorbound **** **** **** CH1HonorBound
|
||||
31 **** mus_strangeland **** **** **** CH2StrangeLand
|
||||
32 61873 mus_theme_chap3 **** **** **** ****
|
||||
33 61874 mus_theme_chap4 **** **** **** ****
|
||||
34 61875 mus_bat_rural1 mus_sbat_rural1 **** **** ****
|
||||
35 61876 mus_bat_forest1 mus_sbat_forest1 **** **** ****
|
||||
36 61877 mus_bat_forest2 mus_sbat_forest2 **** **** ****
|
||||
37 61878 mus_bat_dung1 mus_sbat_dung1 **** **** ****
|
||||
38 61879 mus_bat_dung2 mus_sbat_dung2 **** **** ****
|
||||
39 61880 mus_bat_dung3 mus_sbat_dung3 **** **** ****
|
||||
40 61881 mus_bat_city1 mus_sbat_city1 **** **** ****
|
||||
41 61882 mus_bat_city2 mus_sbat_city2 **** **** ****
|
||||
42 61883 mus_bat_city3 mus_sbat_city3 **** **** ****
|
||||
43 61884 mus_bat_citboss mus_sbat_citboss **** **** ****
|
||||
44 61885 mus_bat_forboss mus_sbat_forboss **** **** ****
|
||||
45 61886 mus_bat_lizboss mus_sbat_lizboss **** **** ****
|
||||
46 61887 mus_bat_dragon mus_sbat_dragon **** **** ****
|
||||
47 61888 mus_bat_aribeth mus_sbat_aribeth **** **** ****
|
||||
48 61889 mus_bat_endboss mus_sbat_endboss **** **** ****
|
||||
49 66833 mus_templegood2 **** **** **** ****
|
||||
50 66883 mus_castle **** **** **** ****
|
||||
51 66878 mus_theme_aribgd **** **** **** ****
|
||||
52 66879 mus_theme_aribev **** **** **** ****
|
||||
53 66880 mus_theme_argend **** **** **** ****
|
||||
54 66881 mus_theme_maugrm **** **** **** ****
|
||||
55 66882 mus_theme_morag **** **** **** ****
|
||||
56 67545 mus_tavern4 **** **** **** ****
|
||||
57 8807 mus_bat_x0desert **** **** **** ****
|
||||
58 8806 mus_x0desertday **** **** **** ****
|
||||
59 8805 mus_x0winterday **** **** **** ****
|
||||
60 52827 mus_bat_x0winter **** **** **** ****
|
||||
61 40050 mus_x0desertngt **** **** **** ****
|
||||
62 86656 mus_x2theme **** **** **** ****
|
||||
63 86657 mus_x2waterdeep **** **** **** ****
|
||||
64 86658 mus_x2undermtn **** **** **** ****
|
||||
65 86659 mus_x2rebelcamp **** **** **** ****
|
||||
66 86660 mus_x2fireplane **** **** **** ****
|
||||
67 86661 mus_x2queen **** **** **** ****
|
||||
68 86662 mus_x2frozenhell **** **** **** ****
|
||||
69 86663 mus_x2draco **** **** **** ****
|
||||
70 86664 mus_bat_x2small mus_sbat_x2small **** **** ****
|
||||
71 86665 mus_bat_x2med mus_sbat_x2med **** **** ****
|
||||
72 86666 mus_bat_x2large mus_sbat_x2large **** **** ****
|
||||
73 **** mus_bat_assault **** **** **** Assault
|
||||
74 86668 mus_bat_x2boss1 mus_sbat_x2boss1 **** **** ****
|
||||
75 86669 mus_bat_x2boss2 mus_sbat_x2boss2 **** **** ****
|
||||
76 110653 mus_dd_kingmaker **** **** **** ****
|
||||
77 110654 mus_dd_shadowgua **** **** **** ****
|
||||
78 110655 mus_dd_witchwake **** **** **** ****
|
||||
79 110725 mus_dd_islands **** **** **** ****
|
||||
80 110726 mus_dd_pirates **** **** **** ****
|
||||
81 **** **** **** **** **** ****
|
||||
82 **** **** **** **** **** ****
|
||||
83 **** **** **** **** **** ****
|
||||
84 **** **** **** **** **** ****
|
||||
85 61871 mus_theme_chap1 **** **** **** ****
|
||||
86 61872 mus_theme_chap2 **** **** **** ****
|
BIN
src/hakpak/sks01_prc8_top/bmu/mus_bat_assault.bmu
Normal file
BIN
src/hakpak/sks01_prc8_top/bmu/mus_bat_assault.bmu
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 MiB |
BIN
src/hakpak/sks01_prc8_top/bmu/mus_honorbound.bmu
Normal file
BIN
src/hakpak/sks01_prc8_top/bmu/mus_honorbound.bmu
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 MiB |
BIN
src/hakpak/sks01_prc8_top/bmu/mus_strangeland.bmu
Normal file
BIN
src/hakpak/sks01_prc8_top/bmu/mus_strangeland.bmu
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.0 MiB |
1804
src/hakpak/sks01_prc8_top/nss/69_hench_lib.nss
Normal file
1804
src/hakpak/sks01_prc8_top/nss/69_hench_lib.nss
Normal file
File diff suppressed because it is too large
Load Diff
240
src/hakpak/sks01_prc8_top/nss/69_leadership.nss
Normal file
240
src/hakpak/sks01_prc8_top/nss/69_leadership.nss
Normal file
@ -0,0 +1,240 @@
|
||||
/*69_leadership
|
||||
Leadership Library Functions
|
||||
Created by: 69MEH69
|
||||
Created on: Sep2004
|
||||
*/
|
||||
//void main(){}
|
||||
|
||||
//Level of PC when Leadership begins
|
||||
const int LEADERSHIP_LEVEL = 6;
|
||||
|
||||
//Returns Loyalty modifier
|
||||
int GetHenchLoyalty(object oHench, object oPC);
|
||||
//Returns TRUE if PC has Leadership (must be level 6 or higher)
|
||||
int GetHasLeadership(object oPC);
|
||||
//Returns Leadership Score
|
||||
int GetLeadershipScore(object oPC);
|
||||
//Sets maximum number of henchmen based on Leadership
|
||||
void SetMaxHenchmen69(object oPC);
|
||||
//Returns maximum number of henchmen based on Leadership
|
||||
int GetMaxHenchmen69(object oPC);
|
||||
|
||||
int GetHenchLoyalty(object oHench, object oPC)
|
||||
{
|
||||
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
|
||||
int nCharisma = GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
//Initial roll + charisma
|
||||
int nLoyalty = d6(3) + nCharisma;
|
||||
string sLoyalty, sHenchdeath;
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
sLoyalty = IntToString(nLoyalty);
|
||||
SendMessageToPC(oPC, "Initial nLoyalty = " + sLoyalty);
|
||||
}
|
||||
int nHenchAlign = GetAlignmentGoodEvil(oHench);
|
||||
int nPCAlign = GetAlignmentGoodEvil(oPC);
|
||||
int nHenchDeath = GetLocalInt(oPC, "Hench_Death");
|
||||
//Adjustment for alignments
|
||||
if(nHenchAlign == nPCAlign)
|
||||
{
|
||||
++nLoyalty;
|
||||
}
|
||||
else
|
||||
{
|
||||
--nLoyalty;
|
||||
}
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
sLoyalty = IntToString(nLoyalty);
|
||||
SendMessageToPC(oPC, "nLoyalty - Alignment = " + sLoyalty);
|
||||
}
|
||||
//Adjustment for number of dead henchmen
|
||||
nLoyalty = nLoyalty - nHenchDeath;
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
sHenchdeath =IntToString(nHenchDeath);
|
||||
sLoyalty = IntToString(nLoyalty);
|
||||
SendMessageToPC(oPC, "Henchmen deaths = " + sHenchdeath);
|
||||
SendMessageToPC(oPC, "nLoyalty - nHenchDeath = " + sLoyalty);
|
||||
SendMessageToPC(oPC, "Loyalty score = " + sLoyalty);
|
||||
}
|
||||
return nLoyalty;
|
||||
}
|
||||
|
||||
int GetHasLeadership(object oPC)
|
||||
{
|
||||
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
|
||||
int nLeadership = GetHitDice(oPC);
|
||||
if(nLeadership >= LEADERSHIP_LEVEL)
|
||||
{
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
SendMessageToPC(oPC, "Leadership is True");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
SendMessageToPC(oPC, "Leadership is False");
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
int GetLeadershipScore(object oPC)
|
||||
{
|
||||
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
|
||||
int nPCLevel = GetHitDice(oPC);
|
||||
int nCharisma = GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
int nPersuade = GetSkillRank(SKILL_PERSUADE, oPC);
|
||||
int nLeadershipScore = nPCLevel + nCharisma;
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
string sCharisma = IntToString(nCharisma);
|
||||
SendMessageToPC(oPC, "Charisma score = " + sCharisma);
|
||||
string sPersuade = IntToString(nPersuade);
|
||||
SendMessageToPC(oPC, "Persuade score = " + sPersuade);
|
||||
string sLeadershipScore = IntToString(nLeadershipScore);
|
||||
SendMessageToPC(oPC, "Leadership score = " + sLeadershipScore);
|
||||
}
|
||||
return nLeadershipScore;
|
||||
}
|
||||
|
||||
void SetMaxHenchmen69(object oPC)
|
||||
{
|
||||
int nLeadershipScore = GetLeadershipScore(oPC);
|
||||
|
||||
//Primary Code
|
||||
if(GetHasLeadership(oPC) == FALSE)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 0);
|
||||
}
|
||||
else if(nLeadershipScore >= 25)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 10);
|
||||
}
|
||||
else if(nLeadershipScore >= 20)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 5);
|
||||
}
|
||||
else if(nLeadershipScore >= 15)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 4);
|
||||
}
|
||||
else if(nLeadershipScore >= 10)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 3);
|
||||
}
|
||||
else if(nLeadershipScore >= 8)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 2);
|
||||
}
|
||||
else if(nLeadershipScore >= 2)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 0);
|
||||
}
|
||||
//End Primary Code
|
||||
|
||||
//Secondary Code
|
||||
//Uncomment following code to use this form
|
||||
//Comment out the Primary Code
|
||||
/*
|
||||
if(GetHasLeadership(oPC) == FALSE)
|
||||
{
|
||||
SetLocalInt(oPC, "MaxHenchmen", 0);
|
||||
return;
|
||||
}
|
||||
switch(nLeadershipScore)
|
||||
{
|
||||
case 0: case -1: case -2: case -3:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 1);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 1);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 2);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 2);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 2);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 3);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 3);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 3);
|
||||
break;
|
||||
|
||||
case 10:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 4);
|
||||
break;
|
||||
|
||||
case 11:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 4);
|
||||
break;
|
||||
|
||||
case 12:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 4);
|
||||
break;
|
||||
|
||||
case 13: case 14: case 15:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 5);
|
||||
break;
|
||||
|
||||
case 16: case 17: case 18:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 6);
|
||||
break;
|
||||
|
||||
default:
|
||||
SetLocalInt(oPC, "MaxHenchmen", 7);
|
||||
break;
|
||||
}*/
|
||||
//End Secondary Code
|
||||
|
||||
}
|
||||
|
||||
int GetMaxHenchmen69(object oPC)
|
||||
{
|
||||
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
|
||||
int nMaxHenchmen = GetLocalInt(oPC, "MaxHenchmen");
|
||||
//Test
|
||||
if(TEST_MODE == 1)
|
||||
{
|
||||
string sMaxHenchmen = IntToString(nMaxHenchmen);
|
||||
SendMessageToPC(oPC, "Maximum allowable henchmen = " + sMaxHenchmen);
|
||||
}
|
||||
return nMaxHenchmen;
|
||||
}
|
1018
src/hakpak/sks01_prc8_top/nss/_prr_main.nss
Normal file
1018
src/hakpak/sks01_prc8_top/nss/_prr_main.nss
Normal file
File diff suppressed because it is too large
Load Diff
747
src/hakpak/sks01_prc8_top/nss/nbde_inc.nss
Normal file
747
src/hakpak/sks01_prc8_top/nss/nbde_inc.nss
Normal file
@ -0,0 +1,747 @@
|
||||
//void main(){}
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Natural Bioware Database Extension v1.0
|
||||
//:: nbde_inc
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Knat
|
||||
//:: Created On: 8/2004
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
|
||||
Natural Bioware Database Extension v1.0
|
||||
"Andale, Andale! EEEE-ha....!"
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- What is NBDE ?
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
NBDE is basically a wrapper for the standard bioware database system,
|
||||
eliminating most of its restrictions. But even more important, it significantly
|
||||
boosts both reading and writing speed.
|
||||
|
||||
It will make your db scripts more secure and always keeps your database files
|
||||
in the best possible shape. It furthermore reduces the amount of overhead in
|
||||
your database and keeps it as slim as possible.
|
||||
|
||||
there is no need to periodically use a pack utility, which further
|
||||
reduces administrative tasks...
|
||||
|
||||
and this all gets achieved with the use of this simple script. I recommend any
|
||||
scripter to check this out if he plans to use biowares onboard database
|
||||
functionality. It should also be very easy to convert already existing scripts.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- Installation
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Simply import nbde.erf and you are done.
|
||||
|
||||
It includes the following stuff:
|
||||
|
||||
Scripts:
|
||||
|
||||
name: nbde_inc
|
||||
main include script...
|
||||
|
||||
Areas:
|
||||
|
||||
name: _NBDE
|
||||
special area. this is a 2x2 microset area holding the database vault container.
|
||||
you can delete this area and move the container to another place if you want.
|
||||
|
||||
Items:
|
||||
|
||||
Custom > Special > Custom 4
|
||||
name: Database
|
||||
special database item with the resref "nbde_database"
|
||||
don't touch this item...
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- Eliminated Restrictions ?
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Biowares database system mimics the interface of Local Variables.
|
||||
Instead of SetLocalInt() you use SetCampaignInt(), GetLocalInt() turns into
|
||||
GetCampaignInt(). This makes it very easy to use, even for novice scripters.
|
||||
But the normal bioware database does not consequently implement this approach.
|
||||
Several stumbling blocks, slight differences to normal Set-/GetLocal functions,
|
||||
may lead to severe functional problems and hard to track bugs if you try to
|
||||
achieve a bit more complex goals...
|
||||
|
||||
>>> 32-Char sVarName Limitation:
|
||||
--------------------------------
|
||||
|
||||
the sVarName parameter in the original functions only accepts strings with a
|
||||
maximum length of 32 chars. it will simply cut the string if it exceeds this
|
||||
limit...
|
||||
|
||||
example:
|
||||
|
||||
SetCampaignInt("MYDB", "PREFIX" + GetTag(oArea), 100);
|
||||
|
||||
The second parameter is the sVarName one, with the 32 char limit. The above
|
||||
statement is a bit risky, because GetTag(oArea) could return a string with a
|
||||
maximum length of 32. "PREFIX" has a length of 6 chars, so any area with a
|
||||
tag of length >26 could lead to unintended sVarNames.
|
||||
|
||||
Same for this example:
|
||||
|
||||
SetCampaignInt("MYDB", GetName(oPC) + GetPCPlayerName(oPC), 100);
|
||||
|
||||
same problem. GetName() alone may return a string with a length >32, which
|
||||
could again lead to a problematic sVarName.
|
||||
|
||||
NBDE completely eliminates the 32-char sVarName limitation and enables the
|
||||
scripter to use the full scope of dynamically concatenated sVarNames,
|
||||
without the need of hashing systems or other workarounds, which generally
|
||||
consume a bit of extra cpu time...
|
||||
|
||||
>>> UNIQUE sVarName Limitation:
|
||||
-------------------------------
|
||||
|
||||
the sVarName parameter in the original functions MUST be unique across the
|
||||
entire database, regardless of the variable type.
|
||||
|
||||
example:
|
||||
|
||||
SetCampaignInt("MYDB", "TEST", 10);
|
||||
SetCampaignString("MYDB", "TEST", "ABCD");
|
||||
|
||||
the second line will OVERWRITE the former integer variable "TEST" with a string.
|
||||
This means a GetCampaignInt("MYDB", "TEST") returns 0
|
||||
|
||||
using NBDE eliminates this limitation.
|
||||
It works now similar to LocalVariables (the intended goal)
|
||||
|
||||
NBDE conversion of the above example:
|
||||
|
||||
NBDE_SetCampaignInt("MYDB", "TEST", 10);
|
||||
NBDE_SetCampaignString("MYDB", "TEST", "ABCD");
|
||||
|
||||
second line will not overwrite the integer variable
|
||||
|
||||
NBDE_GetCampaignInt("MYDB", "TEST") returns the correct 10
|
||||
NBDE_GetCampaignString("MYDB", "TEST") returns "ABCD"
|
||||
|
||||
The original function set contains only one delete command, called
|
||||
DeleteCampaignVariable(), because of the unique nature of sVarNames.
|
||||
|
||||
NBDE contains one delete command for each variable type, to account for the
|
||||
possible non uniqueness:
|
||||
|
||||
NBDE_DeleteCampaignInt()
|
||||
NBDE_DeleteCampaignFloat()
|
||||
NBDE_DeleteCampaignString()
|
||||
NBDE_DeleteCampaignVector()
|
||||
NBDE_DeleteCampaignLocation()
|
||||
|
||||
this again now works similar to the LocalVariables interface, which also
|
||||
gives you a delete command for each variable type:
|
||||
|
||||
aka DeleteLoaclInt(), DeleteLocalFloat(), DeleteLocalString(),
|
||||
DeleteLocalVector(), DeleteLocalLocation()
|
||||
|
||||
>>> Broken Locations:
|
||||
---------------------
|
||||
|
||||
the original SetCampaignLocation/GetCampaignLocation functions are not very
|
||||
reliable, because they are using the areas object-id for reference, which
|
||||
is a runtime generated ID. stored locations in the database can get invalid
|
||||
if you change the area layout in the toolset (e.g. deleting old areas, etc.)
|
||||
|
||||
nbde location functions are 100% reliable, as long as you use unique TAGs for
|
||||
your areas. I repeat, you need to use UNIQUE TAGS for your areas...
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- No need to pack the database
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
NWN's database files grow very large, very fast, because deleted entries get
|
||||
only "flagged" as deleted. but they still reside in the dabase file physically.
|
||||
|
||||
to stop this evergrowing database, you usually call an external "pack"
|
||||
utility which reorganizes the database files (deletion of flagged entries,
|
||||
index re-ordering, etc.)
|
||||
|
||||
unfortunately, the only working pack utility is the one you find in the
|
||||
/utils directory, called DataPack.exe . But some people reported problems
|
||||
on large database files... (i never had problems with this tool, though)
|
||||
|
||||
the good news is, you don't need to touch this utility ever, while using
|
||||
this extension. NBDE will automatically keep all your database files as
|
||||
compact/small as possible.
|
||||
|
||||
no external maintenance needed...
|
||||
|
||||
NBDE_Delete commands immediately shrink your database in size (physically
|
||||
deleted records) after a flushing command (read more about that in a minute).
|
||||
|
||||
attention:
|
||||
there is a known problem in the linux version:
|
||||
|
||||
The DestroyCampaignDatabase command doesnt always work in linux. i think
|
||||
this relates to the different file systems used.
|
||||
|
||||
you should be ok using the following rules for your database
|
||||
names (sCampaignName parameter):
|
||||
|
||||
- max length 16 chars
|
||||
- only use alphanumeric chars and underscore
|
||||
- NO space
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--- Usage
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
first, include nbde_inc to all scripts using this extension:
|
||||
|
||||
#include "nbde_inc"
|
||||
|
||||
You basically use it the same way you would use the original
|
||||
database. just add the NBDE_ prefix infront of the function.
|
||||
|
||||
original example:
|
||||
|
||||
int n = GetCampaignInt("MYDB", "MYVAR");
|
||||
|
||||
nbde conversion:
|
||||
|
||||
#include "nbde_inc"
|
||||
|
||||
int n = NBDE_GetCampaignInt("MYDB", "MYVAR");
|
||||
|
||||
Important differences:
|
||||
|
||||
Database Flushing:
|
||||
------------------
|
||||
|
||||
writing to the database will not issue a physical write directly.
|
||||
You need to "Flush" a database in order to physically write the contents of
|
||||
a complete database to your HD. this sounds slow, but its not, because of
|
||||
the large overhead of standard SetCampaign calls...
|
||||
Writing out a single integer via SetCampaignInt takes roughly
|
||||
100ms (0.1 seconds), writing out an object with 1000 integers via
|
||||
SetCampaignObject takes roughly 150ms. that's the whole
|
||||
magic behind the system. it basically just consolidates your writes..
|
||||
|
||||
original example:
|
||||
|
||||
SetCampaignInt("MYDB", "MYVAR1", 10);
|
||||
SetCampaignInt("MYDB", "MYVAR2", 20);
|
||||
SetCampaignInt("MYDB", "MYVAR3", 30);
|
||||
SetCampaignInt("MYDB", "MYVAR4", 40);
|
||||
SetCampaignInt("MYDB", "MYVAR5", 50);
|
||||
|
||||
nbde conversion:
|
||||
|
||||
NBDE_SetCampaignInt("MYDB", "MYVAR1", 10);
|
||||
NBDE_SetCampaignInt("MYDB", "MYVAR2", 20);
|
||||
NBDE_SetCampaignInt("MYDB", "MYVAR3", 30);
|
||||
NBDE_SetCampaignInt("MYDB", "MYVAR4", 40);
|
||||
NBDE_SetCampaignInt("MYDB", "MYVAR5", 50);
|
||||
NBDE_FlushCampaignDatabase("MYDB");
|
||||
|
||||
the original example takes roughly half a second (500ms),
|
||||
the converted example only 100ms.
|
||||
|
||||
you can gain a lot of speed and do things impossible with the original
|
||||
database using the right flushing scheme. you can flush critical data asap
|
||||
but you can get away flushing not so critical stuff only once every few
|
||||
minutes, or during onClientLeave, or once an Area is out of players, and so on...
|
||||
|
||||
keep in mind: you can loose data if the server crashes before
|
||||
you flushed your database.
|
||||
|
||||
delete function:
|
||||
----------------
|
||||
|
||||
the original version only got one delete function, DeleteCampaignVariable.
|
||||
That's because of the unique nature of sVarNames...
|
||||
NBDE eliminates this restriction and therefore exposes one delete
|
||||
function for each data-type.
|
||||
|
||||
original example:
|
||||
|
||||
DeleteCampaignVariable("MYDB", "MYVAR");
|
||||
|
||||
you need to know the datatype of "MYVAR" in order to correctly convert this
|
||||
line to NBDE. lets assume it's an integer...
|
||||
|
||||
nbde conversion:
|
||||
|
||||
NBDE_DeleteCampaignInt("MYDB", "MYVAR");
|
||||
|
||||
|
||||
Unloading a Database:
|
||||
---------------------
|
||||
|
||||
nbde databases are kept in memory. NBDE_UnloadCampaignDatabase() unloads
|
||||
the database with the name sCampaignName from memory.
|
||||
|
||||
useful to unload databases you don't need often. unloading/reloading is quite
|
||||
fast, so don't hesitate to use this regulary...
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// database item name, used as sVarName parameter in Store-/RetrieveCampaignObject
|
||||
const string NBDE_DATABASE_ITEM_VARNAME = "+++_DATABASE_ITEM_+++";
|
||||
|
||||
// database item resref, needed for auto-creation
|
||||
const string NBDE_DATABASE_ITEM_RESREF = "nbde_database";
|
||||
|
||||
// database index prefix
|
||||
// used to index a database via Get/SetLocalObject
|
||||
const string NBDE_INDEX_PREFIX = "NBDE_DATABASE_";
|
||||
|
||||
// database vault tag
|
||||
// this vault is usually a container
|
||||
const string NBDE_VAULT_TAG = "NBDE_VAULT";
|
||||
|
||||
// prefixes used to store locations/vectors as strings
|
||||
// this should eliminate collisions with normal strings
|
||||
const string NBDE_LOC_PREFIX = "¥Æ¥";
|
||||
const string NBDE_VEC_PREFIX = "ø£ø";
|
||||
|
||||
// This stores an int out to the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Vastly improved writing speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
void NBDE_SetCampaignInt(string sCampaignName, string sVarname, int nInt, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This stores a float out to the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Vastly improved writing speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
void NBDE_SetCampaignFloat(string sCampaignName, string sVarname, float flFloat, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This stores a string out to the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Vastly improved writing speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
void NBDE_SetCampaignString(string sCampaignName, string sVarname, string sString, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This stores a location out to the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Vastly improved writing speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
//
|
||||
// Original function is not very reliable, because it is using the areas object-id, which is
|
||||
// a runtime generated ID. Stored locations may turn invalid in case you change the area layout in the toolset.
|
||||
// (e.g. deleting old areas)
|
||||
//
|
||||
// This function is 100% reliable, as long as you use unique TAGs for your areas
|
||||
void NBDE_SetCampaignLocation(string sCampaignName, string sVarname, location locLocation, object oPlayer = OBJECT_SELF);
|
||||
|
||||
// This stores a vector out to the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Vastly improved writing speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
void NBDE_SetCampaignVector(string sCampaignName, string sVarname, vector vVector, object oPlayer = OBJECT_SELF);
|
||||
|
||||
// This will read an int from the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Improved reading speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
int NBDE_GetCampaignInt(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will read a float from the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Improved reading speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
float NBDE_GetCampaignFloat(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will read a string from the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Improved reading speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
string NBDE_GetCampaignString(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will read a location from the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Improved reading speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
//
|
||||
// Original function is not very reliable, because it is using the areas object-id, which is
|
||||
// a runtime generated ID. Stored locations may turn invalid in case you change the area layout in the toolset.
|
||||
// (e.g. deleting old areas)
|
||||
//
|
||||
// This function is 100% reliable, as long as you use unique TAGs for your areas
|
||||
location NBDE_GetCampaignLocation(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will read a vector from the specified campaign database
|
||||
// The database name IS case sensitive and it must be the same for both set and get functions.
|
||||
// If you want a variable to pertain to a specific player in the game, provide a player object.
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// Improved reading speed...
|
||||
// There is no limit on the length of sVarname (original function is limited to 32 chars)
|
||||
// sVarname must NOT be unique. you can use the same sVarname with a different data-type
|
||||
vector NBDE_GetCampaignVector(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// this will remove an integer from the specified campaign database
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// This will physically delete the variable from the database, not only flagging it
|
||||
// Database will shrink in size
|
||||
// No need to pack your database ever
|
||||
void NBDE_DeleteCampaignInt(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// this will remove a float from the specified campaign database
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// This will physically delete the variable from the database, not only flagging it
|
||||
// Database will shrink in size
|
||||
// No need to pack your database ever
|
||||
void NBDE_DeleteCampaignFloat(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will remove a string from the specified campaign database
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// This will physically delete the variable from the database, not only flagging it
|
||||
// Database will shrink in size
|
||||
// No need to pack your database ever
|
||||
void NBDE_DeleteCampaignString(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will remove a location from the specified campaign database
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// This will physically delete the variable from the database, not only flagging it
|
||||
// Database will shrink in size
|
||||
// No need to pack your database ever
|
||||
void NBDE_DeleteCampaignLocation(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will remove a vector from the specified campaign database
|
||||
//
|
||||
// Improvements to original bioware function:
|
||||
// This will physically delete the variable from the database, not only flagging it
|
||||
// Database will shrink in size
|
||||
// No need to pack your database ever
|
||||
void NBDE_DeleteCampaignVector(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID);
|
||||
|
||||
// This will flush a database to disk with a SINGLE StoreCampaignObject() call
|
||||
//
|
||||
// Don't use this function in a rapid manner.
|
||||
// Delay each call to this function by at least 1 second (using delaycommand)
|
||||
// in order to eliminate possible spikes...
|
||||
void NBDE_FlushCampaignDatabase(string sCampaignName);
|
||||
|
||||
// NBDE databases are kept in memory. this commands unloads
|
||||
// the database with the name sCampaignName from memory.
|
||||
//
|
||||
// Useful to unload databases you don't need often.
|
||||
// Unloading/reloading is quite fast, so don't hesitate to use
|
||||
// this regulary...
|
||||
//
|
||||
// Reloading happens automatically, btw...
|
||||
void NBDE_UnloadCampaignDatabase(string sCampaignName);
|
||||
|
||||
|
||||
// --------------------------- IMPLEMENTATION ----------------------------
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
// everything not in here gets considered an illegal character
|
||||
// - mixed up for additional security
|
||||
const string HASH_INDEX = "#i!j$k%l{&M/n(o)p=q?r^¤Xs`Tu'v]AwBxCyDzE1F2-G3t;4I}5Y:J6_K7+Z[Lm9N\ l0kOjPhQ,gRfSeHdU8cVbWa.";
|
||||
|
||||
const int HASH_PRIME = 3021377;
|
||||
|
||||
// simple hash
|
||||
// returns -1 if string contains illegal character
|
||||
int NBDE_Hash(string sData)
|
||||
{
|
||||
int nLen = GetStringLength(sData);
|
||||
int i, nHash, nChar;
|
||||
for(i=0;i<nLen;i++)
|
||||
{
|
||||
nChar = FindSubString(HASH_INDEX, GetSubString(sData,i,1));
|
||||
if(nChar == -1) return -1;
|
||||
nHash = ((nHash<<5) ^ (nHash>>27)) ^ nChar;
|
||||
}
|
||||
return nHash % HASH_PRIME;
|
||||
}
|
||||
|
||||
// serialize location to padded string
|
||||
string NBDE_LocationToString(location lLoc)
|
||||
{
|
||||
// serialization garbage... more or less "redo if it screws" code
|
||||
string sLoc = IntToString(FloatToInt(GetPositionFromLocation(lLoc).x*100));
|
||||
sLoc = (GetStringLength(sLoc) < 5) ? sLoc + GetStringLeft(" ",5 - GetStringLength(sLoc)) : GetStringLeft(sLoc,5);
|
||||
sLoc += IntToString(FloatToInt(GetPositionFromLocation(lLoc).y*100));
|
||||
sLoc = (GetStringLength(sLoc) < 10) ? sLoc + GetStringLeft(" ",10 - GetStringLength(sLoc)) : GetStringLeft(sLoc,10);
|
||||
sLoc += IntToString(FloatToInt(GetPositionFromLocation(lLoc).z*100));
|
||||
sLoc = (GetStringLength(sLoc) < 15) ? sLoc + GetStringLeft(" ",15 - GetStringLength(sLoc)) : GetStringLeft(sLoc,15);
|
||||
sLoc += IntToString(FloatToInt(GetFacingFromLocation(lLoc)*100));
|
||||
sLoc = (GetStringLength(sLoc) < 20) ? sLoc + GetStringLeft(" ",20 - GetStringLength(sLoc)) : GetStringLeft(sLoc,20);
|
||||
sLoc += GetTag(GetAreaFromLocation(lLoc));
|
||||
sLoc = (GetStringLength(sLoc) < 52) ? sLoc + GetStringLeft(" ",52 - GetStringLength(sLoc)) : GetStringLeft(sLoc,52);
|
||||
return sLoc;
|
||||
}
|
||||
|
||||
// de-serialize string to location
|
||||
location NBDE_StringToLocation(string sLoc)
|
||||
{
|
||||
// fast de-serialize code using padded strings
|
||||
vector vVec;
|
||||
// build vector
|
||||
vVec.x = StringToFloat(GetStringLeft(sLoc,5)) / 100;
|
||||
vVec.y = StringToFloat(GetSubString(sLoc,5,5)) / 100;
|
||||
vVec.z = StringToFloat(GetSubString(sLoc,10,5)) / 100;;
|
||||
int nPad = FindSubString(GetSubString(sLoc, 20,32)," ");
|
||||
// build & return location
|
||||
return Location(GetObjectByTag((nPad != -1) ? GetSubString(sLoc, 20,nPad) : GetSubString(sLoc, 20,32)), vVec, StringToFloat(GetSubString(sLoc,15,5)) / 100);
|
||||
}
|
||||
|
||||
// serialize vector to padded string
|
||||
string NBDE_VectorToString(vector vVec)
|
||||
{
|
||||
// serialization garbage... more or less "redo if it screws" code
|
||||
string sVec = IntToString(FloatToInt(vVec.x*100));
|
||||
sVec = (GetStringLength(sVec) < 5) ? sVec + GetStringLeft(" ",5 - GetStringLength(sVec)) : GetStringLeft(sVec,5);
|
||||
sVec += IntToString(FloatToInt(vVec.y*100));
|
||||
sVec = (GetStringLength(sVec) < 10) ? sVec + GetStringLeft(" ",10 - GetStringLength(sVec)) : GetStringLeft(sVec,10);
|
||||
sVec += IntToString(FloatToInt(vVec.z*100));
|
||||
sVec = (GetStringLength(sVec) < 15) ? sVec + GetStringLeft(" ",15 - GetStringLength(sVec)) : GetStringLeft(sVec,15);
|
||||
return sVec;
|
||||
}
|
||||
|
||||
vector NBDE_StringToVector(string sVec)
|
||||
{
|
||||
// fast de-serialize code using padded strings
|
||||
vector vVec;
|
||||
vVec.x = StringToFloat(GetStringLeft(sVec,5)) / 100;
|
||||
vVec.y = StringToFloat(GetSubString(sVec,5,5)) / 100;
|
||||
vVec.z = StringToFloat(GetSubString(sVec,10,5)) / 100;
|
||||
return vVec;
|
||||
}
|
||||
|
||||
// returns player key with hopefully safe delimiter
|
||||
string NBDE_GetPlayerKey(object oPC)
|
||||
{
|
||||
return GetName(oPC)+"¤"+GetPCPlayerName(oPC);
|
||||
}
|
||||
|
||||
// returns database object for the specified campaign database
|
||||
//
|
||||
// - auto-creates database object in case it doesn't exist
|
||||
// - builds index for fast access
|
||||
//
|
||||
// you usually don't need to use this function directly...
|
||||
object NBDE_GetCampaignDatabaseObject(string sCampaignName)
|
||||
{
|
||||
// get database item
|
||||
object oDatabase = GetLocalObject(GetObjectByTag(NBDE_VAULT_TAG), NBDE_INDEX_PREFIX + sCampaignName);
|
||||
// retrieve/create database if not indexed already
|
||||
if(!GetIsObjectValid(oDatabase))
|
||||
{
|
||||
// get database vault object
|
||||
// this container holds all database objects/items
|
||||
object oVault = GetObjectByTag(NBDE_VAULT_TAG);
|
||||
// check for valid vault
|
||||
if(!GetIsObjectValid(oVault))
|
||||
{
|
||||
WriteTimestampedLogEntry("NBDE> Error: unable to locate '"+NBDE_VAULT_TAG+"' vault container object");
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
// one time load
|
||||
oDatabase = RetrieveCampaignObject(sCampaignName, NBDE_DATABASE_ITEM_VARNAME, GetLocation(oVault), oVault);
|
||||
// not found ? create it
|
||||
if(!GetIsObjectValid(oDatabase)) oDatabase = CreateItemOnObject(NBDE_DATABASE_ITEM_RESREF, oVault);
|
||||
// check for valid database object
|
||||
if(!GetIsObjectValid(oDatabase))
|
||||
{
|
||||
WriteTimestampedLogEntry("NBDE> Error: unable to create '"+sCampaignName+"' database object");
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
// index item for fast access
|
||||
SetLocalObject(oVault, NBDE_INDEX_PREFIX + sCampaignName, oDatabase);
|
||||
}
|
||||
return oDatabase;
|
||||
}
|
||||
|
||||
// this will flush (aka write to disk) the specified campaign database in one big swoop
|
||||
//
|
||||
// don't use this function in a rapid manner.
|
||||
// delay each subsequent call to this function by at least 1 second (using delaycommand)
|
||||
// this way you completely eliminate cpu-spikes, no matter how many database
|
||||
// you flush.
|
||||
void NBDE_FlushCampaignDatabase(string sCampaignName)
|
||||
{
|
||||
// get database vault, it holds all database items
|
||||
object oVault = GetObjectByTag(NBDE_VAULT_TAG);
|
||||
if(GetIsObjectValid(oVault))
|
||||
{
|
||||
// get database item
|
||||
object oDatabase = GetLocalObject(oVault, NBDE_INDEX_PREFIX + sCampaignName);
|
||||
// store the whole database via one single StoreCampaignObject call
|
||||
// all variables on the item get stored with the item
|
||||
if(GetIsObjectValid(oDatabase))
|
||||
{
|
||||
// delete database on each flush to keep it compact and clean
|
||||
DestroyCampaignDatabase(sCampaignName);
|
||||
// store database
|
||||
StoreCampaignObject(sCampaignName, NBDE_DATABASE_ITEM_VARNAME , oDatabase);
|
||||
}
|
||||
// database not loaded, no need to flush...
|
||||
}
|
||||
else // vault container missing
|
||||
WriteTimestampedLogEntry("NBDE> Error: unable to locate '"+NBDE_VAULT_TAG+"' vault container object");
|
||||
}
|
||||
|
||||
void NBDE_UnloadCampaignDatabase(string sCampaignName)
|
||||
{
|
||||
// get database vault, it holds all database items
|
||||
object oVault = GetObjectByTag(NBDE_VAULT_TAG);
|
||||
if(GetIsObjectValid(oVault))
|
||||
{
|
||||
// get database item
|
||||
object oDatabase = GetLocalObject(oVault, NBDE_INDEX_PREFIX + sCampaignName);
|
||||
if(GetIsObjectValid(oDatabase))
|
||||
{
|
||||
// delete index
|
||||
DeleteLocalObject(oVault, NBDE_INDEX_PREFIX + sCampaignName);
|
||||
// delete database object
|
||||
DestroyObject(oDatabase);
|
||||
}
|
||||
// database not loaded, do nothing
|
||||
}
|
||||
else // vault container missing
|
||||
WriteTimestampedLogEntry("NBDE> Error: unable to locate '"+NBDE_VAULT_TAG+"' vault container object");
|
||||
}
|
||||
|
||||
void NBDE_SetCampaignInt(string sCampaignName, string sVarname, int nInt, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
SetLocalInt(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname, nInt );
|
||||
}
|
||||
|
||||
void NBDE_SetCampaignFloat(string sCampaignName, string sVarname, float fFloat, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
SetLocalFloat(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname, fFloat);
|
||||
}
|
||||
|
||||
void NBDE_SetCampaignString(string sCampaignName, string sVarname, string sString, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
SetLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname, sString);
|
||||
}
|
||||
|
||||
void NBDE_SetCampaignLocation(string sCampaignName, string sVarname, location locLocation, object oPlayer = OBJECT_SELF)
|
||||
{
|
||||
SetLocalString( NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
NBDE_LOC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname ,
|
||||
NBDE_LocationToString(locLocation) );
|
||||
}
|
||||
|
||||
void NBDE_SetCampaignVector(string sCampaignName, string sVarname, vector vVector, object oPlayer = OBJECT_SELF)
|
||||
{
|
||||
SetLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
NBDE_VEC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname ,
|
||||
NBDE_VectorToString(vVector) );
|
||||
}
|
||||
|
||||
int NBDE_GetCampaignInt(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
return GetLocalInt(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname );
|
||||
}
|
||||
|
||||
float NBDE_GetCampaignFloat(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
return GetLocalFloat(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname );
|
||||
}
|
||||
|
||||
string NBDE_GetCampaignString(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
return GetLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname );
|
||||
}
|
||||
|
||||
location NBDE_GetCampaignLocation(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
return NBDE_StringToLocation( GetLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
NBDE_LOC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname) );
|
||||
}
|
||||
|
||||
vector NBDE_GetCampaignVector(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
return NBDE_StringToVector( GetLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName),
|
||||
NBDE_VEC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname) );
|
||||
}
|
||||
|
||||
void NBDE_DeleteCampaignInt(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
DeleteLocalInt(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname);
|
||||
}
|
||||
|
||||
void NBDE_DeleteCampaignFloat(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
DeleteLocalFloat(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname);
|
||||
}
|
||||
|
||||
void NBDE_DeleteCampaignString(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
DeleteLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname);
|
||||
}
|
||||
|
||||
void NBDE_DeleteCampaignLocation(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
DeleteLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
NBDE_LOC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname);
|
||||
}
|
||||
|
||||
void NBDE_DeleteCampaignVector(string sCampaignName, string sVarname, object oPlayer = OBJECT_INVALID)
|
||||
{
|
||||
DeleteLocalString(NBDE_GetCampaignDatabaseObject(sCampaignName) ,
|
||||
NBDE_VEC_PREFIX + ((GetIsObjectValid(oPlayer)) ? NBDE_GetPlayerKey(oPlayer) : "") + sVarname);
|
||||
}
|
||||
|
||||
|
128
src/hakpak/sks01_prc8_top/nss/nw_s0_charmani.nss
Normal file
128
src/hakpak/sks01_prc8_top/nss/nw_s0_charmani.nss
Normal file
@ -0,0 +1,128 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Charm Person or Animal]
|
||||
//:: [nw_s0_charmani.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Charm Person
|
||||
Enchantment (Charm) [Mind-Affecting]
|
||||
Level: Brd 1, Sor/Wiz 1
|
||||
Components: V, S
|
||||
Casting Time: 1 standard action
|
||||
Range: Close (25 ft. + 5 ft./2 levels)
|
||||
Target: One humanoid creature
|
||||
Duration: 1 hour/level
|
||||
Saving Throw: Will negates
|
||||
Spell Resistance: Yes
|
||||
|
||||
This charm makes a humanoid creature regard you as
|
||||
its trusted friend and ally (treat the target’s
|
||||
attitude as friendly). If the creature is currently
|
||||
being threatened or attacked by you or your allies,
|
||||
however, it receives a +5 bonus on its saving throw.
|
||||
|
||||
The spell does not enable you to control the
|
||||
charmed person as if it were an automaton, but it
|
||||
perceives your words and actions in the most
|
||||
favorable way. You can try to give the subject
|
||||
orders, but you must win an opposed Charisma check
|
||||
to convince it to do anything it wouldn’t
|
||||
ordinarily do. (Retries are not allowed.) An
|
||||
affected creature never obeys suicidal or obviously
|
||||
harmful orders, but it might be convinced that
|
||||
something very dangerous is worth doing. Any act by
|
||||
you or your apparent allies that threatens the
|
||||
charmed person breaks the spell. You must speak the
|
||||
person’s language to communicate your commands, or
|
||||
else be good at pantomiming.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Will save or the target is dominated for 1 round
|
||||
//:: per caster level.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 29, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: modified by mr_bumpkin Dec 4, 2003
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "_prr_main"
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
|
||||
|
||||
//Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int CasterLvl = PRCGetCasterLevel(oCaster);
|
||||
int nPenetr = CasterLvl + SPGetPenetr();
|
||||
int nRacial = MyPRCGetRacialType(oTarget);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nDuration = 2 + CasterLvl/3;
|
||||
nDuration = PRCGetScaledDuration(nDuration, oTarget);
|
||||
//Meta magic duration check
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
nDuration *= 2;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
effect eCharm = EffectCharmed();
|
||||
eCharm = PRCGetScaledEffect(eCharm, oTarget);
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
//Link the charm and duration visual effects
|
||||
effect eLink = EffectLinkEffects(eMind, eCharm);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
// Get the string so we can check to see if the target is already charmed
|
||||
string sCharmedVarName = "CHARMED_BY_" + GetName(OBJECT_SELF);
|
||||
|
||||
// Set the PRR Duration for friendlies
|
||||
int nPRR_Duration = CasterLvl;
|
||||
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire spell cast at event to fire on the target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_CHARM_PERSON_OR_ANIMAL, FALSE));
|
||||
//Make SR Check
|
||||
if (!PRCDoResistSpell(oCaster, oTarget, nPenetr))
|
||||
{
|
||||
//Make sure the racial type of the target is applicable
|
||||
if(PRCAmIAHumanoid(oTarget) ||
|
||||
nRacial == RACIAL_TYPE_ANIMAL)
|
||||
{
|
||||
//Make Will Save
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
//Apply impact and linked effects
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE, SPELL_CHARM_PERSON_OR_ANIMAL, CasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only works if the creature is not already charmed (and not a pc)
|
||||
if(GetLocalInt(oTarget, sCharmedVarName) != 1 && !GetIsPC(oTarget))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact and adjust the PRR
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 2.0);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
SendMessageToPC(OBJECT_SELF, "You have charmed " + GetName(oTarget) + " and the effect will last for " + IntToString(nPRR_Duration) + " hours.");
|
||||
PRR_CHARM_AffectTarget(oTarget, OBJECT_SELF, nPRR_Duration);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "You have already charmed " + GetName(oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
98
src/hakpak/sks01_prc8_top/nss/nw_s0_charmmon.nss
Normal file
98
src/hakpak/sks01_prc8_top/nss/nw_s0_charmmon.nss
Normal file
@ -0,0 +1,98 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Charm Monster]
|
||||
//:: [NW_S0_CharmMon.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Will save or the target is charmed for 1 round
|
||||
//:: per 2 caster levels.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 29, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Update Pass By: Preston W, On: July 25, 2001
|
||||
//:: modified by mr_bumpkin Dec 4, 2003
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "_prr_main"
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
|
||||
|
||||
//Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int CasterLvl = PRCGetCasterLevel(oCaster);
|
||||
int nPenetr = CasterLvl + SPGetPenetr();
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nDuration = 3 + CasterLvl/2;
|
||||
nDuration = PRCGetScaledDuration(nDuration, oTarget);
|
||||
|
||||
// Get the string so we can check to see if the target is already charmed
|
||||
string sCharmedVarName = "CHARMED_BY_" + GetName(OBJECT_SELF);
|
||||
|
||||
// Set the PRR Duration for friendlies
|
||||
int nPRR_Duration = CasterLvl * 24;
|
||||
|
||||
//Metamagic extend check
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration = nDuration * 2;
|
||||
nPRR_Duration = CasterLvl * 24 * 2;
|
||||
}
|
||||
|
||||
int nDidSucceedCharm = 0;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
effect eCharm = EffectCharmed();
|
||||
eCharm = PRCGetScaledEffect(eCharm, oTarget);
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
//Link effects
|
||||
effect eLink = EffectLinkEffects(eMind, eCharm);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_CHARM_MONSTER, FALSE));
|
||||
// Make SR Check
|
||||
if (!PRCDoResistSpell(oCaster, oTarget, nPenetr))
|
||||
{
|
||||
// Make Will save vs Mind-Affecting
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
//Apply impact and linked effect
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE, SPELL_CHARM_MONSTER, CasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
nDidSucceedCharm = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only works if the creature is not already charmed (and not a pc)
|
||||
if(GetLocalInt(oTarget, sCharmedVarName) != 1 && !GetIsPC(oTarget))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact and adjust the PRR
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE, SPELL_CHARM_MONSTER, CasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
SendMessageToPC(OBJECT_SELF, "You have charmed " + GetName(oTarget) + " and the effect will last for " + IntToString(nPRR_Duration / 24) + " days.");
|
||||
PRR_CHARM_AffectTarget(oTarget, OBJECT_SELF, nPRR_Duration);
|
||||
nDidSucceedCharm = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "You have already charmed " + GetName(oTarget));
|
||||
nDidSucceedCharm = 1;
|
||||
} // End is target already charmed
|
||||
} // End the moved is hostile check
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
124
src/hakpak/sks01_prc8_top/nss/nw_s0_charmper.nss
Normal file
124
src/hakpak/sks01_prc8_top/nss/nw_s0_charmper.nss
Normal file
@ -0,0 +1,124 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Charm Person]
|
||||
//:: [NW_S0_CharmPer.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Will save or the target is charmed for 1 round
|
||||
//:: per caster level.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 29, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Preston Watamaniuk, On: April 5, 2001
|
||||
//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
|
||||
//:: VFX Pass By: Preston W, On: June 20, 2001
|
||||
|
||||
|
||||
//:: modified by mr_bumpkin Dec 4, 2003
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "_prr_main"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
|
||||
|
||||
//Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nCasterLvl = PRCGetCasterLevel(oCaster);
|
||||
int nPenetr = nCasterLvl + SPGetPenetr();
|
||||
int nDuration = 2 + nCasterLvl/3;
|
||||
nDuration = PRCGetScaledDuration(nDuration, oTarget);
|
||||
|
||||
// Get the string so we can check to see if the target is already charmed
|
||||
string sCharmedVarName = "CHARMED_BY_" + GetName(OBJECT_SELF);
|
||||
|
||||
// Set the PRR Duration for friendlies
|
||||
int nPRR_Duration = nCasterLvl;
|
||||
|
||||
//Check for metamagic extend and adjust both durations
|
||||
if (nMetaMagic == METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration = nDuration * 2;
|
||||
nPRR_Duration = nCasterLvl * 2;
|
||||
}
|
||||
|
||||
int nDidSucceedCharm = 0;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
effect eCharm = EffectCharmed();
|
||||
eCharm = PRCGetScaledEffect(eCharm, oTarget);
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
|
||||
//Link persistant effects
|
||||
effect eLink = EffectLinkEffects(eMind, eCharm);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_CHARM_PERSON, FALSE));
|
||||
//Make SR Check
|
||||
if (!PRCDoResistSpell(oCaster, oTarget, nPenetr))
|
||||
{
|
||||
//Verify that the Racial Type is humanoid
|
||||
if(PRCAmIAHumanoid(oTarget))
|
||||
{
|
||||
//Make a Will Save check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
//Apply impact and linked effects
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE, SPELL_CHARM_PERSON, nCasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
nDidSucceedCharm = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only works if the creature is not already charmed (and not a pc)
|
||||
if(GetLocalInt(oTarget, sCharmedVarName) != 1 && !GetIsPC(oTarget))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact and adjust the PRR
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE, SPELL_CHARM_PERSON, nCasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
SendMessageToPC(OBJECT_SELF, "You have charmed " + GetName(oTarget) + " and the effect will last for " + IntToString(nPRR_Duration) + " hours.");
|
||||
PRR_CHARM_AffectTarget(oTarget, OBJECT_SELF, nPRR_Duration);
|
||||
nDidSucceedCharm = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "You have already charmed " + GetName(oTarget));
|
||||
nDidSucceedCharm = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!GetIsEnemy(oTarget))
|
||||
{
|
||||
AssignCommand(oTarget, SpeakString("If you are trying to cast some sort of spell on me, you had better stop."));
|
||||
AdjustPersonalReaction(oTarget, OBJECT_SELF, -5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// There is a penalty for failing a charm to keep it being used over and over
|
||||
if(nDidSucceedCharm == 0)
|
||||
{
|
||||
if(!GetIsEnemy(oTarget) && GetIntelligence(oTarget) >= 6)
|
||||
{
|
||||
AssignCommand(oTarget, SpeakString("If you are trying to cast some sort of spell on me, you had better stop."));
|
||||
AdjustPersonalReaction(oTarget, OBJECT_SELF, -5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
222
src/hakpak/sks01_prc8_top/nss/nw_s0_curinflict.nss
Normal file
222
src/hakpak/sks01_prc8_top/nss/nw_s0_curinflict.nss
Normal file
@ -0,0 +1,222 @@
|
||||
/** @file
|
||||
nw_s0_cureinflict
|
||||
|
||||
Handles all the cure/inflict spells
|
||||
|
||||
By: Flaming_Sword
|
||||
Created: Jun 13, 2006
|
||||
Modified: Jun 30, 2006
|
||||
|
||||
Consolidation of multiple scripts
|
||||
modified healing vfx for inflict spells
|
||||
changed cure minor wounds to heal 1 hp
|
||||
in line with SRD
|
||||
added will save 1/2 damage for cure spells
|
||||
added mass cure spells
|
||||
added mass heal-like random delay for mass
|
||||
cure spells (to look cool, delay can be
|
||||
set to zero if desired)
|
||||
*/
|
||||
#include "69_hench_lib"
|
||||
#include "prc_sp_func"
|
||||
#include "prc_inc_function"
|
||||
#include "prc_inc_sp_tch"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
//Implements the spell impact, put code here
|
||||
// if called in many places, return TRUE if
|
||||
// stored charges should be decreased
|
||||
// eg. touch attack hits
|
||||
//
|
||||
// Variables passed may be changed if necessary
|
||||
int DoSpell(object oCaster, object oTarget, int nCasterLevel, int nSpellID, int bIsCure)
|
||||
{
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int bMass = IsMassCure(nSpellID) || IsMassInflict(nSpellID);
|
||||
int nHealVFX;
|
||||
int nEnergyType = bIsCure ? DAMAGE_TYPE_POSITIVE : DAMAGE_TYPE_NEGATIVE;
|
||||
int nSpellLevel = StringToInt(lookup_spell_cleric_level(PRCGetSpellId()));
|
||||
int nDice = bMass ? nSpellLevel - 4 : nSpellLevel; // The spells use a number of dice equivalent to spell level, mass versions 4 fewer
|
||||
int bHeal;
|
||||
|
||||
switch(nDice) //nDice == 0 for cure/inflict minor wounds
|
||||
{
|
||||
case 0: nHealVFX = VFX_IMP_HEAD_HEAL; break;
|
||||
case 1: nHealVFX = VFX_IMP_HEALING_S; break;
|
||||
case 2: nHealVFX = VFX_IMP_HEALING_M; break;
|
||||
case 3: nHealVFX = VFX_IMP_HEALING_L; break;
|
||||
case 4: default: nHealVFX = VFX_IMP_HEALING_G; break;
|
||||
}
|
||||
|
||||
// Extra points based on spell level, capped to caster level
|
||||
int nExtraDamage = PRCMin(nSpellLevel * 5, nCasterLevel);
|
||||
|
||||
// Healing is more effective for players on low or normal difficulty
|
||||
int nDifficultyCondition = (GetIsPC(oTarget) && (GetGameDifficulty() < GAME_DIFFICULTY_CORE_RULES)) && bIsCure;
|
||||
|
||||
// Mass spell AoE targeting
|
||||
location lLoc;
|
||||
if(bMass)
|
||||
{
|
||||
lLoc = PRCGetSpellTargetLocation();
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lLoc, TRUE);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(bIsCure ? VFX_FNF_LOS_HOLY_20 : VFX_FNF_LOS_EVIL_20), lLoc);
|
||||
}
|
||||
|
||||
// Targeting loop
|
||||
float fDelay = 0.0;
|
||||
int nHealed = 0;
|
||||
int nMaxHealed = bMass ? nCasterLevel : 1;
|
||||
int iAttackRoll = 1;
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
// Skip non-creatures. AoE targeting shouldn't get them anyway, but single target spells shouldn't affect non-creatures either
|
||||
// Also skip constructs, since they are neither living nor undead. Technically, they would qualify for being healed by mass cures, but we assume that's just bad editing.
|
||||
//Improved Fortification overrides Warforged's ability to be healed.
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT && !GetIsWarforged(oTarget) || GetHasFeat(FEAT_IMPROVED_FORTIFICATION, oTarget))
|
||||
{
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lLoc, TRUE);
|
||||
continue;
|
||||
}
|
||||
|
||||
//random delay like mass heal so it looks cool :P (can be set to zero if behavior is not desired)
|
||||
if(bMass) fDelay = PRCGetRandomDelay();
|
||||
|
||||
// Roll damage / heal points
|
||||
int iBlastFaith = BlastInfidelOrFaithHeal(oCaster, oTarget, nEnergyType, TRUE);
|
||||
int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
|
||||
int nHeal = 0;
|
||||
if((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith || nDifficultyCondition)
|
||||
{
|
||||
nHeal = nDice * 8 + nExtraDamage;
|
||||
if(nDifficultyCondition && ((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith))
|
||||
nHeal += nExtraDamage; //extra damage on lower difficulties
|
||||
}
|
||||
else
|
||||
nHeal = d8(nDice) + nExtraDamage;
|
||||
// More feat effects
|
||||
if((nMetaMagic & METAMAGIC_EMPOWER))
|
||||
nHeal += (nHeal / 2);
|
||||
if(GetHasFeat(FEAT_AUGMENT_HEALING, oCaster) && bIsCure)
|
||||
nHeal += (nSpellLevel * 2);
|
||||
// Cure Minor only does 1 - Fox
|
||||
if(nDice == 0)
|
||||
nHeal = 1;
|
||||
//Healing Hands bonus even applies to Cure Minor - Fox
|
||||
if(PRCGetLastSpellCastClass() == CLASS_TYPE_HEALER)
|
||||
nHeal += GetAbilityModifier(ABILITY_CHARISMA, oCaster);
|
||||
|
||||
// Whether we are supposed to heal or hurt the target
|
||||
bHeal = (!bIsCure && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) || // Undead handling, non-cures heal them
|
||||
(bIsCure && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD && !iTombTainted); // Undead handling, cures hurt them
|
||||
|
||||
if (GetLocalInt(oTarget, "AcererakHealing")) bHeal = TRUE;
|
||||
|
||||
// Healing, assume the caster never wants to heal hostiles and any targeting of such was a misclick
|
||||
if(bHeal && !spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oCaster))
|
||||
{
|
||||
//Warforged are only healed for half, none if they have Improved Fortification
|
||||
if(GetIsWarforged(oTarget)) nHeal /= 2;
|
||||
if(GetHasFeat(FEAT_IMPROVED_FORTIFICATION, oTarget)) nHeal = 0;
|
||||
|
||||
// Apply healing to the target
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nHeal, oTarget), oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nHealVFX), oTarget));
|
||||
|
||||
// Let the AI know
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID, FALSE));
|
||||
|
||||
// Increment the # of affected targets counter
|
||||
nHealed++;
|
||||
}
|
||||
// Harming, assume the caster never wants to hurt non-hostiles and any targeting of such was a misclick
|
||||
else if(!bHeal && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oCaster))
|
||||
{
|
||||
nHeal += SpellDamagePerDice(OBJECT_SELF, nDice);
|
||||
// Roll touch attack if non-mass spell
|
||||
iAttackRoll = bMass ? TRUE : PRCDoMeleeTouchAttack(oTarget);
|
||||
if(iAttackRoll > 0)
|
||||
{
|
||||
// Let the AI know about hostile spell use
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID));
|
||||
|
||||
// Roll SR
|
||||
if(!PRCDoResistSpell(oCaster, oTarget, nCasterLevel + SPGetPenetr()))
|
||||
{
|
||||
// Save for half
|
||||
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget,
|
||||
PRCGetSaveDC(oTarget, oCaster, nSpellID),
|
||||
bIsCure ? SAVING_THROW_TYPE_POSITIVE : SAVING_THROW_TYPE_NEGATIVE
|
||||
)
|
||||
)
|
||||
{
|
||||
nHeal /= 2;
|
||||
// Mettle for total avoidance instead
|
||||
if(GetHasMettle(oTarget, SAVING_THROW_WILL))
|
||||
nHeal = 0;
|
||||
}
|
||||
|
||||
// Apply effects
|
||||
effect eDam = PRCEffectDamage(oTarget, nHeal, nEnergyType);
|
||||
DelayCommand(fDelay + 1.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(bIsCure ? VFX_IMP_SUNSTRIKE : VFX_IMP_HARM), oTarget));
|
||||
}
|
||||
}
|
||||
|
||||
// Increment the # of affected targets counter
|
||||
nHealed++;
|
||||
}
|
||||
|
||||
// Terminate loop if target limit reached
|
||||
if(nHealed >= nMaxHealed)
|
||||
break;
|
||||
|
||||
// Otherwise get next target
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lLoc, TRUE);
|
||||
}
|
||||
|
||||
return bMass ? TRUE : iAttackRoll; //return TRUE if spell charges should be decremented
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
int nSpellID = PRCGetSpellId();
|
||||
int bIsCure = IsMassCure(nSpellID) || IsCure(nSpellID); //whether it is a cure or inflict spell
|
||||
int nSchool = bIsCure ? SPELL_SCHOOL_CONJURATION : SPELL_SCHOOL_NECROMANCY;
|
||||
PRCSetSchool(nSchool);
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
int nCure = d8(4);
|
||||
|
||||
// Check for holding charge
|
||||
int nEvent = GetLocalInt(oCaster, PRC_SPELL_EVENT); //use bitwise & to extract flags
|
||||
if(!nEvent) //normal cast
|
||||
{ //can't hold the charge with mass cure/inflict spells
|
||||
if(GetLocalInt(oCaster, PRC_SPELL_HOLD) && oCaster == oTarget && IsTouchSpell(nSpellID))
|
||||
{ //holding the charge, casting spell on self
|
||||
SetLocalSpellVariables(oCaster, 1); //change 1 to number of charges
|
||||
return;
|
||||
}
|
||||
DoSpell(oCaster, oTarget, nCasterLevel, nSpellID, bIsCure);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nEvent & PRC_SPELL_EVENT_ATTACK)
|
||||
{
|
||||
if(DoSpell(oCaster, oTarget, nCasterLevel, nSpellID, bIsCure))
|
||||
DecrementSpellCharges(oCaster);
|
||||
}
|
||||
}
|
||||
|
||||
if(GetIsHenchmanDying(oTarget) && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
168
src/hakpak/sks01_prc8_top/nss/nw_s0_healcirc.nss
Normal file
168
src/hakpak/sks01_prc8_top/nss/nw_s0_healcirc.nss
Normal file
@ -0,0 +1,168 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Healing Circle
|
||||
//:: NW_S0_HealCirc
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// Positive energy spreads out in all directions
|
||||
// from the point of origin, curing 1d8 points of
|
||||
// damage plus 1 point per caster level (maximum +20)
|
||||
// to nearby living allies.
|
||||
//
|
||||
// Like cure spells, healing circle damages undead in
|
||||
// its area rather than curing them.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Oct 18,2000
|
||||
//:://////////////////////////////////////////////
|
||||
//:: VFX Pass By: Preston W, On: June 20, 2001
|
||||
//:: Update Pass By: Preston W, On: Aug 1, 2001
|
||||
|
||||
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
||||
|
||||
//::Added code to maximize for Faith Healing and Blast Infidel
|
||||
//::Aaon Graywolf - Jan 7, 2004
|
||||
#include "69_hench_lib"
|
||||
#include "prc_inc_function"
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
If you want to make changes to all spells,
|
||||
check x2_inc_spellhook.nss to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
|
||||
//Declare major variables
|
||||
object oTarget;
|
||||
|
||||
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
||||
|
||||
|
||||
|
||||
|
||||
int nCasterLvl = CasterLvl;
|
||||
int nDamagen, nModify, nHP;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
effect eKill;
|
||||
effect eHeal;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_M);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
|
||||
float fDelay;
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
|
||||
//Limit caster level
|
||||
if (nCasterLvl > 20)
|
||||
{
|
||||
nCasterLvl = 20;
|
||||
}
|
||||
|
||||
CasterLvl +=SPGetPenetr();
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation());
|
||||
//Get first target in shape
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
fDelay = PRCGetRandomDelay();
|
||||
//Check if racial type is undead
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD
|
||||
|| (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE));
|
||||
//Make SR check
|
||||
if (!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl, fDelay))
|
||||
{
|
||||
int nDC = PRCGetSaveDC(oTarget,OBJECT_SELF);
|
||||
nModify = d8() + nCasterLvl;
|
||||
//Make metamagic check
|
||||
int iBlastFaith = BlastInfidelOrFaithHeal(OBJECT_SELF, oTarget, DAMAGE_TYPE_POSITIVE, FALSE);
|
||||
if ((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith)
|
||||
{
|
||||
nModify = 8 + nCasterLvl;
|
||||
}
|
||||
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
||||
{
|
||||
nModify += (nModify/2); //Damage/Healing is +50%
|
||||
}
|
||||
nModify += SpellDamagePerDice(OBJECT_SELF, 1);
|
||||
if (GetLevelByClass(CLASS_TYPE_HEALER, OBJECT_SELF))
|
||||
nModify += GetAbilityModifier(ABILITY_CHARISMA, OBJECT_SELF);
|
||||
//Make Fort save
|
||||
if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (nDC), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
|
||||
{
|
||||
if (GetHasMettle(oTarget, SAVING_THROW_FORT))
|
||||
// This script does nothing if it has Mettle, bail
|
||||
nModify = 0;;
|
||||
nModify /= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eKill = PRCEffectDamage(oTarget, nModify, DAMAGE_TYPE_POSITIVE);
|
||||
//Apply damage effect and VFX impact
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// * May 2003: Heal Neutrals as well
|
||||
if(!GetIsReactionTypeHostile(oTarget) || GetFactionEqual(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE, FALSE));
|
||||
nHP = d8() + nCasterLvl;
|
||||
//Enter Metamagic conditions
|
||||
int iBlastFaith = BlastInfidelOrFaithHeal(OBJECT_SELF, oTarget, DAMAGE_TYPE_POSITIVE, FALSE);
|
||||
if ((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith)
|
||||
{
|
||||
nHP = 8 + nCasterLvl;//Damage is at max
|
||||
}
|
||||
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
||||
{
|
||||
nHP = nHP + (nHP/2); //Damage/Healing is +50%
|
||||
}
|
||||
//Set healing effect
|
||||
if (GetLevelByClass(CLASS_TYPE_HEALER, OBJECT_SELF))
|
||||
nHP += GetAbilityModifier(ABILITY_CHARISMA, OBJECT_SELF);
|
||||
eHeal = PRCEffectHeal(nHP, oTarget);
|
||||
//Apply heal effect and VFX impact
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
||||
if(GetIsHenchmanDying(oTarget))
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHP);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in the shape
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
}
|
||||
|
||||
|
||||
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
// Getting rid of the local integer storing the spellschool name
|
||||
}
|
202
src/hakpak/sks01_prc8_top/nss/nw_s0_healharm.nss
Normal file
202
src/hakpak/sks01_prc8_top/nss/nw_s0_healharm.nss
Normal file
@ -0,0 +1,202 @@
|
||||
/*
|
||||
nw_s0_healharm
|
||||
|
||||
Heal/Harm in the one script
|
||||
|
||||
By: Flaming_Sword
|
||||
Created: Jun 14, 2006
|
||||
Modified: Nov 21, 2006
|
||||
|
||||
Consolidation of heal/harm scripts
|
||||
Mass Heal vfx on target looks like heal
|
||||
added greater harm, mass harm
|
||||
*/
|
||||
#include "69_hench_lib"
|
||||
#include "prc_sp_func"
|
||||
#include "prc_inc_sp_tch"
|
||||
#include "prc_inc_function"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "inc_dispel"
|
||||
|
||||
//Implements the spell impact, put code here
|
||||
// if called in many places, return TRUE if
|
||||
// stored charges should be decreased
|
||||
// eg. touch attack hits
|
||||
//
|
||||
// Variables passed may be changed if necessary
|
||||
int DoSpell(object oCaster, object oTarget, int nSpellID)
|
||||
{
|
||||
int bIsHeal = IsHeal(nSpellID); //whether it is a heal or harm spell
|
||||
int bMass = IsMassHealHarm(nSpellID);
|
||||
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nHealVFX, nHurtVFX, nEnergyType, nDice, iBlastFaith, nHeal;
|
||||
float fRadius;
|
||||
string nSwitch;
|
||||
int nCap = 150;
|
||||
if(bIsHeal)
|
||||
{
|
||||
nHealVFX = VFX_IMP_HEALING_X;
|
||||
nHurtVFX = VFX_IMP_SUNSTRIKE;
|
||||
nEnergyType = DAMAGE_TYPE_POSITIVE;
|
||||
nSwitch = PRC_BIOWARE_HEAL;
|
||||
fRadius = RADIUS_SIZE_COLOSSAL;
|
||||
if(nSpellID == SPELL_MASS_HEAL)
|
||||
{
|
||||
nSwitch = PRC_BIOWARE_MASS_HEAL;
|
||||
nCap = 250;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nHealVFX = VFX_IMP_HEALING_G;
|
||||
nHurtVFX = 246;
|
||||
nEnergyType = DAMAGE_TYPE_NEGATIVE;
|
||||
nSwitch = PRC_BIOWARE_HARM;
|
||||
fRadius = RADIUS_SIZE_HUGE;
|
||||
}
|
||||
int iHeal;
|
||||
int iAttackRoll = 1;
|
||||
if((nSpellID == SPELL_MASS_HARM) || (nSpellID == SPELL_GREATER_HARM))
|
||||
{
|
||||
nDice = (nCasterLevel > 20) ? 20 : nCasterLevel;
|
||||
nHeal = d12(nDice);
|
||||
if((nMetaMagic & METAMAGIC_MAXIMIZE) || BlastInfidelOrFaithHeal(oCaster, oTarget, nEnergyType, TRUE))
|
||||
nHeal = 12 * nDice; //in case higher level spell slots are available
|
||||
}
|
||||
else
|
||||
{
|
||||
nHeal = 10 * nCasterLevel;
|
||||
}
|
||||
if(nHeal > nCap && !GetPRCSwitch(nSwitch))
|
||||
nHeal = nCap;
|
||||
location lLoc;
|
||||
if(bMass)
|
||||
{
|
||||
lLoc = (nSpellID == SPELL_MASS_HARM) ? GetLocation(oCaster) : PRCGetSpellTargetLocation();
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lLoc);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(bIsHeal ? VFX_FNF_LOS_HOLY_30 : VFX_FNF_LOS_EVIL_20), lLoc);
|
||||
}
|
||||
float fDelay = 0.0;
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(bMass) fDelay = PRCGetRandomDelay();
|
||||
int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
|
||||
|
||||
iHeal = GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
|
||||
((!bIsHeal && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) ||
|
||||
(bIsHeal && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD && !iTombTainted));
|
||||
if (GetLocalInt(oTarget, "AcererakHealing")) iHeal = TRUE;
|
||||
|
||||
if(iHeal && (spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, oCaster) || (GetIsDead(oTarget) && (GetCurrentHitPoints(oTarget) > -10))))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID, FALSE));
|
||||
|
||||
//Warforged are only healed for half, none if they have Improved Fortification
|
||||
if(GetIsWarforged(oTarget)) nHeal /= 2;
|
||||
if(GetHasFeat(FEAT_IMPROVED_FORTIFICATION, oTarget)) nHeal = 0;
|
||||
|
||||
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nHeal, oTarget), oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nHealVFX), oTarget));
|
||||
// Code for FB to remove damage that would be caused at end of Frenzy
|
||||
SetLocalInt(oTarget, "PC_Damage", 0);
|
||||
}
|
||||
else if((GetObjectType(oTarget) != OBJECT_TYPE_CREATURE && !bIsHeal) ||
|
||||
(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE && !iHeal))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oCaster)
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID));
|
||||
iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
|
||||
if(iAttackRoll)
|
||||
{
|
||||
if (!PRCDoResistSpell(oCaster, oTarget, nCasterLevel + SPGetPenetr()))
|
||||
{
|
||||
int nModify = d4();
|
||||
iBlastFaith = BlastInfidelOrFaithHeal(oCaster, oTarget, nEnergyType, TRUE);
|
||||
if((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith)
|
||||
{
|
||||
nModify = 1;
|
||||
}
|
||||
if((nSpellID == SPELL_MASS_HARM) || (nSpellID == SPELL_GREATER_HARM))
|
||||
{
|
||||
nHeal = d12(nDice);
|
||||
if((nMetaMagic & METAMAGIC_MAXIMIZE) || iBlastFaith)
|
||||
nHeal = 12 * nDice;
|
||||
|
||||
nHeal += SpellDamagePerDice(oCaster, nDice);
|
||||
}
|
||||
else
|
||||
{
|
||||
nHeal = 10 * nCasterLevel;
|
||||
}
|
||||
if(nHeal > nCap && !GetPRCSwitch(nSwitch))
|
||||
nHeal = nCap;
|
||||
|
||||
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
|
||||
{
|
||||
nHeal /= 2;
|
||||
if (GetHasMettle(oTarget, SAVING_THROW_WILL)) // Ignores partial effects
|
||||
nHeal = 0;
|
||||
}
|
||||
int nHP = GetCurrentHitPoints(oTarget);
|
||||
if (nHeal > nHP - nModify)
|
||||
nHeal = nHP - nModify;
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nHeal, nEnergyType), oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nHurtVFX), oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!bMass) break;
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lLoc);
|
||||
}
|
||||
//Spell Removal Check
|
||||
SpellRemovalCheck(oCaster, oTarget);
|
||||
return iAttackRoll; //return TRUE if spell charges should be decremented
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if (DEBUG) DoDebug("nw_s0_healharm running "+IntToString(GetIsPC(OBJECT_SELF)));
|
||||
int nSpellID = PRCGetSpellId();
|
||||
PRCSetSchool(GetSpellSchool(nSpellID));
|
||||
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
if(X2PreSpellCastCode())
|
||||
{
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
string sTag = GetTag(oTarget);
|
||||
object oArea = GetArea(oTarget);
|
||||
int nEvent = GetLocalInt(oCaster, PRC_SPELL_EVENT); //use bitwise & to extract flags
|
||||
if(!nEvent) //normal cast
|
||||
{
|
||||
if (DEBUG )DoDebug("nw_s0_healharm running normal casting");
|
||||
if(IsTouchSpell(nSpellID) && GetLocalInt(oCaster, PRC_SPELL_HOLD) && oCaster == oTarget)
|
||||
{ //holding the charge, casting spell on self
|
||||
SetLocalSpellVariables(oCaster, 1); //change 1 to number of charges
|
||||
if (DEBUG) DoDebug("nw_s0_healharm running returning");
|
||||
return;
|
||||
}
|
||||
if (DEBUG) DoDebug("nw_s0_healharm running DoSpell");
|
||||
DoSpell(oCaster, oTarget, nSpellID);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DEBUG) DoDebug("nw_s0_healharm running else casting");
|
||||
if(nEvent & PRC_SPELL_EVENT_ATTACK)
|
||||
{
|
||||
if(DoSpell(oCaster, oTarget, nSpellID))
|
||||
DecrementSpellCharges(oCaster);
|
||||
}
|
||||
}
|
||||
if(GetIsHenchmanDying(oTarget))
|
||||
{
|
||||
SetLocalInt(oArea, "nCHP" +sTag, 21);
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
153
src/hakpak/sks01_prc8_top/nss/nw_s0_mscharm.nss
Normal file
153
src/hakpak/sks01_prc8_top/nss/nw_s0_mscharm.nss
Normal file
@ -0,0 +1,153 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Mass Charm]
|
||||
//:: [NW_S0_MsCharm.nss]
|
||||
//:: Copyright (c) 2000 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
The caster attempts to charm a group of individuals
|
||||
who's HD can be no more than his level combined.
|
||||
The spell starts checking the area and those that
|
||||
fail a will save are charmed. The affected persons
|
||||
are Charmed for 1 round per 2 caster levels.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 29, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
|
||||
//:: VFX Pass By: Preston W, On: June 22, 2001
|
||||
|
||||
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
||||
#include "_prr_main"
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ENCHANTMENT);
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
If you want to make changes to all spells,
|
||||
check x2_inc_spellhook.nss to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget;
|
||||
effect eCharm = EffectCharmed();
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
|
||||
effect eLink = EffectLinkEffects(eMind, eCharm);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
||||
|
||||
int nCasterLevel = CasterLvl;
|
||||
int nDuration = nCasterLevel;
|
||||
int nHD = nCasterLevel;
|
||||
int nCnt = 0;
|
||||
int nRacial;
|
||||
float fDelay;
|
||||
int nAmount = nHD * 2;
|
||||
|
||||
// Get the string so we can check to see if the target is already charmed
|
||||
string sCharmedVarName = "CHARMED_BY_" + GetName(OBJECT_SELF);
|
||||
|
||||
// Set the PRR Duration for friendlies
|
||||
int nPRR_Duration = nCasterLevel * 24;
|
||||
|
||||
//Check for metamagic extend and adjust both durations
|
||||
if (nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration = nCasterLevel;
|
||||
nPRR_Duration = nCasterLevel * 24 * 2;
|
||||
}
|
||||
|
||||
int nPenetr = CasterLvl + SPGetPenetr();
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation());
|
||||
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
while (GetIsObjectValid(oTarget) && nAmount > 0)
|
||||
{
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
nRacial = MyPRCGetRacialType(oTarget);
|
||||
fDelay = PRCGetRandomDelay();
|
||||
//Check that the target is humanoid or animal
|
||||
if ((nRacial == RACIAL_TYPE_DWARF) ||
|
||||
(nRacial == RACIAL_TYPE_ELF) ||
|
||||
(nRacial == RACIAL_TYPE_GNOME) ||
|
||||
(nRacial == RACIAL_TYPE_HUMANOID_GOBLINOID) ||
|
||||
(nRacial == RACIAL_TYPE_HALFLING) ||
|
||||
(nRacial == RACIAL_TYPE_HUMAN) ||
|
||||
(nRacial == RACIAL_TYPE_HALFELF) ||
|
||||
(nRacial == RACIAL_TYPE_HALFORC) ||
|
||||
(nRacial == RACIAL_TYPE_HUMANOID_MONSTROUS) ||
|
||||
(nRacial == RACIAL_TYPE_HUMANOID_ORC) ||
|
||||
(nRacial == RACIAL_TYPE_HUMANOID_REPTILIAN))
|
||||
{
|
||||
//SpeakString(IntToString(nAmount) + " and HD of " + IntToString(GetHitDice(oTarget)));
|
||||
if(nAmount >= GetHitDice(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_MASS_CHARM, FALSE));
|
||||
//Make an SR check
|
||||
if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nPenetr))
|
||||
{
|
||||
int nDC = PRCGetSaveDC(oTarget,OBJECT_SELF);
|
||||
//Make a Will save to negate
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (nDC), SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration),TRUE,-1,CasterLvl));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
else
|
||||
{
|
||||
//Only works if the creature is not already charmed (and not a pc)
|
||||
if(GetLocalInt(oTarget, sCharmedVarName) != 1 && !GetIsPC(oTarget))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact and adjust the PRR
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration),TRUE,-1,CasterLvl));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
SendMessageToPC(OBJECT_SELF, "You have charmed " + GetName(oTarget) + " and the effect will last for " + IntToString(nPRR_Duration / 24) + " days.");
|
||||
PRR_CHARM_AffectTarget(oTarget, OBJECT_SELF, nPRR_Duration);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "You have already charmed " + GetName(oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Add the creatures HD to the count of affected creatures
|
||||
//nCnt = nCnt + GetHitDice(oTarget);
|
||||
nAmount = nAmount - GetHitDice(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
}
|
||||
|
||||
|
||||
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
// Getting rid of the local integer storing the spellschool name
|
||||
}
|
84
src/hakpak/sks01_prc8_top/nss/nw_s0_res.nss
Normal file
84
src/hakpak/sks01_prc8_top/nss/nw_s0_res.nss
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
nw_s0_res.nss
|
||||
|
||||
Raise Dead, Resurrection
|
||||
|
||||
By: Flaming_Sword
|
||||
Created: Jun 16, 2006
|
||||
Modified: Jun 16, 2006
|
||||
|
||||
Consolidation of 2 scripts, cleaned up
|
||||
*/
|
||||
#include "69_hench_lib"
|
||||
#include "prc_sp_func"
|
||||
|
||||
//Implements the spell impact, put code here
|
||||
// if called in many places, return TRUE if
|
||||
// stored charges should be decreased
|
||||
// eg. touch attack hits
|
||||
//
|
||||
// Variables passed may be changed if necessary
|
||||
int DoSpell(object oCaster, object oTarget, int nCasterLevel, int nEvent)
|
||||
{
|
||||
int nSpellID = PRCGetSpellId();
|
||||
int bRes = (nSpellID == SPELL_RESURRECTION);
|
||||
|
||||
if (GetIsObjectValid(oTarget))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID, FALSE));
|
||||
if (GetIsDead(oTarget)&& GetIsHenchmanDying(oTarget) == FALSE)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oTarget);
|
||||
if(bRes) SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(GetMaxHitPoints(oTarget) + 10, oTarget), oTarget);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_RAISE_DEAD), GetLocation(oTarget));
|
||||
ExecuteScript(bRes ? "prc_pw_res" : "prc_pw_raisedead", oCaster);
|
||||
if(GetPRCSwitch(PRC_PW_DEATH_TRACKING) && GetIsPC(oTarget))
|
||||
SetPersistantLocalInt(oTarget, "persist_dead", FALSE);
|
||||
|
||||
if(GetDidDie(oTarget)) //Added for henchman
|
||||
{
|
||||
PostRespawnCleanup69(oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
|
||||
{
|
||||
int nStrRef = GetLocalInt(oTarget,"X2_L_RESURRECT_SPELL_MSG_RESREF");
|
||||
if(nStrRef == 0)
|
||||
nStrRef = 83861;
|
||||
if(nStrRef != -1)
|
||||
FloatingTextStrRefOnCreature(nStrRef,oCaster);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE; //return TRUE if spell charges should be decremented
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
object oCaster = OBJECT_SELF;
|
||||
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||
PRCSetSchool(GetSpellSchool(PRCGetSpellId()));
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nEvent = GetLocalInt(oCaster, PRC_SPELL_EVENT); //use bitwise & to extract flags
|
||||
if(!nEvent) //normal cast
|
||||
{
|
||||
if(GetLocalInt(oCaster, PRC_SPELL_HOLD) && oCaster == oTarget)
|
||||
{ //holding the charge, casting spell on self
|
||||
SetLocalSpellVariables(oCaster, 1); //change 1 to number of charges
|
||||
return;
|
||||
}
|
||||
DoSpell(oCaster, oTarget, nCasterLevel, nEvent);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nEvent & PRC_SPELL_EVENT_ATTACK)
|
||||
{
|
||||
if(DoSpell(oCaster, oTarget, nCasterLevel, nEvent))
|
||||
DecrementSpellCharges(oCaster);
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_aurablnda.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_aurablnda.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Blinding On Enter
|
||||
//:: NW_S1_AuraBlndA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura of the creature the player
|
||||
must make a will save or be blinded because of the
|
||||
sheer ugliness or beauty of the creature.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD/3);
|
||||
|
||||
effect eBlind = EffectBlindness();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M);
|
||||
effect eLink = EffectLinkEffects(eBlind, eDur);
|
||||
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
|
||||
//Entering object must make a will save or be blinded for the duration.
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_BLINDING));
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
//Apply the blind effect and the VFX impact
|
||||
DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
}
|
62
src/hakpak/sks01_prc8_top/nss/nw_s1_auracoldc.nss
Normal file
62
src/hakpak/sks01_prc8_top/nss/nw_s1_auracoldc.nss
Normal file
@ -0,0 +1,62 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Frost on Heartbeat
|
||||
//:: NW_S1_AuraColdC.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Prolonged exposure to the aura of the creature
|
||||
causes frost damage to all within the aura.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nFrost = 1 + (nHD/3);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
effect eDam;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
|
||||
|
||||
//Get the first target in the aura of cold
|
||||
oTarget = GetFirstInPersistentObject();
|
||||
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget))
|
||||
{
|
||||
oTarget = GetNextInPersistentObject(OBJECT_SELF);
|
||||
continue;
|
||||
} */
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_COLD));
|
||||
//Roll damage based on the creatures HD
|
||||
nDamage = d4(nFrost);
|
||||
//Make a Fortitude save for half
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_COLD))
|
||||
{
|
||||
nDamage = nDamage / 2;
|
||||
}
|
||||
//Set the damage effect
|
||||
eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
|
||||
//Apply the VFX constant and damage effect
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
//Get the next target in the aura of cold
|
||||
oTarget = GetNextInPersistentObject();
|
||||
}
|
||||
}
|
58
src/hakpak/sks01_prc8_top/nss/nw_s1_auraelecc.nss
Normal file
58
src/hakpak/sks01_prc8_top/nss/nw_s1_auraelecc.nss
Normal file
@ -0,0 +1,58 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Electricity on Heartbeat
|
||||
//:: NW_S1_AuraElecC.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Prolonged exposure to the aura of the creature
|
||||
causes electrical damage to all within the aura.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nZap = 1 + (nHD / 3);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 + nCHAMod + (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
effect eDam;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
|
||||
|
||||
//Get first target in spell area
|
||||
object oTarget = GetFirstInPersistentObject();
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget))
|
||||
{
|
||||
oTarget = GetNextInPersistentObject(OBJECT_SELF);
|
||||
continue;
|
||||
} */
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
nDamage = d4(nZap);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_AURA_ELECTRICITY));
|
||||
//Make a saving throw check
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY))
|
||||
{
|
||||
nDamage = nDamage / 2;
|
||||
}
|
||||
eDam = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextInPersistentObject();
|
||||
}
|
||||
}
|
59
src/hakpak/sks01_prc8_top/nss/nw_s1_aurafirec.nss
Normal file
59
src/hakpak/sks01_prc8_top/nss/nw_s1_aurafirec.nss
Normal file
@ -0,0 +1,59 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Fire on Heartbeat
|
||||
//:: NW_S1_AuraFireC.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Prolonged exposure to the aura of the creature
|
||||
causes fire damage to all within the aura.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetFirstInPersistentObject(); //:: Get first target in spell area
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nBurn = 1 + (nHD/3);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
int nDamSave;
|
||||
|
||||
effect eDam;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget))
|
||||
{
|
||||
oTarget = GetNextInPersistentObject(OBJECT_SELF);
|
||||
continue;
|
||||
} */
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FIRE));
|
||||
//Roll damage
|
||||
nDamage = d4(nBurn);
|
||||
//Make a saving throw check
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_FIRE))
|
||||
{
|
||||
nDamage = nDamage / 2;
|
||||
}
|
||||
//Set the damage effect
|
||||
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextInPersistentObject();
|
||||
}
|
||||
}
|
46
src/hakpak/sks01_prc8_top/nss/nw_s1_auramenca.nss
Normal file
46
src/hakpak/sks01_prc8_top/nss/nw_s1_auramenca.nss
Normal file
@ -0,0 +1,46 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Menace On Enter
|
||||
//:: NW_S1_AuraMencA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura all those that fail
|
||||
a will save are stricken with Doom.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
|
||||
int nDuration = 1 + (GetHitDice(oNPC)/3);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (GetHitDice(oNPC)/2);
|
||||
int nLevel = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DOOM);
|
||||
effect eLink = CreateDoomEffectsLink();
|
||||
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_AURA_MENACE));
|
||||
//Spell Resistance and Saving throw
|
||||
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink , oTarget, TurnsToSeconds(nDuration));
|
||||
}
|
||||
}
|
||||
}
|
35
src/hakpak/sks01_prc8_top/nss/nw_s1_auraprota.nss
Normal file
35
src/hakpak/sks01_prc8_top/nss/nw_s1_auraprota.nss
Normal file
@ -0,0 +1,35 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Protection: On Enter
|
||||
//:: NW_S1_AuraProtA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Acts as a double strength Magic Circle against
|
||||
evil and a Minor Globe for those friends in
|
||||
the area.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On:Jan 8, 2002, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
effect eProt = CreateProtectionFromAlignmentLink(ALIGNMENT_EVIL);
|
||||
effect eGlobe = EffectSpellLevelAbsorption(3, 0);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_GLOBE_MINOR);
|
||||
|
||||
effect eLink = EffectLinkEffects(eProt, eGlobe);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
object oTarget = GetEnteringObject();
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
//Faction Check
|
||||
if(GetIsFriend(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_aurastuna.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_aurastuna.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura Stunning On Enter
|
||||
//:: NW_S1_AuraStunA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura of the creature the player
|
||||
must make a will save or be stunned.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDuration = GetHitDice(oNPC);
|
||||
int nDC = 10 + nCHAMod + (nDuration/2);
|
||||
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_STUN);
|
||||
effect eVis2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eDeath = EffectStunned();
|
||||
effect eLink = EffectLinkEffects(eVis2, eDeath);
|
||||
|
||||
nDuration = GetScaledDuration(nDuration, oTarget);
|
||||
|
||||
if(!GetIsFriend(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_STUN));
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_auraunata.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_auraunata.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of the Unnatural On Enter
|
||||
//:: NW_S1_AuraMencA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura all animals are struck with
|
||||
fear.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eLink = EffectLinkEffects(eVis, eFear);
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
|
||||
int nDuration = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nRacial = GetRacialType(oTarget);
|
||||
int nDC = 10 + nCHAMod + (GetHitDice(oNPC)/2);
|
||||
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
nDuration = (nDuration / 3) + 1;
|
||||
//Make a saving throw check
|
||||
if(nRacial == RACIAL_TYPE_ANIMAL)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_UNNATURAL));
|
||||
//if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)) //:: This ability only affects animals & they don't get a save.
|
||||
//{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
46
src/hakpak/sks01_prc8_top/nss/nw_s1_aurauneaa.nss
Normal file
46
src/hakpak/sks01_prc8_top/nss/nw_s1_aurauneaa.nss
Normal file
@ -0,0 +1,46 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura Unearthly Visage On Enter
|
||||
//:: NW_S1_AuraUnEaA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura of the creature the player
|
||||
must make a will save or be killed because of the
|
||||
sheer ugliness or beauty of the creature.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
if(GetIsEnemy(oTarget, oNPC))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_UNEARTHLY_VISAGE));
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
66
src/hakpak/sks01_prc8_top/nss/nw_s1_bltacid.nss
Normal file
66
src/hakpak/sks01_prc8_top/nss/nw_s1_bltacid.nss
Normal file
@ -0,0 +1,66 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Acid
|
||||
//:: NW_S1_BltAcid
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nCount = nHD/2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||||
effect eBolt;
|
||||
|
||||
//ankheg
|
||||
if(GetAppearanceType(oNPC) == APPEARANCE_TYPE_BEETLE_SLICER)
|
||||
{
|
||||
nDamage = d4(4);
|
||||
}
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ACID));
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_ACID);
|
||||
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcharm.nss
Normal file
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcharm.nss
Normal file
@ -0,0 +1,47 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Charm
|
||||
//:: NW_S1_BltCharm
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
effect eBolt = EffectCharmed();
|
||||
eBolt = GetScaledEffect(eBolt, oTarget);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_CHARM));
|
||||
//Make a saving throw check
|
||||
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltchrdr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltchrdr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Charisma Drain
|
||||
//:: NW_S1_BltChrDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Fortitude save is
|
||||
needed to avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD / 3;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_ABILITY_DRAIN_CHARISMA));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_CHARISMA, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
60
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcold.nss
Normal file
60
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcold.nss
Normal file
@ -0,0 +1,60 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Cold
|
||||
//:: NW_S1_BltCold
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD/2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_COLD));
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_COLD);
|
||||
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcondr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltcondr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Constitution Drain
|
||||
//:: NW_S1_BltConDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Fort save is
|
||||
needed to avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD /3);
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_CONSTITUTION));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_CONSTITUTION, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltconf.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltconf.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Confuse
|
||||
//:: NW_S1_BltConf
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_CONFUSION_S);
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eBolt = EffectConfused();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_CONFUSE));
|
||||
//Make a saving throw check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
|
||||
}
|
||||
}
|
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdaze.nss
Normal file
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdaze.nss
Normal file
@ -0,0 +1,47 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Daze
|
||||
//:: NW_S1_BltDaze
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
#include "NW_I0_SPELLS"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eBolt = EffectDazed();
|
||||
eBolt = GetScaledEffect(eBolt, oTarget);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DAZE));
|
||||
//Make a saving throw check
|
||||
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
}
|
||||
}
|
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdeath.nss
Normal file
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdeath.nss
Normal file
@ -0,0 +1,47 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Death
|
||||
//:: NW_S1_BltDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
effect eBolt = EffectDeath();
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DEATH));
|
||||
//Make a saving throw check
|
||||
if(TouchAttackRanged(oTarget))
|
||||
{
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdexdr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdexdr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Dexterity Drain
|
||||
//:: NW_S1_BltDexDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Fort save is
|
||||
needed to avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_DEXTERITY));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_DEXTERITY, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
73
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdisese.nss
Normal file
73
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdisese.nss
Normal file
@ -0,0 +1,73 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Disease
|
||||
//:: NW_S1_BltDisease
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to infect
|
||||
the target with a disease. The disease used
|
||||
is chosen based upon the racial type of the
|
||||
caster.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nRacial = MyPRCGetRacialType(oNPC);
|
||||
int nDisease;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DISEASE));
|
||||
|
||||
//Here we use the racial type of the attacker to select an
|
||||
//appropriate disease.
|
||||
switch (nRacial)
|
||||
{
|
||||
case RACIAL_TYPE_VERMIN:
|
||||
nDisease = DISEASE_VERMIN_MADNESS;
|
||||
break;
|
||||
case RACIAL_TYPE_UNDEAD:
|
||||
nDisease = DISEASE_FILTH_FEVER;
|
||||
break;
|
||||
case RACIAL_TYPE_OUTSIDER:
|
||||
if(GetTag(oNPC) == "NW_SLAADRED")
|
||||
{
|
||||
nDisease = DISEASE_RED_SLAAD_EGGS;
|
||||
}
|
||||
else
|
||||
{
|
||||
nDisease = DISEASE_DEMON_FEVER;
|
||||
}
|
||||
break;
|
||||
case RACIAL_TYPE_MAGICAL_BEAST:
|
||||
nDisease = DISEASE_SOLDIER_SHAKES;
|
||||
break;
|
||||
case RACIAL_TYPE_ABERRATION:
|
||||
nDisease = DISEASE_BLINDING_SICKNESS;
|
||||
break;
|
||||
default:
|
||||
nDisease = DISEASE_SOLDIER_SHAKES;
|
||||
break;
|
||||
}
|
||||
//Assign effect and chosen disease
|
||||
effect eBolt = EffectDisease(nDisease);
|
||||
//Make the ranged touch attack.
|
||||
if (TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget);
|
||||
}
|
||||
}
|
53
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdomn.nss
Normal file
53
src/hakpak/sks01_prc8_top/nss/nw_s1_bltdomn.nss
Normal file
@ -0,0 +1,53 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Dominated
|
||||
//:: NW_S1_BltDomn
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S);
|
||||
effect eBolt = EffectDominated();
|
||||
eBolt = GetScaledEffect(eBolt, oTarget);
|
||||
effect eVis2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
|
||||
eBolt = GetScaledEffect(eBolt, oTarget);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eVis2);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DOMINATE));
|
||||
|
||||
//Make a saving throw check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
58
src/hakpak/sks01_prc8_top/nss/nw_s1_bltfire.nss
Normal file
58
src/hakpak/sks01_prc8_top/nss/nw_s1_bltfire.nss
Normal file
@ -0,0 +1,58 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Fire
|
||||
//:: NW_S1_BoltFire
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD/2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_FIRE));
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_FIRE);
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltintdr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltintdr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Intelligence Drain
|
||||
//:: NW_S1_BltIntDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_INTELLIGENCE));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_INTELLIGENCE, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltknckd.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltknckd.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Knockdown
|
||||
//:: NW_S1_BltKnckD
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD/2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SONIC);
|
||||
effect eBolt = EffectKnockdown();
|
||||
effect eDam = EffectDamage(d6(), DAMAGE_TYPE_BLUDGEONING);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_KNOCKDOWN));
|
||||
|
||||
//Make a saving throw check
|
||||
if (!/*Reflex Save*/ PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBolt, oTarget, RoundsToSeconds(3));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
}
|
||||
}
|
59
src/hakpak/sks01_prc8_top/nss/nw_s1_bltlightn.nss
Normal file
59
src/hakpak/sks01_prc8_top/nss/nw_s1_bltlightn.nss
Normal file
@ -0,0 +1,59 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Lightning
|
||||
//:: NW_S1_BltLightn
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Does 1d6 per level to a single target. Reflex
|
||||
save for half
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Aug 10, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD/2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, OBJECT_SELF,BODY_NODE_HAND);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_LIGHTNING));
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_ELECTRICITY);
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLightning, oTarget, 1.7);
|
||||
}
|
||||
}
|
||||
}
|
49
src/hakpak/sks01_prc8_top/nss/nw_s1_bltlvldr.nss
Normal file
49
src/hakpak/sks01_prc8_top/nss/nw_s1_bltlvldr.nss
Normal file
@ -0,0 +1,49 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Level Drain
|
||||
//:: NW_S1_BltLvlDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = nHD/5;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt = EffectNegativeLevel(1);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_LEVEL_DRAIN));
|
||||
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//eBolt = LEVEL DRAIN EFFECT
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltparal.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltparal.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Paralyze
|
||||
//:: NW_S1_BltParal
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_PARALYZED);
|
||||
effect eBolt = EffectParalyze();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_PARALYZE));
|
||||
//Make a saving throw check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
}
|
||||
}
|
123
src/hakpak/sks01_prc8_top/nss/nw_s1_bltpoison.nss
Normal file
123
src/hakpak/sks01_prc8_top/nss/nw_s1_bltpoison.nss
Normal file
@ -0,0 +1,123 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Poison
|
||||
//:: NW_S1_BltPoison.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Must make a ranged touch attack. If successful
|
||||
the target is struck down with poison that
|
||||
scales with level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nRacial = MyPRCGetRacialType(OBJECT_SELF);
|
||||
int nPoison;
|
||||
|
||||
effect ePoison;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_POISON));
|
||||
|
||||
//Determine the poison type based on the Racial Type and HD
|
||||
switch (nRacial)
|
||||
{
|
||||
case RACIAL_TYPE_OUTSIDER:
|
||||
if (nHD <= 9)
|
||||
{
|
||||
nPoison = POISON_QUASIT_VENOM;
|
||||
}
|
||||
else if (nHD > 9 && nHD < 13)
|
||||
{
|
||||
nPoison = POISON_BEBILITH_VENOM;
|
||||
}
|
||||
else if (nHD >= 13)
|
||||
{
|
||||
nPoison = POISON_PIT_FIEND_ICHOR;
|
||||
}
|
||||
break;
|
||||
case RACIAL_TYPE_VERMIN:
|
||||
if (nHD < 3)
|
||||
{
|
||||
nPoison = POISON_TINY_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 3 && nHD < 6)
|
||||
{
|
||||
nPoison = POISON_SMALL_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 6 && nHD < 9)
|
||||
{
|
||||
nPoison = POISON_MEDIUM_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 9 && nHD < 12)
|
||||
{
|
||||
nPoison = POISON_LARGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 12 && nHD < 15)
|
||||
{
|
||||
nPoison = POISON_HUGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 15 && nHD < 18)
|
||||
{
|
||||
nPoison = POISON_GARGANTUAN_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD >= 18)
|
||||
{
|
||||
nPoison = POISON_COLOSSAL_SPIDER_VENOM;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (nHD < 3)
|
||||
{
|
||||
nPoison = POISON_NIGHTSHADE;
|
||||
}
|
||||
else if (nHD <= 3 && nHD < 6)
|
||||
{
|
||||
nPoison = POISON_BLADE_BANE;
|
||||
}
|
||||
else if (nHD <= 6 && nHD < 9)
|
||||
{
|
||||
nPoison = POISON_BLOODROOT;
|
||||
}
|
||||
else if (nHD <= 9 && nHD < 12)
|
||||
{
|
||||
nPoison = POISON_LARGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 12 && nHD < 15)
|
||||
{
|
||||
nPoison = POISON_LICH_DUST;
|
||||
}
|
||||
else if (nHD <= 15 && nHD < 18)
|
||||
{
|
||||
nPoison = POISON_DARK_REAVER_POWDER;
|
||||
}
|
||||
else if (nHD >= 18 )
|
||||
{
|
||||
nPoison = POISON_BLACK_LOTUS_EXTRACT;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
//Make a ranged touch attack
|
||||
if (TouchAttackRanged (oTarget))
|
||||
{
|
||||
ePoison = EffectPoison(nPoison);
|
||||
//Apply effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget);
|
||||
}
|
||||
}
|
||||
|
58
src/hakpak/sks01_prc8_top/nss/nw_s1_bltshards.nss
Normal file
58
src/hakpak/sks01_prc8_top/nss/nw_s1_bltshards.nss
Normal file
@ -0,0 +1,58 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Shards
|
||||
//:: NW_S1_BltShard
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_SHARDS));
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC);
|
||||
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING, DAMAGE_POWER_PLUS_ONE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltslow.nss
Normal file
47
src/hakpak/sks01_prc8_top/nss/nw_s1_bltslow.nss
Normal file
@ -0,0 +1,47 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Slow
|
||||
//:: NW_S1_BltSlow
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex save is
|
||||
needed to or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: June 18 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SLOW);
|
||||
effect eBolt = EffectSlow();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_SLOW));
|
||||
//Make a saving throw check
|
||||
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltstrdr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltstrdr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Strength Drain
|
||||
//:: NW_S1_BltStrDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Fort save is
|
||||
needed to avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_ABILITY_DRAIN_STRENGTH));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_STRENGTH, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
50
src/hakpak/sks01_prc8_top/nss/nw_s1_bltstun.nss
Normal file
50
src/hakpak/sks01_prc8_top/nss/nw_s1_bltstun.nss
Normal file
@ -0,0 +1,50 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Stun
|
||||
//:: NW_S1_BltStun
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Reflex or Will save is
|
||||
needed to halve damage or avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD + 1) / 2;
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_STUN);
|
||||
effect eBolt = EffectStunned();
|
||||
eBolt = GetScaledEffect(eBolt, oTarget);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBolt, eDur);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_STUN));
|
||||
//Make a saving throw check
|
||||
if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
44
src/hakpak/sks01_prc8_top/nss/nw_s1_bltweb.nss
Normal file
44
src/hakpak/sks01_prc8_top/nss/nw_s1_bltweb.nss
Normal file
@ -0,0 +1,44 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Web
|
||||
//:: NW_S1_BltWeb
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Glues a single target to the ground with
|
||||
sticky strands of webbing.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 28, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nCount = 1 + (nHD /2);
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_WEB);
|
||||
effect eStick = EffectEntangle();
|
||||
effect eLink = EffectLinkEffects(eVis, eStick);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_WEB));
|
||||
//Make a saving throw check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount));
|
||||
}
|
||||
}
|
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltwisdr.nss
Normal file
48
src/hakpak/sks01_prc8_top/nss/nw_s1_bltwisdr.nss
Normal file
@ -0,0 +1,48 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolt: Wisdom Drain
|
||||
//:: NW_S1_BltWisDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature must make a ranged touch attack to hit
|
||||
the intended target. Fort save is
|
||||
needed to avoid effect.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11 , 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nCount = (nHD /3);
|
||||
if (nCount == 0) { nCount = 1; }
|
||||
int nDamage = d6(nCount);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eBolt;
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_WISDOM));
|
||||
//Make a saving throw check
|
||||
if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget))
|
||||
{
|
||||
eBolt = EffectAbilityDecrease(ABILITY_WISDOM, nCount);
|
||||
eBolt = SupernaturalEffect(eBolt);
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
76
src/hakpak/sks01_prc8_top/nss/nw_s1_coneacid.nss
Normal file
76
src/hakpak/sks01_prc8_top/nss/nw_s1_coneacid.nss
Normal file
@ -0,0 +1,76 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cone: Acid
|
||||
//:: NW_S1_ConeAcid
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A cone of damage eminated from the monster. Does
|
||||
a set amount of damage based upon the creatures HD
|
||||
and can be halved with a Reflex Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
int nLoop = nHD / 3;
|
||||
|
||||
float fDelay;
|
||||
|
||||
if(nLoop == 0)
|
||||
{
|
||||
nLoop = 1;
|
||||
}
|
||||
|
||||
//Calculate the damage
|
||||
for (nLoop; nLoop > 0; nLoop--)
|
||||
{
|
||||
nDamage = nDamage + d6(2);
|
||||
}
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eCone;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_ACID));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ACID);
|
||||
//Set damage effect
|
||||
eCone = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
76
src/hakpak/sks01_prc8_top/nss/nw_s1_conecold.nss
Normal file
76
src/hakpak/sks01_prc8_top/nss/nw_s1_conecold.nss
Normal file
@ -0,0 +1,76 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cone: Cold
|
||||
//:: NW_S1_ConeCold
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A cone of damage eminated from the monster. Does
|
||||
a set amount of damage based upon the creatures HD
|
||||
and can be halved with a Reflex Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
int nLoop = nHD / 3;
|
||||
|
||||
float fDelay;
|
||||
|
||||
if(nLoop == 0)
|
||||
{
|
||||
nLoop = 1;
|
||||
}
|
||||
|
||||
//Calculate the damage
|
||||
for (nLoop; nLoop > 0; nLoop--)
|
||||
{
|
||||
nDamage = nDamage + d6(2);
|
||||
}
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eCone;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_COLD));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_COLD);
|
||||
//Set damage effect
|
||||
eCone = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
99
src/hakpak/sks01_prc8_top/nss/nw_s1_conedisea.nss
Normal file
99
src/hakpak/sks01_prc8_top/nss/nw_s1_conedisea.nss
Normal file
@ -0,0 +1,99 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cone: Disease
|
||||
//:: NW_S1_ConeDisea
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Creature spits out a cone of disease that cannot
|
||||
be avoided unless a Reflex save is made.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nRacial = MyPRCGetRacialType(oNPC);
|
||||
int nDisease;
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eCone = EffectDisease(nDisease);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DISEASE_S);
|
||||
|
||||
|
||||
//Determine the disease type based on the Racial Type and HD
|
||||
switch (nRacial)
|
||||
{
|
||||
case RACIAL_TYPE_OUTSIDER:
|
||||
nDisease = DISEASE_DEMON_FEVER;
|
||||
break;
|
||||
case RACIAL_TYPE_VERMIN:
|
||||
nDisease = DISEASE_VERMIN_MADNESS;
|
||||
break;
|
||||
case RACIAL_TYPE_UNDEAD:
|
||||
if(nHD <= 3)
|
||||
{
|
||||
nDisease = DISEASE_ZOMBIE_CREEP;
|
||||
}
|
||||
else if (nHD > 3 && nHD <= 10)
|
||||
{
|
||||
nDisease = DISEASE_GHOUL_ROT;
|
||||
}
|
||||
else if(nHD > 10)
|
||||
{
|
||||
nDisease = DISEASE_MUMMY_ROT;
|
||||
}
|
||||
default:
|
||||
if(nHD <= 3)
|
||||
{
|
||||
nDisease = DISEASE_MINDFIRE;
|
||||
}
|
||||
else if (nHD > 3 && nHD <= 10)
|
||||
{
|
||||
nDisease = DISEASE_RED_ACHE;
|
||||
}
|
||||
else if(nHD > 10)
|
||||
{
|
||||
nDisease = DISEASE_SHAKES;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_CONE_DISEASE));
|
||||
//Get the delay time
|
||||
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
78
src/hakpak/sks01_prc8_top/nss/nw_s1_coneelec.nss
Normal file
78
src/hakpak/sks01_prc8_top/nss/nw_s1_coneelec.nss
Normal file
@ -0,0 +1,78 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cone: Lightning
|
||||
//:: NW_S1_ConeElec
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A cone of damage eminates from the monster. Does
|
||||
a set amount of damage based upon the creatures HD
|
||||
and can be halved with a Reflex Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
int nLoop = nHD / 3;
|
||||
|
||||
float fDelay;
|
||||
|
||||
if(nLoop == 0)
|
||||
{
|
||||
nLoop = 1;
|
||||
}
|
||||
|
||||
//Calculate the damage
|
||||
for (nLoop; nLoop > 0; nLoop--)
|
||||
{
|
||||
nDamage = nDamage + d6(2);
|
||||
}
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, oNPC, BODY_NODE_HAND);
|
||||
effect eCone;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_LIGHTNING));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY);
|
||||
//Set damage effect
|
||||
eCone = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget,0.5));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
75
src/hakpak/sks01_prc8_top/nss/nw_s1_conesonic.nss
Normal file
75
src/hakpak/sks01_prc8_top/nss/nw_s1_conesonic.nss
Normal file
@ -0,0 +1,75 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Cone: Sonic
|
||||
//:: NW_S1_ConeSonic
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A cone of damage eminated from the monster. Does
|
||||
a set amount of damage based upon the creatures HD
|
||||
and can be halved with a Reflex Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
int nLoop = nHD / 3;
|
||||
|
||||
float fDelay;
|
||||
|
||||
if(nLoop == 0)
|
||||
{
|
||||
nLoop = 1;
|
||||
}
|
||||
|
||||
//Calculate the damage
|
||||
for (nLoop; nLoop > 0; nLoop--)
|
||||
{
|
||||
nDamage = nDamage + d6(2);
|
||||
}
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eCone;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SONIC);
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_CONE_SONIC));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,DAMAGE_TYPE_SONIC);
|
||||
//Set damage effect
|
||||
eCone = EffectDamage(nDamage, DAMAGE_TYPE_SONIC);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
119
src/hakpak/sks01_prc8_top/nss/nw_s1_dragfear.nss
Normal file
119
src/hakpak/sks01_prc8_top/nss/nw_s1_dragfear.nss
Normal file
@ -0,0 +1,119 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Dragon Breath Fear
|
||||
//:: NW_S1_DragFear
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Calculates the proper DC Save for the
|
||||
breath weapon based on the HD of the dragon.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
//Declare major variables
|
||||
int nAge = GetHitDice(OBJECT_SELF);
|
||||
int nCount;
|
||||
int nDC;
|
||||
float fDelay;
|
||||
object oTarget;
|
||||
effect eBreath = EffectFrightened();
|
||||
effect eFear = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBreath, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eFear);
|
||||
|
||||
//Determine the duration and save DC
|
||||
if (nAge <= 6) //Wyrmling
|
||||
{
|
||||
nDC = 13;
|
||||
nCount = 1;
|
||||
}
|
||||
else if (nAge >= 7 && nAge <= 9) //Very Young
|
||||
{
|
||||
nDC = 15;
|
||||
nCount = 2;
|
||||
}
|
||||
else if (nAge >= 10 && nAge <= 12) //Young
|
||||
{
|
||||
nDC = 17;
|
||||
nCount = 3;
|
||||
}
|
||||
else if (nAge >= 13 && nAge <= 15) //Juvenile
|
||||
{
|
||||
nDC = 19;
|
||||
nCount = 4;
|
||||
}
|
||||
else if (nAge >= 16 && nAge <= 18) //Young Adult
|
||||
{
|
||||
nDC = 21;
|
||||
nCount = 5;
|
||||
}
|
||||
else if (nAge >= 19 && nAge <= 21) //Adult
|
||||
{
|
||||
nDC = 24;
|
||||
nCount = 6;
|
||||
}
|
||||
else if (nAge >= 22 && nAge <= 24) //Mature Adult
|
||||
{
|
||||
nDC = 27;
|
||||
nCount = 7;
|
||||
}
|
||||
else if (nAge >= 25 && nAge <= 27) //Old
|
||||
{
|
||||
nDC = 28;
|
||||
nCount = 8;
|
||||
}
|
||||
else if (nAge >= 28 && nAge <= 30) //Very Old
|
||||
{
|
||||
nDC = 30;
|
||||
nCount = 9;
|
||||
}
|
||||
else if (nAge >= 31 && nAge <= 33) //Ancient
|
||||
{
|
||||
nDC = 32;
|
||||
nCount = 10;
|
||||
}
|
||||
else if (nAge >= 34 && nAge <= 37) //Wyrm
|
||||
{
|
||||
nDC = 34;
|
||||
nCount = 11;
|
||||
}
|
||||
else if (nAge > 37) //Great Wyrm
|
||||
{
|
||||
nDC = 37;
|
||||
nCount = 12;
|
||||
}
|
||||
PlayDragonBattleCry();
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, PRCGetSpellTargetLocation(), TRUE);
|
||||
//Get first target in spell area
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != OBJECT_SELF && !GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
nCount = GetScaledDuration(nCount, oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_FEAR));
|
||||
//Determine the effect delay time
|
||||
fDelay = GetDistanceBetween(oTarget, OBJECT_SELF)/20;
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, PRCGetSpellTargetLocation(), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
45
src/hakpak/sks01_prc8_top/nss/nw_s1_dragfeara.nss
Normal file
45
src/hakpak/sks01_prc8_top/nss/nw_s1_dragfeara.nss
Normal file
@ -0,0 +1,45 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aura of Fear On Enter
|
||||
//:: NW_S1_DragFearA.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Upon entering the aura of the creature the player
|
||||
must make a will save or be struck with fear because
|
||||
of the creatures presence.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget = GetEnteringObject();
|
||||
//if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;}
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eLink = EffectLinkEffects(eFear, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
int nHD = GetHitDice(GetAreaOfEffectCreator());
|
||||
int nDC = 10 + GetHitDice(GetAreaOfEffectCreator())/3;
|
||||
int nDuration = GetScaledDuration(nHD, oTarget);
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FEAR));
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
41
src/hakpak/sks01_prc8_top/nss/nw_s1_feroc3.nss
Normal file
41
src/hakpak/sks01_prc8_top/nss/nw_s1_feroc3.nss
Normal file
@ -0,0 +1,41 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Ferocity 3
|
||||
//:: NW_S1_Feroc3
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
The Dex and Str of the target increases
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Aug 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION); //:: Determine the duration by getting the con modifier
|
||||
int nIncrease = 9;
|
||||
int nDuration = 1 + nCONMod;
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
|
||||
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, nIncrease);
|
||||
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, nIncrease);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||
effect eLink = EffectLinkEffects(eStr, eDex);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
eLink = ExtraordinaryEffect(eLink); //:: Make effect extraordinary
|
||||
|
||||
//effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
|
||||
SignalEvent(oNPC, EventSpellCastAt(oNPC, SPELLABILITY_FEROCITY_3, FALSE));
|
||||
if (nCONMod > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, RoundsToSeconds(nDuration));
|
||||
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF) ;
|
||||
}
|
||||
}
|
69
src/hakpak/sks01_prc8_top/nss/nw_s1_gazechaos.nss
Normal file
69
src/hakpak/sks01_prc8_top/nss/nw_s1_gazechaos.nss
Normal file
@ -0,0 +1,69 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Destroy Law
|
||||
//:: NW_S1_GazeChaos
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save and are of Lawful alignment.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DESTROY_LAW));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
//DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
76
src/hakpak/sks01_prc8_top/nss/nw_s1_gazecharm.nss
Normal file
76
src/hakpak/sks01_prc8_top/nss/nw_s1_gazecharm.nss
Normal file
@ -0,0 +1,76 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Charm
|
||||
//:: NW_S1_GazeCharm
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectCharmed();
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eDur, eVisDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration, oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_CHARM));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
eGaze = GetScaledEffect(eGaze, oTarget);
|
||||
eLink = EffectLinkEffects(eLink, eGaze);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
77
src/hakpak/sks01_prc8_top/nss/nw_s1_gazeconfu.nss
Normal file
77
src/hakpak/sks01_prc8_top/nss/nw_s1_gazeconfu.nss
Normal file
@ -0,0 +1,77 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Confusion
|
||||
//:: NW_S1_GazeConfu
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectConfused();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eLink = EffectLinkEffects(eDur, eVisDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_CONFUSION));
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
eGaze = GetScaledEffect(eGaze, oTarget);
|
||||
eLink = EffectLinkEffects(eLink, eGaze);
|
||||
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedaze.nss
Normal file
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedaze.nss
Normal file
@ -0,0 +1,74 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Daze
|
||||
//:: NW_S1_GazeDaze
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDazed();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eLink = EffectLinkEffects(eGaze, eVisDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DAZE));
|
||||
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
66
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedeath.nss
Normal file
66
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedeath.nss
Normal file
@ -0,0 +1,66 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Death
|
||||
//:: NW_S1_GazeDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) || oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
78
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedomn.nss
Normal file
78
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedomn.nss
Normal file
@ -0,0 +1,78 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Dominate
|
||||
//:: NW_S1_GazeDomn
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDominated();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
|
||||
effect eLink = EffectLinkEffects(eDur, eVisDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DOMINATE));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
eGaze = GetScaledEffect(eGaze, oTarget);
|
||||
eLink = EffectLinkEffects(eLink, eGaze);
|
||||
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedoom.nss
Normal file
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazedoom.nss
Normal file
@ -0,0 +1,74 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze of Doom
|
||||
//:: NW_S1_GazeDoom.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
If the target fails a save they recieve a -2
|
||||
penalty to all saves, attack rolls, damage and
|
||||
skill checks for the duration of the spell.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Oct 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DOOM);
|
||||
effect eSaves = EffectSavingThrowDecrease(SAVING_THROW_ALL, 2);
|
||||
effect eAttack = EffectAttackDecrease(2);
|
||||
effect eDamage = EffectDamageDecrease(2);
|
||||
effect eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, 2);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eAttack, eDamage);
|
||||
eLink = EffectLinkEffects(eLink, eSaves);
|
||||
eLink = EffectLinkEffects(eLink, eSkill);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, PRCGetSpellTargetLocation());
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DOOM));
|
||||
//Spell Resistance and Saving throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink , oTarget, RoundsToSeconds(nDuration));
|
||||
}
|
||||
}
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, PRCGetSpellTargetLocation());
|
||||
}
|
||||
}
|
70
src/hakpak/sks01_prc8_top/nss/nw_s1_gazeevil.nss
Normal file
70
src/hakpak/sks01_prc8_top/nss/nw_s1_gazeevil.nss
Normal file
@ -0,0 +1,70 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Deatroy Good
|
||||
//:: NW_S1_GazeEvil
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
//DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazefear.nss
Normal file
74
src/hakpak/sks01_prc8_top/nss/nw_s1_gazefear.nss
Normal file
@ -0,0 +1,74 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Fear
|
||||
//:: NW_S1_GazeFear
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectFrightened();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eLink = EffectLinkEffects(eGaze, eVisDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_FEAR));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
70
src/hakpak/sks01_prc8_top/nss/nw_s1_gazegood.nss
Normal file
70
src/hakpak/sks01_prc8_top/nss/nw_s1_gazegood.nss
Normal file
@ -0,0 +1,70 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Deatroy Evil
|
||||
//:: NW_S1_GazeGood
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
//DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
71
src/hakpak/sks01_prc8_top/nss/nw_s1_gazelaw.nss
Normal file
71
src/hakpak/sks01_prc8_top/nss/nw_s1_gazelaw.nss
Normal file
@ -0,0 +1,71 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Deatroy Chaos
|
||||
//:: NW_S1_GazeLaw
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DESTROY_LAW));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
//DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
73
src/hakpak/sks01_prc8_top/nss/nw_s1_gazestun.nss
Normal file
73
src/hakpak/sks01_prc8_top/nss/nw_s1_gazestun.nss
Normal file
@ -0,0 +1,73 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Gaze: Stun
|
||||
//:: NW_S1_GazeStun
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Cone shape that affects all within the AoE if they
|
||||
fail a Will Save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 9, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "x0_i0_match"
|
||||
|
||||
void main()
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Make sure we are not blind
|
||||
//--------------------------------------------------------------------------
|
||||
if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDuration = 1 + (nHD / 3);
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eGaze = EffectStunned();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_STUN);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eLink = EffectLinkEffects(eDur, eVisDur);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_STUNNED));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
eGaze = GetScaledEffect(eGaze, oTarget);
|
||||
eLink = EffectLinkEffects(eLink, eGaze);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
43
src/hakpak/sks01_prc8_top/nss/nw_s1_golemgas.nss
Normal file
43
src/hakpak/sks01_prc8_top/nss/nw_s1_golemgas.nss
Normal file
@ -0,0 +1,43 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Golem Breath
|
||||
//:: NW_S1_GolemGas
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Iron Golem spits out a cone of poison.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
|
||||
//#include "wm_include"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
//Declare major variables
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
object oTarget;
|
||||
effect eCone = EffectPoison(POISON_IRON_GOLEM);
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GOLEM_BREATH_GAS));
|
||||
//Determine effect delay
|
||||
float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
|
||||
//Apply poison effect
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
66
src/hakpak/sks01_prc8_top/nss/nw_s1_hndbreath.nss
Normal file
66
src/hakpak/sks01_prc8_top/nss/nw_s1_hndbreath.nss
Normal file
@ -0,0 +1,66 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Hell Hound Fire Breath
|
||||
//:: NW_S1_HndBreath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A cone of fire eminates from the hound.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nDamage = d6(2);
|
||||
|
||||
float fDelay;
|
||||
|
||||
location lTargetLocation = PRCGetSpellTargetLocation();
|
||||
|
||||
effect eCone;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HELL_HOUND_FIREBREATH));
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
|
||||
//Set damage effect
|
||||
eCone = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
67
src/hakpak/sks01_prc8_top/nss/nw_s1_howlconf.nss
Normal file
67
src/hakpak/sks01_prc8_top/nss/nw_s1_howlconf.nss
Normal file
@ -0,0 +1,67 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Confuse
|
||||
//:: NW_S1_HowlConf
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 20ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDuration = 1 + (nHD/4);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S);
|
||||
effect eHowl = EffectConfused();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND);
|
||||
effect eLink = EffectLinkEffects(eHowl, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_CONFUSE));
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
//Make a saving throw check
|
||||
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howldaze.nss
Normal file
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howldaze.nss
Normal file
@ -0,0 +1,65 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Daze
|
||||
//:: NW_S1_HowlDaze
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDuration = 1 + (nHD/4);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S);
|
||||
effect eHowl = EffectDazed();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND);
|
||||
effect eLink = EffectLinkEffects(eHowl, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_DAZE));
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
//Make a saving throw check
|
||||
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
59
src/hakpak/sks01_prc8_top/nss/nw_s1_howldeath.nss
Normal file
59
src/hakpak/sks01_prc8_top/nss/nw_s1_howldeath.nss
Normal file
@ -0,0 +1,59 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Death
|
||||
//:: NW_S1_HowlDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_ODD);
|
||||
effect eHowl = EffectDeath();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_DEATH));
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
68
src/hakpak/sks01_prc8_top/nss/nw_s1_howlfear.nss
Normal file
68
src/hakpak/sks01_prc8_top/nss/nw_s1_howlfear.nss
Normal file
@ -0,0 +1,68 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Fear
|
||||
//:: NW_S1_HowlFear
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDuration = 1 + (nHD/4);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eHowl = EffectFrightened();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND);
|
||||
effect eLink = EffectLinkEffects(eHowl, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_FEAR));
|
||||
|
||||
//Make a saving throw check
|
||||
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howlparal.nss
Normal file
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howlparal.nss
Normal file
@ -0,0 +1,65 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Paralysis
|
||||
//:: NW_S1_HowlParal
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDuration = 1 + (nHD/4);
|
||||
if(nDuration == 0) { nDuration = 1; }
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eHowl = EffectParalyze();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_ODD);
|
||||
effect eLink = EffectLinkEffects(eHowl, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_PARALYSIS));
|
||||
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howlsonic.nss
Normal file
65
src/hakpak/sks01_prc8_top/nss/nw_s1_howlsonic.nss
Normal file
@ -0,0 +1,65 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Sonic
|
||||
//:: NW_S1_HowlSonic
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDamage;
|
||||
int nSonic = nHD/4;
|
||||
if(nSonic == 0) { nSonic = 1; }
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SONIC);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY);
|
||||
|
||||
float fDelay;
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
fDelay = GetDistanceToObject(oTarget)/20;
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_SONIC));
|
||||
nDamage = d6(nSonic);
|
||||
//Make a saving throw check
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SONIC, oNPC, fDelay))
|
||||
{
|
||||
nDamage = nDamage / 2;
|
||||
}
|
||||
//Set damage effect
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_SONIC);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
66
src/hakpak/sks01_prc8_top/nss/nw_s1_howlstun.nss
Normal file
66
src/hakpak/sks01_prc8_top/nss/nw_s1_howlstun.nss
Normal file
@ -0,0 +1,66 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Howl: Stun
|
||||
//:: NW_S1_HowlStun
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A howl emanates from the creature which affects
|
||||
all within 10ft unless they make a save.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/4);
|
||||
int nDuration = 1 + (nHD/4);
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_STUN);
|
||||
effect eHowl = EffectStunned();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND);
|
||||
effect eLink = EffectLinkEffects(eHowl, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
fDelay = GetDistanceToObject(oTarget)/10;
|
||||
nDuration = GetScaledDuration(nDuration , oTarget);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_STUN));
|
||||
|
||||
//Make a saving throw check
|
||||
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
61
src/hakpak/sks01_prc8_top/nss/nw_s1_krenscare.nss
Normal file
61
src/hakpak/sks01_prc8_top/nss/nw_s1_krenscare.nss
Normal file
@ -0,0 +1,61 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Krenshar Fear Stare
|
||||
//:: NW_S1_KrenScare
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Causes those in the gaze to be struck with fear
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 8, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
//Link the fear and mind effects
|
||||
effect eLink = EffectLinkEffects(eFear, eMind);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
|
||||
//Get first target in the spell cone
|
||||
oTarget = GetFirstObjectInShape(SHAPE_CONE, 10.0, PRCGetSpellTargetLocation(), TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
//Make faction check
|
||||
if(GetIsEnemy(oTarget))
|
||||
{
|
||||
fDelay = GetDistanceToObject(oTarget)/20;
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_KRENSHAR_SCARE));
|
||||
//Make a will save
|
||||
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
//Apply the linked effects and the VFX impact
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in the spell cone
|
||||
oTarget = GetNextObjectInShape(SHAPE_CONE, 10.0, PRCGetSpellTargetLocation(), TRUE);
|
||||
}
|
||||
}
|
63
src/hakpak/sks01_prc8_top/nss/nw_s1_mephsalt.nss
Normal file
63
src/hakpak/sks01_prc8_top/nss/nw_s1_mephsalt.nss
Normal file
@ -0,0 +1,63 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Salt Mephit Breath
|
||||
//:: NW_S1_MephSalt
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Salt Mephit shoots out a bolt of corrosive material
|
||||
that causes 1d4 damage and reduces AC and Attack by 2
|
||||
|
||||
This should be a cone - Jaysyn
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nDamage = d4();
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||||
effect eBolt, eAttack, eAC;
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ACID);
|
||||
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nDamage == 0) {nTouch = 0;}
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MEPHIT_SALT_BREATH));
|
||||
|
||||
//Set damage, AC mod and attack mod effects
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
|
||||
eAC = EffectACDecrease(2);
|
||||
eAttack = EffectAttackDecrease(2);
|
||||
effect eLink = EffectLinkEffects(eAttack, eAC);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
67
src/hakpak/sks01_prc8_top/nss/nw_s1_mephsteam.nss
Normal file
67
src/hakpak/sks01_prc8_top/nss/nw_s1_mephsteam.nss
Normal file
@ -0,0 +1,67 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Steam Mephit Breath
|
||||
//:: NW_S1_MephSteam
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Steam Mephit shoots out a bolt of steam
|
||||
that causes 1d4 damage and reduces AC by 4
|
||||
and Attack by 2
|
||||
|
||||
This should be a cone - Jaysyn
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 11, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nDamage = d4();
|
||||
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||||
effect eBolt, eAttack, eAC;
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||
|
||||
//Make a ranged touch attack
|
||||
int nTouch = TouchAttackRanged(oTarget);
|
||||
if(nDamage == 0) {nTouch = 0;}
|
||||
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDamage *= 2;
|
||||
}
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MEPHIT_STEAM_BREATH));
|
||||
|
||||
//Set damage, AC mod and attack mod effects
|
||||
eBolt = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
eAC = EffectACDecrease(4);
|
||||
eAttack = EffectAttackDecrease(2);
|
||||
effect eLink = EffectLinkEffects(eAC, eAttack);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
53
src/hakpak/sks01_prc8_top/nss/nw_s1_mumundead.nss
Normal file
53
src/hakpak/sks01_prc8_top/nss/nw_s1_mumundead.nss
Normal file
@ -0,0 +1,53 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bolster Undead
|
||||
//:: NW_S1_MumUndead
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
This spell increases the Turn Resistance of
|
||||
all undead around the caster by an amount
|
||||
scaled with HD.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 22, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nScaling = nHD / 4;
|
||||
|
||||
if(nScaling == 0) {nScaling = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eTurn = EffectTurnResistanceIncrease(nScaling);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetLocation(oNPC));
|
||||
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(GetIsFriend(oTarget))
|
||||
{
|
||||
fDelay = GetRandomDelay();
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MUMMY_BOLSTER_UNDEAD, FALSE));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTurn, oTarget, RoundsToSeconds(10)));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC));
|
||||
}
|
||||
}
|
73
src/hakpak/sks01_prc8_top/nss/nw_s1_pulschrdr.nss
Normal file
73
src/hakpak/sks01_prc8_top/nss/nw_s1_pulschrdr.nss
Normal file
@ -0,0 +1,73 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Charisma Drain
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_CHARISMA));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Set the Ability mod and change to supernatural effect
|
||||
eHowl = EffectAbilityDecrease(ABILITY_CHARISMA, nDamage);
|
||||
eHowl = SupernaturalEffect(eHowl);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get first target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulscold.nss
Normal file
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulscold.nss
Normal file
@ -0,0 +1,68 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Cold
|
||||
//:: NW_S1_PulsCold
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage = d6(nHD);
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_COLD);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_COLD));
|
||||
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_COLD);
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
71
src/hakpak/sks01_prc8_top/nss/nw_s1_pulscondr.nss
Normal file
71
src/hakpak/sks01_prc8_top/nss/nw_s1_pulscondr.nss
Normal file
@ -0,0 +1,71 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Constitution Drain
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_CONSTITUTION));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Set the Ability mod and change to supernatural effect
|
||||
eHowl = EffectAbilityDecrease(ABILITY_CONSTITUTION, nDamage);
|
||||
eHowl = SupernaturalEffect(eHowl);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get first target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdeath.nss
Normal file
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdeath.nss
Normal file
@ -0,0 +1,68 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Death
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
effect eHowl = EffectDeath();
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
if(oTarget != OBJECT_SELF)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_DEATH));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
//DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
70
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdexdr.nss
Normal file
70
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdexdr.nss
Normal file
@ -0,0 +1,70 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Dexterity Drain
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_DEXTERITY));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Set the Ability mod and change to supernatural effect
|
||||
eHowl = EffectAbilityDecrease(ABILITY_DEXTERITY, nDamage);
|
||||
eHowl = SupernaturalEffect(eHowl);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get first target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
85
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdis.nss
Normal file
85
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsdis.nss
Normal file
@ -0,0 +1,85 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Disease
|
||||
//:: NW_S1_PulsDis
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of disease spreads out from the creature
|
||||
and infects all those within 10ft
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Aug 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nRacial = MyPRCGetRacialType(oNPC);
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nDamage = d6(nHD);
|
||||
int nDisease;
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eDisease;
|
||||
effect ePulse = EffectVisualEffect(266);
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, ePulse, GetLocation(oNPC));
|
||||
|
||||
//Determine the disease type based on the Racial Type
|
||||
switch (nRacial)
|
||||
{
|
||||
case RACIAL_TYPE_VERMIN:
|
||||
nDisease = DISEASE_VERMIN_MADNESS;
|
||||
break;
|
||||
case RACIAL_TYPE_UNDEAD:
|
||||
nDisease = DISEASE_FILTH_FEVER;
|
||||
break;
|
||||
case RACIAL_TYPE_OUTSIDER:
|
||||
nDisease = DISEASE_DEMON_FEVER;
|
||||
break;
|
||||
case RACIAL_TYPE_MAGICAL_BEAST:
|
||||
nDisease = DISEASE_SOLDIER_SHAKES;
|
||||
break;
|
||||
case RACIAL_TYPE_ABERRATION:
|
||||
nDisease = DISEASE_BLINDING_SICKNESS;
|
||||
break;
|
||||
default:
|
||||
nDisease = DISEASE_MINDFIRE;
|
||||
break;
|
||||
}
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_DISEASE));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
|
||||
eDisease = EffectDisease(nDisease);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisease, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulselec.nss
Normal file
68
src/hakpak/sks01_prc8_top/nss/nw_s1_pulselec.nss
Normal file
@ -0,0 +1,68 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Lightning
|
||||
//:: NW_S0_CallLghtn.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
All creatures within 10ft of the creature take
|
||||
1d6 per HD up to 10d6
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 22, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
|
||||
effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, oNPC, BODY_NODE_CHEST);
|
||||
effect eHowl = EffectVisualEffect(VFX_IMP_PULSE_COLD);
|
||||
|
||||
DelayCommand(0.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eHowl, GetLocation(oNPC)));
|
||||
|
||||
float fDelay;
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_LIGHTNING));
|
||||
//Roll the damage
|
||||
nDamage = d6(nHD);
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY);
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget, 0.5));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
69
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsfire.nss
Normal file
69
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsfire.nss
Normal file
@ -0,0 +1,69 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Fire
|
||||
//:: NW_S1_PulsFire
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != OBJECT_SELF)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_FIRE));
|
||||
//Roll the damage
|
||||
nDamage = d6(nHD);
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF));
|
||||
}
|
||||
}
|
||||
|
||||
|
89
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsholy.nss
Normal file
89
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsholy.nss
Normal file
@ -0,0 +1,89 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Holy
|
||||
//:: NW_S1_PulsHoly
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants. Undead are damaged, allies are healed.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_HOLY);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Roll the amount to heal or damage
|
||||
nDamage = d4(nHD);
|
||||
//If the target is not undead
|
||||
if (MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
//Make a faction check
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(GetIsFriend(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY, FALSE));
|
||||
//Set heal effect
|
||||
eHowl = EffectHeal(nDamage);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_DIVINE);
|
||||
//Set damage effect
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE) ;
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY));
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
72
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsintdr.nss
Normal file
72
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsintdr.nss
Normal file
@ -0,0 +1,72 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Intelligence Drain
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_INTELLIGENCE));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Set the Ability mod and change to supernatural effect
|
||||
eHowl = EffectAbilityDecrease(ABILITY_INTELLIGENCE, nDamage);
|
||||
eHowl = SupernaturalEffect(eHowl);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get first target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF));
|
||||
}
|
||||
}
|
||||
|
62
src/hakpak/sks01_prc8_top/nss/nw_s1_pulslvldr.nss
Normal file
62
src/hakpak/sks01_prc8_top/nss/nw_s1_pulslvldr.nss
Normal file
@ -0,0 +1,62 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Level Drain
|
||||
//:: NW_S1_PulsLvlDr
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetLocation(oNPC));
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
fDelay = GetSpellEffectDelay(GetLocation(oNPC), oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
eHowl = EffectNegativeLevel(1);
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
87
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsneg.nss
Normal file
87
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsneg.nss
Normal file
@ -0,0 +1,87 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Negative
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants. Undead are healed.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = GetAreaOfEffectCreator();
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
int nDamage;
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Roll the amount to heal or damage
|
||||
nDamage = d4(nHD);
|
||||
//If the target is undead
|
||||
if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
//Make a faction check
|
||||
if(GetIsFriend(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY, FALSE));
|
||||
//Set heal effect
|
||||
eHowl = EffectHeal(nDamage);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE);
|
||||
//Set damage effect
|
||||
eHowl = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY));
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
138
src/hakpak/sks01_prc8_top/nss/nw_s1_pulspois.nss
Normal file
138
src/hakpak/sks01_prc8_top/nss/nw_s1_pulspois.nss
Normal file
@ -0,0 +1,138 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Poison
|
||||
//:: NW_S1_PulsPois
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. All who make a reflex save are not
|
||||
poisoned.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 23, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_racial"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC);
|
||||
int nDC = 10 +nCONMod+ (nHD/2);
|
||||
int nRacial = MyPRCGetRacialType(oNPC);
|
||||
int nPoison;
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect ePoison;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
|
||||
|
||||
//Determine the poison type based on the Racial Type and HD
|
||||
switch (nRacial)
|
||||
{
|
||||
case RACIAL_TYPE_OUTSIDER:
|
||||
if (nHD <= 9)
|
||||
{
|
||||
nPoison = POISON_QUASIT_VENOM;
|
||||
}
|
||||
else if (nHD > 9 && nHD < 13)
|
||||
{
|
||||
nPoison = POISON_BEBILITH_VENOM;
|
||||
}
|
||||
else if (nHD >= 13)
|
||||
{
|
||||
nPoison = POISON_PIT_FIEND_ICHOR;
|
||||
}
|
||||
break;
|
||||
case RACIAL_TYPE_VERMIN:
|
||||
if (nHD < 3)
|
||||
{
|
||||
nPoison = POISON_TINY_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 3 && nHD < 6)
|
||||
{
|
||||
nPoison = POISON_SMALL_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 6 && nHD < 9)
|
||||
{
|
||||
nPoison = POISON_MEDIUM_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 9 && nHD < 12)
|
||||
{
|
||||
nPoison = POISON_LARGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 12 && nHD < 15)
|
||||
{
|
||||
nPoison = POISON_HUGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 15 && nHD < 18)
|
||||
{
|
||||
nPoison = POISON_GARGANTUAN_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD >= 18)
|
||||
{
|
||||
nPoison = POISON_COLOSSAL_SPIDER_VENOM;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (nHD < 3)
|
||||
{
|
||||
nPoison = POISON_NIGHTSHADE;
|
||||
}
|
||||
else if (nHD <= 3 && nHD < 6)
|
||||
{
|
||||
nPoison = POISON_BLADE_BANE;
|
||||
}
|
||||
else if (nHD <= 6 && nHD < 9)
|
||||
{
|
||||
nPoison = POISON_BLOODROOT;
|
||||
}
|
||||
else if (nHD <= 9 && nHD < 12)
|
||||
{
|
||||
nPoison = POISON_LARGE_SPIDER_VENOM;
|
||||
}
|
||||
else if (nHD <= 12 && nHD < 15)
|
||||
{
|
||||
nPoison = POISON_LICH_DUST;
|
||||
}
|
||||
else if (nHD <= 15 && nHD < 18)
|
||||
{
|
||||
nPoison = POISON_DARK_REAVER_POWDER;
|
||||
}
|
||||
else if (nHD >= 18 )
|
||||
{
|
||||
nPoison = POISON_BLACK_LOTUS_EXTRACT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_POISON));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
ePoison = EffectPoison(nPoison);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
||||
|
50
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsspore.nss
Normal file
50
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsspore.nss
Normal file
@ -0,0 +1,50 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Vrock Spores
|
||||
//:: NW_S1_PulsSpore
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of disease spreads out from the creature
|
||||
and infects all those within 10ft
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 8, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
float fDelay;
|
||||
effect eDisease;
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_DISEASE));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
eDisease = EffectDisease(DISEASE_SOLDIER_SHAKES);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisease, oTarget));
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(oNPC));
|
||||
}
|
||||
}
|
71
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsstrdr.nss
Normal file
71
src/hakpak/sks01_prc8_top/nss/nw_s1_pulsstrdr.nss
Normal file
@ -0,0 +1,71 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse: Strength Drain
|
||||
//:: NW_S1_PulsDeath
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A wave of energy emanates from the creature which affects
|
||||
all within 10ft. Damage can be reduced by half for all
|
||||
damaging variants.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: May 14, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC);
|
||||
int nDC = 10 +nCHAMod+ (nHD/2);
|
||||
|
||||
int nDamage = nHD/5;
|
||||
|
||||
if (nDamage == 0) {nDamage = 1;}
|
||||
|
||||
float fDelay;
|
||||
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
effect eHowl;
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oNPC)
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_STRENGTH));
|
||||
//Determine effect delay
|
||||
fDelay = GetDistanceBetween(oNPC, oTarget)/20;
|
||||
//Make a saving throw check
|
||||
if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay))
|
||||
{
|
||||
//Set the Ability mod and change to supernatural effect
|
||||
eHowl = EffectAbilityDecrease(ABILITY_STRENGTH, nDamage);
|
||||
eHowl = SupernaturalEffect(eHowl);
|
||||
//Apply the VFX impact and effects
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next target in spell area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
||||
|
51
src/hakpak/sks01_prc8_top/nss/nw_s1_pulswind.nss
Normal file
51
src/hakpak/sks01_prc8_top/nss/nw_s1_pulswind.nss
Normal file
@ -0,0 +1,51 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Pulse Whirlwind
|
||||
//:: NW_S1_PulsWind
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
All those that fail a save are knocked
|
||||
down by the elemental whirlwind.
|
||||
*/
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 8, 2002
|
||||
//::///////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "prc_inc_spells"
|
||||
//#include "wm_include"
|
||||
void main()
|
||||
{
|
||||
//if (WildMagicOverride()) { return; }
|
||||
|
||||
//:: Declare major variables
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oTarget;
|
||||
|
||||
int nHD = GetHitDice(oNPC);
|
||||
int nSTRMod = GetAbilityModifier(ABILITY_STRENGTH, oNPC);
|
||||
int nDC = 10 +nSTRMod+ (nHD/2);
|
||||
|
||||
effect eDown = EffectKnockdown();
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_WIND);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC);
|
||||
|
||||
//Get first target in spell area
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC)
|
||||
{
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC))
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDown, oTarget, 5.0);
|
||||
}
|
||||
//Get next target in spell area
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC));
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user