From b7139401ed0b48af945a4b2d3967a09aaf0e4c44 Mon Sep 17 00:00:00 2001 From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com> Date: Fri, 14 Jun 2024 00:06:09 -0400 Subject: [PATCH] Added "removed" folder --- _removed/70_spellhook.ncs | Bin 0 -> 4921 bytes _removed/70_spellhook.nss | 257 ++++++ _removed/druid_air.ncs | Bin 0 -> 2533 bytes _removed/druid_air.nss | 162 ++++ _removed/druid_badger.ncs | Bin 0 -> 2525 bytes _removed/druid_badger.nss | 164 ++++ _removed/druid_bear.ncs | Bin 0 -> 2525 bytes _removed/druid_bear.nss | 164 ++++ _removed/druid_blued.ncs | Bin 0 -> 2533 bytes _removed/druid_blued.nss | 161 ++++ _removed/druid_boar.ncs | Bin 0 -> 2525 bytes _removed/druid_boar.nss | 164 ++++ _removed/druid_earth.ncs | Bin 0 -> 2533 bytes _removed/druid_earth.nss | 161 ++++ _removed/druid_fire.ncs | Bin 0 -> 2533 bytes _removed/druid_fire.nss | 161 ++++ _removed/druid_greend.ncs | Bin 0 -> 2533 bytes _removed/druid_greend.nss | 161 ++++ _removed/druid_panther.ncs | Bin 0 -> 2525 bytes _removed/druid_panther.nss | 164 ++++ _removed/druid_redd.ncs | Bin 0 -> 2533 bytes _removed/druid_redd.nss | 161 ++++ _removed/druid_water.ncs | Bin 0 -> 2533 bytes _removed/druid_water.nss | 161 ++++ _removed/druid_wolf.ncs | Bin 0 -> 2525 bytes _removed/druid_wolf.nss | 164 ++++ _removed/nw_s0_animdead.ncs | Bin 0 -> 3526 bytes _removed/nw_s0_animdead.nss | 89 ++ _removed/nw_s0_circdeath.ncs | Bin 0 -> 13719 bytes _removed/nw_s0_circdeath.nss | 128 +++ _removed/nw_s0_circevil.ncs | Bin 0 -> 4447 bytes _removed/nw_s0_circevil.nss | 72 ++ _removed/nw_s0_circgood.ncs | Bin 0 -> 4447 bytes _removed/nw_s0_circgood.nss | 70 ++ _removed/nw_s0_contagion.ncs | Bin 0 -> 10924 bytes _removed/nw_s0_contagion.nss | 92 +++ _removed/nw_s0_daze.ncs | Bin 0 -> 12558 bytes _removed/nw_s0_daze.nss | 77 ++ _removed/nw_s0_dismagic.ncs | Bin 0 -> 9610 bytes _removed/nw_s0_dismagic.nss | 88 ++ _removed/nw_s0_dismissal.ncs | Bin 0 -> 10313 bytes _removed/nw_s0_dismissal.nss | 81 ++ _removed/nw_s0_divpower.ncs | Bin 0 -> 3660 bytes _removed/nw_s0_divpower.nss | 127 +++ _removed/nw_s0_doom.ncs | Bin 0 -> 12410 bytes _removed/nw_s0_doom.nss | 98 +++ _removed/nw_s0_fireshld.ncs | Bin 0 -> 3267 bytes _removed/nw_s0_fireshld.nss | 72 ++ _removed/nw_s0_flmlash.ncs | Bin 0 -> 11191 bytes _removed/nw_s0_flmlash.nss | 72 ++ _removed/nw_s0_gate.ncs | Bin 0 -> 3304 bytes _removed/nw_s0_gate.nss | 76 ++ _removed/nw_s0_grplanar.ncs | Bin 0 -> 6960 bytes _removed/nw_s0_grplanar.nss | 114 +++ _removed/nw_s0_hammgods.ncs | Bin 0 -> 13356 bytes _removed/nw_s0_hammgods.nss | 99 +++ _removed/nw_s0_harm.ncs | Bin 0 -> 11274 bytes _removed/nw_s0_harm.nss | 84 ++ _removed/nw_s0_heal.ncs | Bin 0 -> 6999 bytes _removed/nw_s0_heal.nss | 74 ++ _removed/nw_s0_healcirc.ncs | Bin 0 -> 9487 bytes _removed/nw_s0_healcirc.nss | 115 +++ _removed/nw_s0_holdanim.ncs | Bin 0 -> 12243 bytes _removed/nw_s0_holdanim.nss | 83 ++ _removed/nw_s0_holdmon.ncs | Bin 0 -> 12208 bytes _removed/nw_s0_holdmon.nss | 77 ++ _removed/nw_s0_holdpers.ncs | Bin 0 -> 12609 bytes _removed/nw_s0_holdpers.nss | 86 ++ _removed/nw_s0_icestorm.ncs | Bin 0 -> 11817 bytes _removed/nw_s0_icestorm.nss | 84 ++ _removed/nw_s0_identify.ncs | Bin 0 -> 2850 bytes _removed/nw_s0_identify.nss | 64 ++ _removed/nw_s0_invpurge.ncs | Bin 0 -> 3840 bytes _removed/nw_s0_invpurge.nss | 63 ++ _removed/nw_s0_invsph.ncs | Bin 0 -> 3915 bytes _removed/nw_s0_invsph.nss | 72 ++ _removed/nw_s0_knock.ncs | Bin 0 -> 3447 bytes _removed/nw_s0_knock.nss | 64 ++ _removed/nw_s0_lore.ncs | Bin 0 -> 2827 bytes _removed/nw_s0_lore.nss | 63 ++ _removed/nw_s0_magearm.ncs | Bin 0 -> 3262 bytes _removed/nw_s0_magearm.nss | 77 ++ _removed/nw_s0_metswarm.ncs | Bin 0 -> 11590 bytes _removed/nw_s0_metswarm.nss | 83 ++ _removed/nw_s0_mscharm.ncs | Bin 0 -> 14554 bytes _removed/nw_s0_mscharm.nss | 109 +++ _removed/nw_s0_phankill.ncs | Bin 0 -> 12848 bytes _removed/nw_s0_phankill.nss | 93 +++ _removed/nw_s0_raisdead.ncs | Bin 0 -> 2901 bytes _removed/nw_s0_raisdead.nss | 35 + _removed/nw_s0_rayfrost.ncs | Bin 0 -> 11063 bytes _removed/nw_s0_rayfrost.nss | 72 ++ _removed/nw_s0_resserec.ncs | Bin 0 -> 2974 bytes _removed/nw_s0_resserec.nss | 40 + _removed/nw_s0_sanctuary.ncs | Bin 0 -> 2859 bytes _removed/nw_s0_sanctuary.nss | 58 ++ _removed/nw_s0_silence.ncs | Bin 0 -> 11632 bytes _removed/nw_s0_silence.nss | 93 +++ _removed/nw_s0_summon.ncs | Bin 0 -> 6751 bytes _removed/nw_s0_summon.nss | 354 ++++++++ _removed/nw_s0_timestop.ncs | Bin 0 -> 3527 bytes _removed/nw_s0_timestop.nss | 83 ++ _removed/nw_s0_wallfirea.ncs | Bin 0 -> 9112 bytes _removed/nw_s0_wallfirea.nss | 52 ++ _removed/nw_s0_wallfirec.ncs | Bin 0 -> 9248 bytes _removed/nw_s0_wallfirec.nss | 71 ++ _removed/nw_s0_weird.ncs | Bin 0 -> 13039 bytes _removed/nw_s0_weird.nss | 115 +++ _removed/nw_s1_dragacid.ncs | Bin 0 -> 4481 bytes _removed/nw_s1_dragacid.nss | 113 +++ _removed/nw_s1_dragcold.ncs | Bin 0 -> 4489 bytes _removed/nw_s1_dragcold.nss | 111 +++ _removed/nw_s1_dragfire.ncs | Bin 0 -> 4417 bytes _removed/nw_s1_dragfire.nss | 111 +++ _removed/nw_s1_draggas.ncs | Bin 0 -> 4481 bytes _removed/nw_s1_draggas.nss | 112 +++ _removed/nw_s1_draglight.ncs | Bin 0 -> 4481 bytes _removed/nw_s1_draglight.nss | 113 +++ _removed/nw_s2_animalcom.ncs | Bin 0 -> 2511 bytes _removed/nw_s2_animalcom.nss | 24 + _removed/nw_s2_bardsong.ncs | Bin 0 -> 8088 bytes _removed/nw_s2_bardsong.nss | 445 ++++++++++ _removed/nw_s2_familiar.ncs | Bin 0 -> 2667 bytes _removed/nw_s2_familiar.nss | 33 + _removed/nw_s2_layonhand.ncs | Bin 0 -> 1184 bytes _removed/nw_s2_layonhand.nss | 75 ++ _removed/nw_s2_turndead.ncs | Bin 0 -> 4101 bytes _removed/nw_s2_turndead.nss | 268 ++++++ _removed/nw_s2_wildshape.ncs | Bin 0 -> 4852 bytes _removed/nw_s2_wildshape.nss | 215 +++++ _removed/x0_s0_acidsplash.ncs | Bin 0 -> 10989 bytes _removed/x0_s0_acidsplash.nss | 60 ++ _removed/x0_s0_banishment.ncs | Bin 0 -> 10664 bytes _removed/x0_s0_banishment.nss | 119 +++ _removed/x0_s0_bigby1.ncs | Bin 0 -> 10489 bytes _removed/x0_s0_bigby1.nss | 68 ++ _removed/x0_s0_bigby2.ncs | Bin 0 -> 11823 bytes _removed/x0_s0_bigby2.nss | 97 +++ _removed/x0_s0_bigby3.ncs | Bin 0 -> 12464 bytes _removed/x0_s0_bigby3.nss | 136 ++++ _removed/x0_s0_bigby4.ncs | Bin 0 -> 13901 bytes _removed/x0_s0_bigby4.nss | 119 +++ _removed/x0_s0_bigby5.ncs | Bin 0 -> 13652 bytes _removed/x0_s0_bigby5.nss | 146 ++++ _removed/x0_s0_clight.ncs | Bin 0 -> 4444 bytes _removed/x0_s0_clight.nss | 80 ++ _removed/x0_s0_dirge.ncs | Bin 0 -> 3979 bytes _removed/x0_s0_dirge.nss | 77 ++ _removed/x0_s0_earthquake.ncs | Bin 0 -> 5505 bytes _removed/x0_s0_earthquake.nss | 93 +++ _removed/x0_s0_elecjolt.ncs | Bin 0 -> 10989 bytes _removed/x0_s0_elecjolt.nss | 61 ++ _removed/x0_s0_ether.ncs | Bin 0 -> 2814 bytes _removed/x0_s0_ether.nss | 57 ++ _removed/x0_s0_fleshsto.ncs | Bin 0 -> 15420 bytes _removed/x0_s0_fleshsto.nss | 45 ++ _removed/x0_s0_inflict.ncs | Bin 0 -> 9856 bytes _removed/x0_s0_inflict.nss | 63 ++ _removed/x0_s0_missstorm1.ncs | Bin 0 -> 13159 bytes _removed/x0_s0_missstorm1.nss | 211 +++++ _removed/x0_s0_missstorm2.ncs | Bin 0 -> 13159 bytes _removed/x0_s0_missstorm2.nss | 211 +++++ _removed/x0_s0_quillfire.ncs | Bin 0 -> 5120 bytes _removed/x0_s0_quillfire.nss | 83 ++ _removed/x0_s0_spikegroen.ncs | Bin 0 -> 12396 bytes _removed/x0_s0_spikegroen.nss | 56 ++ _removed/x0_s0_spikegrohb.ncs | Bin 0 -> 14885 bytes _removed/x0_s0_spikegrohb.nss | 78 ++ _removed/x0_s0_woundwhis.ncs | Bin 0 -> 3071 bytes _removed/x0_s0_woundwhis.nss | 74 ++ _removed/x0_s1_petrbreath.ncs | Bin 0 -> 13168 bytes _removed/x0_s1_petrbreath.nss | 36 + _removed/x0_s1_petrgaze.ncs | Bin 0 -> 13451 bytes _removed/x0_s1_petrgaze.nss | 52 ++ _removed/x0_s1_petrtouch.ncs | Bin 0 -> 12934 bytes _removed/x0_s1_petrtouch.nss | 29 + _removed/x0_s2_blkdead.ncs | Bin 0 -> 319 bytes _removed/x0_s2_blkdead.nss | 33 + _removed/x1_s2_deatharrow.ncs | Bin 0 -> 3784 bytes _removed/x1_s2_deatharrow.nss | 70 ++ _removed/x2_inc_craft.nss | 1439 +++++++++++++++++++++++++++++++++ _removed/x2_s0_acidshth.ncs | Bin 0 -> 3044 bytes _removed/x2_s0_acidshth.nss | 69 ++ _removed/x2_s0_batttide.ncs | Bin 0 -> 4127 bytes _removed/x2_s0_batttide.nss | 84 ++ _removed/x2_s0_blckstff.ncs | Bin 0 -> 5383 bytes _removed/x2_s0_blckstff.nss | 96 +++ _removed/x2_s0_bldethst.ncs | Bin 0 -> 5102 bytes _removed/x2_s0_bldethst.nss | 91 +++ _removed/x2_s0_crumble.ncs | Bin 0 -> 6005 bytes _removed/x2_s0_crumble.nss | 118 +++ _removed/x2_s0_icedagg.ncs | Bin 0 -> 11041 bytes _removed/x2_s0_icedagg.nss | 79 ++ _removed/x2_s0_vinemcama.ncs | Bin 0 -> 2600 bytes _removed/x2_s0_vinemcama.nss | 44 + _removed/x2_s0_vinemhmpa.ncs | Bin 0 -> 2750 bytes _removed/x2_s0_vinemhmpa.nss | 47 ++ _removed/x2_s0_vinemhmpc.ncs | Bin 0 -> 3174 bytes _removed/x2_s0_vinemhmpc.nss | 63 ++ _removed/x2_s1_beholdatt.ncs | Bin 0 -> 38223 bytes _removed/x2_s1_beholdatt.nss | 30 + _removed/x2_s1_beholdray.ncs | Bin 0 -> 11204 bytes _removed/x2_s1_beholdray.nss | 73 ++ _removed/x2_s1_petrgaze.ncs | Bin 0 -> 14367 bytes _removed/x2_s1_petrgaze.nss | 81 ++ _removed/x2_s2_cursesong.ncs | Bin 0 -> 8800 bytes _removed/x2_s2_cursesong.nss | 431 ++++++++++ _removed/x2_s2_discbreath.ncs | Bin 0 -> 946 bytes _removed/x2_s2_discbreath.nss | 63 ++ _removed/x2_s2_divwrath.ncs | Bin 0 -> 1724 bytes _removed/x2_s2_divwrath.nss | 142 ++++ _removed/x2_s2_dragknght.ncs | Bin 0 -> 3376 bytes _removed/x2_s2_dragknght.nss | 74 ++ _removed/x2_s2_epicward.ncs | Bin 0 -> 3014 bytes _removed/x2_s2_epicward.nss | 60 ++ _removed/x2_s2_epmagearm.ncs | Bin 0 -> 3241 bytes _removed/x2_s2_epmagearm.nss | 67 ++ _removed/x2_s2_gwildshp.ncs | Bin 0 -> 13721 bytes _removed/x2_s2_gwildshp.nss | 621 ++++++++++++++ _removed/x2_s2_hellball.ncs | Bin 0 -> 8046 bytes _removed/x2_s2_hellball.nss | 147 ++++ _removed/x2_s2_mumdust.ncs | Bin 0 -> 3409 bytes _removed/x2_s2_mumdust.nss | 77 ++ _removed/x2_s2_poisonwp.ncs | Bin 0 -> 3439 bytes _removed/x2_s2_poisonwp.nss | 145 ++++ _removed/x2_s2_ruin.ncs | Bin 0 -> 6686 bytes _removed/x2_s2_ruin.nss | 70 ++ _removed/x2_s2_shiftdom.ncs | Bin 0 -> 5705 bytes _removed/x2_s2_shiftdom.nss | 93 +++ _removed/x2_s2_sumgrund.ncs | Bin 0 -> 1373 bytes _removed/x2_s2_sumgrund.nss | 132 +++ _removed/x2_s2_sumundead.ncs | Bin 0 -> 789 bytes _removed/x2_s2_sumundead.nss | 78 ++ _removed/x2_s3_sequencer.ncs | Bin 0 -> 1523 bytes _removed/x2_s3_sequencer.nss | 73 ++ _removed/x3_s2_palmount.ncs | Bin 0 -> 21416 bytes _removed/x3_s2_palmount.nss | 39 + _removed/x3_s2_pdk_fear.ncs | Bin 0 -> 12645 bytes _removed/x3_s2_pdk_fear.nss | 79 ++ _removed/x3_s2_pdk_inspir.ncs | Bin 0 -> 1209 bytes _removed/x3_s2_pdk_inspir.nss | 75 ++ _removed/x3_s2_pdk_rally.ncs | Bin 0 -> 1083 bytes _removed/x3_s2_pdk_rally.nss | 69 ++ _removed/x3_s2_pdk_shield.ncs | Bin 0 -> 483 bytes _removed/x3_s2_pdk_shield.nss | 40 + _removed/x3_s2_pdk_stand.ncs | Bin 0 -> 805 bytes _removed/x3_s2_pdk_stand.nss | 58 ++ _removed/x3_s2_pdk_wrath.ncs | Bin 0 -> 766 bytes _removed/x3_s2_pdk_wrath.nss | 60 ++ 249 files changed, 14605 insertions(+) create mode 100644 _removed/70_spellhook.ncs create mode 100644 _removed/70_spellhook.nss create mode 100644 _removed/druid_air.ncs create mode 100644 _removed/druid_air.nss create mode 100644 _removed/druid_badger.ncs create mode 100644 _removed/druid_badger.nss create mode 100644 _removed/druid_bear.ncs create mode 100644 _removed/druid_bear.nss create mode 100644 _removed/druid_blued.ncs create mode 100644 _removed/druid_blued.nss create mode 100644 _removed/druid_boar.ncs create mode 100644 _removed/druid_boar.nss create mode 100644 _removed/druid_earth.ncs create mode 100644 _removed/druid_earth.nss create mode 100644 _removed/druid_fire.ncs create mode 100644 _removed/druid_fire.nss create mode 100644 _removed/druid_greend.ncs create mode 100644 _removed/druid_greend.nss create mode 100644 _removed/druid_panther.ncs create mode 100644 _removed/druid_panther.nss create mode 100644 _removed/druid_redd.ncs create mode 100644 _removed/druid_redd.nss create mode 100644 _removed/druid_water.ncs create mode 100644 _removed/druid_water.nss create mode 100644 _removed/druid_wolf.ncs create mode 100644 _removed/druid_wolf.nss create mode 100644 _removed/nw_s0_animdead.ncs create mode 100644 _removed/nw_s0_animdead.nss create mode 100644 _removed/nw_s0_circdeath.ncs create mode 100644 _removed/nw_s0_circdeath.nss create mode 100644 _removed/nw_s0_circevil.ncs create mode 100644 _removed/nw_s0_circevil.nss create mode 100644 _removed/nw_s0_circgood.ncs create mode 100644 _removed/nw_s0_circgood.nss create mode 100644 _removed/nw_s0_contagion.ncs create mode 100644 _removed/nw_s0_contagion.nss create mode 100644 _removed/nw_s0_daze.ncs create mode 100644 _removed/nw_s0_daze.nss create mode 100644 _removed/nw_s0_dismagic.ncs create mode 100644 _removed/nw_s0_dismagic.nss create mode 100644 _removed/nw_s0_dismissal.ncs create mode 100644 _removed/nw_s0_dismissal.nss create mode 100644 _removed/nw_s0_divpower.ncs create mode 100644 _removed/nw_s0_divpower.nss create mode 100644 _removed/nw_s0_doom.ncs create mode 100644 _removed/nw_s0_doom.nss create mode 100644 _removed/nw_s0_fireshld.ncs create mode 100644 _removed/nw_s0_fireshld.nss create mode 100644 _removed/nw_s0_flmlash.ncs create mode 100644 _removed/nw_s0_flmlash.nss create mode 100644 _removed/nw_s0_gate.ncs create mode 100644 _removed/nw_s0_gate.nss create mode 100644 _removed/nw_s0_grplanar.ncs create mode 100644 _removed/nw_s0_grplanar.nss create mode 100644 _removed/nw_s0_hammgods.ncs create mode 100644 _removed/nw_s0_hammgods.nss create mode 100644 _removed/nw_s0_harm.ncs create mode 100644 _removed/nw_s0_harm.nss create mode 100644 _removed/nw_s0_heal.ncs create mode 100644 _removed/nw_s0_heal.nss create mode 100644 _removed/nw_s0_healcirc.ncs create mode 100644 _removed/nw_s0_healcirc.nss create mode 100644 _removed/nw_s0_holdanim.ncs create mode 100644 _removed/nw_s0_holdanim.nss create mode 100644 _removed/nw_s0_holdmon.ncs create mode 100644 _removed/nw_s0_holdmon.nss create mode 100644 _removed/nw_s0_holdpers.ncs create mode 100644 _removed/nw_s0_holdpers.nss create mode 100644 _removed/nw_s0_icestorm.ncs create mode 100644 _removed/nw_s0_icestorm.nss create mode 100644 _removed/nw_s0_identify.ncs create mode 100644 _removed/nw_s0_identify.nss create mode 100644 _removed/nw_s0_invpurge.ncs create mode 100644 _removed/nw_s0_invpurge.nss create mode 100644 _removed/nw_s0_invsph.ncs create mode 100644 _removed/nw_s0_invsph.nss create mode 100644 _removed/nw_s0_knock.ncs create mode 100644 _removed/nw_s0_knock.nss create mode 100644 _removed/nw_s0_lore.ncs create mode 100644 _removed/nw_s0_lore.nss create mode 100644 _removed/nw_s0_magearm.ncs create mode 100644 _removed/nw_s0_magearm.nss create mode 100644 _removed/nw_s0_metswarm.ncs create mode 100644 _removed/nw_s0_metswarm.nss create mode 100644 _removed/nw_s0_mscharm.ncs create mode 100644 _removed/nw_s0_mscharm.nss create mode 100644 _removed/nw_s0_phankill.ncs create mode 100644 _removed/nw_s0_phankill.nss create mode 100644 _removed/nw_s0_raisdead.ncs create mode 100644 _removed/nw_s0_raisdead.nss create mode 100644 _removed/nw_s0_rayfrost.ncs create mode 100644 _removed/nw_s0_rayfrost.nss create mode 100644 _removed/nw_s0_resserec.ncs create mode 100644 _removed/nw_s0_resserec.nss create mode 100644 _removed/nw_s0_sanctuary.ncs create mode 100644 _removed/nw_s0_sanctuary.nss create mode 100644 _removed/nw_s0_silence.ncs create mode 100644 _removed/nw_s0_silence.nss create mode 100644 _removed/nw_s0_summon.ncs create mode 100644 _removed/nw_s0_summon.nss create mode 100644 _removed/nw_s0_timestop.ncs create mode 100644 _removed/nw_s0_timestop.nss create mode 100644 _removed/nw_s0_wallfirea.ncs create mode 100644 _removed/nw_s0_wallfirea.nss create mode 100644 _removed/nw_s0_wallfirec.ncs create mode 100644 _removed/nw_s0_wallfirec.nss create mode 100644 _removed/nw_s0_weird.ncs create mode 100644 _removed/nw_s0_weird.nss create mode 100644 _removed/nw_s1_dragacid.ncs create mode 100644 _removed/nw_s1_dragacid.nss create mode 100644 _removed/nw_s1_dragcold.ncs create mode 100644 _removed/nw_s1_dragcold.nss create mode 100644 _removed/nw_s1_dragfire.ncs create mode 100644 _removed/nw_s1_dragfire.nss create mode 100644 _removed/nw_s1_draggas.ncs create mode 100644 _removed/nw_s1_draggas.nss create mode 100644 _removed/nw_s1_draglight.ncs create mode 100644 _removed/nw_s1_draglight.nss create mode 100644 _removed/nw_s2_animalcom.ncs create mode 100644 _removed/nw_s2_animalcom.nss create mode 100644 _removed/nw_s2_bardsong.ncs create mode 100644 _removed/nw_s2_bardsong.nss create mode 100644 _removed/nw_s2_familiar.ncs create mode 100644 _removed/nw_s2_familiar.nss create mode 100644 _removed/nw_s2_layonhand.ncs create mode 100644 _removed/nw_s2_layonhand.nss create mode 100644 _removed/nw_s2_turndead.ncs create mode 100644 _removed/nw_s2_turndead.nss create mode 100644 _removed/nw_s2_wildshape.ncs create mode 100644 _removed/nw_s2_wildshape.nss create mode 100644 _removed/x0_s0_acidsplash.ncs create mode 100644 _removed/x0_s0_acidsplash.nss create mode 100644 _removed/x0_s0_banishment.ncs create mode 100644 _removed/x0_s0_banishment.nss create mode 100644 _removed/x0_s0_bigby1.ncs create mode 100644 _removed/x0_s0_bigby1.nss create mode 100644 _removed/x0_s0_bigby2.ncs create mode 100644 _removed/x0_s0_bigby2.nss create mode 100644 _removed/x0_s0_bigby3.ncs create mode 100644 _removed/x0_s0_bigby3.nss create mode 100644 _removed/x0_s0_bigby4.ncs create mode 100644 _removed/x0_s0_bigby4.nss create mode 100644 _removed/x0_s0_bigby5.ncs create mode 100644 _removed/x0_s0_bigby5.nss create mode 100644 _removed/x0_s0_clight.ncs create mode 100644 _removed/x0_s0_clight.nss create mode 100644 _removed/x0_s0_dirge.ncs create mode 100644 _removed/x0_s0_dirge.nss create mode 100644 _removed/x0_s0_earthquake.ncs create mode 100644 _removed/x0_s0_earthquake.nss create mode 100644 _removed/x0_s0_elecjolt.ncs create mode 100644 _removed/x0_s0_elecjolt.nss create mode 100644 _removed/x0_s0_ether.ncs create mode 100644 _removed/x0_s0_ether.nss create mode 100644 _removed/x0_s0_fleshsto.ncs create mode 100644 _removed/x0_s0_fleshsto.nss create mode 100644 _removed/x0_s0_inflict.ncs create mode 100644 _removed/x0_s0_inflict.nss create mode 100644 _removed/x0_s0_missstorm1.ncs create mode 100644 _removed/x0_s0_missstorm1.nss create mode 100644 _removed/x0_s0_missstorm2.ncs create mode 100644 _removed/x0_s0_missstorm2.nss create mode 100644 _removed/x0_s0_quillfire.ncs create mode 100644 _removed/x0_s0_quillfire.nss create mode 100644 _removed/x0_s0_spikegroen.ncs create mode 100644 _removed/x0_s0_spikegroen.nss create mode 100644 _removed/x0_s0_spikegrohb.ncs create mode 100644 _removed/x0_s0_spikegrohb.nss create mode 100644 _removed/x0_s0_woundwhis.ncs create mode 100644 _removed/x0_s0_woundwhis.nss create mode 100644 _removed/x0_s1_petrbreath.ncs create mode 100644 _removed/x0_s1_petrbreath.nss create mode 100644 _removed/x0_s1_petrgaze.ncs create mode 100644 _removed/x0_s1_petrgaze.nss create mode 100644 _removed/x0_s1_petrtouch.ncs create mode 100644 _removed/x0_s1_petrtouch.nss create mode 100644 _removed/x0_s2_blkdead.ncs create mode 100644 _removed/x0_s2_blkdead.nss create mode 100644 _removed/x1_s2_deatharrow.ncs create mode 100644 _removed/x1_s2_deatharrow.nss create mode 100644 _removed/x2_inc_craft.nss create mode 100644 _removed/x2_s0_acidshth.ncs create mode 100644 _removed/x2_s0_acidshth.nss create mode 100644 _removed/x2_s0_batttide.ncs create mode 100644 _removed/x2_s0_batttide.nss create mode 100644 _removed/x2_s0_blckstff.ncs create mode 100644 _removed/x2_s0_blckstff.nss create mode 100644 _removed/x2_s0_bldethst.ncs create mode 100644 _removed/x2_s0_bldethst.nss create mode 100644 _removed/x2_s0_crumble.ncs create mode 100644 _removed/x2_s0_crumble.nss create mode 100644 _removed/x2_s0_icedagg.ncs create mode 100644 _removed/x2_s0_icedagg.nss create mode 100644 _removed/x2_s0_vinemcama.ncs create mode 100644 _removed/x2_s0_vinemcama.nss create mode 100644 _removed/x2_s0_vinemhmpa.ncs create mode 100644 _removed/x2_s0_vinemhmpa.nss create mode 100644 _removed/x2_s0_vinemhmpc.ncs create mode 100644 _removed/x2_s0_vinemhmpc.nss create mode 100644 _removed/x2_s1_beholdatt.ncs create mode 100644 _removed/x2_s1_beholdatt.nss create mode 100644 _removed/x2_s1_beholdray.ncs create mode 100644 _removed/x2_s1_beholdray.nss create mode 100644 _removed/x2_s1_petrgaze.ncs create mode 100644 _removed/x2_s1_petrgaze.nss create mode 100644 _removed/x2_s2_cursesong.ncs create mode 100644 _removed/x2_s2_cursesong.nss create mode 100644 _removed/x2_s2_discbreath.ncs create mode 100644 _removed/x2_s2_discbreath.nss create mode 100644 _removed/x2_s2_divwrath.ncs create mode 100644 _removed/x2_s2_divwrath.nss create mode 100644 _removed/x2_s2_dragknght.ncs create mode 100644 _removed/x2_s2_dragknght.nss create mode 100644 _removed/x2_s2_epicward.ncs create mode 100644 _removed/x2_s2_epicward.nss create mode 100644 _removed/x2_s2_epmagearm.ncs create mode 100644 _removed/x2_s2_epmagearm.nss create mode 100644 _removed/x2_s2_gwildshp.ncs create mode 100644 _removed/x2_s2_gwildshp.nss create mode 100644 _removed/x2_s2_hellball.ncs create mode 100644 _removed/x2_s2_hellball.nss create mode 100644 _removed/x2_s2_mumdust.ncs create mode 100644 _removed/x2_s2_mumdust.nss create mode 100644 _removed/x2_s2_poisonwp.ncs create mode 100644 _removed/x2_s2_poisonwp.nss create mode 100644 _removed/x2_s2_ruin.ncs create mode 100644 _removed/x2_s2_ruin.nss create mode 100644 _removed/x2_s2_shiftdom.ncs create mode 100644 _removed/x2_s2_shiftdom.nss create mode 100644 _removed/x2_s2_sumgrund.ncs create mode 100644 _removed/x2_s2_sumgrund.nss create mode 100644 _removed/x2_s2_sumundead.ncs create mode 100644 _removed/x2_s2_sumundead.nss create mode 100644 _removed/x2_s3_sequencer.ncs create mode 100644 _removed/x2_s3_sequencer.nss create mode 100644 _removed/x3_s2_palmount.ncs create mode 100644 _removed/x3_s2_palmount.nss create mode 100644 _removed/x3_s2_pdk_fear.ncs create mode 100644 _removed/x3_s2_pdk_fear.nss create mode 100644 _removed/x3_s2_pdk_inspir.ncs create mode 100644 _removed/x3_s2_pdk_inspir.nss create mode 100644 _removed/x3_s2_pdk_rally.ncs create mode 100644 _removed/x3_s2_pdk_rally.nss create mode 100644 _removed/x3_s2_pdk_shield.ncs create mode 100644 _removed/x3_s2_pdk_shield.nss create mode 100644 _removed/x3_s2_pdk_stand.ncs create mode 100644 _removed/x3_s2_pdk_stand.nss create mode 100644 _removed/x3_s2_pdk_wrath.ncs create mode 100644 _removed/x3_s2_pdk_wrath.nss diff --git a/_removed/70_spellhook.ncs b/_removed/70_spellhook.ncs new file mode 100644 index 0000000000000000000000000000000000000000..c93fae06dd08980ec6d15bc4636832b8c7aaad03 GIT binary patch literal 4921 zcma)9&u>&!6u$SpnYMJMEkaQg+79K%qFO36q!QF*I(=bYTKS_lEc{m=HD51q&9$G^UVh{q8yUzIk`rj<6{6?z`ul?|kRG z=bo3(_^IhrCtn^GV*lB0fqyM2(I@Cv>x&{K;zA7IkGv~fxwW;mDPplE?2^ge9`&CW zi;Ml)k~b0flU^MF+dt$4^}fLAwD9r^)Qn>g-(ApIcj4t>U?< zvRYnTti*+L&jpYchwYv&JRwz7#y>kGK;F6v7r#QkH`Q;a+^^DGsBuds37erqoCift zpcGxih9U7d{D^a53d%vOfrIBm2hGgHRrU@TQ!?fP<(5>1UKcUOY2skRjHD8zBTKhn zgNUyu*jb9{u{{vU$u7mf54GH7cfXys(*SicL~Ua4kakN02VJ3q=8)VSTgpv zNHuVAJmP|=d?CU(Bx*CxTx!9d;isAu+HXLVZ7wZKB{KH}nUl!egX{`AJv=iQI;=LP{-ZS5LZG1@WWQeVxPk{f071_h&7@bV?{z?=^{mK!V*>_yv+ z3E4}9742O3RIS~_#a=L!3vy|{6coMEbh;RJ!6BD%)77^TwP~%LApmW?Jh)b_RM!^f zs^)fhHB;Y&WibPX@2ffdF}(^ zz0agforbg2qQwT(ji3(-p+Qm~1Y??iB4;XD67#Nl^n09~Z!&HhIRO z9KxeXIW&P;H4>?850I>ebA`-#78f~*fF`;c>>`=ha|R-bA!_YHE2Ac7pzA{)h)9hE zWpdPux6Q^SQ}SO_Yk+u`#dcQ&J@G$b4%SHJA7KaMRxbz`h+Guw!b@T94*KHRudS z6NG$*q(u7BLCHN|g73)AqxAT@qC(W}#9gtPjjl>}?>GEVrp&qK1T6=m#ODheM^ zl6y}-8U%bqH+@lGIoum$!Z!gcR_BY;qRcxeI8{NMD8Rp(sfB6 zd)_qeWmXBv&zNBAk%_{{6ebSbsr6GwFj@3Qvoo;J-P9n*$~RDSBQV%PVo79XE7ihs zwpw1QAX>+Kxq{*8LN$nds9{~6O7HSgQw14`R?oHW;y)$=rcnhi<7#-EBoKYo_KeCp? zV=09C4m^k9A0}Jv{Oz?43KuBdLW-o zb*89Zp%^Xv2_p{YdsjyqkG3A2kdpfo_`9vYtMOC!Ailz^KH_}Jg&>ul)osY!z3`NJ zm+Hx`w;u-Q4KiG+u_z^2?BbD<)FE|KgP##+w=iE_Z5T%WL5AVCg&{&rhkXiJ>QCuA zhBPeQ3g1%(y*uinO|QO2LEfaDkxpDd&CEw3Gx(?O#1EB$9Ag6_$4H&V1EKLo(Aw3d z&-W36i;5fA)N%LH6Wldfhe90UU`XvE_uB&= GAME_DIFFICULTY_CORE_RULES; + if(bRulesApply) + { + switch(GetLocalInt(GetModule(),"71_RESTRICT_MUSICAL_INSTRUMENTS")) + { + case 1://perform based + if(GetSkillRank(SKILL_PERFORM) > -1) + { + int nDC = GetLocalInt(oItem,"MUSICAL_INSTRUMENT_DC"); + if(!nDC) + { + nDC = 7+3*StringToInt(Get2DAString("des_crft_spells","Level",GetSpellId())); + } + if(!GetIsSkillSuccessful(OBJECT_SELF, SKILL_PERFORM, nDC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), OBJECT_SELF); + return FALSE; + } + } + else + { + FloatingTextStrRefOnCreature(8288,OBJECT_SELF,FALSE);//you cannot use this skill + return FALSE; + } + break; + case 2://song feat based + if(GetHasFeat(FEAT_BARD_SONGS)) + { + DecrementRemainingFeatUses(OBJECT_SELF,FEAT_BARD_SONGS); + } + else + { + FloatingTextStrRefOnCreature(40063,OBJECT_SELF,FALSE); + return FALSE; + } + break; + } + } + int bDeaf; + effect e1 = GetNextEffect(OBJECT_SELF);//part1 check for silence effect + while(GetIsEffectValid(e1)) + { + switch(GetEffectType(e1)) + { + case EFFECT_TYPE_SILENCE: + FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced + return FALSE; + case EFFECT_TYPE_DEAF: + bDeaf = TRUE; + break; + } + e1 = GetNextEffect(OBJECT_SELF); + } + if(bDeaf && bRulesApply && d100() < 21)// 20% chance to fail under deafness + { + FloatingTextStrRefOnCreature(83576,OBJECT_SELF); //* You can not concentrate on using this ability effectively * + return FALSE; + } + string music = GetLocalString(oItem,"MUSICAL_INSTRUMENT_SOUND"); + if(music == "") + { + music = "sdr_bardsong"; + } + PlaySound(music); + return TRUE; +} + +//------------------------------------------------------------------------------ +// if X2_EXECUTE_SCRIPT_END is set by this script, the original spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +void main() +{ + object oTarget = GetSpellTargetObject(); + object oItem = GetSpellCastItem(); + + if(oItem != OBJECT_INVALID) + { + int spellOverride = GetLocalInt(oItem,"ITEM_SPELL_OVERRIDE"); + if(spellOverride != 0 && !GetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED")) + { + SetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED",TRUE); + ExecuteScript(Get2DAString("spells","ImpactScript",spellOverride < 0 ? 0 : spellOverride),OBJECT_SELF); + SetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED",FALSE); + SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END); + return; + } + } + else//metamagic exploit handling + { + int nMeta = GetMetaMagicFeat(); + if((nMeta == METAMAGIC_EMPOWER && !GetHasFeat(FEAT_EMPOWER_SPELL)) || (nMeta == METAMAGIC_MAXIMIZE && !GetHasFeat(FEAT_MAXIMIZE_SPELL))) + { + effect e = GetFirstEffect(OBJECT_SELF); + nMeta = -1; + while(GetIsEffectValid(e)) + { + if(GetEffectType(e) == EFFECT_TYPE_POLYMORPH)//if used in polymorph nothing happens, CP fixes this exploit in engine + { + nMeta = 0; + break; + } + } + } + else if((nMeta == METAMAGIC_EXTEND && !GetHasFeat(FEAT_EXTEND_SPELL)) || (nMeta == METAMAGIC_QUICKEN && !GetHasFeat(FEAT_QUICKEN_SPELL)) || + (nMeta == METAMAGIC_SILENT && !GetHasFeat(FEAT_SILENCE_SPELL)) || (nMeta == METAMAGIC_STILL && !GetHasFeat(FEAT_STILL_SPELL))) + { + nMeta = -1; + } + if(nMeta < 0) + { + //block the spell for exploit abuse + FloatingTextStrRefOnCreature(3734,OBJECT_SELF,FALSE);//prints "Spell failed!" + SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END); + return; + } + } + //--------------------------------------------------------------------------- + // This small addition will check to see if the target is mounted and the + // spell is therefor one that should not be permitted. + //--------------------------------------------------------------------------- + if(!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // do check for abort due to being mounted check + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(X3ShapeShiftSpell(oTarget)) + { + SetLocalInt(oTarget, "Polymorphed", TRUE); + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END); + return; + }// shape shifting not allowed while mounted + break; + } + } // do check for abort due to being mounted check + + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + /*if (!GetIsPC(OBJECT_SELF)) + { + if( !GetIsDMPossessed(OBJECT_SELF) && !GetLocalInt(GetArea(OBJECT_SELF), "X2_L_WILD_MAGIC")) + { + return; + } + }*/ + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration (only black blade of + // disaster) + // /*REM*/ X2BreakConcentrationSpells(); + //--------------------------------------------------------------------------- + + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + int nContinue = X2UseMagicDeviceCheck(); + + if (nContinue) + { + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + nContinue = X2RunUserDefinedSpellScript(); + } + + //--------------------------------------------------------------------------- + // The following code is only of interest if an item was targeted + //--------------------------------------------------------------------------- + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + //----------------------------------------------------------------------- + // Check if spell was used to trigger item creation feat + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft",OBJECT_SELF); + } + + //----------------------------------------------------------------------- + // Check if spell was used for on a sequencer item + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = !X2GetSpellCastOnSequencerItem(oTarget); + } + + //----------------------------------------------------------------------- + // * Execute item OnSpellCast At routing script if activated + //----------------------------------------------------------------------- + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS)) + { + SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT); + int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget),OBJECT_SELF); + if (nRet == X2_EXECUTE_SCRIPT_END) + { + SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END); + return; + } + } + + //----------------------------------------------------------------------- + // Prevent any spell that has no special coding to handle targetting of items + // from being cast on items. We do this because we can not predict how + // all the hundreds spells in NWN will react when cast on items + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2CastOnItemWasAllowed(oTarget); + } + } + + if(GetLocalInt(oItem,"MUSICAL_INSTRUMENT"))//variable indicating musical instrument + { + nContinue = MusicalInstrumentsCheck(oItem); + } + + + SetExecutedScriptReturnValue(!nContinue); +} diff --git a/_removed/druid_air.ncs b/_removed/druid_air.ncs new file mode 100644 index 0000000000000000000000000000000000000000..a07942adfdfbd61f1c332ce742706e6aba59ac2a GIT binary patch literal 2533 zcmbVOJ!n%=6u$4i_hQqeH9}pqwU2^|#rjvl3Zm2)O)yP@skXWV(W-;mQXF(rbXLUG zRh&dSR1hZzQHO#KMO2D(P^jV{r9+28{O&pTrSHC8f3QQE`27$k(K=?u|s*ml$a}`9N#{o=AnUSuSXn?LSoFS=MzGxrrt(D5PYQDdctL6)b z2W!JW`_<-!XsmDD%hwfB?I*}+Gn5% zjdmGmlSb1W%Fce0eNnE&M~A$3a?~W4CAZGg%f65;?s|c+W|dyz9(`Z3XWZ5jkfn8G z$#GORi^5|SBN&llW-fOOB0Rymo1HeCz^JdWABHIfuhc1*8D?4Tb)HQTP#2DEvhsa$jJI`!WJJabQ&( zXo>^LIFN_~G7dDy0o8d%96kYInQ-XlzPP>&Ik)-F`qF%7=uRql2T@RJbibywrh~*^ zNqZGZw~U&hSj$MR>l^K5t3JO&XQv(N)k%kD!f z3w{mO4UyE6Bn-1g|50T%1J1lf zhPffxdy5PeCE0Vb5>D7-3loz>%)1sDx}0QJEV5}W8@9+W4WzfvBEt-jEU?JX`6S~f zO*P^^cbe;`yzh^VmT)4=`#CQlwD$=5P&o6Y3l#Wsie?{5SJ7l6Q#0(5dd2 dM|s+#= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL; + } + else + { + nPoly = POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_badger.ncs b/_removed/druid_badger.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3977337187fb2d2c2f672f2905dabfde6e16f22e GIT binary patch literal 2525 zcmbVOO>9h26u$SqH>1;;RxLuA?D(9s@9`REu)(azVK9ngoCxQf^GN4fj?G#Y#EbU&@rT zxkH1Maw(I~SJK%``Ute2zq_CyuOEt8)U1PNSs5l5okFlk~bYrC^~kgZ5cy z+@PHn+F;OBySB5BWM8!_@llfZ4o-~(v*cDjy&My&$yp~5)~wcx-=_B^A}yNORMH~@ z8!UfnjVEC!?m|ZrLgVRsBpKltGFF0g?)3~MRuz;vyB0exO zer{w4Z;7$di`OoVj*p#3F0XW{<|G-DNskl|OiiKxUle`>6mrWb1eyX&abE=h83tB_ zfrc=U2m|pjpu#|77|<V_4{cpk?P_ zBny5m)(x9QGQ>!EeK(drgmm(@j$zG&SQ{f*m`clkD1T!M(-35-Pm#9J#1?BZl7(Gl zvF_R|9!g?7qaJvxh%gyB-=djIzKaz6&88c+#G?x}99~D+AoF6J`=n-`{X-`qU01I) zo-VTg$ZRLw?lbOh;t3TgS0ZH7Mm8KF!!(fI-Uu0HfMi~T44qFh z{**lMgz0tM8@BqH+P4yi)4aSUC_gkAptHQZgjx6i!^=y3VG2HFW-k@%`VJb>tR4I7 zM-;3M)7M-y6o}Zs18kfS$Vh0= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BADGER; + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} diff --git a/_removed/druid_bear.ncs b/_removed/druid_bear.ncs new file mode 100644 index 0000000000000000000000000000000000000000..09378ea3bd71f72ccee5239bfdf399d4371690c7 GIT binary patch literal 2525 zcmbVOOKeP07(VCRJEPN?RxN5#tzL~sH0o7}N<`EcW@0)sF{NcQ5$chkO=H1|uoPl% zD^@}mm57yvV9|s{BS=XX79|$abkRkV@tyxacjlh!QqjfjJ>UQRuk%0d6w+ny_>QgH z4+xR?yjI|^!4okd7WHGBa2*ZN^B90hrCOAOmkYv;*CYVskaA<9eYm$$C|1hZ{!*r# z%^e!7luMa>zLL&n(np{*uZ{MqE~iuLK5=BVTAdS6bQ&ccmV`^boTRrwQwkOuGiaZM z#tqtKp$!I2b!a>LNcL5`5+5ab@8r}-FiURb)5|fTnw&KPVa;m2_-%S$BGRIXO(i`t zu-@{gR(n#X0~YI$`BuVy`k1AWYGONW#9U`HIXL~4`}w93`GP|RIE`D14hx7XCgKAl zaADI);TF2wHX? zMzY}7V%@M=Btwjp*LP$2Lr5oY>loHdh_x}2g{idshw?YJFbzSL`V?skO>D6yBU#u* z7VECf;-MtQGwOl2iU^aD^DUaWJOFX(z!{K$54Kgprxld~5**|m=(slJ( zddV6JeOErPV$;jIBuvQ*5U z7$_bsWitnZ^7;or=V8s*Dgr357p6nH*dAeiXT9XkR_%o1M7?y9^CS$jM*mS6Jp*z+ zLWT|?+4~3?W{PCb$%;Q=k0Y3vBx2r+kfF;-b|peKZDhj{GE4*M?TwIO21w>b$k6#D z<4?&0PncfEyc0?4M82Xgw}orKSL%shnvBY> literal 0 HcmV?d00001 diff --git a/_removed/druid_bear.nss b/_removed/druid_bear.nss new file mode 100644 index 0000000..9738dd4 --- /dev/null +++ b/_removed/druid_bear.nss @@ -0,0 +1,164 @@ +//:://///////////////////////////////////////////// +//:: Wild Shape +//:: NW_S2_WildShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into animal forms. + + Updated: Sept 30 2003, Georg Z. + * Made Armor merge with druid to make forms + more useful. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nMetaMagic = GetMetaMagicFeat(); + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + //Enter Metamagic conditions + if (nMetaMagic == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + nPoly = POLYMORPH_TYPE_BROWN_BEAR; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR; + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} diff --git a/_removed/druid_blued.ncs b/_removed/druid_blued.ncs new file mode 100644 index 0000000000000000000000000000000000000000..9ce00b78a6f8c98bb81fc62cce71f244b36897ab GIT binary patch literal 2533 zcmbVOO-NKx6u$4i_a?^~&7d}=`4B3S?9U*BC~TUXp>bw#EUnEDWwodjX;G`9)UfB5WWzL>SLGiTm{kR2>_E)wn*1Y)Irx5&XCkBU$hQ)SBs@;CD&WdR&x1c zgVjnoTPRdBxoqY*^yih;ZrS0sD+^Cur&g=Y3C|a9qeF)!;gK;n6>L$IqJjDv?J>}V zMmr3&L8Iw5W#Hz?wMF z5C@WRAQ1;-9B7OKs`HFEd;-EU;n2x_abp>B?(m)Ur1{R!omB8PqM+31eobjk2Z>cl z2NX%SjGCcX%Sf*4TkU0sKEFq2sMbP>)qr|XThVA!TIZV9nKpIYDN{$Y&;wD+?jtJ; zeht=5lSMMbNO}FxmOsXH3Z{-`&BRz+tt!-*zQxXMH`mwcars)jA|=t2#LH#Qq&UW{{})XlSh=p-G_Lq`an zF0%iaHW@I8XS@~S2`yIcAy(VH5#C#d_f`wl%3!IS>8%Xri+%N7v)|>d0aB`5DxB&s z4U}`)qfzq>pMTUx!>;+i~C+vxZiAf^nJ&O!oPO_^O*|e4oTV$99(mQC8VFpMRSY+sYlJS%B zFc7-eac|h_=ju-;4rh6JO;CPlJwWGqdExB|!T9o$Uzj3O;a)0*R6NOONWFFOh^s&A+-g14Ab;|kv{{m920hQc%WQ1ghtS3 zoeu9-XKhIN!ySE($p7b#_!q^kE{+Q+QYd_LxCXolHI9<9$3Z{-+jttuJ49jVRCmmy cJmXRF+wn_)rur{L5|J= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_ANCIENT_BLUE_DRAGON; + } + else + { + nPoly = POLYMORPH_TYPE_ANCIENT_BLUE_DRAGON; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_boar.ncs b/_removed/druid_boar.ncs new file mode 100644 index 0000000000000000000000000000000000000000..cce40a8ed9a9a751cd55a2cf4d0de5f049de5a45 GIT binary patch literal 2525 zcmbVOO>9h26u$SqH>1;;RxOBBt1nFvjryxZB_e7JGclc+n9{PD2=$YoO=H1|uoPl% zD^@}mm57yvV9|s{BS=XX79|$abkRkV@!fOon|b$nRCMwB?svZPchAq8Lb~i7-?4T3 z0U;8f*9-hLcp@gmqJC@>uA?D(9s@9`REu)(azVK9ngoCxQf^GN4fj?G#Y#EbU&@rT zxkH1Maw(I~SJK%``Ute2zq_CyuOEt8)U1PNSs5l5okFlk_%dO2I;72JN%Z zxIsHDw85aMc5P=L$-Zh=;-e(*9h@2oX34F5dO0Rkle11BtXZuWzfJE;L|Qblsia2+ zx-5TcjVEC!?m|ZrLgVRsBpKltGFF0g?)3~MRuz;vyB0exO zer{w4Z;7$di`OoVj*p#3F0XW{<|G-DNskl|OiiKxUle`>6mrWb1eyX&abE=h83tB_ zfrc=U2m|pjpu#|77|<V_4{cpk?P_ zBny5m)(x9QGQ>!EeK(drgmm(@j$zG&SQ{f*m`clkD1T!M(-35-Pm#9J#1?BZl7(Gl zvF_R|9!g?7qaJvxh%gyB-=djIzKaz6&88c+#G?x}99~D+AoF6J`=n-`{X-`qU01I) zo-VTg$ZRLw?lbOh;t3TgS0ZH7Mm8KF!!(fI-Uu0HfMi~T44qFh z{**lMgz0tM8@BqH+P4yi)4aSUC_gkAptHQZgjx6i!^=y3VG2HFW-k@%`VJb>tR4I7 zM-;3M)7M-y6o}Zs18kfS$Vh0= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BOAR; + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} diff --git a/_removed/druid_earth.ncs b/_removed/druid_earth.ncs new file mode 100644 index 0000000000000000000000000000000000000000..93df9fa4b12124df8758c0c4fe0c38b7a1ceebd7 GIT binary patch literal 2533 zcmbVOO>9h26u$Sq_eQ5P{SjfKg(t*<{@5X0M?>^^0>Fe)t;%r|b}a6REPN;)hGmy9_nf0L#ZEz~n;uZ1QI z+G(K;22HnXI|oSiRl5?OBzf=Ps7WwGZsoHpo={EB27$0dRFEGUe6#`@wSQP~t zqCheVB%*+d0*z5Xcb*l8M?g>}9J;tKZY)9a4&PaCn(qwVNd<2w3QCRcHZWsNpzbgmhlDO<;xv~>&%JrK6+Jc?z( zuf@7)vq***DX$;K^2dly!PYUX=?H6cEDOVF`H$ppY+<&;EcH3o7Mj>%O~kUWk}TF; zo5e#(jOWw??-UUxf{7+ku*yU;mwbV_@z=t2#LH*q$|ycpv?shem2&`C8lLni%09bX0O9r1Ef^BR5;aN zI$q9Y4~OMTuYu0Pnz7XcP+%`jhjg+%!h+6v#htC%2*rtd=``m_7-o(Bqsn>)rM@slrGmXw3aEIJ(U4~CgkH3u z5Lg|iueoTzi48o&#tDH8NA_I1eqZzC37L=@>O*St^cbe;`vQOZVksu<=-@!PtP6~w z&$=Y~S!U{}!G`@(xiDI@KNX dsLr^Q{8s!DpsD@~kwoMx{&HKn27INy_zkyw!sh@0 literal 0 HcmV?d00001 diff --git a/_removed/druid_earth.nss b/_removed/druid_earth.nss new file mode 100644 index 0000000..9427bdf --- /dev/null +++ b/_removed/druid_earth.nss @@ -0,0 +1,161 @@ +//:://///////////////////////////////////////////// +//:: Elemental Shape +//:: NW_S2_ElemShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into elemental forms. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF); + int bElder = FALSE; + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL; + } + else + { + nPoly = POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_fire.ncs b/_removed/druid_fire.ncs new file mode 100644 index 0000000000000000000000000000000000000000..0630baeed466e5d6a08e4265eebd3b9e4ca71984 GIT binary patch literal 2533 zcmbVOO-NKx6u$4i_a?^~O`$fW`4B3S?9U*BC~TUVp>bw#EUnEDWwodjX;G`9)SL$yTm{kR2>_E)wn*1Y)Irx5&XCkBU$hPPREwo*CD&KZR&x2H zgVjnoTPRdBxoqY*^yih;9@*)3C<{+rr&g=Y3C|a9qeF)!;gK;n6>L_NqJjDv?KRMZ zMmr6(L8Iw*W#=HtzA9JZlSAG+IBF8il3VB56<^3EccVa9vq~>=o7<8O3&_A1iT;uC z3nN4LmK+k57UqVO}KkY7b1a$jJI2QmUUabQgx zXov&JIFN_~G7dDx0o8d%96kYInQ-XhzPParId}NZdeeMo=uRqlJ5f+-bibxFr-Q_* zr2UGdTSm=LtYswE^{w`@U7z2hGgND##A-l2sI6$UDXnu&>r9(E?v$ycS?GbNW%rSl z1-}OCrpY21Vx+u&Xv-gCIt5clvu0wfEmjtW)9@e5U)#cLM_KZ-)fSrAU`<+CSV;!! zuF2w|B*t^StpQT1Tq>OE zFAbD)*&|W;@@t^-FlMZk01E7-?vPHlM_AZdueh^i8=*K+FP-K*3B#<>e^gn`fHQBA zVQxtF!6HLNN%n%QgcJ6}!o(yI^PWY9E+^Sli)>oUhAlEo1L+;G$S?yW3oJ5pKFRn= zc^C-Y>$o>;^>g(n6Nj_Bye23=v>u@Iyu9%CgkXGm$uCTiscNLMEh!`jFZJJ%(xezQ~_}SdIxhIy_J=>q8^x zvo42stFtzw{NawiN96x=NBoQ8RyW6m6e$$GIa~wYgc?Ul+2f!e|E)ZYBl27IM~_zjit!s7q{ literal 0 HcmV?d00001 diff --git a/_removed/druid_fire.nss b/_removed/druid_fire.nss new file mode 100644 index 0000000..f8bb608 --- /dev/null +++ b/_removed/druid_fire.nss @@ -0,0 +1,161 @@ +//:://///////////////////////////////////////////// +//:: Elemental Shape +//:: NW_S2_ElemShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into elemental forms. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF); + int bElder = FALSE; + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL; + } + else + { + nPoly = POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_greend.ncs b/_removed/druid_greend.ncs new file mode 100644 index 0000000000000000000000000000000000000000..d354c736c0fb8e372ea6301172f9749d1e965b02 GIT binary patch literal 2533 zcmbVOJ!n%=6u$4i_hQqewSq3%+DAaeV*RUN1yO2@CYUC{R9jtwXw^Y&DGoX*IxFJp zDo&yuDu|PVs6#=AA}U2XC{%Hf(xF2ke)pXF(sy64R_u`Ge&;)X_x#+Hven?^uI)Py z36cD^QQ)sB5WWx#>SKrSTm{kR2>=sPwn^7ZG(guE&Y;vRU$hVP)Jo-AHQ!gsRr7@- z1GQ=;S1i`D`CRrG^yie-9+`1Fm4&CSQ?J)&h35;m*`dRt@W_~(3N|T9$v}OL_8MqH zqZtEj(rCIv**QS6ugaD9PG~XGzlM3EJ6qFj>uPLqRAh9B8 zpCaj&Q8N^48Oe2htG#T~=lAFg)mkXA8c+{v%NlJ`>s-@1Q>KnPY3gVedLU}qePm_9 zufe)$vPgy)DX$;e^2eA?(bUnb=@@IXm4)Fn{KxXwwlLdKmi%nBg(fyw6IK>hlEJ!b zvUn(o@tk_#og~6UIME~uSD9$#lJ7B4)vy&FU8v#k#%6=ei!tt#hI#f6ouuP==m^2n zMfM-lCIbfXw6{z=uEokd#A>@Y!+YD%?pm={9Vl0_ebs?N>1bou>~(o-fRw6~i>La_ z$1C~V;i!D+HBfmNGq#2R3hbrskPO=+EbOdT+}X07P@JfjPII1wVbk?&mu#YlkBQRHl<}l78$02^!8h1m;sUn78yF9Wc;K& z4214=+#9y~xyF-;!&zQluJixw6F zt3&rS7Y#VEfk)UlA&}wNp6gKWYk@o=6H-HcNNt`T!!&(g;LkuT#e^Ll9w?V}p%L_1 zm&3c&SshaTa7W)G^8dLb{zY-Co8v-?6bj!Qt^sdCouj1eanO(d7M@1(4pA67)gALF c&v=ylR{Rp6ss0O*MC8kUxounnzS2Pa24g_OR{#J2 literal 0 HcmV?d00001 diff --git a/_removed/druid_greend.nss b/_removed/druid_greend.nss new file mode 100644 index 0000000..8871743 --- /dev/null +++ b/_removed/druid_greend.nss @@ -0,0 +1,161 @@ +//:://///////////////////////////////////////////// +//:: Elemental Shape +//:: NW_S2_ElemShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into elemental forms. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF); + int bElder = FALSE; + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_ANCIENT_GREEN_DRAGON; + } + else + { + nPoly = POLYMORPH_TYPE_ANCIENT_GREEN_DRAGON; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_panther.ncs b/_removed/druid_panther.ncs new file mode 100644 index 0000000000000000000000000000000000000000..9b3fb4f301f6986c2792eb309a56b3f8450386a5 GIT binary patch literal 2525 zcmbVOJ7`l;7(VCRo7gmIt%DtEYcIhE7VE2m6-2BtnqZm)Q*Ct#qV)l4OL5Ri(NPq4 zS8)>UP(hp=L>&q`6j7PVdcg|=SW|*SgKZX1LbTb zmp?dEt(3EcLN$}iW)4GZK^yH;X{TH3K6YfSR+|@4bebg{mW4~coTRs2Q;HTEGibks z#toXb&?bYXy0o3WB>SRWi4T&zcXMham?O9H$)%W3EzTN&u;#R0{1&}06KToBrji~R zSZDcD?Vi->fWp0W4j$xq(f|i{J zku3PNSl4Y9$q*yu_03p*AJQqEq5O?4Ohb^RK1SL?6I-mQNEUXH z#kym&cqobSlzQNeBEnSUe2Z2t`A$;sH=AzQGLJ6QaCjAEgUpKw?vuKC_79zebX~pH zc)G~`L$jT9yU)76h$oF$yN6hB^=5c)8`)7UR4YTJa%P}1lrJ7)iy-ZCcx!-^ESCz$ z2TMoFx$J?Uyzv3hc~~>HiU11ix#^HJ+at{HtQXwbs*_NhsFzM~o`hl6=szl>XFx7Q z$j|{Kdlw(U?AJeffzq=veZ+9G|XQ}n*XPfs*r!jAS2l*?-0 z2>Pr?at?B(Px;LqeGSO}=Z^TN#Eo8#3n@}4d~>)4d=qLMC1sC;`Ju3pr;)rvZQ~m7m3rbQt6<8o literal 0 HcmV?d00001 diff --git a/_removed/druid_panther.nss b/_removed/druid_panther.nss new file mode 100644 index 0000000..2d7290d --- /dev/null +++ b/_removed/druid_panther.nss @@ -0,0 +1,164 @@ +//:://///////////////////////////////////////////// +//:: Wild Shape +//:: NW_S2_WildShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into animal forms. + + Updated: Sept 30 2003, Georg Z. + * Made Armor merge with druid to make forms + more useful. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nMetaMagic = GetMetaMagicFeat(); + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + //Enter Metamagic conditions + if (nMetaMagic == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + nPoly = POLYMORPH_TYPE_PANTHER; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_PANTHER; + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} diff --git a/_removed/druid_redd.ncs b/_removed/druid_redd.ncs new file mode 100644 index 0000000000000000000000000000000000000000..36eb0065bb6a2f8a1aeabb95a7890fd9e39bb0d9 GIT binary patch literal 2533 zcmbVOJ!n%=6u$4i_hQqewSq3%+DAaeV*RUN1yO2@CYUC{R9jtwXw^Y&DGoX*IxFJp zDo&yuDu|PVs6#=AA}U2XC{%Hf(xF2ke)pXF(sy64R_u`Ge&;)X_x#+Hven?^uI)Py z36cD^QQ)sB5WWx#>SKrSTm{kR2>=sPwn^7ZG(guE&Y;vRU$hVP)Jo-AHQ!gsRr7@- z1GQ=;S1i`D`CRrG^yie-9+`1Fm4&CSQ?J)&h35;m*`dRt@W_~(3N|T9$v}OL_8MqH zqZtEj(rCIv**QS6ugaD9PG~XGzlM3EJ6qFj>uPLqRAh9B8 zpCaj&Q8N^48Oe2htG#T~=lAFg)mkXA8c+{v%NlJ`>s-@1Q>KnPY3gVedLU}qePm_9 zufe)$vPgy)DX$;e^2eA?(bUnb=@@IXm4)Fn{KxXwwlLdKmi%nBg(fyw6IK>hlEJ!b zvUn(o@tk_#og~6UIME~uSD9$#lJ7B4)vy&FU8v#k#%6=ei!tt#hI#f6ouuP==m^2n zMfM-lCIbfXw6{z=uEokd#A>@Y!+YD%?pm={9Vl0_ebs?N>1bou>~(o-fRw6~i>La_ z$1C~V;i!D+HBfmNGq#2R3hbrskPO=+EbOdT+}X07P@JfjPII1wVbk?&mu#YlkBQRHl<}l78$02^!8h1m;sUn78yF9Wc;K& z4214=+#9y~xyF-;!&zQluJixw6F zt3&rS7Y#VEfk)UlA&}wNp6gKWYk@o=6H-HcNNt`T!!&(g;LkuT#e^Ll9w?V}p%L_1 zm&3c&SshaTa7W)G^8dLb{zY-Co8v-?6bj!Qt^sdCouj1eanO(d7M@1(4pA67)gALF c&v=ylR{Rp6ss0O*MC8kUxounnzS2Pa22y&%RR910 literal 0 HcmV?d00001 diff --git a/_removed/druid_redd.nss b/_removed/druid_redd.nss new file mode 100644 index 0000000..48cd844 --- /dev/null +++ b/_removed/druid_redd.nss @@ -0,0 +1,161 @@ +//:://///////////////////////////////////////////// +//:: Elemental Shape +//:: NW_S2_ElemShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into elemental forms. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70, fix by Shadooow + +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "x2_inc_itemprop" +#include "70_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF); + int bElder = FALSE; + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_ANCIENT_RED_DRAGON; + } + else + { + nPoly = POLYMORPH_TYPE_ANCIENT_RED_DRAGON; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_water.ncs b/_removed/druid_water.ncs new file mode 100644 index 0000000000000000000000000000000000000000..9be42e7a2bf998ed09d890238032ce82163d3979 GIT binary patch literal 2533 zcmbVOO>9h26u$Sq_eQ5Ptr9l0`qBi^sJ}{7BBaJJ6VsWADJ`3cP%O}(O2TCtF(i!Pds@1Aqt^xfA-MHkb#-}%npJwJDfnTmgE_l{kM zg-CwiB=FbZ3r~mz{jpQHj)v&-B!F?HT9o4^>Y(EZIiL*76Rm^Y)nchy$@P}Am0bR4 zf3;H177Eo&E}J4UqK;sUto%dDg?+Vuqp~P zM1f=!NJIe@1sbD(?mR0FkAR>|ICOGf++2d>UB0uPG~XGzlM3EO6qFj>Zz#=aKd~Zd zzb2WM(K8fj8O3#dXS{4T=MU%%-C8KI9#9u*%NlLM=v+5CleUgCVe1$cdLV4sc^u1v zUyF6iW|0grQeHod21u!Lsc^cl zbfTQg9tq2rUIU$nHDhZCpuk?44(VWfgaw`Tnmb#y5{eV`(izT^Fw7eLN0s#q$hjC9 z=7wY+V`Qi($zGC`V8WipFfmEQydNV&my_&TjBL`#24iHH2GTnaBf|`k%#V?w^GU`} z$|GNxUdO#*tDmnwnK+!|I{l4bO6EYz+)Q8mO=`l>x_XYm+#ZpYz(ZPXoSsxfd zpLI&!t#Wlh`NJK}hUEWqNBoQ8b{EHm6e$$GIa~wYgc?Ul+2ddy|E)ZY= 20) + { + bElder = TRUE; + } + //Determine Polymorph subradial type + if(bElder == FALSE) + { + nPoly = POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL; + } + else + { + nPoly = POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + + +} diff --git a/_removed/druid_wolf.ncs b/_removed/druid_wolf.ncs new file mode 100644 index 0000000000000000000000000000000000000000..21754d37a9c9b8161c5939204da573d9e2b5c053 GIT binary patch literal 2525 zcmbVOOKeP07(VCRJEPN?RxOZJt2gzEM!hOgiHI7*OiX7crnGD(LOl|+X)IU~mO|`p z#Y*U+60x!nESj)r1S#plqQpX)F1lzkzVrX*&fIfdD!RD6=lj3^b^gblLb~i7-?4T3 z0U;8f*9!bKcp@gmf_`ihuA?D(9s@9;REu)(azVK9ngoCxRBlYP4fRwC#Y#EbSIU&L zxkCe$aw(I~SJK%``Ute2zq_CyuOEtFr=%PNSs5qHxKVlk_%dO2I;72JN-b zxIsHDw85aMc5P=L$-Zh=;-e(*9h@2oX2`94dO0Rkle0!3tQoBrzfJFpL|QPhsia2+ z)?5D6Do^Tkz+xRTznZY0K4xj8n%GV&G1u8l4o*Mie!gi$KJSnLPUDuM!#tvjiFp6; z*ty|Byd_3QE?&DdGB$c1xxCV)nw4ZsCOuL>Fg1m~e^K}mP{=Kz5NHZ8#eEe3WEfZ$ z1{%UZA`HaCfC>YRVL-Q>6-SH!zZ5uhaYJ0ML-G#aS#OH(3~fmzZzl>$jD|Oq=9Cv- zlC(#Y$U-Y!h_qWpab4dSFI&v{9p+BA6iTcI(-pQB$tI1?RiiUy>o}9Pj$xq(f|i|! zku3PNST}4I$q*yu_1#$h5YoxpI)*hJVr`6MVJa>Eq5O?4Ohb^RK1JF>6I-l_NEUXH z#ky;=cqobSjC$a$BEm%Ee2Zo-`7ToMH=AzQ5|1v_aCjYMgUpLD?vt8%_79zebX~pH zc)G~`BeR`!yHC5niN}ptyN6hB^+tGa8QNLNSIPs$Qo64^kSiQ!iy-ZGcx!-^EEV%7 z`inHf&dEah3Sw^wnv!XSueS>RU4r=Q7@h3JPE_B(SKA%&w!kZ zkf8%e_C7*}nIhS9vf@wJ;|L}uiJ12yWax5|U5SuQ8QD;T4AVe*dn06+0g`zUGIT!4 z_*3%06Q)ynY~o3>pN&jvv%yS zA5pM6OkZ=+P#|Ih53q4UAj6?O*RDUTIWmJxNDXx*wR!qXr|5lwpPs14gdOc4D3_JK z5%gJ?= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_WOLF; + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10); + SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} diff --git a/_removed/nw_s0_animdead.ncs b/_removed/nw_s0_animdead.ncs new file mode 100644 index 0000000000000000000000000000000000000000..ea216eaa37439991339434892bcd80a6cbdf81a8 GIT binary patch literal 3526 zcmc&%-D?zA6u;CwGPhihM6Hz+cJJd46dx~f>0mq zKhS4E=zn49pWuV|;G>jMO6h|SeJJ9?J_zZ#=ghskcexn|eJ~5j&bjw@&hPxrx#v#W zjWk$4d+N+8V>2(mWbm^$V0HyRjx9g*yzd0V9kr8efo*SZzk!{OusFZfog)HUT@+8R zgw4I{I`C)St{t~v??24NXWI{O=TS#khthg5u*CBR=A!41i21u%^=gD^q6aX7Uxwe0 zx*nTrZ{%ryqtjZ=t|wtT^B7BA^akF^n_$IWEHlk(WhOulADN4c=C#$ST2P^=tH!7^ z7&X1hl0^m55(9z}<>UvhFc!!$ua1v&hNXk53lhZdx)4GWo%h z0AA3nAUayV)2vQm{SoE)#h9i)$OjKLyZ1Nyy>la$s!WJ{Vnj}-xlpGSe#3VHhDKnO zfNM#_)3IXeF)O3OTFW4^QLX7httv?aGf*t=khp@!!*kio~?%o2@MT7Wfz)zta|=TK6td*?cVS8 z9)R<`b{UeblrDo~DSO?~X2KAKuTtTG9hUrU1ea}L2zGc>7g0jj@}NlgPx9Wbyv zvv4;I8gdJ!KWH~dqfA3G{XS;uk?GHo$$n3!chZDm#DEh-Eg!N0s&d#YND`pTX&?-~4Bv5R5#7y1PbG8)y@I2EP}t73+G zrwc2Na`qGP11hs&|4u5Z96#>1dUwIH=T7(5V6ZvxnElcL67Q&~Kukk&dY@H;1C%V( z=@5L^t1vp-tSC2G&@D)goSqhkyDu{aM*doV>*1~b58>^t?j%73c}PPP#bZvICH_}9 z`U6~KhD+o1G8>09`85q<86eMfNTbu%AhrQ=Pls$osRl9KW-B@*YG(!HFy=x>N3}fK zre#^AVtB6{2&7q-2+UXQq9&@ru>wP=@)or@+~;FOfk3cyLfu76;trw z?t}#NnuKoEd9T(5BkLIGayZI(OFOoCXPqZW)Z`Ka;;m3)s9A8$7Dx3401jcC7SBSs@T0PDswYK7?Poo~kBc}$RqVk#npHcK(OE= 6) && (spell.Level <= 9)) + { + //Skeleton Warrior + eSummon = EffectSummonCreature("NW_S_SKELWARR",VFX_FNF_SUMMON_UNDEAD); + } + else + { + //Skeleton Chieftain + eSummon = EffectSummonCreature("NW_S_SKELCHIEF",VFX_FNF_SUMMON_UNDEAD); + } + //Apply the summon visual and summon the two undead. + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + + //Apply better summons instead if a caster is a level 11 or better Pale Master and the spell is not cast from an item. + if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 29 ) + { + switch(d3()) + { + case 1: eSummon = EffectSummonCreature("s_skelhero2",VFX_FNF_SUMMON_UNDEAD);break; + case 2: eSummon = EffectSummonCreature("S_SKELMAGE",VFX_FNF_SUMMON_UNDEAD);break; + case 3: eSummon = EffectSummonCreature("S_SKELPRIEST",VFX_FNF_SUMMON_UNDEAD);break; + } + } + else if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 10 ) + { + switch(d3()) + { + case 1: eSummon = EffectSummonCreature("S_SKELHERO",VFX_FNF_SUMMON_UNDEAD);break; + case 2: eSummon = EffectSummonCreature("S_SKELMAGE",VFX_FNF_SUMMON_UNDEAD);break; + case 3: eSummon = EffectSummonCreature("S_SKELPRIEST",VFX_FNF_SUMMON_UNDEAD);break; + } + } + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); +} + + diff --git a/_removed/nw_s0_circdeath.ncs b/_removed/nw_s0_circdeath.ncs new file mode 100644 index 0000000000000000000000000000000000000000..48cef3c64bcd52a05cd13b1167853f3ce20de0da GIT binary patch literal 13719 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_circdeath.nss b/_removed/nw_s0_circdeath.nss new file mode 100644 index 0000000..778dd4f --- /dev/null +++ b/_removed/nw_s0_circdeath.nss @@ -0,0 +1,128 @@ +//:://///////////////////////////////////////////// +//:: Circle of Death +//:: NW_S0_CircDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The caster slays a number of HD worth of creatures + equal to 1d4 times level. The creature gets a + Fort Save or dies. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: June 1, 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Aidan Scanlan +//:: VFX Pass By: Preston W, On: June 20, 2001 +//:: Update Pass By: Preston W, On: July 25, 2001 + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + object oTarget; + object oLowest; + effect eDeath = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + effect eFNF = EffectVisualEffect(VFX_FNF_LOS_EVIL_20); + int bContinueLoop = FALSE; //Used to determine if we have a next valid target + int nHD = MaximizeOrEmpower(4,spell.Level,spell.Meta); + int nDC; + + int nCurrentHD; + int bAlreadyAffected; + int nMax = 40;// maximun hd creature affected, set this to 9 so that a lower HD creature is chosen automatically + //Also 9 is the maximum HD a creature can have and still be affected by the spell + float fDelay; + string sIdentifier = GetTag(spell.Caster); + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, spell.Loc); + //Check for at least one valid object to start the main loop + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc); + if (GetIsObjectValid(oTarget)) + { + bContinueLoop = TRUE; + } + // The above checks to see if there is at least one valid target. If no value target exists we do not enter + // the loop. + + while ((nHD > 0) && (bContinueLoop)) + { + int nLow = nMax; //Set nLow to the lowest HD creature in the last pass through the loop + bContinueLoop = FALSE; //Set this to false so that the loop only continues in the case of new low HD creature + //Get first target creature in loop + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc); + while (GetIsObjectValid(oTarget)) + { + //Make sure the currect target is not an enemy + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster) && oTarget != spell.Caster) + { + //Get a local set on the creature that checks if the spell has already allowed them to save + bAlreadyAffected = GetLocalInt(oTarget, "bDEATH" + sIdentifier); + if (!bAlreadyAffected) + { + nCurrentHD = GetHitDice(oTarget); + //If the selected creature is of lower HD then the current nLow value and + //the HD of the creature is of less HD than the number of HD available for + //the spell to affect then set the creature as the currect primary target + if(nCurrentHD < nLow && nCurrentHD <= nHD) + { + nLow = nCurrentHD; + oLowest = oTarget; + bContinueLoop = TRUE; + } + } + } + //Get next target in shape to test for a new + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc); + } + //Check to make sure that oLowest has changed + if(bContinueLoop == TRUE) + { + //Fire cast spell at event for the specified target + SignalEvent(oLowest, EventSpellCastAt(spell.Caster, spell.Id)); + fDelay = GetRandomDelay(); + if(!MyResistSpell(spell.Caster, oLowest, fDelay)) + { + if (GetHitDice(oLowest) > 10) nDC = spell.DC - 5; + else nDC = spell.DC; + //Make a Fort Save versus death effects + if(!MySavingThrow(SAVING_THROW_FORT, oLowest, nDC, SAVING_THROW_TYPE_DEATH, spell.Caster, fDelay)) + { + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oLowest)); + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oLowest)); + } + } + //Even if the target made their save mark them as having been affected by the spell + SetLocalInt(oLowest, "bDEATH" + sIdentifier, TRUE); + //Destroy the local after 1/4 of a second in case other Circles of Death are cast on + //the creature laster + DelayCommand(fDelay + 0.25, DeleteLocalInt(oLowest, "bDEATH" + sIdentifier)); + //Adjust the number of HD that have been affected by the spell + nHD = nHD - GetHitDice(oLowest); + oLowest = OBJECT_INVALID; + } + } +} diff --git a/_removed/nw_s0_circevil.ncs b/_removed/nw_s0_circevil.ncs new file mode 100644 index 0000000000000000000000000000000000000000..30c71aa25b7c9b5448fd2c4e49acdd08338df009 GIT binary patch literal 4447 zcmbtYO>9(E6u$4xPYW}`)HHz9!poFG0;1FgFeD_t&OBhkOsAO{+LB0K5HJ#JYT9U` z3pZ}vxG^!o#HESG6>;rKHpaNn9Wf}FuyE0kF1o0x-~GI(-iO9YVM$xEsyJ` zTbkyd$`_Qfe>sqz1L2!|UVl{j)f)lfw(nO+^7vZNvZbM%2mKr1O5VYE$M=#48sFs6 zdM3*eE$~3)`Tn;O(|#!+)I-@t~4k35GDI;hqopI=NOT$w+&7`NIpajns*oo~16 z#CuZA@pUcG>MDz`#?81Hc6)Ir>dl9pd{ILwC~t=^AHh^UeIj0c@5a*7+sn)Ez|OFr zC8?$}kD=H^x|(Ac5F{en(AA>Kf)VJ5$0+9vTwOz$k%wC3pjSacQU~ufhq@!7 zT4dzinNZoB>Qli7D7(UyYh9h?<_Alyt&vcL}J#mhf zkrlyH4o1aUQ1;@pn+1t-f4YT2-w<-@_;?pR_EwC?KvbGrx%uwZl@G%=Z!Qf2q)>q{ zbW#c`*X?ym6O3BGL*=$K?f-OK^^4S_MMuO-5&6OuskLVvk%75HD{r|X3yrQLl25TR z?TR#Jdx^+?`Xa4kOP;iyrshnn`VljshFKo%d>+I}xrH6rgY;|j_ z>WuoICmF@WV$M({jN29Hob1j;wMN*C!bgcEM>$Z_4M8bq`Cf5MrjA`+LD_9njAA`HD??V80HC6?poT$5WQw=>x;(wq5&oLbQ*B) z^hRVYn4xWzrdahWgk+{cA-Q}X6Jvb+11N5%Ezz^dMl`~h>|6?yeZu!sg!_(v<}o3_ zL-P*e9l4a6dlj-vqPv$(H2I#vf}{UpK}k^eugR9Z$Mq+7-v_dalca+aP%hcci-$#z zeqW{$o_kYr4yTf!jG05eOLZ)WlY)Hyv8xSkuV2Z^Hvkwp&o3HpShp}pdId-xNVRB^ zzO8$*6#efgplb*`r3nLN5-jSVQHGb~+PUiXt|!}3SlAJ^ zqqw~=8+E8!d_5&!UvMp#i?jC^!Rt~d(h}FV8YLB)8UJ0D=LuTR$k#eFJ?s{>-FmIh z=xI4Njo^(2U>nwKdPF_WDBGX-dE0-S!_>N{B4-WX*18TSA9N0YiE)VO$6Z#=8{X)I zb?YfyM_SHER<#>=D%<=q;!~iF;R~Vm>OvHDdNWbjix=9Ri(#jIX|@gt_Z!RHOBJO3 z1pf9h$kPMQdk7!K^jB2%WdN(M|DeBusv+O$fufWz9A)d6m9s{zR}SS+zw0J0^jL>P z&r7LPx0lE9AB%r3n8>9llwMr7t)N3^$1uPR`_>OB9`OS<59oh}{O0%}Z56100j&Ir A0RR91 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_circevil.nss b/_removed/nw_s0_circevil.nss new file mode 100644 index 0000000..fddb800 --- /dev/null +++ b/_removed/nw_s0_circevil.nss @@ -0,0 +1,72 @@ +//:://///////////////////////////////////////////// +//:: Magic Circle Against Evil +//:: NW_S0_CircEvil.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +//:: [Description of File] +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: March 18, 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 +/* +Patch 1.71, fix by Shadoow + +- disabled aura stacking +- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others, +thats module-related) +*/ + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "nw_i0_spells" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables including Area of Effect Object + spellsDeclareMajorVariables(); + + effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCGOOD); + effect eVis = EffectVisualEffect(VFX_IMP_AURA_HOLY); + effect eLink = CreateProtectionFromAlignmentLink(ALIGNMENT_EVIL); + + eLink = EffectLinkEffects(eLink, eVis); + eLink = EffectLinkEffects(eLink, eAOE); + + + int nDuration = spell.Level; + //Check Extend metamagic feat. + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + //prevent stacking + RemoveEffectsFromSpell(spell.Target, spell.Id); + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_CIRCGOOD"); +} diff --git a/_removed/nw_s0_circgood.ncs b/_removed/nw_s0_circgood.ncs new file mode 100644 index 0000000000000000000000000000000000000000..36e5b524ee34d70f890cad3eaadeef5a2481a2c7 GIT binary patch literal 4447 zcmbtYO>9(E6u$S(bXu4R45k637G9}fFU9Ab><-xW;)HxFfEDX1py{$=W+NmY3gLS$PX~#)2$K zHJf=1#WvEF9K(Ph5z&UJ7F80AKu07;OwL@OVEjczk`>wn)Nh4^`Vd(LNb=Ct75j{lYGhd|In)gHo<`S*E;fpNRJDx~>h?QAi zq(0wGMGnvxX&qPcr0ujdXCua{8xJknrU>MVL7Ed+;LN}VvV2p@90RB?DKLbiW11>Z z5xLL*{ z^wMwz%~q{`z8<$d1%rJA(K2npDsH85_UVUO&c3f>hU?1%?<8IW9Uae=Db2Vu) z8hn~&6cdX%LzOUYSDWzB$az+ScnrDPCTbJjh)iorV6N88b18Zfy z#kJWN*kKy7toO&bGHCr@!tH_Z!mW>=^Z&rTTk{RMYXiqk6oclGnkplW_vUc0r;MdMx3fD(H$4Y+se zJ+c<;&~{3PSPjaAWT(MMdig#s#`yXhP~0B2M9-xg(F$X-b16*s3I8!fxbOH!9uopQ zwC^C^kxQw)S0TG3`g_?%lkXWUIQlOZlmvDEoNn2BTz_)+y)UacO*%LM<&xXHcv#Z( z`!bF2T+hfkoJxZ-VGsE()v+i}3i94#R~y`3zmS!00WfkpC|GY;w=hV08A$F+wHT7Q zt!r6|!8a5zH3XjGl!Y=47Inxf!_k+58c{D!ZQmW}TpybrlY6IeuCl%B$#x7Dc0{c> zX)VsjZK@VuPs`UAT+8L+tp6l}zsvFbi`KL9wGK@Wy9HynR_!x- zMviSG=5E`#8#8JCD7f0P>vDLm9wOg0wYmo52u`E1aM%qu} zZ$E=PJMg@h@L|k+MOB}Nu=>h(<}0Wg4ZI#GNcqB1wvJsn52^La;T-CB-NuC;n~<1! yDV6H?@+AIa@%IHAxgiRr7uQ`Yn9#W~3~*zC^FxY9{D94a=AR+Icz#G*h3X&1EQ$jF literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_circgood.nss b/_removed/nw_s0_circgood.nss new file mode 100644 index 0000000..54a30ed --- /dev/null +++ b/_removed/nw_s0_circgood.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: Magic Circle Against Good +//:: NW_S0_CircGood.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 18, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.71, fix by Shadoow + +- disabled aura stacking +- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others, +thats module-related) +*/ + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "nw_i0_spells" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables including Area of Effect Object + spellsDeclareMajorVariables(); + + effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCEVIL); + effect eVis = EffectVisualEffect(VFX_DUR_AURA_ODD); + effect eLink = CreateProtectionFromAlignmentLink(ALIGNMENT_GOOD); + + eLink = EffectLinkEffects(eLink, eVis); + eLink = EffectLinkEffects(eLink, eAOE); + + int nDuration = spell.Level; + + //Check Extend metamagic feat. + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + //prevent stacking + RemoveEffectsFromSpell(spell.Target, spell.Id); + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_CIRCEVIL"); +} diff --git a/_removed/nw_s0_contagion.ncs b/_removed/nw_s0_contagion.ncs new file mode 100644 index 0000000000000000000000000000000000000000..6678b7f3a36645350afdee19cf8f019c9e977b5a GIT binary patch literal 10924 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 VjnovvOSuPWo*bH9BIQ`#`yWyvw-x{Z literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_contagion.nss b/_removed/nw_s0_contagion.nss new file mode 100644 index 0000000..1092862 --- /dev/null +++ b/_removed/nw_s0_contagion.nss @@ -0,0 +1,92 @@ +//:://///////////////////////////////////////////// +//:: Contagion +//:: NW_S0_Contagion.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The target must save or be struck down with + Blidning Sickness, Cackle Fever, Filth Fever + Mind Fire, Red Ache, the Shakes or Slimy Doom. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: June 6, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.71 + +- disease made extraordinary +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables + spellsDeclareMajorVariables(); + int nRand = Random(7)+1; + int nDisease; + //Use a random seed to determine the disease that will be delivered. + switch (nRand) + { + case 1: + nDisease = DISEASE_BLINDING_SICKNESS; + break; + case 2: + nDisease = DISEASE_CACKLE_FEVER; + break; + case 3: + nDisease = DISEASE_FILTH_FEVER; + break; + case 4: + nDisease = DISEASE_MINDFIRE; + break; + case 5: + nDisease = DISEASE_RED_ACHE; + break; + case 6: + nDisease = DISEASE_SHAKES; + break; + case 7: + nDisease = DISEASE_SLIMY_DOOM; + break; + } + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + effect eDisease = EffectDisease(nDisease); + effect ePenalty = EffectAbilityDecrease(ABILITY_STRENGTH, 4); + ePenalty = EffectLinkEffects(EffectAbilityDecrease(ABILITY_CONSTITUTION, 2), ePenalty); + eDisease = ExtraordinaryEffect(eDisease); + //Make SR check + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //The effect is permament because the disease subsystem has its own internal resolution + //system in place. + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDisease, spell.Target); + if ( !FortitudeSave(spell.Target, GetCasterLevel(OBJECT_SELF), SAVING_THROW_TYPE_DISEASE) ) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, spell.Target, 60.0); + } + } +} + diff --git a/_removed/nw_s0_daze.ncs b/_removed/nw_s0_daze.ncs new file mode 100644 index 0000000000000000000000000000000000000000..993f77af451885836e39e32dd8e0ff21baa94a1d GIT binary patch literal 12558 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_daze.nss b/_removed/nw_s0_daze.nss new file mode 100644 index 0000000..7ba7b64 --- /dev/null +++ b/_removed/nw_s0_daze.nss @@ -0,0 +1,77 @@ +//:://///////////////////////////////////////////// +//:: [Daze] +//:: [NW_S0_Daze.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Will save or the target is dazed for 1 round +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 15, 2001 +//::////////////////////////////////////////////// +//:: Update Pass By: Preston W, On: July 27, 2001 + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE); + effect eDaze = EffectDazed(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + effect eLink = EffectLinkEffects(eMind, eDaze); + eLink = EffectLinkEffects(eLink, eDur); + + effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S); + int nDuration = 2; + //check meta magic for extend + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = 4; + } + + //Make sure the target is a humaniod + if (AmIAHumanoid(spell.Target) == TRUE) + { + if(GetHitDice(spell.Target) <= 40) + { + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Make SR check + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //Make Will Save to negate effect + if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster)) + { + //Apply VFX Impact and daze effect + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + } + } + } + } + } +} diff --git a/_removed/nw_s0_dismagic.ncs b/_removed/nw_s0_dismagic.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e2336d1f6243384612745506b18f3350c45a4ad7 GIT binary patch literal 9610 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 10) + { + //High-level shifter version - caster level artificially set to shifter levels + 3 + if(GetLevelByClass(CLASS_TYPE_SHIFTER) > 10 && GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OUTSIDER) + nCasterLevel = GetLevelByClass(CLASS_TYPE_SHIFTER)+3; + else nCasterLevel = 10; + } + + if (GetIsObjectValid(spell.Target)) + { + //---------------------------------------------------------------------- + // Targeted Dispel - Dispel all + //---------------------------------------------------------------------- + spellsDispelMagic(spell.Target, nCasterLevel, eVis, eImpact); + } + else + { + //---------------------------------------------------------------------- + // Area of Effect - Only dispel best effect + //---------------------------------------------------------------------- + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE ); + while (GetIsObjectValid(oTarget)) + { + if(GetObjectType(oTarget) == OBJECT_TYPE_AREA_OF_EFFECT) + { + //-------------------------------------------------------------- + // Handle Area of Effects + //-------------------------------------------------------------- + spellsDispelAoE(oTarget, spell.Caster, nCasterLevel); + } + else if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE) + { + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); + } + else + { + spellsDispelMagic(oTarget, nCasterLevel, eVis, eImpact, FALSE); + } + + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE,spell.Loc, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE); + } + } +} diff --git a/_removed/nw_s0_dismissal.ncs b/_removed/nw_s0_dismissal.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8a3230498d5feee7db9572663c3c2bd768006647 GIT binary patch literal 10313 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_divpower.nss b/_removed/nw_s0_divpower.nss new file mode 100644 index 0000000..71e8ee2 --- /dev/null +++ b/_removed/nw_s0_divpower.nss @@ -0,0 +1,127 @@ +//:://///////////////////////////////////////////// +//:: Divine Power +//:: NW_S0_DivPower.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Improves the Clerics attack to be the + equivalent of a Fighter's BAB of the same level, + +1 HP per level and raises their strength to + 18 if is not already there. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 21, 2001 +//::////////////////////////////////////////////// +/* +bugfix by Kovi 2002.07.22 +- temporary hp was stacked +- loosing temporary hp resulted in loosing the other bonuses +- number of attacks was not increased (should have been a BAB increase) +still problem: +~ attacks are better still approximation (the additional attack is at full BAB) +~ attack/ability bonuses count against the limits + +Patch 1.71 + +- was removing temporary hitpoits even from other sources +- the strength increase will always be calculated from base strength +*/ + +#include "70_inc_spells" +#include "nw_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + + RemoveEffectsFromSpell(spell.Target, spell.Id); + + int nCasterLevel = GetCasterLevel(spell.Caster); + int nTotalCharacterLevel = nCasterLevel; //Modification - we want this spell to use caster level, not character level + + //int nTotalCharacterLevel = GetHitDice(spell.Caster); + int nBAB = GetBaseAttackBonus(spell.Caster); + int nEpicPortionOfBAB = (nTotalCharacterLevel - 19)/2; + + if (nEpicPortionOfBAB < 0) + { + nEpicPortionOfBAB = 0; + } + + int nExtraAttacks = 0; + int nAttackIncrease = 0; + + if (nTotalCharacterLevel > 20 ) + { + nAttackIncrease = 20 + nEpicPortionOfBAB; + if(nBAB - nEpicPortionOfBAB < 11) + { + nExtraAttacks = 2; + } + else if(nBAB - nEpicPortionOfBAB > 10 && nBAB - nEpicPortionOfBAB < 16) + { + nExtraAttacks = 1; + } + } + else + { + nAttackIncrease = nTotalCharacterLevel; + nExtraAttacks = ((nTotalCharacterLevel - 1)/5) - ((nBAB - 1)/5); + } + nAttackIncrease -= nBAB; + + if (nAttackIncrease < 0) + { + nAttackIncrease = 0; + } + + int nStrengthIncrease = 18-GetAbilityScore(spell.Target, ABILITY_STRENGTH, TRUE); + + effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM); + effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, nStrengthIncrease); + effect eHP = EffectTemporaryHitpoints(nCasterLevel); + effect eAttack = EffectAttackIncrease(nAttackIncrease); + effect eAttackMod = EffectModifyAttacks(nExtraAttacks); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eLink = EffectLinkEffects(eAttack, eAttackMod); + eLink = EffectLinkEffects(eLink, eDur); + + //Make sure that the strength modifier is a bonus + if(nStrengthIncrease > 0) + { + eLink = EffectLinkEffects(eLink, eStrength); + } + + //Meta-Magic + if(spell.Meta == METAMAGIC_EXTEND) + { + nCasterLevel *= 2; + } + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + + //Apply Link and VFX effects to the target + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nCasterLevel)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, spell.Target, RoundsToSeconds(nCasterLevel)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); +} diff --git a/_removed/nw_s0_doom.ncs b/_removed/nw_s0_doom.ncs new file mode 100644 index 0000000000000000000000000000000000000000..da60278dcb086bfb1fd8fec9742a2943278b42c3 GIT binary patch literal 12410 zcmc&)dyG`o8Nc_=>@Kh?Zs~$30^`D>QYkMLYY{T+4ls3gmh23VHrjDr7Q4Fck_GYA zmuWTrVbWF;TeVHpG&Lrs(MX%7G10atroq%dXux!1Ok*1wZ6t;!)FRv8`F-cRbI#@N zP@<+1cjkWQd%wO03+qd*#xA9NWJT%nK$bCtnBWjDdtNb!HYCS#9&p z({lzEZOmp2h=0G-6a@RDsNF2IUVCW>;)wtD5l{xYnip{ zu!p5`h5J#<9SkXx9=YuAmhy4s=jcPx;Vg04YH0CfK>JRpec9~#@4^PpX5-o5@?{WW zzNohJlS&T2Y9gzy^H7dknw7OJ`BI@55h(Q6@;yD3TDN>J6}A;hQ0_w$*VP~< z-@lSCbWm23SgpA(6Sr$T=yVH>H6!i}3uUne4~c$IWoCYSuwtTI+BecWwiA$+!I6PI zdxrKj1<`96C~-_O9?ncLj*{V2(WfofA;to70lxcD5SO~)76{qG<>c}0nY1_@SBs%h z>z481+Xu$)&fh#dl2njHO;iJ&0;`!ywZC-{y_Vx*T1g#R7Purmg&iJAm{Nt0`6S(a zWsf9EA=%}VY%f+kl57geYM-Q7u3D0dXp58%3>D82HbcXr9%I&ZpZox4Ov_mv#`2}cM~pDQ+wl`aK58Is$1sW%qP9kQjG5@-pS+ zkTsGM=LQHapq$=9HQ$@xRBR+J&Pfx|=usO{bS%aUSwg?v2%cS)Ersr4zEsO^D3*%V zuQqTYc7Vn%Y|P8EQhB9#b6!%Tq+^xV+qh0Sj!omxNV@Ce&ZP7y-0dmhxjVcR6GBs9 zlqi)xi96FcG%_RJU?Kf;BK@3QSEp+v$#vLVk#tUO(k94k3}lZ9E>@_&PZ0_Sr{Drg z+*lp$j48P2mwvBfzL?TCBXW4YbVcbriFt)B*oU{3P+TvFGGKc9=d-9?6qxGfvb*%wne+fzhNjPaWeJvR^a zo(aO}Rh5ca?Tt932>8##Gu)?J?g^Uoc~U}|rXYCB-{03dO#c`!k>5ftffGcmmnE3o z+S!af-iZeg>O34z35pG^O?=-vFrKqxMQu|pUn=!&XPsB7eVe!TSD~jJiOB`yEH!eu z#Cxo-N?litAc98Xc4`S|eUu=4HryE+4`U~rnX@DKE+Qj?`FYrwO=K}VCAh(rc9w&< z1dXe8oDjr8*{GNJtg1?WNxdzNYs9Md1ELT* z3KrwcT-jc%c5ki~%J~hYLan@|yO!@O)J%Gsge?{-=KdgjnV#1c=EgcUgAM+Dn*Y3f zucsV35_P#rz0Xh7SzD*4>yjwLXPuhG5#e3XGgqCenAn&DkLh=;t5$Tl0lJ-Kek*{cdPrdy?u z+FNtTlZ$$a6{bgjp;E*Jiyg`~7rL*fA}l8y3sfssT!~L`szR9oSAyLF+`<@}i<`=Q z{RPWSSm(>#g?d{wJ=n>5@quUU^cm!iXyd90*)a1G;xDd4uRC<;joFvbX2iq^x3(~R zQr}-dvo2^RiinB)+nX;}Q5u{23YFT%Vt>Wy+ntiGU_r416bmt|mO*ss6~0gA5djtu z;aMUij+#D7(V`enkXA+IY^A{U%F`6;G<&-e?vqw&{^lNqM?Z)a!NZp&xHD!8PbPk_ zK5Z(3xT)~hCGdgRyms)3)2G*oXjKdJA4eUFu-v+K`QWj@g6Kc$rtRd=H!~g<2C4f?D`(gvhnDrm-i>_#gSFXYTbD8L?;Hks z{dR-F*NLnx9dZv^WJOH&`cLzNqLNO+WGw|z#U&-~+Q=TKMXqT4upi^LPcPhTA2DV> zX|60+hQ^!4(b0juL*^UrES=jcvW({B_!-v2ND=T-o0QE4RmM(VayY;`y$Kij-t-%T zvqm38{|uvex-jV;Eu{EBg~*e=>-vkR27`9RLzRmVbdU_Cz_`rh6Xe*-Ht1##6NAFY zkAEE1%g%`Egiafz`v?l8MHN_Bu~B7&{-0HHnA)66mC#+L>$%g#Ec2B6F#_pL7&}PBvhP(SX*3^5m1bPcV$|@WJ{hLIrU+Ri^BdbNPfK z(N)R+a0}ruOFt8IorG)McGPp_Jb$8fILyw$rq^WRirYsvyLQnL**P%2c*>w;QTy2p zF2K{~-(S`(QytIuZ4(_eG-*2CN=hiB9IPF%%V--M{xq~DZ!{|X1m9;RvUIyK&(0UJ z;ix)N7~A6{V1yJ^Y7tBkWT~vU5U*g?UGB73q!We5VWwwoSH&V8TWne}X%<-5BE2X; zU!l1|rAdE!LW5@$LUBlDhW?1E!x<@K1)s#7 zqY!ap@Q9jC2HQQ1e9_@mEqYeA5F|z7fO>&qgZ{11y$UDUwU9rf*xS3cT&Pw1YD5MT zAm0$$SpwOPN4&GMJ<)EeOXQi})58jnDQy|%-P}Y9+*aSIyO8IBG%M@E@CNtY05$Ul zw(u#mn-%(sYf90r53*c-=8F!0)ll?>uILoi{^qVzHU9>O?y4)7o60XU-s1|!R}3$7 zG~7mhFPb25axa(j)dHuN!14KPIiEq06aaEf)Hi2W_^{rNSFj|i)?Z4P{$z)kIB9Xc~1N%EctRGBHtwIJ8}?{mda}~LTry$$b3T( zz0I z`2^p)lgcEHZzQ@mL3Gzyl!9(6>nOR6Gmjy5&GwA);}7H2hPH| z5Oa3Btn@05e2OPr16M?$m7wBC>X$TCE%r<#QBg-yQ3y-nVXn)6>En{yVT)L z_+BfwQKtQ*4Qq;o-vBg6a{ShQI7{~CNOmWvKm(6c+b1MDfa35+hJlld<)hZ0a3Oxn6NR?FeO997uyJ4AKhfI~6eR3tYjyAft#)^R+8hm? z(UK-7Kb~;%322K=O&k~4d|dZ`JV*;(uZPCej0toiG>84r9B@M;HHGk!?;)xuho(0P zIcX0~kT0RML#o@ZQ3k3NN^+I0MWvXuFWzNm!=-_-LMftla+N7suYC~&T80{6H<4Gm zrfSW>MM{rn8T_(R5xcMwEaKCIs>&yjVZ)e}X+baXkfkWWN9;<-Y{bgFYo=VERck|5 zqJ(O77FHObRcCs_*Gi6}Q?eQ*sT$akU?omfUp0HaQkjlZQKI4}u7NCeYW?0l#TS_M zm05}b8Bc2BWk$-L8$O)KExmWyOGYqts?Vk%7)flgs+WeJ`gQRMe2`7}5e2R&n6Jp? zdWMH>2`%&@=6})R_H)!CG{?s@ErJIUTIkJ89QFpj7(GWVf>SA40CX~-5bSK?H`_gb zr=kf>)`NdvFxKW2CS%~QkD7JDhn(1~s_PT?lK9q3?!4WrHoarPb&N0pdHe!{$&9Nu z_P$B$RW(Ut`-~%8Zua~}mb91}-$1A<^y$dC0MvdbFPluD?|0v?c*G%ApB5D_<_|%T cpnht8Qu8SeW|J$n3?}?>XG1ta2!6WrU-y@1p8x;= literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_doom.nss b/_removed/nw_s0_doom.nss new file mode 100644 index 0000000..d16aa65 --- /dev/null +++ b/_removed/nw_s0_doom.nss @@ -0,0 +1,98 @@ +//:://///////////////////////////////////////////// +//:: Doom +//:: NW_S0_Doom.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. + + July 22 2002 (BK): Made it mind affecting. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 22, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- missing saving throw VFX added +- immunity feedback corrected +- SR check moved before saving throw check +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +effect CreateDoomEffectsLink3() +{ +//Declare major variables +effect eSaves = EffectSavingThrowDecrease(SAVING_THROW_ALL,3); +effect eAttack = EffectAttackDecrease(3); +effect eDamage = EffectDamageDecrease(3,DAMAGE_TYPE_SLASHING); +effect eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS,3); +effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + +effect eLink = EffectLinkEffects(eAttack,eDamage); +eLink = EffectLinkEffects(eLink,eSaves); +eLink = EffectLinkEffects(eLink,eSkill); +return EffectLinkEffects(eLink,eDur); +} + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(VFX_IMP_DOOM); + effect eLink = CreateDoomEffectsLink3(); + + float fDuration = TurnsToSeconds(spell.Level); + //Meta-Magic checks + if(spell.Meta == METAMAGIC_EXTEND) + { + fDuration *= 2; + } + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Spell Resistance check + if(!MyResistSpell(spell.Caster, spell.Target)) + { + //will saving throw + if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster)) + { + //* Engine workaround for mind affecting spell without mind effect + if(GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster)) + { + eLink = EffectDazed();//force target to overcome the spell effect and print immunity feedback instead + fDuration = 1.0;//for safety + } + else + { + //apply doom VFX only if not immune + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + } + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, fDuration); + } + } + } +} diff --git a/_removed/nw_s0_fireshld.ncs b/_removed/nw_s0_fireshld.ncs new file mode 100644 index 0000000000000000000000000000000000000000..82353e185509e75199e506162275f3d77d148d92 GIT binary patch literal 3267 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 Whem1&;U(Y0R8Jn7ULs^B@BJ5c6dr^C literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_flmlash.nss b/_removed/nw_s0_flmlash.nss new file mode 100644 index 0000000..3746535 --- /dev/null +++ b/_removed/nw_s0_flmlash.nss @@ -0,0 +1,72 @@ +//:://///////////////////////////////////////////// +//:: Flame Lash +//:: NW_S0_FlmLash.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creates a whip of fire that targets a single + individual +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 21, 2001 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + int nCasterLevel = spell.Level; + + if(nCasterLevel > 3) + { + nCasterLevel = (nCasterLevel-3)/3; + } + else + { + nCasterLevel = 0; + } + int nDamage = MaximizeOrEmpower(8,2 + nCasterLevel,spell.Meta); + + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); + effect eRay = EffectBeam(VFX_BEAM_FIRE_LASH, spell.Caster, BODY_NODE_HAND); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, spell.Target, 1.7); + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + if (!MyResistSpell(spell.Caster, spell.Target, 1.0)) + { + nDamage = GetReflexAdjustedDamage(nDamage, spell.Target, spell.DC, SAVING_THROW_TYPE_FIRE, spell.Caster); + effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target)); + DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target)); + } + } + } +} diff --git a/_removed/nw_s0_gate.ncs b/_removed/nw_s0_gate.ncs new file mode 100644 index 0000000000000000000000000000000000000000..bcc2367c2980724558f2ae2364839d6d13db5fda GIT binary patch literal 3304 zcmbtWO>5jn7@iqv?by4Gwemw8T%vw9~ zdbe*bt}@m*c#qM)Qyvo&_;G~(QQz-eW6)?`XS3}1`1lvnbfiQ)Y&n-CwlOEadXT-i z%1P%h=8C54$V2@0YK;9TaP$vzArf^D;P)K~c%`LhJubgrFc;2_+zDgkn;PSb0_sQ1 zotN?px#JxiPkOIaNXry%x-~Y_A8ZeI``OO+i*0@I|?=tZ1gla(!(xOR`lzT920~io^vaM3JII zvdunTP|Oyw(_?H2RC7&7Px*}|*;%CjO<26Hi9?x)VSMXyaf1BndLwuAF)4D)+4(-CuYE{`bQ_oLYenle5@=_LM5%HYGLE7_UO(mZa>Q7Q?+*!=_zuq1U zcJ}tZB4?*W6;hV9+OTG#AQGH{$`)F(U)cInrgd2~W9Ygwo)+s8k@yQSs)=cERN#=RysO%rHdC%BJpgjUPr&B?`bxLGTw4Cu=A*@fV zu-r-$7mSHfY>M3i1?tL%St3Hsd!r>I;#Y{5i(wjct+CD4dqEtBoj_xVyk*rG=IX@} z%~H96?s_NuEDU1HKyi);+Jx^;yTYScm9QnpD+jCcV|s%C=isLsq<+``JgjnOdQw(Y zd^f5nZ7kG`x&*x4C!6!hM$iuZDDzjtC`|8FP^h+f1%=hNtSq&y5;kXx5fzEmSnJ|C z$`M;;p~`!n<5to8Yv{Iuu;}Jj>7`I(GKeVpKXjH^s7k|Ju;l%1<^7GR8{?`xWw)*3?qRw*3^%auPl>hL@w2 H4Uhc?j%(A? literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_gate.nss b/_removed/nw_s0_gate.nss new file mode 100644 index 0000000..464ea41 --- /dev/null +++ b/_removed/nw_s0_gate.nss @@ -0,0 +1,76 @@ +//:://///////////////////////////////////////////// +//:: Gate +//:: NW_S0_Gate.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +//:: Summons a Balor to fight for the caster. +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 12, 2001 +//::////////////////////////////////////////////// +void CreateBalor(location lLoc); + +#include "70_inc_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + int nDuration = spell.Level; + effect eSummon; + effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_GATE); + //Make metamagic extend check + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Summon the Balor and apply the VFX impact + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + + if(GetHasSpellEffect(SPELL_PROTECTION_FROM_EVIL) || + GetHasSpellEffect(SPELL_MAGIC_CIRCLE_AGAINST_EVIL) || + GetHasSpellEffect(SPELL_HOLY_AURA) || + GetLocalInt(OBJECT_SELF, "cleric_henchman") == 1 || + GetLocalInt(OBJECT_SELF, "X4_CASTER_CLERIC") == 1) + { + if (GetCasterLevel(OBJECT_SELF) >= 35 ) + eSummon = EffectSummonCreature("NW_S_BALOR2",VFX_FNF_SUMMON_GATE,3.0); + else + { eSummon = EffectSummonCreature("NW_S_BALOR",VFX_FNF_SUMMON_GATE,3.0); } + float fSeconds = RoundsToSeconds(nDuration); + DelayCommand(3.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, fSeconds)); + + } + else + { + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, spell.Loc); + DelayCommand(3.0, CreateBalor(spell.Loc)); + } +} + +void CreateBalor(location lLoc) +{ + if (GetCasterLevel(OBJECT_SELF) >= 35 ) + CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR2_EVIL", lLoc); + else + CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR_EVIL", lLoc); +} diff --git a/_removed/nw_s0_grplanar.ncs b/_removed/nw_s0_grplanar.ncs new file mode 100644 index 0000000000000000000000000000000000000000..5ac6bfb4fd1adbdc65cf89636e5c3d3cc1eda96e GIT binary patch literal 6960 zcmbtYU5H&*72fCEb0=-?O)@4iiJhdmPC99grshXY!D@1I@3Fb`&JXwA%tTO*)BI@2 zWF{olwl6A3eJTh=1i_~w_~Jvv(pTw2Z4pI~sHuh$iVp$%P|7?^OJMx=xAr>s?2~g( z4NXX9&f4qeTi;rH?S0NntKXPE{P>}h#!MV~*x=6t4HJ&>Zza^f^1L;wnjOo}C1)2e zUs=5P-R0!mGs(I07Z$(2^ek4k=2o7+a`=Fu$MMgb3A4Vw{uVq}tR(7AR`%Lh^*#3K zNy`55XaJpCCJM*H@u*^#`Tt+5#=IJ41b6a+9tHUC=cZzPyl()l z*F9+<(%^9$B=}o2W(^Tw5D>ubO;U&xd;%&Pl)pF73ALGpq@T?9W?N4mflWVRdBCZZ z$GS9MJt+El+l@op5vD84n&(dKr;s*j&Jl5~@9vp-0B@nF8$)69bhL-`d-^<#&UYgf)MEq!lg?`;%1@EQDhX zPvy&CaqqFi$y~D=Pon~HFF^zKla~D6jpySozQNZe@4NI14C+d%TR03JbkY`==r#^9TX+&D?(F~by4T$GFF0k21; zG5jfoy;SUAdbZv9Mknrh4)Xg5rsIs=Zk0q#CmnsE;90Y>IB9RdU?<~D$Aji{^Qlf* zxU?s2MZ;gXieh51X6O>~_HFo_>d(ckPP3adPju$v&chP8tDOx=%144_f6f< zt}IfPuw4@AzG%`R$Zj-p#+cnI_0K6vL2!XCq|{B}=#VMU#ht*Pb?g_r_3dj~utlb# zOrG3*g(G;iA!ii)U=zF~mv)TC>@a0Rrk5hS^~QPvMN{(tx;Fwd<4N&G#tHheC)Ia~ zw>)V@bfXm;tGbD6nKv8E)xW0~Jv!Y(74)vEBA4HW-q@AXHl0`2bM$*v=TDwP@a*2Q zGZVaP2jLqU6_=R52q5?ex?jt?WcFsDXVEHC+D1z%o45Ug@5zkQKc!17$6hYM z6G9x9C8S)N9K+$4sRtB>J~B*+iYu+_2!GbV@s2ZxlBbepw>!JQ4bUIVo;uwdfKPW< zq!--th$!nNJ$!s9L#$dsv>J`ai4xM`8B6)6L1%y*P@!;h!`)3UP+9M$H*DHemc)yy z^d)!6K{(nDZL+9Q1G$P&C*6s!3(EK2J6 zF)?3s9?&wH`RK}@!S|A?c?2(${e{k;bt;KxnkTz)GBejonzM0Y+tW5|C+^#CG{GOp zypFJJt$jfcg%l7y3OKEdy{6_*Ku|bW`MjN=8#E~p*q}ps^XgUIf7PuKB%VK zQK!lGXNP=GpY9Gi$*Fh-+*`t@o9&snPqK|W2fT5Rdlg~~YygfL@JK$q_i5WenP=vPi+2WEQB-}dEvLsQ8rby07y zzExTSNpnN*;}Z6xfa4R)sJH2`o-vek*dLjm>N}gtS_BtZGVH z+uvk@e^d}WpD_`C>z<&mggz>ImHUY;^o#B`LwKIC{q*~aK-{fgp#7o!Nz-RIq)o3k T-0|@~Ns-UFt2{pLG|c}1Hh%~| literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_grplanar.nss b/_removed/nw_s0_grplanar.nss new file mode 100644 index 0000000..1d21b0a --- /dev/null +++ b/_removed/nw_s0_grplanar.nss @@ -0,0 +1,114 @@ +//:://///////////////////////////////////////////// +//:: Greater Planar Binding +//:: NW_S0_GrPlanar.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Summons an outsider dependant on alignment, or + holds an outsider if the creature fails a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 12, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.70, fix by Shadooow + +- added saving throw subtype (paralyse) +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = spell.Level; + effect eSummon; + effect eGate; + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED); + effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + + effect eLink = EffectLinkEffects(eDur, EffectParalyze()); + eLink = EffectLinkEffects(eLink, eDur2); + eLink = EffectLinkEffects(eLink, eDur3); + + int nRacial = GetRacialType(spell.Target); + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Check to see if a valid target has been chosen + if (GetIsObjectValid(spell.Target)) + { + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Check for racial type + if(nRacial == RACIAL_TYPE_OUTSIDER) + { + //Allow will save to negate hold effect + if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC+5,SAVING_THROW_TYPE_PARALYSE, spell.Caster)) + { + //Apply the hold effect + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration/2)); + } + } + } + } + else + { + //If the ground was clicked on summon an outsider based on alignment + int nAlign = GetAlignmentGoodEvil(spell.Caster); + float fDelay = 3.0; + switch (nAlign) + { + case ALIGNMENT_EVIL: + if (GetCasterLevel(OBJECT_SELF) >= 28) + eSummon = EffectSummonCreature("NW_S_VROCK2", VFX_FNF_SUMMON_GATE, 3.0); + else + eSummon = EffectSummonCreature("NW_S_VROCK", VFX_FNF_SUMMON_GATE, 3.0); + //eGate = EffectVisualEffect(VFX_FNF_SUMMON_GATE); + break; + case ALIGNMENT_GOOD: + if (GetCasterLevel(OBJECT_SELF) >= 28) + eSummon = EffectSummonCreature("NW_S_CTRUMPET2", VFX_FNF_SUMMON_CELESTIAL, 3.0); + else + eSummon = EffectSummonCreature("NW_S_CTRUMPET", VFX_FNF_SUMMON_CELESTIAL, 3.0); + //eGate = EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL); + break; + case ALIGNMENT_NEUTRAL: + if (GetCasterLevel(OBJECT_SELF) >= 28) + eSummon = EffectSummonCreature("NW_S_SLAADDETH2", VFX_FNF_SUMMON_MONSTER_3, 1.0); + else + eSummon = EffectSummonCreature("NW_S_SLAADDETH", VFX_FNF_SUMMON_MONSTER_3, 1.0); + //eGate = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); + fDelay = 1.0; + break; + } + //Apply the VFX impact and summon effect + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration)); + } +} diff --git a/_removed/nw_s0_hammgods.ncs b/_removed/nw_s0_hammgods.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e6cf891fe1f76a85b1a3295d6ea057ad68db1fc8 GIT binary patch literal 13356 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_hammgods.nss b/_removed/nw_s0_hammgods.nss new file mode 100644 index 0000000..2a9acaf --- /dev/null +++ b/_removed/nw_s0_hammgods.nss @@ -0,0 +1,99 @@ +//:://///////////////////////////////////////////// +//:: Hammer of the Gods +//:: [NW_S0_HammGods.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Does 1d8 damage to all enemies within the +//:: spells 20m radius and dazes them if a +//:: Will save is failed. +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 12, 2001 +//::////////////////////////////////////////////// +//:: VFX Pass By: Preston W, On: June 21, 2001 +//:: Update Pass By: Preston W, On: Aug 1, 2001 + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + effect eDam; + effect eDaze = EffectDazed(); + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + effect eLink = EffectLinkEffects(eMind, eDaze); + eLink = EffectLinkEffects(eLink, eDur); + + effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); + effect eStrike = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + float fDelay; + int nDamageDice = spell.Level/2; + if(nDamageDice < 1) + { + nDamageDice = 1; + } + //Limit caster level + if (nDamageDice > 10) + { + nDamageDice = 10; + } + int nDamage; + //Apply the holy strike VFX + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eStrike, spell.Loc); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc); + while (GetIsObjectValid(oTarget)) + { + //Make faction checks + if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); + //Make SR Check + if (!MyResistSpell(spell.Caster, oTarget)) + { + fDelay = GetRandomDelay(0.6, 1.3); + //Roll damage + nDamage = MaximizeOrEmpower(8,nDamageDice,spell.Meta); + //Make a will save for half damage and negation of daze effect + if (MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_DIVINE, spell.Caster, 0.5)) + { + nDamage = nDamage / 2; + } + else + { + //Apply daze effect + DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d6()))); + } + //Set damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE ); + //Apply the VFX impact and damage effect + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in shape + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc); + } +} diff --git a/_removed/nw_s0_harm.ncs b/_removed/nw_s0_harm.ncs new file mode 100644 index 0000000000000000000000000000000000000000..2dcae9d54354b6d17d20096e7bdd9b9a38c44345 GIT binary patch literal 11274 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_harm.nss b/_removed/nw_s0_harm.nss new file mode 100644 index 0000000..768f2d5 --- /dev/null +++ b/_removed/nw_s0_harm.nss @@ -0,0 +1,84 @@ +//:://///////////////////////////////////////////// +//:: [Harm] +//:: [NW_S0_Harm.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Reduces target to 1d4 HP on successful touch +//:: attack. If the target is undead it is healed. +//::////////////////////////////////////////////// +//:: Created By: Keith Soleski +//:: Created On: Jan 18, 2001 +//::////////////////////////////////////////////// +//:: VFX Pass By: Preston W, On: June 20, 2001 +//:: Update Pass By: Preston W, On: Aug 1, 2001 +//:: Last Update: Georg Zoeller On: Oct 10, 2004 +//::////////////////////////////////////////////// +/* +Patch 1.70, fix by Shadooow + +> touch attack removed if cast on undead (roll wasn't used in this case anyway) +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + int nDamage, nHeal; + effect eVis = EffectVisualEffect(246); + effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_G); + effect eHeal, eDam; + //Check that the target is undead + if (GetRacialType(spell.Target) == RACIAL_TYPE_UNDEAD) + { + //Figure out the amount of damage to heal + nHeal = GetMaxHitPoints(spell.Target) - GetCurrentHitPoints(spell.Target); + //Set the heal effect + eHeal = EffectHeal(nHeal); + //Apply heal effect and VFX impact + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, spell.Target); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, spell.Target); + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + } //if cast from onhit, feedback won't show + else if (TouchAttackMelee(spell.Target,spell.Item == OBJECT_INVALID) != FALSE) //GZ: Fixed boolean check to work in NWScript. 1 or 2 are valid return numbers from TouchAttackMelee + { + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, SPELL_HARM)); + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //nDamage = GetCurrentHitPoints(spell.Target) - d4(1); + int nCasterLevel = GetCasterLevel(spell.Caster); + if (nCasterLevel > 20) nCasterLevel = 20; + nDamage = MaximizeOrEmpower(6, nCasterLevel, spell.Meta); + + eDam = EffectDamage(nDamage,DAMAGE_TYPE_NEGATIVE); + //Apply the VFX impact and effects + DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + } + } + } +} diff --git a/_removed/nw_s0_heal.ncs b/_removed/nw_s0_heal.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e7821ffc66678d3dd05cac907ddc71b58e2c7f6c GIT binary patch literal 6999 zcmc&(U2Ggz6}~e&yLP;;YXv(s4N0eV6Ch2RxPhc9sUv5zNtW8{$h*`C6^6~)DQ=Bp zIcXaT2r4R+2OfY*{6$F33y>ECq9BBLKq4x6aHTvLH5FFrLy-a$HL8LXffMuH@7y~( zcRX%EN=2;f`ks4!zVmzUjH{(u_{iXWyACL|abmN=zxGfCd9`8o>8RQG{9I%DvDs+y zSTs3xyz%7BDeSCI?VO$)^b7pS`SwTF>$fRt?7mlRR4Xeh7ekd-YNztM@nczYK~7uc z=P_)*=qCt=NXU5*zN}HHpLkp>a?vM?OI$qRQLe8T-UW5uOi<8j$-ST%yg&N=Ic_~n zMqwWlHfX+bY&KxxDCH1^k3zyK_R zG_6Q_!;)zA3iRkO1cF}ODH>d1a*DHqf(&|lLoy*cVu6B;W+2W>sK#<+gS265`2hE< z=OPS{OF_a(%V0t3BrXM;bP)c$LlP&SYX&oc{Cn7Zw63$1UZu8z<(ePL~ zsvNG4jhBr!Q9WEOl@Xh_wa2^tLfFRgR-t&wq#`dwdtIkwT?ehep&;0gb=Tdra!-r; z(89vYy?0X*;gnEYoc5b|e*|P(fJ}ghi~JlNuGZoE;jwZpI#e02)ms4jCF0h(1{K<@ zHPMB;+?Z@6gRQLdWM~T=7%of2u;@rwHhLJEWFvuAr%rl1Vy5@KrzB$fGyDz!zZC<) z;$xEBj$YA;9D%ssXOOUPgR~a^P>LTq3j3O8Z{8dd(-s!wZ}>d}*e>qd*&GV@HDCV9 z%^_2Nu*NMf#8*5S!|y@pEfET|P|rX%HrhbE5v8YM2T4Rlkhr}Y(Rcv=``E$vCz{CS zNxJ#pFlmP|eq9Pe87S1Q+GIkC%XXMu(<%#RBwQcVlMg$zE^Sr!^2&c()UOoX{PhCe zucY0)V!tF!X}4cM>3f5oj%Hh&v@n-U9VT+cNvmS{d><};pBhaN0+nuh=D?LC8`0_j@bZeQs2-9bI%Hg z{@pvXLwd&oM9v8qk{n)rTqR1z46XQdvhJni`boEa+taF*+d|Vp$E~FO?hVmSFUe6G zkG3G#H}Hy_95{=~YQdmo^>rYJW)>lAv^-NkZFy!b-0u1&7_H}77$2u3z*r5&5BR0g zs>NG@mb&dY!Z-AumkCKvwR@&&P-`*32sqMQiA zMiz6eHC3^RWt%B07R_c8T5Hrd_>x9tNZ&f6>U_#*&KUg`p(7X>*9uY-*9!O|6~b6a zbZ)}C7yVlUlu!_r)lH{5Y4{31ubBhO#!ma_4$BSsSH1pR zYWqRh@2HH9exh2A>SGa^p#;p2dgd-6RleIi%M|TM*eWH==%L#gt2cGUb>>)ieW?<7 zqIFVl0hf|tWkTpZT1?->oC}+G4&!E*xrC`TO&8CwU4H1A_I~+}rr)15odNAH$$chm zlZ|OBTrF_nT5;+4J9lt>#pQ*P2pjeNLMMSY_iA;xUXC9YY|PEm8S)|xL19~b${gsk zqMiAOIiYx+R$LkxuGP|d?Ug}4JFLxxYY=t9UWWCiG`7D3I?Tn&qT{#invP<~(0YYC9E$Q@ttHu zy-C&ggfNp;%H~mc**spM^0k2f8rzycq;J|?@SG$MnRYfpYB((51{$ z)bJbBZn^m<2h^fT>gyV2;p61gcPtcCt@*hVCuUNmMFtZw^@8IClPISRY(dVe7Hv5t z2lgdna!H%azry%@%EZU!;_L6Cxg2XwI^$~oGB2Ae)_DzRxHym~HF<*;M@s|oCJYec zLCFzF-5)8i)fG7C2xOJQKV1QMl7N&|a2H&GM;w8S%2&_30u@Ifzq-HFF;@U-OF$}Q z2n@Ocbt51}*yai_{wOnkFPo_$WdbV3i(E=*@%Lo1w`G6|wS+h)d7hUk>@!QVB^>Q}* zaykJ59lT1kXQev8ni#97J24w7Pi{2n!Npc; zbkFESr&6=%rshI2HPTZ^FZC`Eo;);NBISCh%t?>(MKV1lf5VaY2)0V?qjK_iKy!!& z>b#Gi{r2wzEC`oFtS*ax$w#%XqJ>OahFUrE_Iq)Inb+T`>kTbF$InUF&8zoSCnDUQ x$4V94&7;xbTD?3@h0Fn_4j1sr5<6C(vv{COc(ql~vdATp)~99Kl|&X*7Z^W+oWPjLP(zIk*@vkZSwl_xHT-x#vAS zE#S5Y;okfHd7kI@{C%JE9ts`B>|^WJtlg$m>w;wpe`>NSs8S1uo+*`k4;<_rczmeT zx3ARKzrXjX!NXW-jIA6wxXw@WZ_2lSW!$(*kz>Or)e<#5J$)go{B)4kLaLPN@$7aC z29)36Hv}oY#?O72JmW_uw#O%a&k1btz= zd4tcvc@_Kn9yw_g z(>R|^lmF|MKbb-rmR5NhMzGxn+pRB*UJQb^(b0?AjKO9ST}vQ(Qe-WzqYmD<*qB@) zqe^*y_M20hulHMmlI^=gSKLTd_Ns6Dz6>FW)2~5WI*lk!7)}R-6Cjtx>cF4L5+dv` zb|d+?F;*bx)Cv;Ta4mtRB3y)qRvZ@FziQZd8qE?#r>!6}!~i$@i;`eqmEiDgoEipO zAe<#^x>DQ*)Uxe?2FTfre~&E1hx&y0nF3*3evcW!Ivgf~tZ=(dcUJp%KtC}Ty_V{| zy;{xi>1Fto;-^&5s-Z23Y=O@J=2gF1BI4&_MSjlecCLCLD|P~eu5W3f`Q6ovM^voy*%6Nwf8D&T_U z1a_8yCJiurH!ZhNgP=XD)WYSk@joQ5K`tONSxhQ1JZQx5mJUmQmnDdaEMcRtT(q2_ zGGmntpnpczuNvwb%(j)}G%02wJ$4FruBT-^YqA3%o{-wsP^V3O@AiDLeOqU))SWBl zi#?^{?p$YQsbgoZ<8u@XFd#7}0rYHzeyWp8);O4@$v%ah%QmeowRh!8`5lF>?wsK! ztlJA6Ik0+H`)Gro&Pv{?tT>Lyt!9%N`Mg@IH_AN5^Tjbz$e?2oJdCp6BsM{uL@a9E zY4QFP$XbC+fQX9x+|^#_f$lrHa>df4`R-y*1z@FeP`O@$ff&LqMSRdx8%(hZ3(-LqOvAaV0z0_XG{%jrq{iv#bWw1`+Wd@Cj^4QXT-U+O~MmC z!sJ$;=1q#o#Qklt{os+_Qa*9(R-1^nu)zAJpJ~Bz-IfQ-ZP_j5i{HA{R_P(Q~t@s30d<2{0KR8;cp}>m$dG^%E=zi@gVtwo$^*@cbcn zRV^))sEoFSam3t8AD5W=nC^72Lg|taJvapXcZL0Qo$J3QK>m%Sn^)H?PE%U#lL&op zo$k5P`JtiS!~Oc#p@aQ{gNMNFjTE+A75DiIvqbJy+(_Z@U_FCCZL?sc*HHJ_b+-g? z7V*c~u&_i@g*Nct_WTBJ#ZbqXe}BZ$Ad`{wf8JjO8qn^S@@IoynFcXKR+yz<=3B-Y zF%#UkKy)YzBiH|-S3f?(s}mLo>HY%%NnXV+tQfD-L;ue#86%pz$r74N*Eb!ywn1pr zqwEi8l6w6+^G_)GjwIjh^JqLNk7y|5Q6w5{qyRN%-_in8$7F~8?HymO9DwjS$Dm~K zTFg--WK7YLCk&`%sbh4_oVR(Ksl>`XS(8EgEv5Z#!eQ&ZAt!2B+Jaz9%Vjw^(2a1b z1*7}6378ehEJRqSXr_Kq(acI%;OZtAt!t7nK0!)=u^fyZ&`YCLV;=-s^0ws&-{5;% zDkL@4>Y27u&Lj&*5@U~Sg}06G2$ZqOMh{Di$%UHetn} zS!PUYh580xRHzi`4^F5$9TS=|LcdGsFh)XK!P!V#0bL|QXe+VKEogV9a`?P2>kta8 z!V)+ZO*&Oi!B_ctqtd1lh&J#E@gtnesVYuk;hua?ZdWN^D0Sy|?ChZcL@ZV}hA~pt zY~?a#AH-_CrRvN*DnvXO9HO+2U~`6%0V=%1NRAK$McU1qMRqsn|Kc^LV#^Ofer>Q?Mh zQml*#y}fnuPR!})yi+JQYfTfTW))p`oayotSG0F_PSGEYicWy`x9B>Zw$$3RVy+6f z>}+{CCo;Czt&D*=UynZ_vGX`87{CkZ;}fG_(c+e#5VYpInalMyW4Dl z@jT7AqqDtOjPtcEgMN0HeHYpww@GlMmnE_N)!<6N? z5tfsv=M6$qC~ry$v3a~g*WUL!8qkwl40@77~ikO!NeZlNc8m>(UIGL@xNri%z?KQ#Vfa6u?EMw zhTpJGgLMAU0ySow`lg1N{w#Ou9t#0gEPr))crX@P++ZxGPC8o9iE`RVG`A`_OZTr{x+O*A?K(vF6VEu*_^h@LlLjNt|by`xGF-@yHT^p05KYL zI0P~CYUJKZmtea?kQ564b_t+K1X5DKop%Wya|jY5U%liK&f8Na7Y)sQg3EXs>CC6xF_ZnE9A-JH~-pcH^KY*FBO4E1pd zkK#(eX;H+_qbBUewcAo(Vb~Ro9y;t2n>XS6klbVI@{`o8*-dy|l=kKE+t$NIIh%bs zodAIfUMJcU5*^qYDXXwE6p@!Keg}7R%I^y=JJCLr`4YyLHUwtEl(`MSfQ9(e=BV3j z&Cc0^nf;S9yHRF6Hq+jziqMp=uS;r+`jR9+)YpFmqxk~|M-G;FZ&DsUbhvVLLNb`b zH2PoW_?+?gMv5o5Sg#42L>>7$hq!1)MTXyWg1%-9be{S43LPgW;JC3TOjxA=*3`ET zOSC*}9IM#JzamaSz<#(|t6x#;=;=?L{r(vxX?ptRL?oWDZH3N>>oTWr-*1+w!G(%z zbk1l;$6Pb!y5@Y;HIh?sFZqrVo;);N;>@IZXo7rkrD;;5Tp+GcDnwl1I^5Sq+iYDwv6}5~EsM zr5#&YnGvHRMa52B16gR)%DsDnEzs**W(f+U9I3IF83|{u_q|wb*(;jEWCT@b`>s-I zFm}XRT-N=>*UAz2AeyE@bS75YS-R?DDC|YdouD{ymnb}aE0lynJs(41Z)QTb&tZ$9 zyF{U;5>Q}jQc(y_HnE$jo`0~SIUCOh_r74bK9ZR9fxAAW*E!!G@y+@Qp0JjLw_bAR z9ldI^cPzM$5hfrHUtlnpan;7!H*KtHRkFT)B_dpI_S`}i*O-X+ayBaTW&C#wU8%TW z>z%x<(2o9&+|B5p6B5go*u&Jz0`We)qu22%r5j~ditqbXpOBz7^}>-suGb?6!VS(` z#s965ycH99cnht;$i?!MEfXdZqR$J~QG73{){t|vql>#kj-e^hE_!$OEW{c9Z5B1k z(N=9E>A1}MP&rgB*C|STj-P#yTctiy*i*uFN>@i7mo=qb?Zuv4HyOgH;8l5FYbR@G XK6t@FL?~Lxd*rEze_ZL|d*uHD`b?y* literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_healcirc.nss b/_removed/nw_s0_healcirc.nss new file mode 100644 index 0000000..d580016 --- /dev/null +++ b/_removed/nw_s0_healcirc.nss @@ -0,0 +1,115 @@ +//:://///////////////////////////////////////////// +//:: 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 +//:: Modified 69MEH69 JUL2003 +//::////////////////////////////////////////////// +//:: VFX Pass By: Preston W, On: June 20, 2001 +//:: Update Pass By: Preston W, On: Aug 1, 2001 +#include "69_hench_lib" +#include "NW_I0_SPELLS" +void main() +{ + //Declare major variables + object oTarget; + int nCasterLvl = GetCasterLevel(OBJECT_SELF); + int nDamagen, nModify, nHurt, nHP; + int nMetaMagic = GetMetaMagicFeat(); + 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; + } + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation()); + //Get first target in shape + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation()); + while (GetIsObjectValid(oTarget)) + { + fDelay = GetRandomDelay(); + //Check if racial type is undead + if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD ) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE)); + //Make SR check + if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay)) + { + nModify = d8() + nCasterLvl; + //Make metamagic check + if (nMetaMagic == METAMAGIC_MAXIMIZE) + { + nModify = 8 + nCasterLvl; + } + //Make Fort save + if (MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay)) + { + nModify /= 2; + } + //Calculate damage + nHurt = nModify; + //Set damage effect + eKill = EffectDamage(nHurt, DAMAGE_TYPE_POSITIVE); + //Apply damage effect and VFX impact + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(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(); + //Enter Metamagic conditions + if (nMetaMagic == METAMAGIC_MAXIMIZE) + { + nHP =8;//Damage is at max + } + if (nMetaMagic == METAMAGIC_EMPOWER) + { + nHP = nHP + (nHP/2); //Damage/Healing is +50% + } + //Set healing effect + nHP = nHP + nCasterLvl; + eHeal = EffectHeal(nHP); + //Apply heal effect and VFX impact + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + if(GetIsHenchmanDying(oTarget)) + { + SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHP); + } + } + + } + //Get next target in the shape + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation()); + } +} diff --git a/_removed/nw_s0_holdanim.ncs b/_removed/nw_s0_holdanim.ncs new file mode 100644 index 0000000000000000000000000000000000000000..df660f67d126b2d4318eb0fbd4a4a237fe928269 GIT binary patch literal 12243 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 GS^pPtD>V85 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_holdmon.nss b/_removed/nw_s0_holdmon.nss new file mode 100644 index 0000000..e2a066a --- /dev/null +++ b/_removed/nw_s0_holdmon.nss @@ -0,0 +1,77 @@ +//:://///////////////////////////////////////////// +//:: Hold Monster +//:: NW_S0_HoldMon +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Will hold any monster in place for 1 + round per caster level. +*/ +//::////////////////////////////////////////////// +//:: Created By: Keith Soleski +//:: Created On: Jan 18, 2001 +//::////////////////////////////////////////////// +//:: Update Pass By: Preston W, On: Aug 1, 2001 +/* +Patch 1.71 + +- added missing saving throw subtype as per spell's descriptor +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = spell.Level; + nDuration = 5; //GetScaledDuration(nDuration, spell.Target); + effect eParal = EffectParalyze(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED); + effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + + effect eLink = EffectLinkEffects(eDur2, eDur); + eLink = EffectLinkEffects(eLink, eParal); + eLink = EffectLinkEffects(eLink, eDur3); + + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Make SR check + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //Make Will save + if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster)) + { + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration * 2; + } + //Apply the paralyze effect and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + } + } + } +} diff --git a/_removed/nw_s0_holdpers.ncs b/_removed/nw_s0_holdpers.ncs new file mode 100644 index 0000000000000000000000000000000000000000..53f93a18326c2699ad1b6ad3c7a5a9727ee12075 GIT binary patch literal 12609 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 HbKZXe7lxc9 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_holdpers.nss b/_removed/nw_s0_holdpers.nss new file mode 100644 index 0000000..8e54829 --- /dev/null +++ b/_removed/nw_s0_holdpers.nss @@ -0,0 +1,86 @@ +//:://///////////////////////////////////////////// +//:: Hold Person +//:: NW_S0_HoldPers +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* +//:: The target freezes in place, standing helpless. +//:: He is aware and breathes normally but cannot take any physical +//:: actions, even speech. He can, however, execute purely mental actions. +//:: winged creature that is held cannot flap its wings and falls. +//:: A swimmer can't swim and may drown. +*/ +//::////////////////////////////////////////////// +//:: Created By: Keith Soleski +//:: Created On: Jan 18, 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001 +//:: VFX Pass By: Preston W, On: June 20, 2001 +/* +Patch 1.71 + +- added missing saving throw subtype as per spell's descriptor +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = spell.Level; + nDuration = 5; //GetScaledDuration(nDuration, spell.Target); + effect eParal = EffectParalyze(); + effect eVis = EffectVisualEffect(82); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED); + effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + + effect eLink = EffectLinkEffects(eDur2, eDur); + eLink = EffectLinkEffects(eLink, eParal); + eLink = EffectLinkEffects(eLink, eVis); + eLink = EffectLinkEffects(eLink, eDur3); + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Make sure the target is a humanoid + if(AmIAHumanoid(spell.Target)) + { + //Make SR Check + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //Make Will save + if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster)) + { + //Make metamagic extend check + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration * 2; + } + //Apply paralyze effect and VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + } + } + } + } +} diff --git a/_removed/nw_s0_icestorm.ncs b/_removed/nw_s0_icestorm.ncs new file mode 100644 index 0000000000000000000000000000000000000000..b626c9cff30a00f1aef69aa7a76a035a0c210934 GIT binary patch literal 11817 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_icestorm.nss b/_removed/nw_s0_icestorm.nss new file mode 100644 index 0000000..a37c795 --- /dev/null +++ b/_removed/nw_s0_icestorm.nss @@ -0,0 +1,84 @@ +//:://///////////////////////////////////////////// +//:: Ice Storm +//:: NW_S0_IceStorm +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Everyone in the area takes 3d6 Bludgeoning + and 2d6 Cold damage. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Sept 12, 2001 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + int nDamage, nDamage2, nDamage3; + int nVariable = spell.Level/3; + float fDelay; + effect eExplode = EffectVisualEffect(VFX_FNF_ICESTORM); //USE THE ICESTORM FNF + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + effect eDam,eDam2, eDam3; + //Apply the ice storm VFX at the location captured above. + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, spell.Loc); + //Declare the spell shape, size and the location. Capture the first target object in the shape. + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster)) + { + fDelay = GetRandomDelay(0.75, 2.25); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); + if (!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + //Roll damage for each target + nDamage = MaximizeOrEmpower(6,3,spell.Meta); + nDamage2 = MaximizeOrEmpower(6,2,spell.Meta); + nDamage3 = MaximizeOrEmpower(6,nVariable,spell.Meta); + + //High-level shifter version - damage increases + if(GetLevelByClass(CLASS_TYPE_SHIFTER) > 20 && GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OUTSIDER) + nDamage3 = (GetLevelByClass(CLASS_TYPE_SHIFTER) - 17)*d6(); + + nDamage2 = nDamage2 + nDamage3; + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING); + eDam2 = EffectDamage(nDamage2, DAMAGE_TYPE_COLD); + // Apply effects to the currently selected target. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget)); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the impact that erupts on the target not on the ground. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Select the next target within the spell shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } +} diff --git a/_removed/nw_s0_identify.ncs b/_removed/nw_s0_identify.ncs new file mode 100644 index 0000000000000000000000000000000000000000..4d7e6d3db988d10788e318e127cf637d55f8a235 GIT binary patch literal 2850 zcmbtW&ubGw6rS1L^w)-3rO?`1yF}VTrP>;_UOa4*RTejGNtU!8WT~}cF%n5Y=*5dy zy$XVVhIsa*7ZLw}A|f7o@F1m!90K*tdppyeur3rEXm;Pc_r33Z@6AkBOEssybY*dc zF}rY)!QX(xj6VFBhWya`xp{^jBbV7EJ3c=C2A-y{@EZklTEyn3#M>;|K3XQcy5h9Y2PkINOw2Z1>(?OT>5RL~p_Vjc_~kmi9S zkVZDIML`s}wJ@rBVco4-eIghX8Z_t;obtBTvO@B!3{5hq3sgUl3A#aE2?;}v-oNA$0DLEJ$geOv zWCHb-sY#|ECnn>NOrT{V4J1XP+=gms$gtCsk_0xU04z6*K1Xx84k}JBFGcHa;8mal zUNv&d@wPJ~#Jj0k2V<*ZhQ33w6}Jg{Mf`xu zu-n?Mi7p4v8RHsj1}{itQZ*C>#g0VTdh6!!EU3MAO_J+7fs1AvldqEOQ@QIi%j2lnE%TH zL*{Wv+1u1YcuL4yJ*2d@s)ZOSA&>Ns4Zo&^^c)CCtf+_ht6>~MX9#T_HS$>BkZg-o z45x0?k!INVz?tW1dW3L@r4>h?%LR}jLA zIS~gF&ldzEJ`1``_@P(Pwr#Xl_o`LD?8z7quSkQT&N5try_616Su6XueXptk^zI`F z9l_k?QbtB~R3etxUWu@*JZd%|U<~tAywI(WTjW=;et^i_1^$(Z5`KQ;8TPHlaG%g@lMNGDIv?-e|Pj~w+SJF&fJ^1lgU66GMRVoIp6utk9+QY zl|nseF2Av~rqr0apzt#kC_lsBly83J`Q-)C7=KMot5&P^7c^7a##_s$X0>f@Mn7Gl z>_K`!Df^eg!W;xYr7wFheW=oDEmHh^goR)H4#A%kq_pNSRP_HtV*TOM{7Ku~&j$2+ zkt$D(^jzR+6KIj=F>MZ%xCW5sH}bBrfv+z;s$hvi!_LFffrx;8S`YdpEqZ>Y9qm-} z`c_h|t|f7$8Q0^rxD+>TC+i!v8xcKU6IT3u5@_J@tt&|>DTVb$Qi~eRu$Io~P_Y;sA^7~n;mA=aWW~fMSKE-Sy7&1E2HB>p_2zF$0N#_$e z5GkC$sVFi=$DsPFh>naFQ!06Dc+^H-Ex*#bP}v$oEpzj7kXj8LEMt zW~AZ%BQ7`?DCvW2Ft3yMjw2mzOD!|%jwDXu-rf5m{9t>hn;?w_NJAH8K&9%9T6T`r2)L-&ZnjP6|G}c_G$}?~j)~X9}2Yi^{?DvKEn+ zGbR+qn?)cqem-@wujuwY2O`}U;uQzCtHs60*dTc;(inD@aY+ySo&e=)F}@y0H3y)3AHj5-zKexE9_^?kmfl_+X8ruw z-hjb*`YA_^upHiq`?<3{sVnM#)2=8c7HftsVczZlbH2VF72>dzgzb~6bMmMpYY%hd<-aB)g@AiI1x*ZZuy1mPbdZTI*rBa`cbP({+ zF@B{Zdm;1-!yd5k{*riq;nbbj_4Cx3uu1XsLTNHXklm={j8U%|se4XQs&_nZjE*j( z)U|ZXWbC1fdFjqNyY)4$Hzre2CQsLWg@ri`UDvz_9eAu*R6k&Yc`146Z}X88 zO?T^QMcH=b&x_w_4KqOnikbyn-0O}eA9Pv3iFruK@_==I-Ya-z^zWg`3nO+rwfnl&YCXSc nGS>r8UP%t^R^W>X^=1DI`8Ez|9*F}!FX*?`znwT_TLtQWC*`(2 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_invpurge.nss b/_removed/nw_s0_invpurge.nss new file mode 100644 index 0000000..0e9760c --- /dev/null +++ b/_removed/nw_s0_invpurge.nss @@ -0,0 +1,63 @@ +//:://///////////////////////////////////////////// +//:: Invisibility Purge +//:: NW_S0_InvPurge.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All invisible creatures become invisible in the + area of effect even if they leave the AOE. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//::////////////////////////////////////////////// +/* +Patch 1.71, fix by Shadoow + +- disabled aura stacking +*/ + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "nw_i0_spells" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables including Area of Effect Object + spellsDeclareMajorVariables(); + effect eAOE = EffectAreaOfEffect(35); + int nDuration = spell.Level; + effect eDur1 = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT); + effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eLink = EffectLinkEffects(eDur1, eDur2); + + //Check Extend metamagic feat. + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + //prevent stacking + RemoveEffectsFromSpell(spell.Target, spell.Id); + + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, spell.Target, TurnsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, TurnsToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_INVISIBILITY_PURGE"); +} diff --git a/_removed/nw_s0_invsph.ncs b/_removed/nw_s0_invsph.ncs new file mode 100644 index 0000000000000000000000000000000000000000..5db8bc5fe63bca64d26d40bf01990ec237cfc74c GIT binary patch literal 3915 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 2.0) + { + //Make SR check + if (!MyResistSpell(spell.Caster, oTarget, 0.5)) + { + //Roll damage + nDamage = MaximizeOrEmpower(12,20,spell.Meta); + + nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC,SAVING_THROW_TYPE_FIRE,spell.Caster); + //Set the damage effect + eFire = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + //Apply damage effect and VFX impact. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + } + //Get next target in the spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc); + } +} diff --git a/_removed/nw_s0_mscharm.ncs b/_removed/nw_s0_mscharm.ncs new file mode 100644 index 0000000000000000000000000000000000000000..843cbf87b7d637a8eee6949b817f7297afc91866 GIT binary patch literal 14554 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 ex<<-gRNRQ{75+3p8=&eTpNF`A@W) literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_mscharm.nss b/_removed/nw_s0_mscharm.nss new file mode 100644 index 0000000..2a6970c --- /dev/null +++ b/_removed/nw_s0_mscharm.nss @@ -0,0 +1,109 @@ +//:://///////////////////////////////////////////// +//:: [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 +/* +Patch 1.71 + +- was doing charm effect even for players (replaced for daze in this case) +- HD pool check corrected (if found target with HD matching HD pool) +- HD pool decreased also in case of spell being resisted +- added scaling by difficulty into duration +- added delay into SR and saving throw's VFX +- extended duration corrected to calculate twice of normal duration as usual +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + 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 + + spellsDeclareMajorVariables(); + 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, eDur); + + effect eVis = EffectVisualEffect(VFX_IMP_CHARM); + int nDuration = spell.Level; + float fDelay; + int nAmount = spell.Level * 2; + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration * 2; + } + + effect scaledEffect; + int scaledDuration; + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc); + + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc); + while (GetIsObjectValid(oTarget) && nAmount > 0) + { + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster)) + { + fDelay = GetRandomDelay(); + //Check that the target is humanoid + if(AmIAHumanoid(oTarget) && nAmount >= GetHitDice(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + //Make an SR check + if (!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + //Make a Will save to negate + if (!MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster, fDelay)) + { + scaledEffect = GetScaledEffect(eCharm, oTarget); + scaledEffect = EffectLinkEffects(eLink, scaledEffect); + scaledDuration = GetScaledDuration(nDuration, oTarget); + + //Apply the linked effects and the VFX impact + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, scaledEffect, oTarget, RoundsToSeconds(scaledDuration))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, 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 = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc); + } +} diff --git a/_removed/nw_s0_phankill.ncs b/_removed/nw_s0_phankill.ncs new file mode 100644 index 0000000000000000000000000000000000000000..552f72e7966a9686078bebbb13f9449bf701e371 GIT binary patch literal 12848 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_raisdead.nss b/_removed/nw_s0_raisdead.nss new file mode 100644 index 0000000..9b03e35 --- /dev/null +++ b/_removed/nw_s0_raisdead.nss @@ -0,0 +1,35 @@ +//:://///////////////////////////////////////////// +//:: [Raise Dead] +//:: [NW_S0_RaisDead.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Brings a character back to life with 1 HP. +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 31, 2001 +//:: Modified 69MEH69 July2003 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 +//:: VFX Pass By: Preston W, On: June 22, 2001 +#include "69_hench_lib" +void main() +{ + //Declare major variables + object oTarget = GetSpellTargetObject(); + effect eRaise = EffectResurrection(); + effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RAISE_DEAD, FALSE)); + if(GetIsDead(oTarget) && GetIsHenchmanDying(oTarget) == FALSE) + { + //Apply raise dead effect and VFX impact + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); + if(GetDidDie(oTarget)) //Added for henchman + { + PostRespawnCleanup69(oTarget); + } + } +} + diff --git a/_removed/nw_s0_rayfrost.ncs b/_removed/nw_s0_rayfrost.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e625f6886abbbe3718b85a3c8c1b063bf509a0b2 GIT binary patch literal 11063 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 15) cMultiplier = 15; + int nDam = MaximizeOrEmpower(4,1,spell.Meta,cMultiplier); + effect eDam; + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + effect eRay = EffectBeam(VFX_BEAM_COLD, spell.Caster, BODY_NODE_HAND); + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Make SR Check + if(!MyResistSpell(spell.Caster, spell.Target)) + { + //Set damage effect + eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD); + //Apply the VFX impact and damage effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target); + } + } + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, spell.Target, 1.7); +} diff --git a/_removed/nw_s0_resserec.ncs b/_removed/nw_s0_resserec.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3b34522f51874cc74e94481ffeb2859f5376ba44 GIT binary patch literal 2974 zcmbtW&rcIU6rS1L7DB5KK>SgDOp0Oz0kImq2$s@F6RZiXK)h^FgqR@Vpphd66EFM$ zB8gXxi5KM$@W`PgUQ9d?jW-UOK*FJin)>FwneJ}0)=h*kWoEwjz3;tweKXlqPD~FC zTpD96^1743PrYDPh_x+0weQb8TA6#exNOhgv*#Zy%sp9p3_HzLJF6>0Mi_rhL;upe zxtAehQy+`5a=E-CSctJfW|`6tj+<6k{twGXrpWFoq3TxcPp%m)n6CpIOM)p2$PLhNMp<1z3rG=C^9V)XLo+Vb zgE(X;cF4d6aE$k>^!p&9k@qlRWe&kZBlw@R zC(>CvV~=OjC>v>D zeMf^ee}gzeD}`;DH^2nV3TU=b*!A-h^ZE%fzGEPMbMuuSUQmA^D><%_lSMT8m`L~; zbs?NGrABa+GSTLfipP~yRl*;t($}dWo~-;rmV$qHSE?vZXbO-S=ca zF;}mlmUu{bq3~4JRH;sNI(cH>fOgw(dL>NnR0_Gf`E<%0mXuVt_J~~4gzWq0y-50)D;9I zBnYpFn64`Pgfm-^}Y(Vp~O zoYzeF3A<;^hX3$INyqUB?o0WGqn8$Dndj(q^rNDroq|r)Kv$h5W1q)OJoPa;1>AC- zO^6v2ruV|NtdYsWE&?gRhg2NoK40a&L%t}V5&2*83)cl}ZlvOS?-4-FY|B7H|A-I| zmo5fz(ouzxsY{+7Ly&mfhBHGs@>R5DMB}ca2Nw*Qxe$hSHB?QLsPN CjW1;Y literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_resserec.nss b/_removed/nw_s0_resserec.nss new file mode 100644 index 0000000..b6d3b38 --- /dev/null +++ b/_removed/nw_s0_resserec.nss @@ -0,0 +1,40 @@ +//:://///////////////////////////////////////////// +//:: [Ressurection] +//:: [NW_S0_Ressurec.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Brings a character back to life with full +//:: health. +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 31, 2001 +//:: Modified 69MEH69 July2003 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 +//:: VFX Pass By: Preston W, On: June 22, 2001 +#include "69_hench_lib" +void main() +{ + //Get the spell target + object oTarget = GetSpellTargetObject(); + //Check to make sure the target is dead first + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESURRECTION, FALSE)); + if (GetIsDead(oTarget) && GetIsHenchmanDying(oTarget) == FALSE) + { + //Declare major variables + int nHealed = GetMaxHitPoints(oTarget); + effect eRaise = EffectResurrection(); + effect eHeal = EffectHeal(nHealed + 10); + effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); + //Apply the heal, raise dead and VFX impact effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); + if(GetDidDie(oTarget)) //Added for henchman + { + PostRespawnCleanup69(oTarget); + } + } +} + diff --git a/_removed/nw_s0_sanctuary.ncs b/_removed/nw_s0_sanctuary.ncs new file mode 100644 index 0000000000000000000000000000000000000000..384521b6cc634cda4156e249b4a8d42bc291b44e GIT binary patch literal 2859 zcmbtW-%Aux6uvXFyZ)F(w~#c=9JW+YOijXGBF5b*hGtcEhSeToFf)=iHg+NKrI%iN z4ubxS=uaqu2>$?yh#q|KA;gD$5VmvAnR}hPOaqb&?%wa7AK(4XId^8YdflTQnxPZ+@Jw<`MgvF*t<(3t7fK z>M`Iu0@E5q`N=X_rtND6Uz~zH|Ng^4_C?3VNd&edP~#S`KoX}IX5LfGkhS0y|_f6;*^#NIuUH5>BT;^%FsARY;*gLu)9J4Df@jK_>~d2?B8? z)F22NL_qp6L5BiDg&`>t)l4`IH4zqnOq2*&WD`;PYN@i%=AE7ue>@D#FDg$HWuC6nN?q`J7PLF7W$3XP6zc|2dgD2q@GyKcx5 zuqYA05A>)evca(eZK(1twK?2Tv7$gC*qV_SC3f2g1{RlD$FzE6gD32>LD-L11A9WI z!D@V%V@gcTlo8Q$TpR_@Yr;Xs^`db$SD5yW5+ait;<5}8aU*rRB%o&zhL!W4FLFlO z6zDSQ22Mp8+i(6WA5|zMGa#_9U;U{w}I0+*nvM=n~ZJ5yYJI*PW7Ud!fDJ zdT#JAMMApGQzT4}rJPd4N>FpGn^Cv0!WRcNN!X+aY1!i%7rV3nLvDqHBDXd@#|M>@ z@Vx(#GbuvaG2{alvR|O==a%lwFD+ACuo231E}6t7NKb_5RqcvE)#sFaGT_^!VhggP lt)zpt@KTWw7f|)C!$IVu&*N%?bSu)$)AhcBSH+3N{sKZxmL32A literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_sanctuary.nss b/_removed/nw_s0_sanctuary.nss new file mode 100644 index 0000000..bcad3c7 --- /dev/null +++ b/_removed/nw_s0_sanctuary.nss @@ -0,0 +1,58 @@ +//:://///////////////////////////////////////////// +//:: Sanctuary +//:: NW_S0_Sanctuary.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Makes the target creature invisible to hostile + creatures unless they make a Will Save to ignore + the Sanctuary Effect +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + //Declare major variables + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(VFX_DUR_SANCTUARY); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eSanc = EffectSanctuary(spell.DC); + + effect eLink = EffectLinkEffects(eVis, eSanc); + eLink = EffectLinkEffects(eLink, eDur); + + int nDuration = spell.Level; + if(nDuration > 20) nDuration = 20; + //Enter Metamagic conditions + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); +} diff --git a/_removed/nw_s0_silence.ncs b/_removed/nw_s0_silence.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e8ea49f84e5f942ee717459f258c0fd031d75ee7 GIT binary patch literal 11632 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 G-uoZcU6)b- literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_silence.nss b/_removed/nw_s0_silence.nss new file mode 100644 index 0000000..beff713 --- /dev/null +++ b/_removed/nw_s0_silence.nss @@ -0,0 +1,93 @@ +//:://///////////////////////////////////////////// +//:: Silence +//:: NW_S0_Silence.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The target is surrounded by a zone of silence + that allows them to move without sound. Spell + casters caught in this area will be unable to cast + spells. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//::////////////////////////////////////////////// +/* +Patch 1.71, fix by Shadoow + +- disabled aura stacking +- if cast on ally the effect bypass spell resistance/immunity properly +- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others, +thats module-related) +*/ + +#include "70_inc_spells" +#include "nw_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } +// End of Spell Cast Hook + + //Declare major variables including Area of Effect Object + spellsDeclareMajorVariables(); + + effect eAOE = EffectAreaOfEffect(AOE_MOB_SILENCE); + effect eVis = EffectVisualEffect(VFX_DUR_AURA_SILENCE); + effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eSilence = EffectSilence(); + effect eImmune = EffectDamageImmunityIncrease(DAMAGE_TYPE_SONIC, 100); + + effect eLink = EffectLinkEffects(eDur2, eSilence); + eLink = EffectLinkEffects(eLink, eImmune); + eLink = EffectLinkEffects(eLink, eVis); + eLink = EffectLinkEffects(eLink, eAOE); + + int nDuration = spell.Level; + //Check Extend metamagic feat. + if(spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + //prevent stacking + RemoveEffectsFromSpell(spell.Target, spell.Id); + + if(!GetIsFriend(spell.Target)) + { + if(!MyResistSpell(spell.Caster, spell.Target)) + { + if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_NONE, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_SILENCE"); + } + } + } + else + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_SILENCE"); + } +} diff --git a/_removed/nw_s0_summon.ncs b/_removed/nw_s0_summon.ncs new file mode 100644 index 0000000000000000000000000000000000000000..c2b7e9afca682d49451b3bbdec48f4de171d4df8 GIT binary patch literal 6751 zcmeHMO>7%g5PrM^Li&hh@Xz;I7X3UB zt2xH58wl`#Wl;z!2xP$0Z=}6xv22c&E}aRyz_aU(z;_x8wx7*|dzNFyK9k;pQt|Am zVEx)ktM$s-+N*%jYo=MUsnlfv#*iSiaz=@N6Im(JULZP*kK=cP`gMZQn(I$z2d?{KZ(VyEQ^B#$A3lX~E$>4z+1=tOQ z3b2@}5fKFPUWO_r{8F2i-u2ky5488Z91;>Nn?m;$y(>#^H zUx*7a2q?;H!J6QCJEutZg;E(A>h^_FD#8yaJ_u#NZeOYMEPHRZs%y(2>ABKsuCK4G z=a_jb13}!Tq5?8wHiw>NofWP9v{{fGg!gI|h~;RyBZ&jbF{X_H+_BLXJBEk~^X=8w zn(epkrPY=mAR6T`44#x6%hVfw;Rt5K!bOJVCd&l<|2)Z}CKczBVq(OYe4?7n)aDcu zGsfg4)nw7FD<;_(lPT52ooj?9!?+hZI&v>4>l0}ajA7O7w}e=v2*l5tVNPU$V+J-M z%d1r8(0d|D0Y|WO+&~DZajdo>1Qtzdt6=rW0*_f|gRmaW2G)dhgW33Ok|~%*K_a5% zsMrebw*VU%HOrapbA@i7QXsOa5RXcTFg9XWqktMb!t&C>^Ik0Th>WAa%dp#Us>-nq zY7362?#xW2RV2I_r1ynzJZR~-Q^*1XvSKuZJsx+B2)yjzI}?D<6l z{6+yRCv16XrP*FyZLjRya?gea_+1G2405;=Z~!^vU~jCxywZ+AJfR`pAVgyv5s#=L zih5IO3GP6=*5(u`d?i5X3yL%oN?VE)u0Yg%2k+QVA@@a$+jjj67td4bWiLaWw?K#X zwrIm#nxOTZtfE<{pai8863Vgt#)Sl}Je4JPp8H3m?E8?iiT{bR%L+Myva5?I|0!z};3M@%2LWbGY3hdjkz}!v> z>`=GB;NbvPe}vO+fknv3-_Qz7OfWXJDD|$ChkmKK3|DXbg`U@IwzC-~c__-4v=}>^ zVUmZU+z%RHXERLlP?Wo>0g4%h=D?jZ49$VbLs4#20}MwP_MeBM>`xk^xZ%4)k(kf* zMv?hgqb$7LjqXqseFCo2wzoTLtb1p5@2r?XEWESuR)R0v@STO8A;Ysw9D3>bOkK{< U2qB)3+`$^9|8m@=Z#@?K7mX$&fdBvi literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_summon.nss b/_removed/nw_s0_summon.nss new file mode 100644 index 0000000..d28f770 --- /dev/null +++ b/_removed/nw_s0_summon.nss @@ -0,0 +1,354 @@ +//:://///////////////////////////////////////////// +//:: Summon Creature Series +//:: NW_S0_Summon +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Carries out the summoning of the appropriate + creature for the Summon Monster Series of spells + 1 to 9 +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//::////////////////////////////////////////////// + +effect SetSummonEffect(int nSpellID); + +#include "70_inc_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = 24; + + effect eSummon = SetSummonEffect(spell.Id); + + //Make metamagic check for extend + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Apply the VFX impact and summon effect + + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); +} + + +effect SetSummonEffect(int nSpellID) +{ + int nFNF_Effect; + int nRoll = d4(); + string sSummon; + if(GetHasFeat(FEAT_ANIMAL_DOMAIN_POWER)) //WITH THE ANIMAL DOMAIN + { + if(nSpellID == SPELL_SUMMON_CREATURE_I) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_BOARDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_II) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_WOLFDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_III) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_SPIDDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IV) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_beardire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_V) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_diretiger"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VI) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRHUGE"; + break; + + case 2: + sSummon = "NW_S_WATERHUGE"; + break; + + case 3: + sSummon = "NW_S_FIREHUGE"; + break; + + case 4: + sSummon = "NW_S_EARTHHUGE"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRGREAT"; + break; + + case 2: + sSummon = "NW_S_WATERGREAT"; + break; + + case 3: + sSummon = "NW_S_FIREGREAT"; + break; + + case 4: + sSummon = "NW_S_EARTHGREAT"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + if (GetCasterLevel(OBJECT_SELF) >= 33) + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER2"; + break; + + case 2: + sSummon = "NW_S_WATERELDER2"; + break; + + case 3: + sSummon = "NW_S_FIREELDER2"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER2"; + break; + } + } + else + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER"; + break; + } + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IX) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + if (GetCasterLevel(OBJECT_SELF) >= 28) + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER2"; + break; + + case 2: + sSummon = "NW_S_WATERELDER2"; + break; + + case 3: + sSummon = "NW_S_FIREELDER2"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER2"; + break; + } + } + else + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER"; + break; + } + } + } + } + else //WITOUT THE ANIMAL DOMAIN + { + if(nSpellID == SPELL_SUMMON_CREATURE_I) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_badgerdire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_II) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_BOARDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_III) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_WOLFDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IV) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_SPIDDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_V) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_beardire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VI) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_diretiger"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRHUGE"; + break; + + case 2: + sSummon = "NW_S_WATERHUGE"; + break; + + case 3: + sSummon = "NW_S_FIREHUGE"; + break; + + case 4: + sSummon = "NW_S_EARTHHUGE"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRGREAT"; + break; + + case 2: + sSummon = "NW_S_WATERGREAT"; + break; + + case 3: + sSummon = "NW_S_FIREGREAT"; + break; + + case 4: + sSummon = "NW_S_EARTHGREAT"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IX) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + if (GetCasterLevel(OBJECT_SELF) >= 30) + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER2"; + break; + + case 2: + sSummon = "NW_S_WATERELDER2"; + break; + + case 3: + sSummon = "NW_S_FIREELDER2"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER2"; + break; + } + } + else + { + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + + case 4: + sSummon = "NW_S_EARTHELDER"; + break; + } + } + } + } + //effect eVis = EffectVisualEffect(nFNF_Effect); + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect); + return eSummonedMonster; +} diff --git a/_removed/nw_s0_timestop.ncs b/_removed/nw_s0_timestop.ncs new file mode 100644 index 0000000000000000000000000000000000000000..7deed45cd949ff96de6b00b26303c08942119ce9 GIT binary patch literal 3527 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 7) nDice = 7; + nDamage = MaximizeOrEmpower(6,nDice,spell.Meta); + nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_FIRE, aoe.Creator); + if(nDamage > 0) + { + // Apply effects to the currently selected target. + eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } + } +} diff --git a/_removed/nw_s0_wallfirec.ncs b/_removed/nw_s0_wallfirec.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8ddd9f0f52475a82fd577b3601462229f6371a86 GIT binary patch literal 9248 zcmc&)dyG_989(>VW0##}yTM(c<#kyeDg}XBp+O2+mMJ^BJ4<#3mYC}8c6X^;*Ilwu zz*eJ;kMKtmAB|69QW7H}v8GMY7-OP|*b)N?e_(*PA^cGjOlyh_CfHK&cYfbFch0#x z3o*74!rZy%e2?GvJm0-TxvLWGUjMOm+mu=!Emru`7^yJNznRefmHRo_oSHj+C>|R8 z;=aMrC&uI9$K&CVy@OAU9l*|<)Xw33>sKjCY`tGCP`7X2J{|Esdx-})u5*NxYD7UklhML%8ev*ga4XDM z4dlv_CUTcO`^Ik5^qrA*TXO)z$oLop#*jvT_$_AejaOh1cd>u~Ja$p))^BPoioE%rJYzvJP z4ZOQ(_}(u9MXgCuqXbiZ8AQ~Mx zHLJ6)821g7i~Th^wIL+kIZMYa+);c`=wLh-auu?CTA1*Hf>YOvE~J>RtE;E8QgL*B zJfv@e_K0$>IP`gqZF`qTOd^EQu?=@3!X(t72Bd0KttKW^b|D>B;r1LaI3OamQWd03H>R6g=mG&qcV5xYG_u!=dEVV>S=E^Bdgg7tt&U1d#DgzQL{*o zzl4^7suuAMgR*HnZa)ZU1xiLdsU>G$vE;m3$)>T2@pahLf;CX2g78mPYfgn{ z1rX!|-OmE1xJXb`Y$L<2ocjF;tTuwMl;*S&C06rE$LD%G+!<&O zC(Uew1v14vxe$`vbyLzKbq%P08#h_g{n{7D`W&wrjyuHjE;_$yBp_w1?uN_Fk14IWf3W@%JAGvyio@f>deqQ$uBGYXA_Cy}zhR6&nD99(JkXj27 zEWU4hslxQ=FIGyGYRo1UcXb!LK22j;PH1Di0V-Bpk9CS&Wd=M5af>&uqs^rq<-Y!+ zktU)$%UwliH%N64cCuc4;8{DXiP8~mjBrTQmZhX$UR!c1JSsQ|%xHLJgC52&uBp_sIehzycDSAVEXY zs0qU-DH#&&35!-dVk!l$w=#91HinXt!9i-kCT8#-z@u*^KydR(32sxn$YkQHts$K> zEyZS{-;$z-`|_KIj^4VpMO0f@;D0Y{TZZkz=CwmxqRm5Rzj|v++cNG$8@GZ8mt?w* zeniCF$!eyyW%aR9hLqaD#6T{x{)2Q;E=A^e-qM1R0}6tHoklhnIVc~TApeI`$3 zP3cg&YLFc<8U0AAON-1Ok(}b7iQ|FVr68(!b_m}V@wW?p{BRxzzm{^t@NW8uHrov9 z+MA{E@xcQl`rH0}BV%LxA??)+NUlow!nqM$hB4jx(q5aTY_?f2X8Kxa_vuZz$S()3 zCjHUbqYuJ=1Yt5==o}1}IDrP6+{vR^@K=Ebw0o1G$|X>3#DY>_Tv~VsJ#AtOu$e)8 zNCf%uPonyfX;DQ8L=QjT0f2f@1r>HoR2iZFXO)~Mn*XLs=q}y$bj{dfd5*q|en^)z z>+fxUhmmhd@!h?SF7j|o)e#+qI&!k%ra5+inyasCg_&oCLVpjA)J72kR4sn;&nJ8* zWlYoBY0a|N6ki9|ZQZuja%HwZ(ZVrSLVJWldsQZ`q_t(Uo0naXlLO-mNi7(8+|Oq4 zv|exi{bkKEtKlBsHo<5^QxD^laqY_61mrFS=VPkfwTI`KW<+#7Jqq|B4$XM)dNOGjmVfE4>Yq8sGxq6C^ z2onzmk14M+*qmV$fDZ2ok|P93k$OO#XQ{z|3GZQ3+nb=jsnpxMt6Yq$eKCn41jLU9 zW|ly<d*@qQArZi{Rtmdau;0v{rdIj=aNwYF83?9`Fi=IK=z!n_i zz-G?#8C4gKuv~uXs}6p3N7eVbs_Q`eo4e1T`EPLOE=;5bTr`tkn%>|J##an4G!<^6 zyjOG(^wUbIT<)wE<;|w!^LBYYgCZ#iGTY>{Z`Q^|x<70{Fy968O=Mawjt{EW&ki$F zVGQzz1W)^r6n3}5B5 z+F(|H?5*a_>MT{KUjqDz!*pJf>dotY8r3w2^EI$_1NFZo@ujR8DD?xeN5qXN-SrEWULY$;Cvn zYm6`XD;zd&TjOC!&{KNsFw==@)=->1F2rZ zo$?uWdkl3lUp?<);^bFe#A8E$xP17|b zO|XjgB0~u^{*gp>y0*miMijIHuqGo4B9B`=qF?~WD*-mqqg@GE#el*ez|59i3kb||M4Ake^TM0-@S1Efw{MPOjaD*hxB zc9EJ(;c)Wn3dV;a*_SZ{Zo-mz8-N=&;!l{P?jh@Tu9nT}Yu@SxSq(T$2ghnkGhqPH zO%?r;q%=M}au|0lqx&ZJ#e8ovG_n6c?bQj{;0iP7e~$NmF!A0%^^}&HHQ^ICkiX;Y z#*EN2^?qXj!pjmABG z4o9Z7B>X}?<>V8{mg}0hCTsi!eTWvEu7yU|j1F`vH0S-$oN_}WHHGj}?is?9ho*B} zxe*~YC^Yv|umX{T56Mk5c;GS7>*YQ2m{%zk6=1H=;&Aob5s4s#MqaNOdHc8(OFkQ) z)m#MxyE``}kA}Qx+5$j{RukRt!%2%au8%8yyW(Q+&c1i~s-t literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_wallfirec.nss b/_removed/nw_s0_wallfirec.nss new file mode 100644 index 0000000..d606a02 --- /dev/null +++ b/_removed/nw_s0_wallfirec.nss @@ -0,0 +1,71 @@ +//:://///////////////////////////////////////////// +//:: Wall of Fire: Heartbeat +//:: NW_S0_WallFireA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Person within the AoE take 4d6 fire damage + per round. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 17, 2001 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + //Declare major variables + aoesDeclareMajorVariables(); + int nDamage; + effect eDam; + //Declare and assign personal impact visual effect. + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); + //Capture the first target object in the shape. + + //-------------------------------------------------------------------------- + // GZ 2003-Oct-15 + // When the caster is no longer there, all functions calling + // GetAreaOfEffectCreator will fail. Its better to remove the barrier then + //-------------------------------------------------------------------------- + if (!GetIsObjectValid(aoe.Creator)) + { + DestroyObject(aoe.AOE); + return; + } + + object oTarget = GetFirstInPersistentObject(aoe.AOE,OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + //Declare the spell shape, size and the location. + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id)); + //Make SR check, and appropriate saving throw(s). + if(!MyResistSpell(aoe.Creator, oTarget)) + { + //Roll damage. + int nDice = GetCasterLevel(aoe.Creator) / 5; + if (nDice < 4) nDice = 4; + if (nDice > 7) nDice = 7; + nDamage = MaximizeOrEmpower(6,nDice,spell.Meta); + //Enter Metamagic conditions + + nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_FIRE, aoe.Creator); + if(nDamage > 0) + { + // Apply effects to the currently selected target. + eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 1.0); + } + } + } + //Select the next target within the spell shape. + oTarget = GetNextInPersistentObject(aoe.AOE,OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } +} diff --git a/_removed/nw_s0_weird.ncs b/_removed/nw_s0_weird.ncs new file mode 100644 index 0000000000000000000000000000000000000000..cde19ff22154b9bc43396e1058698e86fea49428 GIT binary patch literal 13039 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 literal 0 HcmV?d00001 diff --git a/_removed/nw_s0_weird.nss b/_removed/nw_s0_weird.nss new file mode 100644 index 0000000..5cbceeb --- /dev/null +++ b/_removed/nw_s0_weird.nss @@ -0,0 +1,115 @@ +//:://///////////////////////////////////////////// +//:: Weird +//:: NW_S0_Weird +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All enemies in LOS of the spell must make 2 saves or die. + Even IF the fortitude save is succesful, they will still take + 4d10 damage. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: DEc 14 , 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001 +//:: VFX Pass By: Preston W, On: June 27, 2001 +/* +Patch 1.70, fix by Shadooow + +- had double death VFX +- missing death VFX when spell killed creature lower than 7HD +- second saving throw subtype changed to fear (as per spell's descriptors) +- missing feedback when target was fear or mind spells immune +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + effect eDam; + effect eVis = EffectVisualEffect(VFX_IMP_SONIC); + effect eVis2 = EffectVisualEffect(VFX_IMP_DEATH); + effect eWeird = EffectVisualEffect(VFX_FNF_WEIRD); + effect eAbyss = EffectVisualEffect(VFX_DUR_ANTI_LIGHT_10); + int nDamage; + float fDelay; + + //Apply the FNF VFX impact + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWeird, spell.Loc); + //Get the first target in the spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc, TRUE); + while (GetIsObjectValid(oTarget)) + { + //Make a faction check + if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster)) + { + fDelay = GetRandomDelay(3.0, 4.0); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); + //Make an SR Check + if(!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + if ( !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS,spell.Caster) && + !GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR,spell.Caster)) + { + if(GetHitDice(oTarget) >= 7) + { + //Make a Will save against mind-affecting + if(!MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster, fDelay)) + { + // * I failed the saving throw. Now I die. + //Apply VFX impact and death effect + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + effect eDeath = EffectDeath(); + // Need to make this supernatural, so that it ignores death immunity. + eDeath = SupernaturalEffect( eDeath ); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); + } // Will save + } + else + { + // * I have less than 7HD, I die. + + //Apply VFX impact and death effect + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + effect eDeath = EffectDeath(); + // Need to make this supernatural, so that it ignores death immunity. + eDeath = SupernaturalEffect( eDeath ); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); + } + } + else + {//fear or mind spells immune + //engine workaround to get proper feedback and VFX + eVis = EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 1.0)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc, TRUE); + } +} diff --git a/_removed/nw_s1_dragacid.ncs b/_removed/nw_s1_dragacid.ncs new file mode 100644 index 0000000000000000000000000000000000000000..334f791ed8c537b61efa4c2b44f120f133c276a5 GIT binary patch literal 4481 zcma)9TWFj`6rTUGn>0z2&ArX_PfUuYskBw7h**-inBaC(x{1kyuua{zDm9i;t%wg6 z5k!iL4+=i`P&5xk#ruPZ74cFE^+B}S5`st((IBA&jU_go|2t>?-Pz10ZRl?1`_6sN z%$cNzGQs^jZrwhpRPD(QMgPhJ<;L;jx%!9Kb$(1WO`pg z8329JKs`ZUF;HL7R}C~K=<5a=7xWDSEfe&#ftCw8W1t%ZJ!7C1g1&2@m4bd?pjCo? zVxSuZ{nS9K1^wJWYXtq$Kof#~W1zKyo;T1sLBBK5dO^Q8&;~&-8fc@SmkqQ@&^ZHb z7W7vG-6ZI52D(|$KMb@*(7z0{RnV&j+9v4V2HGy@H3RJs^m;q>pjU^EtTDSbWZb2a z%v?$4tCGwaFbRvFmrF8FfT^|UJW!Gu1XE|xxw#}$4W@pzjNJ=xi_Y_4x-HB!n42uj7?>Ulb0?Ty3&S_{77G*SJDWdg2Klf-mp8@TPcz{o*G;T7 zEEEq5RTWMd?_=K&6E;3EQee*^dvin%>?e^B_6T?;u1_j0`kZj`xcwU92~^ds*CDHV z^eBT39y9aGM*v6Sm|YH++=0Y=G~gCJ7^2xlzMgfp)rfzMCtO1_SBi`lOtdS|$~h?F z@0z-i+H}DY>rWNyV?-lPF2pZX8X2efo(4{K+*Ar zw9^ykzYCJC?J2X%gWwg3oL(ao$PD)bZ!%Y#EW%2zhD-P~5~WJ%Y9tuv4kT$~8x~N% zN3<*~xea^;MAZgM0f6;{H8NRwN?Wj4uRtSBu2IxetRs&`6+liQk?8z{7UKJuL5#YgMD}T?-o(vkl#eb9-g~4}4^0TG zOAZ!PC!}&$fzk63g@`&q;p%aAGes#^cE^J<4wg?g3FK`QREoDuu6S!vDE6kw?b&;? z1F6*LL}qU?mCB5b4v+5}qk3Ld^dWy$(9;_ zDyI`xn1)Anz%xJ{LQ48R{UJY3b`%}k7p4Gm|L z>4CviGMnBzlpPpNX2bRj8+Ig_311D)StE_Yy^hjA`twNtJ^nr4a`cxeV%e{&k8e6> zMGu!PF26sh#o>@Mp;ZTsvup3id2rAg4i-aa4v*+vMfJmtrv7x{wlLnPHxa4a^9YBV zY`23e-zkcWo0WEl`X( breath weapon damage and DC calculation changed in order to allow higher values +for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+ +dragon's constitution modifier. +*/ + +#include "70_inc_dragons" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + int nDamage = GetDragonBreathNumDice(); + int nDC = GetDragonBreathDC(); + + //When used by a dragon disciple, calculate DC and damage based on their DD levels + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 ) + { + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF); + nDamage = 2*nLevel / 3; + //if (nLevel == 29) nDamage = 25; + //if (nLevel == 30) nDamage = 30; + + switch (nLevel) + { + case 1: nDC = 15; break; + case 2: nDC = 15; break; + case 3: nDC = 15; break; + case 4: nDC = 15; break; + case 5: nDC = 16; break; + case 6: nDC = 16; break; + case 7: nDC = 17; break; + case 8: nDC = 17; break; + case 9: nDC = 18; break; + case 10: nDC = 18; break; + case 11: nDC = 19; break; + case 12: nDC = 20; break; + case 13: nDC = 21; break; + case 14: nDC = 22; break; + case 15: nDC = 23; break; + case 16: nDC = 24; break; + case 17: nDC = 25; break; + case 18: nDC = 26; break; + case 19: nDC = 27; break; + case 20: nDC = 28; break; + case 21: nDC = 29; break; + case 22: nDC = 30; break; + case 23: nDC = 31; break; + case 24: nDC = 32; break; + case 25: nDC = 33; break; + case 26: nDC = 34; break; + case 27: nDC = 35; break; + case 28: nDC = 36; break; + case 29: nDC = 37; break; + case 30: nDC = 38; break; + } + } + //Done + + int nDamStrike; + float fDelay; + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + effect eBreath; + + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry(); + //Get first target in spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_ACID)); + //Determine effect delay + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + //randomize damage for each creature in AoE + nDamStrike = d10(nDamage); + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d4(nDamage); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ACID, OBJECT_SELF); + if (nDamStrike > 0) + { + //Set Damage + eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ACID); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + } + SetLocalInt(OBJECT_SELF, "ddbreath", 0); +} diff --git a/_removed/nw_s1_dragcold.ncs b/_removed/nw_s1_dragcold.ncs new file mode 100644 index 0000000000000000000000000000000000000000..f511d75e627b63e6f68cca7641691c7bf45b3086 GIT binary patch literal 4489 zcma)9TWFj`6rTUGn>0z2&2`&c|HN$3w3W6B6%j)c7ZXgA(j+Di!ZtB&Rcb7yS`i-< z5mbtb4+=i`P&5xkq+TCHtcaIVs1KsmmJmdWh*k+DXe`lq<~wILJG-+<6S9Bi`_4IY zZZqfKp}vvm-kmq^=vAuv`Bp_grIGUE_zisX%j=pjrW$6BXYQYT_{ijghh{R=l z2PYpre2kcyJm&EuJG&GtCbp_3wX(8umMjNhTyLWB4e>Cbho6ir^bFZ5ot~aLdSLR{ z11ud=>J}fuUU}3;IW?f3eD3PO=(A7 zuu#7|0{Wtb27LN^Nfv4vI&`l*Fh3HrH(CItP;LaPNmXQ4HMeq*7vf_`hEb%I{7(0V~HS!jcx z^A?&E^k)m*B|x>?ZQEVNP3KP|LL(5n{OEa+br+9K#R3vCtjzZUAjpavaTWp}M+ z{H3DId{O3$qRc5U3CBJ!7iAs;Q|-{XuPDl!0j}WYhwfRtIwdOq+xG1Wevt zsJlv?1k>)&c@9j6gP8$ygM%3b)9GMt2a|Fzd{b|6Fmb-K`IBZ*2pe>Hli%Gm6F%_$ z#9G5b@vu-8dfEgZhM^AF`qY*@*z?HVJdr*7Nkqc|0Z+xvNu@=XrzelU%|JYXDmu(s zv#QgKGT7iTb47)4;BXwX%j1;uwtr*?++qMjG`nc8XM8L!V=?U^H@})0c0D1t=jc!6 z>th1L!3v1|L=nrB#B)w>>urtM+k&E4pr|Sli{h5!j75-OpN9h|FB+dg(cI03`x+1I zx+E8#>~fj6B`Axx(O)y#^Cm7A)G0N#50t36Fj4?%!qc+EzYcv8`E(!w4Hk`H)-^UDGHwo6= ziqi9ZRzqM7DsP9%`5vgwTC(!a7(Sx+ifsf(`{Rke^}grxPR3ItqFO-Ffj6QQ|J!~E zm%EX@LKN9TYRlpKM%=R85#VOx;Q1=B)Kt@U+DLi+muAf=6wja9?=cOi{??9r36{wlV^%HgYn>C6m%RlR~~X zOzg>*4AbzajCcm9gAg_s?{_-vb*gmhcE0GyEOb|Oa=oS+@M(mMIc_uv zu{JJoe-TS5=*pfEaqT6D{wUi(h_Y_7UDVFS96LrRrJFg06}gKiIY=q|f$h<^xwV=a z3dWH+Q7lLkC6Pnct*HKyG?CwMS-vnz^K$#!8efaX8ueUf&u7H~wTy`z8qUg3&>KQb zbx!QcjEoPA_Vs7dLp{BN>CDjHzD&<>I-}cDH|#)qM87q7XRI)CYn=@P;a@@cr}_WY zmZNW`@MXWrKAv>W@?KoF`27As#}ONHB(!R!adz$9I1di%*n2#pcjx5~H=6q0$F{lt zW_uH!$~_NvxXHRbT=`y}XWXn*9UMI)BF%c-(#OI`%8437zS~#xy=QE2bRg589-`dq xgzxFOYbZT}WGk5i)^)%a9=Vuvu;?IJ<8TQf@i<(D+@dvz breath weapon damage and DC calculation changed in order to allow higher values +for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+ +dragon's constitution modifier. +*/ + +#include "70_inc_dragons" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + int nDamage = GetDragonBreathNumDice()/2; + int nDC = GetDragonBreathDC(); + + //When used by a dragon disciple, calculate DC and damage based on their DD levels + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 ) + { + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF); + nDamage = 2*nLevel / 3; + //if (nLevel == 29) nDamage = 25; + //if (nLevel == 30) nDamage = 30; + + switch (nLevel) + { + case 1: nDC = 15; break; + case 2: nDC = 15; break; + case 3: nDC = 15; break; + case 4: nDC = 15; break; + case 5: nDC = 16; break; + case 6: nDC = 16; break; + case 7: nDC = 17; break; + case 8: nDC = 17; break; + case 9: nDC = 18; break; + case 10: nDC = 18; break; + case 11: nDC = 19; break; + case 12: nDC = 20; break; + case 13: nDC = 21; break; + case 14: nDC = 22; break; + case 15: nDC = 23; break; + case 16: nDC = 24; break; + case 17: nDC = 25; break; + case 18: nDC = 26; break; + case 19: nDC = 27; break; + case 20: nDC = 28; break; + case 21: nDC = 29; break; + case 22: nDC = 30; break; + case 23: nDC = 31; break; + case 24: nDC = 32; break; + case 25: nDC = 33; break; + case 26: nDC = 34; break; + case 27: nDC = 35; break; + case 28: nDC = 36; break; + case 29: nDC = 37; break; + case 30: nDC = 38; break; + } + } + //Done + + int nDamStrike; + float fDelay; + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + effect eBreath; + + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry(); + //Get first target in spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_COLD)); + nDamStrike = d10(nDamage); + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d6(nDamage); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_COLD, OBJECT_SELF); + if (nDamStrike > 0) + { + //Set Damage + eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_COLD); + //Determine effect delay + 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, eBreath, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + } + SetLocalInt(OBJECT_SELF, "ddbreath", 0); +} diff --git a/_removed/nw_s1_dragfire.ncs b/_removed/nw_s1_dragfire.ncs new file mode 100644 index 0000000000000000000000000000000000000000..ffe218d5d7850efbac9d8a04a1af5e7342ae71e3 GIT binary patch literal 4417 zcma)9TWFkB5I+B9H)*b$dzm}E&Dq3;?&f^o%$&KM zGbe++!_j>^Z{5*jOjUQQp?}4Z@ss!oeEY-e>M&vIr%z@cn0WN)#6w4>GgFh9sY8b+ zPCRm)nCd*{iK9Ea3@oO$nkKWnynKNy2VpYaB*u%+=dLz9O*V?BrY4UanmGO-OC^lC z%?|^T^-7~Q`bzx61hCG8@y3|;1CQ)4ny@|s6*NR%jLe%5J1>D>GNJvpMmx!<|Dryq4pr0!=CFoZQtrGO2LaPP+R-rY5ey7k{K`$w^PS7g~trv7wp$&rm zqR@?k{;JSTg8r`1MnV5nXp^AV6xuB4-wJIJ^twV@1-;QiJs4D@BP(^+#*DvMkeMyW zd{K}&3nt~*=aquY<6x>BI`Z0#sdX?{z|=XI&%o3>m@{A+ z9Ly;&8y(CsFq<6AIG9EUa~GH<2h#zj*};^6X<5yfc`&UG<`S4T2lEM-yt^>&Dsvjl zW{1uTVA>tbG?<$l%m|nc2XiNwP6xv`^%e({|jJ_g>{Y)Oql*9K- ztmbV^Xf;se3-&b?@WpV;AY#uzg7+K>puAxB1VwW*>+b73aBCa5aAcRuv@JzhxP$&T zqrGn7bVHp&(>_q3GhxKr(uAgEk^evRNt9!7>8tW`!PhDBvq^+X-f;vi^hCK)&O11} zYj*&_tKvCjg&aBKL4&ixZ9^7;O;vKPpF;GMQk#tw_ct?D(8{5@=C*?KJ>;nih9 z#|o<=S$@)5a9A%xAPXFKgf1{8Rz4@FhNw2OFgrs1b+4cA4Lp`ZOV;qfgLr(nj&Oo@ zN#pUH^Pp0ewfVNMl6s1Dy^?u;1sxn5HZ_%uSs-XJu{u(mF7e-TS5=*pfEaqVS@{v_K# zh_Y_8UC_?u96MI1Gj8TitjJw_lY`VzKe9bKm}@mP6s#jNqPQweltd0WZbkF2q>227 z%lhnd`)iG_MPrS6uCwR!Vu4!5Mh*>U<;Q8lCrroquFUXQ|446NCOz2QGmy>*31x@;u{arRq@M ztcXano>cl+SV=iiqsaH>m3;3T9T@4)^rZ(W_i@7ab>BUh9!9c_%mH;B@Vp=wa}E|A aBsC5f5fYEXCCDwPK_r*W>O0$H$K8Lt)5=r; literal 0 HcmV?d00001 diff --git a/_removed/nw_s1_dragfire.nss b/_removed/nw_s1_dragfire.nss new file mode 100644 index 0000000..a11681f --- /dev/null +++ b/_removed/nw_s1_dragfire.nss @@ -0,0 +1,111 @@ +//:://///////////////////////////////////////////// +//:: Dragon Breath Fire +//:: NW_S1_DragFire +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Calculates the proper damage and DC Save for the + breath weapon based on the HD of the dragon. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- wrong target check (could affect other NPCs) +- damage was the same for all creatures in AoE +- old evasion behaviour (now that evasion is applied will appear in log) +> breath weapon damage and DC calculation changed in order to allow higher values +for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+ +dragon's constitution modifier. +*/ + +#include "70_inc_dragons" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + int nDamage = GetDragonBreathNumDice(); + int nDC = GetDragonBreathDC(); + + //When used by a dragon disciple, calculate DC and damage based on their DD levels + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 ) + { + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF); + nDamage = 2*nLevel / 3; + //if (nLevel == 29) nDamage = 25; + //if (nLevel == 30) nDamage = 30; + + switch (nLevel) + { + case 1: nDC = 15; break; + case 2: nDC = 15; break; + case 3: nDC = 15; break; + case 4: nDC = 15; break; + case 5: nDC = 16; break; + case 6: nDC = 16; break; + case 7: nDC = 17; break; + case 8: nDC = 17; break; + case 9: nDC = 18; break; + case 10: nDC = 18; break; + case 11: nDC = 19; break; + case 12: nDC = 20; break; + case 13: nDC = 21; break; + case 14: nDC = 22; break; + case 15: nDC = 23; break; + case 16: nDC = 24; break; + case 17: nDC = 25; break; + case 18: nDC = 26; break; + case 19: nDC = 27; break; + case 20: nDC = 28; break; + case 21: nDC = 29; break; + case 22: nDC = 30; break; + case 23: nDC = 31; break; + case 24: nDC = 32; break; + case 25: nDC = 33; break; + case 26: nDC = 34; break; + case 27: nDC = 35; break; + case 28: nDC = 36; break; + case 29: nDC = 37; break; + case 30: nDC = 38; break; + } + } + //Done + + int nDamStrike; + float fDelay; + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); + effect eBreath; + + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry(); + //Get first target in spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_FIRE)); + //randomize damage for each creature in AoE + nDamStrike = d10(nDamage); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_FIRE, OBJECT_SELF); + if (nDamStrike > 0) + { + //Set Damage + eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE); + //Determine effect delay + 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, eBreath, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + } + SetLocalInt(OBJECT_SELF, "ddbreath", 0); +} diff --git a/_removed/nw_s1_draggas.ncs b/_removed/nw_s1_draggas.ncs new file mode 100644 index 0000000000000000000000000000000000000000..54b1b2056bf77937a5323a5caa6418cd14ad5bd1 GIT binary patch literal 4481 zcma)9TWFj`6rTUGn>0z2&ArX_Ps|ogTWPCM5wRq3F~M|Gx{1kyuua^yDm9i;t%wg6 z5k!iL4+=i`P&5xk#Cm%Wu_9hdp+1OKTS5>iB3dMrps~cpGv7J0*~!kPP00S4?>qN7 zGw0v*Kqh){`|aEMm8w17q3EYPQhpr2fp30!T^Ghw)AX_I!;_C6o_zG+bT&7Y&Fw!h z`Q)La#MG@~o<6+2SHWUpvuah#%gblUauCL~6OET&FI=rVLpI8Dxv3-jCyzeDQZc3O z@WX&)y~?PQ97P?N*Qx;kw=zA7gDd-0lS|#Ww z7P?;0Pc5`s(9bQjM$j)UG$H6W7FsLlISZ{5^g9c!7xa4zZ4mT=g*FO$$wHe1owLwp zL4UQ-4TAn=p&JGL!$MmG{mVjI1-)vaZG!%7q3wcRv(OGfueVbV26gDj8oO&X<1dzE z=1MYOm1ItVNjUtxT9SDROszxbp^{8Lm^z2fttFXiF!jYc-U65g2XhHbql5VZOp}9| z0n_YYPJr3qV2*&<=wK$mv^bc1!L&M<9x!bVrUFcRF{9?ebU2s`U^*SlXJA&{g}STM zNibawofpA$JD6!Ow>X$lFg*_DZZJs)!#DLN2NUNzn?Gp=g|I=FH^rTynedVCC)OGk ziid@&(o-h*I1F{d)+a^^?0IBwj>x`!B%0E(I5RpjIJS3`>UmYshkUD`S7$_2XeIxZf&CQ6YIcw^g)(1%gvPno4c{Wy(;o0?gp9dCXb@s;LgM}+mP*i@ zKO+*_D-iuz+(3w`ZmM0<&cy;dMkuM9If)g8izfw09rY92ql39tQ$xW7GAoKjWuhW- z%DNTRzfvZO8zI|gpWENo_*OL5*v}jId_gQw%b3ie;oSKNdP9h*o{1gV%=pmgz+g6& z?&}{;Wz%~GvV9||tZq-;utTYgerxc~SZNgQbv_NGe+B8k&;PHq9DOrIEc;CL@uYLM z>cwS~&+i{}+Tf5gp;ZTsvumg0JUD0#2MgMn$0K^@s`}wZQ-At!TNrP?Hxa4a^9YBV zY?p^C-&++KH!JN9_05WiH0v=-9}6QXCu$7!?pmq$?y=#~q3mEPO|{nr-`#g#I+a1O omCOO_I^cOhA##_&2OT7994;ay9*0X@A!`uHWm9}-tNgh8A1@x breath weapon damage and DC calculation changed in order to allow higher values +for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+ +dragon's constitution modifier. +*/ + +#include "70_inc_dragons" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + int nDamage = GetDragonBreathNumDice(); + int nDC = GetDragonBreathDC(); + + //When used by a dragon disciple, calculate DC and damage based on their DD levels + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 ) + { + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF); + nDamage = 2*nLevel / 3; + //if (nLevel == 29) nDamage = 25; + //if (nLevel == 30) nDamage = 30; + + switch (nLevel) + { + case 1: nDC = 15; break; + case 2: nDC = 15; break; + case 3: nDC = 15; break; + case 4: nDC = 15; break; + case 5: nDC = 16; break; + case 6: nDC = 16; break; + case 7: nDC = 17; break; + case 8: nDC = 17; break; + case 9: nDC = 18; break; + case 10: nDC = 18; break; + case 11: nDC = 19; break; + case 12: nDC = 20; break; + case 13: nDC = 21; break; + case 14: nDC = 22; break; + case 15: nDC = 23; break; + case 16: nDC = 24; break; + case 17: nDC = 25; break; + case 18: nDC = 26; break; + case 19: nDC = 27; break; + case 20: nDC = 28; break; + case 21: nDC = 29; break; + case 22: nDC = 30; break; + case 23: nDC = 31; break; + case 24: nDC = 32; break; + case 25: nDC = 33; break; + case 26: nDC = 34; break; + case 27: nDC = 35; break; + case 28: nDC = 36; break; + case 29: nDC = 37; break; + case 30: nDC = 38; break; + } + } + //Done + + int nDamStrike; + float fDelay; + effect eVis = EffectVisualEffect(VFX_IMP_POISON_L); + effect eBreath; + + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry(); + //Get first target in spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_GAS)); + //randomize damage for each creature in AoE + nDamStrike = d10(nDamage); + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d6(nDamage); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ACID, OBJECT_SELF); + if (nDamStrike > 0) + { + //Set Damage and VFX + eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ACID); + //Determine effect delay + 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, eBreath, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE); + } + SetLocalInt(OBJECT_SELF, "ddbreath", 0); +} diff --git a/_removed/nw_s1_draglight.ncs b/_removed/nw_s1_draglight.ncs new file mode 100644 index 0000000000000000000000000000000000000000..bc69e87c1d497a94869db0c7ad1d3ce02877c139 GIT binary patch literal 4481 zcma)9TWDNW6g~GblQc<_$-B+-CT5DJt+Z9Bh**+1n9%8@bP|&fVVZW@s?=CYwIY7B zh#*o_{7~@2kD~b~BG%W3h!ycs3iU&@+7g0D5z!*C1dSy&?z{FrGjnFnBu&WNoVE7* z>~r>=)KEHjXzQI@29>Hm*`?^GGEi<5zn-gqdEMYgRLk`7%>Jpzk4!y!XgZVKm&qPD zIQ8V=W5hHRF;5@a+OJ?Swo$dK<>lq`WZCnhp_34=yji$fbB=6OX0!W_9+*1z2unqj zy36%Fl69(sZhA!iVFFk@qMQk)UC$x=i^^{aKzXf!6C(4`WT2j)uNtT?=xYWV5%diMjSBjvfmR55+CVD>oiWfgf}SzZDnZ{h&}u>7H_#eE zKQ_>{f_`G4wSsZv*WV^oD_U33{`WdeCb?N7k8L8#3-< zS!S**^JQ7)449b3&nsn_r@+)(bRI6t41#H}=-ghGsRh$ms^ctxX|ga^z%*N!&%v}< zm>Dpw7UmR~br$9*nDrKB5=@(gxgSish3Ny+VPUGkbe1w|9!!^oxdf)$!h8y*=q?Pq zN}UGNW6^m5Os|ER26LN*83WU2VeSPJw=jHDZ?G^?zO(t0W{?jXba_+UJ833-=(@3$ zhK1r`p=!b@<9+1&VZz2IMhaUcdvin%>?M&9_6Rr;)hCq}{Z2S}+)Wzd2~^Xo*CDI= z^eBT39y8aJj{puwF}oZtxdVy6aszI`gCUw-p{<9n|JGJ;QD#<(>ll{l)s2 zyl`I$v7aepnUZ+UhHjmW5z{Rw$_0w57P%;HIj-0VNN~)f9+Ve!%%EuQ=F)wg2X<2{ zZ#>!MZQc~4D&9kX9ca%xc)OrZrNNViImbYSn)L&vL0VS0x1gWP!KQDt2RF#1d zR4F>npp#y4{=3K#TDNMu2f?cnIaP%Mnc;rms&LzpMOew!ajl<4qEu2{jTqzHfh2A0 z*F5U?n3jblw~4QS(rrP<3u|Pu{EW6>v0j5j7C7&KyP!(T7bMjhGzA*wK&ZcVmPCVy z<kt=cn=~HJNe3!5Ih$|0Mo~|(j=VIg0CEb6GmYTrzbl;eJ-y+)LKkpm(@ita7kd`9``l=I#r zrABB%SY39o(5c*4VDv(cLPXu5a9=n(n4*-cd!s=G2g@g$1oActD#cqSSG=_-6no3$ zmdt~hfn;)YBE372Os2<1hsXDfQ9Z9K`jBrG^y-X=3a#Y6GO(Z0SoIE4rcjPSgwQDW zy2hKSoK9F_8XmO)&j580!usOblxx?OZOfqlMyOGsm%_aPg!7siS^mdvq{YYHBFxKxRd; zq)b#qPC0Bv^{5zAg( zeLU%$6}`A@aQXd%P8%F@Cba6JadzWulm`c`;b0+j=J1H#UQ|EaXzC9aZVThh^(G>f zdmiC%lkISDwxD4g~(k7A9Rq6akz+-cpNTqg^WQYmrd!Nt#ae;fB4MYxc~qF literal 0 HcmV?d00001 diff --git a/_removed/nw_s1_draglight.nss b/_removed/nw_s1_draglight.nss new file mode 100644 index 0000000..20169b4 --- /dev/null +++ b/_removed/nw_s1_draglight.nss @@ -0,0 +1,113 @@ +//:://///////////////////////////////////////////// +//:: Dragon Breath Lightning +//:: NW_S1_DragLightn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Calculates the proper damage and DC Save for the + breath weapon based on the HD of the dragon. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- wrong target check (could affect other NPCs) +- damage was the same for all creatures in AoE +- old evasion behaviour (now that evasion is applied will appear in log) +- did signalized wrong spell id +> breath weapon damage and DC calculation changed in order to allow higher values +for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+ +dragon's constitution modifier. +*/ + +#include "70_inc_dragons" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + int nDamage = GetDragonBreathNumDice(); + int nDC = GetDragonBreathDC(); + + //When used by a dragon disciple, calculate DC and damage based on their DD levels + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 ) + { + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF); + nDamage = 2*nLevel / 3; + //if (nLevel == 29) nDamage = 25; + //if (nLevel == 30) nDamage = 30; + + switch (nLevel) + { + case 1: nDC = 15; break; + case 2: nDC = 15; break; + case 3: nDC = 15; break; + case 4: nDC = 15; break; + case 5: nDC = 16; break; + case 6: nDC = 16; break; + case 7: nDC = 17; break; + case 8: nDC = 17; break; + case 9: nDC = 18; break; + case 10: nDC = 18; break; + case 11: nDC = 19; break; + case 12: nDC = 20; break; + case 13: nDC = 21; break; + case 14: nDC = 22; break; + case 15: nDC = 23; break; + case 16: nDC = 24; break; + case 17: nDC = 25; break; + case 18: nDC = 26; break; + case 19: nDC = 27; break; + case 20: nDC = 28; break; + case 21: nDC = 29; break; + case 22: nDC = 30; break; + case 23: nDC = 31; break; + case 24: nDC = 32; break; + case 25: nDC = 33; break; + case 26: nDC = 34; break; + case 27: nDC = 35; break; + case 28: nDC = 36; break; + case 29: nDC = 37; break; + case 30: nDC = 38; break; + } + } + //Done + + int nDamStrike; + float fDelay; + //effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, OBJECT_SELF,BODY_NODE_HAND); + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + effect eBreath; + + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry(); + //Get first target in spell area + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation()); + while (GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_LIGHTNING)); + //randomize damage for each creature in AoE + nDamStrike = d10(nDamage); + if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d8(nDamage); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY, OBJECT_SELF); + if(nDamStrike > 0) + { + //Set the damage effect + eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ELECTRICAL); + //Determine effect delay + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eBreath,oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget)); + } + } + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation()); + } + SetLocalInt(OBJECT_SELF, "ddbreath", 0); +} diff --git a/_removed/nw_s2_animalcom.ncs b/_removed/nw_s2_animalcom.ncs new file mode 100644 index 0000000000000000000000000000000000000000..d3ab5d60128f7b620aeedffcfaa094d5f266bd53 GIT binary patch literal 2511 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 c1(s$=Ae@zGA!EMy2X8?uCjbBd literal 0 HcmV?d00001 diff --git a/_removed/nw_s2_bardsong.nss b/_removed/nw_s2_bardsong.nss new file mode 100644 index 0000000..2637e79 --- /dev/null +++ b/_removed/nw_s2_bardsong.nss @@ -0,0 +1,445 @@ +//:://///////////////////////////////////////////// +//:: Bard Song +//:: NW_S2_BardSong +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spells applies bonuses to all of the + bard's allies within 30ft for a set duration of + 10 rounds. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Feb 25, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Georg Zoeller Oct 1, 2003 +/* +bugfix by Kovi 2002.07.30 +- loosing temporary hp resulted in loosing the other bonuses +*/ + +#include "x0_i0_spells" + +void main() +{ + if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced + return; + } + string sTag = GetTag(OBJECT_SELF); + + if (sTag == "x0_hen_dee" || sTag == "x2_hen_deekin") + { + // * Deekin has a chance of singing a doom song + // * same effect, better tune + if (Random(100) + 1 > 80) + { + // the Xp2 Deekin knows more than one doom song + if (d3() ==1 && sTag == "x2_hen_deekin") + { + DelayCommand(0.0, PlaySound("vs_nx2deekM_050")); + } + else + { + DelayCommand(0.0, PlaySound("vs_nx0deekM_074")); + DelayCommand(5.0, PlaySound("vs_nx0deekM_074")); + } + } + } + + + //Declare major variables + int nLevel = GetLevelByClass(CLASS_TYPE_BARD); + int nRanks = GetSkillRank(SKILL_PERFORM); + int nChr = GetAbilityModifier(ABILITY_CHARISMA); + int nPerform = nRanks; + int nDuration = 10; //+ nChr; + + effect eAttack; + effect eDamage; + effect eWill; + effect eFort; + effect eReflex; + effect eHP; + effect eAC; + effect eSkill; + + int nAttack; + int nDamage; + int nWill; + int nFort; + int nReflex; + int nHP; + int nAC; + int nSkill; + + // lingering song + if(GetHasFeat(424)) // lingering song + { + nDuration += 5; + } + + //Check to see if the caster has Lasting Impression and increase duration. + if(GetHasFeat(870)) + { + nDuration *= 5; + } + + //SpeakString("Level: " + IntToString(nLevel) + " Ranks: " + IntToString(nRanks)); + + if(nPerform >= 100 && nLevel >= 40) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 48; + nAC = 7; + nSkill = 19; + } + else if(nPerform >= 95 && nLevel >= 38) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 46; + nAC = 6; + nSkill = 18; + } + else if(nPerform >= 90 && nLevel >= 36) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 44; + nAC = 6; + nSkill = 17; + } + else if(nPerform >= 85 && nLevel >= 34) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 42; + nAC = 6; + nSkill = 16; + } + else if(nPerform >= 80 && nLevel >= 32) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 40; + nAC = 6; + nSkill = 15; + } + else if(nPerform >= 75 && nLevel >= 30) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 38; + nAC = 6; + nSkill = 14; + } + else if(nPerform >= 70 && nLevel >= 28) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 36; + nAC = 5; + nSkill = 13; + } + else if(nPerform >= 65 && nLevel >= 26) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 34; + nAC = 5; + nSkill = 12; + } + else if(nPerform >= 60 && nLevel >= 24) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 32; + nAC = 5; + nSkill = 11; + } + else if(nPerform >= 55 && nLevel >= 22) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 30; + nAC = 5; + nSkill = 9; + } + else if(nPerform >= 50 && nLevel >= 20) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 28; + nAC = 5; + nSkill = 8; + } + else if(nPerform >= 45 && nLevel >= 19) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 26; + nAC = 5; + nSkill = 7; + } + else if(nPerform >= 40 && nLevel >= 18) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 24; + nAC = 5; + nSkill = 6; + } + else if(nPerform >= 35 && nLevel >= 17) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 22; + nAC = 5; + nSkill = 5; + } + else if(nPerform >= 30 && nLevel >= 16) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 20; + nAC = 5; + nSkill = 4; + } + else if(nPerform >= 24 && nLevel >= 15) + { + nAttack = 2; + nDamage = 3; + nWill = 2; + nFort = 2; + nReflex = 2; + nHP = 16; + nAC = 4; + nSkill = 3; + } + else if(nPerform >= 21 && nLevel >= 14) + { + nAttack = 2; + nDamage = 3; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 16; + nAC = 3; + nSkill = 2; + } + else if(nPerform >= 18 && nLevel >= 11) + { + nAttack = 2; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 8; + nAC = 2; + nSkill = 2; + } + else if(nPerform >= 15 && nLevel >= 8) + { + nAttack = 2; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 8; + nAC = 0; + nSkill = 1; + } + else if(nPerform >= 12 && nLevel >= 6) + { + nAttack = 1; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 0; + nAC = 0; + nSkill = 1; + } + else if(nPerform >= 9 && nLevel >= 3) + { + nAttack = 1; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + else if(nPerform >= 6 && nLevel >= 2) + { + nAttack = 1; + nDamage = 1; + nWill = 1; + nFort = 0; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + else if(nPerform >= 3 && nLevel >= 1) + { + nAttack = 1; + nDamage = 1; + nWill = 0; + nFort = 0; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + + //If the bard has Extra Music and is at least 12lvl, give a small random bonus to this song + if (nLevel >= 12 && GetHasFeat(FEAT_EXTRA_MUSIC, OBJECT_SELF) ) + { + switch(d10()) + { + case 1: nAttack = nAttack + 1;break; + case 2: nDamage = nDamage + 1;break; + case 3: nWill = nWill + 1;break; + case 4: nFort = nFort + 1;break; + case 5: nReflex = nReflex + 1;break; + case 6: nAC = nAC + 1;break; + case 7: nSkill = nSkill + 1;break; + case 8: nWill = nWill + 2;break; + case 9: nFort = nFort + 2;break; + case 10: nReflex = nReflex + 2;break; + } + } + //End of Extra Music bonus + + + effect eVis = EffectVisualEffect(VFX_DUR_BARD_SONG); + + eAttack = EffectAttackIncrease(nAttack); + eDamage = EffectDamageIncrease(nDamage, DAMAGE_TYPE_BLUDGEONING); + effect eLink = EffectLinkEffects(eAttack, eDamage); + + if(nWill > 0) + { + eWill = EffectSavingThrowIncrease(SAVING_THROW_WILL, nWill); + eLink = EffectLinkEffects(eLink, eWill); + } + if(nFort > 0) + { + eFort = EffectSavingThrowIncrease(SAVING_THROW_FORT, nFort); + eLink = EffectLinkEffects(eLink, eFort); + } + if(nReflex > 0) + { + eReflex = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nReflex); + eLink = EffectLinkEffects(eLink, eReflex); + } + if(nHP > 0) + { + //SpeakString("HP Bonus " + IntToString(nHP)); + eHP = EffectTemporaryHitpoints(nHP); +// eLink = EffectLinkEffects(eLink, eHP); + } + if(nAC > 0) + { + eAC = EffectACIncrease(nAC, AC_DODGE_BONUS); + eLink = EffectLinkEffects(eLink, eAC); + } + if(nSkill > 0) + { + eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, nSkill); + eLink = EffectLinkEffects(eLink, eSkill); + } + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + eLink = EffectLinkEffects(eLink, eDur); + + effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC); + effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF)); + + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + + eHP = ExtraordinaryEffect(eHP); + eLink = ExtraordinaryEffect(eLink); + + while(GetIsObjectValid(oTarget)) + { + if(!GetHasFeatEffect(FEAT_BARD_SONGS, oTarget) && !GetHasSpellEffect(GetSpellId(),oTarget)) + { + // * GZ Oct 2003: If we are silenced, we can not benefit from bard song + if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget)) + { + if(oTarget == OBJECT_SELF) + { + effect eLinkBard = EffectLinkEffects(eLink, eVis); + eLinkBard = ExtraordinaryEffect(eLinkBard); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLinkBard, oTarget, RoundsToSeconds(nDuration)); + if (nHP > 0) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration)); + } + } + else if(GetIsFriend(oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + if (nHP > 0) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration)); + } + } + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + } +} + diff --git a/_removed/nw_s2_familiar.ncs b/_removed/nw_s2_familiar.ncs new file mode 100644 index 0000000000000000000000000000000000000000..f576cb1031311bec9e4fe6c456976fa8096f108a GIT binary patch literal 2667 zcma)8&ud&&6u$SqH`AJoNeR;sTTO3Fic*cVQ^kUa)pSacL5m?Vi{kLwj3zjFiIX4J zoqvZQ=%#d|JNHEpvgpEvV1z7Obdg0CL4srv8Nd6Td#CRWui6aBd-vRPzVm(OoO>r9 z%*@*PORrsgPpN^=#}$4~S{0YnX!>RIPO`F=EPs|Z7jHKgTc0MI?G5aV^zGbTyJX7z zL?(P>J#s-2@zg8otm<~V+dwY66eXqp&@V>k-20fA==jqM&hkTW(jV$LfwV zb|mIV1N2D6Ts?!0w`5~r$P)UK|8YBQdy&7GICi-Sd8p#>1k*2sgu&}>OdZGa*NXSC zE0?}ZmMN|%e@WS$d+P2NBr;zpve#eMjr%PA<1|EDOfL1g`&r3;nebe@& zmgYW&Eq>=~4%>--O@Y|F?T5+ZB@e)9J=vfeNNCr3B((x;R)#9 zdvxGs*npc1Yz`e(kDm8FR24GZR#NJ{Oa%^!y8pQ6fhP)gO^^0TV_=yfM};BvrwM^t zW&vMhxqxetOWY9WUB%92DBROrAmUkjLaw+Gse_{uf1AO%uYopnx7J*0rOhqM&5Zan%>P7K&zH-nDJqzi@phKAyJWiRFPWGa5uo>ITX}3LL9k) zMTQ$zQxQ(6jD-y6Z~j2^RB#GzO!qFb0-T-x80Lg>qRX)pbY$cnBK&t)Eiiu?T=aZ+ z;bODVY}DuLjgRIU^;w3?cgJOe{gVqd>@VD`Vc7n1H#w~Aq;K182B2;^tK~}i2ab=2 zPSw2f5Meyd8Hq1o9Xz%7yuysTzDB4@rUSovD+FY6zW;=rQY#E1v*wXP-+D;QiY}68 zuY0tj`Xyx^#PT1CzT7u{fXYz^NP)~i9V42d{<^1*6a_I4y|ovUYX(kMSo3O_<_f+A z5|G_X@E64r*40L9tJSu1Yxa7w+-@z}>#H5s=kDD4r?z_`c^V!Pern|zlq$UUq61?=fy^Z)<= literal 0 HcmV?d00001 diff --git a/_removed/nw_s2_familiar.nss b/_removed/nw_s2_familiar.nss new file mode 100644 index 0000000..77414a5 --- /dev/null +++ b/_removed/nw_s2_familiar.nss @@ -0,0 +1,33 @@ +//:://///////////////////////////////////////////// +//:: Summon Familiar +//:: NW_S2_Familiar +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spell summons an Arcane casters familiar +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Sept 27, 2001 +//:: Modified: 69MEH69 Sep2005 +//::////////////////////////////////////////////// +#include "69_hench_lib" +void main() +{ + if(!GetIsPC(OBJECT_SELF)) + { + HenchSummonCreature69(OBJECT_SELF); + return; + } + //Yep thats it + SummonFamiliar(); + + //If the familiar has lockpicking higher than 10, set it to 10 + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR); + if (GetSkillRank(SKILL_OPEN_LOCK, oFamiliar, TRUE) > 10) + { + effect eSkillNerf = EffectSkillDecrease(SKILL_OPEN_LOCK, GetSkillRank(SKILL_OPEN_LOCK, oFamiliar, TRUE)-10); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eSkillNerf), oFamiliar); + } + +} diff --git a/_removed/nw_s2_layonhand.ncs b/_removed/nw_s2_layonhand.ncs new file mode 100644 index 0000000000000000000000000000000000000000..bd6aabc5c202b43cd24624b4be74c75f3c7f55a0 GIT binary patch literal 1184 zcma)5u})M$6umQV-i8R#4Ui3i2op5KU_^-pp+VMl6A5u4E|KzOafKLVL!r^qM8AM9 zpyUJe8>FD1ps?7&!otGBf`Vd`<-Bv>kbQ#2eaXC?J9E!D_uTtxmAZd6J9F=$h}#<% z{QA7OSW2yT$@9kcPUGcPD`{>d%@>=Ex3AyeWbluZ_dBz;z$dcd(f#1G5V3e$#-!Wr z9(ajG?usjaV$|RYJMRD2gDl zEqNlLj?Ch;FaIM)JGe-+W9nRq2=((E%B79u1*qoxN05jb+s<9Q@I80odJ6F6j#6>` zhesE|P?WauZ*0MZbTHd4>o2r&ZmXQbIqJrA@(sjcpX)VRko6k&17Qah literal 0 HcmV?d00001 diff --git a/_removed/nw_s2_layonhand.nss b/_removed/nw_s2_layonhand.nss new file mode 100644 index 0000000..ed99be4 --- /dev/null +++ b/_removed/nw_s2_layonhand.nss @@ -0,0 +1,75 @@ +//:://///////////////////////////////////////////// +//:: Lay_On_Hands +//:: NW_S2_LayOnHand.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The Paladin is able to heal his Chr Bonus times + his level. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Aug 15, 2001 +//:: Modified 69MEH69 JUL2003 +//::////////////////////////////////////////////// +#include "69_hench_lib" +#include "NW_I0_SPELLS" +void main() +{ + //Declare major variables + object oTarget = GetSpellTargetObject(); + int nChr = GetAbilityModifier(ABILITY_CHARISMA); + if (nChr < 0) + { + nChr = 0; + } + int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN); + //Caluclate the amount to heal + int nHeal = nLevel * nChr; + if(nHeal <= 0) + { + nHeal = 1; + } + effect eHeal = EffectHeal(nHeal); + effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); + effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE); + effect eDam; + int nTouch; + string sTag = GetTag(oTarget); + object oArea = GetArea(oTarget); + int nCHP = GetLocalInt(oArea, "nCHP" +sTag); + //Check if the target is an undead + if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS)); + //Make a ranged touch attack + nTouch = TouchAttackMelee(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nHeal *= 2; + } + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS)); + eDam = EffectDamage(nHeal, DAMAGE_TYPE_DIVINE); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget); + } + } + else + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS, FALSE)); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + if(GetIsHenchmanDying(oTarget)) + { + SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHeal); + } + } + +} + diff --git a/_removed/nw_s2_turndead.ncs b/_removed/nw_s2_turndead.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e878efaf2a34b0111e69d2be5ee35a552482f60a GIT binary patch literal 4101 zcmbtXO=w+36rP!T-+MJb&9lCkT1j(FTcObwTLe*4At?${t%?vgf;O?OVo`)D6^nsjjaYh8w!&*{U3RThie%7jH?iuDPf{QXc+UU&FtFR+6vVDxg1Ws z3*KnK(`+orzi#pgZ){5>ebwX}i)KO2vnr<&iqk2qxA2e2Z#OuvlaIF^a;qvg?(My? z%cOGZ7p=~b3-5SdTlc=N)o!`c>Us+8eaP5&C8zcQ5;{diX1bg7a5rftMY=yF>`Ms` zcA;c*smyFbFbxn6I3~!V#z&;a$TfTpU1H{ih=4m%+RNo%T6{YwC4G!Zg?fp2$cDU@ z`O^HCBJ(N&y|~~MF>S$~qT&w$J0F!M`CfH=@!dzE_@xKKaWifv23#R>*49>xv9nt2 zM-uG3FLtvBwyVRozbDwOzSuYQz_zv6?>-~~`(&a$+*f;~)Q&T%6^^Q9 zRuk-YU+hgiuw7`d82faBeM?{L(H_`YE%tPRee1Av==QinQ(b9zm+7x`H&-3zNIG9= ze9mJYFUV+OS)mp`li=DI*|&ru&+ka5ZS*})EN2kEb`cRw6657cXe&>!-^IOPUXyo$ z{{jT~k;8*?%Y5&7BXI@1U9}q z7DG@#7{S1*IJfz@MhNAdHqU3y;kvs+E|}J?Sj>*Zf;ip!c$6M!wM+kOiZ3 zz7savSyDd>m)heM^>8mTyY3GO%#9UcSCVXh(E<2Mjqt9T35_JdCqOiTRfTeU_0UZ* zz}}t!H6|-QUy1WPMwUcy$xdcTlB?{CWHa}>sfDz;Onvp=8BLSAs&YI(FnK$!p^Oaz zBOg`fiTBY$$Fi}9G%d>JP?SR2mgS4a-+desqZ+pj#x~_5I2VeHZ)(i`!q1hHL< zc=pB-?OK93P>c9U7vi51wSU@srNz<3t5O6O(VUdYKh2?fUiuq1XV;FA*+c38@I=Nu z{#uH0;+c1V@&p8J`*B~&?{1^o{^tand8e$1NMR{bDDXDD?WX}~x5PnMraX!rng#_E zFNwL7qzKbUd0h~bd^;adaE8y88z`uGXO|Cqa^S zi$sNven_PG#P?~r$_cg_GKW*dAh1;Z2-AMXLZbo-6)wBK{zcsu zOw)sZ)b{i5_oBG2;G)nlcla$a$~UIUU9zomkh_={!Q|`|l}J!8HHfnBz&8{U=Q@f> z$xS1o_Zz9pNWA|yQkvn6qu(nEQ(;Y6TKjOF*W?i`e=o8M0UiZVMp9W z7A)~(z?stz0C**FkV)U%;l$dw|F8FyYO`dk8ay~RD?TH-8UUBs;zN{M5$VGG3-~Hw AHUIzs literal 0 HcmV?d00001 diff --git a/_removed/nw_s2_turndead.nss b/_removed/nw_s2_turndead.nss new file mode 100644 index 0000000..68d22e6 --- /dev/null +++ b/_removed/nw_s2_turndead.nss @@ -0,0 +1,268 @@ +//:://///////////////////////////////////////////// +//:: Turn Undead +//:: NW_S2_TurnDead +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Checks domain powers and class to determine + the proper turning abilities of the casting + character. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 2, 2001 +//:: Updated On: Jul 15, 2003 - Georg Zoeller +//::////////////////////////////////////////////// +//:: MODIFIED MARCH 5 2003 for Blackguards +//:: MODIFIED JULY 24 2003 for Planar Turning to include turn resistance hd +/* +Patch 1.70, by Shadooow + +- takes into account turn resistance of player character (but only from itemproperty) +*/ + +int GetPCTurnResistance(object oPC); + +void main() +{ + int nClericLevel = GetLevelByClass(CLASS_TYPE_CLERIC); + int nPaladinLevel = GetLevelByClass(CLASS_TYPE_PALADIN); + int nBlackguardlevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD); + int nTotalLevel = GetHitDice(OBJECT_SELF); + + int nTurnLevel = nClericLevel; + int nClassLevel = nClericLevel; + + // GZ: Since paladin levels stack when turning, blackguard levels should stack as well + // GZ: but not with the paladin levels (thus else if). + if((nBlackguardlevel - 2) > 0 && (nBlackguardlevel > nPaladinLevel)) + { + nClassLevel += (nBlackguardlevel - 2); + nTurnLevel += (nBlackguardlevel - 2); + } + else if((nPaladinLevel - 2) > 0) + { + nClassLevel += (nPaladinLevel -2); + nTurnLevel += (nPaladinLevel - 2); + } + + //Flags for bonus turning types + int nElemental = GetHasFeat(FEAT_AIR_DOMAIN_POWER) + GetHasFeat(FEAT_EARTH_DOMAIN_POWER) + GetHasFeat(FEAT_FIRE_DOMAIN_POWER) + GetHasFeat(FEAT_WATER_DOMAIN_POWER); + int nVermin = GetHasFeat(FEAT_PLANT_DOMAIN_POWER);// + GetHasFeat(FEAT_ANIMAL_COMPANION); + int nConstructs = GetHasFeat(FEAT_DESTRUCTION_DOMAIN_POWER); + int nGoodOrEvilDomain = GetHasFeat(FEAT_GOOD_DOMAIN_POWER) + GetHasFeat(FEAT_EVIL_DOMAIN_POWER); + int nPlanar = GetHasFeat(854); + + //Flag for improved turning ability + int nSun = GetHasFeat(FEAT_SUN_DOMAIN_POWER); + + //Make a turning check roll, modify if have the Sun Domain + int nChrMod = GetAbilityModifier(ABILITY_CHARISMA); + int nTurnCheck = d20() + nChrMod; //The roll to apply to the max HD of undead that can be turned --> nTurnLevel + int nTurnHD = d6(2) + nChrMod + nClassLevel; //The number of HD of undead that can be turned. + + if(nSun == TRUE) + { + nTurnCheck += d4(); + nTurnHD += d6(); + } + //Determine the maximum HD of the undead that can be turned. + if(nTurnCheck <= 0) + { + nTurnLevel -= 4; + } + else if(nTurnCheck >= 1 && nTurnCheck <= 3) + { + nTurnLevel -= 3; + } + else if(nTurnCheck >= 4 && nTurnCheck <= 6) + { + nTurnLevel -= 2; + } + else if(nTurnCheck >= 7 && nTurnCheck <= 9) + { + nTurnLevel -= 1; + } + else if(nTurnCheck >= 10 && nTurnCheck <= 12) + { + //Stays the same + } + else if(nTurnCheck >= 13 && nTurnCheck <= 15) + { + nTurnLevel += 1; + } + else if(nTurnCheck >= 16 && nTurnCheck <= 18) + { + nTurnLevel += 2; + } + else if(nTurnCheck >= 19 && nTurnCheck <= 21) + { + nTurnLevel += 3; + } + else if(nTurnCheck >= 22) + { + nTurnLevel += 4; + } + + //Gets all creatures in a 20m radius around the caster and turns them or not. If the creatures + //HD are 1/2 or less of the nClassLevel then the creature is destroyed. + int nCnt = 1; + int nHD, nRacial, nHDCount, bValid, nDamage; + nHDCount = 0; + effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE); + effect eVisTurn = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eDamage; + effect eTurned = EffectTurned(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eVisTurn, eTurned); + eLink = EffectLinkEffects(eLink, eDur); + + effect eDeath = SupernaturalEffect(EffectDeath(TRUE)); + + effect eImpactVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_30); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpactVis, GetLocation(OBJECT_SELF)); + + //Get nearest enemy within 20m (60ft) + //Why are you using GetNearest instead of GetFirstObjectInShape + object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE , OBJECT_SELF, nCnt,CREATURE_TYPE_PERCEPTION , PERCEPTION_SEEN); + + while(GetIsObjectValid(oTarget) && nHDCount < nTurnHD && GetDistanceToObject(oTarget) <= 20.0) + { + if(!GetIsFriend(oTarget)) + { + nRacial = GetRacialType(oTarget); + + if (nRacial == RACIAL_TYPE_OUTSIDER ) + { + if (nPlanar) + { + //Planar turning decreases spell resistance against turning by 1/2 + nHD = GetHitDice(oTarget) + (GetSpellResistance(oTarget) /2) + GetTurnResistanceHD(oTarget); + } + else + { + nHD = GetHitDice(oTarget) + (GetSpellResistance(oTarget) + GetTurnResistanceHD(oTarget) ); + } + } + else //(full turn resistance) + { + nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget); + } + //1.70 by Shadooow: special workaround for player characters wearing custom items with turn resistance and shifter in spectre form + if(GetIsPC(oTarget) && !GetIsDMPossessed(oTarget) && !GetIsPossessedFamiliar(oTarget)) + { + nHD+= GetPCTurnResistance(oTarget); + } + + if(nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount)) + { + //Check the various domain turning types + if(nRacial == RACIAL_TYPE_UNDEAD) + { + bValid = TRUE; + } + else if (nRacial == RACIAL_TYPE_VERMIN && nVermin > 0) + { + bValid = TRUE; + } + else if (nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0) + { + bValid = TRUE; + } + else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD)); + nDamage = d3(nTurnLevel); + eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + nHDCount += nHD; + } + else if (nRacial == RACIAL_TYPE_OUTSIDER && (nGoodOrEvilDomain+nPlanar > 0) ) + { + bValid = TRUE; + } + // * if wearing gauntlets of the lich,then can be turned + else if (GetIsObjectValid(GetItemPossessedBy(oTarget, "x2_gauntletlich")) == TRUE) + { + if (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS)) == "x2_gauntletlich") + { + bValid = TRUE; + } + } + + //Apply results of the turn + if( bValid == TRUE) + { + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + if (nPlanar>0 && nRacial == RACIAL_TYPE_OUTSIDER) + { + effect ePlane = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, ePlane, oTarget); + } + //if(IntToFloat(nClassLevel)/2.0 >= IntToFloat(nHD)) + //{ + + if((nClassLevel/2) >= nHD) + { + if (nPlanar>0 && nRacial == RACIAL_TYPE_OUTSIDER) + { + effect ePlane2 = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectToObject(DURATION_TYPE_INSTANT, ePlane2, oTarget); + } + + effect ePlane2 = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD)); + //Destroy the target + DelayCommand(0.1f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); + } + else + { + //Turn the target + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD)); + AssignCommand(oTarget, ActionMoveAwayFromObject(OBJECT_SELF, TRUE)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nClassLevel + 5)); + } + nHDCount = nHDCount + nHD; + } + } + bValid = FALSE; + } + nCnt++; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE, OBJECT_SELF, nCnt,CREATURE_TYPE_PERCEPTION , PERCEPTION_SEEN); + } +} + +int GetPCTurnResistance(object oPC) +{ + if(!GetIsPC(oPC) || GetIsDMPossessed(oPC) || GetIsPossessedFamiliar(oPC)) + { + return 0;//in these cases the default function works fine + } +int nTurnResistance; +object oItem; +int nSlot; +itemproperty ip; + for(;nSlot < NUM_INVENTORY_SLOTS;nSlot++) + { + oItem = GetItemInSlot(nSlot,oPC); + if(GetIsObjectValid(oItem)) + { + ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_TURN_RESISTANCE) + { + nTurnResistance+= GetItemPropertyCostTableValue(ip);//turn resistance stacks even on one item + } + ip = GetNextItemProperty(oItem); + } + } + } +return nTurnResistance; +} diff --git a/_removed/nw_s2_wildshape.ncs b/_removed/nw_s2_wildshape.ncs new file mode 100644 index 0000000000000000000000000000000000000000..64e69810938dacce658a37b410010240bb63d0e3 GIT binary patch literal 4852 zcmdT{OK6-`6u$psrg^otC26B=%rtEfrBQ1I1@V!@(ZoE-B*v;Rq&nJyZDLxm?NWDw z3#}qpait(4wu=fyEEEhXTF^xosRYTwMJ*LnqC^Oc-~G%keUCS?|kRn z^ZM@$_ZD)G@45ZX9;G%f-K_AhE~hd|E$csbs5sIh{+)o}Y#43~BYZii;%r3&K`A$P z!-|UOD{9PjYRIr7%^2yujx=ke9geilNSoR;&jZx`q+O}Y0ll}&(WqFY+u+l~85ORN zwkd?QsO{>0;rA7SmQ8G7V~zy79Dm`KT%eBwRKf-xwVU8|WAhlDwh;NNgS01aS}*K3 z5xK)f>X?F=E@e+c?l&CnEv|(Vqs!glBFWwCai4U!x4ITpxOcip*5I7S{ieg+>RMFc z-sK|6{j|sZmf?PwS-jD;sKVXpB5BR;4<3?!NB=BEB#>r$CFH{r>YP#8q0;R0rAd6N zpP7E)_@U|9nFHvkFZIA&2}l++=4gQ8R}8w>VsI^C(7zS~G?YCk+qDZuTkqLZ932_l zH#9Of+E*OPk3E_%c8?7e5T6;%Y%Vd^uu!MMgdp$*>wH0-FR1qgSzi$Pf(Bop^XJ5& z*N7v?P+-rChudVxhgL;Fxw2w9^-5?BrH&|_UVE8%ogF;A*a9{}Wta{2f{K~T-RAkC z$+6{l(Y2!UIb(Co*nIEV-0#{L6#9eKmRUy6j|bW$D*nyoqV8+s|EgiWwLQzeX!WAm+RBSTKa8U2C? zz6%NX*xAqTn@x^wODM*RPFneNPP7UeHY;tk+Y*xgF0|wadV0P}nBZ4leLtq0ob z`52WogOL7-gQ2Tg>Dx-^ayHo12XU;sUWS?c=0s?Hr4}SZpOgPYkU)KCPNsujh!eZu zy5+D5h*J_L(!u0((7()`?N!W>p10^e1_6&mJ}Hq>hMMye9YN%#6dn3N>%u=$baO^` znJji@KS@DiHpp^1MR(EYPNwKE!?b%TMThyK?x_^rywN?FqFXS!os1f1NMul6_%<(? zC+#8l3nl1qHhN*ayLX`2-P1qVKfbTnGcr6;$S0ON8Jo$EmSdEE^0M-7PCP)0{(r5q zD0P^DTJ88wxK%AAKsf;|2WD&L@Kn{^VK|I{Q=)FS(=)eK0JPWri7>Z{ZmIu z2alEx9r0e0n1d9eCb?J1-<&ebg>i(>Rze2VGqU^7SjP}OCvV@xQJ9N1LXcNLeiR69 zcV>b|R_!B9t-jpBnYg!h{KR?9;BL2aCw#d+0tGK6@5R!l@0$HI13Asm_H?qu^vS80 zDOpaI39mSsp=LZwqAXC!8G;)u1g_I^^m9W0Uveb3>zB>#3rA!qk~yZ;zIAzeJeYgg zEwYX19V&j}{A?oZyKpMz;cxANO!r(BAXQSr)Z}iIib+a!+a&+f81s~#p6CbaITdIj z`yj2J`m1A`NP{nQ_|ehT*lY*kuoBOz3Z3ULqXRi-Cmbm%C)C!}|x&JZORap#}u!DPl|gU(43Arm`7Sjj|b3jj|b3 zjj|b3jj|ckzbl(c))ir(o@x7FrQJ4%jIr6=k zkZRdpj@Dl5(tIG$8a^xnKXFogAV;*X<^%Pu;lm>ELo3CH)mHO?oYnAQ5x8!q_^`{r Xnhy+i4IdVvi|^EfBfltvpHqJWEU=L^ literal 0 HcmV?d00001 diff --git a/_removed/nw_s2_wildshape.nss b/_removed/nw_s2_wildshape.nss new file mode 100644 index 0000000..62374b7 --- /dev/null +++ b/_removed/nw_s2_wildshape.nss @@ -0,0 +1,215 @@ +//:://///////////////////////////////////////////// +//:: Wild Shape +//:: NW_S2_WildShape +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the Druid to change into animal forms. + + Updated: Sept 30 2003, Georg Z. + * Made Armor merge with druid to make forms + more useful. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 22, 2002 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.70 + +- allowed to merge any custom non-weapon in left hand slot such as flags or +musical instruments +- added optional feature to stack ability bonuses from multiple items together +- added optional feature to merge bracers (when items are allowed to merge) +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "70_inc_itemprop" +#include "x2_inc_itemprop" + +void main() +{ + //Declare major variables + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + int nPoly; + int nMetaMagic = GetMetaMagicFeat(); + int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + //Enter Metamagic conditions + if (nMetaMagic == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + //Determine Polymorph subradial type + if(nSpell == 401) + { + nPoly = POLYMORPH_TYPE_BROWN_BEAR; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR; + } + } + else if (nSpell == 402) + { + nPoly = POLYMORPH_TYPE_PANTHER; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_PANTHER; + } + } + else if (nSpell == 403) + { + nPoly = POLYMORPH_TYPE_WOLF; + + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_WOLF; + } + } + else if (nSpell == 404) + { + nPoly = POLYMORPH_TYPE_BOAR; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BOAR; + } + } + else if (nSpell == 405) + { + nPoly = POLYMORPH_TYPE_BADGER; + if (nDuration >= 12) + { + nPoly = POLYMORPH_TYPE_DIRE_BADGER; + } + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); + + int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1; + int bArms = bItems && GetLocalInt(GetModule(),"71_POLYMORPH_MERGE_ARMS"); + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oArmsOld = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + + if (GetIsObjectValid(oShield)) + { //1.71: this is now custom content compatible, polymorph will merge custom left-hand only items such as flags + if (GetWeaponRanged(oShield) || IPGetIsMeleeWeapon(oShield)) + { + oShield = OBJECT_INVALID; + } + } + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + if (bArms) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmsOld); + } + + //Apply the VFX impact and effects + ePoly = EffectPolymorph(nPoly); + if (nSpell == 402 && nDuration >= 12) ePoly = EffectLinkEffects(EffectMovementSpeedIncrease(50), ePoly); //A little extra for druids in dire panther form :) + if(nConBonus > 0) + {//1.70: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + ePoly = ExtraordinaryEffect(ePoly); + + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, OBJECT_SELF, HoursToSeconds(nDuration)); + + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + if (bArms) + { + IPWildShapeCopyItemProperties(oArmsOld,oArmorNew); + } + if (GetLocalInt(GetModule(),"71_POLYMORPH_STACK_ABILITY_BONUSES")) + { + IPWildShapeStackAbilityBonuses(oArmorNew); + } +} diff --git a/_removed/x0_s0_acidsplash.ncs b/_removed/x0_s0_acidsplash.ncs new file mode 100644 index 0000000000000000000000000000000000000000..eed85f53591e22d3399bb27c86249c702465dcb3 GIT binary patch literal 10989 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 7) cMultiplier = 7; + int nDamage = MaximizeOrEmpower(3, cMultiplier, spell.Meta); + effect eBad = EffectDamage(nDamage, DAMAGE_TYPE_ACID); + //Apply the VFX impact and damage effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBad, spell.Target); + } + } +} diff --git a/_removed/x0_s0_banishment.ncs b/_removed/x0_s0_banishment.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3ba1c892dd87f9ea1d1937bf338bfe937cef7254 GIT binary patch literal 10664 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_banishment.nss b/_removed/x0_s0_banishment.nss new file mode 100644 index 0000000..f7209f5 --- /dev/null +++ b/_removed/x0_s0_banishment.nss @@ -0,0 +1,119 @@ +//:://///////////////////////////////////////////// +//:: Banishment +//:: x0_s0_banishment.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All summoned creatures within 30ft of caster + make a save and SR check or be banished + + As well any Outsiders being must make a + save and SR check or be banished (up to + 2 HD creatures / level can be banished) +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 22, 2001 +//::////////////////////////////////////////////// +//:: VFX Pass By: Preston W, On: June 20, 2001 + +#include "X0_I0_SPELLS" +#include "x2_inc_spellhook" +#include "hench_i0_generic" + +void main() +{ + +/* + 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 oMaster; + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation()); + int nSpellDC; + //Get the first object in the are of effect + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + + // * the pool is the number of hit dice of creatures that can be banished + int nPool = 2* GetCasterLevel(OBJECT_SELF); + + while(GetIsObjectValid(oTarget)) + { + //does the creature have a master. + oMaster = GetMaster(oTarget); + if (oMaster == OBJECT_INVALID) + { + oMaster = OBJECT_SELF; // TO prevent problems with invalid objects + // passed into GetAssociate + } + + // * BK: Removed the master check, only applys to Dismissal not banishment + //Is that master valid and is he an enemy + // if(GetIsObjectValid(oMaster) && GetIsEnemy(oMaster)) + { + // * Is the creature a summoned associate + // * or is the creature an outsider + // * and is there enough points in the pool + if( + (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) == oTarget || + GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oTarget || + GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oTarget ) || + ((GetRacialType((oTarget)) == RACIAL_TYPE_OUTSIDER) && + (nPool > 0)) || + GetLocalInt(oTarget, sHenchPseudoSummon)) + { + // * March 2003. Added a check so that 'friendlies' will not be + // * unsummoned. + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 430)); + //Determine correct save + nSpellDC = GetSpellSaveDC();// + 6; + // * Must be enough points in the pool to destroy target + if (nPool >= GetHitDice(oTarget)) + // * Make SR and will save checks + if (!MyResistSpell(OBJECT_SELF, oTarget) && !MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC)) + { + //Apply the VFX and delay the destruction of the summoned monster so + //that the script and VFX can play. + + nPool = nPool - GetHitDice(oTarget); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); + if (CanCreatureBeDestroyed(oTarget) == TRUE) + { + //bugfix: Simply destroying the object won't fire it's OnDeath script. + //Which is bad when you have plot-specific things being done in that + //OnDeath script... so lets kill it. + effect eKill = EffectDamage(GetCurrentHitPoints(oTarget)); + //just to be extra-sure... :) + effect eDeath = EffectDeath(FALSE, FALSE); + DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget)); + DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); + + DestroyObject(oTarget, 0.3); + } + } + } // rep check + } + } + //Get next creature in the shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + } +} + + diff --git a/_removed/x0_s0_bigby1.ncs b/_removed/x0_s0_bigby1.ncs new file mode 100644 index 0000000000000000000000000000000000000000..395a33801fd273c80ea03ff2c79bdfb294789089 GIT binary patch literal 10489 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_bigby1.nss b/_removed/x0_s0_bigby1.nss new file mode 100644 index 0000000..219da0a --- /dev/null +++ b/_removed/x0_s0_bigby1.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Bigby's Interposing Hand +//:: [x0_s0_bigby1] +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Grants -10 to hit to target for 1 round / level +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: September 7, 2002 +//::////////////////////////////////////////////// +//:: VFX Pass By: + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + int nDuration = 5; + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, + spell.Id, + TRUE)); + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100% + { + nDuration = nDuration * 2; + } + if (!MyResistSpell(spell.Caster, spell.Target)) + { + + effect eAC1 = EffectAttackDecrease(5); + effect eVis = EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND); + effect eLink = EffectLinkEffects(eAC1, eVis); + + + //Apply the TO HIT PENALTIES bonuses and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, + eLink, + spell.Target, + RoundsToSeconds(nDuration)); + } + } +} diff --git a/_removed/x0_s0_bigby2.ncs b/_removed/x0_s0_bigby2.ncs new file mode 100644 index 0000000000000000000000000000000000000000..10eb9be1cbfabdb8cfd6b1ab95a66d56f4f237a5 GIT binary patch literal 11823 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_bigby2.nss b/_removed/x0_s0_bigby2.nss new file mode 100644 index 0000000..bfa46b8 --- /dev/null +++ b/_removed/x0_s0_bigby2.nss @@ -0,0 +1,97 @@ +//:://///////////////////////////////////////////// +//:: Bigby's Forceful Hand +//:: [x0_s0_bigby2] +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + dazed vs strength check (+14 on strength check); Target knocked down. + Target dazed down for 1 round per level of caster + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: September 7, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Andrew Nobbs May 01, 2003 +/* +Patch 1.71 + +- disabled self-stacking +- added duration scaling per game difficulty +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + 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 + spellsDeclareMajorVariables(); + + //-------------------------------------------------------------------------- + // This spell no longer stacks. If there is one hand, that's enough + //-------------------------------------------------------------------------- + if (GetHasSpellEffect(spell.Id,spell.Target)) + { + FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE); + return; + } + + int nDuration = 2; + nDuration = GetScaledDuration(nDuration, spell.Target); + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100% + { + nDuration = nDuration * 2; + } + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + // Apply the impact effect + effect eImpact = EffectVisualEffect(VFX_IMP_BIGBYS_FORCEFUL_HAND); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, spell.Target); + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE)); + if(!MyResistSpell(spell.Caster, spell.Target)) + { + int nCasterRoll = d20(1); + int nTargetRoll = d20(1) + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSizeModifier(spell.Target); + // * bullrush succesful, knockdown target for duration of spell + if (nCasterRoll >= nTargetRoll) + { + effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eKnockdown = EffectDazed(); + effect eKnockdown2 = EffectKnockdown(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + //Link effects + effect eLink = EffectLinkEffects(eKnockdown, eDur); + eLink = EffectLinkEffects(eLink, eKnockdown2); + //Apply the penalty + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target, RoundsToSeconds(nDuration)); + // * Bull Rush succesful + FloatingTextStrRefOnCreature(8966,spell.Caster, FALSE); + } + else + { + FloatingTextStrRefOnCreature(8967,spell.Caster, FALSE); + } + } + } +} diff --git a/_removed/x0_s0_bigby3.ncs b/_removed/x0_s0_bigby3.ncs new file mode 100644 index 0000000000000000000000000000000000000000..eb7c0e905e1d7efbb2d4ced7011fec12df392ffc GIT binary patch literal 12464 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 nTargetRoll) + { + // * now must make a GRAPPLE check to + // * hold target for duration of spell + // * check caster ability vs. target's size & strength + nCasterRoll = d20(1) + nCasterModifier + + spell.Level; + + nTargetRoll = d20(1) + + GetBaseAttackBonus(spell.Target) + + GetSizeModifier(spell.Target) + + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSkillRank(SKILL_SPELLCRAFT, spell.Target)/2 + 10; + //1.71: incorporeal creatures cannot be grappled + if (nCasterRoll >= nTargetRoll && !GetCreatureFlag(spell.Target, CREATURE_VAR_IS_INCORPOREAL)) + { + // Hold the target paralyzed + effect eKnockdown = EffectParalyze(); + + // creatures immune to paralzation are still prevented from moving + if (GetIsImmune(spell.Target, IMMUNITY_TYPE_PARALYSIS, spell.Caster) || + GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster)) + { + eKnockdown = EffectCutsceneImmobilize(); + } + else + { + eKnockdown = EffectLinkEffects(eVis, eKnockdown); + } + + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND); + effect eLink = EffectLinkEffects(eKnockdown, eDur); + eLink = EffectLinkEffects(eHand, eLink); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, + eLink, spell.Target, + RoundsToSeconds(nDuration)); + +// ApplyEffectToObject(DURATION_TYPE_TEMPORARY, +// eVis, oTarget,RoundsToSeconds(nDuration)); + FloatingTextStrRefOnCreature(2478, spell.Caster); + } + else + { + FloatingTextStrRefOnCreature(83309, spell.Caster); + } + } + } + } +} diff --git a/_removed/x0_s0_bigby4.ncs b/_removed/x0_s0_bigby4.ncs new file mode 100644 index 0000000000000000000000000000000000000000..5643b66bb398161a97fedc75a4be42dcc332bee2 GIT binary patch literal 13901 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_bigby4.nss b/_removed/x0_s0_bigby4.nss new file mode 100644 index 0000000..a948e46 --- /dev/null +++ b/_removed/x0_s0_bigby4.nss @@ -0,0 +1,119 @@ +//:://///////////////////////////////////////////// +//:: Bigby's Clenched Fist +//:: [x0_s0_bigby4] +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Does an attack EACH ROUND for 1 round/level. + If the attack hits does + 1d8 +12 points of damage + + Any creature struck must make a FORT save or + be stunned for one round. + + GZ, Oct 15 2003: + Changed how this spell works by adding duration + tracking based on the VFX added to the character. + Makes the spell dispellable and solves some other + issues with wrong spell DCs, checks, etc. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: September 7, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Georg Zoeller October 15, 2003 + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "x2_i0_spells" + +void RunHandImpact(object oTarget, object oCaster, int nSpellID, int nMeta) +{ + //-------------------------------------------------------------------------- + // Check if the spell has expired (check also removes effects) + //-------------------------------------------------------------------------- + if (GZGetDelayedSpellEffectsExpired(nSpellID,oTarget,oCaster)) + { + return; + } + + int nCasterModifiers = GetCasterAbilityModifier(oCaster) + GetCasterLevel(oCaster)/2; + int nCasterRoll = d20(1) + nCasterModifiers + 11 + -1; + int nTargetRoll = GetAC(oTarget); + if (nCasterRoll >= nTargetRoll) + { + int nDC = GetLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (nSpellID)); + + int nDam = MaximizeOrEmpower(8, 1, nMeta, 6); + effect eDam = EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING); + effect eVis = EffectVisualEffect(VFX_IMP_ACID_L); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + if (!MySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SPELL, oCaster)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1)); + } + + DelayCommand(6.0,RunHandImpact(oTarget,oCaster,nSpellID,nMeta)); + } +} + +void main() +{ + + /* + 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 + + spellsDeclareMajorVariables(); + + //-------------------------------------------------------------------------- + // This spell no longer stacks. If there is one hand, that's enough + //-------------------------------------------------------------------------- + if (GetHasSpellEffect(spell.Id,spell.Target) || GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND,spell.Target)) + { + FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE); + return; + } + + int nDuration = 10; + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration * 2; + } + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE)); + int nResult = MyResistSpell(spell.Caster, spell.Target); + + if(nResult == 0) + { + int nCasterModifier = GetCasterAbilityModifier(spell.Caster); + effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHand, spell.Target, RoundsToSeconds(nDuration)); + + //---------------------------------------------------------- + // GZ: 2003-Oct-15 + // Save the current save DC on the character because + // GetSpellSaveDC won't work when delayed + //---------------------------------------------------------- + SetLocalInt(spell.Target,"XP2_L_SPELL_SAVE_DC_" + IntToString (spell.Id), spell.DC); + + RunHandImpact(spell.Target,spell.Caster, spell.Id, spell.Meta); + } + } +} diff --git a/_removed/x0_s0_bigby5.ncs b/_removed/x0_s0_bigby5.ncs new file mode 100644 index 0000000000000000000000000000000000000000..fd11e5e652c8bbba2e4edfd3c3483464696546b2 GIT binary patch literal 13652 zcmc&*3yfS<89w*U?6lq8mRh!@Qc8zyw_qucf>45mGTpsxM`mX>Gt=FQ;IM2LSXkO- zTMGC#D#3)r2fh$UATbgWH4@MmG0{X6qQz)ZLWvd8V8nm{u_hG@>vz8Y{CDoTd%F#Y z5yITP=lt*2`OmqBYJa0RyzcCCHyLw5^HhU><`zv@;J>+0|CRSe`3|#W=Pj+V(VKRU zPF%OMwd0!Bj`3?pZ=T$XnMJ9YTX(NpV@Pq~nP!=po}PXZlyi0@_p9FA3d^f|xqW-g zj^($V9suTLljrk*0mTs{v3QAP~{NK0$+xR@^dWSgTMUwfHQ2Z3t? ziVAgliU}sopr=Tfm@Z)Vih%*EIPaKK|=+crBzJ>AI# z)kGjT^71e(9j6vz>U}x>8J<*hAe}uawYK@OJrax#{TDJUoeT9i}reb!AY)yQH1570&DyJ3iF<426B zZhwPI!0*vG)JYsx#o!Y%h*-qSZ4x@LnnDOeOdXPF0vx#~qD!TrhPNjqbdfsmyG#;# z@UTr4bJ|&8fTwU1upqiA0VeJ)TA>!wsFhNq*{Vm);Zi+cury$#d7=CXpzihOw)X5E zpPamY*RC5O?c8uSOmqIM(;%$Y@6CAuc!c72$I?-f)i$%Cgp7juIfg^9q7DT=kRe34 z45>c>-3$nQNT)FLoIuB6kD((n1hXqmvrC2!wui#kWaxPvA{#KJoq{fCBc+ZpE2Yjk z$@IdYBVoZ0>kDAT73xj*J-wR^pq`MQ2gULzb;|nC2r&MD|)HO6UantD3 zZKZ1_Ces2Ese?>W4l$c+H0xa}>5U>MQwdD|`_D2-l!0iwhZ6WXPn5fTl>S=PLkTlb zuJuty$_)=CpMi3|k5aBS9m>hnMN$Wfisd-gscun=(J}2sL>+=*TdwJoIKWBg2)sNY zVUAjqa0?Zn?+$Z?nxW>rnw)(+@27gxr5WO_;(m9M5XfI zm@|vQY-%8mT_Nf)?-K5B*>r8Z**GN)wp2L1B{OLeWHcICW6UW!>aSBAg@H3*G3wV( zEkPNuC`^8>VfH3QDG ze)&F`Q>^U4#(?uu1cTeL;s>%WLUz%}F_M*3c*Ld5W_l301xqndyA#zuRs4u?VhTgI zYQjTSIFE<?$lZ`^W z22cS6FAJE;;dS1W<47@fKa6;%1e@86y#Q7d?%F0rCk@+=8#+PCVBs@1>bjbhOz z?33Q8^F@A_<<&8tbKuXXgz?ky-h$}MIfZhmpwQ*pp|{dYB**5ll=F`$xJTI?d59k~ z(9AM!yn^uO$`x7kln4a+Xf(bVBoac*r|l27ZXG8Qlfda@-H;&q%Q%loZw0472`o0s z6jbi&Euh~@_yYiK8bRAq0^-F?N;?oTO z`%61v;w2#6OX@7_uqMtCC)(#ZdC*xMB%t!sp<0`hs

    LEv|SAY0n{Gno5`0&)3d zkOa>NJpj)Z)Se)RD9AJ63^T!qi4yd$#P)-$lvmBgwLZoZ4r3O79*5^=9R=jFXP!*Y zZ|9-VDx6<5M#|0pt*xla(qA3wZFZbxs{b-8@b~2J zcF3V35%FrZKA*_5?s#|2`PHEuF6j`?R*b2e(z4<<{1y z3fo(Q50(b1QG>=dZXNK-L2CC+9!LP%19qfJGZ!NCJ_^|`HhzlIdd>_**C_$E-628a zleIIbM~yNLyIh03HR`{do~uanf_?RA2G%vz`OBv|r$+rc9sGrEv{2MGEbqfssJd}5- zL+WOZ%!tZf{VCibBI&M#q$MGm*cRa2lX_w2&KX^_P?d4=Ds{v*8+58w`+j?Tye_cT zEbrVox_8|E#q;CDNg_$&D-54O+l^!aD|HLKO)8A*zGS0@d0G=D@~z3yxIQN4XoK)? zK^S)zR@`s}*-M21n!LGl$KQ!)P{@6d(V*8&V-ID+DE+d4Z{Xt&J|Uai*o_Gx-~X{! z&zRv=tk5C|e_w|HSzhHju3nXx`#)yM0lTccr7WSjY}HG47mMs$@oO|mxBa{4uOR!1 zB;WD#=pYxjR36b#!M-pN4G3X+15$JJ1^L1Mh^iq>VzQPtbixDkL?v>bd?x z7915v5@SR_;V&=1Bo{#xPL|Ay6LBr0?mda}if|%xwJhpdyQ*RmuX9{jF=$S8rd6hT zo{?lKMf#m%Y92~4)!qLWDLRai(N=IY(N;hgi4ci({=NzA9&Il^|CMzp3am0S>5P2t zdy(uDy&grd2EIr92(B!ve4vqAE+1g9?s|IYH@;I?YiYSvl=1`z;X z8Ms~o(T-PqKXoKoz~OM3b!fUyc`iMO@+XX?UlL@ac-noITHp~Cco2AGOu9^ z9$>?EJl0)zFkSBRSqI;rmG!%mtTROWb8?=d`6oCu7dlcWT=7_T>3oSZXkXF1(9kd& z={;hdz|Or|Ej1%OHH~e)SoUXNBnd%e4L*FqB9Wa!o&Ja+L3o}e+>ejxjWk_t8SLKS z*idMLNE7@rxQ|J-3(o=#*I21^d}`Iv@4H{{M)h0phrLlfefx|z>dx8Bo!+RP-`(Yn z&T%JocYC7+H~IjB&B-tF#9k&XJ~YCbjQTbjOpaIS{Gv*2YxF{MBiQ34UlOK{^^z- z0!A1%OK2h?V!BtlAl|NqL*~CI>n8Xm{C~)ypF=>zn?ybC(qxD7`kWxU?G+;5B81N| zttp7)4L%fL4UL883U-N0XNP1;X(TD(KGNJ2(k(<%wV38oVW5c>B^V`uw=tH(evhvC zUW)E*X<<^^H^$OOQb@NRN0{&`C(JDJwvzHDPhw(u)ir!#bYXJSFHSw+ocg>Kv+#aG z+8zr5)fmIY8hf81xl1B|vzWQx(}GTv)dswP7vKg$M#27#V|mE3?0AOuxx(2;eSuFs zi7oz2%27-?S#5pFA7isQt;$=0O5Xj3)X|R>Bp7jmI1TzegjD}Xgw;O6fQOJ33jg#G zph+V7vjXmMA7R)-$cTJ%myb~P5ISb&m$}AA@Gp)OG7#4J2>u-bhSS4_ zU1swpbT5|EC|iEAnl%N&eT+gV+i$Ihi)3vMWp#oGRPa?wdyhm1KoeyZaR)`#@RLl~ zPiPK>JL0b^XdlL8UfK|t2}ABQ052@W7r3R)zj{@5qfe+a2z#N725hE-2iilu!;m1oX6B#uHswp)Pzg)5j8z=IYOQ#~y z5z#$)WFP!NPHLqMM~0D-CXe=%JG@ctO0V}uwJV+UM)gbaZf~^1rQcqf>kbyHBh(DK zh>)B?Cl8Mt&6sJ5-7;n_=8P-{J~gqf^i}>$GM=D2sUF{euoi+P>)vzMN>!KDJn{W7 zEQ!7EjZ3pgmFg_1y>yi76FgbjDI5xC!b~DQA}w`fuYrLbvOT&tf2TCvB>sDRFS6U% z0wo0m-(+iBu+X`=Vq*SEdV?NBs0kuM1yE;V0LP!aPftoP8=sI+@Bx71u9*NJmH>!P zT;yZh*`%TCU&hmZuA5#`1dYpnimZrFdJfYpueuQTY==I|ol-ZUM$h&kdtcpsg((e3 zEnJ8qS21+FqEcyl-P)=vZqm@;rHUZFoCGP>;9P-5-YwuHsBXZMZurML$==+jJiz`= zxxuje?K4nf`lP^{j-|W1H6u09vxgLE?LE2d#%g*Jozg)ARut0 ztw9DE+`2ocVkdYT{oh0IWC{b#C&J}P;unF1@P3f!AWJcHWnIfrjVa8g|5q8N_jjBD z6kE??zXH=QxA(JZ+gj1!P;CUa+9d}zMO#b5sC|~SpgIr82AXcJMm`y09 a)`zNu;s0Wip}fMiX+Q7i%v`;Y+W!Hj=M$6w literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_bigby5.nss b/_removed/x0_s0_bigby5.nss new file mode 100644 index 0000000..fd44890 --- /dev/null +++ b/_removed/x0_s0_bigby5.nss @@ -0,0 +1,146 @@ +//:://///////////////////////////////////////////// +//:: Bigby's Crushing Hand +//:: [x0_s0_bigby5] +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Similar to Bigby's Grasping Hand. + If Grapple succesful then will hold the opponent and do 2d6 + 12 points + of damage EACH round for 1 round/level + + + // Mark B's famous advice: + // Note: if the target is dead during one of these second-long heartbeats, + // the DelayCommand doesn't get run again, and the whole package goes away. + // Do NOT attempt to put more than two parameters on the delay command. They + // may all end up on the stack, and that's all bad. 60 x 2 = 120. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: September 7, 2002 +//::////////////////////////////////////////////// +//:: VFX Pass By: +/* +Patch 1.71 + +- added duration scaling per game difficulty +- incorporeal creatures won't be grappled anymore +*/ + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "x2_i0_spells" + +void RunHandImpact(object oTarget, object oCaster, int nSpellID, int nMeta) +{ + + //-------------------------------------------------------------------------- + // Check if the spell has expired (check also removes effects) + //-------------------------------------------------------------------------- + if (GZGetDelayedSpellEffectsExpired(nSpellID,oTarget,oCaster)) + { + return; + } + + int nDam = MaximizeOrEmpower(6,2,nMeta, 6); + effect eDam = EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING); + effect eVis = EffectVisualEffect(VFX_IMP_ACID_L); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + DelayCommand(6.0,RunHandImpact(oTarget,oCaster,nSpellID,nMeta)); +} + +void main() +{ + /* + 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 + + spellsDeclareMajorVariables(); + + //-------------------------------------------------------------------------- + // This spell no longer stacks. If there is one hand, that's enough + //-------------------------------------------------------------------------- + if (GetHasSpellEffect(spell.Id,spell.Target) || GetHasSpellEffect(SPELL_BIGBYS_CLENCHED_FIST,spell.Target)) + { + FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE); + return; + } + + int nDuration = 4; + nDuration = GetScaledDuration(nDuration, spell.Target); + + //Check for metamagic extend + if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100% + { + nDuration = nDuration * 2; + } + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE)); + + //SR + if(!MyResistSpell(spell.Caster, spell.Target)) + { + int nCasterModifier = GetCasterAbilityModifier(spell.Caster); + int nCasterRoll = d20(1) + + nCasterModifier + + GetCasterLevel(spell.Caster); + int nTargetRoll = GetAC(spell.Target); + + // * grapple HIT succesful, + if (nCasterRoll >= nTargetRoll) + { + // * now must make a GRAPPLE check + // * hold target for duration of spell + + nCasterRoll = d20(1) + nCasterModifier + + GetCasterLevel(spell.Caster); + + nTargetRoll = d20(1) + + GetBaseAttackBonus(spell.Target) + + GetSizeModifier(spell.Target) + + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSkillRank(SKILL_SPELLCRAFT, spell.Target)/2 + 10; + //1.71: incorporeal creatures cannot be grappled + if (nCasterRoll >= nTargetRoll && !GetCreatureFlag(spell.Target, CREATURE_VAR_IS_INCORPOREAL)) + { + effect eKnockdown = EffectParalyze(); + + // creatures immune to paralzation are still prevented from moving + if (GetIsImmune(spell.Target, IMMUNITY_TYPE_PARALYSIS, spell.Caster) || + GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster)) + { + eKnockdown = EffectCutsceneImmobilize(); + } + + effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND); + effect eLink = EffectLinkEffects(eKnockdown, eHand); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, + eLink, spell.Target, + RoundsToSeconds(nDuration)); + + RunHandImpact(spell.Target, spell.Caster, spell.Id, spell.Meta); + FloatingTextStrRefOnCreature(2478, spell.Caster); + + } + else + { + FloatingTextStrRefOnCreature(83309, spell.Caster); + } + } + } + } +} diff --git a/_removed/x0_s0_clight.ncs b/_removed/x0_s0_clight.ncs new file mode 100644 index 0000000000000000000000000000000000000000..bd6d08e2e862d8a931f73e003a586258cba07615 GIT binary patch literal 4444 zcmbtXO>9(E6u$4xwEWCSe?kN)mFEyjLQ`lZ1~(=S?UPKLQZh4^l8BROJH_fiO9vD; zY+ShUXN5nB3pegv7}u`U1#uxPh#`$JE?BrAq$XW7so(w1J8#|_9?uZlWZulV=jS`$ zIrrTA&Q4an*@@%hr;QnS^Lc~6ot|-f`JZw1Uw#i}d(5*}-mfn-F0VG0FI}lG&es>4 zOO5NTYgifVTDh@0am>(T|EL)<+uPf}z;nh*oNo)6LpD}^*#5d@<5;;ndenj5-v;i? zJ5DxZWjQZng|lLKx>m8?mwr;zFOxbkV&%9lZqQTlOc^}uBD%kgja826bBQEd{# z0F`?AiRkWUu2@ArVTyo;XaF&W;x=7vSy$%AF{5kN+Wn`;IODE>7lAI@1p3}$2*c0s zkoWfzSp>gQpak%_L3Vz2v2s-?l5lqeNJtS&8zD>h@u4fwHLm($OzY@=miRY>5YKw( zpL?-hu9u6|TD{`eW{Z_~iHRl=7#>>+RKMtM&HE%DeEh(@nE9CsUW$%+)gPZ)|&8WlM|i0Gk;NPrMjbEth^m*8Msv^DA$M4KW4 zx9ZcZi0EENhioDZJftAVegTA@cYEVK{t{R`bZVl0u2}Y`Q31bF zFHTKW>yz@m?9cjTfO~{$fYYG;|D<1F&}j7Uy5jJmr6DR-s$SnvVL zp5od<)mFLuUTb<~5t1DXtwy`uY-6MRlmUnbvb#WLLUN1@QUy=m+bhXJvJcHEgl<7Oecar`4ezXJ#z2%ix3+w_vGzf6e!0~RkVZX(u?ZJFCR43da)-GiJuVuy z8x|w+Z;#1V4@{=~xtNKQVDeSmWOC+g%*0JFS&EySFI8hE*#wi5ag);7T3~X3xyaTD zbD?avmPHw3*X{LGtR;f@bvLNVJ!ONOY@*7`(&m5Z0JSUTotf3e&4a|w!!zMb=S zgbkjsZu+nutpJZP$h->f*W3MSxA% z?V>1IV0fZK&j?W$F^;KX4bD%N>jetfV`8^81X5Ey_D==dS9nx{~h?kkq1`buDPs2fo?v1-c=n?!7qhqUNXjtkw< zpFnpEM2v3d=$PH87DT!Hf9Oo|kd{Vxz#{s9M1N}PI(BK1qJ-_2NKZwR4ncOKku$~| zRB8O2q7(!t=t4@}5RQ(Z1l_GbH=K3ch<5AStFO~1Q&A>Q*L{UkdBc-43VtxIJ_&~~ z&6}P1CPOy{dg<|@99zF+*Ew281PmKnXB02Z<~T=l0i9*x${`xph#lf7U>%c-od5~J z8X=Fkk@#1yFRwP{Tg_@~uy0j7>TA z1AHhT?lnt7CU!D@tUGRoF0sMnDxG_Q+{pDI>0mz?u+nu;P+)wb(DZ@=8VkQ)_TlNdEcT2VDkxYd;&M0@Mm8-%x}zoF1Sf(6dbDb`)ZKw-M~t{0WZDa zX}vffQG1YhAJXHRMrB9f-HjS2B5zI+B-G{0p4-UMd@KNj{lLX1DN96tK8SXeyBKZ( zRBgdw^gDFLEuvKgSpl?Lk;O}53`B`L2Xd)XxHIM=#_M7X#EHg`cNq_`~;jB;b%h_r>7leW0f!S77SdZ#TCiet`4ieqMzit|mR IIGdjN7g-meU;qFB literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_clight.nss b/_removed/x0_s0_clight.nss new file mode 100644 index 0000000..771326b --- /dev/null +++ b/_removed/x0_s0_clight.nss @@ -0,0 +1,80 @@ +//:://///////////////////////////////////////////// +//:: Continual Flame +//:: x0_s0_clight.nss +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Permanent Light spell + + XP2 + If cast on an item, item will get permanently + get the property "light". + Previously existing permanent light properties + will be removed! + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent Knowles +//:: Created On: July 18, 2002 +//::////////////////////////////////////////////// +//:: VFX Pass By: +//:: Added XP2 cast on item code: Georg Z, 2003-06-05 +//::////////////////////////////////////////////// +/* +Patch 1.71 + +- any item that this spell is cast at is now marked as stolen to disable the cast/sell exploit +- spell can dispell the shadowblend effect +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run + // this spell. + if (!X2PreSpellCastCode()) + { + return; + } + int nDuration; + int nMetaMagic; + + spellsDeclareMajorVariables(); + + // Handle spell cast on item.... + if (GetObjectType(spell.Target) == OBJECT_TYPE_ITEM && ! CIGetIsCraftFeatBaseItem(spell.Target)) + { + // Do not allow casting on not equippable items + if (!IPGetIsItemEquipable(spell.Target)) + { + // Item must be equipable... + FloatingTextStrRefOnCreature(83326,spell.Caster); + return; + } + itemproperty ip = ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_BRIGHT, IP_CONST_LIGHTCOLOR_WHITE); + IPSafeAddItemProperty(spell.Target, ip, 0.0,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,TRUE,TRUE); + //casting this spell on every crap and then sell it is very well known exploit + //SetStolenFlag(spell.Target, TRUE);//sets item to be stolen, thus harder to sell //no need anymore - the value of light item property has been set to zero + } + else + { + if(GetHasSpellEffect(757, spell.Target)) + { + //Continual light effectively dispells shadowblend effect + RemoveEffectsFromSpell(spell.Target, 757); + } + //Declare major variables + effect eVis = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eLink = SupernaturalEffect(EffectLinkEffects(eVis, eDur)); + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, spell.Target); + } +} diff --git a/_removed/x0_s0_dirge.ncs b/_removed/x0_s0_dirge.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3b277c04a4a9926067ef23550eb1e66193a80e23 GIT binary patch literal 3979 zcmbtXO=w(I6u$3gCOFEg*rqw^EqOlMNCJo*!DFcL{X z?8c2tT?>MOOF?iYx)NOJM!}8XB8W(ZF1jcsi!3VRch8x7^X|*^VKE_-dFP&UzH`2F z?z#6hDlMsQuKPgU!mzpiSEd)+6dNDg4LCjAZWM_ERW@c_{ycPLVj9f5PV}h79bx% zBLD9T*ovQQtN%dpJUSOE{7k&jTCp<6&6n;-wSk`~DAZPdcSa!jq{LiT1 z$hCdKqxc>OHxb{SaLE=aNS;Pt<1k33)?k4s_8p~&hYy(mPW+CgRtQj~EJNRO?R<*Y z+czL6buO;Q_2x=k38TuTX0uA*7dSBbyzfcW()vqrEw1^kb{qxmjvu*s$z4uZBQ}49 zQgIn|eRpGP>-P5c+W;N5vn<6@<}w_s+Lj%opa-&@M3G}ebQH;1S!7Kqz+V(30yC_L zP`_o-ff5m0OlsRAZBVAP#UHGV&d{O*7NH(mw9TSF4@LGv7Tr@Kf&nN6Y88+Tw=DI> zqzZ!ST}G5$JMS4PFN4MD<;8f-uLX5fAc$hWT5ZJ@{$2|@K@AB%L^Z%^o_p>u@{1Uh zEAnp@yje-!tA=!>FV&He?r2|1yH|Y7@gbDs{?5&ota9zWt@`#YNQQ21UEkf^*v$$1 zM+ZUN<30qL1Ck?TRE6UydgGidBq#CRtOB!~EH_KYEhr}+9~`HQtsRvyA}XxyY`$}S z=Z=44b1NMn8RaMpS(Kb`TJ5MXL)GwTQBb?-HX;0<=S9+_8mt>8)&P@FO_NHqVVLlg zGEv?%O}b&rFmVTRQ!VQJ1H7uY(~Z4=~JO~qcp8`2FvU|o!1Jy{Lv2@ONl_-vlXw(^O-R)}Od zrBb1M3rJ+jE<1<&ieO(i!g4cRJfmIoV`Fwx6!6JNZb1a^_hMN_WSs>sr^0qnH@0ou z>;zF1Rs&@N@|L(U^em$#Im-t+s5h(O#W08r2kCtT(-L74?(ADqG{=;+qH)JIF&8dXnRE8vQYJ8$lR!Tj%EGMwLO-YX67MK_0Tw z&<8BgpJMbUrtZ)#3n@w11S35WO=<{IHwr#u#Is6jo>L^1J6>K?O}gk@}%x7G=ld%KBM3VbL5I1!gyG>Xf9q==on{N5_ zcPQ&`3LcB<=0^78B!y=>iH>WX$9O%@*LBn%xOs_Ntt3E~d08K1;~vz8rJC&4ql$bG zQ2cc9JF1~3s70=zmn|h gtw1j(q|f_j*w%S)^Kc%(JS|_Ge>3vnZRLr70lp*QegFUf literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_dirge.nss b/_removed/x0_s0_dirge.nss new file mode 100644 index 0000000..4613125 --- /dev/null +++ b/_removed/x0_s0_dirge.nss @@ -0,0 +1,77 @@ +//:://///////////////////////////////////////////// +//:: Dirge +//:: x0_s0_dirge.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All creatures within the AoE take 2 points of Strength + and Dexterity ability score damage. + Lasts 1 round/level +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 2002 +//::////////////////////////////////////////////// +/* +Patch 1.71, fix by Shadoow + +- disabled aura stacking +- aoe signalized wrong spell ID +- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others, +thats module-related) +*/ + +#include "70_inc_spells" +#include "x2_inc_spellhook" +#include "nw_i0_spells" + +void main() +{ +/* + 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 including Area of Effect Object + spellsDeclareMajorVariables(); + //change from AOE_PER_FOGMIND to AOE_MOB_CIRCGOOD + effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCGOOD, "x0_s0_dirgeEN", "x0_s0_dirgeHB", "x0_s0_dirgeEX"); + effect eVis = EffectVisualEffect(VFX_DUR_AURA_ODD); + eAOE = EffectLinkEffects(eAOE, eVis); + int nDuration = spell.Level; + +// effect eCaster = EffectVisualEffect(VFX_DUR_BARD_SONG); //unused + + effect eFNF = EffectVisualEffect(VFX_FNF_SOUND_BURST); + //Apply the FNF to the spell location + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, spell.Loc); + + effect eImpact = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc); + + //Check Extend metamagic feat. + if(spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Create an instance of the AOE Object using the Apply Effect function + + //prevent stacking + RemoveEffectsFromSpell(spell.Target, spell.Id); + + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, spell.Target, RoundsToSeconds(nDuration)); + spellsSetupNewAOE("VFX_MOB_CIRCGOOD","x0_s0_dirgehb"); +} diff --git a/_removed/x0_s0_earthquake.ncs b/_removed/x0_s0_earthquake.ncs new file mode 100644 index 0000000000000000000000000000000000000000..ca0beb30aa5e47bd469a264211e4a7536ece47be GIT binary patch literal 5505 zcmbtYO>9(E6u$4x4?k0(VEL!;tWaVB1<^o^#!TBMoj5dRn zifCe@iHR#?;zkpV#;swY5~GO=h>|ph7#Ae6Af$_GF!j6Nx%bVxk71NZLucN(=Q}^& zIp^N{S{-TxW4j;RHK^38vzrwDEe@2Q=TFABKk~dXn^UWgpN94^!ek_)WK-# z@R7-vr(eR#%GAoMCw31gTI}AgHmHS#g^RG9(UQ#CzRYIrtE*Q(EvD?lZ60)HRTf^e z*=#XTDx1Nw{JxM=>PtT%xJZHD-4c0I6lJuTt18Qdo@D_Yt(PayxL`Q9D9ZzM#-s0R zaHSRI4A{fcEJ9%r$=^Dx643$#fWS)z2sYH~d5Uf+{V?F^DExI+WZiZ3SqY=;_cL~d z*2U^|mDL0l-pVrpG;199m9$XE`!#00{4r--Du(Aa(m7N3P2KJn1CV7T83)CN<>_;wN$2-=XP`> zlzsTWMYoT7Kq_QY=O;K57ce@T4HSh)36G2X|A0p;+!=ot9bwtij?d~zp)4z&Jk-!tF26EenVEuQ(V^+dQ>PA}$|?Wb41%~O6Ad!kBuCF6RpRLi zdL&s$*5JEa1)(%qZjsO|D5s6rWcIw1He*Co7(IFP*yPDG#e+wu(*Y8cV;JantY#X` zdf|Rj9dJ>lhXIWJuu}%rK!(E!2jaDXyzfGWYE=i~w}BjSA>*Zn1If05>~SHbYSTdE zT#?a1)WRI|TWZT<8DrP=1XgTI1o6|psR`H?3;aEgDj$_L$Ig`~3fde?1D@?KcH3GS zh9bQ$6oN%@gSS~%%dwuU274lQ!*2LsXM7USrdNn964`50;c5Yi^!k07)?Cr;6HZv! zjwaT{CQNL?Zi)iAl+bKE?_GU5BCj93tS>dgiZixRZ7i(UOT(eXfV@4@8162GS!!>f zQX4KkRSN5lf%F^!+D+fXLmfQEI~{GI;7M2~KXGpWu!eprVY65%?k{z67x$#DsQ;d+ zD0VE{CFJc{*xcF}4Tnm_a#S2Fl}pWMI#7rcpfiP?Z8=$5TW#3fkd7!#ti^I*+Y#H& zLMQJ@j{DNy??AT`ghRKtZKozm2T?BnA3EDv=#)l$z{2|q@qX9TwQ!w0B?((Ap6-e! zy9u%z?fq_}mAdB?r69PCE~M0r!?8PK8{Jz*H{RX zUKmN9r5tJB}1PD0MG7(u_#6Gul_~9+kyK>sbW2G%;zp(0#W%Dv8=Xx8M+JHgGD9``Kdc`H? zM+pe_vFm@t_ah}12#O@Aitg4{Bk*%xA6#CHbKp`QQZ^G#y`En_pkbLA)S z9-mWN@G{vLFExioqOe*VEQe8bbSNs;!brELZrD=T(C_r#*JK_{(PXmLaT-kjI@AA5 zzPDNqI}(AM5h1HvGB1qE5$bi?4T5Nv#YC9_L#z_tp*UU z2K_E7){B?+M(scpRz_>%cx#ti$Y3~994po8t!>yGQjgJ*-Qv(~=>&uyrx$NI7^F%a aU%yII&rSYz+jflD(@OrPGEZu51nM6u5urr@ literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_earthquake.nss b/_removed/x0_s0_earthquake.nss new file mode 100644 index 0000000..36514a0 --- /dev/null +++ b/_removed/x0_s0_earthquake.nss @@ -0,0 +1,93 @@ +//:://///////////////////////////////////////////// +//:: Earthquake +//:: X0_S0_Earthquake +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* +// Ground shakes. 1d6 damage, max 10d6 +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 22 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Andrew Nobbs May 01, 2003 + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + int nCasterLvl = spell.Level; + int nDamage; + float fDelay; + float nSize = RADIUS_SIZE_COLOSSAL; + effect eExplode = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30); + effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE); + effect eDam; + effect eShake = EffectVisualEffect(356); + //Limit Caster level for the purposes of damage + if (nCasterLvl > 20) + { + nCasterLvl = 20; + } + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShake, spell.Caster, RoundsToSeconds(6)); + + //Apply epicenter explosion on caster + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, GetLocation(OBJECT_SELF)); + + + //Declare the spell shape, size and the location. Capture the first target object in the shape. + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, nSize, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); + //Get the distance between the explosion and the target to calculate delay + fDelay = GetDistanceBetweenLocations(spell.Loc, GetLocation(oTarget))/20; +// Earthquake does not allow spell resistance +// if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay)) +// { + nDamage = MaximizeOrEmpower(6, nCasterLvl, spell.Meta); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. (Don't bother for caster) + nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_NONE, spell.Caster); + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING); + // * caster can't be affected by the spell + if(nDamage > 0) + { + // Apply effects to the currently selected target. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } +// } + } + //Select the next target within the spell shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, nSize, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } +} diff --git a/_removed/x0_s0_elecjolt.ncs b/_removed/x0_s0_elecjolt.ncs new file mode 100644 index 0000000000000000000000000000000000000000..364d130c76851bd01f172e8f455b56fc267f6bfb GIT binary patch literal 10989 zcmc&)dyHIF8Nc_=>}OMwzB#p&#AJ2E@FnVEL00WZt!78jP? zW((!vlZb{tNEC@Eq6s8MLZSu&8e>c}u>vtA;g1?h+%&{sQUiphsY$`o^>=>XId{&v zdv_WFL>hMHe&>6?&Uen8O0kyTyZLjQc6i?UcUF7&Z$aJ*a{QMG%s+Wvl5O*rP2LkV zM(#W?GJe}+Gd2!hPzKFCgZSpow-z3pWcddGW;f&T@r_*^;aWeq;aPYW^7 z@$en+%4QXN!^2=IUKfsPbxvh-3I_yrpNuoh^BJYWS*?QKou}Rxi&$T+o$<1??yQ5^ zzR1RGcQK(1ZKV=#!eqtgq?SPsU4B?F`1jjfKTS&p6LxUPct~kJlXVR>w8D=FRQI$f zomX7D_gxv4qjI5EkE&sPZ=q`Z;4cj1E0DUjZi)^b7@L^*>eSR7;IklTMd@v6xeUfs z436#1&^a)V8l6!o;dRB@F(T`99tae|H+lpix(4L`PC#&@fJ}seUH6GSW0n9qF4#uu zS%A(62x(+^dQ$>A)&vEo1oVahQH+Y6Qq=E+HIgsPla)pZdcU{L^M`|6oKi%&8eUwp zb#pXSD2D@xKv<0m{r$D5DBsKB-mnbiPN~>#0WpdGNxsm*NF#s0GvBA2cdY|msG+fD z#O=^fR-pH==m%967p5CE73K1wiGit6K-wDOWA zSH4G#1!OtCyHOA?+u^nX2bYt_Hy6`lf7)0KjXH;>$L}1OzOQiW_(W1c617nc6ed

    _4m{h^_O^R`H0xLpdh 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 AiU0rr literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_elecjolt.nss b/_removed/x0_s0_elecjolt.nss new file mode 100644 index 0000000..3cd91c1 --- /dev/null +++ b/_removed/x0_s0_elecjolt.nss @@ -0,0 +1,61 @@ +//:://///////////////////////////////////////////// +//:: Electric Jolt +//:: [x0_s0_ElecJolt.nss] +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* +1d3 points of electrical damage to one target. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 17 2002 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Make SR Check + if(!MyResistSpell(spell.Caster, spell.Target)) + { + //Set damage effect + + //1d3 of additional damage roughly for every 3 caster levels, but no more than 10d3. + int cMultiplier = GetCasterLevel(OBJECT_SELF) / 3; + if (cMultiplier <= 1) cMultiplier = 1; + if (cMultiplier >= 7) cMultiplier = 7; + int nDamage = MaximizeOrEmpower(3, cMultiplier, spell.Meta); + effect eBad = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL); + //Apply the VFX impact and damage effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBad, spell.Target); + } + } +} diff --git a/_removed/x0_s0_ether.ncs b/_removed/x0_s0_ether.ncs new file mode 100644 index 0000000000000000000000000000000000000000..124ca020c9aadec0901db9d4a3be5b50c324b757 GIT binary patch literal 2814 zcmbtW&rcIU6rR~_%a3ia5+Vp9n<|iCP>>kBcv#xiY}^9rZVDdE1`#8%rlw6yxOnmE z*~ElD!}ur2#TfqpVvO;?frB9&dLY&}@9k`NnspN*O`!YDd*A!!dv9i0EqP{b@#ew` zV}pOLGWh8?nU=$kuE`HQ56>}-DBNHZtkdaygGgNI~w<-`^|)D+d}roQ7aK1i6TS2P}Rz+l}`*J{+?Qme33n)m)d< zgkCaL0+NH7hb$ALJJs<4%7d1-qy+@R!yXlq!ayyOa9BDdS;wXbENtEm+`zRwKd9P% z&8lW{!iy~90~&pWp#1Ve(0a8~uRm`zUI0VCmX^tuQkQ{P?zX7oK0zcJ)fPQrc`^;u zp^}-Vn2ud~_qkqX>0Ks>P2A?9%HbG!+1T_fy(S@`Vf{rAF-a}Co z$_>~J%?Gx0LbeHgFM`SqEoUkrcfiG|<;7s#a_tIqz^(>Xx$Ffc`tI5_+XcNR&<*f3 zN2Br+c|n7uqP`mDv@q|kf)0deqzq#RLllnydq?^}%8=FE_C%N6*Y!%{DIk5@^{rNG zrv=mhSqBkEG*n<_!sf6tbcOWf%@NuxAfxbI?E<+RZ#N-G3zj3tn<3mWZ^|8mB4fR| z`*N$fXFb`i_X@_8j3 zyh~#acT}t?PzaXhxSTJXwlO4@ms!U!`=S9)SZ5btJ>CtRiKq;AV}G70oZN^QF>_LG z1@~*fMkckQ-aS`X_MSqKNu{_PQH0va-5v|*^@6lwPQ=B;^F^VE&wwxEj&E0#V;ij1 z>}u61+cF2tTcW{$t2pK>oTX%f%39gE@7Ps^p!Xa>Y5{APODPqjs}i}y@rtFT)rn>U z5=OC3#rCa=^}tCh7tN&TsP;bWDBM`sGnf+e?J;mpd+T<|vE0B~aa_lLlwu*hZc{8w z=Tdelxf0x*=vCBftjxs&n`CSfLt6E?$Hm_2|FByTq1er5=fy!4B3$=>>`Y=v+eY+) zh3Xfn`nj#^=A~7N8#YFj&SjIl1aTS}y<^xFiK_1@M8%26e-M>eKruFwBX7opSol{% az3cEGilZ-h`31Ta>E_|80=z0tP4*XKI))Gc literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_ether.nss b/_removed/x0_s0_ether.nss new file mode 100644 index 0000000..a1322bd --- /dev/null +++ b/_removed/x0_s0_ether.nss @@ -0,0 +1,57 @@ +//:://///////////////////////////////////////////// +//:: Etherealness +//:: x0_s0_ether.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Like sanctuary except almost always guaranteed + to work. + Lasts one turn per level. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(VFX_DUR_SANCTUARY); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eSanc = EffectEthereal(); + + effect eLink = EffectLinkEffects(eVis, eSanc); + eLink = EffectLinkEffects(eLink, eDur); + + int nDuration = GetCasterLevel(spell.Caster); + //Enter Metamagic conditions + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); +} diff --git a/_removed/x0_s0_fleshsto.ncs b/_removed/x0_s0_fleshsto.ncs new file mode 100644 index 0000000000000000000000000000000000000000..874f70312feb9434a223993d471db492a8d81ebd GIT binary patch literal 15420 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 I{PC>!KW7A>IsgCw literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_missstorm1.nss b/_removed/x0_s0_missstorm1.nss new file mode 100644 index 0000000..10975a2 --- /dev/null +++ b/_removed/x0_s0_missstorm1.nss @@ -0,0 +1,211 @@ +//:://///////////////////////////////////////////// +//:: Isaacs Lesser Missile Storm +//:: x0_s0_MissStorm1 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Up to 10 missiles, each doing 1d6 damage to all + targets in area. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 31, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +//This version of the spell applies all damage as a cumulated single hit instead of spreading it among all the missiles. +//This has been done because before that the spell used to be useless against any target with 15 magical resistance or more. +void DoMassMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE) +{ + if(spell.Caster == OBJECT_INVALID) spellsDeclareMajorVariables();//pre 1.70 spellscripts support + int nCasterLvl = spell.Level; + int i, nSAVETYPE, nCnt = 1; + effect eMissile = EffectVisualEffect(nMIRV); + effect eVis = EffectVisualEffect(nVIS); + float fDist = 0.0; + float fDelay = 0.0; + float fDelay2, fTime; + int nMissiles = nCasterLvl; + + if (nMissiles > nCap) + { + nMissiles = nCap; + } + + /* New Algorithm + 1. Count # of targets + 2. Determine number of missiles + 3. First target gets a missile and all Excess missiles + 4. Rest of targets (max nMissiles) get one missile + */ + int nEnemies = 0; + + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + // * caster cannot be harmed by this spell + if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster)) + { + // GZ: You can only fire missiles on visible targets + // If the firing object is a placeable (such as a projectile trap), + // we skip the line of sight check as placeables can't "see" things. + if ( ( GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE ) || + GetObjectSeen(oTarget,spell.Caster)) + { + nEnemies++; + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + } + + if (nEnemies == 0) return; // * Exit if no enemies to hit + int nExtraMissiles = nMissiles / nEnemies; + + // April 2003 + // * if more enemies than missiles, need to make sure that at least + // * one missile will hit each of the enemies + if (nExtraMissiles <= 0) + { + nExtraMissiles = 1; + } + + switch(nDAMAGETYPE)//1.71: support for custom content missile storm spells with nonstandard damage type + { + case DAMAGE_TYPE_ACID: + nSAVETYPE = SAVING_THROW_TYPE_ACID; + break; + case DAMAGE_TYPE_ELECTRICAL: + nSAVETYPE = SAVING_THROW_TYPE_ELECTRICITY; + break; + case DAMAGE_TYPE_FIRE: + nSAVETYPE = SAVING_THROW_TYPE_FIRE; + break; + case DAMAGE_TYPE_COLD: + nSAVETYPE = SAVING_THROW_TYPE_COLD; + break; + case DAMAGE_TYPE_SONIC: + nSAVETYPE = SAVING_THROW_TYPE_SONIC; + break; + case DAMAGE_TYPE_POSITIVE: + nSAVETYPE = SAVING_THROW_TYPE_POSITIVE; + break; + case DAMAGE_TYPE_NEGATIVE: + nSAVETYPE = SAVING_THROW_TYPE_NEGATIVE; + break; + } + + // by default the Remainder will be 0 (if more than enough enemies for all the missiles) + int nRemainder = 0; + + if (nExtraMissiles >0) + nRemainder = nMissiles % nEnemies; + + if (nEnemies > nMissiles) + nEnemies = nMissiles; + + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + if (nSpell == SPELL_BALL_LIGHTNING)//1.71: ball lightning has a single target area of effect + { + oTarget = spell.Target; + nEnemies = 1; + nExtraMissiles = nMissiles; + nRemainder = 0; + } + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) && nCnt <= nEnemies) + { + // * caster cannot be harmed by this spell + if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster) && + (GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE || GetObjectSeen(oTarget,spell.Caster))) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, nSpell)); + + // * recalculate appropriate distances + fDist = GetDistanceBetween(spell.Caster, oTarget); + fDelay = fDist/(3.0 * log(fDist) + 2.0); + + // Firebrand. + // It means that once the target has taken damage this round from the + // spell it won't take subsequent damage + if (nONEHIT) + { + nExtraMissiles = 1; + nRemainder = 0; + } + + //-------------------------------------------------------------- + // GZ: Moved SR check out of loop to have 1 check per target + // not one check per missile, which would rip spell mantels + // apart + //-------------------------------------------------------------- + if (!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + nCap = nExtraMissiles + (nRemainder > 0);//1.71: this will distribute remainder missiles evenly amongs all targets + for (i=1; i <= nCap; i++) + { + //Roll damage + int nDam = MaximizeOrEmpower(6,nD6Dice,spell.Meta); + // if reflexsave allowed, make evasion check + if(nReflexSave) + { + nDam = GetReflexAdjustedDamage(nDam, oTarget, spell.DC, nSAVETYPE, spell.Caster); + } + + fDelay2 += 0.1; + fTime = fDelay + fDelay2; + + //Set damage effect + effect eDam = EffectDamage(nDam, nDAMAGETYPE); + //Apply the MIRV and damage effect + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget)); + DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget)); + //do not bother when no damage should happen anyway + SetLocalInt(oTarget, "msldmg", GetLocalInt(oTarget, "msldmg") + nDam ); + if(i == (nExtraMissiles + nRemainder)) + { + effect eDamage = EffectDamage(GetLocalInt(oTarget, "msldmg"), nDAMAGETYPE); + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + DelayCommand(fTime, SetLocalInt(oTarget, "msldmg", 0)); + } + } + } // for + else + { // * apply a dummy visual effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget); + } + nCnt++;// * increment count of missiles fired + nRemainder--; + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + } +} + +void main() +{ + +/* + 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 + + spellsDeclareMajorVariables(); + //SpawnScriptDebugger(); + DoMassMissileStorm(1, 10, spell.Id); +} diff --git a/_removed/x0_s0_missstorm2.ncs b/_removed/x0_s0_missstorm2.ncs new file mode 100644 index 0000000000000000000000000000000000000000..472e17350b2ba970255973e9f1515830894c95fa GIT binary patch literal 13159 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_missstorm2.nss b/_removed/x0_s0_missstorm2.nss new file mode 100644 index 0000000..bceac53 --- /dev/null +++ b/_removed/x0_s0_missstorm2.nss @@ -0,0 +1,211 @@ +//:://///////////////////////////////////////////// +//:: Isaacs Greater Missile Storm +//:: x0_s0_MissStorm2 +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Up to 20 missiles, each doing 3d6 damage to each + target in area. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 31, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +//This version of the spell applies all damage as a cumulated single hit instead of spreading it among all the missiles. +//This has been done because before that the spell used to be useless against any target with 15 magical resistance or more. +void DoMassMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE) +{ + if(spell.Caster == OBJECT_INVALID) spellsDeclareMajorVariables();//pre 1.70 spellscripts support + int nCasterLvl = spell.Level; + int i, nSAVETYPE, nCnt = 1; + effect eMissile = EffectVisualEffect(nMIRV); + effect eVis = EffectVisualEffect(nVIS); + float fDist = 0.0; + float fDelay = 0.0; + float fDelay2, fTime; + int nMissiles = nCasterLvl; + + if (nMissiles > nCap) + { + nMissiles = nCap; + } + + /* New Algorithm + 1. Count # of targets + 2. Determine number of missiles + 3. First target gets a missile and all Excess missiles + 4. Rest of targets (max nMissiles) get one missile + */ + int nEnemies = 0; + + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + // * caster cannot be harmed by this spell + if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster)) + { + // GZ: You can only fire missiles on visible targets + // If the firing object is a placeable (such as a projectile trap), + // we skip the line of sight check as placeables can't "see" things. + if ( ( GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE ) || + GetObjectSeen(oTarget,spell.Caster)) + { + nEnemies++; + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + } + + if (nEnemies == 0) return; // * Exit if no enemies to hit + int nExtraMissiles = nMissiles / nEnemies; + + // April 2003 + // * if more enemies than missiles, need to make sure that at least + // * one missile will hit each of the enemies + if (nExtraMissiles <= 0) + { + nExtraMissiles = 1; + } + + switch(nDAMAGETYPE)//1.71: support for custom content missile storm spells with nonstandard damage type + { + case DAMAGE_TYPE_ACID: + nSAVETYPE = SAVING_THROW_TYPE_ACID; + break; + case DAMAGE_TYPE_ELECTRICAL: + nSAVETYPE = SAVING_THROW_TYPE_ELECTRICITY; + break; + case DAMAGE_TYPE_FIRE: + nSAVETYPE = SAVING_THROW_TYPE_FIRE; + break; + case DAMAGE_TYPE_COLD: + nSAVETYPE = SAVING_THROW_TYPE_COLD; + break; + case DAMAGE_TYPE_SONIC: + nSAVETYPE = SAVING_THROW_TYPE_SONIC; + break; + case DAMAGE_TYPE_POSITIVE: + nSAVETYPE = SAVING_THROW_TYPE_POSITIVE; + break; + case DAMAGE_TYPE_NEGATIVE: + nSAVETYPE = SAVING_THROW_TYPE_NEGATIVE; + break; + } + + // by default the Remainder will be 0 (if more than enough enemies for all the missiles) + int nRemainder = 0; + + if (nExtraMissiles >0) + nRemainder = nMissiles % nEnemies; + + if (nEnemies > nMissiles) + nEnemies = nMissiles; + + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + if (nSpell == SPELL_BALL_LIGHTNING)//1.71: ball lightning has a single target area of effect + { + oTarget = spell.Target; + nEnemies = 1; + nExtraMissiles = nMissiles; + nRemainder = 0; + } + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) && nCnt <= nEnemies) + { + // * caster cannot be harmed by this spell + if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster) && + (GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE || GetObjectSeen(oTarget,spell.Caster))) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, nSpell)); + + // * recalculate appropriate distances + fDist = GetDistanceBetween(spell.Caster, oTarget); + fDelay = fDist/(3.0 * log(fDist) + 2.0); + + // Firebrand. + // It means that once the target has taken damage this round from the + // spell it won't take subsequent damage + if (nONEHIT) + { + nExtraMissiles = 1; + nRemainder = 0; + } + + //-------------------------------------------------------------- + // GZ: Moved SR check out of loop to have 1 check per target + // not one check per missile, which would rip spell mantels + // apart + //-------------------------------------------------------------- + if (!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + nCap = nExtraMissiles + (nRemainder > 0);//1.71: this will distribute remainder missiles evenly amongs all targets + for (i=1; i <= nCap; i++) + { + //Roll damage + int nDam = MaximizeOrEmpower(6,nD6Dice,spell.Meta); + // if reflexsave allowed, make evasion check + if(nReflexSave) + { + nDam = GetReflexAdjustedDamage(nDam, oTarget, spell.DC, nSAVETYPE, spell.Caster); + } + + fDelay2 += 0.1; + fTime = fDelay + fDelay2; + + //Set damage effect + effect eDam = EffectDamage(nDam, nDAMAGETYPE); + //Apply the MIRV and damage effect + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget)); + DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget)); + //do not bother when no damage should happen anyway + SetLocalInt(oTarget, "msldmg", GetLocalInt(oTarget, "msldmg") + nDam ); + if(i == (nExtraMissiles + nRemainder)) + { + effect eDamage = EffectDamage(GetLocalInt(oTarget, "msldmg"), nDAMAGETYPE); + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + DelayCommand(fTime, SetLocalInt(oTarget, "msldmg", 0)); + } + } + } // for + else + { // * apply a dummy visual effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget); + } + nCnt++;// * increment count of missiles fired + nRemainder--; + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE); + } +} + +void main() +{ + +/* + 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 + + spellsDeclareMajorVariables(); + //SpawnScriptDebugger(); + DoMassMissileStorm(1, 15, spell.Id); +} diff --git a/_removed/x0_s0_quillfire.ncs b/_removed/x0_s0_quillfire.ncs new file mode 100644 index 0000000000000000000000000000000000000000..4ecfa5d0449e379b2f780ff769fc92868d8c1a4c GIT binary patch literal 5120 zcmbtYTWB0r7(R2^ZQ6}(T4P(Ark%#7h1zOs)ru%GO~z(%FJX6c@j=G)ropr+iCTT} zMZ}kaAgBmF3ce^PimyJYMf9zrg(4z86f9Uu9%2c^?|lE9**VkgN-=?*o&WsT@4uXL zwl>lXCJ#Mu@TgM#YKOvKPoUf)|2^0I%ljt3pf;a9AD@^xb8cq#g|qR=P4^JE-5@)--q5UI#o^l<#|b$@S#P z&;13ZzH(iUELRg2mv7gUuf^B>tra?tlHK9TCFL7_h%bpS*zxkF$QonrmcY}-R}#&I z^#R@6Mr{R0uPrN|L9DnQdGSu|e=48v*Av+u?ajum8RvVrzC^=y&-byejO%7e*x}g~ zzXOAb*bxSePZ3{lIuwW3cv*04H#?|-3$)`>4Wqd(pMh4RWZ3YF z+SP(`*1GZ)Oua`A#*61p&CR_yKmQW+^tjz5)#0woP;4R?^5{NXq({rTFjTJ~4)5s6 z9-RkZAygQDP?3b38j|z1kdO@_Wh$WMkQ+%i-0C;sHda@lb6H52GFGuEf$pfod+kbN{<1|4#Cl~sWzuK=$BwY*@EwO79N*bN0YdVc_N6A4G3N4lp$e=sqwfl-@pS0ZayQ;W1Rgw56=;k1hJ&|hDe(xR9 z9yxn}%eHbWs#sgG4^44zyx8;Ndx3l+v z21+|osr(-}J89?^M!Lbm`bM#S$I!Lqx>?EswpA?M5lm(XvKm!#=-Y0n_C7@_0PesG zDtS|P%$(}Li|J+0I@XJBeSNBPHe?T;x$_D~@KPXq6!f48E;u4qvW6)OGCdUO)+;u| z6%(4}pgAzqEUKFv4c@h=n4p}i7cHtMRDWLED%{02*yoeGh4XWI(4+Vumr%Qg6|sEk zT4Pss+jL%O&Hk5$-O`-gC1hXkAf^V;2%d7>Z;e$PVtx{bpdVBJV<)>85k9jQEit6K zDM@B^+1~h`$SD0GU8267T!JQ;cuJNKa%rfD%`cM=Ftl}KkP?<8wXzrGqJ!ei(+A^Y zaagI;r`Q0^R())u(E^^yS&>?B&Z9?JE$QZCyVCa6WDuoB;XZl^YI~0*{T{&SXoNB1 z*9Xbj^fZ~x+4PbQo6Hh;E)I>cdN?`cz#L`UGFh*Y138M2C+)}l#%@-D!@jgf64&10 zBAT_$1k?@MB$|+=PGJRlE@$)@reW>)FyG)VpKuTm{v!I&THT780>+UmiQp|T0YnLz zF#VG`3vy&wy)VGp65l5hUGn)KHs4A#pkz$sx6k}EZtexO8<)xERJk=W7Du)4XeEkk z<0Elck78Y(x?syulfMOgL*#)JRc3RYhQaW!G5pWvd%NT?ktq1QL7z|bS#NsP;rgEB z-foVQ5((aR;HQb3UlfB|+uqqulSgv+aiXce+*|xjYm;I{yH43xay`s>CPjwqSS(4g zo@Y3$Kr=%OXVOs<#Cum8@9IRQRgTA^8nD-ZSHsa-)Fjv{*#|7Jb5|jgVd4QC8HRNq zC&k`~l3_!cjxYo$9o;OM&)g6&f%1tM`y{Vb;}4&Ly>j{kshWOC8}PBw-tFQ3y(F|j z{oB(gMlIz`(d;J`4x81@IepCJXYB$Is|kGXA!CEMv^VP$aa0|zPvO=sr;wx3SU6d( yH`-%3*`yw)Av5Aoefa 5) + { + nBonus = 5; + } + //Roll damage + int nDam = MaximizeOrEmpower(8,nBonus,spell.Meta,nBonus); + effect eDam = EffectDamage(nDam, DAMAGE_TYPE_MAGICAL); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target); + // * also applies poison damage + effect ePoison = EffectPoison(POISON_LARGE_SCORPION_VENOM); + ePoison = ExtraordinaryEffect(ePoison); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, spell.Target); + + //Apply the MIRV and damage effect + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget); +// } +// } + } +} diff --git a/_removed/x0_s0_spikegroen.ncs b/_removed/x0_s0_spikegroen.ncs new file mode 100644 index 0000000000000000000000000000000000000000..5bc381481ac6ea89231517e23e9ce19e3a0ea4c4 GIT binary patch literal 12396 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 literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_spikegrohb.nss b/_removed/x0_s0_spikegrohb.nss new file mode 100644 index 0000000..dcf4b7c --- /dev/null +++ b/_removed/x0_s0_spikegrohb.nss @@ -0,0 +1,78 @@ +//:://///////////////////////////////////////////// +//:: Spike Growth: On Heartbeat +//:: x0_s0_spikegroHB.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All creatures within the AoE take 1d4 acid damage + per round +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent Knowles +//:: Created On: September 6, 2002 +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- aoe will vanish with caster +- flying and incorporeal creatures are immune +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + aoesDeclareMajorVariables(); + //-------------------------------------------------------------------------- + // When the caster is no longer there, all functions calling + // GetAreaOfEffectCreator will fail. Its better to remove the barrier then + //-------------------------------------------------------------------------- + if(!GetIsObjectValid(aoe.Creator)) + { + DestroyObject(aoe.AOE); + return; + } + + spellsDeclareMajorVariables(); + effect eSpeed = EffectMovementSpeedDecrease(50); + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + effect eDam; + float fDelay; + int nDamage; + + //Start cycling through the AOE Object for viable targets including doors and placable objects. + object oTarget = GetFirstInPersistentObject(aoe.AOE); + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator)) + { + //Fire cast spell at event for the target + SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id)); + fDelay = GetRandomDelay(1.0, 2.2); + //Spell resistance check + if(!spellsIsFlying(oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) && !MyResistSpell(aoe.Creator, oTarget, fDelay)) + { + nDamage = MaximizeOrEmpower(8, 1, spell.Meta); + eDam = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING); + + //Apply damage and visuals + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + + // * only apply a slow effect from this spell once + if (!GetHasSpellEffect(spell.Id, oTarget)) + { + //Make a Reflex Save to avoid the effects of the movement hit. + if(!MySavingThrow(SAVING_THROW_REFLEX, oTarget, spell.DC, SAVING_THROW_TYPE_NONE, aoe.Creator, fDelay)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeed, oTarget, HoursToSeconds(24)); + } + } + } + } + //Get next target. + oTarget = GetNextInPersistentObject(aoe.AOE); + } +} diff --git a/_removed/x0_s0_woundwhis.ncs b/_removed/x0_s0_woundwhis.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3c3c993605fdfc2183f15fe223c36e0330a39344 GIT binary patch literal 3071 zcmbtWOHbTZ6u!2HNAL(pL;{6StZ9=-iAW%*qMIz78Mm_P0W>om$Re_aSBo+U2+}re zvgx+#NR_(ikErq!(k`m5vdAK;swh%fu&5A=Ss+cndycR1bsS45jKs`6&+mNa++#14 z>rQj_=FD9o?C!?`fBlXyd+B4D>ci&?g&uL~(GTHT>)}po>zha6`f9kovDx~r{TP}H zDb16e+3SKL4&M+HqTB8MfykDW7^@{~O6Dp~%2SPGhXqTD=zo8Y5Wkt%3^=_O1@%oT zbJUUF{cPB0Nti|I{e58aZr{(F=J9?mz7A_%NhqR(&?=za4EJ!wx1Frgkk9=hrl2qgHc+f-#1h^ zRS~%uP`zgB14lv|Ub!6xVc^yqVa;na-CChnatnCpO#TU@;`~gwx3kf1f4jZ?01^7l zJWnx~t43gg1hPvO;YU*le@FIM6uB0lBP3TP-EoCTeoK%DB(Nc%K4;N?N<^h|8yW^# zV>Xnv_?xX&))U0+um~NDt+rY8>QrPNvFINqqBKZKKn)w!04mC&R!t}n#Cr)Sm(5;B zGx-cGPR-ATOK#v*(E+a(x|K>jEc5TcYkC2|9ibcGw3kQV4aEfp6^i?6J69xmpKH={ zku*j|wgZuru9WzR@d3)9ySrAGT@Jo)SGU(8>04{J_VzaRdW8AH0*C`1Dv+5`9AyTn zjHl>~aIuh#;t!OSrhRe^oOL=iYb4hIo%Cf1uEc)z8gD!9Jm}B=Onu0Nh>bgN8Fyl0B zV-#2|sjltx#RHz97emk|yFoJ%ry-txnHE}1!;T}8=cFoyIIvO3q*<~~?-ixJqlGBs zhWIEB5n*F?Qxx#yjl#zFy;zcnjH}>f+;4bQ?b?QmO|Mq-E1vQJd2>7%`j*07$_`Ln ztoUE}UQG*-zDIB!rrecsPR4lCQ7n1A5^i~U;@N=1DCMbo4Y%rk>F1@3XHs_5d=_;S z8;g2|DIwnOBj%O*l2`WKAaw8gf#0~7Lm_YT918PeX;rFN8Ej6Z5v7S$zS@K9BtdLe zguLuYj!Wt6@1a`*q0wzzo0b<LWrOi9AVIMbPE zQcIAZ2>gr@mz7k1PLUJ@XV^kYwlN&F88d9LFZEqV^CGXle33PVcq{VeNxiQSsmBgK zqYwvsi9(yKwYn)I@`o=bZ-!i|1p$Z(D?>y!3BJ(Tvlm2%c F@jou*;5h&Q literal 0 HcmV?d00001 diff --git a/_removed/x0_s0_woundwhis.nss b/_removed/x0_s0_woundwhis.nss new file mode 100644 index 0000000..dcf1aff --- /dev/null +++ b/_removed/x0_s0_woundwhis.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: Wounding Whispers +//:: x0_s0_WoundWhis.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Magical whispers cause 1d8 sonic damage to attackers who hit you. + Made the damage slightly more than the book says because we cannot + do the +1 per level. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//::////////////////////////////////////////////// +//:: Modified for wounding whispers, July 30 2002, Brent +//::////////////////////////////////////////////// +//:: Last Update By: Andrew Nobbs May 01, 2003 +/* +Patch 1.70 + +- damage wasn't random +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + 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 + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE); + int nDuration = spell.Level; + int nBonus = spell.Level/2; + effect eShield = EffectDamageShield(nBonus, DAMAGE_BONUS_1d6, DAMAGE_TYPE_SONIC); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + + //Link effects + effect eLink = EffectLinkEffects(eShield, eDur); + eLink = EffectLinkEffects(eLink, eVis); + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + + if (GetHasSpellEffect(spell.Id, spell.Target)) + { + RemoveEffectsFromSpell(spell.Target,spell.Id);//the old function would allow stacking after changes i have done + } + + //Enter Metamagic conditions + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); +} diff --git a/_removed/x0_s1_petrbreath.ncs b/_removed/x0_s1_petrbreath.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8ae390c1b8830b70537f38c662ba7e395b0ebab6 GIT binary patch literal 13168 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 SD3M8)TIU(g9+WG?`Sjn82$4+y literal 0 HcmV?d00001 diff --git a/_removed/x0_s1_petrbreath.nss b/_removed/x0_s1_petrbreath.nss new file mode 100644 index 0000000..8455ee0 --- /dev/null +++ b/_removed/x0_s1_petrbreath.nss @@ -0,0 +1,36 @@ +//:://///////////////////////////////////////////////// +//:: X0_S1_PETRBREATH +//:: Petrification breath monster ability. +//:: Fortitude save (DC 17) or be turned to stone permanently. +//:: This will be changed to a temporary effect. +//:: Copyright (c) 2002 Floodgate Entertainment +//:: Created By: Naomi Novik +//:: Created On: 11/14/2002 +//:://///////////////////////////////////////////////// + +#include "x0_i0_spells" + +void main() +{ + object oTarget = GetSpellTargetObject(); + int nHitDice = GetHitDice(OBJECT_SELF); + + location lTargetLocation = GetSpellTargetLocation(); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + int nSpellID = GetSpellId(); + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID)); + float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + + object oSelf = OBJECT_SELF; + DelayCommand(fDelay, DoPetrification(nHitDice, oSelf, oTarget, nSpellID, 17)); + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + } +} diff --git a/_removed/x0_s1_petrgaze.ncs b/_removed/x0_s1_petrgaze.ncs new file mode 100644 index 0000000000000000000000000000000000000000..0eec807647f8538becd68d5b3c48d8a987c89ea5 GIT binary patch literal 13451 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 21) + eSummon = EffectSummonCreature("NW_S_DOOMKGHT2",VFX_FNF_SUMMON_UNDEAD); + else if (nLevel >= 7) + eSummon = EffectSummonCreature("NW_S_DOOMKGHT",VFX_FNF_SUMMON_UNDEAD); + else + eSummon = EffectSummonCreature("NW_S_GHAST",VFX_FNF_SUMMON_UNDEAD); + + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration)); + +} diff --git a/_removed/x1_s2_deatharrow.ncs b/_removed/x1_s2_deatharrow.ncs new file mode 100644 index 0000000000000000000000000000000000000000..af0ba05f452b1e56f6e92dee0477a77f85e057c2 GIT binary patch literal 3784 zcmcInJ!n)}6h8O9H<>XrCSx3bm+U@77mfd^wo|kb6kT-L?KUQHT?CC5iWY)`Sg8mK zA}d;1T3A?UrywF?VPRo0NQx9GQluEzK?Y~f{m#9UcP2MM!WzhX=KIb$_dDmFd*1c% z{$ttiyLar`N7VQBN8+DSMrnaoPh1=sA3bw!^wi%IBPYg2PW*Lp^up=$%nWofm(J}T zB6wD}(ht;bx0@N+#3AMy=g~54RQ! zZm{Q|&9#IWhvby8eHb_H^bfLnzC9;6s4CA>HMW?loAHI>svgCSwWB+gYHEv=wDScZfA2)8iaQR6faiG5SmW~LQCaBm--E(jbX!3d>i%QSh9D%X4)sd zPT0=)I?3voHr5Wsb+33j*OW7%HKCW=H@u;Y%GoAYxYr8hwSm4>C{IeD?-iPO^n*fE zkA75W!K0rP+T+o>LW>@qR4AVbXqZyyGLKFxwAZ6E3g!Mqgjt1FJlas`a*s9@+UHT} zi!dnq1+{Wy0$TN`uKEg(%I6~34tTVpR$J-OszPfXt+}1Hn`JN6aA<-#Dg75=4uP=| zW*AHoVb+4t0}$(&uV4!EeasY?VuX1IrW9eGf>{<}?t$rzFqgr|XD|$B(KZIA67e|z zW_g6!0j4j))WG!5XXp!EN2wQ-2WaxMCLNW|M34Nc!Ofa(5O*{tH!>(6!@BO6m)%>TWiXi$pu;@&8H`Q9t@? Q&@4uc+|3&pRMQ##2W$-Pr2qf` literal 0 HcmV?d00001 diff --git a/_removed/x1_s2_deatharrow.nss b/_removed/x1_s2_deatharrow.nss new file mode 100644 index 0000000..ecd6eda --- /dev/null +++ b/_removed/x1_s2_deatharrow.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: x1_s2_deatharrow +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Seeker Arrow + - creates an arrow that automatically hits target. + - At level 4 the arrow does +2 magic damage + - at level 5 the arrow does +3 magic damage + + - normal arrow damage, based on base item type + + - Must have shortbow or longbow in hand. +*/ +//::////////////////////////////////////////////// +//:: Created By: +//:: Created On: +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- critical hit damage corrected (damage was always even before) +- added death VFX +- signal event placed before hit check, so it now removes GS/invis every time +*/ + +#include "x0_i0_spells" +#include "x2_inc_itemprop" + +void main() +{ + int nBonus = ArcaneArcherCalculateBonus(); + object oTarget = GetSpellTargetObject(); + + if (GetIsObjectValid(oTarget)) + { + // * Roll Touch Attack + int nTouch = TouchAttackRanged(oTarget, TRUE); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId())); + + if (nTouch > 0) + { + int nDamage = ArcaneArcherDamageDoneByBow(nTouch == 2); + if (nDamage > 0) + { + effect ePhysical = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING,IPGetDamagePowerConstantFromNumber(nBonus)); + effect eMagic = EffectDamage(nBonus, DAMAGE_TYPE_MAGICAL); + ApplyEffectToObject(DURATION_TYPE_INSTANT, ePhysical, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eMagic, oTarget); + + int nSaveType = SAVING_THROW_TYPE_NONE; + if(GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH, OBJECT_SELF)) + { + nSaveType = SAVING_THROW_TYPE_DEATH;//workaround for action cancel bug without changing save type + } + // * if target fails a save DC20 they die + int nDC = GetCasterLevel(OBJECT_SELF)+10; + if (!MySavingThrow(SAVING_THROW_FORT, oTarget, nDC, nSaveType)) + { + effect eDeath = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); + } + } + } + } +} diff --git a/_removed/x2_inc_craft.nss b/_removed/x2_inc_craft.nss new file mode 100644 index 0000000..ee53e44 --- /dev/null +++ b/_removed/x2_inc_craft.nss @@ -0,0 +1,1439 @@ +//:://///////////////////////////////////////////// +//:: x2_inc_craft +//:: Copyright (c) 2003 Bioare Corp. +//::////////////////////////////////////////////// +/* + + Central include for crafting feat and + crafting skill system. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-05-09 +//:: Last Updated On: 2003-10-14 +//::////////////////////////////////////////////// +#include "x2_inc_itemprop" +#include "x2_inc_switches" + +struct craft_struct +{ + int nRow; + string sResRef; + int nDC; + int nCost; + string sLabel; +}; + +struct craft_receipe_struct +{ + int nMode; + object oMajor; + object oMinor; +}; + +const string X2_CI_CRAFTSKILL_CONV ="x2_p_craftskills"; + +// Brew Potion related Constants + +const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation +const int X2_CI_BREWPOTION_MAXLEVEL = 9; // Max Level for potions +const int X2_CI_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier + +const string X2_CI_BREWPOTION_NEWITEM_RESREF = "x2_it_pcpotion"; // ResRef for new potion item + +// Scribe Scroll related constants +const int X2_CI_SCRIBESCROLL_FEAT_ID = 945; +const int X2_CI_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier +const string X2_CI_SCRIBESCROLL_NEWITEM_RESREF = "x2_it_pcscroll"; // ResRef for new scroll item + +// Craft Wand related constants +const int X2_CI_CRAFTWAND_FEAT_ID = 946; +const int X2_CI_CRAFTWAND_MAXLEVEL = 9; +const int X2_CI_CRAFTWAND_COSTMODIFIER = 750; +const string X2_CI_CRAFTWAND_NEWITEM_RESREF = "x2_it_pcwand"; + +// 2da for the craftskills +const string X2_CI_CRAFTING_WP_2DA = "des_crft_weapon" ; +const string X2_CI_CRAFTING_AR_2DA = "des_crft_armor" ; +const string X2_CI_CRAFTING_MAT_2DA = "des_crft_mat"; + + +// 2da for matching spells to properties +const string X2_CI_CRAFTING_SP_2DA = "des_crft_spells" ; +// Base custom token for item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_CTOKENBASE = 13220; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_DC_CTOKENBASE = 14220; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_GP_CTOKENBASE = 14320; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_MODIFYARMOR_GP_CTOKENBASE = 14420; + +//How many items per 2da row in X2_IP_CRAFTING_2DA, do not change>4 until you want to create more conversation condition scripts as well +const int X2_CI_CRAFTING_ITEMS_PER_ROW = 5; + +// name of the scroll 2da +const string X2_CI_2DA_SCROLLS = "des_crft_scroll"; + +const int X2_CI_CRAFTMODE_INVALID = 0; +const int X2_CI_CRAFTMODE_CONTAINER = 1; // no longer used, but left in for the community to reactivate +const int X2_CI_CRAFTMODE_BASE_ITEM = 2; +const int X2_CI_CRAFTMODE_ASSEMBLE = 3; + +const int X2_CI_MAGICTYPE_INVALID = 0; +const int X2_CI_MAGICTYPE_ARCANE = 1; +const int X2_CI_MAGICTYPE_DIVINE = 2; + +const int X2_CI_MODMODE_INVALID = 0; +const int X2_CI_MODMODE_ARMOR = 1; +const int X2_CI_MODMODE_WEAPON = 2; + +// * Returns TRUE if an item is a Craft Base Item +// * to be used in spellscript that can be cast on items - i.e light +int CIGetIsCraftFeatBaseItem( object oItem ); + +// * Checks if the last spell cast was used to brew potion and will do the brewing process. +// * Returns TRUE if the spell was indeed used to brew a potion (regardless of the actual outcome of the brewing process) +// * Meant to be used in spellscripts only +int CICraftCheckBrewPotion(object oSpellTarget, object oCaster); + +// * Checks if the last spell cast was used to scribe a scroll and handles the scribe scroll process +// * Returns TRUE if the spell was indeed used to scribe a scroll (regardless of the actual outcome) +// * Meant to be used in spellscripts only +int CICraftCheckScribeScroll(object oSpellTarget, object oCaster); + +// * Create a new potion item based on the spell nSpellID on the creator +object CICraftBrewPotion(object oCreator, int nSpellID ); + +// * Create a new scroll item based on the spell nSpellID on the creator +object CICraftScribeScroll(object oCreator, int nSpellID); + + +// * Checks if the caster intends to use his item creation feats and +// * calls appropriate item creation subroutine if conditions are met (spell cast on correct item, etc). +// * Returns TRUE if the spell was used for an item creation feat +int CIGetSpellWasUsedForItemCreation(object oSpellTarget); + + +// * Returns the innate level of a spell. If bDefaultZeroToOne is given +// * Level 0 spell will be returned as level 1 spells +int CIGetSpellInnateLevel(int nSpellID, int bDefaultZeroToOne = FALSE) +{ + int nRet = StringToInt(Get2DAString(X2_CI_CRAFTING_SP_2DA, "Level", nSpellID)); + if (nRet == 0) + nRet =1; + + return nRet; +} + +// * Makes oPC do a Craft check using nSkill to create the item supplied in sResRe +// * If oContainer is specified, the item will be created there. +// * Throwing weapons are created with stack sizes of 10, ammo with 20 +// * oPC - The player crafting +// * nSkill - SKILL_CRAFT_WEAPON or SKILL_CRAFT_ARMOR, +// * sResRef - ResRef of the item to be crafted +// * nDC - DC to beat to succeed +// * oContainer - if a container is specified, create item inside +object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID); + +// * Returns TRUE if a spell is prevented from being used with one of the crafting feats +int CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID); + +// * Return craftitemstructdata +struct craft_struct CIGetCraftItemStructFrom2DA(string s2DA, int nRow, int nItemNo); + +// * Return the type of magic as one of the following constants +// * const int X2_CI_MAGICTYPE_INVALID = 0; +// * const int X2_CI_MAGICTYPE_ARCANE = 1; +// * const int X2_CI_MAGICTYPE_DIVINE = 2; +// * Parameters: +// * nClass - CLASS_TYPE_* constant +int CI_GetClassMagicType(int nClass) +{ + switch (nClass) + { + case CLASS_TYPE_CLERIC: + return X2_CI_MAGICTYPE_DIVINE; break; + case CLASS_TYPE_DRUID: + return X2_CI_MAGICTYPE_DIVINE; break; + case CLASS_TYPE_PALADIN: + return X2_CI_MAGICTYPE_DIVINE; break; + case CLASS_TYPE_BARD: + return X2_CI_MAGICTYPE_ARCANE; break; + case CLASS_TYPE_SORCERER: + return X2_CI_MAGICTYPE_ARCANE; break; + case CLASS_TYPE_WIZARD: + return X2_CI_MAGICTYPE_ARCANE; break; + case CLASS_TYPE_RANGER: + return X2_CI_MAGICTYPE_DIVINE; break; + } + return X2_CI_MAGICTYPE_INVALID; +} + +string GetMaterialComponentTag(int nPropID) +{ + string sRet = Get2DAString("des_matcomp","comp_tag",nPropID); + return sRet; +} + + +// ----------------------------------------------------------------------------- +// Return true if oItem is a crafting target item +// ----------------------------------------------------------------------------- +int CIGetIsCraftFeatBaseItem(object oItem) +{ + int nBt = GetBaseItemType(oItem); + // blank scroll, empty potion, wand + if (nBt == 101 || nBt == 102 || nBt == 103) + return TRUE; + else + return FALSE; +} + + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create a new playermade potion object with properties matching nSpellID and return it +// ----------------------------------------------------------------------------- +object CICraftBrewPotion(object oCreator, int nSpellID ) +{ + + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + + object oTarget; + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCreator); + return OBJECT_INVALID; + } + + if (nPropID != -1) + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); + oTarget = CreateItemOnObject(X2_CI_BREWPOTION_NEWITEM_RESREF,oCreator); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget); + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Wrapper for the crafting cost calculation, returns GP required +// ----------------------------------------------------------------------------- +int CIGetCraftGPCost(int nLevel, int nMod) +{ + int nLvlRow = IPGetIPConstCastSpellFromSpellID(GetSpellId()); + int nCLevel = StringToInt(Get2DAString("irpr_spells","CasterLvl",nLvlRow)); + + // ------------------------------------------------------------------------- + // in case we don't get a valid CLevel, use spell level instead + // ------------------------------------------------------------------------- + if (nCLevel ==0) + { + nCLevel = nLevel; + } + int nRet = nCLevel * nLevel * nMod; + return nRet; + +} + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create a new playermade wand object with properties matching nSpellID +// and return it +// ----------------------------------------------------------------------------- +object CICraftCraftWand(object oCreator, int nSpellID ) +{ + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + + object oTarget; + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCreator); + return OBJECT_INVALID; + } + + + if (nPropID != -1) + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE); + oTarget = CreateItemOnObject(X2_CI_CRAFTWAND_NEWITEM_RESREF,oCreator); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget); + + + int nType = CI_GetClassMagicType(GetLastSpellCastClass()); + itemproperty ipLimit; + + if (nType == X2_CI_MAGICTYPE_DIVINE) + { + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_PALADIN); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_RANGER); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_DRUID); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_CLERIC); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + } + else if (nType == X2_CI_MAGICTYPE_ARCANE) + { + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_WIZARD); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_SORCERER); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_BARD); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + } + + int nCharges = GetLevelByClass(GetLastSpellCastClass(),OBJECT_SELF) + d10(); + + if (nCharges == 0) // stupi cheaters + { + nCharges = 10+d20(); + } + // Hard core rule mode enabled + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_CRAFT_WAND_50_CHARGES)) + { + SetItemCharges(oTarget,50); + } + else + { + SetItemCharges(oTarget,nCharges); + } + // TODOL Add use restrictions there when item becomes available + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create and Return a magic wand with an item property +// matching nSpellID. Charges are set to d20 + casterlevel +// capped at 50 max +// ----------------------------------------------------------------------------- +object CICraftScribeScroll(object oCreator, int nSpellID) +{ + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + object oTarget; + // Handle optional material components + string sMat = GetMaterialComponentTag(nPropID); + if (sMat != "") + { + object oMat = GetItemPossessedBy(oCreator,sMat); + if (oMat== OBJECT_INVALID) + { + FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component + return OBJECT_INVALID; + } + else + { + DestroyObject (oMat); + } + } + + // get scroll resref from scrolls lookup 2da + int nClass =GetLastSpellCastClass (); + string sClass = "Wiz_Sorc"; + switch (nClass) + { + case CLASS_TYPE_WIZARD: + sClass = "Wiz_Sorc"; + break; + + case CLASS_TYPE_SORCERER: + sClass = "Wiz_Sorc"; + break; + case CLASS_TYPE_CLERIC: + sClass = "Cleric"; + break; + case CLASS_TYPE_PALADIN: + sClass = "Paladin"; + break; + case CLASS_TYPE_DRUID: + sClass = "Druid"; + break; + case CLASS_TYPE_RANGER: + sClass = "Ranger"; + break; + case CLASS_TYPE_BARD: + sClass = "Bard"; + break; + } + + if (sClass != "") + { + string sResRef = Get2DAString(X2_CI_2DA_SCROLLS,sClass,nSpellID); + if (sResRef != "") + { + oTarget = CreateItemOnObject(sResRef,oCreator); + } + + if (oTarget == OBJECT_INVALID) + { + WriteTimestampedLogEntry("x2_inc_craft::CICraftScribeScroll failed - Resref: " + sResRef + " Class: " + sClass + "(" +IntToString(nClass) +") " + " SpellID " + IntToString (nSpellID)); + } + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to brew a potion +// ----------------------------------------------------------------------------- +int CICraftCheckBrewPotion(object oSpellTarget, object oCaster) +{ + + object oSpellTarget = GetSpellTargetObject(); + object oCaster = OBJECT_SELF; + int nID = GetSpellId(); + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + + // ------------------------------------------------------------------------- + // check if brew potion feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_BREWPOTION_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; + } + + // ------------------------------------------------------------------------- + // check if spell is below maxlevel for brew potions + // ------------------------------------------------------------------------- + if (nLevel > X2_CI_BREWPOTION_MAXLEVEL) + { + FloatingTextStrRefOnCreature(76416, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Brew Potions + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_BREWPOTION_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83450, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nCost = CIGetCraftGPCost(nLevel, X2_CI_BREWPOTION_COSTMODIFIER); + float nExperienceCost = 0.04 * nCost; // xp = 1/25 of gp value + int nGoldCost = nCost ; + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + if (GetGold(oCaster) < nGoldCost) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = FloatToInt(GetXP(oCaster) - nExperienceCost); + + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we brew the new potion + // ------------------------------------------------------------------------- + object oPotion = CICraftBrewPotion(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oPotion)) + { + TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + SetXP(oCaster, nNewXP); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + +} + + + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to create a scroll +// ----------------------------------------------------------------------------- +int CICraftCheckScribeScroll(object oSpellTarget, object oCaster) +{ + int nID = GetSpellId(); + + // ------------------------------------------------------------------------- + // check if scribe scroll feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_SCRIBESCROLL_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Scribe Scroll + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_SCRIBESCROLL_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83451, oCaster); // can not be used with this feat + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + int nCost = CIGetCraftGPCost(nLevel, X2_CI_SCRIBESCROLL_COSTMODIFIER); + float fExperienceCost = 0.04 * nCost; + int nGoldCost = nCost ; + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + if (GetGold(oCaster) < nGoldCost) // enough gold? + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = FloatToInt(GetXP(oCaster) - fExperienceCost); + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we scribe the scroll + // ------------------------------------------------------------------------- + object oScroll = CICraftScribeScroll(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oScroll)) + { + //---------------------------------------------------------------------- + // Some scrollsare ar not identified ... fix that here + //---------------------------------------------------------------------- + SetIdentified(oScroll,TRUE); + ActionPlayAnimation (ANIMATION_FIREFORGET_READ,1.0); + TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + SetXP(oCaster, nNewXP); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + + return FALSE; +} + + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to craft a wand +// ----------------------------------------------------------------------------- +int CICraftCheckCraftWand(object oSpellTarget, object oCaster) +{ + + int nID = GetSpellId(); + + // ------------------------------------------------------------------------- + // check if craft wand feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_CRAFTWAND_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Craft Wand + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_CRAFTWAND_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83452, oCaster); // can not be used with this feat + return TRUE; + } + + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + + // ------------------------------------------------------------------------- + // check if spell is below maxlevel for brew potions + // ------------------------------------------------------------------------- + if (nLevel > X2_CI_CRAFTWAND_MAXLEVEL) + { + FloatingTextStrRefOnCreature(83623, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nCost = CIGetCraftGPCost( nLevel, X2_CI_CRAFTWAND_COSTMODIFIER); + float nExperienceCost = 0.04 * nCost; + int nGoldCost = nCost; + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + if (GetGold(oCaster) < nGoldCost) // enough gold? + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + // more calculations on XP cost + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = FloatToInt(GetXP(oCaster) - nExperienceCost); + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we craft the wand + // ------------------------------------------------------------------------- + object oWand = CICraftCraftWand(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oWand)) + { + TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + SetXP(oCaster, nNewXP); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + + return FALSE; +} + +// ----------------------------------------------------------------------------- +// Georg, July 2003 +// Checks if the caster intends to use his item creation feats and +// calls appropriate item creation subroutine if conditions are met +// (spell cast on correct item, etc). +// Returns TRUE if the spell was used for an item creation feat +// ----------------------------------------------------------------------------- +int CIGetSpellWasUsedForItemCreation(object oSpellTarget) +{ + object oCaster = OBJECT_SELF; + + // ------------------------------------------------------------------------- + // Spell cast on crafting base item (blank scroll, etc) ? + // ------------------------------------------------------------------------- + if (!CIGetIsCraftFeatBaseItem(oSpellTarget)) + { + return FALSE; // not blank scroll baseitem + } + else + { + // --------------------------------------------------------------------- + // Check Item Creation Feats were disabled through x2_inc_switches + // --------------------------------------------------------------------- + if (GetModuleSwitchValue(MODULE_SWITCH_DISABLE_ITEM_CREATION_FEATS) == TRUE) + { + FloatingTextStrRefOnCreature(83612, oCaster); // item creation disabled + return FALSE; + } + + // --------------------------------------------------------------------- + // Ensure that item creation does not work one item was cast on another + // --------------------------------------------------------------------- + if (GetSpellCastItem() != OBJECT_INVALID) + { + FloatingTextStrRefOnCreature(83373, oCaster); // can not use one item to enchant another + return TRUE; + } + + // --------------------------------------------------------------------- + // Ok, what kind of feat the user wants to use by examining the base itm + // --------------------------------------------------------------------- + int nBt = GetBaseItemType(oSpellTarget); + int nRet = FALSE; + switch (nBt) + { + case 101 : + // ------------------------------------------------- + // Brew Potion + // ------------------------------------------------- + nRet = CICraftCheckBrewPotion(oSpellTarget,oCaster); + break; + + + case 102 : + // ------------------------------------------------- + // Scribe Scroll + // ------------------------------------------------- + nRet = CICraftCheckScribeScroll(oSpellTarget,oCaster); + break; + + + case 103 : + // ------------------------------------------------- + // Craft Wand + // ------------------------------------------------- + nRet = CICraftCheckCraftWand(oSpellTarget,oCaster); + break; + + // you could add more crafting basetypes here.... + } + + return nRet; + + } + +} + +// ----------------------------------------------------------------------------- +// Makes oPC do a Craft check using nSkill to create the item supplied in sResRe +// If oContainer is specified, the item will be created there. +// Throwing weapons are created with stack sizes of 10, ammo with 20 +// ----------------------------------------------------------------------------- +object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID) +{ + int bSuccess = GetIsSkillSuccessful(oPC, nSkill, nDC); + object oNew; + if (bSuccess) + { + // actual item creation + // if a crafting container was specified, create inside + if (oContainer == OBJECT_INVALID) + { + oNew =CreateItemOnObject(sResRef,oPC); + + } + else + { + oNew =CreateItemOnObject(sResRef,oContainer); + } + + int nBase = GetBaseItemType(oNew); + if (nBase == BASE_ITEM_BOLT || nBase == BASE_ITEM_ARROW || nBase == BASE_ITEM_BULLET) + { + SetItemStackSize(oNew, 20); + } + else if (nBase == BASE_ITEM_THROWINGAXE || nBase == BASE_ITEM_SHURIKEN || nBase == BASE_ITEM_DART) + { + SetItemStackSize(oNew, 10); + } + } + else + { + oNew = OBJECT_INVALID; + } + + return oNew; +} + +// ----------------------------------------------------------------------------- +// georg, 2003-06-13 ( +// Craft an item. This is only to be called from the crafting conversation +// spawned by x2_s2_crafting!!! +// ----------------------------------------------------------------------------- +int CIDoCraftItemFromConversation(int nNumber) +{ + string sNumber = IntToString(nNumber); + object oPC = GetPCSpeaker(); + //object oMaterial = GetLocalObject(oPC,"X2_CI_CRAFT_MATERIAL"); + object oMajor = GetLocalObject(oPC,"X2_CI_CRAFT_MAJOR"); + object oMinor = GetLocalObject(oPC,"X2_CI_CRAFT_MINOR"); + int nSkill = GetLocalInt(oPC,"X2_CI_CRAFT_SKILL"); + int nMode = GetLocalInt(oPC,"X2_CI_CRAFT_MODE"); + string sResult; + string s2DA; + int nDC; + + + DeleteLocalObject(oPC,"X2_CI_CRAFT_MAJOR"); + DeleteLocalObject(oPC,"X2_CI_CRAFT_MINOR"); + + if (!GetIsObjectValid(oMajor)) + { + FloatingTextStrRefOnCreature(83374,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + else + { + if (GetItemPossessor(oMajor) != oPC) + { + FloatingTextStrRefOnCreature(83354,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + } + + // If we are in container mode, + if (nMode == X2_CI_CRAFTMODE_CONTAINER) + { + if (!GetIsObjectValid(oMinor)) + { + FloatingTextStrRefOnCreature(83374,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + else if (GetItemPossessor(oMinor) != oPC) + { + FloatingTextStrRefOnCreature(83354,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + } + + + if (nSkill == 26) // craft weapon + { + s2DA = X2_CI_CRAFTING_WP_2DA; + } + else if (nSkill == 25) + { + s2DA = X2_CI_CRAFTING_AR_2DA; + } + + int nRow = GetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW"); + struct craft_struct stItem = CIGetCraftItemStructFrom2DA(s2DA,nRow,nNumber); + object oContainer = OBJECT_INVALID; + + // --------------------------------------------------------------------------- + // We once used a crafting container, but found it too complicated. Code is still + // left in here for the community + // --------------------------------------------------------------------------- + if (nMode == X2_CI_CRAFTMODE_CONTAINER) + { + oContainer = GetItemPossessedBy(oPC,"x2_it_craftcont"); + } + + // Do the crafting... + object oRet = CIUseCraftItemSkill( oPC, nSkill, stItem.sResRef, stItem.nDC, oContainer) ; + + // * If you made an item, it should always be identified; + SetIdentified(oRet,TRUE); + + if (GetIsObjectValid(oRet)) + { + // ----------------------------------------------------------------------- + // Copy all item properties from the major object on the resulting item + // Through we problably won't use this, its a neat thing to have for the + // community + // to enable magic item creation from the crafting system + // ----------------------------------------------------------------------- + if (GetGold(oPC) GetGoldPieceValue(oOldItem)) + { + nTotal = GetGoldPieceValue(oOldItem)+1; + } + return nTotal; +} + +// ----------------------------------------------------------------------------- +// returns the cost in gold piece that it would +// cost to modify oOlditem to look like oNewItem +// ----------------------------------------------------------------------------- +int CIGetArmorModificationDC(object oOldItem, object oNewItem) +{ + int nTotal = 0; + int nPart; + int nDC =0; + for (nPart = 0; nPartnTotal) + { + nTotal = nDC; + } + } + } + + nTotal = GetItemACValue(oOldItem) + nTotal + 5; + + return nTotal; +} + +// ----------------------------------------------------------------------------- +// returns TRUE if the spell matching nSpellID is prevented from being used +// with the CraftFeat matching nFeatID +// This is controlled in des_crft_spells.2da +// ----------------------------------------------------------------------------- +int CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID) +{ + string sCol; + if (nFeatID == X2_CI_BREWPOTION_FEAT_ID) + { + sCol ="NoPotion"; + } + else if (nFeatID == X2_CI_SCRIBESCROLL_FEAT_ID) + { + sCol = "NoScroll"; + } + else if (nFeatID == X2_CI_CRAFTWAND_FEAT_ID) + { + sCol = "NoWand"; + } + + string sRet = Get2DAString(X2_CI_CRAFTING_SP_2DA,sCol,nSpellID); + int nRet = (sRet == "1") ; + + return nRet; +} + +// ----------------------------------------------------------------------------- +// Retrieve the row in des_crft_bmat too look up receipe +// ----------------------------------------------------------------------------- +int CIGetCraftingReceipeRow(int nMode, object oMajor, object oMinor, int nSkill) +{ + if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE ) + { + int nMinorId = StringToInt(Get2DAString("des_crft_amat",GetTag(oMinor),1)); + int nMajorId = StringToInt(Get2DAString("des_crft_bmat",GetTag(oMajor),nMinorId)); + return nMajorId; + } + else if (nMode == X2_CI_CRAFTMODE_BASE_ITEM) + { + int nLookUpRow; + string sTag = GetTag(oMajor); + switch (nSkill) + { + case 26: nLookUpRow =1 ; break; + case 25: nLookUpRow= 2 ; break; + } + int nRet = StringToInt(Get2DAString(X2_CI_CRAFTING_MAT_2DA,sTag,nLookUpRow)); + return nRet; + } + else + { + return 0; // error + } +} + +// ----------------------------------------------------------------------------- +// used to set all variable required for the crafting conversation +// (Used materials, number of choises, 2da row, skill and mode) +// ----------------------------------------------------------------------------- +void CISetupCraftingConversation(object oPC, int nNumber, int nSkill, int nReceipe, object oMajor, object oMinor, int nMode) +{ + + SetLocalObject(oPC,"X2_CI_CRAFT_MAJOR",oMajor); + if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE ) + { + SetLocalObject(oPC,"X2_CI_CRAFT_MINOR", oMinor); + } + SetLocalInt(oPC,"X2_CI_CRAFT_NOOFITEMS",nNumber); // number of crafting choises for this material + SetLocalInt(oPC,"X2_CI_CRAFT_SKILL",nSkill); // skill used (craft armor or craft waeapon) + SetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW",nReceipe); // number of crafting choises for this material + SetLocalInt(oPC,"X2_CI_CRAFT_MODE",nMode); +} + +// ----------------------------------------------------------------------------- +// oItem - The item used for crafting +// ----------------------------------------------------------------------------- +struct craft_receipe_struct CIGetCraftingModeFromTarget(object oPC,object oTarget, object oItem = OBJECT_INVALID) +{ + struct craft_receipe_struct stStruct; + + + if (GetBaseItemType(oItem) == 112 ) // small + { + stStruct.oMajor = oItem; + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + return stStruct; + } + + if (!GetIsObjectValid(oTarget)) + { + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + + // A small craftitem was used on a large one + if (GetBaseItemType(oItem) == 110 ) // small + { + if (GetBaseItemType(oTarget) == 109) // large + { + stStruct.nMode = X2_CI_CRAFTMODE_ASSEMBLE; // Mode is ASSEMBLE + stStruct.oMajor = oTarget; + stStruct.oMinor = oItem; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84201,oPC); + } + + } + + // ----------------------------------------------------------------------------- + // *** CONTAINER IS NO LONGER USED IN OFFICIAL CAMPAIGN + // BUT CODE LEFT IN FOR COMMUNITY. + // THE FOLLOWING CONDITION IS NEVER TRUE FOR THE OC (no crafting container) + // To reactivate, create a container with tag x2_it_craftcont + int bCraftCont = (GetTag(oTarget) == "x2_it_craftcont"); + + + if (bCraftCont == TRUE) + { + // First item in container is baseitem .. mode = baseitem + if ( GetBaseItemType(GetFirstItemInInventory(oTarget)) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = GetFirstItemInInventory(oTarget); + return stStruct; + } + else + { + object oTest = GetFirstItemInInventory(oTarget); + int nCount =1; + int bMajor = FALSE; + int bMinor = FALSE; + // No item in inventory ... mode = fail + if (!GetIsObjectValid(oTest)) + { + FloatingTextStrRefOnCreature(84200,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else + { + while (GetIsObjectValid(oTest) && nCount <3) + { + if (GetBaseItemType(oTest) == 109) + { + stStruct.oMajor = oTest; + bMajor = TRUE; + } + else if (GetBaseItemType(oTest) == 110) + { + stStruct.oMinor = oTest; + bMinor = TRUE; + } + else if ( GetBaseItemType(oTest) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = oTest; + return stStruct; + } + oTest = GetNextItemInInventory(oTarget); + if (GetIsObjectValid(oTest)) + { + nCount ++; + } + } + + if (nCount >2) + { + FloatingTextStrRefOnCreature(84356,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else if (nCount <2) + { + FloatingTextStrRefOnCreature(84356,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + if (bMajor && bMinor) + { + stStruct.nMode = X2_CI_CRAFTMODE_CONTAINER; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84356,oPC); + //FloatingTextStringOnCreature("Temp: Wrong combination of items in the crafting container",oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + } + } + } + else + { + // not a container but a baseitem + if (GetBaseItemType(oTarget) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = oTarget; + return stStruct; + + } + else + { + if (GetBaseItemType(oTarget) == 109 || GetBaseItemType(oTarget) == 110) + { + FloatingTextStrRefOnCreature(84357,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84357,oPC); + // not a valid item + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + + } + } + } +} + +// ----------------------------------------------------------------------------- +// *** Crafting Conversation Functions *** +// ----------------------------------------------------------------------------- +int CIGetInModWeaponOrArmorConv(object oPC) +{ + return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_CONVERSATION"); +} + + +void CISetCurrentModMode(object oPC, int nMode) +{ + if (nMode == X2_CI_MODMODE_INVALID) + { + DeleteLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE"); + } + else + { + SetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE",nMode); + } +} + +int CIGetCurrentModMode(object oPC) +{ + return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE"); +} + + +object CIGetCurrentModBackup(object oPC) +{ + return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP"); +} + +object CIGetCurrentModItem(object oPC) +{ + return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM"); +} + + +void CISetCurrentModBackup(object oPC, object oBackup) +{ + SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP",oBackup); +} + +void CISetCurrentModItem(object oPC, object oItem) +{ + SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM",oItem); +} + + +// ----------------------------------------------------------------------------- +// * This does multiple things: +// - store the part currently modified +// - setup the custom token for the conversation +// - zoom the camera to that part +// ----------------------------------------------------------------------------- +void CISetCurrentModPart(object oPC, int nPart, int nStrRef) +{ + SetLocalInt(oPC,"X2_TAILOR_CURRENT_PART",nPart); + + if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR) + { + + // * Make the camera float near the PC + float fFacing = GetFacing(oPC) + 180.0; + + if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM || + nPart == ITEM_APPR_ARMOR_MODEL_LHAND || nPart == ITEM_APPR_ARMOR_MODEL_LBICEP) + { + fFacing += 80.0; + } + + if (nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RFOREARM || + nPart == ITEM_APPR_ARMOR_MODEL_RHAND || nPart == ITEM_APPR_ARMOR_MODEL_RBICEP) + { + fFacing -= 80.0; + } + + float fPitch = 75.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + + float fDistance = 3.5f; + if (nPart == ITEM_APPR_ARMOR_MODEL_PELVIS || nPart == ITEM_APPR_ARMOR_MODEL_BELT ) + { + fDistance = 2.0f; + } + + if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER ) + { + fPitch = 50.0f; + fDistance = 3.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM || nPart == ITEM_APPR_ARMOR_MODEL_LHAND) + { + fDistance = 2.0f; + fPitch = 60.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_NECK) + { + fPitch = 90.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_RFOOT || nPart == ITEM_APPR_ARMOR_MODEL_LFOOT ) + { + fDistance = 3.5f; + fPitch = 47.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_LTHIGH || nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH ) + { + fDistance = 2.5f; + fPitch = 65.0f; + } + else if ( nPart == ITEM_APPR_ARMOR_MODEL_RSHIN || nPart == ITEM_APPR_ARMOR_MODEL_LSHIN ) + { + fDistance = 3.5f; + fPitch = 95.0f; + } + + if (GetRacialType(oPC) == RACIAL_TYPE_HALFORC) + { + fDistance += 1.0f; + } + + SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ; + } + + int nCost = GetLocalInt(oPC,"X2_TAILOR_CURRENT_COST"); + int nDC = GetLocalInt(oPC,"X2_TAILOR_CURRENT_DC"); + + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost)); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC)); + + + SetCustomToken(XP_IP_ITEMMODCONVERSATION_CTOKENBASE,GetStringByStrRef(nStrRef)); +} + +int CIGetCurrentModPart(object oPC) +{ + return GetLocalInt(oPC,"X2_TAILOR_CURRENT_PART"); +} + + +void CISetDefaultModItemCamera(object oPC) +{ + float fDistance = 3.5f; + float fPitch = 75.0f; + float fFacing; + + if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR) + { + fFacing = GetFacing(oPC) + 180.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + } + else if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_WEAPON) + { + fFacing = GetFacing(oPC) + 180.0; + fFacing -= 90.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + } + + SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ; +} + +void CIUpdateModItemCostDC(object oPC, int nDC, int nCost) +{ + SetLocalInt(oPC,"X2_TAILOR_CURRENT_COST", nCost); + SetLocalInt(oPC,"X2_TAILOR_CURRENT_DC",nDC); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost)); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC)); +} + + +// dc to modify oOlditem to look like oNewItem +int CIGetWeaponModificationCost(object oOldItem, object oNewItem) +{ + int nTotal = 0; + int nPart; + for (nPart = 0; nPart<=2; nPart++) + { + if (GetItemAppearance(oOldItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart) !=GetItemAppearance(oNewItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart)) + { + nTotal+= (GetGoldPieceValue(oOldItem)/4)+1; + } + } + + // Modification Cost should not exceed value of old item +1 GP + if (nTotal > GetGoldPieceValue(oOldItem)) + { + nTotal = GetGoldPieceValue(oOldItem)+1; + } + return nTotal; +} + + + diff --git a/_removed/x2_s0_acidshth.ncs b/_removed/x2_s0_acidshth.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e9ae392482e3b1ea1d1a318a028135ac04813972 GIT binary patch literal 3044 zcmbtW&u<%55PrMsBu&?9Lsd1UA#`Q>Ln;b1L?~Q1Z0)65u}&h}bI+Be#^2_g)Mpg=FNOF^Ub_@ zyHsxn-T7Cp-%!eb@}k1$M4;Spem&QGWqqbHrq12}FkSE6+v#n+dq3T{lWuI@?LF*2 zz|NW6&PO}**Ax+_URE>e=;-KsAbVQk+^l&QwXf=|UM*7gQ^nIF{p)-)rqoyNRR>0o zRmD81;7$j8PVslb(>ezV{+&NPiin_oBm#F2A<4AVcPEEwpa0MYNy zL;o;<;(brixq%P3`R783%AU5m;+d_qwPJZ%tV*?+L9OJ`;O&|wb zj|F2t(Eg{^UQ3fS3EQ2t6?M8{t1_+$1QV04{Do3=@p`(qv)S*zx4r#75Kg#dmTIAN z8^8<+jMhA61?HL6Ko?R~B|}8VNUms3v%KN_RYeh!7Da^mwTS*UBBm}}cN}V?0gSf# zRkV%QLtqX>gfeAX+amhqSmZtx(QigXH*m^89Us{sRHVfM&X^#`dks;py5oVR@;X?& zxHzA#gh|vy1)^3OHX7};F8`CL8zl(tDXIZZ$E7j;ATDAsP*PVvxU9*0!;(%8rCDUu zJvo%}+^A0_K7?{A++A<$DkmTGo7)?ZOsw~NdwZLEW6J&3LlFDYR3Nh;IeG@E5>GWa zE6GAKjsJEPgyqq4i-fSCoERUUV#dy{$rus&E4y3wdb^LpJ6rvHfHWFo7&wF2_1c}5 z{}QVaa8ua_l>UF1Q==x0Xw5Ql3QRt?P3p@_mPu|5(92!hWHoMECY1s&3${tT)ESyw zU@mfW>|t}#l*KT{t~(nTu_+P6Z@a^qWDU*=3{d4QX>&}Zk)oi@v31QM1bUp^cAmgy zbRGG@MAqO1`|33IN2|e}$lQ>pFXohm>G&BUEoV(C)58t-Kf=y8kSx8(@!(%gw60~T;?w8NnKI*vtdOsu~;*7 z33+=5n3vltQ9TZmG`tZfap!gkg)+@cC@jaavNTu)Y|i8($`fmBt&8h$gxDg4GVh}t z*Ye)~gKjGbi*D!YoIa>Jh$Q(xbQU3$rGY+{X#wxgiT7uw?%1x((!E}nTj%ba_=i7^&pTt3OJY} zx3VFO#hSypc-wf#IGdM!%$ec4z2cd%$HJ6{tg2556zX> A)Bpeg literal 0 HcmV?d00001 diff --git a/_removed/x2_s0_acidshth.nss b/_removed/x2_s0_acidshth.nss new file mode 100644 index 0000000..1e9d140 --- /dev/null +++ b/_removed/x2_s0_acidshth.nss @@ -0,0 +1,69 @@ +//:://///////////////////////////////////////////// +//:: Mestil's Acid Sheath +//:: X2_S0_AcidShth +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spell creates an acid shield around your + person. Any creature striking you with its body + does normal damage, but at the same time the + attacker takes 1d6 points +2 points per caster + level of acid damage. Weapons with exceptional + reach do not endanger thier uses in this way. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 7, 2002 +//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-07-07 by Georg Zoeller + 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 + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(448); + int nDuration = spell.Level; + int nDamage = spell.Level/2; + effect eShield = EffectDamageShield(nDamage, DAMAGE_BONUS_1d6, DAMAGE_TYPE_ACID); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + + //Link effects + effect eLink = EffectLinkEffects(eShield, eDur); + eLink = EffectLinkEffects(eLink, eVis); + + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + + //Enter Metamagic conditions + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + + // 2003-07-07: Stacking Spell Pass, Georg + RemoveEffectsFromSpell(spell.Target, spell.Id); + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); +} diff --git a/_removed/x2_s0_batttide.ncs b/_removed/x2_s0_batttide.ncs new file mode 100644 index 0000000000000000000000000000000000000000..1e911f9ad9a3dbe93349add9c9963e891b9a2100 GIT binary patch literal 4127 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 CA94)< literal 0 HcmV?d00001 diff --git a/_removed/x2_s0_bldethst.nss b/_removed/x2_s0_bldethst.nss new file mode 100644 index 0000000..d6fd98e --- /dev/null +++ b/_removed/x2_s0_bldethst.nss @@ -0,0 +1,91 @@ +//:://///////////////////////////////////////////// +//:: Blade Thrist +//:: X2_S0_BldeThst +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Grants a +3 enhancement bonus to a slashing weapon +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Nov 27, 2002 +//::////////////////////////////////////////////// +//:: Updated by Andrew Nobbs May 08, 2003 +//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller +//:: 2003-07-21: Complete Rewrite to make use of Item Property System +/* +Patch 1.70 + +- signal event never fired +- VFX added if cast on weapon on ground +*/ + +#include "70_inc_spells" +#include "x2_i0_spells" +#include "x2_inc_spellhook" + +void AddEnhanceEffectToWeapon(object oMyWeapon, float fDuration) +{ + IPSafeAddItemProperty(oMyWeapon, ItemPropertyEnhancementBonus(3), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE); +} + +void main() +{ + /* + Spellcast Hook Code + Added 2003-07-07 by Georg Zoeller + 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 + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + int nDuration = 2 * spell.Level; + + object oMyWeapon = IPGetTargetedOrEquippedMeleeWeapon(); + object oPossessor = GetItemPossessor(oMyWeapon); + + if (spell.Meta == METAMAGIC_EXTEND) + { + nDuration = nDuration * 2; //Duration is +100% + } + + if(GetIsObjectValid(oMyWeapon)) + { + //if the possessor isn't valid, nothing should happen + SignalEvent(oPossessor, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + + //if (GetSlashingWeapon(oMyWeapon)) + //{ + if(GetIsObjectValid(oPossessor)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPossessor); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oPossessor, RoundsToSeconds(nDuration)); + } + else + { + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, spell.Loc); + } + AddEnhanceEffectToWeapon(oMyWeapon, RoundsToSeconds(nDuration)); + /*} + else + { + FloatingTextStrRefOnCreature(83621, spell.Caster); // not a slashing weapon + } */ + } + else + { + FloatingTextStrRefOnCreature(83615, spell.Caster); + } +} diff --git a/_removed/x2_s0_crumble.ncs b/_removed/x2_s0_crumble.ncs new file mode 100644 index 0000000000000000000000000000000000000000..4cbe299f83bdbd0d045715ae2080a0ac94d500d7 GIT binary patch literal 6005 zcmc&&TWl0n7(O#QEteK3Pz!>ErBa9p3Zj7+4J_>dtGnH1cWKLm8Ou$PLJ4?%@x`bw zCMG6oOnfvkF`8&JKB_M&G5Q7p6EsFmAdv?``cO?1{Lc5!KRai-tPo?QVRz?0|MmMX z=bRZDsO3kt+_QO?G0UD=W$5FI*v zWc-qdAjnzSg?Z{&Ay1xNyJ`Yjn(=cKyd3lTs>WLCe1&>uOhEZDN2}M7 z*VTUTn&o_gURv4Nk)P9QeXd<^PdKQ5r`kq5$2_W;pE0shS-85O&3L1})kFD9Bnl8` zV{{M~v`tBn0@X`C`HcPaR$=usKL~6Ds@nuiCc7RWIJ$R_eo+$5*gm(8dL4)c zuIh}C2GwcO#|F)``2#?4^|me1aG?~Ik%6!p6$S@u(SZCeg(G1J&Rw&ex7Ck(`&U|p z4{A+{up{4Z^S0fg&WovuXXM2wAulJXd5yF_xU#Tt>R`=gx%BKrdGZh_a}G|7pFVx~ zber+N$-#-sQtLW!-QZ{$po%}8`EHqMpe)00Hw%KYZDmcjP#7B^r;Zn;q`gxbF+A!R zK6Ui?_^B5P2aZl;9i&hj-N2l|YOYqVcHGHU&2!PXLx}dj-(=DvgW;GXl9^i+dB+tQ zs0=wGeiJK4T#?aY%@GNjh-`I5ibM5SM0PJ}on)XgzWGE7X;H*jb=`R-Yl=XA)Q@wL z6gV?5jVvFPGRII)B?V=Ur46#5qQ+T4%c)qW|Ml5BowIHhVW&%HgEf(uA++yqlFdhT zruJ4!_G&1Mw*!In`hB@ZU(v0H9kW4W=WL?l_C!VOo1mM4Ku$GOoAi5UpH=6r11>9y z^|0);ZB!WvtJUIQs4@U=s}zPirO->w6_hK3#ofiQ>L|$e5k$LadvKtI#bnY^mu;_< zSSve8Z9rfd?UciMprob1m320*nG~?iG_o-}TtP`cu zzk#!vhE`#qj%8ZF`eLzu%g{CCT3Jd1wp=XT5==S-Wk-mQO?N2O-KUbBA$?30UcgS? z#2xZtGB(i*sypjgFShlqUT;zQR+2fd5L6u1R6CmBHMtRBG;*G$x3=U^WLvMjDz0c~ zszQv$hkzl6>c`YK94aO#=js`UniFa;X>GMF;2P}no4bW~E;;B?yq8O;U1dcqAL7!& zC}ix)Zkx<2t2y{o*&WUCZBT-5B4$>i5pu@!zgDX_#QY!*K|iMcd)_SgbT67>NJ}Y6 zX7i)F@jaAM`dzX_eXF?yO)#-TmJo7BUpqFxR6fAa(2+t)SmM++1qF(G#x_TLqC%-u z8D#_1>Xp6ws&(KQpB1SE=e$|aCYz7zO2b#pAWD|PUGx&v#vV)hZGh9W2xG)A)O+U< zGV9s&tPPvY5_q#L-5(!vV2-j4nWnLm2c4%V@mXD!`ob!3*pT!{d~AN5tY}tMfsoI| z_uuRRp}~T@(-eBG5kHH$pGfWI)WJhN6!1RU;>CTPi-lhKT~Hx zjtr;w1z1<&+gPGSKL5ey%drNO3|&^3n`V9t?*-b-T3jY;qs98b-Y6U@>?(!P(C|Q1 zsDzO%Pg}6Xux2mw-j@n1ok-_834`HZVfY`*??%aCB2n;hMW5g3v(DtI!}WE3jw^bc zlt}Qj3NM%b`lLP2Z5+=sX00*r4w~GS!H*No{2_@-`-{}464frhX_S?S86elgjAv4; z$PQaiS>j@S&XMPXa>gCCk9etI3 z@c@ntgYR0L3!1wT#lyxu3K6{+hCE8gmT&4aGXykHjj>DeT2_DfE!Z2cJ1RZBT7nvJ9)Z@Su((Z>)zY7~H2jp2I}8SBNRy;j*5h2`POC~oa? z3fUFzEsPW^)y5c(H>n3{2?uyZHgu-bPSvh;}8vj#-uv3t$3HR7xNoGVPMOjC*93)%(mCqRIA ziAnDDHqz9E7#-wVy|D{EZ^!?&%;;V6 ta#IB~LJE2`7b7DP&GBzS9<7pc_txcM%8|z_Q}_#K=J-t3WqzXV{svQ&B2oYV literal 0 HcmV?d00001 diff --git a/_removed/x2_s0_crumble.nss b/_removed/x2_s0_crumble.nss new file mode 100644 index 0000000..73f7c2a --- /dev/null +++ b/_removed/x2_s0_crumble.nss @@ -0,0 +1,118 @@ +//:://///////////////////////////////////////////// +//:: Crumble +//:: X2_S0_Crumble +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* +// This spell inflicts 1d6 points of damage per +// caster level to Constructs to a maximum of 15d6. +// This spell does not affect living creatures. +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: Oct 2003/ +//:: 2004-01-02: GZ: Removed Spell resistance check +//::////////////////////////////////////////////// +/* +Patch 1.70, fix by Shadooow + +- was missing target check and could affect friendly tarets at no-pvp area +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void DoCrumble (int nDam, object oCaster, object oTarget); + +void main() +{ + + /* + Spellcast Hook Code + Added 2003-07-07 by Georg Zoeller + 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 + + spellsDeclareMajorVariables(); + int nCasterLvl = spell.Level; + int nType = GetObjectType(spell.Target); + int nRacial = GetRacialType(spell.Target); + + //Maximum caster level of 15. //minimum safety check is handled in new engine + if (nCasterLvl > 12) + { + nCasterLvl = 12; + } + + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster) && + (nType == OBJECT_TYPE_CREATURE || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_DOOR) && + (GetRacialType(spell.Target) == RACIAL_TYPE_CONSTRUCT || GetLevelByClass(CLASS_TYPE_CONSTRUCT,spell.Target))) + { + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, spell.Target); + + int nDam = MaximizeOrEmpower(6,nCasterLvl,spell.Meta); + nDam = FloatToInt(nDam * 1.5); + if (nDam>0)//can't happen anyway + { + //---------------------------------------------------------------------- + // * Sever the tie between spellId and effect, allowing it to + // * bypass any magic resistance + //---------------------------------------------------------------------- + /*DelayCommand(0.1,*/DoCrumble(nDam, spell.Caster, spell.Target);//); + } + } + //Make it work on non-constructs + else if (spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster) && + (nType == OBJECT_TYPE_CREATURE || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_DOOR)) + { + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, spell.Target); + + int nDam = MaximizeOrEmpower(6,nCasterLvl,spell.Meta); + if (nDam>0)//can't happen anyway + { + //---------------------------------------------------------------------- + // * Sever the tie between spellId and effect, allowing it to + // * bypass any magic resistance + //---------------------------------------------------------------------- + /*DelayCommand(0.1,*/DoCrumble(nDam, spell.Caster, spell.Target);//); + } + } +} + +//------------------------------------------------------------------------------ +// This part is moved into a delayed function in order to alllow it to bypass +// Golem Spell Immunity. Magic works by rendering all effects applied +// from within a spellscript useless. Delaying the creation and application of +// an effect causes it to loose it's SpellId, making it possible to ignore +// Magic Immunity. Hacktastic! //shadooow: BS, useless, it does work without delay +//------------------------------------------------------------------------------ +void DoCrumble (int nDam, object oCaster, object oTarget) +{ + float fDist = GetDistanceBetween(oCaster, oTarget); + float fDelay = fDist/(3.0 * log(fDist) + 2.0); + effect eDam = EffectDamage(nDam, DAMAGE_TYPE_SONIC); + effect eMissile = EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION); + effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); + effect eVis = EffectVisualEffect(135); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, oTarget); + if (GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT || GetLevelByClass(CLASS_TYPE_CONSTRUCT,oTarget)) + { + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget)); + } + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget)); +} diff --git a/_removed/x2_s0_icedagg.ncs b/_removed/x2_s0_icedagg.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8090b49730e36692ee8551dde3a36c570d0ba4a9 GIT binary patch literal 11041 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 UYw 5) + { + nCasterLvl = 5; + } + if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) + { + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id)); + //Get the distance between the explosion and the target to calculate delay +// fDelay = GetDistanceBetweenLocations(spell.Loc, GetLocation(spell.Target))/20;//there shouldn't be delay + if (!MyResistSpell(spell.Caster, spell.Target)) + { + //Roll damage for each target + nDamage = MaximizeOrEmpower(4,nCasterLvl,spell.Meta,2); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = GetReflexAdjustedDamage(nDamage, spell.Target, spell.DC, SAVING_THROW_TYPE_COLD, spell.Caster); + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD); + if(nDamage > 0) + { + // Apply effects to the currently selected target. + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); + } + } + } +} diff --git a/_removed/x2_s0_vinemcama.ncs b/_removed/x2_s0_vinemcama.ncs new file mode 100644 index 0000000000000000000000000000000000000000..11a9f61c5977ea13810e859ecdc10afdc5234502 GIT binary patch literal 2600 zcmai0&ubJ(6t1f2X|qmT#YMsOR~yt77bRK6y$CXnjR~|9$xKXcy>VR^Vf}GX-21Y( z1;M|-gGUdFp7kUKQSqRt7|??UK@YOzpc05*eXpvgYiuY`dMs>CN)cO4PnUiN`PW*W)KXx=f_Q&y=bAO$MW@Vq| z?=vIY6%kkbtk$Z<#l_i#XFXU~YK=0rpEQK`R20<^R@dz5or~-718pM zLKHo0hH6yaq?__8K4-0ony=CCJrDmFvE%nFv^UCv2R*?6E$Rr78y}a?dE(qLQDk$X z=(URcQ_ul37gZR*mj;FgWZ@mZ7ZMf47H_L98+nVgSA`zXRDmB+p|bCq<7qxV)lMgR zc508I-9v9j6;6cLjUke?j#6NSw#e#|Ld7Ez3k-*`T3NHxDaG0)-04*babA|}W1HK7 zR$xq{r{0JvoJfdXo-naBNa3`QP#F43v-C)seGWJm0OAw?ZlVJ!1#nl&DjXmiuxTDj zyUhSs5L{KS0(_jPRi%VaNW!6EeXb-eUWx9Y{?hq4Z)Pjhu8gkk&*Rowl*+%cw(qJ~5AIkH^J85Oh6Nege>3we z=?8k!SUr=PAAZVbiA5*NxF^e{?H$(6aQtt17&tEY$a zgLyN{#-}=m(=6+B$44h8y5RGFjHPnpwzL8T7vo0NE>G#IAXk5bsFdZbV3v@^34eL{ zD$uDd!`QmtC$U`OahhPf`NUdqYeWjKx~1Jaiq7uysjQtgSkRs&o_$KvU(kYr?Zu3^ z)Gp8zyTU`TKfj6dtc2r(u>-d7gcA9bj(XzOTmx54^1fVyPh^gL^2C%{QD`c5q-{m@ z!O`SP*TL*pdE9XxU%Ah3#QfJGpk;jJ^r*b~X;TC3o2P%tJ5yub)@Yu#oBOjgZy#>u zc6HkJv<*9!cI=B<-y-wAj51F};q245EdQ$f?zJ2?5_9>@v(G2yY;Y*Zb*qtgI$E3o zr4pPr;2(>R*W!eW17`-{*z0u+`D-74+-T~JTvRzlC9i(AXo>Al_SMc!Wbk< a!6T*bS<;|b@OwUZ5xHekv3wm3iTVWR`UUj> literal 0 HcmV?d00001 diff --git a/_removed/x2_s0_vinemcama.nss b/_removed/x2_s0_vinemcama.nss new file mode 100644 index 0000000..82113af --- /dev/null +++ b/_removed/x2_s0_vinemcama.nss @@ -0,0 +1,44 @@ +//:://///////////////////////////////////////////// +//:: Vine Mine, Camouflage: On Enter +//:: X2_S0_VineMCamA +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Friendly creatures entering the zone of Vine Mine, + Camouflage have a +4 added to hide checks. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Nov 25, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Andrew Nobbs, 02/06/2003 +/* +Patch 1.70 + +- aoe signalized wrong spell ID +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" + +void main() +{ + //Declare major variables + aoesDeclareMajorVariables(); + object oTarget = GetEnteringObject(); + if(spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, aoe.Creator)) + { + if(!GetHasSpellEffect(spell.Id, oTarget)) + { + //Fire cast spell at event for the target + SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id, FALSE)); + + effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eSkill = EffectSkillIncrease(SKILL_HIDE, 8); + effect eLink = EffectLinkEffects(eDur, eSkill); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + } + } +} diff --git a/_removed/x2_s0_vinemhmpa.ncs b/_removed/x2_s0_vinemhmpa.ncs new file mode 100644 index 0000000000000000000000000000000000000000..fc78be7489963abf6175713b8ab080eac150437d GIT binary patch literal 2750 zcmai0L5Lhh6s@Z6>1;AlLqY;E*`za?2$5)3MK6L(CapWrnOUZ1vwLe-V zo&>?O2M-=SD0pv1@`9y|!0V zkzQPQ?Cd$E_I!Cv;cqTgCgCSC{v+%CaZ4S#dZT=K?e*(xS6;nZUV5p#^vdP6H(z@L zJNsvL-nzbUS`l&Iqw0v--rinMxz_ELQiqj^9?>v&LtZs&V}Go60+PTayu^nXBZ<1i>(6A>y$pJ|?5 z%<`Rp8v!6z0pJN9K&Aj5OIph}O2EAFZq;VVKobetvfpny_? zia{#nu|<0CX>n7q~*|Ps}dK!llhDQ2o;^;?EnAI}r<1lGi(r zsUv3)NNMwpkJ?h^dm+Te(;w>^f+B*ynF&)mz>{=Vx2x7=D$mwHzpb{2cbr>5f&kCS z7E*3^l604lm8*oq6r-k;T$#JtMo|EKX!UIQLfOsp;YzWT<#{n4E-sJ8(DN?ZQn_~9 z(}04Dajk0SQ$=OU)!!gWjp^(oOIVYX-@N@GJdlneY#>+cnH?#J#lW=aC|UUz)7xbcFp5Z>MQe0DfPti(2g#PPd>7!e4>guem_E|*7q(#xIYJIC%GhF}y4k`$oO zBRV7yC8D69qyQ0W3P7Q4Kf(nd7Y13FZ@<}nKj#avW$*3I%r`UN%+6lB z*^SQ3K631YQlqPf6n;h`Wh(p)jQ^GWzHmrQp1+j7wDQ`;m2L>gWZPtJ~W$Kw8Lz^`L zLfyaoSem4*ZrW-$I}7ujg}9N>_74@>G|g}Ipc2vGvI%^OM3wNIUa(A^_b8F*uB$MQ zQf-R&EoSqU%_e-#5CSwB#*A19k8VwR(4lMxKNo(G;P`A_9SX8l5=pEVbi> zTu(h|sP~=MqX;{~>uQ}`9povn%DM>tBZY#^iZ8HO_SH-p-EP6xamiFqM8x^ApkJ}E zootqrsq}+aq6j-F+g>U3JqY1~kdP_*Oq2Lboa_c%F9Bj#0<6(Mu0~JN$_xNJV#7Qg z_ZlT!L2z09RKmxOQdJ1}oCI7}><{E#0VM}n1bN@w;yzUGV`FWrkae5N+srgH5kIU( z?vg~}fjx$+A*EvjKkCi=3YL$X0g4qGZMm@E6^ieOA6=CSi5Epn3|skD(K zou%%4oFv^|XKrz!2R{G8v_K~j<&FU;SsRKUA4(ppub^-6F{8Pka6G6=j~|sm4cI=Lfw@x$NV%mxZOCB#A$oJnc9hN+tW5|EAHC& zU4QAzvx}!J4UT{frvIsY&RY%>iH0wD_POGojn+%C&KUWo;U5Xf1iM3c>Hqnx5^->p zuDw1;mrwQa$BCwXmqHD!E6rqHZ!-uKi}y+%`o74dSvdqTCcKJk)=MROZoHqN~*5QdFNsmU7V*e}^+m2Mf2aEQR|H?m!kL-cdsgz?}4 id3UWGsF!j@dB;WWljj?tW`qd&zDfIRf)?tH_xV4g;=@M( literal 0 HcmV?d00001 diff --git a/_removed/x2_s0_vinemhmpc.nss b/_removed/x2_s0_vinemhmpc.nss new file mode 100644 index 0000000..c21e4c9 --- /dev/null +++ b/_removed/x2_s0_vinemhmpc.nss @@ -0,0 +1,63 @@ +//:://///////////////////////////////////////////// +//:: Vine Mine, Hamper Movement: Heartbeat +//:: X2_S0_VineMHmpC +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creatures entering the zone of Vine Mine, Hamper + Movement have their movement reduced by 1/2. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Now 25, 2002 +//::////////////////////////////////////////////// +//:: Last Updated By: Andrew Nobbs, 02/06/2003 +/* +Patch 1.70 + +- aoe signalized wrong spell ID +- incorporeal creatures could been affected +*/ + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + //Declare major variables + aoesDeclareMajorVariables(); + + //-------------------------------------------------------------------------- + // GZ 2003-Oct-15 + // When the caster is no longer there, all functions calling + // GetAreaOfEffectCreator will fail. Its better to remove the barrier then + //-------------------------------------------------------------------------- + if(!GetIsObjectValid(aoe.Creator)) + { + DestroyObject(aoe.AOE); + return; + } + + effect eVis = EffectVisualEffect(VFX_IMP_SLOW); + effect eSlow = EffectMovementSpeedDecrease(70); + effect eLink = EffectLinkEffects(eVis, eSlow); + float fDelay; + + //Get first target in spell area + object oTarget = GetFirstInPersistentObject(aoe.AOE); + while(GetIsObjectValid(oTarget)) + { + if(!GetHasFeat(FEAT_WOODLAND_STRIDE, oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator)) + { + SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id)); + fDelay = GetRandomDelay(0.0, 2.0); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextInPersistentObject(aoe.AOE); + } +} diff --git a/_removed/x2_s1_beholdatt.ncs b/_removed/x2_s1_beholdatt.ncs new file mode 100644 index 0000000000000000000000000000000000000000..29fa555ed675c1b9efaf3e8268da8cb189d28df8 GIT binary patch literal 38223 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 literal 0 HcmV?d00001 diff --git a/_removed/x2_s1_beholdatt.nss b/_removed/x2_s1_beholdatt.nss new file mode 100644 index 0000000..0280767 --- /dev/null +++ b/_removed/x2_s1_beholdatt.nss @@ -0,0 +1,30 @@ +//:://///////////////////////////////////////////// +//:: x2_s1_beholdatt +//:: Beholder Attack Spell Logic +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + + This spellscript is the core of the beholder's + attack logic. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-08-28 +//::////////////////////////////////////////////// +// Modified by Tony K for NWN2 2008-05-18 - only left +// for backward compatability +// Modified by Tony K for NWN1 2008-07-22 + + +#include "x2_inc_behai" + + +void main() +{ +// Jug_Debug(GetName(OBJECT_SELF) + " running special beholder ray AI"); + object oTarget = GetSpellTargetObject(); + + RunBeholderEyeAttacks(oTarget, TRUE); +} \ No newline at end of file diff --git a/_removed/x2_s1_beholdray.ncs b/_removed/x2_s1_beholdray.ncs new file mode 100644 index 0000000000000000000000000000000000000000..97e4299d1fec1b3538976a695e82a114d489032b GIT binary patch literal 11204 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 IE{W8C0rOc@N&o-= literal 0 HcmV?d00001 diff --git a/_removed/x2_s1_beholdray.nss b/_removed/x2_s1_beholdray.nss new file mode 100644 index 0000000..052a20a --- /dev/null +++ b/_removed/x2_s1_beholdray.nss @@ -0,0 +1,73 @@ +//:://///////////////////////////////////////////// +//:: Beholder Ray Attacks +//:: x2_s2_beholdray +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Implementation for the new version of the + beholder rays, using projectiles instead of + rays +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-09-16 +//::////////////////////////////////////////////// +// Modified by dirtywick and Tony K for NWN2 2008-04-06 +// Modified by Tony K for NWN1 2008-07-22 + +#include "x0_i0_spells" + +#include "x2_inc_beholder" + +void main() +{ + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + + int nRay; + + switch (nSpell) + { + case 776: + nRay = BEHOLDER_RAY_DEATH; + break; + + case 777: + nRay = BEHOLDER_RAY_TK_THRUST; + break; + + case 778: + nRay = BEHOLDER_RAY_PETRI; + break; + + case 779: + nRay = BEHOLDER_RAY_CHARM_MON; + break; + + case 780: + nRay = BEHOLDER_RAY_SLOW; + break; + + case 783: + nRay = BEHOLDER_RAY_WOUND; + break; + + case 784: + nRay = BEHOLDER_RAY_FEAR; + break; + + case 785: + nRay = BEHOLDER_RAY_CHARM_PER; + break; + + case 786: + nRay = BEHOLDER_RAY_SLEEP; + break; + + case 787: + nRay = BEHOLDER_RAY_DISINTEGRATE; + break; + } + + DoBeholderRayAttack(nRay, oTarget, FALSE); +} \ No newline at end of file diff --git a/_removed/x2_s1_petrgaze.ncs b/_removed/x2_s1_petrgaze.ncs new file mode 100644 index 0000000000000000000000000000000000000000..1ce6e1d6323d0bf2fda136532c503b47953cb2fc GIT binary patch literal 14367 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 MhO-B?lwm&oZ}%$yX8-^I literal 0 HcmV?d00001 diff --git a/_removed/x2_s1_petrgaze.nss b/_removed/x2_s1_petrgaze.nss new file mode 100644 index 0000000..eaf235d --- /dev/null +++ b/_removed/x2_s1_petrgaze.nss @@ -0,0 +1,81 @@ +//:://///////////////////////////////////////////// +//:: Gaze attack for shifter forms +//:: x2_s1_petrgaze +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + + Petrification gaze for polymorph type + basilisk and medusa + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: July, 09, 2003 +//::////////////////////////////////////////////// + +#include "x0_i0_spells" +#include "x2_inc_shifter" + +void main() +{ + //-------------------------------------------------------------------------- + // Enforce artifical use limit on that ability + //-------------------------------------------------------------------------- + if(ShifterDecrementGWildShapeSpellUsesLeft() < 1) + { + FloatingTextStrRefOnCreature(83576, OBJECT_SELF); + return; + } + + //-------------------------------------------------------------------------- + // Make sure we are not blind + //-------------------------------------------------------------------------- + if(GZCanNotUseGazeAttackCheck(OBJECT_SELF)) + { + return; + } + + //-------------------------------------------------------------------------- + // Calculate Save DC + //-------------------------------------------------------------------------- + int nDC = ShifterGetSaveDC(OBJECT_SELF,SHIFTER_DC_EASY_MEDIUM); + + float fDelay; + object oTarget = GetSpellTargetObject(); + int nHitDice = GetCasterLevel(OBJECT_SELF); + int nSpellID = GetSpellId(); + object oSelf = OBJECT_SELF; + + //-------------------------------------------------------------------------- + // Loop through all available targets in spellcone + //-------------------------------------------------------------------------- + location lFinalTarget = GetSpellTargetLocation(); + vector vFinalPosition; + if(lFinalTarget == GetLocation(OBJECT_SELF)) + { + // Since the target and origin are the same, we have to determine the + // direction of the spell from the facing of OBJECT_SELF (which is more + // intuitive than defaulting to East everytime). + + // In order to use the direction that OBJECT_SELF is facing, we have to + // instead we pick a point slightly in front of OBJECT_SELF as the target. + vector lTargetPosition = GetPositionFromLocation(lFinalTarget); + vFinalPosition.x = lTargetPosition.x + cos(GetFacing(OBJECT_SELF)); + vFinalPosition.y = lTargetPosition.y + sin(GetFacing(OBJECT_SELF)); + lFinalTarget = Location(GetAreaFromLocation(lFinalTarget),vFinalPosition,GetFacingFromLocation(lFinalTarget)); + } + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lFinalTarget, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget,SPELL_TARGET_STANDARDHOSTILE,OBJECT_SELF) && oTarget != OBJECT_SELF) + { + // Let target know the negative spell has been cast + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID)); + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + DelayCommand(fDelay, DoPetrification(nHitDice, oSelf, oTarget, nSpellID, nDC)); + //Get next target in spell area + } + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lFinalTarget, TRUE); + } +} diff --git a/_removed/x2_s2_cursesong.ncs b/_removed/x2_s2_cursesong.ncs new file mode 100644 index 0000000000000000000000000000000000000000..102cfdde38cc81dadf1b58078a7d166eb65008da GIT binary patch literal 8800 zcmd5>U5Hgx6yE3DbMGDJ$EInVwEQ_Uj#8FkCS+vDXj2;F%+UBp4_z&@f-;dr>!l)k ziJ<7Ahw33BDq$VjiZNn7;k3z0N)R+}oLp6*mVxp0(Fr z>-*MPd+mMp46h%Hw_bbAigm{H?O15=rzJLFi9dx`>2P${(d~om1`|sUT z*>zWC*FC#;?tkE6jC5s24(`2nnW4qbtIXwQdV2a;Y@(8N5fzLHf}#l)gnflYR`qM@LM5k>?O|s6mg>;g_VA>$Qu}}yAZpuU) zZVfv#KN#<9n$^T#J!DffwJ>;WZ!x+nfpT>*-xHqDee8@$%>Rsc(M-4CRJur zI{TyLfFl7S-aB&H^*4cCe}nAWYuR<2&#)WKWfwPrU0;Lj+Ul?iGwg23WjDVG>|`Cy zT$!!4?ArS??AGM6o7)6-3meSctXg($w`AC@%w^Zz1a|WqWY<#5uJyhQyXCp;E@=Y0 z%Nk@?u4Omt=?pvc{G1)3s|oDpHps42%dTZS!)|ddyNjE^uBSnEvIlzmUHQulyM?*z zI-9_*yFqqQZSG3HWZ0oA=2YfI7syV|B^P#9>8!&}nD}QEIU{+wD|Kbq&B?DF7yW*-0JM@j5+_g2pPQ3W%%zwg8I=#P}i;o%EMO!oM zP*8Ogo&TK2HAx#X4uWjWmou* z*$HZY-8ITi^t{{!hcoPuot(-H8(=5-oO#^|8o#Uj%k0d#3_D~ehh31cd!1i{^(wO- zJ3;OD%>S4jSsZd--P!dvulkuEyur_W`6v%}3az3sy8?}ah}z;M_#QUjc+${G&wJ8> zlm6^UBPX5mq(zYit)8^xq;hwlHy&jtUFzw!IO!@+I?GAddD2!V9kt)~!5)sGuLwhT z6>>WL{U6*$9n`9)lk_6m5j@DQr<2q-bwb)fEqgjiMOYnkjyhPmo=#H#)cJrq=(wIv z(zmGd0(G#8J)NXWQ)eG_6m#gfdzj5IbriGe_?VYbM=`68kGbTomh9aQuhh&9D6n_k zEf) zQ8|9pw}=qZqJNU44UJqq`|8`?(#kYG!PpA!k|U-c!|)kKJc6Pd!_BblUkWgzL=fl1oo7@n&;L3cI&?q&bI(w|8S<7%A~V!W+ce5w^MW$`Yd zeI{_fig=WhUUqp=41At-mLxL`xIUe69im3p0&EoBbo}@iHri#oM#>?2@)$7?gsbm7|Q?q+ys+J&--`>FUwzm?w3|wCEx0tJuLYu;-KAFE}Z62jfd@ zwij>+tzA_Sl<}}EF}zGr`5%PVa`cX>dzM`hr$e7gHRfH8A}g36{8YUn-CqbGD56EZ zCYcor58Qe1YfRH14k6)A?n zxYX7S3JmvbUs1WWGB7kWvTba1aA;_3^T>uRw{J!~f3-Wrb#gSqX_bi5Rx&%0LaAca z3?gZq+({KkOELea@;L}+U?YrHJX?P!x0@>GA-1jjgr!X*LR{+K&ywECz-(qt8g(*< zI#@v(CB7>psV`Z>%aS$XcA;mfdfK_65~4n%oiiyr>Wmezgm0k8CjcUZr^Fr>W?oTy zK+d{}HDN*!wM`(zzq!v$rS7l&%qOEQUh|ook(19Ed_LtYpk$OeXVlI7cI?ze)4zRX zWo+BV&FeQ*28RdM4GmU?N7q*dMg}XkJZ-^l92~Q|LGUpnuQbxRPKcBKPb70l{$DLQ zbR=Tgq0#3P>#V)c!@AUM{8)~3C`|CS5WB(eZia zfNvVOd3bP)!8UFm@Y;biJV2Bx)2J~Xh$E%78_|Tf5xHhl+p~=eLsgsh5vq%N8Nm0H zpg!mHDgrsP_Vl8UeV=qzsg~{-LI8K?L?1bZzRPqNH7+JE?e&4`D4$4gw~Q-!?g3`0 R1VRoWoS$^iRK6!;^A|`Tw)X%4 literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_cursesong.nss b/_removed/x2_s2_cursesong.nss new file mode 100644 index 0000000..9daf11b --- /dev/null +++ b/_removed/x2_s2_cursesong.nss @@ -0,0 +1,431 @@ +//:://///////////////////////////////////////////// +//:: Curse Song +//:: X2_S2_CurseSong +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spells applies penalties to all of the + bard's enemies within 30ft for a set duration of + 10 rounds. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: May 16, 2003 +//::////////////////////////////////////////////// +//:: Last Updated By: Andrew Nobbs May 20, 2003 + +#include "x2_i0_spells" + +void main() +{ + + if (!GetHasFeat(FEAT_BARD_SONGS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(85587,OBJECT_SELF); // no more bardsong uses left + return; + } + + if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced + return; + } + + + //Declare major variables + int nLevel = GetLevelByClass(CLASS_TYPE_BARD); + int nRanks = GetSkillRank(SKILL_PERFORM); + int nPerform = nRanks; + int nDuration = 10; //+ nChr; + + effect eAttack; + effect eDamage; + effect eWill; + effect eFort; + effect eReflex; + effect eHP; + effect eAC; + effect eSkill; + + int nAttack; + int nDamage; + int nWill; + int nFort; + int nReflex; + int nHP; + int nAC; + int nSkill; + + if(GetHasFeat(424)) // lingering song + { + nDuration += 5; + } + + //Check to see if the caster has Lasting Impression and increase duration. + if(GetHasFeat(870)) + { + nDuration *= 5; + } + + /*if(nPerform >= 100 && nLevel >= 30) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 48; + nAC = 7; + nSkill = 18; + } + else if(nPerform >= 95 && nLevel >= 29) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 46; + nAC = 6; + nSkill = 17; + } + else if(nPerform >= 90 && nLevel >= 28) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 44; + nAC = 6; + nSkill = 16; + } + else if(nPerform >= 85 && nLevel >= 27) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 42; + nAC = 6; + nSkill = 15; + } + else if(nPerform >= 80 && nLevel >= 26) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 40; + nAC = 6; + nSkill = 14; + } + else*/ + if(nPerform >= 100 && nLevel >= 40) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 38; + nAC = 5; + nSkill = 13; + } + else if(nPerform >= 90 && nLevel >= 36) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 36; + nAC = 5; + nSkill = 12; + } + else if(nPerform >= 80 && nLevel >= 32) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 34; + nAC = 5; + nSkill = 11; + } + else if(nPerform >= 70 && nLevel >= 28) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 32; + nAC = 5; + nSkill = 10; + } + else if(nPerform >= 60 && nLevel >= 24) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 30; + nAC = 5; + nSkill = 9; + } + else if(nPerform >= 50 && nLevel >= 20) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 28; + nAC = 5; + nSkill = 8; + } + else if(nPerform >= 45 && nLevel >= 19) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 26; + nAC = 5; + nSkill = 7; + } + else if(nPerform >= 40 && nLevel >= 18) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 24; + nAC = 5; + nSkill = 6; + } + else if(nPerform >= 35 && nLevel >= 17) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 22; + nAC = 5; + nSkill = 5; + } + else if(nPerform >= 30 && nLevel >= 16) + { + nAttack = 2; + nDamage = 3; + nWill = 3; + nFort = 2; + nReflex = 2; + nHP = 20; + nAC = 5; + nSkill = 4; + } + else if(nPerform >= 24 && nLevel >= 15) + { + nAttack = 2; + nDamage = 3; + nWill = 2; + nFort = 2; + nReflex = 2; + nHP = 16; + nAC = 4; + nSkill = 3; + } + else if(nPerform >= 21 && nLevel >= 14) + { + nAttack = 2; + nDamage = 3; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 16; + nAC = 3; + nSkill = 2; + } + else if(nPerform >= 18 && nLevel >= 11) + { + nAttack = 2; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 8; + nAC = 2; + nSkill = 2; + } + else if(nPerform >= 15 && nLevel >= 8) + { + nAttack = 2; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 8; + nAC = 0; + nSkill = 1; + } + else if(nPerform >= 12 && nLevel >= 6) + { + nAttack = 1; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 1; + nHP = 0; + nAC = 0; + nSkill = 1; + } + else if(nPerform >= 9 && nLevel >= 3) + { + nAttack = 1; + nDamage = 2; + nWill = 1; + nFort = 1; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + else if(nPerform >= 6 && nLevel >= 2) + { + nAttack = 1; + nDamage = 1; + nWill = 1; + nFort = 0; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + else if(nPerform >= 3 && nLevel >= 1) + { + nAttack = 1; + nDamage = 1; + nWill = 0; + nFort = 0; + nReflex = 0; + nHP = 0; + nAC = 0; + nSkill = 0; + } + + //If the bard has Extra Music and is at least 12lvl, give a small random bonus to this song + if (nLevel >= 12 && GetHasFeat(FEAT_EXTRA_MUSIC, OBJECT_SELF) ) + { + switch(d10()) + { + case 1: nAttack = nAttack + 1;break; + case 2: nDamage = nDamage + 1;break; + case 3: nWill = nWill + 1;break; + case 4: nFort = nFort + 1;break; + case 5: nReflex = nReflex + 1;break; + case 6: nAC = nAC + 1;break; + case 7: nSkill = nSkill + 1;break; + case 8: nWill = nWill + 2;break; + case 9: nFort = nFort + 2;break; + case 10: nReflex = nReflex + 2;break; + } + } + //End of Extra Music bonus + + effect eVis = EffectVisualEffect(VFX_IMP_DOOM); + + eAttack = EffectAttackDecrease(nAttack); + eDamage = EffectDamageDecrease(nDamage, DAMAGE_TYPE_SLASHING); + effect eLink = EffectLinkEffects(eAttack, eDamage); + + if(nWill > 0) + { + eWill = EffectSavingThrowDecrease(SAVING_THROW_WILL, nWill); + eLink = EffectLinkEffects(eLink, eWill); + } + if(nFort > 0) + { + eFort = EffectSavingThrowDecrease(SAVING_THROW_FORT, nFort); + eLink = EffectLinkEffects(eLink, eFort); + } + if(nReflex > 0) + { + eReflex = EffectSavingThrowDecrease(SAVING_THROW_REFLEX, nReflex); + eLink = EffectLinkEffects(eLink, eReflex); + } + if(nHP > 0) + { + //SpeakString("HP Bonus " + IntToString(nHP)); + eHP = EffectDamage(nHP, DAMAGE_TYPE_SONIC, DAMAGE_POWER_NORMAL); +// eLink = EffectLinkEffects(eLink, eHP); + } + if(nAC > 0) + { + eAC = EffectACDecrease(nAC, AC_DODGE_BONUS); + eLink = EffectLinkEffects(eLink, eAC); + } + if(nSkill > 0) + { + eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, nSkill); + eLink = EffectLinkEffects(eLink, eSkill); + } + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(507); + eLink = EffectLinkEffects(eLink, eDur); + + effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC); + effect eFNF = EffectVisualEffect(VFX_FNF_LOS_EVIL_30); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF)); + + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + + eHP = ExtraordinaryEffect(eHP); + eLink = ExtraordinaryEffect(eLink); + + if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur2, OBJECT_SELF, RoundsToSeconds(nDuration)); + } + float fDelay; + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF)) + { + // * GZ Oct 2003: If we are deaf, we do not have negative effects from curse song + if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget)) + { + if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget)) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId())); + if (nHP > 0) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SONIC), oTarget); + DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHP, oTarget)); + } + + if (!GetIsDead(oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + DelayCommand(GetRandomDelay(0.1,0.5),ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + else + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), oTarget); + } + } + + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + } + DecrementRemainingFeatUses(OBJECT_SELF, FEAT_BARD_SONGS); +} diff --git a/_removed/x2_s2_discbreath.ncs b/_removed/x2_s2_discbreath.ncs new file mode 100644 index 0000000000000000000000000000000000000000..65f089d01ed6c47c6b0c4448af7118d0e74e2d1e GIT binary patch literal 946 zcmeZs4ps;=)H85mU|`-P#{dKz3JgqaV93k_gAl$D3oCY4E zYFc7xP6<#(2u-GJqCzMtj3r#!?ZAqF)}j(E&Rj40#?t$t)L1r z`4Wn#5>)gpil{O~l#v5PR0S%kj3TNE6}3YVRfCE~qKK+PMN3dbHK3yXD59EB(N!p- zT2RrWpx|Kq01XLH$iYGd#QqP~^8)Jg_rO4V#Rk@}pC}D)5E}Z3((n9ZT0UZ(r|7to!LrcXYq_~12 z1qITjh)@a&iYrneYKkkah;)4WjeU3CGbAf{?!*93oO zg4mi*Wz(bc#hXG!=azJ3JRTnfadopKjurm(Ud%&V8MsfxxyB@&u-?3GaAqcA^ZuC^ zd#)mDv_(7HIbTOj5Lw`spPc+`AUKOsYOob^zWFJlE=JKAaAwERTi_JXkLw_ zLd?taWcl49+l*XsMNYm@AYUqwKeWguBkM<(lNSo)iv{v#i!70Rb>?nN&YU*Ao4A4a zYG3Kr-_oU^U@Ki-2;QgwpW@6-QUdO#@*sPu#lgosCqr7~K@Q<-6`~Q$3d#8nckE8s zj%&VhO@Gp|Xhg73wmTJFxW;^A{b>?(kpD>FdSO^?^aza literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_divwrath.nss b/_removed/x2_s2_divwrath.nss new file mode 100644 index 0000000..3cbc785 --- /dev/null +++ b/_removed/x2_s2_divwrath.nss @@ -0,0 +1,142 @@ +//:://///////////////////////////////////////////// +//:: Divine Wrath +//:: x2_s2_DivWrath +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + The Divine Champion is able to channel a portion + of their gods power once per day giving them a +3 + bonus on attack rolls, damage, and saving throws + for a number of rounds equal to their Charisma + bonus. They also gain damage reduction of +1/5. + At 10th level, an additional +2 is granted to + attack rolls and saving throws. + + Epic Progression + Every five levels past 10 an additional +2 + on attack rolls, damage and saving throws is added. As well the damage + reduction increases by 5 and the damage power required to penetrate + damage reduction raises by +1 (to a maximum of /+5). +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Feb 05, 2003 +//:: Updated On: Jul 21, 2003 Georg Zoeller - +// Epic Level progession +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- did signalized wrong spell ID +*/ + +#include "nw_i0_spells" + +void main() +{ + //Declare major variables + object oTarget = OBJECT_SELF; + int nDuration = GetAbilityModifier(ABILITY_CHARISMA, OBJECT_SELF); + //Check that if nDuration is not above 0, make it 1. + if(nDuration <= 0) + { + FloatingTextStrRefOnCreature(100967,OBJECT_SELF); + return; + } + + effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY); + eVis = EffectLinkEffects(EffectVisualEffect(VFX_IMP_GOOD_HELP),eVis); + effect eAttack, eDamage, eSaving, eReduction; + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 622, FALSE)); + + int nAttackB = 3; + int nDamageB = DAMAGE_BONUS_3; + int nSaveB = 3 ; + int nDmgRedB = 5; + int nDmgRedP = DAMAGE_POWER_PLUS_ONE; + + // --------------- Epic Progression --------------------------- + + int nLevelDiv = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION,oTarget); + int nLevelPal = GetLevelByClass(CLASS_TYPE_PALADIN,oTarget)-10; + int nLevelBlg = GetLevelByClass(CLASS_TYPE_BLACKGUARD,oTarget); + int nLevel = nLevelDiv; + if (nLevelPal > nLevel) nLevel = nLevelPal; + if (nLevelBlg > nLevel) nLevel = nLevelBlg; + + int nLevelB = (nLevel / 5)-1; + if (nLevelB <=0) + { + nLevelB =0; + } + else + { + nAttackB += (nLevelB*2); // +2 to attack every 5 levels past 5 + nSaveB += (nLevelB*2); // +2 to saves every 5 levels past 5 + } + + if (nLevelB >6 ) + { + nDmgRedP = DAMAGE_POWER_PLUS_FIVE; + nDmgRedB = 7*5; + nDamageB = DAMAGE_BONUS_17; + } + else if (nLevelB >5 ) + { + nDmgRedP = DAMAGE_POWER_PLUS_FIVE; + nDmgRedB = 6*5; + nDamageB = DAMAGE_BONUS_15; + } + else if (nLevelB >4 ) + { + nDmgRedP = DAMAGE_POWER_PLUS_FIVE; + nDmgRedB = 5*5; + nDamageB = DAMAGE_BONUS_13; + } + else if (nLevelB >3) + { + nDmgRedP = DAMAGE_POWER_PLUS_FOUR; + nDmgRedB = 4*5; + nDamageB = DAMAGE_BONUS_11; + } + else if (nLevelB >2) + { + nDmgRedP = DAMAGE_POWER_PLUS_THREE; + nDmgRedB = 3*5; + nDamageB = DAMAGE_BONUS_9; + } + else if (nLevelB >1) + { + nDmgRedP = DAMAGE_POWER_PLUS_TWO; + nDmgRedB = 2*5; + nDamageB = DAMAGE_BONUS_7; + } + else if (nLevelB >0) + { + nDamageB = DAMAGE_BONUS_5; + } + //-------------------------------------------------------------- + // + //-------------------------------------------------------------- + + eAttack = EffectAttackIncrease(nAttackB,ATTACK_BONUS_MISC); + eDamage = EffectDamageIncrease(nDamageB, DAMAGE_TYPE_DIVINE); + eSaving = EffectSavingThrowIncrease(SAVING_THROW_ALL,nSaveB, SAVING_THROW_TYPE_ALL); + eReduction = EffectDamageReduction(nDmgRedB, nDmgRedP); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + + effect eLink = EffectLinkEffects(eAttack, eDamage); + eLink = EffectLinkEffects(eSaving,eLink); + eLink = EffectLinkEffects(eReduction,eLink); + eLink = EffectLinkEffects(eDur,eLink); + eLink = SupernaturalEffect(eLink); + + // prevent stacking with self + RemoveEffectsFromSpell(oTarget, GetSpellId()); + + + //Apply the armor bonuses and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); +} diff --git a/_removed/x2_s2_dragknght.ncs b/_removed/x2_s2_dragknght.ncs new file mode 100644 index 0000000000000000000000000000000000000000..43e360019389f46b6e0089cdd811ff490cd02307 GIT binary patch literal 3376 zcmds4&1(};5TCcZ=~tqyQm|TUmq`7tR;#E7ku_OmanqJ$sd|tlHnok^w7sNQZA(Ik;$& z39~E(@i9&RoPnqn%VZdJ2T&85jPXMoEJ~$AS9rp!O?EiaBjFFQ1Q=euwN4Bn;uQW; zs&G_9pc#DC3~W4Iene^a8idv6BpLmapwfx>7?1eq5Z*Axk|RE9E7jUY{eD`4|2`qm zMnZVU#Pi;4Y^*K)zj=$+!w$*7(9JWUANo!u2+M9T@04Y8u>NRncsrb*3R~-o_4>U= zV+Gr>&q%X`>C|gsY6#JXZISU^h`vY>!5}D6## zm0&Whn|L!pWU`NP5u>A8o@4{EERr$mx?x+2WrSC{Q5yd9h?V>=ukdRw7@3}mWh#f*+_IZI@(#AHNop;M+ujon}ByU9t+8t3h zvC>w1aCKtDCV5Chk8_;wM*j`nS`ZrD>@dE~WPk_Z`+q}cl83Z3)B_gLcM0@Arf%CV z4Jl68h(P)yn&c9sZUpg+f&EgdKc`5_C!YSL&~#Bsx+)yG854AIU+TL~jXw9w2E|qs Oo2To2g;wwn8-4-WI`oVH literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_dragknght.nss b/_removed/x2_s2_dragknght.nss new file mode 100644 index 0000000..2f1c6ca --- /dev/null +++ b/_removed/x2_s2_dragknght.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: Dragon Knight +//:: X2_S2_DragKnght +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Summons an adult red dragon for you to + command. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Feb 07, 2003 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x2_inc_toollib" +#include "x2_inc_spellhook" + +void main() +{ + /* + 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; + } + + //Declare major variables + spellsDeclareMajorVariables(); + effect eVis = EffectVisualEffect(460); + + if (GetCasterLevel(OBJECT_SELF) >= 40) + { + int nDuration = 10; + SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_epicdk"); + effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE); + + // * make it so dragon cannot be dispelled + eSummon = ExtraordinaryEffect(eSummon); + //Apply the summon visual and summon the dragon. + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration)); + DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc)); + } + else if (GetCasterLevel(OBJECT_SELF) >= 31) + { + int nDuration = 20; + SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_dkadult"); + effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE); + + // * make it so dragon cannot be dispelled + eSummon = ExtraordinaryEffect(eSummon); + //Apply the summon visual and summon the dragon. + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration)); + DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc)); + } + else + { + int nDuration = 20; + SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_dkyoung"); + effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE); + + // * make it so dragon cannot be dispelled + eSummon = ExtraordinaryEffect(eSummon); + //Apply the summon visual and summon the dragon. + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration)); + DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc)); + } + +} diff --git a/_removed/x2_s2_epicward.ncs b/_removed/x2_s2_epicward.ncs new file mode 100644 index 0000000000000000000000000000000000000000..b928f9a2459e96e8751bd2a710e6e02bbc1113ea GIT binary patch literal 3014 zcmbtWOKTHR6ux(6(po3jDq^d(I>Z+!)jkm2xEPaB1}AMvV%jcb@QKApB?YA$H*Q@E zf(w6y_!D&F!XF^wYvDprq>C;J^}FZf-sX;Rpx8i@Igjt0^PO|gotbhyXilD4lU{?IsnK#`7WJ)`dnq_PJDWwybw z)PMOC5nef#c|WNKp?KtyVncZJ%_+QPYdmN#SiW^A0y5$V+7GI>v{hD#Kv8rId?p8! z0f$wo3)WF7Aqmw7hW`;L!=Z(#G)a@N-biavqZ!t`K0t|rkOL0?gi-O_M7r|ecB^%F zdHEg?b~t&SVmen1U|m?rwJ2RztrbNs9@$YQ#}(;lB1;kcj3ANe15$m>B10UN&W&$K zvc`-UfRAjAh8WR0i!d`rw9KMUTO#K-i@s|Sg+WkCRQjj}sREX!XH+LayqA#Wywew0 zCTGFo;d7JeT$n^vbRepwVWm<}%ltcuno)v+f1?}Vw2!Cq3*jOM4aI%+gJX)k^Okg= zBQ=?k?aq#rPLg=a`5~2EVf$uXbvb$1sxIGxr2l5?`pU}fm4a~IxJcqV4;9GlQ5;1^ zS2&+yu$PO4WEj8gE-=g8?PdwVf^x!myo)N9ZCx=k^5@!1_pi5C!y8MjY=Y!epfprd z3c{^7YW@-GMnFnoA0mqXZd`P`RH6mTC3Eh`<+<%ro}IB=GN+ha?$|E#aouw9dL%Y& zyTmh%j>`e6g^!LId6MnaZPAR;)a~WRI>oG=LoJt6uVN+iD*_OVX5QQ<(3!6%my5WDNZ$Ngw^nJoEOf_ zr0S^itkY3!Eb1Aigm}9K%wzSrs2qn$8eWW(xUrZ+A#d{>3iGk7Dm7LQHb=7=Wr@|k z*2T5aMQksGyy)E=m$K3SLARBJMYlXLt`4e7B1!&-&Rz(4Wta;V(RXw7ZBw`9mlvs< zun~^5Et>Qaq-hj<$B2VkYTr{NRVQA(U)r{ilC4QcZ^jP3 zE3|^w0=}bwgFSN9EMYt>NZN~wIy%k1NhDJOBkxaL-Vg&4lgn< KdHeIV5Qsm}Pu4X6 literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_epicward.nss b/_removed/x2_s2_epicward.nss new file mode 100644 index 0000000..183336a --- /dev/null +++ b/_removed/x2_s2_epicward.nss @@ -0,0 +1,60 @@ +//:://///////////////////////////////////////////// +//:: Epic Ward +//:: X2_S2_EpicWard. +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Makes the caster invulnerable to damage + (equals damage reduction 50/+20) + Lasts 1 round per level + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: Aug 12, 2003 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "nw_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = spell.Level / 2; + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + int nLimit = 50*nDuration; + //Check for metamagic extend + if(spell.Meta == METAMAGIC_EXTEND) //Duration is +100% + {//1.70 added in order to allow metamagic override feature + nDuration = nDuration * 2; + } + effect eDur = EffectVisualEffect(495); + effect eProt = EffectDamageReduction(15, DAMAGE_POWER_PLUS_SIX, nLimit); + effect eLink = EffectLinkEffects(eDur, eProt); + eLink = EffectLinkEffects(eLink, eDur); + + // * Brent, Nov 24, making extraodinary so cannot be dispelled + eLink = ExtraordinaryEffect(eLink); + + RemoveEffectsFromSpell(spell.Target, spell.Id); + //Apply the armor bonuses and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration)); +} diff --git a/_removed/x2_s2_epmagearm.ncs b/_removed/x2_s2_epmagearm.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8e584bdb5ad90a2ea3fe618e77e0bca1885b65a6 GIT binary patch literal 3241 zcmbtW&ud&&6u$4rByDDBr&4TfjD3u@g=(}hNL?uMI`fo=Z;~)GoumtS)LJn(5}5%( z7b3WIEeI~$x)=Y1x^dwjP^5^9E(E1ykwqYW_d9cM-+g&LC}tot@7!~~bIx~u+_%vk zM&q@Yuia3p_2Y92ej%rjK;(?~CwzNWnL%N-M6>cB!=nKzO$i%{|Jp_9{ z48ym+Qp!<4eG3ZY>_McF+B>i2S)RqiQ9ejU<9HA*=x%8!@1!q3q13v5EuVdQcQW~C zZ|`HcIN{e>s`c7q0Gk{;(hsJJ2fBMzODc-!7|CVbR<;@7{1ru!F*-!3Ka0rLhp9^| zk34E)3_Vn}k{oP49KpHg| zhAv7&1;f#x`8=x;@ld(*ME}38s-j6R*>OxtBS@3)T$AqRhGXJac=^yZ*-nR!NmyaB z?wX_Pz?0VvNAOxyI`>(+R*tCCoHyb5M@er#{R;2iz*lTqA{-%0D-*`CxD z^}n50)VwL6OUT=Mz`QivO1f#BbgQ|nbvj0P86+&Ga_JW1?GvfV;se5c!=c!28dGYi_ zG?^tRH-g+T>RBUo?Q8rKMeT7?jKax8N zIM^dM?Gnbrj>o-t%Xr5+Ta$A%$^2D)*&Om4O$)nic?m-nco-kMH D`d%8r literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_epmagearm.nss b/_removed/x2_s2_epmagearm.nss new file mode 100644 index 0000000..963e3cd --- /dev/null +++ b/_removed/x2_s2_epmagearm.nss @@ -0,0 +1,67 @@ +//:://///////////////////////////////////////////// +//:: Epic Mage Armor +//:: X2_S2_EpMageArm +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Gives the target +20 AC Bonus to Deflection, + Armor Enchantment, Natural Armor and Dodge. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Feb 07, 2003 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "nw_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ + /* + 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; + } + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = spell.Level; + effect eVis = EffectVisualEffect(495); + effect eAC1, eAC2, eAC3, eAC4; + //Fire cast spell at event for the specified target + SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); + //Check for metamagic extend + if(spell.Meta == METAMAGIC_EXTEND) //Duration is +100% + { + nDuration = nDuration * 2; + } + //Set the four unique armor bonuses + eAC1 = EffectACIncrease(3, AC_ARMOUR_ENCHANTMENT_BONUS); + eAC2 = EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS); + eAC3 = EffectACIncrease(3, AC_DODGE_BONUS); + eAC4 = EffectACIncrease(3, AC_NATURAL_BONUS); + effect eDur = EffectVisualEffect(VFX_DUR_SANCTUARY); + + effect eLink = EffectLinkEffects(eAC1, eAC2); + eLink = EffectLinkEffects(eLink, eAC3); + eLink = EffectLinkEffects(eLink, eAC4); + eLink = EffectLinkEffects(eLink, eDur); + + RemoveEffectsFromSpell(spell.Target, spell.Id); + + // * Brent, Nov 24, making extraodinary so cannot be dispelled + eLink = ExtraordinaryEffect(eLink); + + //Apply the armor bonuses and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target, 1.0); +} diff --git a/_removed/x2_s2_gwildshp.ncs b/_removed/x2_s2_gwildshp.ncs new file mode 100644 index 0000000000000000000000000000000000000000..9f806556a1e15f21b9de0dc5268b3874fd72161f GIT binary patch literal 13721 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 G)&Bqi?gAbF literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_gwildshp.nss b/_removed/x2_s2_gwildshp.nss new file mode 100644 index 0000000..e40b15f --- /dev/null +++ b/_removed/x2_s2_gwildshp.nss @@ -0,0 +1,621 @@ +//:://///////////////////////////////////////////// +//:: Greater Wild Shape, Humanoid Shape +//:: x2_s2_gwildshp +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the character to shift into one of these + forms, gaining special abilities + + Credits must be given to mr_bumpkin from the NWN + community who had the idea of merging item properties + from weapon and armor to the creatures new forms. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-07-02 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 26th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +Patch 1.71 + +- allowed to merge any custom non-weapon in left hand slot such as flags or +musical instruments +- added optional feature to stack ability bonuses from multiple items together +- added optional feature to merge bracers (when items are allowed to merge) +- added benefits of being incorporeal to the spectre shape (50% concealment and +the ability to walk through other creatures) +- a spectre polymorph now also release character from the effects of the grappling +- cured from horse include while retaining the shapeshifting horse check +- fixed dying when unpolymorphed as an result of sudden constitution bonus drop +which also could result to the server crash +*/ + +#include "70_inc_itemprop" +#include "x2_inc_itemprop" +#include "x2_inc_shifter" +#include "x3_inc_horse" + + +void main() +{ + //-------------------------------------------------------------------------- + // Declare major variables + //-------------------------------------------------------------------------- + int nSpell = GetSpellId(); + object oTarget = GetSpellTargetObject(); + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + int nShifter = GetLevelByClass(CLASS_TYPE_SHIFTER); + effect ePoly; + int nPoly; + + if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { // check to see if abort due to being mounted + switch(GetPhenoType(oTarget)) + {// shape shifting not allowed while mounted + case 3: + case 5: + case 6: + case 8: + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + // shape shifting not allowed while mounted + return; + } + } // check to see if abort due to being mounted + + // Feb 13, 2004, Jon: Added scripting to take care of case where it's an NPC + // using one of the feats. It will randomly pick one of the shapes associated + // with the feat. + switch(nSpell) + { + // Greater Wildshape I + case 646: nSpell = Random(5)+658; break; + // Greater Wildshape II + case 675: switch(Random(3)) + { + case 0: nSpell = 672; break; + case 1: nSpell = 678; break; + case 2: nSpell = 680; + } + break; + // Greater Wildshape III + case 676: switch(Random(3)) + { + case 0: nSpell = 670; break; + case 1: nSpell = 673; break; + case 2: nSpell = 674; + } + break; + // Greater Wildshape IV + case 677: switch(Random(3)) + { + case 0: nSpell = 679; break; + case 1: nSpell = 691; break; + case 2: nSpell = 694; + } + break; + // Humanoid Shape + case 681: nSpell = Random(3)+682; break; + // Undead Shape + case 685: nSpell = Random(3)+704; break; + // Dragon Shape + case 725: nSpell = Random(3)+707; break; + // Outsider Shape + case 732: nSpell = Random(3)+733; break; + // Construct Shape + case 737: nSpell = Random(3)+738; break; + } + + //-------------------------------------------------------------------------- + // Determine which form to use based on spell id, gender and level + //-------------------------------------------------------------------------- + switch (nSpell) + { + + //----------------------------------------------------------------------- + // Greater Wildshape I - Wyrmling Shape + //----------------------------------------------------------------------- + case 658: nPoly = POLYMORPH_TYPE_WYRMLING_RED; break; + case 659: nPoly = POLYMORPH_TYPE_WYRMLING_BLUE; break; + case 660: nPoly = POLYMORPH_TYPE_WYRMLING_BLACK; break; + case 661: nPoly = POLYMORPH_TYPE_WYRMLING_WHITE; break; + case 662: nPoly = POLYMORPH_TYPE_WYRMLING_GREEN; break; + + //----------------------------------------------------------------------- + // Greater Wildshape II - Minotaur, Gargoyle, Harpy + //----------------------------------------------------------------------- + case 672: if (nShifter < X2_GW2_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_HARPY; + else + nPoly = 97; + break; + + case 678: if (nShifter < X2_GW2_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_GARGOYLE; + else + nPoly = 98; + break; + + case 680: if (nShifter < X2_GW2_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_MINOTAUR; + else + nPoly = 96; + break; + + //----------------------------------------------------------------------- + // Greater Wildshape III - Drider, Basilisk, Manticore + //----------------------------------------------------------------------- + case 670: if (nShifter < X2_GW3_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_BASILISK; + else + nPoly = 99; + break; + + case 673: if (nShifter < X2_GW3_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_DRIDER; + else + nPoly = 100; + break; + + case 674: if (nShifter < X2_GW3_EPIC_THRESHOLD) + nPoly = POLYMORPH_TYPE_MANTICORE; + else + nPoly = 101; + break; + + //----------------------------------------------------------------------- + // Greater Wildshape IV - Dire Tiger, Medusa, MindFlayer + //----------------------------------------------------------------------- + case 679: nPoly = POLYMORPH_TYPE_MEDUSA; break; + case 691: nPoly = 68; break; // Mindflayer + case 694: nPoly = 69; break; // DireTiger + + + //----------------------------------------------------------------------- + // Humanoid Shape - Kobold Commando, Drow, Lizard Crossbow Specialist + //----------------------------------------------------------------------- + case 682: + if(nShifter< 17) + { + if (GetGender(OBJECT_SELF) == GENDER_MALE) //drow + nPoly = 59; + else + nPoly = 70; + } + else + { + if (GetGender(OBJECT_SELF) == GENDER_MALE) //drow + nPoly = 105; + else + nPoly = 106; + } + break; + case 683: + if(nShifter< 17) + { + nPoly = 82; break; // Lizard + } + else + { + nPoly =104; break; // Epic Lizard + } + case 684: if(nShifter< 17) + { + nPoly = 83; break; // Kobold Commando + } + else + { + nPoly = 103; break; // Kobold Commando + } + + //----------------------------------------------------------------------- + // Undead Shape - Spectre, Risen Lord, Vampire + //----------------------------------------------------------------------- + case 704: nPoly = 75; break; // Risen lord + + case 705: if (GetGender(OBJECT_SELF) == GENDER_MALE) // vampire + nPoly = 74; + else + nPoly = 77; + break; + + case 706: nPoly = 76; break; /// spectre + + //----------------------------------------------------------------------- + // Dragon Shape - Red Blue and Green Dragons + //----------------------------------------------------------------------- + case 707: nPoly = 72; break; // Ancient Red Dragon + case 708: nPoly = 71; break; // Ancient Blue Dragon + case 709: nPoly = 73; break; // Ancient Green Dragon + + + //----------------------------------------------------------------------- + // Outsider Shape - Rakshasa, Azer Chieftain, Black Slaad + //----------------------------------------------------------------------- + case 733: if (GetGender(OBJECT_SELF) == GENDER_MALE) //azer + nPoly = 85; + else // anything else is female + nPoly = 86; + break; + + case 734: if (GetGender(OBJECT_SELF) == GENDER_MALE) //rakshasa + nPoly = 88; + else // anything else is female + nPoly = 89; + break; + + case 735: nPoly =87; break; // slaad + + //----------------------------------------------------------------------- + // Construct Shape - Stone Golem, Iron Golem, Demonflesh Golem + //----------------------------------------------------------------------- + case 738: nPoly =91; break; // stone golem + case 739: nPoly =92; break; // demonflesh golem + case 740: nPoly =90; break; // iron golem + + } + + + //-------------------------------------------------------------------------- + // Determine which items get their item properties merged onto the shifters + // new form. + //-------------------------------------------------------------------------- + int bWeapon = ShifterMergeWeapon(nPoly); + int bArmor = ShifterMergeArmor(nPoly); + int bItems = ShifterMergeItems(nPoly); + int bArms = bItems && GetLocalInt(GetModule(),"71_POLYMORPH_MERGE_ARMS"); + //-------------------------------------------------------------------------- + // Store the old objects so we can access them after the character has + // changed into his new form + //-------------------------------------------------------------------------- + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF); + object oArmsOld = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF); + + if (GetIsObjectValid(oShield)) + { //1.71: this is now custom content compatible, polymorph will merge custom left-hand only items such as flags + if (GetWeaponRanged(oShield) || IPGetIsMeleeWeapon(oShield)) + { + oShield = OBJECT_INVALID; + } + } + + int nConBonus; + if (bWeapon) + { + nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld); + } + if (bArmor) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmorOld); + nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld); + nConBonus = IPGetBestConBonus(nConBonus,oShield); + } + if (bItems) + { + nConBonus = IPGetBestConBonus(nConBonus,oRing1Old); + nConBonus = IPGetBestConBonus(nConBonus,oRing2Old); + nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld); + nConBonus = IPGetBestConBonus(nConBonus,oCloakOld); + nConBonus = IPGetBestConBonus(nConBonus,oBeltOld); + nConBonus = IPGetBestConBonus(nConBonus,oBootsOld); + } + if (bArms) + { + nConBonus = IPGetBestConBonus(nConBonus,oArmsOld); + } + + //-------------------------------------------------------------------------- + // Here the actual polymorphing is done + //-------------------------------------------------------------------------- + ePoly = EffectPolymorph(nPoly); + if(nConBonus > 0) + {//1.70: this fixes dying when unpolymorphed issue as well as server crash related to this + ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus)); + } + if(nPoly == 76) + {//1.71: added benefits of being incorporeal into polymorph effect for spectre shape + ePoly = EffectLinkEffects(ePoly,EffectConcealment(50)); + ePoly = EffectLinkEffects(ePoly,EffectCutsceneGhost()); + if(GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND))//in a spectre polymorph, player releases from any kind of grapple + { + RemoveEffectsFromSpell(OBJECT_SELF, SPELL_BIGBYS_CRUSHING_HAND); + } + if(GetHasSpellEffect(SPELL_BIGBYS_GRASPING_HAND)) + { + RemoveEffectsFromSpell(OBJECT_SELF, SPELL_BIGBYS_GRASPING_HAND); + } + RemoveSpecificEffect(EFFECT_TYPE_ENTANGLE,OBJECT_SELF); + } + + + //This chunk of code makes outsider, undead and construct shapes stronger at shifter lvls 25, 27 and 30. + if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 25) + { + if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 30) + { + if (nSpell == 738) //Stone golem + { + ePoly = EffectLinkEffects(EffectACIncrease(20, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectACIncrease(3, AC_NATURAL_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly); + } + if (nSpell == 739) //Demonflesh golem + { + ePoly = EffectLinkEffects(EffectACIncrease(7, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly); + ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(58), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly); + } + if (nSpell == 740) //Iron golem + { + ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly); + } + if (nSpell == 733) //Azer + { + ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(11), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(3, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 735) //Death slaad + { + ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(17), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly); + } + if (nSpell == 704) //Risen Lord + { + ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(11), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(6, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 705) //Vampire + { + ePoly = EffectLinkEffects(EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(15), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(6, DAMAGE_TYPE_BLUDGEONING), ePoly); + ePoly = EffectLinkEffects(EffectRegenerate(6, 6.0), ePoly); + } + if (nSpell == 706) //Spectre + { + ePoly = EffectLinkEffects(EffectACIncrease(16, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly); + } + } + else if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 27) + { + if (nSpell == 738) //Stone golem + { + ePoly = EffectLinkEffects(EffectACIncrease(16, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly); + } + if (nSpell == 739) //Demonflesh golem + { + ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(7), ePoly); + ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(56), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly); + } + if (nSpell == 740) //Iron golem + { + ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(9), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + } + if (nSpell == 733) //Azer + { + ePoly = EffectLinkEffects(EffectACIncrease(8, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(8), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 735) //Death slaad + { + ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(12), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + } + if (nSpell == 704) //Risen Lord + { + ePoly = EffectLinkEffects(EffectACIncrease(7, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(7), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(4, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 705) //Vampire + { + ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(10), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(4, DAMAGE_TYPE_BLUDGEONING), ePoly); + ePoly = EffectLinkEffects(EffectRegenerate(4, 6.0), ePoly); + } + if (nSpell == 706) //Spectre + { + ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(9), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly); + } + } + else + { + if (nSpell == 738) //Stone golem + { + ePoly = EffectLinkEffects(EffectACIncrease(8, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + } + if (nSpell == 739) //Demonflesh golem + { + ePoly = EffectLinkEffects(EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly); + ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(54), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + } + if (nSpell == 740) //Iron golem + { + ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly); + } + if (nSpell == 733) //Azer + { + ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(1, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 735) //Death slaad + { + ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(6), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly); + } + if (nSpell == 704) //Risen Lord + { + ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_SLASHING), ePoly); + } + if (nSpell == 705) //Vampire + { + ePoly = EffectLinkEffects(EffectACIncrease(1, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly); + ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_BLUDGEONING), ePoly); + ePoly = EffectLinkEffects(EffectRegenerate(2, 6.0), ePoly); + } + if (nSpell == 706) //Spectre + { + ePoly = EffectLinkEffects(EffectACIncrease(6, AC_SHIELD_ENCHANTMENT_BONUS), ePoly); + ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly); + ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly); + } + if ((nSpell == 707 || nSpell == 708 || nSpell == 709) && GetLevelByClass(CLASS_TYPE_SHIFTER, OBJECT_SELF) < 10) //Dragon nerf for pure druids + { + ePoly = EffectLinkEffects(EffectAttackDecrease(5), ePoly); + } + } + } + if (nSpell == 694) ePoly = EffectLinkEffects(EffectMovementSpeedIncrease(50), ePoly); //A little extra for shifters in dire tiger form :) + //The end of the shape boosts + + + ePoly = ExtraordinaryEffect(ePoly); + ClearAllActions(); // prevents an exploit + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF); + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE)); + + //-------------------------------------------------------------------------- + // This code handles the merging of item properties + //-------------------------------------------------------------------------- + object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + + //identify weapon + SetIdentified(oWeaponNew, TRUE); + + //-------------------------------------------------------------------------- + // ...Weapons + //-------------------------------------------------------------------------- + if (bWeapon) + { + //---------------------------------------------------------------------- + // GZ: 2003-10-20 + // Sorry, but I was forced to take that out, it was confusing people + // and there were problems with updating the stats sheet. + //---------------------------------------------------------------------- + /* if (!GetIsObjectValid(oWeaponOld)) + { + //------------------------------------------------------------------ + // If we had no weapon equipped before, remove the old weapon + // to allow monks to change into unarmed forms by not equipping any + // weapon before polymorphing + //------------------------------------------------------------------ + DestroyObject(oWeaponNew); + } + else*/ + { + //------------------------------------------------------------------ + // Merge item properties... + //------------------------------------------------------------------ + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); + } + } + + //-------------------------------------------------------------------------- + // ...Armor + //-------------------------------------------------------------------------- + if (bArmor) + { + //---------------------------------------------------------------------- + // Merge item properties from armor and helmet... + //---------------------------------------------------------------------- + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oShield,oArmorNew); + } + + //-------------------------------------------------------------------------- + // ...Magic Items + //-------------------------------------------------------------------------- + if (bItems) + { + //---------------------------------------------------------------------- + // Merge item properties from from rings, amulets, cloak, boots, belt + //---------------------------------------------------------------------- + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + if (bArms) + { + IPWildShapeCopyItemProperties(oArmsOld,oArmorNew); + } + if (GetLocalInt(GetModule(),"71_POLYMORPH_STACK_ABILITY_BONUSES")) + { + IPWildShapeStackAbilityBonuses(oArmorNew); + } + + //-------------------------------------------------------------------------- + // Set artificial usage limits for special ability spells to work around + // the engine limitation of not being able to set a number of uses for + // spells in the polymorph radial + //-------------------------------------------------------------------------- + ShifterSetGWildshapeSpellLimits(nSpell); + +} diff --git a/_removed/x2_s2_hellball.ncs b/_removed/x2_s2_hellball.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3b3b8232929502b3aefc540a5ebc46c2a4aea412 GIT binary patch literal 8046 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 0) + { + if(nTotalDamage > 50) + { + DelayCommand(fDelay+0.3, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, oTarget, 3.0)); + } + + // Apply effects to the currently selected target. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam1, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam3, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam4, oTarget)); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay+0.2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + DelayCommand(fDelay+0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis3, oTarget)); + } + } + //Select the next target within the spell shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } +} diff --git a/_removed/x2_s2_mumdust.ncs b/_removed/x2_s2_mumdust.ncs new file mode 100644 index 0000000000000000000000000000000000000000..e1362d908f56d6cad0aea4beee6db3bcdcdbf6a8 GIT binary patch literal 3409 zcmcIn&1)4`6hC)nUi^4Z6KlX|nr3(s6-(6k5W5i>-y6%|%u9STiMo)%+LQ*LL|#D9 zh584$E(rby?%j6Rl?$PZc2PxnRMH+ zyEJ#=)CGV&m%jr1+3A8cLcg}9e);^xaUhMcuVE54H#c9RrY$A*a?_rcwv8!yS|r)O zj*W*2XGC7mbF&8Gibaq6_qt^8kWSz@=O3|>c;nPywCkmD8ZAcAwa#Lkv}ypcV+#zq z0eB4qA>?5l9Kx|dS9rp!`{HP(N5XgLTEY-`^?Rl*F(hhid|M#ni@3Do=Vs5Ecg3AuCCrfiaV_; zOK4SIqhmF5O`8bfG!de8IYQ9T=xD@`$hmu?MiPUc1QIEu4IGf?EYgEZvx+vToe0u? zm2>bXYvUYnB-C1G(H}X{DvSOaimbORdaXnh27^+bL><}iDxnoLsX$QQ@QxaB4V5zp zaQf_Ay5NO=gcb06sn_YmX`7!zf5{IK+*`muEo+3=$lv4_F(_B$U)0?hnY?cd>8?zw zk&*81OiEi79y30Kvez5jjAfO>yZvbOdz9?B*}t*2w!BsY>la)^@S3+ECbNVbMb?Y4 z;f^y|lpMfkvkIK}e7RXdZZYMA=>hLMF;I*VQGH>sa{I>Mp7-5KzX*_wY6L?Tr3QAK z^y-JH8ZKReIZqV-#Vq7aI{sC|r0_~0lP9K0d%kO!SS3+@Fioxmv0>trn6yljpqpeS zhlmT0j&6C9?N((`8KalSxU0mfL@2&wWi`mmII0Sydd}8)$HV;zWMpMc%hTRXE*~vZB^cSw(SU zsVm?wrAaM8 z>PE=EslQZG^F2jUIq~%EXXv7obTu5cr%H5jUz)p4k3RhqG0Iz!H&5Yvg|_lL7v2Nr C^#%g~ literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_mumdust.nss b/_removed/x2_s2_mumdust.nss new file mode 100644 index 0000000..bd8f388 --- /dev/null +++ b/_removed/x2_s2_mumdust.nss @@ -0,0 +1,77 @@ +//:://///////////////////////////////////////////// +//:: Mummy Dust +//:: X2_S2_MumDust +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Summons a strong warrior mummy for you to + command. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Feb 07, 2003 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x2_inc_spellhook" + +const float cDist = 5.0; +const int cNumbersumm = 2; + +void main() +{ + /* + 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; + } + + //Declare major variables + spellsDeclareMajorVariables(); + int nDuration = 24; + //effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); + //Summon the appropriate creature based on the summoner level + //Warrior Mummy + + //If PC is a powerful pale master, ignore the fact that he has low caster level and summon the strongest mummy + if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 19 ) + { + effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST3",496,1.0); + eSummon = ExtraordinaryEffect(eSummon); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); + + } + else if (GetCasterLevel(OBJECT_SELF) >= 40) + { + effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST3",496,1.0); + if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST3",496,1.0); + eSummon = ExtraordinaryEffect(eSummon); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); + + } + else if (GetCasterLevel(OBJECT_SELF) >= 31) + { + effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST2",496,1.0); + if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST2",496,1.0); + eSummon = ExtraordinaryEffect(eSummon); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); + + } + else + { + effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST1",496,1.0); + if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST1",496,1.0); + eSummon = ExtraordinaryEffect(eSummon); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration)); + + } + +} diff --git a/_removed/x2_s2_poisonwp.ncs b/_removed/x2_s2_poisonwp.ncs new file mode 100644 index 0000000000000000000000000000000000000000..09b5e1b68f7af2836223b487f440b9b9ed1069cd GIT binary patch literal 3439 zcmb7GO=w(I7`^wsnXye$TTBXSjJZjv8xs>Pf+(mp9W@AT$xLlFI!tC>JEL)Cn0d8y zt>CII6cKS@U5M3%D{(0Wi>rX5S%eaTpoA>C2&IcG0`c7Q-J5xnPLg&O^XA^~_nhx% z-s!2FdHdOCCSOzPQ2j}T&jF*-O8=r#8GA}AHK9ViwY7CurEs{edDu`X%60E3&zmZB z+^P>HRNvF75LZE;dB_Y~;nO^egLOCvmCk;XR>7fgP$9tj5Ogxz{*lC09fWiUZJS$q zbyUs>M~{y?`E8MBE{}#8;}fFBqdeJkZ7whMnLXvh`^aCh@_Vo#`c5pjEtd52o#|)l zd!#n8r|a+AG|_eHRuB?VKV5qKcXrL~kDU&_qPfs1rF}U-eb7`tcTBcTyO{rdsi`AMrVdkSaj+&+!m7;1Rf}kA1 zj(($Bd1T-i@|x6asWn@M@F!0@a>(S0A4aF9@au3nY86V&3vr>rY+&_!*k-`COj;c{ zb*Wj5tM%Ic1|ShiJpwI%r4j9KVuv8D`c5_)^H-)SQR)5rNo<+)tMCQ}WGL{^MnhYA zeRb>z9`-Y4p{stW8(D-yqh1atu^BlYx@#DH7ImnAlM^E2uH`t;L9lXHQ5Y4Bc-wOOsRhHe*GazjOvfVE< zp6}?x(t4lsjHUyKRq4Qmwo_G*tADIq|JshQoJyrE1GM%AaE_}yJpC-1cE3T>-X>k^ z?DaOB1q(-4$>+$pxad^=v8}w(Ma@x^{efys2+iVQF?c^jpUFfEGwz#8#OASM)OmSR zR$jPDduFA32&`i>0J$w-u*A*qQ5U4&GOM;1l?;t$BkdxF=D&jchKpWFko+fgheW|n zgJo3+?m~)`L}#xtJg0TRbtrm(%bz%Lu#Pk~kv|`|evk5mFi_pn?jOcTOl|+KFkJL1 z6*=dPq2D8m$Ia-$xne7-Vs*8UiQ53;=3&#tQ6HUd%J&`#tASp_L}d;f4E311-TvET zs6ltzN1_CU?h^bd37bF(0_2XCnSIl;JhBybr|P>0qH0^&Ry*j5F1;%{G&3{4%k0PQ zLDyNs9n_PBNyf+iKpT7-5ZT8*CDgMl-N=p#N}BR_6Y>?2BTfe`!oAN}MHmL!8d?GHN$eU02 zR<@6#U6fbdyVRny^4^dyz2IrR=ugPOBdi7AC{@!(W!7j>YD^?HS0WSYqVOQNm|{ZX zE+M?iP`I12MCA8cvc_F|@Nc@3wsci(_uv-^;YBGqGTO2K literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_poisonwp.nss b/_removed/x2_s2_poisonwp.nss new file mode 100644 index 0000000..c58f7da --- /dev/null +++ b/_removed/x2_s2_poisonwp.nss @@ -0,0 +1,145 @@ +//:://///////////////////////////////////////////// +//:: Poison Weapon spellscript +//:: x2_s2_poisonwp +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spell allows to add temporary poison properties + to a melee weapon or stack of arrows + + The exact details of the poison are loaded from + a 2da defined in x2_inc_itemprop X2_IP_POSIONWEAPON_2DA + taken from the row that matches the last three letters + of GetTag(GetSpellCastItem()) + + Example: if an item is given the poison weapon property + and its tag ending on 004, the 4th row of the + 2da will be used (1d2IntDmg DC14 18 seconds) + + Rows 0 to 99 are bioware reserved + + Non Assassins have a chance of poisoning themselves + when handling an item with this spell + + Restrictions + ... only weapons and ammo can be poisoned + ... restricted to piercing / slashing damage + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-05-11 +//:: Updated On: 2003-08-21 +//::////////////////////////////////////////////// +/* +Patch 1.70, fix by ILKAY + +- may now poison user if he fails in dexterity check +*/ + +#include "x2_inc_itemprop" +#include "x2_inc_switches" + +void main() +{ + + object oItem = GetSpellCastItem(); + object oPC = OBJECT_SELF; + object oTarget = GetSpellTargetObject(); + string sTag = GetTag(oItem); + + if (oTarget == OBJECT_INVALID || GetObjectType(oTarget) != OBJECT_TYPE_ITEM) + { + FloatingTextStrRefOnCreature(83359,oPC); //"Invalid target " + return; + } + int nType = GetBaseItemType(oTarget); + if (!IPGetIsMeleeWeapon(oTarget) && + !IPGetIsProjectile(oTarget) && + nType != BASE_ITEM_SHURIKEN && + nType != BASE_ITEM_DART && + nType != BASE_ITEM_THROWINGAXE) + { + FloatingTextStrRefOnCreature(83359,oPC); //"Invalid target " + return; + } + + if (IPGetIsBludgeoningWeapon(oTarget) && nType != BASE_ITEM_MORNINGSTAR) + { + FloatingTextStrRefOnCreature(83367,oPC); //"Weapon does not do slashing or piercing damage " + return; + } + + if (IPGetItemHasItemOnHitPropertySubType(oTarget, 19)) // 19 == itempoison + { + FloatingTextStrRefOnCreature(83407,oPC); // weapon already poisoned + return; + } + + // Get the 2da row to lookup the poison from the last three letters of the tag + int nRow = StringToInt(GetStringRight(sTag,3)); + + if (nRow ==0) + { + FloatingTextStrRefOnCreature(83360,oPC); //"Nothing happens + WriteTimestampedLogEntry ("Error: Item with tag " +GetTag(oItem) + " has the PoisonWeapon spellscript attached but tag does not contain 3 letter receipe code at the end!"); + return; + } + + int nSaveDC = StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"SaveDC",nRow)); + int nDuration = StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"Duration",nRow)); + int nPoisonType = StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"PoisonType",nRow)) ; + int nApplyDC = StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"ApplyCheckDC",nRow)) ; + + int bHasFeat = GetHasFeat(960, oPC); + if (!bHasFeat) // without handle poison feat, do ability check + { + // * Force attacks of opportunity + AssignCommand(oPC,ClearAllActions(TRUE)); + + + // Poison restricted to assassins and blackguards only? + if (GetModuleSwitchValue(MODULE_SWITCH_RESTRICT_USE_POISON_TO_FEAT) == TRUE) + { + FloatingTextStrRefOnCreature(84420,oPC); //"Failed" + return; + } + + int nDex = GetAbilityModifier(ABILITY_DEXTERITY,oPC) ; + int nCheck = d10(1)+10+nDex; + if (nCheck < nApplyDC) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(nPoisonType, d2(1)), oPC, IntToFloat(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oPC); + FloatingTextStrRefOnCreature(83368,oPC); //"Failed" + return; + } + else + { + FloatingTextStrRefOnCreature(83370,oPC); //"Success" + } + } + else + { + // some feedback to + FloatingTextStrRefOnCreature(83369,oPC); //"Auto success " + } + + itemproperty ip = ItemPropertyOnHitProps(IP_CONST_ONHIT_ITEMPOISON,nSaveDC,nPoisonType); + IPSafeAddItemProperty(oTarget, ip,IntToFloat(nDuration),X2_IP_ADDPROP_POLICY_KEEP_EXISTING,TRUE,TRUE); + + effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NATURE); + //technically this is not 100% safe but since there is no way to retrieve the sub + //properties of an item (i.e. itempoison), there is nothing we can do about it + if (IPGetItemHasItemOnHitPropertySubType(oTarget, 19)) + { + FloatingTextStrRefOnCreature(83361,oPC); //"Weapon is coated with poison" + IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_ACID),IntToFloat(nDuration),X2_IP_ADDPROP_POLICY_KEEP_EXISTING,TRUE,FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oTarget)); + } + else + { + FloatingTextStrRefOnCreature(83360,oPC); //"Nothing happens + } + +} diff --git a/_removed/x2_s2_ruin.ncs b/_removed/x2_s2_ruin.ncs new file mode 100644 index 0000000000000000000000000000000000000000..1a1589058347ac3203bedaeca5a0312d32da217f GIT binary patch literal 6686 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 literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_shiftdom.nss b/_removed/x2_s2_shiftdom.nss new file mode 100644 index 0000000..a27edc4 --- /dev/null +++ b/_removed/x2_s2_shiftdom.nss @@ -0,0 +1,93 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Dominate (Shifter) +//:: x2_s2_shiftdom +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: Oct, 2003 +//::////////////////////////////////////////////// +/* +Patch 1.70 + +- ability could been wasted on mind immune target +*/ + +#include "x0_i0_spells" +#include "x2_inc_shifter" + +void main() +{ + //------------------------------------------------------------------------- + // If blinded, I am not able to use this attack + //-------------------------------------------------------------------------- + if( GZCanNotUseGazeAttackCheck(OBJECT_SELF)) + { + return; + } + + //-------------------------------------------------------------------------- + // Enforce artifical use limit on that ability + //-------------------------------------------------------------------------- + /*if (ShifterDecrementGWildShapeSpellUsesLeft() <1 ) + { + FloatingTextStrRefOnCreature(83576, OBJECT_SELF); + return; + }*/ + + //-------------------------------------------------------------------------- + // Set up save DC and duration + //-------------------------------------------------------------------------- + int nDuration = Random(GetAbilityModifier(ABILITY_WISDOM))+d4(); + int nDC = ShifterGetSaveDC(OBJECT_SELF,SHIFTER_DC_VERY_EASY) + GetAbilityModifier(ABILITY_WISDOM); + + location lTargetLocation = GetSpellTargetLocation(); + 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); + + //Make it more useful for high-level shifters + int nBonus; + if (GetLevelByClass(CLASS_TYPE_SHIFTER) > 25) nBonus = GetLevelByClass(CLASS_TYPE_SHIFTER) - 25; + else nBonus = 0; + nDC = nDC + nBonus; + nDuration = nDuration + nBonus; + + //-------------------------------------------------------------------------- + // Loop through all targets in the cone, but only dominate one! + //-------------------------------------------------------------------------- + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget,SPELL_TARGET_SELECTIVEHOSTILE,OBJECT_SELF)) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GAZE_DOMINATE)); + float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS, OBJECT_SELF)) + { + if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, OBJECT_SELF, fDelay)) + { + //-------------------------------------------------------------------------- + // Effects do not stack + //-------------------------------------------------------------------------- + if (!GetHasSpellEffect(GetSpellId(),oTarget)) + { + eGaze = GetScaledEffect(eGaze, oTarget); + eLink = EffectLinkEffects(eLink, eGaze); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + break; + } + } + } + } + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} diff --git a/_removed/x2_s2_sumgrund.ncs b/_removed/x2_s2_sumgrund.ncs new file mode 100644 index 0000000000000000000000000000000000000000..6e704da7b93ddf078dae3030625887ba660e4309 GIT binary patch literal 1373 zcma)+&r2IY6vy9eCRH@1K|(41h-=%UKeF34s33K-2{o8)g6q$N3{k-rEQqBdo}{;4 zy!fwp=^rBGPzt^DoI@!dg!ty|F3k>^#Xao4w=?sZ@4h$t{owlMmNi!_1Elu~fY+c2 z{D};B3U4pcz_twvvnkf?cJF}aO(RF~U*I%S7%`{hiWSNj=Q5Eo>+m!T`=YY$xQ%+v zT}=b{oQ0fmK;Hc%&Q0CULX0>W5}m%p%#JO5A$j6;QHT7dASaTM=eGDFjz1lI6n066 zoL7)z$;kgI?Kc{v@l!!Qk0G(Xu~PPYxNYl@-xcJuMY}z$^#Yf|DQ^v0b&n!3%e*8nss_U|Ir#(Om6tvPg=oj+q6GpB h7=bO(y@LZ%IE$uJhP$xiRJ12OJ0Q0n>|J|j!UGWvG~56H literal 0 HcmV?d00001 diff --git a/_removed/x2_s2_sumgrund.nss b/_removed/x2_s2_sumgrund.nss new file mode 100644 index 0000000..e6e8269 --- /dev/null +++ b/_removed/x2_s2_sumgrund.nss @@ -0,0 +1,132 @@ +//:://///////////////////////////////////////////// +//:: Summon Greater Undead +//:: X2_S2_SumGrUnd +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + 2003-10-03 - GZ: Added Epic Progression + The level of the Pale Master determines the + type of undead that is summoned. + + Level 9 <= Mummy Warrior + Level 10 <= Spectre + Level 12 <= Vampire Rogue + Level 14 <= Bodak + Level 16 <= Ghoul King + Level 18 <= Vampire Mage + Level 20 <= Skeleton Blackguard + Level 22 <= Lich + Level 24 <= Lich Lord + Level 26 <= Alhoon + Level 28 <= Elder Alhoon + Level 30 <= Lesser Demi Lich + + Lasts 14 + Casterlevel rounds +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew Nobbs +//:: Created On: Feb 05, 2003 +//::////////////////////////////////////////////// + +void PMUpgradeSummon(object oSelf, string sScript) +{ + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oSelf); + ExecuteScript ( sScript, oSummon); +} + +void main() +{ + + int nCasterLevel = GetLevelByClass(CLASS_TYPE_PALEMASTER,OBJECT_SELF); + int nDuration = 14 + nCasterLevel; + + effect eSummon; + + //-------------------------------------------------------------------------- + // Summon the appropriate creature based on the summoner level + //-------------------------------------------------------------------------- + if (nCasterLevel >= 30) + { + // * Dracolich + eSummon = EffectSummonCreature("S_DRACOLICH",496,0.0f,1); + } + else if (nCasterLevel >= 29) + { + // * Demi Lich + eSummon = EffectSummonCreature("X2_S_LICH_30",496,0.0f,1); + } + else if (nCasterLevel >= 28) + { + // * Mega Alhoon + eSummon = EffectSummonCreature("x2_s_lich_26",496,0.0f,1); + } + else if (nCasterLevel >= 26) + { + // * Alhoon + eSummon = EffectSummonCreature("X2_S_LICH_24",496,0.0f,1); + } + else if (nCasterLevel >= 24) + { + // * Lich + eSummon = EffectSummonCreature("X2_S_LICH_22",496,0.0f,0); + } + else if (nCasterLevel >= 22) + { + // * Lich + eSummon = EffectSummonCreature("X2_S_LICH_20",496,0.0f,0); + } + else if (nCasterLevel >= 20) + { + // * Skeleton Blackguard + eSummon = EffectSummonCreature("x2_s_bguard_18",VFX_IMP_HARM,0.0f,0); + } + else if (nCasterLevel >= 18) + { + // * Vampire Mage + eSummon = EffectSummonCreature("x2_s_vamp_18",VFX_FNF_SUMMON_UNDEAD,0.0f,1); + } + else if (nCasterLevel >= 16) + { + // * Ghoul King + eSummon = EffectSummonCreature("X2_S_GHOUL_16",VFX_IMP_HARM,0.0f,0); + } + else if (nCasterLevel >= 14) + { + // * Greater Bodak + eSummon = EffectSummonCreature("X2_S_BODAK_14",VFX_IMP_HARM,0.0f,0); + } + else if (nCasterLevel >= 12) + { + // * Vampire Rogue + eSummon = EffectSummonCreature("X2_S_VAMP_10",VFX_FNF_SUMMON_UNDEAD,0.0f,1); + } + else if (nCasterLevel >= 10) + { + eSummon = EffectSummonCreature("X2_S_SPECTRE_10",VFX_FNF_SUMMON_UNDEAD, 0.0f,1); + } + else + { + // * Mummy + eSummon = EffectSummonCreature("X2_S_MUMMY_9",VFX_IMP_HARM, 0.0f,0); + } + + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_LOS_EVIL_10),GetSpellTargetLocation()); + //Apply the summon visual and summon the two undead. + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration)); + + // * If the character has a special pale master item equipped (variable set via OnEquip) + // * run a script on the summoned monster. + string sScript = GetLocalString(OBJECT_SELF,"X2_S_PM_SPECIAL_ITEM"); + if (sScript != "") + { + object oSelf = OBJECT_SELF; + DelayCommand(1.0,PMUpgradeSummon(oSelf,sScript)); + } +} + + + + + diff --git a/_removed/x2_s2_sumundead.ncs b/_removed/x2_s2_sumundead.ncs new file mode 100644 index 0000000000000000000000000000000000000000..fc0d929d02c100e6ff965639395880fb04742410 GIT binary patch literal 789 zcmZ{iy-ve05XaAn)20MahA<&Y_!t2J5)xu5p@b$<`k^=ww!8pOz{I=o3M{-yC!Qfg zg*sFU=W~MEDDhz5`Od#P+yBW>xGz^1mk$8?ULSCnF7S>txQ^4Y0W8(X+|^l86ieWa ztJ!2PfK$Y<-9vd|Kpt*NhwNW&z}6(qL^cYh&yfKjI4d#xfVkBGrn0AV*Z_7c1-x$r zS_Bk<_c%>kh_I*;yCqSz$XZ(TMA8QQtO3nd;OYOJ({L2D0^=I6x1;WSM|WQDPy(&j zYkb5s_QE7+XmR89oRV}~C$St!J&}pT_aZ-T;HY=Oz>oSrHGkvAml6S>Ip>uU(0ON+ zz0rW&nscn>P}j3@CT9LH^r9?G{IOCOrrc= 9) + { + //Wraith + eSummon = EffectSummonCreature("X2_S_WRAITH",VFX_FNF_SUMMON_UNDEAD,0.0f,1); + } + + if (nCasterLevel >= 20) + { + // * Soul Stealer + eSummon = EffectSummonCreature("S_STEALER",496,0.0f,1); + } + // * Apply the summon visual and summon the two undead. + // * ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_LOS_EVIL_10),GetSpellTargetLocation()); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration)); + + // * If the character has a special pale master item equipped (variable set via OnEquip) + // * run a script on the summoned monster. + string sScript = GetLocalString(OBJECT_SELF,"X2_S_PM_SPECIAL_ITEM"); + if (sScript != "") + { + object oSelf = OBJECT_SELF; + DelayCommand(1.0,PMUpgradeSummon(oSelf,sScript)); + } +} + + diff --git a/_removed/x2_s3_sequencer.ncs b/_removed/x2_s3_sequencer.ncs new file mode 100644 index 0000000000000000000000000000000000000000..3412fc24acdb474f833dbe1794a1eb77d0eede30 GIT binary patch literal 1523 zcmah}J#Q015S`t-OGr#UKq(NBVM3sc2_TUY2^3jKCW1IYAb}#sJ|~up&-iR2OMK)P zQ1BPhrJzFaHz+7TLO_us1qD)4SSVm-XZD;kG5Ctp?arIox9`o|!i_B6y_A~04&d#b z0eX%hc%a^bJ789>Bkwjn9zYAU<0$&x1=pb66t51z6<`9-8vMygFqou43^Sr72>o6V zYLf9vnOfh$W&8mnf6$p`momns+8x(}6ZbB!WLC1b=QEk5#hdB${33%Wl~_Gc6Vtrh zF-tY1qeAB$Q(lTE4W%uLk8`Poifm*_-47a=&s8v} zl$+QHeavB4s;rfLe3V-&8} z(TWcLhbKa|kJ@F*LtUd5V%?2i$krkIX-$z*8H;Pul4@|v3P0`Z4aydugR zeU`w%|HYs8iNEL*-|Q2AXW~2*59M~Y0X(?6v|b7^tor3L(nmcAuo`UmwPK@83taWd z*szWprTRKHgGNofoT8=~m8RJ-^99?stQ}Od729dE7$2;EAK8o9K?~^FYvR|Oj5(>u zGqf9ZX}kSvFH-xQ!}m&d-OB-$ejRIU=`s{fW1LFX(v-f`HXk{k`i|z4CMG(GIx(vq zJ;5ooPc;kDo87HJwo@ptB38^vdZ06Z2^32ZMZ8<_eh)Tl{RG4PK%!1X?%*P;Qyt9`LX@}$pBJ@)5tcKai2TnIDfZ9ScE^H COS)qK literal 0 HcmV?d00001 diff --git a/_removed/x2_s3_sequencer.nss b/_removed/x2_s3_sequencer.nss new file mode 100644 index 0000000..77eba8b --- /dev/null +++ b/_removed/x2_s3_sequencer.nss @@ -0,0 +1,73 @@ +//:://///////////////////////////////////////////// +//:: x2_s3_sequencer +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Fires the spells stored on this sequencer. + GZ: - Also handles clearing off spells if the + item has the clear sequencer property + - added feedback strings +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 31, 2003 +//:: Updated By: Georg +//::////////////////////////////////////////////// + +#include "x2_inc_itemprop" +void main() +{ + object oItem = GetSpellCastItem(); + object oPC = OBJECT_SELF; + + int i = 0; + int nSpellId = -1; + int nMode = GetSpellId(); + + int iMax = IPGetItemSequencerProperty(oItem); + + if (iMax ==0) // Should never happen unless you added clear sequencer to a non sequencer item + { + return; + } + if (nMode == 720 ) // clear seqencer + { + for (i = 1; i <= iMax; i++) + { + DeleteLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i)); + } + DeleteLocalInt(oItem, "X2_L_NUMTRIGGERS"); + effect eClear = EffectVisualEffect(VFX_IMP_BREACH); + ApplyEffectToObject(DURATION_TYPE_INSTANT,eClear,OBJECT_SELF); + FloatingTextStrRefOnCreature(83882,OBJECT_SELF); // sequencer cleared + } + else + { + if (GetLocalInt(oPC, "SequencerUsed") == TRUE) + { + SendMessageToPC(oPC, "You can only use a single magic staff per day!"); + return; + } + int bSuccess = FALSE; + for (i = 1; i <= iMax; i++) + { + nSpellId = GetLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i)); + if (nSpellId>0) + { + bSuccess = TRUE; + nSpellId --; // I added +1 to the spellID when the sequencer was created, so I have to remove it here + if (nSpellId == 636 || nSpellId == 637 || nSpellId == 638 || nSpellId == 639 || nSpellId == 640 || nSpellId == 695) + { + FloatingTextStringOnCreature("This spell is too powerful to be cast with your staff!",OBJECT_SELF); + return; + } + ActionCastSpellAtObject(nSpellId, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + SetLocalInt(oPC, "SequencerUsed", TRUE); + } + } + if (!bSuccess) + { + FloatingTextStrRefOnCreature(83886,OBJECT_SELF); // no spells stored + } + } +} diff --git a/_removed/x3_s2_palmount.ncs b/_removed/x3_s2_palmount.ncs new file mode 100644 index 0000000000000000000000000000000000000000..ec10f3537d6af83f2438fe5e0f04a3f58654bc61 GIT binary patch literal 21416 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 literal 0 HcmV?d00001 diff --git a/_removed/x3_s2_palmount.nss b/_removed/x3_s2_palmount.nss new file mode 100644 index 0000000..b55046d --- /dev/null +++ b/_removed/x3_s2_palmount.nss @@ -0,0 +1,39 @@ +//:://///////////////////////////////////////////// +//:: Post Mount Script for a Paladin Mount +//:: x3_s2_palmount +//:: Copyright (c) 2007 Bioware Corp. +//::////////////////////////////////////////////// +/* + This script is fired by the rider after successfully mounting + a summoned paladin mount. It's primary duty is to make sure monitoring + for paladin mount unsummoning still occurs while the mount is mounted. + + X3_EXTEND_PALMOUNT = string variable that if set on the module object + will allow a person to extend this paladin mount script to call other + scripts in a daisy chain type situation such as saddle bag handling ones. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Deva B. Winblood +//:: Created On: 2008-01-01 +//:: Last Update: March 29th, 2008 +//::////////////////////////////////////////////// + +#include "x3_inc_horse" +void main() +{ + + object oRider = OBJECT_SELF; + object oHorse = GetLocalObject(oRider, "oX3_TempHorse"); + string sScript = GetLocalString(GetModule(), "X3_EXTEND_PALMOUNT"); + SetLocalObject(oRider, "oX3_PALADIN_MOUNT", oRider); + HORSE_SupportIncreaseSpeed(oRider, OBJECT_INVALID); + HORSE_SupportAdjustMountedArcheryPenalty(oRider); + HORSE_SupportApplyACBonus(oRider, oHorse); + HORSE_SupportApplyHPBonus(oRider, oHorse); + DelayCommand(0.5, HORSE_SupportApplyMountedSkillDecreases(oRider)); + SetLocalInt(oRider, "bX3_HORSE_MODIFIERS", TRUE); + HORSE_SupportMonitorPaladinUnsummon(oRider); + if (GetStringLength(sScript) > 0) ExecuteScript(sScript, oRider); + +} diff --git a/_removed/x3_s2_pdk_fear.ncs b/_removed/x3_s2_pdk_fear.ncs new file mode 100644 index 0000000000000000000000000000000000000000..1141644de7aae4df3f853238178d1bf413ecf6fd GIT binary patch literal 12645 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 literal 0 HcmV?d00001 diff --git a/_removed/x3_s2_pdk_fear.nss b/_removed/x3_s2_pdk_fear.nss new file mode 100644 index 0000000..b054a37 --- /dev/null +++ b/_removed/x3_s2_pdk_fear.nss @@ -0,0 +1,79 @@ +//:://///////////////////////////////////////////// +//:: Purple Dragon Knight - Fear ability +//:: x3_s2_pdk_fear.nss +//::////////////////////////////////////////////// +//:: Identical to the Fear Spell, except it uses +//:: the PDK's character level +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: Sept 22, 2005 +//::////////////////////////////////////////////// + +#include "70_inc_spells" +#include "x0_i0_spells" +#include "x2_inc_spellhook" + +void main() +{ +/* ----------------------------------------------------------------- +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 - Spell Cast Hook ------------------------------------------- + + // Declare/assign major variables + spellsDeclareMajorVariables(); + int nDamage;// Will hold damage value + float fDelay;// For delay value + int nCasterLevel = GetHitDice(spell.Caster);// Character level for caster level + float fDuration = RoundsToSeconds(nCasterLevel);// Determine duration based on level +// effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); //invalid vfx + effect eFear = EffectFrightened();// Get Frightened effect + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);// Get VFX + effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);// Get VFX + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);// Get VFX + + // Link the fear and mind effects + effect eLink = EffectLinkEffects(eFear, eMind); + eLink = EffectLinkEffects(eLink, eDur); + + // Apply Impact + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc); + + // Get first target in the spell cone + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, TRUE); + + // Keep processing targets until no valid ones left + int nDC = 5 + nCasterLevel/2 + GetAbilityModifier(ABILITY_STRENGTH, spell.Caster); + while(GetIsObjectValid(oTarget)) + { + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster)) + { + fDelay = GetRandomDelay(); + + // Cause the SpellCastAt event to be triggered on oTarget + SignalEvent(oTarget, EventSpellCastAt(spell.Caster, SPELL_FEAR));//direct ID here, well ok seems like intend + + // Make SR Check + if(!MyResistSpell(spell.Caster, oTarget, fDelay)) + { + //Make a will save + if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, spell.Caster, fDelay)) + { + //Apply the linked effects and the VFX impact + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration)); + } + } + } + //Get next target in the spell cone + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, TRUE); + } +} diff --git a/_removed/x3_s2_pdk_inspir.ncs b/_removed/x3_s2_pdk_inspir.ncs new file mode 100644 index 0000000000000000000000000000000000000000..77dfdaeb92b48abf2982ce93802fe53f3bf7cead GIT binary patch literal 1209 zcmcIjJ4+l<6h8McvjG)Ef{mz`H7PVIE?C%!T39Ht5XCCXMza#|vG`i;^e0&BFR&IQ zKR~olyL4MvSSnapY$0yW{m#r}Mq(pmhrKiRobNoo@7()!V%E(U28YIp?5{53-v>uJ z#A9^)$iB@6)V@|NE|yj+rJu`d#ij4Xr61+e_R1D}+Fp5fD}_En#?~*?L5)V^k~13{ z`XbiwlJ{P7-0clLu&BhVW;ms8F`XV#P0U0=Kx#?@9T>$~>tsJV>?NxXh;{^^VD^Sx z4eT>Re9RMZcDhKT46ugH+vcBG6$OIIb6lG78!GEc^>V}R(`@O-s5D}DBkBIe=n7)2 z^{S+JgPh(Jr&o{ovu68S`D=v#&MQSjZ^W&?j&o$~==9Y!+jBY!l9ICe3L;ruH-xZ4Bnq4iMC@ZUyB?Bx ze&(L3LplUNj@7-+fdsAm$9BO{I(_f-4nmwk9+aHHPQIfr!}zW_N->@jvH0>Z{RNDf tzQHf16Y(?qCLu1@QLe>(l)er@CsR7j3m{X!aU{b-XW7tZ=@M(*(H~A^3w;0p literal 0 HcmV?d00001 diff --git a/_removed/x3_s2_pdk_inspir.nss b/_removed/x3_s2_pdk_inspir.nss new file mode 100644 index 0000000..d90c439 --- /dev/null +++ b/_removed/x3_s2_pdk_inspir.nss @@ -0,0 +1,75 @@ +//:://///////////////////////////////////////////// +//:: Purple Dragon Knight - Inspire Courage +//:: x3_s2_pdk_inspir.nss +//::////////////////////////////////////////////// +//:: Increase attack, damage, saving throws to +//:: friends in area of spell +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: Sept 22, 2005 +//::////////////////////////////////////////////// +/* + Modified By : gaoneng erick + Modified On : may 6, 2006 + added custom vfx +*/ + +#include "x0_i0_spells" + +void main() +{ + if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF)) + { + // Not useable when silenced. Floating text to user + FloatingTextStrRefOnCreature(85764,OBJECT_SELF); + return; + } + + //Declare major variables + int nChr = GetAbilityModifier(ABILITY_CHARISMA,OBJECT_SELF); + int nDuration = 5+ nChr; + effect eAttack = EffectAttackIncrease(2);// Attack effect increased + effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BLUDGEONING);// Increased damage effect + effect eLink = EffectLinkEffects(eAttack, eDamage);// link effects + + effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, 3, SAVING_THROW_TYPE_MIND_SPELLS);// Saving throw increase + eLink = EffectLinkEffects(eLink, eSave);// link in saving throw + eLink = ExtraordinaryEffect(eLink);// make effects ExtraOrdinary + + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);// Get VFX + eLink = EffectLinkEffects(eLink, eDur);// link VFXs + + effect eImpact = EffectVisualEffect(VFX_IMP_PDK_GENERIC_HEAD_HIT);// Get VFX + + // Apply effect at location + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_INSPIRE_COURAGE), OBJECT_SELF); + DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_GENERIC_PULSE), OBJECT_SELF)); + + // Get first target + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + + // Keep processing while oTarget is valid + while(GetIsObjectValid(oTarget)) + { + // * GZ Oct 2003: If we are silenced, we can not benefit from bard song + if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget)) + { + if(oTarget == OBJECT_SELF) + { + // oTarget is caster, apply effects + DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oTarget, RoundsToSeconds(nDuration)); + + } + else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget)) + { + // oTarget is a friend, apply effects + DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + } + } + + // Get next object in the sphere + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + } +} diff --git a/_removed/x3_s2_pdk_rally.ncs b/_removed/x3_s2_pdk_rally.ncs new file mode 100644 index 0000000000000000000000000000000000000000..d7546be7041617496972f443aa6c38d6e953d59f GIT binary patch literal 1083 zcmbVLJ4*vW5T4!JTm%h>h#&ATp!v#Ge{V+Q;MR@R56i ziBZ$mL1sC-na{4TZDm%LGApaO?B2#MTNsyU|A39pT9`ZI!wVlh(FTD(2QtVJ@77I$IQF`|8OXy(^*1+Nkto%aVZ zFJ0*nQ%vAV3VWRmbQ&VvKQJRn(2*^o|%^_r$LcrmvpghWXp- zI;Fus; z979q^NkLggjLQaIEC9R`Zj>sO^n45Zdq^w_)Fy$B0DZy;j$|&J2H-Qmf|RVdwg&@2 zF8Tuz!=l*q8cn2&vr>!XfP;+pMaQL#jYwV#wr)`>^6iTSdCLD3@YJP?L1#LnH|q(w+D Zg)q@6UA6fxfB6id^h;=+>^jb(rEh(E?sNbE literal 0 HcmV?d00001 diff --git a/_removed/x3_s2_pdk_rally.nss b/_removed/x3_s2_pdk_rally.nss new file mode 100644 index 0000000..0f9ec5e --- /dev/null +++ b/_removed/x3_s2_pdk_rally.nss @@ -0,0 +1,69 @@ +//:://///////////////////////////////////////////// +//:: Purple Dragon Knight - Rallying Cry +//:: x3_s2_pdk_rally.nss +//::////////////////////////////////////////////// +//:: Increase attack & movement for friends in +//:: area of spell +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: Sept 22, 2005 +//::////////////////////////////////////////////// +/* + Modified By : gaoneng erick + Modified On : may 6, 2006 + added custom vfx +*/ + +#include "x0_i0_spells" + +void main() +{ + if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF)) + { +// Not useable when silenced. Floating text to user + FloatingTextStrRefOnCreature(85764,OBJECT_SELF); + return; + } + + //Declare major variables + int nChr = GetAbilityModifier(ABILITY_CHARISMA,OBJECT_SELF); + int nDuration = 1+ nChr; + effect eAttack = EffectAttackIncrease(2);// Increase attack by 1 + effect eSpeed = EffectMovementSpeedIncrease(25);// Increase movement + effect eLink = EffectLinkEffects(eAttack, eSpeed);// Link effects + eLink = ExtraordinaryEffect(eLink);// Make effects ExtraOrdinary + + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);// Get VFX + eLink = EffectLinkEffects(eLink, eDur);// Link effects + + effect eImpact = EffectVisualEffect(VFX_IMP_PDK_GENERIC_HEAD_HIT);// Get VFX + + // Apply effect at a location + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_RALLYING_CRY), OBJECT_SELF); + DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_GENERIC_PULSE), OBJECT_SELF)); + + // Get first object in sphere + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + // Keep processing until oTarget is not valid + while(GetIsObjectValid(oTarget)) + { + // * GZ Oct 2003: If we are silenced, we can not benefit from bard song + if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget)) + { + if(oTarget == OBJECT_SELF) + { + // oTarget is caster, apply effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oTarget, RoundsToSeconds(nDuration)); + + } + else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget)) + { + // oTarget is a friend, apply effects + DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + } + } + // Get next object in the sphere + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); + } +} diff --git a/_removed/x3_s2_pdk_shield.ncs b/_removed/x3_s2_pdk_shield.ncs new file mode 100644 index 0000000000000000000000000000000000000000..18e30b0c86575001e04666d7685d1fd233745f79 GIT binary patch literal 483 zcmah`yGlec5S=`(tBtH+C+c9ihz~5ReH4PSEUXBY@ov!In!tS&_rLrcJGZd7g~j&Q znMA=A7E^>_&dfO{C&P;|-W?wtodbyX9iX#{pjWua01iPbsK`2+Dl~3_q-ec;VM%hjAo@oKW^B6O`(-_;l`6IPmIXcX zRmO&-vJuf%OYwY%5FtU(o7S4MSQsG2M3x3PQ?WeLS$yrO+V3+FolOn|2Fo`-ctfm7 Q`Z|4v@#}grX4xWq0bzW1*Z=?k literal 0 HcmV?d00001 diff --git a/_removed/x3_s2_pdk_shield.nss b/_removed/x3_s2_pdk_shield.nss new file mode 100644 index 0000000..ed4ea1f --- /dev/null +++ b/_removed/x3_s2_pdk_shield.nss @@ -0,0 +1,40 @@ +//:://///////////////////////////////////////////// +//:: Purple Dragon Knight - Heroic Shield +//:: x3_s2_pdk_shield.nss +//::////////////////////////////////////////////// +//:: Applies a temporary AC bonus to one ally +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//::////////////////////////////////////////////// +/* + Modified By : gaoneng erick + Modified On : may 6, 2006 + added custom vfx +*/ + + +void main() +{ + //Declare main variables. + object oPC = OBJECT_SELF; + object oTarget = GetSpellTargetObject(); + int nBonus = 4; + + if (GetLocalInt(oPC, "PDKHeroicTracking")) + { + FloatingTextStringOnCreature("You can only use this ability once a round", oPC, FALSE); + return; + } + if (!GetIsFriend(oTarget)) + { + FloatingTextStringOnCreature("You cannot aid an enemy using this ability", oPC, FALSE); + return; + } + + effect eAC = EffectACIncrease(nBonus); + effect eVFX = EffectVisualEffect(VFX_IMP_PDK_HEROIC_SHIELD); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAC, oTarget, RoundsToSeconds(2)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oTarget); + SetLocalInt(oPC, "PDKHeroicTracking", TRUE); + DelayCommand(10.0, DeleteLocalInt(oPC, "PDKHeroicTracking")); +} diff --git a/_removed/x3_s2_pdk_stand.ncs b/_removed/x3_s2_pdk_stand.ncs new file mode 100644 index 0000000000000000000000000000000000000000..96503286d6d8c9ece76e3b0bb239b062a79a0e0f GIT binary patch literal 805 zcmd5)u`UHs5S_U@yDKE3coNC;xFN52f}qq8N}`eQ1F|jAh>lj}6MTgD1_h-~sZczL zLZJ}r%-p@tu0*1=#oaq|=giERGdr8Res6hkX@e-~P7%H#Pm<{+;j%10NF;&LONsZL zx!x;R3fGovd3zsDi4HhI@UmJn=$KiP0of)^Y7o-X9RYal=Et-mzE(%i6%qYey637~ z2tTy&fXDSw(5gSsX328@WEc$Z5ebTu1Y9uf)!}Mb=RIVr&MFArZl3+$KPD2|J z6bHu!vOG~b9`_~)dJKYC<=ch2@`wfSB^1CKbd_4Wwi*B 0) + { + if(oTarget == OBJECT_SELF) + { + DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nCount)); + // Every time you apply effects, count down remaining targets + nTargetsLeft -= 1; + + } + else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget)) + { + DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nCount)); + // Every time you apply effects, count down + nTargetsLeft -= 1; + } + + // Select the next target within the spell shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE); + } +} diff --git a/_removed/x3_s2_pdk_wrath.ncs b/_removed/x3_s2_pdk_wrath.ncs new file mode 100644 index 0000000000000000000000000000000000000000..8368628cd834b12f9180584677cba831893b6b04 GIT binary patch literal 766 zcma)4Jx{|h5Is8%LPBC-U_pSzhQ#MzfSm$QQQJQ9jEuwy}Ti7Zq`*}CHwPhZsJzLzxxs9&kBrd9u^m4F9j(Z(E z`cWjk3ZzGxh0bP#c4md5)J92C&7rfx3S&aUbgzEecf)Llq|UXkv#egVvNxK57q~mn zoKjLo;z1JP$U7Wie^4j`ru3;ADwm@2I&pR67}bqd&T0f~%b0I@2yRay2wEWc3sVS! z76`ZQg%C6#Z#-2cjyz8qLsF*17%%byT5;%kE}Zv3{ln)Tl(SE8#^5NvqA~H+t$F~O Ur-|*%*gy_{A