diff --git a/scripts/defaulforcetowardlinkrefonenable.pex b/scripts/defaulforcetowardlinkrefonenable.pex new file mode 100644 index 00000000..139fe09a Binary files /dev/null and b/scripts/defaulforcetowardlinkrefonenable.pex differ diff --git a/scripts/defaultactivateactivatelinkedrefonce.pex b/scripts/defaultactivateactivatelinkedrefonce.pex new file mode 100644 index 00000000..e832bef4 Binary files /dev/null and b/scripts/defaultactivateactivatelinkedrefonce.pex differ diff --git a/scripts/defaultactivatedelayedtogglelinkedref.pex b/scripts/defaultactivatedelayedtogglelinkedref.pex new file mode 100644 index 00000000..ff9b1305 Binary files /dev/null and b/scripts/defaultactivatedelayedtogglelinkedref.pex differ diff --git a/scripts/defaultactivatedeletelinkedref.pex b/scripts/defaultactivatedeletelinkedref.pex new file mode 100644 index 00000000..3c5c7334 Binary files /dev/null and b/scripts/defaultactivatedeletelinkedref.pex differ diff --git a/scripts/defaultactivatelinkdooncescript.pex b/scripts/defaultactivatelinkdooncescript.pex index 5e15020d..06ec6f93 100644 Binary files a/scripts/defaultactivatelinkdooncescript.pex and b/scripts/defaultactivatelinkdooncescript.pex differ diff --git a/scripts/defaultactivatelinkedrefonattacked.pex b/scripts/defaultactivatelinkedrefonattacked.pex new file mode 100644 index 00000000..8e65ccd2 Binary files /dev/null and b/scripts/defaultactivatelinkedrefonattacked.pex differ diff --git a/scripts/defaultactivatelinkedrefonceondeath.pex b/scripts/defaultactivatelinkedrefonceondeath.pex new file mode 100644 index 00000000..eebf1c31 Binary files /dev/null and b/scripts/defaultactivatelinkedrefonceondeath.pex differ diff --git a/scripts/defaultactivateonload.pex b/scripts/defaultactivateonload.pex new file mode 100644 index 00000000..ebffa961 Binary files /dev/null and b/scripts/defaultactivateonload.pex differ diff --git a/scripts/defaultactivateopenlinkedref.pex b/scripts/defaultactivateopenlinkedref.pex new file mode 100644 index 00000000..e3a1693f Binary files /dev/null and b/scripts/defaultactivateopenlinkedref.pex differ diff --git a/scripts/defaultactivateself.pex b/scripts/defaultactivateself.pex index 9a2a7a1e..12db90fb 100644 Binary files a/scripts/defaultactivateself.pex and b/scripts/defaultactivateself.pex differ diff --git a/scripts/defaultactivatetogglelinkedref.pex b/scripts/defaultactivatetogglelinkedref.pex new file mode 100644 index 00000000..da92e3be Binary files /dev/null and b/scripts/defaultactivatetogglelinkedref.pex differ diff --git a/scripts/defaultactivatetogglelinkedrefonce.pex b/scripts/defaultactivatetogglelinkedrefonce.pex new file mode 100644 index 00000000..b2e7fee1 Binary files /dev/null and b/scripts/defaultactivatetogglelinkedrefonce.pex differ diff --git a/scripts/defaultactorenabledisablelinkedref.pex b/scripts/defaultactorenabledisablelinkedref.pex new file mode 100644 index 00000000..959411ca Binary files /dev/null and b/scripts/defaultactorenabledisablelinkedref.pex differ diff --git a/scripts/defaultactselfonenteronleave.pex b/scripts/defaultactselfonenteronleave.pex index b6d0b016..5981295d 100644 Binary files a/scripts/defaultactselfonenteronleave.pex and b/scripts/defaultactselfonenteronleave.pex differ diff --git a/scripts/defaultaddbookscript.pex b/scripts/defaultaddbookscript.pex new file mode 100644 index 00000000..874c3c20 Binary files /dev/null and b/scripts/defaultaddbookscript.pex differ diff --git a/scripts/defaultaddeffectshaderscript.pex b/scripts/defaultaddeffectshaderscript.pex index c358b534..8cea3cbc 100644 Binary files a/scripts/defaultaddeffectshaderscript.pex and b/scripts/defaultaddeffectshaderscript.pex differ diff --git a/scripts/defaultadditemaliasscript.pex b/scripts/defaultadditemaliasscript.pex new file mode 100644 index 00000000..d009a547 Binary files /dev/null and b/scripts/defaultadditemaliasscript.pex differ diff --git a/scripts/defaultadditemarmorscript.pex b/scripts/defaultadditemarmorscript.pex new file mode 100644 index 00000000..9550a4a7 Binary files /dev/null and b/scripts/defaultadditemarmorscript.pex differ diff --git a/scripts/defaultadditemkeyscript.pex b/scripts/defaultadditemkeyscript.pex new file mode 100644 index 00000000..1d012b8a Binary files /dev/null and b/scripts/defaultadditemkeyscript.pex differ diff --git a/scripts/defaultadditemnotetolinkonload.pex b/scripts/defaultadditemnotetolinkonload.pex new file mode 100644 index 00000000..d2592eca Binary files /dev/null and b/scripts/defaultadditemnotetolinkonload.pex differ diff --git a/scripts/defaultadditempotionscript.pex b/scripts/defaultadditempotionscript.pex new file mode 100644 index 00000000..bb288c91 Binary files /dev/null and b/scripts/defaultadditempotionscript.pex differ diff --git a/scripts/defaultadditemscript.pex b/scripts/defaultadditemscript.pex new file mode 100644 index 00000000..f2547ff2 Binary files /dev/null and b/scripts/defaultadditemscript.pex differ diff --git a/scripts/defaultadditemweaponscript.pex b/scripts/defaultadditemweaponscript.pex new file mode 100644 index 00000000..7528f487 Binary files /dev/null and b/scripts/defaultadditemweaponscript.pex differ diff --git a/scripts/defaultaddmapmarkeronclosebooknotalias.pex b/scripts/defaultaddmapmarkeronclosebooknotalias.pex new file mode 100644 index 00000000..5aeefc51 Binary files /dev/null and b/scripts/defaultaddmapmarkeronclosebooknotalias.pex differ diff --git a/scripts/defaultaddmiscitemscript.pex b/scripts/defaultaddmiscitemscript.pex new file mode 100644 index 00000000..5f4e3a8f Binary files /dev/null and b/scripts/defaultaddmiscitemscript.pex differ diff --git a/scripts/defaultaddmusiconactivate.pex b/scripts/defaultaddmusiconactivate.pex new file mode 100644 index 00000000..82461214 Binary files /dev/null and b/scripts/defaultaddmusiconactivate.pex differ diff --git a/scripts/defaultaddmusicscript.pex b/scripts/defaultaddmusicscript.pex new file mode 100644 index 00000000..a34d3916 Binary files /dev/null and b/scripts/defaultaddmusicscript.pex differ diff --git a/scripts/defaultaddspell.pex b/scripts/defaultaddspell.pex new file mode 100644 index 00000000..d68e207a Binary files /dev/null and b/scripts/defaultaddspell.pex differ diff --git a/scripts/defaultaddtofactiononload.pex b/scripts/defaultaddtofactiononload.pex new file mode 100644 index 00000000..3b1e564e Binary files /dev/null and b/scripts/defaultaddtofactiononload.pex differ diff --git a/scripts/defaultaddtolinkonloadscript.pex b/scripts/defaultaddtolinkonloadscript.pex new file mode 100644 index 00000000..3fbadc1b Binary files /dev/null and b/scripts/defaultaddtolinkonloadscript.pex differ diff --git a/scripts/defaultaliaschangeoutfit.pex b/scripts/defaultaliaschangeoutfit.pex new file mode 100644 index 00000000..b960c2d5 Binary files /dev/null and b/scripts/defaultaliaschangeoutfit.pex differ diff --git a/scripts/defaultaliasmodaggression.pex b/scripts/defaultaliasmodaggression.pex new file mode 100644 index 00000000..db1daa27 Binary files /dev/null and b/scripts/defaultaliasmodaggression.pex differ diff --git a/scripts/defaultaliasondeathscript.pex b/scripts/defaultaliasondeathscript.pex new file mode 100644 index 00000000..f9cbc0ae Binary files /dev/null and b/scripts/defaultaliasondeathscript.pex differ diff --git a/scripts/defaultaliasonunload.pex b/scripts/defaultaliasonunload.pex new file mode 100644 index 00000000..17840f6e Binary files /dev/null and b/scripts/defaultaliasonunload.pex differ diff --git a/scripts/defaultaliasrespawnscript.pex b/scripts/defaultaliasrespawnscript.pex new file mode 100644 index 00000000..9d9229bb Binary files /dev/null and b/scripts/defaultaliasrespawnscript.pex differ diff --git a/scripts/defaultallowpcdialoguescript.pex b/scripts/defaultallowpcdialoguescript.pex new file mode 100644 index 00000000..8d1624c7 Binary files /dev/null and b/scripts/defaultallowpcdialoguescript.pex differ diff --git a/scripts/defaultaoepushonactivatedoonce.pex b/scripts/defaultaoepushonactivatedoonce.pex new file mode 100644 index 00000000..31122497 Binary files /dev/null and b/scripts/defaultaoepushonactivatedoonce.pex differ diff --git a/scripts/defaultautosavescript.pex b/scripts/defaultautosavescript.pex new file mode 100644 index 00000000..a97c90fb Binary files /dev/null and b/scripts/defaultautosavescript.pex differ diff --git a/scripts/defaultbipressureplate.pex b/scripts/defaultbipressureplate.pex new file mode 100644 index 00000000..3a63e40f Binary files /dev/null and b/scripts/defaultbipressureplate.pex differ diff --git a/scripts/defaultblockactivation.pex b/scripts/defaultblockactivation.pex index db162dbe..8c2a1d4d 100644 Binary files a/scripts/defaultblockactivation.pex and b/scripts/defaultblockactivation.pex differ diff --git a/scripts/defaultblockfolloweractivation.pex b/scripts/defaultblockfolloweractivation.pex index 9ca0501c..fba78618 100644 Binary files a/scripts/defaultblockfolloweractivation.pex and b/scripts/defaultblockfolloweractivation.pex differ diff --git a/scripts/defaultbloodpoolscript.pex b/scripts/defaultbloodpoolscript.pex new file mode 100644 index 00000000..16770103 Binary files /dev/null and b/scripts/defaultbloodpoolscript.pex differ diff --git a/scripts/defaultbuttonscript.pex b/scripts/defaultbuttonscript.pex index 4604214c..80e14e5b 100644 Binary files a/scripts/defaultbuttonscript.pex and b/scripts/defaultbuttonscript.pex differ diff --git a/scripts/defaultcastatlinkontriggerscript.pex b/scripts/defaultcastatlinkontriggerscript.pex new file mode 100644 index 00000000..d30b23a1 Binary files /dev/null and b/scripts/defaultcastatlinkontriggerscript.pex differ diff --git a/scripts/defaultcastfromlinkonactivatescript.pex b/scripts/defaultcastfromlinkonactivatescript.pex new file mode 100644 index 00000000..1c85afed Binary files /dev/null and b/scripts/defaultcastfromlinkonactivatescript.pex differ diff --git a/scripts/defaultcastfromlinkontriggerscript.pex b/scripts/defaultcastfromlinkontriggerscript.pex index 527ff013..08c1bd62 100644 Binary files a/scripts/defaultcastfromlinkontriggerscript.pex and b/scripts/defaultcastfromlinkontriggerscript.pex differ diff --git a/scripts/defaultcastontriggerscript.pex b/scripts/defaultcastontriggerscript.pex new file mode 100644 index 00000000..c2967b2b Binary files /dev/null and b/scripts/defaultcastontriggerscript.pex differ diff --git a/scripts/defaultcityendgatescenescript.pex b/scripts/defaultcityendgatescenescript.pex new file mode 100644 index 00000000..eac450ac Binary files /dev/null and b/scripts/defaultcityendgatescenescript.pex differ diff --git a/scripts/defaultclearlocationonactivate.pex b/scripts/defaultclearlocationonactivate.pex new file mode 100644 index 00000000..e0263f27 Binary files /dev/null and b/scripts/defaultclearlocationonactivate.pex differ diff --git a/scripts/defaultclearlocationondeath.pex b/scripts/defaultclearlocationondeath.pex new file mode 100644 index 00000000..6da6210c Binary files /dev/null and b/scripts/defaultclearlocationondeath.pex differ diff --git a/scripts/defaultclearlocationondeathrefalias.pex b/scripts/defaultclearlocationondeathrefalias.pex new file mode 100644 index 00000000..99dc9da5 Binary files /dev/null and b/scripts/defaultclearlocationondeathrefalias.pex differ diff --git a/scripts/defaultcounter.pex b/scripts/defaultcounter.pex new file mode 100644 index 00000000..e1bb5c98 Binary files /dev/null and b/scripts/defaultcounter.pex differ diff --git a/scripts/defaultcounterincrementonactivate.pex b/scripts/defaultcounterincrementonactivate.pex new file mode 100644 index 00000000..1f763a73 Binary files /dev/null and b/scripts/defaultcounterincrementonactivate.pex differ diff --git a/scripts/defaultcounterincrementondeath.pex b/scripts/defaultcounterincrementondeath.pex new file mode 100644 index 00000000..b054a391 Binary files /dev/null and b/scripts/defaultcounterincrementondeath.pex differ diff --git a/scripts/defaultdeleteselfonreset.pex b/scripts/defaultdeleteselfonreset.pex index 3414f590..550ebf88 100644 Binary files a/scripts/defaultdeleteselfonreset.pex and b/scripts/defaultdeleteselfonreset.pex differ diff --git a/scripts/defaultdisableexitenableenter.pex b/scripts/defaultdisableexitenableenter.pex index 3569cc75..8063c797 100644 Binary files a/scripts/defaultdisableexitenableenter.pex and b/scripts/defaultdisableexitenableenter.pex differ diff --git a/scripts/defaultdisablehavokonload.pex b/scripts/defaultdisablehavokonload.pex index f07fba6e..f3700908 100644 Binary files a/scripts/defaultdisablehavokonload.pex and b/scripts/defaultdisablehavokonload.pex differ diff --git a/scripts/defaultdisablelinkedrefonload.pex b/scripts/defaultdisablelinkedrefonload.pex new file mode 100644 index 00000000..0b3dce19 Binary files /dev/null and b/scripts/defaultdisablelinkedrefonload.pex differ diff --git a/scripts/defaultdisablelinkrefondestruction.pex b/scripts/defaultdisablelinkrefondestruction.pex new file mode 100644 index 00000000..2ca4cd58 Binary files /dev/null and b/scripts/defaultdisablelinkrefondestruction.pex differ diff --git a/scripts/defaultdisableoncellattachothercond.pex b/scripts/defaultdisableoncellattachothercond.pex new file mode 100644 index 00000000..ab86a16e Binary files /dev/null and b/scripts/defaultdisableoncellattachothercond.pex differ diff --git a/scripts/defaultdisableonloadaftertrig.pex b/scripts/defaultdisableonloadaftertrig.pex index a3b66f77..cbc507f3 100644 Binary files a/scripts/defaultdisableonloadaftertrig.pex and b/scripts/defaultdisableonloadaftertrig.pex differ diff --git a/scripts/defaultdisableonloadafterwait.pex b/scripts/defaultdisableonloadafterwait.pex new file mode 100644 index 00000000..baabc990 Binary files /dev/null and b/scripts/defaultdisableonloadafterwait.pex differ diff --git a/scripts/defaultdisableonreset.pex b/scripts/defaultdisableonreset.pex new file mode 100644 index 00000000..8353ea51 Binary files /dev/null and b/scripts/defaultdisableonreset.pex differ diff --git a/scripts/defaultdisableonresetiflocwascleared.pex b/scripts/defaultdisableonresetiflocwascleared.pex new file mode 100644 index 00000000..a3349e74 Binary files /dev/null and b/scripts/defaultdisableonresetiflocwascleared.pex differ diff --git a/scripts/defaultdisableonresetothercondition.pex b/scripts/defaultdisableonresetothercondition.pex new file mode 100644 index 00000000..55fe7d1a Binary files /dev/null and b/scripts/defaultdisableonresetothercondition.pex differ diff --git a/scripts/defaultdisableotherobjectonactivate.pex b/scripts/defaultdisableotherobjectonactivate.pex index cfca6c18..50ef555a 100644 Binary files a/scripts/defaultdisableotherobjectonactivate.pex and b/scripts/defaultdisableotherobjectonactivate.pex differ diff --git a/scripts/defaultdisableotherobjectwhentaken.pex b/scripts/defaultdisableotherobjectwhentaken.pex new file mode 100644 index 00000000..091f0abb Binary files /dev/null and b/scripts/defaultdisableotherobjectwhentaken.pex differ diff --git a/scripts/defaultdisableselfonactivate.pex b/scripts/defaultdisableselfonactivate.pex index 866c9fbf..b728aa43 100644 Binary files a/scripts/defaultdisableselfonactivate.pex and b/scripts/defaultdisableselfonactivate.pex differ diff --git a/scripts/defaultdisableselfonload.pex b/scripts/defaultdisableselfonload.pex new file mode 100644 index 00000000..6e7e50f4 Binary files /dev/null and b/scripts/defaultdisableselfonload.pex differ diff --git a/scripts/defaultdisplayiteminlistscript.pex b/scripts/defaultdisplayiteminlistscript.pex new file mode 100644 index 00000000..aa7006d7 Binary files /dev/null and b/scripts/defaultdisplayiteminlistscript.pex differ diff --git a/scripts/defaultdisplayuniqueitemscript.pex b/scripts/defaultdisplayuniqueitemscript.pex new file mode 100644 index 00000000..df2d9a9d Binary files /dev/null and b/scripts/defaultdisplayuniqueitemscript.pex differ diff --git a/scripts/defaultdragonsetlandingmarker.pex b/scripts/defaultdragonsetlandingmarker.pex new file mode 100644 index 00000000..dc713998 Binary files /dev/null and b/scripts/defaultdragonsetlandingmarker.pex differ diff --git a/scripts/defaultdwebuttonscript.pex b/scripts/defaultdwebuttonscript.pex index 4eac6d96..8eaf9035 100644 Binary files a/scripts/defaultdwebuttonscript.pex and b/scripts/defaultdwebuttonscript.pex differ diff --git a/scripts/defaultdwegearscript.pex b/scripts/defaultdwegearscript.pex index 1e176715..5c793795 100644 Binary files a/scripts/defaultdwegearscript.pex and b/scripts/defaultdwegearscript.pex differ diff --git a/scripts/defaultenabledisablelinkedref.pex b/scripts/defaultenabledisablelinkedref.pex index ac53ca70..0aff547e 100644 Binary files a/scripts/defaultenabledisablelinkedref.pex and b/scripts/defaultenabledisablelinkedref.pex differ diff --git a/scripts/defaultenabledisablelinkonopenclose.pex b/scripts/defaultenabledisablelinkonopenclose.pex new file mode 100644 index 00000000..6be4b07b Binary files /dev/null and b/scripts/defaultenabledisablelinkonopenclose.pex differ diff --git a/scripts/defaultenableenclinkedref.pex b/scripts/defaultenableenclinkedref.pex index 1defec6e..f17ec378 100644 Binary files a/scripts/defaultenableenclinkedref.pex and b/scripts/defaultenableenclinkedref.pex differ diff --git a/scripts/defaultenablelinkedrefonactivate.pex b/scripts/defaultenablelinkedrefonactivate.pex new file mode 100644 index 00000000..643e1019 Binary files /dev/null and b/scripts/defaultenablelinkedrefonactivate.pex differ diff --git a/scripts/defaultenablelinkedrefondeath.pex b/scripts/defaultenablelinkedrefondeath.pex index 32d2a8ae..e4a7f4c6 100644 Binary files a/scripts/defaultenablelinkedrefondeath.pex and b/scripts/defaultenablelinkedrefondeath.pex differ diff --git a/scripts/defaultenablelinkedrefonlostlos.pex b/scripts/defaultenablelinkedrefonlostlos.pex new file mode 100644 index 00000000..ece89b19 Binary files /dev/null and b/scripts/defaultenablelinkedrefonlostlos.pex differ diff --git a/scripts/defaultenableonreset.pex b/scripts/defaultenableonreset.pex new file mode 100644 index 00000000..7908bfad Binary files /dev/null and b/scripts/defaultenableonreset.pex differ diff --git a/scripts/defaultenabletrigscript.pex b/scripts/defaultenabletrigscript.pex new file mode 100644 index 00000000..d020e132 Binary files /dev/null and b/scripts/defaultenabletrigscript.pex differ diff --git a/scripts/defaultequipitemonload.pex b/scripts/defaultequipitemonload.pex new file mode 100644 index 00000000..685dd8ff Binary files /dev/null and b/scripts/defaultequipitemonload.pex differ diff --git a/scripts/defaultfakeharvestablescript.pex b/scripts/defaultfakeharvestablescript.pex new file mode 100644 index 00000000..2d42697f Binary files /dev/null and b/scripts/defaultfakeharvestablescript.pex differ diff --git a/scripts/defaultfakenpcloadtrig.pex b/scripts/defaultfakenpcloadtrig.pex index 16128fbf..c6248eb9 100644 Binary files a/scripts/defaultfakenpcloadtrig.pex and b/scripts/defaultfakenpcloadtrig.pex differ diff --git a/scripts/defaultfakerezspell.pex b/scripts/defaultfakerezspell.pex new file mode 100644 index 00000000..22598412 Binary files /dev/null and b/scripts/defaultfakerezspell.pex differ diff --git a/scripts/defaultfakesummonspell.pex b/scripts/defaultfakesummonspell.pex new file mode 100644 index 00000000..4fb33dee Binary files /dev/null and b/scripts/defaultfakesummonspell.pex differ diff --git a/scripts/defaultfireweaponscript.pex b/scripts/defaultfireweaponscript.pex index c0beac19..c46a227d 100644 Binary files a/scripts/defaultfireweaponscript.pex and b/scripts/defaultfireweaponscript.pex differ diff --git a/scripts/defaultforceevaluatepackagetrigger.pex b/scripts/defaultforceevaluatepackagetrigger.pex index d6a76709..a41ccc9a 100644 Binary files a/scripts/defaultforceevaluatepackagetrigger.pex and b/scripts/defaultforceevaluatepackagetrigger.pex differ diff --git a/scripts/defaultghostscript.pex b/scripts/defaultghostscript.pex index 1879b95e..163125af 100644 Binary files a/scripts/defaultghostscript.pex and b/scripts/defaultghostscript.pex differ diff --git a/scripts/defaultghostscriptrefalias.pex b/scripts/defaultghostscriptrefalias.pex new file mode 100644 index 00000000..be23abb6 Binary files /dev/null and b/scripts/defaultghostscriptrefalias.pex differ diff --git a/scripts/defaultifaliveplaysoundscript.pex b/scripts/defaultifaliveplaysoundscript.pex index 8fdc9363..7b16a1d8 100644 Binary files a/scripts/defaultifaliveplaysoundscript.pex and b/scripts/defaultifaliveplaysoundscript.pex differ diff --git a/scripts/defaultignorefriendlyhits.pex b/scripts/defaultignorefriendlyhits.pex new file mode 100644 index 00000000..fa8c33e2 Binary files /dev/null and b/scripts/defaultignorefriendlyhits.pex differ diff --git a/scripts/defaultimodareatrig.pex b/scripts/defaultimodareatrig.pex index 054186d7..c2eed0ba 100644 Binary files a/scripts/defaultimodareatrig.pex and b/scripts/defaultimodareatrig.pex differ diff --git a/scripts/defaultinteriordoorshutscript.pex b/scripts/defaultinteriordoorshutscript.pex new file mode 100644 index 00000000..11717381 Binary files /dev/null and b/scripts/defaultinteriordoorshutscript.pex differ diff --git a/scripts/defaultlearnwordonact.pex b/scripts/defaultlearnwordonact.pex new file mode 100644 index 00000000..d2b939a4 Binary files /dev/null and b/scripts/defaultlearnwordonact.pex differ diff --git a/scripts/defaultlinkrefstartcombatplayer.pex b/scripts/defaultlinkrefstartcombatplayer.pex index 6c96b0b9..5b49aa05 100644 Binary files a/scripts/defaultlinkrefstartcombatplayer.pex and b/scripts/defaultlinkrefstartcombatplayer.pex differ diff --git a/scripts/defaultmasterpackageweapondrawnscript.pex b/scripts/defaultmasterpackageweapondrawnscript.pex new file mode 100644 index 00000000..febaa76d Binary files /dev/null and b/scripts/defaultmasterpackageweapondrawnscript.pex differ diff --git a/scripts/defaultmoveactortriggerscript.pex b/scripts/defaultmoveactortriggerscript.pex new file mode 100644 index 00000000..e6b32b51 Binary files /dev/null and b/scripts/defaultmoveactortriggerscript.pex differ diff --git a/scripts/defaultnoenemiesfollowdoorscript.pex b/scripts/defaultnoenemiesfollowdoorscript.pex new file mode 100644 index 00000000..0a140419 Binary files /dev/null and b/scripts/defaultnoenemiesfollowdoorscript.pex differ diff --git a/scripts/defaultnofasttraveltriggerscript.pex b/scripts/defaultnofasttraveltriggerscript.pex new file mode 100644 index 00000000..a1e6a523 Binary files /dev/null and b/scripts/defaultnofasttraveltriggerscript.pex differ diff --git a/scripts/defaultnofavoronload.pex b/scripts/defaultnofavoronload.pex new file mode 100644 index 00000000..088d257c Binary files /dev/null and b/scripts/defaultnofavoronload.pex differ diff --git a/scripts/defaultnofollowdoorscript.pex b/scripts/defaultnofollowdoorscript.pex new file mode 100644 index 00000000..4240105a Binary files /dev/null and b/scripts/defaultnofollowdoorscript.pex differ diff --git a/scripts/defaultnpcruntotrig.pex b/scripts/defaultnpcruntotrig.pex new file mode 100644 index 00000000..5c475d0b Binary files /dev/null and b/scripts/defaultnpcruntotrig.pex differ diff --git a/scripts/defaultobjectmanager.pex b/scripts/defaultobjectmanager.pex index 5196dd28..de6162ba 100644 Binary files a/scripts/defaultobjectmanager.pex and b/scripts/defaultobjectmanager.pex differ diff --git a/scripts/defaultonactivateblockactivation.pex b/scripts/defaultonactivateblockactivation.pex new file mode 100644 index 00000000..312cc3f1 Binary files /dev/null and b/scripts/defaultonactivateblockactivation.pex differ diff --git a/scripts/defaultonactivateblockplayeractivate.pex b/scripts/defaultonactivateblockplayeractivate.pex new file mode 100644 index 00000000..b0457f14 Binary files /dev/null and b/scripts/defaultonactivateblockplayeractivate.pex differ diff --git a/scripts/defaultonactivatedisablelinkedref.pex b/scripts/defaultonactivatedisablelinkedref.pex new file mode 100644 index 00000000..9b27ce74 Binary files /dev/null and b/scripts/defaultonactivatedisablelinkedref.pex differ diff --git a/scripts/defaultonactivateenablescript.pex b/scripts/defaultonactivateenablescript.pex new file mode 100644 index 00000000..b679b8fa Binary files /dev/null and b/scripts/defaultonactivateenablescript.pex differ diff --git a/scripts/defaultonactivateevaluatepackage.pex b/scripts/defaultonactivateevaluatepackage.pex new file mode 100644 index 00000000..1a35c8b7 Binary files /dev/null and b/scripts/defaultonactivateevaluatepackage.pex differ diff --git a/scripts/defaultonactivatenonplayerenablescript.pex b/scripts/defaultonactivatenonplayerenablescript.pex new file mode 100644 index 00000000..cf7eb7be Binary files /dev/null and b/scripts/defaultonactivatenonplayerenablescript.pex differ diff --git a/scripts/defaultoncellattachenable.pex b/scripts/defaultoncellattachenable.pex new file mode 100644 index 00000000..b9dbfb1a Binary files /dev/null and b/scripts/defaultoncellattachenable.pex differ diff --git a/scripts/defaultondeathunequipall.pex b/scripts/defaultondeathunequipall.pex new file mode 100644 index 00000000..41a51eb3 Binary files /dev/null and b/scripts/defaultondeathunequipall.pex differ diff --git a/scripts/defaultonenter.pex b/scripts/defaultonenter.pex index ccd45146..042deb61 100644 Binary files a/scripts/defaultonenter.pex and b/scripts/defaultonenter.pex differ diff --git a/scripts/defaultonhitactivatelinkedref.pex b/scripts/defaultonhitactivatelinkedref.pex new file mode 100644 index 00000000..29731ce8 Binary files /dev/null and b/scripts/defaultonhitactivatelinkedref.pex differ diff --git a/scripts/defaultonhitchangeaggression.pex b/scripts/defaultonhitchangeaggression.pex new file mode 100644 index 00000000..fce59e23 Binary files /dev/null and b/scripts/defaultonhitchangeaggression.pex differ diff --git a/scripts/defaultonhitsetav.pex b/scripts/defaultonhitsetav.pex new file mode 100644 index 00000000..f978d21f Binary files /dev/null and b/scripts/defaultonhitsetav.pex differ diff --git a/scripts/defaultonhitsetavrefalias.pex b/scripts/defaultonhitsetavrefalias.pex new file mode 100644 index 00000000..fafc7942 Binary files /dev/null and b/scripts/defaultonhitsetavrefalias.pex differ diff --git a/scripts/defaultonloadremoveweapons.pex b/scripts/defaultonloadremoveweapons.pex new file mode 100644 index 00000000..81b7eb20 Binary files /dev/null and b/scripts/defaultonloadremoveweapons.pex differ diff --git a/scripts/defaultonreadsetqueststage.pex b/scripts/defaultonreadsetqueststage.pex new file mode 100644 index 00000000..fba60fb0 Binary files /dev/null and b/scripts/defaultonreadsetqueststage.pex differ diff --git a/scripts/defaultonreadsetqueststagenotalias.pex b/scripts/defaultonreadsetqueststagenotalias.pex new file mode 100644 index 00000000..ff7ae67a Binary files /dev/null and b/scripts/defaultonreadsetqueststagenotalias.pex differ diff --git a/scripts/defaultonresettestanddisable.pex b/scripts/defaultonresettestanddisable.pex new file mode 100644 index 00000000..5eff677e Binary files /dev/null and b/scripts/defaultonresettestanddisable.pex differ diff --git a/scripts/defaultopenlinkedreftrigger.pex b/scripts/defaultopenlinkedreftrigger.pex new file mode 100644 index 00000000..de780d99 Binary files /dev/null and b/scripts/defaultopenlinkedreftrigger.pex differ diff --git a/scripts/defaultownzombie.pex b/scripts/defaultownzombie.pex new file mode 100644 index 00000000..db208f8f Binary files /dev/null and b/scripts/defaultownzombie.pex differ diff --git a/scripts/defaultpillarpuzzlelever.pex b/scripts/defaultpillarpuzzlelever.pex index a57bc0e4..be126c52 100644 Binary files a/scripts/defaultpillarpuzzlelever.pex and b/scripts/defaultpillarpuzzlelever.pex differ diff --git a/scripts/defaultpillarpuzzlelevernofurn.pex b/scripts/defaultpillarpuzzlelevernofurn.pex index 37bbc2cb..2b813594 100644 Binary files a/scripts/defaultpillarpuzzlelevernofurn.pex and b/scripts/defaultpillarpuzzlelevernofurn.pex differ diff --git a/scripts/defaultpillarpuzzlepullbarnofurn.pex b/scripts/defaultpillarpuzzlepullbarnofurn.pex index 69f90564..aa115dd0 100644 Binary files a/scripts/defaultpillarpuzzlepullbarnofurn.pex and b/scripts/defaultpillarpuzzlepullbarnofurn.pex differ diff --git a/scripts/defaultplaceatmeonactivate.pex b/scripts/defaultplaceatmeonactivate.pex new file mode 100644 index 00000000..14ed7662 Binary files /dev/null and b/scripts/defaultplaceatmeonactivate.pex differ diff --git a/scripts/defaultplayeffectonactivate.pex b/scripts/defaultplayeffectonactivate.pex new file mode 100644 index 00000000..25f05c17 Binary files /dev/null and b/scripts/defaultplayeffectonactivate.pex differ diff --git a/scripts/defaultplayerenabledisablelinkedref.pex b/scripts/defaultplayerenabledisablelinkedref.pex index 74c88eac..58f253bf 100644 Binary files a/scripts/defaultplayerenabledisablelinkedref.pex and b/scripts/defaultplayerenabledisablelinkedref.pex differ diff --git a/scripts/defaultplaysoundatlinkscript.pex b/scripts/defaultplaysoundatlinkscript.pex index 827f9e34..aec967cf 100644 Binary files a/scripts/defaultplaysoundatlinkscript.pex and b/scripts/defaultplaysoundatlinkscript.pex differ diff --git a/scripts/defaultprisonerdoorscript.pex b/scripts/defaultprisonerdoorscript.pex index a4b40b1b..63cb845f 100644 Binary files a/scripts/defaultprisonerdoorscript.pex and b/scripts/defaultprisonerdoorscript.pex differ diff --git a/scripts/defaultpuzzlepillarnofurn.pex b/scripts/defaultpuzzlepillarnofurn.pex index d06ed576..203b52fb 100644 Binary files a/scripts/defaultpuzzlepillarnofurn.pex and b/scripts/defaultpuzzlepillarnofurn.pex differ diff --git a/scripts/defaultpuzzlepillarpullbarnofurn.pex b/scripts/defaultpuzzlepillarpullbarnofurn.pex index 7d531212..eeeb0f79 100644 Binary files a/scripts/defaultpuzzlepillarpullbarnofurn.pex and b/scripts/defaultpuzzlepillarpullbarnofurn.pex differ diff --git a/scripts/defaultpuzzlepillarscript.pex b/scripts/defaultpuzzlepillarscript.pex index 3668138d..26bf33db 100644 Binary files a/scripts/defaultpuzzlepillarscript.pex and b/scripts/defaultpuzzlepillarscript.pex differ diff --git a/scripts/defaultquestrespawnscript.pex b/scripts/defaultquestrespawnscript.pex new file mode 100644 index 00000000..ac72be1a Binary files /dev/null and b/scripts/defaultquestrespawnscript.pex differ diff --git a/scripts/defaultragdollattachpointscript.pex b/scripts/defaultragdollattachpointscript.pex new file mode 100644 index 00000000..72cce33a Binary files /dev/null and b/scripts/defaultragdollattachpointscript.pex differ diff --git a/scripts/defaultresetreferenceonunload.pex b/scripts/defaultresetreferenceonunload.pex new file mode 100644 index 00000000..5343c888 Binary files /dev/null and b/scripts/defaultresetreferenceonunload.pex differ diff --git a/scripts/defaultrumbleonactivate.pex b/scripts/defaultrumbleonactivate.pex new file mode 100644 index 00000000..461f1c8d Binary files /dev/null and b/scripts/defaultrumbleonactivate.pex differ diff --git a/scripts/defaultsealeddoor.pex b/scripts/defaultsealeddoor.pex new file mode 100644 index 00000000..1287863b Binary files /dev/null and b/scripts/defaultsealeddoor.pex differ diff --git a/scripts/defaultsetavonactivate.pex b/scripts/defaultsetavonactivate.pex new file mode 100644 index 00000000..05d88cc0 Binary files /dev/null and b/scripts/defaultsetavonactivate.pex differ diff --git a/scripts/defaultsetavonload.pex b/scripts/defaultsetavonload.pex new file mode 100644 index 00000000..e9a95d80 Binary files /dev/null and b/scripts/defaultsetavonload.pex differ diff --git a/scripts/defaultsetenablestateonreset.pex b/scripts/defaultsetenablestateonreset.pex new file mode 100644 index 00000000..7758b586 Binary files /dev/null and b/scripts/defaultsetenablestateonreset.pex differ diff --git a/scripts/defaultsetenablestateonresetlinkedref.pex b/scripts/defaultsetenablestateonresetlinkedref.pex new file mode 100644 index 00000000..7c581488 Binary files /dev/null and b/scripts/defaultsetenablestateonresetlinkedref.pex differ diff --git a/scripts/defaultsetlinkavvar.pex b/scripts/defaultsetlinkavvar.pex index c336be2b..eb3b5643 100644 Binary files a/scripts/defaultsetlinkavvar.pex and b/scripts/defaultsetlinkavvar.pex differ diff --git a/scripts/defaultsetmultiavtriggerscript.pex b/scripts/defaultsetmultiavtriggerscript.pex index 7ed776e8..1e297ffd 100644 Binary files a/scripts/defaultsetmultiavtriggerscript.pex and b/scripts/defaultsetmultiavtriggerscript.pex differ diff --git a/scripts/defaultsetmultistagealiasscript.pex b/scripts/defaultsetmultistagealiasscript.pex new file mode 100644 index 00000000..013deb65 Binary files /dev/null and b/scripts/defaultsetmultistagealiasscript.pex differ diff --git a/scripts/defaultsetstageactorrefscript.pex b/scripts/defaultsetstageactorrefscript.pex new file mode 100644 index 00000000..9e0066a3 Binary files /dev/null and b/scripts/defaultsetstageactorrefscript.pex differ diff --git a/scripts/defaultsetstageactrefaliasscript.pex b/scripts/defaultsetstageactrefaliasscript.pex new file mode 100644 index 00000000..aa8a0667 Binary files /dev/null and b/scripts/defaultsetstageactrefaliasscript.pex differ diff --git a/scripts/defaultsetstageactscript.pex b/scripts/defaultsetstageactscript.pex new file mode 100644 index 00000000..2bd56eec Binary files /dev/null and b/scripts/defaultsetstageactscript.pex differ diff --git a/scripts/defaultsetstagealiasscript.pex b/scripts/defaultsetstagealiasscript.pex new file mode 100644 index 00000000..ac8fbb59 Binary files /dev/null and b/scripts/defaultsetstagealiasscript.pex differ diff --git a/scripts/defaultsetstageonattacked.pex b/scripts/defaultsetstageonattacked.pex new file mode 100644 index 00000000..8da88b28 Binary files /dev/null and b/scripts/defaultsetstageonattacked.pex differ diff --git a/scripts/defaultsetstageonattackedrefalias.pex b/scripts/defaultsetstageonattackedrefalias.pex new file mode 100644 index 00000000..455d2cc5 Binary files /dev/null and b/scripts/defaultsetstageonattackedrefalias.pex differ diff --git a/scripts/defaultsetstageonclosebook.pex b/scripts/defaultsetstageonclosebook.pex new file mode 100644 index 00000000..afb36138 Binary files /dev/null and b/scripts/defaultsetstageonclosebook.pex differ diff --git a/scripts/defaultsetstageonclosebooknotalias.pex b/scripts/defaultsetstageonclosebooknotalias.pex new file mode 100644 index 00000000..30424ec3 Binary files /dev/null and b/scripts/defaultsetstageonclosebooknotalias.pex differ diff --git a/scripts/defaultsetstageondeath.pex b/scripts/defaultsetstageondeath.pex new file mode 100644 index 00000000..12f78fa9 Binary files /dev/null and b/scripts/defaultsetstageondeath.pex differ diff --git a/scripts/defaultsetstageondeathrefalias.pex b/scripts/defaultsetstageondeathrefalias.pex new file mode 100644 index 00000000..dfd0d4e6 Binary files /dev/null and b/scripts/defaultsetstageondeathrefalias.pex differ diff --git a/scripts/defaultsetstageonenter.pex b/scripts/defaultsetstageonenter.pex index a30c2932..5182cb44 100644 Binary files a/scripts/defaultsetstageonenter.pex and b/scripts/defaultsetstageonenter.pex differ diff --git a/scripts/defaultsetstageonhitaliasscript.pex b/scripts/defaultsetstageonhitaliasscript.pex new file mode 100644 index 00000000..fa86de87 Binary files /dev/null and b/scripts/defaultsetstageonhitaliasscript.pex differ diff --git a/scripts/defaultsetstageonload.pex b/scripts/defaultsetstageonload.pex new file mode 100644 index 00000000..f6f3a1ed Binary files /dev/null and b/scripts/defaultsetstageonload.pex differ diff --git a/scripts/defaultsetstageonopenscript.pex b/scripts/defaultsetstageonopenscript.pex new file mode 100644 index 00000000..a6a2d8ac Binary files /dev/null and b/scripts/defaultsetstageonopenscript.pex differ diff --git a/scripts/defaultsetstageonplayeracquire.pex b/scripts/defaultsetstageonplayeracquire.pex new file mode 100644 index 00000000..e3153c16 Binary files /dev/null and b/scripts/defaultsetstageonplayeracquire.pex differ diff --git a/scripts/defaultsetstageonplayeracquireitem.pex b/scripts/defaultsetstageonplayeracquireitem.pex new file mode 100644 index 00000000..0985013f Binary files /dev/null and b/scripts/defaultsetstageonplayeracquireitem.pex differ diff --git a/scripts/defaultsetstageonreset.pex b/scripts/defaultsetstageonreset.pex new file mode 100644 index 00000000..22b9a529 Binary files /dev/null and b/scripts/defaultsetstageonreset.pex differ diff --git a/scripts/defaultsetstageonunload.pex b/scripts/defaultsetstageonunload.pex new file mode 100644 index 00000000..be430e78 Binary files /dev/null and b/scripts/defaultsetstageonunload.pex differ diff --git a/scripts/defaultsetstagerefscript.pex b/scripts/defaultsetstagerefscript.pex new file mode 100644 index 00000000..4ed9b34a Binary files /dev/null and b/scripts/defaultsetstagerefscript.pex differ diff --git a/scripts/defaultsetstagetrigonleavescript.pex b/scripts/defaultsetstagetrigonleavescript.pex new file mode 100644 index 00000000..f51acc08 Binary files /dev/null and b/scripts/defaultsetstagetrigonleavescript.pex differ diff --git a/scripts/defaultsetstagetrigscript.pex b/scripts/defaultsetstagetrigscript.pex index f590876f..258f7d13 100644 Binary files a/scripts/defaultsetstagetrigscript.pex and b/scripts/defaultsetstagetrigscript.pex differ diff --git a/scripts/defaultsetstagetrigspecificactor.pex b/scripts/defaultsetstagetrigspecificactor.pex new file mode 100644 index 00000000..2b53b3bf Binary files /dev/null and b/scripts/defaultsetstagetrigspecificactor.pex differ diff --git a/scripts/defaultsetstagetrigspecificfaction.pex b/scripts/defaultsetstagetrigspecificfaction.pex new file mode 100644 index 00000000..bc5dfc0d Binary files /dev/null and b/scripts/defaultsetstagetrigspecificfaction.pex differ diff --git a/scripts/defaultsoundcontrolscript.pex b/scripts/defaultsoundcontrolscript.pex new file mode 100644 index 00000000..1eb67ba9 Binary files /dev/null and b/scripts/defaultsoundcontrolscript.pex differ diff --git a/scripts/defaultstartsceneaterdelaytrigscript.pex b/scripts/defaultstartsceneaterdelaytrigscript.pex new file mode 100644 index 00000000..ed2377b2 Binary files /dev/null and b/scripts/defaultstartsceneaterdelaytrigscript.pex differ diff --git a/scripts/defaultstartsceneifnocombattrigscript.pex b/scripts/defaultstartsceneifnocombattrigscript.pex new file mode 100644 index 00000000..9e45feaf Binary files /dev/null and b/scripts/defaultstartsceneifnocombattrigscript.pex differ diff --git a/scripts/defaultstartsceneonaliasdeath.pex b/scripts/defaultstartsceneonaliasdeath.pex new file mode 100644 index 00000000..cf555c95 Binary files /dev/null and b/scripts/defaultstartsceneonaliasdeath.pex differ diff --git a/scripts/defaultstartscenescript.pex b/scripts/defaultstartscenescript.pex new file mode 100644 index 00000000..52c00c99 Binary files /dev/null and b/scripts/defaultstartscenescript.pex differ diff --git a/scripts/defaultstartscenetrigaliasscript.pex b/scripts/defaultstartscenetrigaliasscript.pex new file mode 100644 index 00000000..823c5207 Binary files /dev/null and b/scripts/defaultstartscenetrigaliasscript.pex differ diff --git a/scripts/defaultstartscenetrigscript.pex b/scripts/defaultstartscenetrigscript.pex new file mode 100644 index 00000000..34114e16 Binary files /dev/null and b/scripts/defaultstartscenetrigscript.pex differ diff --git a/scripts/defaultstopsceneonhit.pex b/scripts/defaultstopsceneonhit.pex new file mode 100644 index 00000000..787ed930 Binary files /dev/null and b/scripts/defaultstopsceneonhit.pex differ diff --git a/scripts/defaultteleportability.pex b/scripts/defaultteleportability.pex new file mode 100644 index 00000000..91c161f8 Binary files /dev/null and b/scripts/defaultteleportability.pex differ diff --git a/scripts/defaulttoggleselfonactivate.pex b/scripts/defaulttoggleselfonactivate.pex new file mode 100644 index 00000000..bd444b16 Binary files /dev/null and b/scripts/defaulttoggleselfonactivate.pex differ diff --git a/scripts/defaultunlockonload.pex b/scripts/defaultunlockonload.pex new file mode 100644 index 00000000..55cdcf72 Binary files /dev/null and b/scripts/defaultunlockonload.pex differ diff --git a/scripts/defaultwerewolfattachpointscript.pex b/scripts/defaultwerewolfattachpointscript.pex new file mode 100644 index 00000000..5699838a Binary files /dev/null and b/scripts/defaultwerewolfattachpointscript.pex differ diff --git a/scripts/dunfolgunthurcataleverpuzzle.pex b/scripts/dunfolgunthurcataleverpuzzle.pex new file mode 100644 index 00000000..8b4146b4 Binary files /dev/null and b/scripts/dunfolgunthurcataleverpuzzle.pex differ diff --git a/scripts/jaildoorscript.pex b/scripts/jaildoorscript.pex new file mode 100644 index 00000000..6f3d0162 Binary files /dev/null and b/scripts/jaildoorscript.pex differ diff --git a/scripts/trigger.pex b/scripts/trigger.pex new file mode 100644 index 00000000..d8f8a75e Binary files /dev/null and b/scripts/trigger.pex differ diff --git a/scripts/triggerboxbase.pex b/scripts/triggerboxbase.pex new file mode 100644 index 00000000..652e4322 Binary files /dev/null and b/scripts/triggerboxbase.pex differ diff --git a/source/scripts/defaulforcetowardlinkrefonenable.psc b/source/scripts/defaulforcetowardlinkrefonenable.psc new file mode 100644 index 00000000..deca6c69 --- /dev/null +++ b/source/scripts/defaulforcetowardlinkrefonenable.psc @@ -0,0 +1,22 @@ +Scriptname defaulForceTowardLinkRefOnEnable extends ObjectReference +{When this reference is enabled it will apply a force toward it's linked reference.} +import debug +import game +import utility + +float transX +float transY +float transZ + +objectReference property myTarget auto hidden +float property physForce = 0.1 auto +{The force you want to be applied to this reference toward it's linked ref. - DEFAULT = 0.1} + +Event OnLoad() + myTarget = GetLinkedRef() + ApplyForce() +EndEvent + +Function ApplyForce() + applyHavokImpulse((myTarget.getPositionX()), (myTarget.getPositionX()), (myTarget.getPositionZ() + 256), physForce) +EndFunction diff --git a/source/scripts/defaultactivateactivatelinkedrefonce.psc b/source/scripts/defaultactivateactivatelinkedrefonce.psc new file mode 100644 index 00000000..9dc41529 --- /dev/null +++ b/source/scripts/defaultactivateactivatelinkedrefonce.psc @@ -0,0 +1,19 @@ +scriptName defaultActivateActivateLinkedRefOnce extends ObjectReference +{ +- Activate the specified linked ref when this object is activated. +} + +ObjectReference myLinkedRef +Keyword Property linkedRefKeyword Auto + +Auto State PreActivation + Event OnActivate(ObjectReference triggerRef) +; Debug.Trace("Received:" + LinkedRefKeyword + " " + Self.GetLinkedRef(LinkedRefKeyword) + triggerRef) + Self.GetLinkedRef(LinkedRefKeyword).Activate(triggerRef) + gotoState("PostActivation") + EndEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultactivatedelayedtogglelinkedref.psc b/source/scripts/defaultactivatedelayedtogglelinkedref.psc new file mode 100644 index 00000000..54fd5933 --- /dev/null +++ b/source/scripts/defaultactivatedelayedtogglelinkedref.psc @@ -0,0 +1,24 @@ +scriptName defaultActivateDelayedToggleLinkedRef extends ObjectReference +{ +- Toggles the state of the linked ref when this object is activated, with a delay. +} + +ObjectReference myLinkedRef +float property EnableDelay Auto +float property DisableDelay Auto +Keyword property LinkKeyword Auto + +bool property fade = False Auto + +Event OnActivate(ObjectReference triggerRef) + myLinkedRef = GetLinkedRef(LinkKeyword) as ObjectReference + if (myLinkedRef.IsEnabled()) + Utility.Wait(DisableDelay) + myLinkedRef.Disable(fade) +; Debug.Trace("Disabled") + Else + Utility.Wait(EnableDelay) + myLinkedRef.Enable(fade) +; Debug.Trace("Enabled") + EndIf +EndEvent diff --git a/source/scripts/defaultactivatedeletelinkedref.psc b/source/scripts/defaultactivatedeletelinkedref.psc new file mode 100644 index 00000000..63189355 --- /dev/null +++ b/source/scripts/defaultactivatedeletelinkedref.psc @@ -0,0 +1,11 @@ +scriptName defaultActivateDeleteLinkedRef extends ObjectReference +{ +- Deletes the linkedref when this object is activated. +} + +ObjectReference myLinkedRef + +Event OnActivate(ObjectReference triggerRef) + myLinkedRef = GetLinkedRef() as ObjectReference + myLinkedRef.Delete() +EndEvent diff --git a/source/scripts/defaultactivatelinkedrefonattacked.psc b/source/scripts/defaultactivatelinkedrefonattacked.psc new file mode 100644 index 00000000..516a7f16 --- /dev/null +++ b/source/scripts/defaultactivatelinkedrefonattacked.psc @@ -0,0 +1,29 @@ +Scriptname DefaultActivateLinkedRefOnAttacked extends Actor +{Activates the specified linkedref when attacked.} + +Keyword property LinkKeyword Auto +bool property onlyOnce = True Auto +bool property onlyPlayer = False Auto +int property minNumberHits = 1 auto +{Minimum number of hits required to trigger the stage set. Allows for some leniancy, if desired.} + +;Internally -- Actual number of hits received. +int actualHits = 0 + +Auto State Waiting + Event OnHit(ObjectReference aggressor, Form weap, Projectile proj, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (aggressor == (Game.GetForm(0x14) as Actor) || !onlyPlayer) + actualHits = actualHits + 1 + if (actualHits >= minNumberHits) + Self.GetLinkedRef(LinkKeyword).Activate(Self) + if (onlyOnce) + GoToState("Inactive") + EndIf + EndIf + EndIf + EndEvent +EndState + +State Inactive +EndState + diff --git a/source/scripts/defaultactivatelinkedrefonceondeath.psc b/source/scripts/defaultactivatelinkedrefonceondeath.psc new file mode 100644 index 00000000..af57b547 --- /dev/null +++ b/source/scripts/defaultactivatelinkedrefonceondeath.psc @@ -0,0 +1,18 @@ +scriptName defaultActivateLinkedRefOnceOnDeath extends Actor +{ +- Activate the specified linked ref when this actor dies. +} + +ObjectReference myLinkedRef +Keyword Property linkedRefKeyword Auto + +Auto State PreActivation + Event OnDeath(Actor killer) + Self.GetLinkedRef(LinkedRefKeyword).Activate(Self) + gotoState("PostActivation") + EndEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultactivateonload.psc b/source/scripts/defaultactivateonload.psc new file mode 100644 index 00000000..2132b495 --- /dev/null +++ b/source/scripts/defaultactivateonload.psc @@ -0,0 +1,24 @@ +scriptName defaultActivateOnLoad extends ObjectReference +{ Activates the object's linkedref on load. Includes a slight delay to make sure the target is loaded, too. } + +ObjectReference myLinkedRef +Keyword Property linkedRefKeyword Auto +bool property doOnce Auto + +Auto State PreActivation + Event OnLoad() + Utility.Wait(0.25) + Self.GetLinkedRef(LinkedRefKeyword).Activate(Self) + if (doOnce) + gotoState("PostActivation") + EndIf + EndEvent + + Event OnActivate(ObjectReference obj) + OnLoad() + EndEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultactivateopenlinkedref.psc b/source/scripts/defaultactivateopenlinkedref.psc new file mode 100644 index 00000000..46917b74 --- /dev/null +++ b/source/scripts/defaultactivateopenlinkedref.psc @@ -0,0 +1,18 @@ +scriptName defaultActivateOpenLinkedRef extends ObjectReference +{ +- Opens the linked ref when the object is activated. +} + +ObjectReference myLinkedRef + +Auto State PreActivation + Event OnActivate(ObjectReference triggerRef) + myLinkedRef = GetLinkedRef() as ObjectReference + myLinkedRef.SetOpen(true) + gotoState("PostActivation") + EndEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultactivatetogglelinkedref.psc b/source/scripts/defaultactivatetogglelinkedref.psc new file mode 100644 index 00000000..3c0110e6 --- /dev/null +++ b/source/scripts/defaultactivatetogglelinkedref.psc @@ -0,0 +1,17 @@ +scriptName defaultActivateToggleLinkedRef extends ObjectReference +{ +- Toggles the state of the linked ref when this object is activated. +} + +ObjectReference myLinkedRef + +bool property fade = False Auto + +Event OnActivate(ObjectReference triggerRef) + myLinkedRef = GetLinkedRef() as ObjectReference + if (myLinkedRef.IsEnabled()) + myLinkedRef.Disable(fade) + Else + myLinkedRef.Enable(fade) + EndIf +EndEvent diff --git a/source/scripts/defaultactivatetogglelinkedrefonce.psc b/source/scripts/defaultactivatetogglelinkedrefonce.psc new file mode 100644 index 00000000..949a30cb --- /dev/null +++ b/source/scripts/defaultactivatetogglelinkedrefonce.psc @@ -0,0 +1,46 @@ +scriptName defaultActivateToggleLinkedRefOnce extends ObjectReference +{ +- Toggles the state of the linked ref when this object is activated. +} + +ObjectReference myLinkedRef +Keyword property linkKeyword Auto +bool property requirePlayer = False Auto +bool property requireNOTPlayer = False Auto +bool property fade = False Auto +bool property reset = True Auto + +Event OnReset() + ;USKP 2.0.4 - This should only return to pre-activation if the reference should be reset. Otherwise don't, because it makes messes of things. + if(reset) + gotoState("PreActivation") + Else + gotoState("DoNothing") + EndIf +EndEvent + +Auto State PreActivation + Event OnActivate(ObjectReference triggerRef) + if ((!requirePlayer && !requireNOTPlayer) || (requirePlayer && triggerRef == (Game.GetForm(0x14) as Actor)) || (requireNOTPlayer && triggerRef != (Game.GetForm(0x14) as Actor))) + myLinkedRef = GetLinkedRef(linkKeyword) as ObjectReference + if (myLinkedRef.IsEnabled()) + myLinkedRef.Disable(fade) + Else + myLinkedRef.Enable(fade) + EndIf + if (reset) +; Debug.Trace("Now awaiting reset.") + gotoState("PostActivation") + Else + gotoState("DoNothing") + EndIf + EndIf + EndEvent +EndState + +STATE PostActivation +EndState + +STATE DoNothing + ;Do nothing +EndState diff --git a/source/scripts/defaultactorenabledisablelinkedref.psc b/source/scripts/defaultactorenabledisablelinkedref.psc new file mode 100644 index 00000000..c8062928 --- /dev/null +++ b/source/scripts/defaultactorenabledisablelinkedref.psc @@ -0,0 +1,30 @@ +scriptName defaultActorEnableDisableLinkedRef extends ObjectReference +{ +- This script enables or disables linked ref based on which type user defines in properties. +- This script is for specified actor +- This script only fires once +} + +int property TriggerType auto +{ +0 (default) - enables linked ref +1 - disables linked ref +} + +Actor property myActor auto +{this is the actor who triggers} + +ObjectReference myLinkedRef + +Event onTriggerEnter(ObjectReference triggerRef) + myLinkedRef = GetLinkedRef() as ObjectReference + Actor actorRef = triggerRef as Actor + if (triggerRef == myActor) + if (TriggerType == 0) + myLinkedRef.enable() + elseif (TriggerType == 1) + myLinkedRef.disable() + endif + self.disable() + endif +endEvent diff --git a/source/scripts/defaultaddbookscript.psc b/source/scripts/defaultaddbookscript.psc new file mode 100644 index 00000000..7d8c161c --- /dev/null +++ b/source/scripts/defaultaddbookscript.psc @@ -0,0 +1,15 @@ +Scriptname defaultAddBookScript extends ObjectReference + +BOOK PROPERTY itemToAdd AUTO +{the misc item to place} + +INT PROPERTY count AUTO +{how many of the above item the char should have} + +EVENT onLoad() + + IF (SELF.getItemCount(itemToAdd) < count) + SELF.addItem(itemToAdd, count - SELF.getItemCount(itemToAdd), TRUE) + ENDIF + +ENDEVENT diff --git a/source/scripts/defaultadditemaliasscript.psc b/source/scripts/defaultadditemaliasscript.psc new file mode 100644 index 00000000..2b9c3a07 --- /dev/null +++ b/source/scripts/defaultadditemaliasscript.psc @@ -0,0 +1,63 @@ +Scriptname DefaultAddItemAliasScript extends ReferenceAlias +{Script to attach to quest alias that sets a stage in the owning quest when the item is added. NOTE: The stage will only be set once, even if the item is added to the container more than once.} + +Int Property StageToSet Auto +{Mandatory: This is the stage that will be set when the item is added} + +Int Property MinStageToCheck = 0 Auto +{Optional: The quest must be this stage or higher to set the stage when OnAdd is fired. Default: 0 = no minimum} + +Int Property MaxStageToCheck = 0 Auto +{Optional: The quest must be this stage or lower to set the stage when OnAdd is fired. Default: 0 = no maximum} + +bool Property CheckPlayerInventory = True Auto +{Optional: True = set stage when item is added to the player's inventory. Default: true} + +ObjectReference Property CheckThisInventory Auto +{Optional: Set stage when item is added to this object reference's inventory. Default: None} + +ReferenceAlias Property CheckThisAliasInventory Auto +{Optional: Set stage when item is added to the inventory of the object reference in this alias. Default: None} + +Bool Property TraceEvent = false Auto +{Optional: Do you want to generate a trace to the logs OnContainerChanged event? Default: False} + +Event OnInit() + if TraceEvent +; debug.trace(self + "OnInit()") + EndIf + +EndEvent + +Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + if TraceEvent +; debug.trace(self + "OnContainerChanged(akNewContainer[" + akNewContainer + "], akOldContainer[" + akOldContainer + "])" ) + EndIf + + Quest myQuest = GetOwningQuest() + int myStage = myQuest.GetCurrentStageID() + + bool DoSetStage = false + + if myQuest.IsStageDone(StageToSet) == 0 && myStage >= MinStageToCheck + if (MaxStageToCheck > 0 && myStage <= MaxStageToCheck) || MaxStageToCheck <= 0 + if CheckPlayerInventory && (Game.GetForm(0x14) as Actor) == akNewContainer + DoSetStage = true + EndIf + if CheckThisInventory && CheckThisInventory == akNewContainer + DoSetStage = true + EndIf + if CheckThisAliasInventory && CheckThisAliasInventory.GetReference() == akNewContainer + DoSetStage = true + EndIf + EndIf + EndIf + + if DoSetStage + if TraceEvent +; debug.trace(self + "OnContainerChanged() setting myQuest " + myQuest + " stage to " + StageToSet ) + EndIf + myQuest.SetCurrentStageID(stageToSet) + EndIf + +EndEvent diff --git a/source/scripts/defaultadditemarmorscript.psc b/source/scripts/defaultadditemarmorscript.psc new file mode 100644 index 00000000..863380e4 --- /dev/null +++ b/source/scripts/defaultadditemarmorscript.psc @@ -0,0 +1,14 @@ +Scriptname defaultAddItemArmorScript extends defaultAddItemScript +{Adds a piece of armor to this reference in a Reset-safe way.} + +Armor property _ArmorToAdd Auto + +bool property unique = False Auto +{If the player already has this item, don't give the actor another one. Defaults to False for Weapons & Armor.} + + +;Stores the armor. DefaultAddItemScript takes care of the rest. +Event OnInit() + ParentUnique = Unique + ItemToAdd = _ArmorToAdd +EndEvent diff --git a/source/scripts/defaultadditemkeyscript.psc b/source/scripts/defaultadditemkeyscript.psc new file mode 100644 index 00000000..bdb081b6 --- /dev/null +++ b/source/scripts/defaultadditemkeyscript.psc @@ -0,0 +1,14 @@ +Scriptname defaultAddItemKeyScript extends defaultAddItemScript +{Adds a key to this reference in a Reset-safe way.} + +Key property _KeyToAdd Auto + +bool property unique = True Auto +{If the player already has this item, don't give the actor one. Defaults to True for keys.} + + +;Stores the key. DefaultAddItemScript takes care of the rest. +Event OnInit() + ParentUnique = Unique + ItemToAdd = _KeyToAdd +EndEvent diff --git a/source/scripts/defaultadditemnotetolinkonload.psc b/source/scripts/defaultadditemnotetolinkonload.psc new file mode 100644 index 00000000..982396e8 --- /dev/null +++ b/source/scripts/defaultadditemnotetolinkonload.psc @@ -0,0 +1,15 @@ +scriptname defaultAddItemNoteToLinkOnLoad extends ObjectReference +{Add this object to its linked reference. NOT INHERANTLY RESET-SAFE-- this object must also be set as a quest alias, usually on dunMasterQST.} + +bool doOnce + +Event OnCellLoad() + if (!doOnce) + doOnce = True + if ((Self.GetBaseObject() as Book) == None) +; Debug.Trace("THIS IS A BUG - " + Self + " is a non-book using AddNoteToLinkOnLoad", 2) + Else + GetLinkedRef().AddItem(Self, 1, True) + EndIf + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultadditempotionscript.psc b/source/scripts/defaultadditempotionscript.psc new file mode 100644 index 00000000..f48896ee --- /dev/null +++ b/source/scripts/defaultadditempotionscript.psc @@ -0,0 +1,14 @@ +Scriptname defaultAddItemPotionScript extends defaultAddItemScript +{Adds a potion to this reference in a Reset-safe way.} + +Potion property _PotionToAdd Auto + +bool property unique = False Auto +{If the player already has this item, don't give the actor another one. Defaults to False for potions.} + + +;Stores the armor. DefaultAddItemScript takes care of the rest. +Event OnInit() + ParentUnique = Unique + ItemToAdd = _PotionToAdd +EndEvent diff --git a/source/scripts/defaultadditemscript.psc b/source/scripts/defaultadditemscript.psc new file mode 100644 index 00000000..e806a581 --- /dev/null +++ b/source/scripts/defaultadditemscript.psc @@ -0,0 +1,44 @@ +Scriptname defaultAddItemScript extends Actor +{Adds an item to this reference in a Reset-safe way. Not directly usable, but extended by the defaultAddItemScripts} + +Form property ItemToAdd Auto Hidden +{YOU CAN'T FILL THIS PROPERTY IN THE EDITOR. Use one of the defaultAddItem scripts instead.} + +int property count = 1 Auto +{The number of instances of the item the actor should have. Defaults to 1.} + +bool property parentUnique = True Auto Hidden +{If the player already has this item, don't give the actor another one. Defaults to True.} + +bool property shouldEquip = False Auto +{ACTORS ONLY: Should we equip this item?} + +bool property forceEquip = False Auto +{ACTORS ONLY: Should we force this item to stay equipped?} + +bool addedItem = False + +;On load, add the item. +Event OnLoad() + if (!addedItem) + addedItem = True + AddItemIfNeeded() + EndIf +EndEvent + +;On reset, add the item. +Event OnReset() + addedItem = True + AddItemIfNeeded() +EndEvent + +Function AddItemIfNeeded() + ;If (parentUnique && Player has item), don't generate. + if ((Game.GetForm(0x14) as Actor).GetItemCount(ItemToAdd) == 0 || !parentUnique) + Self.AddItem(ItemToAdd, (count - Self.GetItemCount(ItemToAdd)), True) + if (shouldEquip && (Self as Actor) != None) + Self.EquipItem(ItemToAdd, forceEquip, True) + EndIf + EndIf +EndFunction + diff --git a/source/scripts/defaultadditemweaponscript.psc b/source/scripts/defaultadditemweaponscript.psc new file mode 100644 index 00000000..3053bbde --- /dev/null +++ b/source/scripts/defaultadditemweaponscript.psc @@ -0,0 +1,14 @@ +Scriptname defaultAddItemWeaponScript extends defaultAddItemScript +{Adds a weapon to this reference in a Reset-safe way.} + +Weapon property _WeaponToAdd Auto + +bool property unique = False Auto +{If the player already has this item, don't give the actor another one. Defaults to False for Weapons & Armor.} + + +;Stores the weapon. DefaultAddItemScript takes care of the rest. +Event OnInit() + ParentUnique = Unique + ItemToAdd = _WeaponToAdd +EndEvent diff --git a/source/scripts/defaultaddmapmarkeronclosebooknotalias.psc b/source/scripts/defaultaddmapmarkeronclosebooknotalias.psc new file mode 100644 index 00000000..c5782f1a --- /dev/null +++ b/source/scripts/defaultaddmapmarkeronclosebooknotalias.psc @@ -0,0 +1,55 @@ +Scriptname defaultAddMapMarkerOnCloseBookNotAlias extends ObjectReference +{When the player closes the book, adds the indicated map markers to their map, optionally with fast travel enabled.} +;============================================== +ObjectReference property MapMarker1 Auto +ObjectReference property MapMarker2 Auto +ObjectReference property MapMarker3 Auto +ObjectReference property MapMarker4 Auto +ObjectReference property MapMarker5 Auto + +bool property AllowFastTravel = False Auto +{Allow fast travel to these markers? Default: False} + +auto STATE ready + Event OnActivate(ObjectReference akActionRef) + stageHandling() + EndEvent + + Event OnEquipped(Actor akActor) + stageHandling() + endEvent +endSTATE + +STATE Done + ; nothing happens in this place +endSTATE +;============================================== + +;USKP 2.0.0 - Map marker spam eliminated if you have already been told of the locations. +FUNCTION stageHandling() + if (MapMarker1 != None) + if (MapMarker1.IsMapMarkerVisible() == 0) + MapMarker1.AddToMap(AllowFastTravel) + endif + EndIf + if (MapMarker2 != None) + if (MapMarker2.IsMapMarkerVisible() == 0) + MapMarker2.AddToMap(AllowFastTravel) + endif + EndIf + if (MapMarker3 != None) + if (MapMarker3.IsMapMarkerVisible() == 0) + MapMarker3.AddToMap(AllowFastTravel) + endif + EndIf + if (MapMarker4 != None) + if (MapMarker4.IsMapMarkerVisible() == 0) + MapMarker4.AddToMap(AllowFastTravel) + endif + EndIf + if (MapMarker5 != None) + if (MapMarker5.IsMapMarkerVisible() == 0) + MapMarker5.AddToMap(AllowFastTravel) + endif + EndIf +endFUNCTION diff --git a/source/scripts/defaultaddmiscitemscript.psc b/source/scripts/defaultaddmiscitemscript.psc new file mode 100644 index 00000000..8664a5dc --- /dev/null +++ b/source/scripts/defaultaddmiscitemscript.psc @@ -0,0 +1,15 @@ +Scriptname defaultAddMiscItemSCRIPT extends ObjectReference + +MISCOBJECT PROPERTY itemToAdd AUTO +{the misc item to place} + +INT PROPERTY count AUTO +{how many of the above item the char should have} + +EVENT onLoad() + + IF (SELF.getItemCount(itemToAdd) < count) + SELF.addItem(itemToAdd, count - SELF.getItemCount(itemToAdd), TRUE) + ENDIF + +ENDEVENT diff --git a/source/scripts/defaultaddmusiconactivate.psc b/source/scripts/defaultaddmusiconactivate.psc new file mode 100644 index 00000000..96670070 --- /dev/null +++ b/source/scripts/defaultaddmusiconactivate.psc @@ -0,0 +1,16 @@ +scriptName defaultAddMusicOnActivate extends ObjectReference +{plays music when player enters trigger} + +MusicType property myMusic auto +{Music to play when player enters trigger} + +Auto STATE Listening + EVENT OnActivate (objectReference triggerRef) + gotoState ("done") + myMusic.Add() + endEVENT +endState + +STATE done + ; do nothing +endSTATE diff --git a/source/scripts/defaultaddmusicscript.psc b/source/scripts/defaultaddmusicscript.psc new file mode 100644 index 00000000..34f12f98 --- /dev/null +++ b/source/scripts/defaultaddmusicscript.psc @@ -0,0 +1,19 @@ +scriptName defaultAddMusicSCRIPT extends ObjectReference +{plays music when player enters trigger} + +MusicType property myMusic auto +{Music to play when player enters trigger} + +Auto STATE Listening + EVENT onTriggerEnter (objectReference triggerRef) + Actor actorRef = triggerRef as Actor + if (actorRef == (Game.GetForm(0x14) as Actor)) + gotoState ("done") + myMusic.Add() + endif + endEVENT +endState + +STATE done + ; do nothing +endSTATE diff --git a/source/scripts/defaultaddspell.psc b/source/scripts/defaultaddspell.psc new file mode 100644 index 00000000..108ac3e3 --- /dev/null +++ b/source/scripts/defaultaddspell.psc @@ -0,0 +1 @@ +Scriptname defaultAddSpell extends Perk diff --git a/source/scripts/defaultaddtofactiononload.psc b/source/scripts/defaultaddtofactiononload.psc new file mode 100644 index 00000000..4f97ac22 --- /dev/null +++ b/source/scripts/defaultaddtofactiononload.psc @@ -0,0 +1,8 @@ +scriptName defaultAddToFactionOnLoad extends Actor +{Adds the reference to a faction on load.} + +Faction property newFaction Auto + +Event OnLoad() + Self.AddToFaction(newFaction) +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultaddtolinkonloadscript.psc b/source/scripts/defaultaddtolinkonloadscript.psc new file mode 100644 index 00000000..b311b1bf --- /dev/null +++ b/source/scripts/defaultaddtolinkonloadscript.psc @@ -0,0 +1,33 @@ +scriptname DefaultAddToLinkonLoadSCRIPT extends objectReference +{Add the reference to the linked container or actor inventory on Load} +import Debug +import Utility + +bool Property ShouldEquip = FALSE Auto +{ +OPTIONAL: Set to TRUE if you want the actor to equip this item also. (DEFAULT = FALSE) +Warning! - Has to be an actor! +} +bool Property ForceEquip = FALSE Auto +{ +OPTIONAL: If set to TRUE the actor cannot unequip this themselves (ShouldEquip MUST be TRUE also). (DEFAULT = FALSE) +Warning! - Has to be an actor! +} +bool Property AlreadyLoaded = FALSE Auto hidden +;;bool Property AllowDuplicates = FALSE Auto +;;{Check TRUE if you want the script to add the item even if the LinkRef already has one in its inventory (Default FALSE)} + +Event onCellLoad() + + if AlreadyLoaded == FALSE + getLinkedRef().addItem(self, 1, true) + ;Trace("DARYL - " + self + " added to " + GetLinkedRef()) + + if (ShouldEquip == TRUE) + (getLinkedRef() as Actor).EquipItem(self.GetBaseObject(), ForceEquip) + ;Trace("DARYL - " + self + " equipping onto " + GetLinkedRef()) + endif + AlreadyLoaded = TRUE + endif + +endEvent diff --git a/source/scripts/defaultaliaschangeoutfit.psc b/source/scripts/defaultaliaschangeoutfit.psc new file mode 100644 index 00000000..57d2972b --- /dev/null +++ b/source/scripts/defaultaliaschangeoutfit.psc @@ -0,0 +1,31 @@ +Scriptname defaultAliasChangeOutfit extends ReferenceAlias +{changes an actor's outfit on a ChangeLocation event} + +Location Property ChangeOutfitLocation Auto +{change outfit when actor enters or exits this location (depending on bChangeOnExit flag)} + +int Property prereqStageOPT Auto +{optional prerequisite stage} + +Outfit Property NewOutfit Auto +{outfit to change into} + +bool Property bChangeOnExit = true Auto +{if true, change outfit when actor EXITS the ChangeOutfitLocation; otherwise, change outfit when he ENTERS the ChangeOutfitLocation +defaults to TRUE} + + +auto STATE waiting +Event OnLocationChange(Location akOldLoc, Location akNewLoc) + if (bChangeOnExit && akOldLoc == ChangeOutfitLocation) || (!bChangeOnExit && akNewLoc == ChangeOutfitLocation) + if prereqStageOPT == 0 || GetOwningQuest().IsStageDone(prereqStageOPT) + gotoState("done") + GetActorReference().SetOutfit(NewOutfit) + endif + endif +endEvent +endState + +STATE done +; do nothing +endState \ No newline at end of file diff --git a/source/scripts/defaultaliasmodaggression.psc b/source/scripts/defaultaliasmodaggression.psc new file mode 100644 index 00000000..89705c65 --- /dev/null +++ b/source/scripts/defaultaliasmodaggression.psc @@ -0,0 +1,80 @@ +Scriptname DefaultAliasModAggression extends ReferenceAlias +{Script used to temporarily mod an actor's aggression. You will need to call a ModAggression() and ResetAggression() to mod and unmod it.} + +;jduvall owns. Discuss changes with him first. Thanks :) + +int Property MinAggression = 1 auto +{Default: 1, set both MinAggression and MaxAggresion to the same number to temporarily force it to be that number regardless of where it currently is.} + +int Property MaxAggression = 2 Auto +{Default: 2, set both MinAggression and MaxAggresion to the same number to temporarily force it to be that number regardless of where it currently is.} + +bool Property ModOnlyOnce = True Auto +{Default: true, only allow modding and unmodding once.} + +int startingAggression +int currentAggression +bool Modded +bool Unmodded + +Event OnInit() + if MinAggression > MaxAggression +; debug.trace(self + " WARNING: OnInit() MinAggression > MaxAggression. Setting MinAggression to MaxAggression:" + MaxAggression, 2) + MinAggression = MaxAggression + EndIf + +EndEvent + +function ModAggression() + if ModOnlyOnce && Modded +; debug.trace(self + "ModAggression() Already modded Actors's (" + ActorRef + ")aggression. Ignoring additional call.", 1) + return + EndIf + + Modded = True + + actor ActorRef = GetActorReference() + + startingAggression = ActorRef.GetActorValue("Aggression") as Int + + currentAggression = startingAggression + + If currentAggression < MinAggression + currentAggression = MinAggression + Elseif currentAggression > MaxAggression + currentAggression = MaxAggression + EndIf + + +; debug.trace(self + "ModAggression() setting actor's (" + ActorRef + ")aggression to " + currentAggression) + ActorRef.SetActorValue("Aggression", currentAggression) + + +EndFunction + +function ResetAggression() + + if Modded == False +; debug.trace(self + "ResetAggression() Has not previously called ModAggression(). So ignoring call to reset it.") + Return + EndIf + + if ModOnlyOnce && Unmodded +; debug.trace(self + "ResetAggression() Already reset Actors's (" + ActorRef + ")aggression. Ignoring additional call.") + return + EndIf + + unmodded = True + + Actor ActorRef = GetActorReference() + int actualAggression = ActorRef.GetActorValue("Aggression") as Int + + if currentAggression != actualAggression +; debug.trace(self + " WARNING: ResetAggression() sees that the actor's[" + ActorRef + "] actual Aggression at this moment[" + actualAggression + "] is different to the aggression we modded it to[" + currentAggression + "] we are going to set it back to what we found it at before we modded it [" + startingAggression + "]. This could result in unexpected results, but assuming its better than the alternative.", 2) + EndIf + +; debug.trace(self + "ModAggression() setting actor's (" + ActorRef + ")aggression to back to it's original value " + startingAggression) + ActorRef.SetActorValue("Aggression", startingAggression) + +EndFunction + diff --git a/source/scripts/defaultaliasondeathscript.psc b/source/scripts/defaultaliasondeathscript.psc new file mode 100644 index 00000000..30413dc8 --- /dev/null +++ b/source/scripts/defaultaliasondeathscript.psc @@ -0,0 +1,22 @@ +Scriptname DefaultAliasOnDeathScript extends ReferenceAlias +{Sets a stage on the parent quest when the alias dies} + + + + +int Property StageToSetOnDeath Auto +{What stage should be set when the alias dies?} + +int property PrerequisiteStage = -1 auto +{What stage must be active to set the stage + -1 == do not use and is the default} + +event onDeath (actor akKiller) + if PrerequisiteStage == -1 + getOwningQuest().SetCurrentStageID(StageToSetOnDeath) + elseif getOwningQuest().GetCurrentStageID() == PrerequisiteStage + getOwningQuest().SetCurrentStageID(StageToSetOnDeath) + else +; debug.Trace(self + " did not set stage " + StageToSetOnDeath + " because prerequisite stage was not set") + endif +endEvent \ No newline at end of file diff --git a/source/scripts/defaultaliasonunload.psc b/source/scripts/defaultaliasonunload.psc new file mode 100644 index 00000000..50d0bbdb --- /dev/null +++ b/source/scripts/defaultaliasonunload.psc @@ -0,0 +1,10 @@ +Scriptname defaultAliasOnUnload extends ReferenceAlias +{sets a stage OnUnload +} + +int Property stageToSet Auto +{set this stage when I unload} + +Event OnUnload() + GetOwningQuest().SetCurrentStageID(stageToSet) +endEvent \ No newline at end of file diff --git a/source/scripts/defaultaliasrespawnscript.psc b/source/scripts/defaultaliasrespawnscript.psc new file mode 100644 index 00000000..79a6bd03 --- /dev/null +++ b/source/scripts/defaultaliasrespawnscript.psc @@ -0,0 +1,43 @@ +Scriptname defaultAliasRespawnScript extends ReferenceAlias +{script for simple respawning of an alias + + Use with defaultQuestRespawnScript +} + + +function RespawnIfDead() +; debug.trace(self + " RespawnIfDead") + if GetActorReference().IsDead() + defaultQuestRespawnScript myQuest = GetOwningQuest() as defaultQuestRespawnScript + gotoState("respawning") + myQuest.Respawn(self) + gotoState("normal") + else +; debug.trace(self + "RespawnIfDead: I'm not dead - " + GetActorReference() + ".IsDead()=" + GetActorReference().IsDead()) + endif +endFunction + + +auto state normal + +Event OnDeath(Actor akKiller) + if bRespawningOn + defaultQuestRespawnScript myQuest = GetOwningQuest() as defaultQuestRespawnScript + gotoState("respawning") + myQuest.TryToRespawn(self) + gotoState("normal") + endif +endEvent + +endState + +state respawning + +Event OnDeath(Actor akKiller) +endEvent + +endState + +bool Property bRespawningOn = true Auto +{set to false to stop this alias from auto-respawning when it dies +defaults to TRUE} diff --git a/source/scripts/defaultallowpcdialoguescript.psc b/source/scripts/defaultallowpcdialoguescript.psc new file mode 100644 index 00000000..00360a83 --- /dev/null +++ b/source/scripts/defaultallowpcdialoguescript.psc @@ -0,0 +1,6 @@ +Scriptname defaultAllowPCDialogueScript extends Actor +{script will make this actor able to talk to the PC} + +event OnLoad() + AllowPCDialogue(true) +endEvent \ No newline at end of file diff --git a/source/scripts/defaultaoepushonactivatedoonce.psc b/source/scripts/defaultaoepushonactivatedoonce.psc new file mode 100644 index 00000000..3006ae3b --- /dev/null +++ b/source/scripts/defaultaoepushonactivatedoonce.psc @@ -0,0 +1,31 @@ +scriptname defaultAOEpushOnActivateDoOnce extends objectReference + +explosion property fakeForceBallNudge auto +{select the appropriate strength explosion for your reference} +bool property enablePush auto +{check only if you want to do the nudge when activated} + +EVENT onLoad() + + if enablePush == TRUE + blockActivation() + endif + +endEVENT + +auto STATE active + EVENT onActivate(objectREference actronaut) + + if enablePush == TRUE + setOpen() + placeatme(fakeForceBallNudge) + blockActivation(FALSE) + endif + gotoState("inactive") + + endEVENT +endSTATE + +STATE inactive +endSTATE + diff --git a/source/scripts/defaultautosavescript.psc b/source/scripts/defaultautosavescript.psc new file mode 100644 index 00000000..ab7e6792 --- /dev/null +++ b/source/scripts/defaultautosavescript.psc @@ -0,0 +1,23 @@ +Scriptname defaultAutosaveScript extends ObjectReference + +import game +import utility + +bool property done auto hidden +bool property lazySave auto + +EVENT onTriggerEnter(objectReference actronaut) +; ;Debug.Trace("Trigger Hit") + if done == FALSE + while !isInMenuMode() + waitMenuMode(0.5) + endWhile + done = TRUE +; ;Debug.Trace("Autosave Requested") + requestAutoSave() + endif +endEVENT + +EVENT onReset() + done = FALSE +endEVENT diff --git a/source/scripts/defaultbipressureplate.psc b/source/scripts/defaultbipressureplate.psc new file mode 100644 index 00000000..37866a9c --- /dev/null +++ b/source/scripts/defaultbipressureplate.psc @@ -0,0 +1,69 @@ +scriptName defaultBiPressurePlate extends TrapTriggerBase + +bool busy +float property TargetDelay Auto + +Event onLoad() + if objectsInTrigger > 0 + GoToState("Down") + endif +endevent + +auto State Up + Event onBeginState() + busy = True + PlayAnimation("Up") + activate(self) + Utility.Wait(TargetDelay) +; ;Debug.Trace("TargetDelay " + TargetDelay + " is up.") +; ;Debug.Trace("BiPressurePlate UpBeginState: " + objectsInTrigger) + if objectsInTrigger > 0 + GoToState("Down") + EndIf + busy = False + EndEvent + + Event OnTriggerEnter(objectReference triggerRef) + objectsInTrigger = self.GetTriggerObjectCount() +; ;Debug.Trace("BiPressurePlate TriggerEnter: " + objectsInTrigger) + if (!busy) + GoToState("Down") + EndIf + EndEvent + + Event OnTriggerLeave(objectReference triggerRef) + objectsInTrigger = self.GetTriggerObjectCount() + EndEvent +EndState + +State Down + Event onBeginState() + busy = True + PlayAnimation("Down") + activate(self) + Utility.Wait(TargetDelay) +; ;Debug.Trace("TargetDelay " + TargetDelay + " is up.") +; ;Debug.Trace("BiPressurePlate DownBeginState: " + objectsInTrigger) + if objectsInTrigger == 0 + GoToState("Up") + EndIf + busy = False + EndEvent + + Event OnTriggerEnter(objectReference triggerRef) + objectsInTrigger = self.GetTriggerObjectCount() +; ;Debug.Trace("BiPressurePlate: " + objectsInTrigger) + EndEvent + + Event OnTriggerLeave(objectReference triggerRef) + objectsInTrigger = self.GetTriggerObjectCount() +; ;Debug.Trace("BiPressurePlate TriggerLeave: " + objectsInTrigger) + While (busy && objectsInTrigger == 0) +; Debug.Trace("While loop") + Utility.Wait(0.25) + EndWhile + if (!busy && objectsInTrigger == 0) + GoToState("Up") + EndIf + EndEvent +EndState \ No newline at end of file diff --git a/source/scripts/defaultbloodpoolscript.psc b/source/scripts/defaultbloodpoolscript.psc new file mode 100644 index 00000000..2d8df88e --- /dev/null +++ b/source/scripts/defaultbloodpoolscript.psc @@ -0,0 +1,24 @@ +Scriptname defaultBloodPoolScript extends ObjectReference + +import debug +import utility + +bool property startFull = false auto conditional +{set to true to start filled} + +string property fillAnim = "play" auto +{OnLoad calls this if the object starts in the open state} + +EVENT OnLoad() + if (startFull) + playAnimation(fillAnim) ;activator starts filled + endif +endEVENT + +auto STATE waiting ; waiting to be activated + EVENT onActivate (objectReference triggerRef) + ; fill when activated + playAnimation(fillAnim) + endEVENT +endState + diff --git a/source/scripts/defaultcastatlinkontriggerscript.psc b/source/scripts/defaultcastatlinkontriggerscript.psc new file mode 100644 index 00000000..96b24e8e --- /dev/null +++ b/source/scripts/defaultcastatlinkontriggerscript.psc @@ -0,0 +1,31 @@ +scriptName DefaultCastAtLinkOnTriggerSCRIPT extends objectReference +{Configurable Custom Script. Be default: when triggered, it will cast the spell from a linked ref at the triggering actor} + +bool property playerOnly auto +{if true, only works on the player} +bool property doOnce auto +{fire multiple times?} +float property delayBetween auto +{seconds to wait between shots. Only relevant if doOnce == false} +spell property mySpell auto +{spell to cast onTriggerEnter} + + +auto STATE active + EVENT onTriggerEnter(ObjectReference actronaut) + if playerOnly == true && actronaut == (Game.GetForm(0x14) as Actor) || playerOnly == false + mySpell.Cast(getLinkedRef(), actronaut) + gotoState ("inactive") ; don't cast subsequent spells until told to do so + if doOnce == true + ; and don't come back! + else + utility.wait(delayBetween) + gotoState("active") + endif + endif + endEVENT +endSTATE + +STATE inactive + ; nothing happens here. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultcastfromlinkonactivatescript.psc b/source/scripts/defaultcastfromlinkonactivatescript.psc new file mode 100644 index 00000000..b75fc0db --- /dev/null +++ b/source/scripts/defaultcastfromlinkonactivatescript.psc @@ -0,0 +1,33 @@ +scriptName DefaultCastFromLinkOnActivateSCRIPT extends objectReference +{Configurable Custom Script. Be default: when triggered, it will cast the spell from a linked ref at the triggering actor} + +bool property playerOnly auto +{if true, only works on the player} +bool property doOnce auto +{fire multiple times?} +float property delayBetween auto +{seconds to wait between shots. Only relevant if doOnce == false} +spell property mySpell auto +{spell to cast onTriggerEnter} + + +auto STATE active + EVENT onActivate(ObjectReference actronaut) + if playerOnly == true && actronaut == (Game.GetForm(0x14) as Actor) || playerOnly == false +; debug.trace("Casting: " + mySpell + " from " + getLinkedRef()) + mySpell.Cast(getLinkedRef()) + gotoState ("inactive") ; don't cast subsequent spells until told to do so + if doOnce == true + ; and don't come back! + else + utility.wait(delayBetween) + gotoState("active") +; debug.trace("Casting from " + getLinkedRef() + " available again") + endif + endif + endEVENT +endSTATE + +STATE inactive + ; nothing happens here. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultcastontriggerscript.psc b/source/scripts/defaultcastontriggerscript.psc new file mode 100644 index 00000000..1e405f52 --- /dev/null +++ b/source/scripts/defaultcastontriggerscript.psc @@ -0,0 +1,31 @@ +scriptName DefaultCastOnTriggerSCRIPT extends objectReference +{Configurable Script. By default: when triggered, it will cast the spell from a linked ref at the triggering actor} + +bool property playerOnly auto +{if true, only works on the player} +bool property doOnce auto +{fire multiple times?} +float property delayBetween auto +{seconds to wait between shots. Only relevant if doOnce == false} +spell property mySpell auto +{spell to cast onTriggerEnter} + + +auto STATE active + EVENT onTriggerEnter(ObjectReference actronaut) + if playerOnly == true && actronaut == (Game.GetForm(0x14) as Actor) || playerOnly == false + mySpell.Cast(getLinkedRef(), actronaut) + gotoState ("inactive") ; don't cast subsequent spells until told to do so + if doOnce == true + ; and don't come back! + else + utility.wait(delayBetween) + gotoState("active") + endif + endif + endEVENT +endSTATE + +STATE inactive + ; nothing happens here. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultcityendgatescenescript.psc b/source/scripts/defaultcityendgatescenescript.psc new file mode 100644 index 00000000..be1b5adf --- /dev/null +++ b/source/scripts/defaultcityendgatescenescript.psc @@ -0,0 +1,12 @@ +ScriptName DefaultCityEndGateSceneScript extends ObjectReference + +Quest Property myQuest Auto +Int Property EndStage Auto + +Event OnCellLoad() + + If (myQuest.IsStageDone(EndStage) == 0) + myQuest.SetCurrentStageID(EndStage) + EndIf + +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultclearlocationonactivate.psc b/source/scripts/defaultclearlocationonactivate.psc new file mode 100644 index 00000000..e2271e16 --- /dev/null +++ b/source/scripts/defaultclearlocationonactivate.psc @@ -0,0 +1,6 @@ +scriptName defaultClearLocationOnActivate extends ObjectReference +{Sets the reference's location 'Cleared' when it is activated. In conjunction with defaultCounter, useful for clearing a location with multiple bosses.} + +Event OnActivate(ObjectReference obj) + Self.GetCurrentLocation().SetCleared() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultclearlocationondeath.psc b/source/scripts/defaultclearlocationondeath.psc new file mode 100644 index 00000000..37678114 --- /dev/null +++ b/source/scripts/defaultclearlocationondeath.psc @@ -0,0 +1,7 @@ +scriptName defaultClearLocationOnDeath extends Actor +{Sets the actor's location 'Cleared' when they are killed.} + +Event OnDeath(Actor killer) +; ;Debug.Trace("Clearing Location: " + Self.GetCurrentLocation()) + Self.GetCurrentLocation().SetCleared() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultclearlocationondeathrefalias.psc b/source/scripts/defaultclearlocationondeathrefalias.psc new file mode 100644 index 00000000..d1efe21b --- /dev/null +++ b/source/scripts/defaultclearlocationondeathrefalias.psc @@ -0,0 +1,6 @@ +scriptName defaultClearLocationOnDeathRefAlias extends ReferenceAlias +{Sets the alias' location 'Cleared' when it is killed.} + +Event OnDeath(Actor killer) + Self.GetReference().GetCurrentLocation().SetCleared() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultcounter.psc b/source/scripts/defaultcounter.psc new file mode 100644 index 00000000..e1b8ae21 --- /dev/null +++ b/source/scripts/defaultcounter.psc @@ -0,0 +1,97 @@ +ScriptName defaultCounter extends objectReference +{A simple counter. Place on an object, then increment with another script (such as defaultCounterIncrementOnDeath). When the target value is reached (or, optionally, exceeded), the counter: + - Activates itself. + - Optionally, sets a quest stage. + - Optionally, performs a specified action on a specified linkedref. +} + +import game +import debug + +bool property OnlyOnce Auto +{If true, activates only when the counter equals its target value. If false, activates at and above the target value. Defaults to false.} + +bool property OnlyToggle Auto +{If true, activates when the counter first reaches the target value, then when it next drops below it, then when it reaches it again, etc. Overrides OnlyOnce to avoid unpredictable behavior. Defaults to false.} + +;A bool to keep track of when we last toggle-activated. +bool toggleState + +int property TargetValue Auto +{The first value at which the counter will trigger.} + +Quest property myQuest Auto +{Optional. If Desired, when the counter reaches its target, sets myQuest to myStage.} + +int property myStage Auto +{Optional. If Desired, when the counter reaches its target, sets myQuest to myStage.} + +Keyword property myLinkedRefToActOn Auto +{The name of the LinkedRef to perform the action on. Defaults to the unnamed linkedref.} + +int property myLinkedRefAction Auto +{Optional; defaults to 0. Determines what action to perform on the object's linkedref. + - 0 -- Activate + - 1 -- Toggle Enable/Disable + - 2 -- Enable Only + - 3 -- Disable Only + } + +int count + +function Increment() + count = count + 1 +; ;Debug.Trace("Counter: " + count + " TargetValue: " + TargetValue + " ToggleState: " + toggleState) + ;Forcibly override OnlyOnce. + if (OnlyToggle) + OnlyOnce = True + EndIf + if (count == TargetValue || (count >= TargetValue && !OnlyOnce) || (count < TargetValue && toggleState && OnlyToggle)) + Self.Activate(Self) + toggleState = !toggleState + if (myQuest != None) + myQuest.SetCurrentStageID(myStage) + EndIf + + ;USKP 2.0.1 - If the linked ref this thing wants isn't set, then it can't do any of what's in this block. + if( GetLinkedRef(myLinkedRefToActOn) != None ) + ; ;Debug.Trace("Counter passed. Preparing to " + myLinkedRefAction + Self.GetLinkedRef(myLinkedRefToActOn)) + if (myLinkedRefAction == 0) + ; ;Debug.Trace("Activating: " + Self.GetLinkedRef(myLinkedRefToActOn)) + Self.GetLinkedRef(myLinkedRefToActOn).Activate(Self) + ElseIf (myLinkedRefAction == 1) + if (Self.GetLinkedRef(myLinkedRefToActOn).IsDisabled()) + Self.GetLinkedRef(myLinkedRefToActOn).Enable() + Else + Self.GetLinkedRef(myLinkedRefToActOn).Disable() + EndIf + ElseIf (myLinkedRefAction == 2) + Self.GetLinkedRef(myLinkedRefToActOn).Enable() + ElseIf (myLinkedRefAction == 3) + Self.GetLinkedRef(myLinkedRefToActOn).Disable() + EndIf + EndIf + EndIf +EndFunction + +function Decrement() + count = count - 1 +; ;Debug.Trace("Counter: " + count + " TargetValue: " + TargetValue + " ToggleState: " + toggleState) + if (count == TargetValue || (count >= TargetValue && !OnlyOnce) || (count < TargetValue && toggleState && OnlyToggle)) + Self.Activate(Self) + toggleState = !toggleState + if (myLinkedRefAction == 0) + Self.GetLinkedRef().Activate(Self) + ElseIf (myLinkedRefAction == 1) + if (Self.GetLinkedRef(myLinkedRefToActOn).IsDisabled()) + Self.GetLinkedRef(myLinkedRefToActOn).Enable() + Else + Self.GetLinkedRef(myLinkedRefToActOn).Disable() + EndIf + ElseIf (myLinkedRefAction == 2) + Self.GetLinkedRef(myLinkedRefToActOn).Disable() + ElseIf (myLinkedRefAction == 3) + Self.GetLinkedRef(myLinkedRefToActOn).Enable() + EndIf + EndIf +EndFunction \ No newline at end of file diff --git a/source/scripts/defaultcounterincrementonactivate.psc b/source/scripts/defaultcounterincrementonactivate.psc new file mode 100644 index 00000000..fbb2172a --- /dev/null +++ b/source/scripts/defaultcounterincrementonactivate.psc @@ -0,0 +1,27 @@ +ScriptName defaultCounterIncrementOnActivate extends ObjectReference +{On activation, casts the linkedref to a defaultCounter and increments it.} + +import game +import debug + +Keyword property counterLinkedRefName Auto +{The name of the LinkedRef to the Counter. Defaults to the unnamed linkedref.} + +bool property toggle = True Auto +{Defaults to true. If true, each activation of this particular object will alternate between incrementing and decremeting the counter. If false, just increments it.} + +bool lastActivationIncremented = False + +Function onActivate(Objectreference activator) + if (toggle) + if (lastActivationIncremented) + (Self.GetLinkedRef(counterLinkedRefName) As defaultCounter).Decrement() + lastActivationIncremented = False + Else + (Self.GetLinkedRef(counterLinkedRefName) As defaultCounter).Increment() + lastActivationIncremented = True + EndIf + Else + (Self.GetLinkedRef(counterLinkedRefName) As defaultCounter).Increment() + EndIf +EndFunction \ No newline at end of file diff --git a/source/scripts/defaultcounterincrementondeath.psc b/source/scripts/defaultcounterincrementondeath.psc new file mode 100644 index 00000000..ed80a14c --- /dev/null +++ b/source/scripts/defaultcounterincrementondeath.psc @@ -0,0 +1,14 @@ +ScriptName defaultCounterIncrementOnDeath extends Actor +{On death, casts the linkedref to a defaultCounter and increments it.} + +import game +import debug + +Keyword property counterLinkedRefName Auto +{The name of the LinkedRef to the Counter. Defaults to the unnamed linkedref.} + +Function onDeath(Actor akKiller) +; ;Debug.Trace("onDeath() Event Received") + (Self.GetLinkedRef(counterLinkedRefName) As defaultCounter).Increment() +EndFunction + \ No newline at end of file diff --git a/source/scripts/defaultdisablelinkedrefonload.psc b/source/scripts/defaultdisablelinkedrefonload.psc new file mode 100644 index 00000000..f862ae4c --- /dev/null +++ b/source/scripts/defaultdisablelinkedrefonload.psc @@ -0,0 +1,17 @@ +ScriptName DefaultDisableLinkedRefOnLoad extends ObjectReference +{If this object is enabled, when the cell loads, it disables its linkedref. Useful for enable-state swapping on cell loads.} + +bool disableOnLoad = False + +Event OnCellLoad() + if (disableOnLoad) + Self.GetLinkedRef().Disable() + EndIf +EndEvent + +Event OnActivate(ObjectReference obj) + disableOnLoad = True +EndEvent + +Event OnReset() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultdisablelinkrefondestruction.psc b/source/scripts/defaultdisablelinkrefondestruction.psc new file mode 100644 index 00000000..165780f9 --- /dev/null +++ b/source/scripts/defaultdisablelinkrefondestruction.psc @@ -0,0 +1,16 @@ +Scriptname defaultDisableLinkRefOnDestruction extends ObjectReference +{Disables my linked ref when I'm destroyed (Through destruction stages).} + +Int Property OldStage = 3 Auto +{The destruction stage that is before the stage you want to trigger at +- Default = 3} + +Int Property NewStage = 4 Auto +{The destruction stage that you want the trigger to happen at +- Default = 4} + +Event OnDestructionStageChanged(int aiOldStage, int aiCurrentStage) + if (aiOldStage == OldStage) && (aiCurrentStage == NewStage) + GetLinkedRef().Disable() + endif +EndEvent diff --git a/source/scripts/defaultdisableoncellattachothercond.psc b/source/scripts/defaultdisableoncellattachothercond.psc new file mode 100644 index 00000000..03588376 --- /dev/null +++ b/source/scripts/defaultdisableoncellattachothercond.psc @@ -0,0 +1,66 @@ +scriptName defaultDisableOnCellAttachOtherCond extends objectReference +{This script disables its object on reset if the location has been cleared once + it requires a linkRef to an xmarker to track this state} + + +;;;;;;;;;;;;;This uses a linkedRef instead of a property because properties are reset when the cell is;;;;;;;;;; +event onCellAttach() +; ;debug.Trace(self + ": has called onReset - hasBeenCleared = " + hasBeenCleared) + if getLinkedRef().isEnabled() +; ;debug.Trace(self + ": has found that my linkedRef is enabled, enabling self") + Self.Enable() + Else +; ;debug.Trace(self + ": has found that my linkedRef is disabled, disabling self") + Self.Disable() + if disableOtherRefsAsWell + if otherRefToChange01 + otherRefToChange01.disable() + endif + if otherRefToChange02 + otherRefToChange02.disable() + endif + if otherRefToChange03 + otherRefToChange03.disable() + endif + if otherRefToChange04 + otherRefToChange04.disable() + endif + if otherRefToChange05 + otherRefToChange05.disable() + endif + elseif enableOtherRefsAsWell + if otherRefToChange01 + otherRefToChange01.enable() + endif + if otherRefToChange02 + otherRefToChange02.enable() + endif + if otherRefToChange03 + otherRefToChange03.enable() + endif + if otherRefToChange04 + otherRefToChange04.enable() + endif + if otherRefToChange05 + otherRefToChange05.enable() + endif + endif + + EndIf +endEvent + +bool property disableOtherRefsAsWell auto +{If this is true, the refs to change will be disabled when this object is + If this is true, enableOtherRefsAsWell is ignored + default = false} + +bool property enableOtherRefsAsWell auto +{If this is true, the refs to change will be enabled when this object is + If disableOtherRefsAsWell is true, this is ignored + default = false} + +ObjectReference property otherRefToChange01 auto +ObjectReference property otherRefToChange02 auto +ObjectReference property otherRefToChange03 auto +ObjectReference property otherRefToChange04 auto +ObjectReference property otherRefToChange05 auto diff --git a/source/scripts/defaultdisableonloadafterwait.psc b/source/scripts/defaultdisableonloadafterwait.psc new file mode 100644 index 00000000..59ea8aba --- /dev/null +++ b/source/scripts/defaultdisableonloadafterwait.psc @@ -0,0 +1,16 @@ +Scriptname defaultDisableOnloadAfterWait extends ObjectReference +{This reference will disable a set time after being enabled.} +import debug +import game +import utility + +float property timeBeforeDisable = 1.0 auto +{Time before you want this reference to disable after it is enabled. - DEFAULT = 1} + +bool property willFade = FALSE auto +{Whether this reference will fade when it is disabled. - DEFAULT = 0} + +Event OnLoad() + wait(timeBeforeDisable) + self.Disable(willFade) +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultdisableonreset.psc b/source/scripts/defaultdisableonreset.psc new file mode 100644 index 00000000..83fc29df --- /dev/null +++ b/source/scripts/defaultdisableonreset.psc @@ -0,0 +1,6 @@ +ScriptName defaultDisableOnReset extends objectReference +{Disables this object when the cell resets.} + +Event OnReset() + Self.Disable() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultdisableonresetiflocwascleared.psc b/source/scripts/defaultdisableonresetiflocwascleared.psc new file mode 100644 index 00000000..b8b522fe --- /dev/null +++ b/source/scripts/defaultdisableonresetiflocwascleared.psc @@ -0,0 +1,27 @@ +scriptName defaultDisableOnResetIfLocWasCleared extends objectReference +{This script disables its object on reset if the location has been cleared once + it requires a linkRef to an xmarker to track this state} + + +event onCellDetach() +; ;debug.Trace(self + ": has run onCellDetach") + ;USKP 2.0.1 - Sanity check needed. None locations can't be cleared. + if( self.GetCurrentLocation() != None ) + if self.getCurrentLocation().isCleared() + ; ;debug.Trace(self + ": cell is cleared - setting hasBeenCleared") + getLinkedRef().disable() + endIf + EndIf +endEvent + +;;;;;;;;;;;;;This uses a linkedRef instead of a property because properties are reset when the cell is;;;;;;;;;; +event onReset() +; ;debug.Trace(self + ": has called onReset - hasBeenCleared = " + hasBeenCleared) + if getLinkedRef().isEnabled() +; ;debug.Trace(self + ": has found that my linkedRef is enabled, enabling self") + Self.Enable() + Else +; ;debug.Trace(self + ": has found that my linkedRef is disabled, disabling self") + Self.Disable() + EndIf +endEvent diff --git a/source/scripts/defaultdisableonresetothercondition.psc b/source/scripts/defaultdisableonresetothercondition.psc new file mode 100644 index 00000000..6d7fbd24 --- /dev/null +++ b/source/scripts/defaultdisableonresetothercondition.psc @@ -0,0 +1,66 @@ +scriptName defaultDisableOnResetOtherCondition extends objectReference +{This script disables its object on reset if the location has been cleared once + it requires a linkRef to an xmarker to track this state} + + +;;;;;;;;;;;;;This uses a linkedRef instead of a property because properties are reset when the cell is;;;;;;;;;; +event onReset() +; ;debug.Trace(self + ": has called onReset - hasBeenCleared = " + hasBeenCleared) + if getLinkedRef().isEnabled() +; ;debug.Trace(self + ": has found that my linkedRef is enabled, enabling self") + Self.Enable() + Else +; ;debug.Trace(self + ": has found that my linkedRef is disabled, disabling self") + Self.Disable() + if disableOtherRefsAsWell + if otherRefToChange01 + otherRefToChange01.disable() + endif + if otherRefToChange02 + otherRefToChange02.disable() + endif + if otherRefToChange03 + otherRefToChange03.disable() + endif + if otherRefToChange04 + otherRefToChange04.disable() + endif + if otherRefToChange05 + otherRefToChange05.disable() + endif + elseif enableOtherRefsAsWell + if otherRefToChange01 + otherRefToChange01.enable() + endif + if otherRefToChange02 + otherRefToChange02.enable() + endif + if otherRefToChange03 + otherRefToChange03.enable() + endif + if otherRefToChange04 + otherRefToChange04.enable() + endif + if otherRefToChange05 + otherRefToChange05.enable() + endif + endif + + EndIf +endEvent + +bool property disableOtherRefsAsWell auto +{If this is true, the refs to change will be disabled when this object is + If this is true, enableOtherRefsAsWell is ignored + default = false} + +bool property enableOtherRefsAsWell auto +{If this is true, the refs to change will be enabled when this object is + If disableOtherRefsAsWell is true, this is ignored + default = false} + +ObjectReference property otherRefToChange01 auto +ObjectReference property otherRefToChange02 auto +ObjectReference property otherRefToChange03 auto +ObjectReference property otherRefToChange04 auto +ObjectReference property otherRefToChange05 auto diff --git a/source/scripts/defaultdisableotherobjectwhentaken.psc b/source/scripts/defaultdisableotherobjectwhentaken.psc new file mode 100644 index 00000000..f5032ab1 --- /dev/null +++ b/source/scripts/defaultdisableotherobjectwhentaken.psc @@ -0,0 +1,19 @@ +scriptName defaultDisableOtherObjectWhenTaken extends ObjectReference +{when this is aquired by the player, disable the objectReference set in the property + This is meant for use with cell reset enabling/disabling} + +objectReference property refToDisable auto + +auto state waiting + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + if akNewContainer == (Game.GetForm(0x14) as Actor) + goToState("Done") + refToDisable.disable() + endif + endEvent +endState + +state Done +endState + + diff --git a/source/scripts/defaultdisableselfonload.psc b/source/scripts/defaultdisableselfonload.psc new file mode 100644 index 00000000..d9d6e621 --- /dev/null +++ b/source/scripts/defaultdisableselfonload.psc @@ -0,0 +1,25 @@ +Scriptname DefaultDisableSelfOnLoad extends ObjectReference +{disable self on load after quest stage is set} + +Quest Property myQuest Auto + +int Property disableStage Auto + +bool Property bStageMustBeDone = false Auto +{false by default +if true, look for GetStageDone disableStage +if false, look for GetStage >= disableStage} + +auto State waiting + event OnLoad() + if (bStageMustBeDone && myQuest.IsStageDone(disableStage)) || (!bStageMustBeDone && myQuest.GetCurrentStageID() >= disableStage) + gotoState("done") + Disable() + endif + endEvent +endState + +state done +; do nothing +; note: if ref is reenabled after this state is set, this script will not redisable it +endState \ No newline at end of file diff --git a/source/scripts/defaultdisplayiteminlistscript.psc b/source/scripts/defaultdisplayiteminlistscript.psc new file mode 100644 index 00000000..66457165 --- /dev/null +++ b/source/scripts/defaultdisplayiteminlistscript.psc @@ -0,0 +1,78 @@ +scriptname defaultDisplayItemInListScript extends ObjectReference + +Actor property PlayerRef auto + +FormList property itemsToDisplay auto +{ The FormList whose item(s) to display. } + +Message property ItemNotInInventoryMessage auto +{ The message to display if the item is not in the player's inventory. } + +Keyword property LinkedMarkerKeyword auto +{ The keyword of the linked marker reference. } + +int MAX_3D_CHECK = 30 + +State Busy + Event OnActivate(ObjectReference akActionRef) + endEvent +endState + +Event OnActivate(ObjectReference akActionRef) + if akActionRef == PlayerRef + GoToState("Busy") + if !IsOneOfItemsOnDisplay() + ; Display the first unique item found in the array, if the player has it. + int size = itemsToDisplay.GetSize() + + int i = 0 + bool itemFound = false + while i < size && !itemFound + Form item = itemsToDisplay.GetAt(i) + if PlayerRef.GetItemCount(item) > 0 + DisplayItem(item) + itemFound = true + endif + i += 1 + endWhile + + if !itemFound + ; If the player doesn't have any of the items, and + ; none of them are already on display, show an error. + ItemNotInInventoryMessage.Show() + endif + endif + GoToState("") + endif +EndEvent + +function DisplayItem(Form akItem) + ObjectReference theItem = PlayerRef.DropObject(akItem) + theItem.BlockActivation() + PositionItemAndDisablePhysics(theItem) + theItem.BlockActivation(false) +endFunction + +function PositionItemAndDisablePhysics(ObjectReference akItemOnDisplayRef) + if akItemOnDisplayRef + int i = 0 + while !akItemOnDisplayRef.Is3DLoaded() && i < MAX_3D_CHECK + i += 1 + Utility.Wait(0.1) + endWhile + + if i < MAX_3D_CHECK + ; Place the item. + akItemOnDisplayRef.SetMotionType(Motion_Keyframed, false) + ObjectReference triggerMarker = GetLinkedRef(LinkedMarkerKeyword) + akItemOnDisplayRef.MoveTo(triggerMarker) + else + ; We failed to load the 3D for this item, abort. + PlayerRef.AddItem(akItemOnDisplayRef) + endif + endif +endFunction + +bool function IsOneOfItemsOnDisplay() + return Game.FindClosestReferenceOfAnyTypeInListFromRef(itemsToDisplay, GetLinkedRef(LinkedMarkerKeyword), 32.0) +endFunction diff --git a/source/scripts/defaultdisplayuniqueitemscript.psc b/source/scripts/defaultdisplayuniqueitemscript.psc new file mode 100644 index 00000000..fbf1d3ee --- /dev/null +++ b/source/scripts/defaultdisplayuniqueitemscript.psc @@ -0,0 +1,84 @@ +scriptname defaultDisplayUniqueItemScript extends ObjectReference + +Actor property PlayerRef auto + +Armor property optArmorToDisplay auto +{ Choose one 'opt' property to fill. The Armor to display. } +Weapon property optWeaponToDisplay auto +{ Choose one 'opt' property to fill. The Weapon to display. } +MiscObject property optMiscObjectToDisplay auto +{ Choose one 'opt' property to fill. The MiscObject to display. } +Book property optBookToDisplay auto +{ Choose one 'opt' property to fill. The Book to display. } + +Message property ItemNotInInventoryMessage auto +{ The message to display if the item is not in the player's inventory. } + +Keyword property LinkedMarkerKeyword auto +{ The keyword of the linked marker reference. } + + +Event OnActivate(ObjectReference akActionRef) + if akActionRef == PlayerRef + Form itemToDisplay = GetDisplayItem() + + if PlayerRef.GetItemCount(itemToDisplay) > 0 + ; If the player has the item, place it. + DisplayItem(itemToDisplay) + else + ; If the player doesn't have the item, and + ; it's not already on display, show an error. + if !IsItemOnDisplay(itemToDisplay) + ItemNotInInventoryMessage.Show() + endif + endif + endif +EndEvent + +function DisplayItem(Form akItem) + ObjectReference theItem = PlayerRef.DropObject(akItem) + theItem.BlockActivation() + PositionItemAndDisablePhysics(theItem) + theItem.BlockActivation(false) +endFunction + +function PositionItemAndDisablePhysics(ObjectReference akItemOnDisplayRef) + if akItemOnDisplayRef + while !akItemOnDisplayRef.Is3DLoaded() + Utility.Wait(0.1) + endWhile + + akItemOnDisplayRef.SetMotionType(Motion_Keyframed, false) + ObjectReference triggerMarker = GetLinkedRef(LinkedMarkerKeyword) + akItemOnDisplayRef.MoveTo(triggerMarker) + endif +endFunction + +Form function GetDisplayItem() + if optArmorToDisplay + return optArmorToDisplay + elseif optWeaponToDisplay + return optWeaponToDisplay + elseif optMiscObjectToDisplay + return optMiscObjectToDisplay + elseif optBookToDisplay + return optBookToDisplay + endif +endFunction + +bool function IsItemOnDisplay(Form akItem) + return Game.FindClosestReferenceOfTypeFromRef(akItem, GetLinkedRef(LinkedMarkerKeyword), 32.0) +endFunction + +;USSEP 4.1.7 Bug #25561 - Added event +Event OnCellAttach() + Form itemToDisplay = GetDisplayItem() + If !IsItemOnDisplay(itemToDisplay) + ObjectReference fallenItem = Game.FindClosestReferenceOfTypeFromRef(itemToDisplay, GetLinkedRef(LinkedMarkerKeyword), 1000.0) + If fallenItem != None + fallenItem.BlockActivation() + PositionItemAndDisablePhysics(fallenItem) + fallenItem.BlockActivation(false) + EndIf + EndIf +EndEvent diff --git a/source/scripts/defaultdragonsetlandingmarker.psc b/source/scripts/defaultdragonsetlandingmarker.psc new file mode 100644 index 00000000..f8786198 --- /dev/null +++ b/source/scripts/defaultdragonsetlandingmarker.psc @@ -0,0 +1,12 @@ +Scriptname defaultDragonSetLandingMarker extends ObjectReference +{sets landing marker onLoad to linked ref} + +Keyword Property LinkDragonLandingMarker Auto + +event OnLoad() + ObjectReference myLandingMarker = GetLinkedRef(LinkDragonLandingMarker) + if myLandingMarker + Actor mySelfActor = (self as ObjectReference) as Actor + mySelfActor.SetForcedLandingMarker(myLandingMarker) + endif +endEvent \ No newline at end of file diff --git a/source/scripts/defaultenabledisablelinkonopenclose.psc b/source/scripts/defaultenabledisablelinkonopenclose.psc new file mode 100644 index 00000000..682b8a82 --- /dev/null +++ b/source/scripts/defaultenabledisablelinkonopenclose.psc @@ -0,0 +1,10 @@ +Scriptname DefaultEnableDisableLinkOnOpenClose extends ObjectReference +{Script, when placed on a door, will enable it's linked ref on close, and disable it on open.} + +Event OnOpen(ObjectReference akActionRef) + self.GetLinkedRef().Disable() +endEvent + +Event OnClose(ObjectReference akActionRef) + self.GetLinkedRef().Enable() +endEvent \ No newline at end of file diff --git a/source/scripts/defaultenablelinkedrefonactivate.psc b/source/scripts/defaultenablelinkedrefonactivate.psc new file mode 100644 index 00000000..dae83b59 --- /dev/null +++ b/source/scripts/defaultenablelinkedrefonactivate.psc @@ -0,0 +1,31 @@ +Scriptname defaultEnableLinkedRefOnActivate extends ObjectReference +{enable OR disable linked ref on activate} + +auto STATE WaitingToBeActivated + EVENT OnActivate (objectReference triggerRef) +; ;Debug.Trace("ACTIVATED") + ; get linked ref + ObjectReference myRef = GetLinkedRef(LinkedRefKeyword) + if myRef + GoToState("done") + if bEnableOnActivate + myRef.Enable() + else + myRef.Disable() + endif + endif + EndEvent +EndState + +STATE done + ;done doing stuff +endSTATE + + +bool Property bEnableOnActivate = true Auto +{true (default) = enable linked ref +false = disable linked ref +} + +Keyword Property LinkedRefKeyword Auto +{optional - if supplied, use this for GetLinkedRef} diff --git a/source/scripts/defaultenablelinkedrefonlostlos.psc b/source/scripts/defaultenablelinkedrefonlostlos.psc new file mode 100644 index 00000000..c9cd61aa --- /dev/null +++ b/source/scripts/defaultenablelinkedrefonlostlos.psc @@ -0,0 +1,49 @@ +Scriptname defaultEnableLinkedRefOnLostLOS extends ObjectReference +{enable OR disable linked ref onLostLOS} + +bool property bEnableOnLostLOS = true auto +{true (default) = enable linked ref +false = disable linked ref +} + +ObjectReference property myLookTarget auto +{the target that when player looks away, triggers the enable/disable} + +Keyword property LinkedRefKeyword auto +{optional - if supplied, use this for GetLinkedRef} + +;************************************ + +Event OnLostLOS(Actor akViewer, ObjectReference akTarget) + ; get linked ref + ObjectReference myRef = GetLinkedRef(LinkedRefKeyword) + if(myRef) + if(bEnableOnLostLOS) + myRef.Enable() + else + myRef.Disable() + endif + endif +endEvent + +;************************************ + +auto State Waiting + Event onTriggerEnter(objectReference triggerRef) + Actor actorRef = triggerRef as Actor + if(actorRef == (Game.GetForm(0x14) as Actor)) + gotoState("done") + RegisterForSingleLOSLost((Game.GetForm(0x14) as Actor), myLookTarget) + endif + endEvent + + +endState + +;************************************ + +State done + ;do nothing +endState + +;************************************ \ No newline at end of file diff --git a/source/scripts/defaultenableonreset.psc b/source/scripts/defaultenableonreset.psc new file mode 100644 index 00000000..c704e990 --- /dev/null +++ b/source/scripts/defaultenableonreset.psc @@ -0,0 +1,7 @@ +ScriptName defaultEnableOnReset extends objectReference +{Enables this object when the cell resets.} + +Event OnReset() +; Debug.Trace("Enable On Reset") + Self.Enable() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultenabletrigscript.psc b/source/scripts/defaultenabletrigscript.psc new file mode 100644 index 00000000..74641fb6 --- /dev/null +++ b/source/scripts/defaultenabletrigscript.psc @@ -0,0 +1,9 @@ +scriptName defaultEnableTrigSCRIPT extends TriggerBoxBase +; +; Trigger Box script used to enable/disable objects linked to this +; +;============================================================= + +Function fireTriggerEvent () + self.disable() ;enable objects hooked up to this trigger +endFunction diff --git a/source/scripts/defaultequipitemonload.psc b/source/scripts/defaultequipitemonload.psc new file mode 100644 index 00000000..d2ee72ae --- /dev/null +++ b/source/scripts/defaultequipitemonload.psc @@ -0,0 +1,23 @@ +scriptName defaultEquipItemOnLoad extends Actor +{ Causes the actor to equip the specified item(s) on load. } + +Weapon property WeaponToEquip Auto +Armor property ArmorToEquip Auto +Light property TorchToEquip Auto +bool property preventRemoval Auto +bool property silent Auto + +Event OnLoad() + if (!Self.IsDead() && !Self.IsDisabled()) + if (WeaponToEquip != None) + Self.EquipItem(WeaponToEquip, preventRemoval, silent) + EndIf + if (ArmorToEquip != None) + Self.EquipItem(ArmorToEquip, preventRemoval, silent) + EndIf + if (TorchToEquip != None) + Self.EquipItem(TorchToEquip, preventRemoval, silent) +; Debug.Trace("FORCING TORCH: " + Self + " " + preventRemoval) + EndIf + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultfakeharvestablescript.psc b/source/scripts/defaultfakeharvestablescript.psc new file mode 100644 index 00000000..683e3aee --- /dev/null +++ b/source/scripts/defaultfakeharvestablescript.psc @@ -0,0 +1,80 @@ +scriptName defaultFakeHarvestableScript extends objectReference +; +;This script is added on an activator to fake an object being harvestable +; it mimics the normal harvest behavior +;============================================================== + + +ingredient property IngredientHarvested auto +{ingredient added when harvested} + +potion property PotionHarvested auto +{potion added when harvested} + +bool property deleteSelfOnHarvest = false auto +{if true, delete this object when harvested} + +message property HarvestMessage auto +{Message that appears when you have successfully harvested something} + +message property FailureMessage auto +{Message that appears when you fail to harvest something} + +globalVariable property DaysToResetFakeHarvest auto +{The amount of game days that it takes to become reharvestable} + +float property lastHarvestedDay auto Hidden +{the game day this was last successfuly harvested, used to know when to respawn} + +sound property HarvestSound auto +{Sounds played on harvest} + +;=================================================================== +;;STATE BLOCK +;=================================================================== + +auto state readyForHarvest + event onActivate(objectReference akActivator) + goToState("waitingToRespawn") + fakeHarvest(akActivator) + if deleteSelfOnHarvest + disable() + delete() + endif + endEvent +endState + +state waitingToRespawn + event onBeginState() + lastHarvestedDay = utility.getCurrentGameTime() + endEvent + + event onActivate(objectReference akActivator) + FailureMessage.show() + endEvent + + event onCellLoad() + if (lastHarvestedDay + DaysToResetFakeHarvest.getValue()) <= utility.getCurrentGameTime() + goToState("readyForHarvest") + endif + endEvent +endState + +;=================================================================== +;;FUNCTION BLOCK +;=================================================================== + +function fakeHarvest(objectReference akActivator) + if (akActivator as actor) + HarvestMessage.show() + HarvestSound.play(self) + if IngredientHarvested + (akActivator as actor).addItem(IngredientHarvested, 1, true) + endif + + if PotionHarvested + (akActivator as actor).addItem(PotionHarvested, 1, true) + endif + endif +endFunction + diff --git a/source/scripts/defaultfakerezspell.psc b/source/scripts/defaultfakerezspell.psc new file mode 100644 index 00000000..afa8c139 --- /dev/null +++ b/source/scripts/defaultfakerezspell.psc @@ -0,0 +1,16 @@ +scriptName defaultFakeRezSpell extends defaultFakeSummonSpell +{A script to 'fake' resurrecting and re-killing actors. Derived from defaultFakeSummonSpell, but more useful with undead.} + +Spell property dunReanimateSelf Auto + +;Optional way to trigger the Summon FX in more scripted situations. +Event Summon() +; ;Debug.Trace("Resurrecting") + if (Self.IsDead()) + dunReanimateSelf.Cast(Self, Self) + EndIf +EndEvent + +Event Banish() + Self.Kill() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultfakesummonspell.psc b/source/scripts/defaultfakesummonspell.psc new file mode 100644 index 00000000..01c3d417 --- /dev/null +++ b/source/scripts/defaultfakesummonspell.psc @@ -0,0 +1,41 @@ +scriptName defaultFakeSummonSpell extends Actor +{A script to 'fake' summoning and banishing actors. By default, just 'summons' on activation, although optional Summon/Banish functions exist for more scripted use.} + +Activator property summonFX Auto +Activator property banishFX Auto +bool property summoned = False Auto + +auto State Waiting + Event OnActivate(ObjectReference or) + if (or != (Game.GetForm(0x14) as Actor)) + GoToState("Done") + Summon() + EndIf + EndEvent +EndState + +state Done + Event OnActivate(ObjectReference or) + ;Do nothing. + EndEvent +EndState + + +;Optional way to trigger the Summon FX in more scripted situations. +Event Summon() + if (!Self.IsDead() && !summoned) + Self.PlaceAtMe(SummonFX) + Utility.Wait(1) + Self.Enable(True) + summoned = True + EndIf +EndEvent + +;Optional way to trigger the Banish FX in more scripted situations. +Event Banish() + if (!Self.IsDead() && summoned) + Self.PlaceAtMe(BanishFX) + Self.Disable(True) + summoned = False + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultghostscriptrefalias.psc b/source/scripts/defaultghostscriptrefalias.psc new file mode 100644 index 00000000..0e52cc6b --- /dev/null +++ b/source/scripts/defaultghostscriptrefalias.psc @@ -0,0 +1,96 @@ +Scriptname defaultGhostScriptRefAlias extends ReferenceAlias + +EFFECTSHADER PROPERTY pGhostFXShader AUTO +FORMLIST PROPERTY pDefaultGhostWeaponFlickerList AUTO +CONTAINER PROPERTY pDefaultGhostCorpse AUTO +EXPLOSION PROPERTY pdefaultGhostDeathExplosion AUTO + +BOOL PROPERTY bflicker=FALSE AUTO +{don't use this yet} + +SPELL PROPERTY pGhostAbilityNew AUTO +SPELL PROPERTY pGhostResistsAbility AUTO + +; //any perks you want to add +PERK PROPERTY pGhostHalfDamagePerk AUTO + +BOOL PROPERTY bFade=FALSE AUTO +{makes the ghost fade out instead of explode} + +; //make sure only one flash is active +BOOL bFlash=FALSE + +; //the person who caused the ghost to flash +ACTOR target + +EVENT onLoad() + + ; // add on the abilities + SELF.GetActorReference().addSpell(pGhostAbilityNew) + SELF.GetActorReference().addSpell(pGhostResistsAbility) + + ; // for some reason this makes ghostFlash work better + IF(bFlicker) + ghostFlash(1) + ENDIF + +ENDEVENT + +; ///////// +; //ONHIT: When the ghost is hit, if the player isnt using the proper weapon, have them fade +; ///////// +EVENT onHIT(OBJECTREFERENCE akAggressor, FORM akSource, Projectile akProjectile, BOOL abPowerAttack, BOOL abSneakAttack, BOOL abBashAttack, BOOL abHitBlocked) + + ; //if we're supposed to flicker and we're hit by a weapon without turn and we're not blocked, flash + IF(bflicker && !pDefaultGhostWeaponFlickerList.hasForm(akSource) && !abHitBlocked && !bFlash) + bFlash = TRUE + target = akAggressor as ACTOR + ghostFlash(3) + ENDIF + +ENDEVENT + +; ///////// +; //GHOSTFLASH: play this to flash the ghost when hit or attacking +; // +; //float time: the amount of time to be invincible +; ///////// +FUNCTION ghostFlash(FLOAT time) + + ; //stop the effect to keep the particles + pGhostFXShader.stop(SELF.GetActorReference()) + SELF.GetActorReference().setGhost() + + ; //be invincible for x seconds + utility.wait(time) + + ; //return the ghost to normal + SELF.GetActorReference().setGhost(FALSE) + SELF.GetActorReference().setAlpha(0.3) + pGhostFXShader.play(SELF.GetActorReference()) + + bFlash = FALSE + +ENDFUNCTION + +; ///////// +; //ONDYING: On dying play an explosion to mask the ghost vanishing and being replaced by his corpse +; ///////// +EVENT onDYING(ACTOR killer) + + IF(bFade) + Self.GetActorReference().disable(1) + ELSE + ; //play this explosion on death + SELF.GetActorReference().placeAtMe(pDefaultGhostDeathExplosion) + + ; //mask the swap in the explosion + utility.wait(0.2) + + ; //temporary hack + Self.GetActorReference().disable() + ENDIF + + Self.GetActorReference().placeAtMe(pDefaultGhostCorpse) + +ENDEVENT diff --git a/source/scripts/defaultignorefriendlyhits.psc b/source/scripts/defaultignorefriendlyhits.psc new file mode 100644 index 00000000..2df03ced --- /dev/null +++ b/source/scripts/defaultignorefriendlyhits.psc @@ -0,0 +1,6 @@ +Scriptname defaultIgnoreFriendlyHits extends ObjectReference +{this actor will always ignore friendly hits} + +event OnLoad() + IgnoreFriendlyHits(true) +endEvent \ No newline at end of file diff --git a/source/scripts/defaultinteriordoorshutscript.psc b/source/scripts/defaultinteriordoorshutscript.psc new file mode 100644 index 00000000..0997d697 --- /dev/null +++ b/source/scripts/defaultinteriordoorshutscript.psc @@ -0,0 +1,32 @@ +ScriptName DefaultInteriorDoorShutScript extends ObjectReference + +bool Property SkipBehaviorDuringQuestStages Auto +{Default: false; if true, do not close and lock while quest stage is between X and Y of QuestToWatch} + +Quest Property QuestToWatch Auto +{Default: None; which quest's stages to limit behavior during} + +Int Property SkipBehaviorAtStage = 0 Auto +{Default: 0; which stage of QuestToWatch should we start skipping closing and locking behavior?} + +int Property ResumeBehaviorAtStage = 0 Auto +{Default: 0; which stage of QuestToWatch should we resume closing and locking behavior?} + +Event OnOpen(ObjectReference akActionRef) + + if SkipBehaviorDuringQuestStages == True + int QuestStage = QuestToWatch.GetCurrentStageID() + if QuestStage >= SkipBehaviorAtStage && QuestStage < ResumeBehaviorAtStage +; debug.trace(self + "OnOpen() skipping closing and locking because quest stages prohibit.") + Return + EndIf + EndIf + + If (akActionRef != (Game.GetForm(0x14) as Actor)) +; debug.trace(self + "OnOpen() by Non-Player Actor. Waiting 3, then closing and locking.") + Utility.Wait(3) + Self.SetOpen(False) + Self.Lock() + EndIf + +EndEvent diff --git a/source/scripts/defaultlearnwordonact.psc b/source/scripts/defaultlearnwordonact.psc new file mode 100644 index 00000000..f006b53d --- /dev/null +++ b/source/scripts/defaultlearnwordonact.psc @@ -0,0 +1,24 @@ +scriptName defaultLearnWordonAct extends ObjectReference + +WordofPower Property myWord auto + +auto State LearnShout + EVENT onActivate(ObjectReference triggerRef) + Actor actorRef = triggerRef as Actor + if (actorRef == (Game.GetForm(0x14) as Actor)) + gotoState("Done") + game.teachWord(myWord) + ;debug.messagebox("You just learned the word: " + myWord) + endif + endEVENT +EndState + + +State Done + Event onActivate (ObjectReference triggerRef) + Actor actorRef = triggerRef as Actor + if (actorRef == (Game.GetForm(0x14) as Actor)) + ;debug.notification("You've already learned the word: " + myWord) + endif + endEVENT +EndState diff --git a/source/scripts/defaultmasterpackageweapondrawnscript.psc b/source/scripts/defaultmasterpackageweapondrawnscript.psc new file mode 100644 index 00000000..a8e4f9b1 --- /dev/null +++ b/source/scripts/defaultmasterpackageweapondrawnscript.psc @@ -0,0 +1,9 @@ +Scriptname DefaultMasterPackageWeaponDrawnScript extends Actor + +Actor Property mySelf auto hidden + +Event OnLoad() + mySelf = self as Actor + mySelf.SetActorValue("Variable10", 1) + mySelf.EvaluatePackage() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultmoveactortriggerscript.psc b/source/scripts/defaultmoveactortriggerscript.psc new file mode 100644 index 00000000..fb352f7b --- /dev/null +++ b/source/scripts/defaultmoveactortriggerscript.psc @@ -0,0 +1,38 @@ +Scriptname defaultMoveActorTriggerScript extends ObjectReference +{move any ACTOR that hits the trigger somewhere} + +ObjectReference Property MoveToMarker Auto +{where to move the actors} + +ObjectReference Property IgnoreMe1 Auto +{don't move this ref if it hits the trigger.} + +auto state waiting +EVENT onTriggerEnter(objectReference triggerRef) +; debug.trace(self + " onTriggerEnter " + triggerRef) + ; NOTE: ONLY MOVE ACTORS + Actor triggerActor = triggerRef as Actor + if (triggerActor && triggerActor != IgnoreMe1) + ; move the actor + triggerActor.MoveTo(MoveToMarker) + if bDispelAllSpells + triggerActor.DispelAllSpells() + endif + ; is this the setstage actor? + if triggerActor == SetStageActor + if SetStageQuest && StageToSet > -1 + SetStageQuest.SetCurrentStageID(StageToSet) + endif + endif + endif +endEVENT +endState + +Bool Property bDispelAllSpells = TRUE Auto +{ dispell all spells on actor when moving? } + +Actor Property SetStageActor Auto + +Quest Property SetStageQuest Auto + +Int Property StageToSet = -1 Auto diff --git a/source/scripts/defaultnoenemiesfollowdoorscript.psc b/source/scripts/defaultnoenemiesfollowdoorscript.psc new file mode 100644 index 00000000..a7b2a8b7 --- /dev/null +++ b/source/scripts/defaultnoenemiesfollowdoorscript.psc @@ -0,0 +1,36 @@ +Scriptname DefaultNoEnemiesFollowDoorScript extends ObjectReference +{Block activation by anyone other than the Player and their Followers to prevent interferance with scenes.} + +; factions that are allowed to use the door +Faction Property AllowDoorFaction01 Auto +Faction Property AllowDoorFaction02 Auto +Faction Property AllowDoorFaction03 Auto + +Faction Property PlayerFollowerFaction Auto +Faction Property CurrentFollowerFaction Auto + +Event OnInit() + BlockActivation() +EndEvent + +Event OnActivate(ObjectReference akActionRef) + ; only do this check if activation is blocked + if IsActivationBlocked() == false +; ;debug.trace(self + "OnActivate " + akActionRef + " - not blocked, normal activation") + return + endif + + if (akActionRef == (Game.GetForm(0x14) as Actor)) +; ;debug.trace(self + "OnActivate - player, allow activation") + Activate(akActionRef, true) + else + Actor actorRef = akActionRef as Actor +; ;debug.trace(self + "OnActivate - " + actorRef) + if (actorRef && (actorRef.isInFaction(AllowDoorFaction01) || actorRef.isInFaction(AllowDoorFaction02) || actorRef.isInFaction(AllowDoorFaction03) || actorRef.isInFaction(PlayerFollowerFaction) || actorRef.isInFaction(CurrentFollowerFaction) || actorRef.IsPlayerTeammate())) +; ;debug.trace(self + "OnActivate - " + actorRef + ": allow activation") + Activate(akActionRef, true) + else +; ;debug.trace(self + "OnActivate - " + actorRef + ": activation BLOCKED") + endif + endif +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultnofasttraveltriggerscript.psc b/source/scripts/defaultnofasttraveltriggerscript.psc new file mode 100644 index 00000000..da87dada --- /dev/null +++ b/source/scripts/defaultnofasttraveltriggerscript.psc @@ -0,0 +1,16 @@ +Scriptname DefaultNoFastTravelTriggerScript extends ObjectReference +{block fast travel while the player is in this trigger} + +import game + +EVENT onTriggerEnter(objectReference triggerRef) + if triggerRef == GetPlayer() + Game.EnableFastTravel(false) + endif +endEvent + +EVENT OnTriggerLeave(objectReference triggerRef) + if triggerRef == GetPlayer() + Game.EnableFastTravel(true) + endif +endEvent \ No newline at end of file diff --git a/source/scripts/defaultnofavoronload.psc b/source/scripts/defaultnofavoronload.psc new file mode 100644 index 00000000..59e6efde --- /dev/null +++ b/source/scripts/defaultnofavoronload.psc @@ -0,0 +1,6 @@ +Scriptname defaultNoFavorOnLoad extends ObjectReference +{sets the "no favor allowed" flag on the ref on load} + +event OnLoad() + SetNoFavorAllowed() +endEvent \ No newline at end of file diff --git a/source/scripts/defaultnofollowdoorscript.psc b/source/scripts/defaultnofollowdoorscript.psc new file mode 100644 index 00000000..8fc3045e --- /dev/null +++ b/source/scripts/defaultnofollowdoorscript.psc @@ -0,0 +1,51 @@ +Scriptname DefaultNoFollowDoorScript extends ObjectReference +{block activation by non-quest NPCs to keep followers out} + +Event OnInit() + + BlockActivation() + +EndEvent + +Event OnActivate(ObjectReference akActionRef) + ; only do this check if activation is blocked + if IsActivationBlocked() == false +; debug.trace(self + "OnActivate " + akActionRef + " - not blocked, normal activation") + return + endif + + + if (akActionRef == (Game.GetForm(0x14) as Actor)) +; debug.trace(self + "OnActivate - player, allow activation") + Activate(akActionRef, true) + else + Actor actorRef = akActionRef as Actor +; ;debug.trace(self + "OnActivate - " + actorRef) + if actorRef && (actorRef.isInFaction( AllowDoorFaction01) || actorRef.isInFaction(AllowDoorFaction02) || actorRef.isInFaction(AllowDoorFaction03) || (myQuest && myQuest.IsStageDone(myQuestStage) == 1)) +; debug.trace(self + "OnActivate - " + actorRef + ": allow activation") + Activate(akActionRef, true) + else +; debug.trace(self + "OnActivate - " + actorRef + ": activation BLOCKED") + If DoOnce == 0 + FollowerBlockedMessage.Show() + DoOnce = 1 + EndIf + endif + endif + +EndEvent + +; factions that are allowed to use the door +Faction Property AllowDoorFaction01 Auto + +Faction Property AllowDoorFaction02 Auto + +Faction Property AllowDoorFaction03 Auto + +Quest Property myQuest Auto + +Int Property myQuestStage Auto + +Message Property FollowerBlockedMessage Auto + +Int Property DoOnce Auto \ No newline at end of file diff --git a/source/scripts/defaultnpcruntotrig.psc b/source/scripts/defaultnpcruntotrig.psc new file mode 100644 index 00000000..574e5dd9 --- /dev/null +++ b/source/scripts/defaultnpcruntotrig.psc @@ -0,0 +1,82 @@ +scriptName defaultNPCrunToTRIG extends objectReference +{Linked NPC(s) on defaultMasterPackage will check out their linked runToWhenTriggered ref(s)} + +bool property runToPatrol auto +{Always run to patrol? (regardless of Player stealth.) DEFAULT: False} +bool property walkToPatrol auto +{Always run to patrol? (regardless of Player stealth.) DEFAULT: False} + +bool ranOnce +actor NPC +actor player +bool playerSneaky + +EVENT onLoad() + player = (Game.GetForm(0x14) as Actor) + NPC = getLinkedRef() as actor +endEVENT + +EVENT onTriggerEnter(objectReference actronaut) + ; trigger only on player entering + if actronaut == player && ranOnce == FALSE + ranOnce = TRUE + triggerNPC() + endif +endEVENT + +EVENT onActivate(objectReference actronaut) + ; including activate event support so we can trigger this from a door/lever/etc activated by player + if ranOnce == FALSE + ranOnce = TRUE + triggerNPC() + endif +endEVENT + +;====================================== +; This function is the meat. Declaring here so we can call from either event type +FUNCTION triggerNPC() + if stealthCheck() + ; player is sneaking and has better sneak, so WALK to the patrol + ; variable04 helps the package stack along via stack conditions in defaultMasterPackage + NPC.setActorValue("variable04", 1) + elseif !stealthCheck() + ; player wasn't sneaking or failed check, so RUN there. + NPC.setActorValue("variable04", 2) + endif + + ; politely ask NPC to evp package stack and realize he needs to build a path + NPC.evaluatePackage() + + ; set var04 to an invalid to avoid retracing steps + utility.wait(5) + NPC.setActorValue("variable04",3) +endFUNCTION + +;===================================== +; Breaking stealth check into separate function in case this needs changes +bool FUNCTION stealthCheck() + ; a very basic stealth check for run/walk check + ; TRUE return = player is "sneaky" so walk + ; FALSE retrun = player isn't sneaky, so run + ; first, an error checker + if runToPatrol == TRUE && walkToPatrol == TRUE +; debug.trace("ERROR: Run/Walk properties mutually exclusive. Setting both to false on "+self) + runToPatrol = FALSE + walkToPatrol = FALSE + endif + + ; return quickly if user has explicity chosen behavior + if runToPatrol == TRUE + return FALSE + elseif walkToPatrol == TRUE + return TRUE + endif + + if (Game.GetForm(0x14) as Actor).getActorValue("Sneak") >= NPC.getActorValue("Sneak") && player.isSneaking() == TRUE + ; player is sneaking and has higher skill than NPC, so walk + return FALSE + else + ; player is either not sneaky or worse at it than NPC + return TRUE + endif +endFUNCTION diff --git a/source/scripts/defaultonactivateblockactivation.psc b/source/scripts/defaultonactivateblockactivation.psc new file mode 100644 index 00000000..cf061388 --- /dev/null +++ b/source/scripts/defaultonactivateblockactivation.psc @@ -0,0 +1,6 @@ +scriptName defaultOnActivateBlockActivation extends ObjectReference +{ When this object is activated, block and ignore all further activations. Useful for a portcullis you don't want to close later, etc. } + +Event OnActivate(ObjectReference obj) + Self.BlockActivation(True) +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultonactivateblockplayeractivate.psc b/source/scripts/defaultonactivateblockplayeractivate.psc new file mode 100644 index 00000000..bbfc683b --- /dev/null +++ b/source/scripts/defaultonactivateblockplayeractivate.psc @@ -0,0 +1 @@ +Scriptname DefaultOnActivateBlockPlayerActivate extends ObjectReference diff --git a/source/scripts/defaultonactivatedisablelinkedref.psc b/source/scripts/defaultonactivatedisablelinkedref.psc new file mode 100644 index 00000000..c57384d7 --- /dev/null +++ b/source/scripts/defaultonactivatedisablelinkedref.psc @@ -0,0 +1,7 @@ +scriptName defaultOnActivateDisableLinkedRef extends ObjectReference + +Keyword property LinkedRefKeyword Auto + +EVENT onActivate(ObjectReference triggerRef) + Self.GetLinkedRef(LinkedRefKeyword).Disable() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultonactivateenablescript.psc b/source/scripts/defaultonactivateenablescript.psc new file mode 100644 index 00000000..b91c1875 --- /dev/null +++ b/source/scripts/defaultonactivateenablescript.psc @@ -0,0 +1,20 @@ +scriptName defaultOnActivateEnableScript extends ObjectReference + +import game +import debug +import utility + +ObjectReference Property RefToBeEnabled auto + +auto State WaitingToBeActivated + EVENT onActivate(ObjectReference triggerRef) + if triggerRef == getPlayer() as actor + RefToBeEnabled.enable() + gotoState("Activated") + endif + endEVENT +EndState + +State Activated + ;Do nothing +EndState \ No newline at end of file diff --git a/source/scripts/defaultonactivateevaluatepackage.psc b/source/scripts/defaultonactivateevaluatepackage.psc new file mode 100644 index 00000000..71106a53 --- /dev/null +++ b/source/scripts/defaultonactivateevaluatepackage.psc @@ -0,0 +1,19 @@ +scriptName defaultOnActivateEvaluatePackage extends Actor +{ +- Evaluate the actor's package when they're activated. +} + +bool property doOnce = False auto + +Auto State PreActivation + Event OnActivate(ObjectReference triggerRef) + Self.EvaluatePackage() + if (doOnce) + gotoState("PostActivation") + EndIf + EndEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultonactivatenonplayerenablescript.psc b/source/scripts/defaultonactivatenonplayerenablescript.psc new file mode 100644 index 00000000..68c9596e --- /dev/null +++ b/source/scripts/defaultonactivatenonplayerenablescript.psc @@ -0,0 +1,18 @@ +scriptName defaultOnActivateNonPlayerEnableScript extends ObjectReference + +import game +import debug +import utility + +ObjectReference Property RefToBeEnabled auto + +auto State WaitingToBeActivated + EVENT onActivate(ObjectReference triggerRef) + RefToBeEnabled.enable() + gotoState("Activated") + endEVENT +EndState + +State Activated + ;Do nothing +EndState \ No newline at end of file diff --git a/source/scripts/defaultoncellattachenable.psc b/source/scripts/defaultoncellattachenable.psc new file mode 100644 index 00000000..930db2cf --- /dev/null +++ b/source/scripts/defaultoncellattachenable.psc @@ -0,0 +1,6 @@ +scriptName defaultOnCellAttachEnable extends ObjectReference +{Enable this object when its cell is attached.} + +Event OnCellAttach() + Self.Enable() +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultondeathunequipall.psc b/source/scripts/defaultondeathunequipall.psc new file mode 100644 index 00000000..b936c506 --- /dev/null +++ b/source/scripts/defaultondeathunequipall.psc @@ -0,0 +1,5 @@ +Scriptname defaultOnDeathUnequipAll extends Actor + +EVENT onDying(actor akKiller) + unEquipAll() +endEVENT diff --git a/source/scripts/defaultonhitactivatelinkedref.psc b/source/scripts/defaultonhitactivatelinkedref.psc new file mode 100644 index 00000000..c30f4e06 --- /dev/null +++ b/source/scripts/defaultonhitactivatelinkedref.psc @@ -0,0 +1,23 @@ +ScriptName defaultOnHitActivateLinkedRef extends Actor +{Default script that lives on an actor. On hit, activate the specified linkedref.} + +import game +import debug + +bool property doOnce = false auto +keyword property linkKeyword auto +{if this has a linkedRef with this keyword, we will activate it once when hit} + +auto State waiting + Event onHit(objectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + (getLinkedRef(linkKeyword) as objectReference).activate(self) + if (doOnce) + GoToState("allDone") + EndIf + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultonhitchangeaggression.psc b/source/scripts/defaultonhitchangeaggression.psc new file mode 100644 index 00000000..69b36241 --- /dev/null +++ b/source/scripts/defaultonhitchangeaggression.psc @@ -0,0 +1,35 @@ +ScriptName defaultOnHitChangeAggression extends Actor +{Default script that lives on an actor. On hit, actor's aggression is changed} + +import game +import debug + +float property fAggression auto +{ +By default this property is set to 2 (very aggressive). +0 - Unaggressive - will not initiate combat +1 - Aggressive - will attack enemies on sight +2 - Very Aggressive - Will attack enemies and neutrals on sight +3 - Frenzied - Will attack anyone else +} +bool doOnce = false +keyword property linkKeyword auto +{if this has a linkedRef with this keyword, we will activate it once when hit} + +auto State waiting + Event onHit(objectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + self.SetActorValue("Aggression", fAggression) + gotoState ("allDone") + if DoOnce == false + if (GetLinkedRef(linkKeyword) as objectReference) + (getLinkedRef(linkKeyword) as objectReference).activate(self) + DoOnce = TRUE + endif + endif + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultonhitsetav.psc b/source/scripts/defaultonhitsetav.psc new file mode 100644 index 00000000..d2633e63 --- /dev/null +++ b/source/scripts/defaultonhitsetav.psc @@ -0,0 +1,22 @@ +ScriptName defaultOnHitSetAV extends Actor +{Default script that lives on an actor. On hit, sets an actor variable.} + +String property actorVariable Auto +int property value Auto +bool property playerOnly Auto + +auto State waiting + Event onHit(objectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (!playerOnly || akAggressor == (Game.GetForm(0x14) as Actor)) +; ;Debug.Trace("HIT: " + Self + " by " + akAggressor) + Self.SetActorValue(actorVariable, value) + Self.EvaluatePackage() + GoToState("allDone") + EndIf + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultonhitsetavrefalias.psc b/source/scripts/defaultonhitsetavrefalias.psc new file mode 100644 index 00000000..ade0476d --- /dev/null +++ b/source/scripts/defaultonhitsetavrefalias.psc @@ -0,0 +1,21 @@ +ScriptName defaultOnHitSetAVRefAlias extends ReferenceAlias +{Default script that lives on a RefAlias. On hit, sets an actor variable.} + +String property actorVariable Auto +int property value Auto +bool property playerOnly Auto + +auto State waiting + Event onHit(objectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (!playerOnly || akAggressor == (Game.GetForm(0x14) as Actor)) + Self.GetActorReference().SetActorValue(actorVariable, value) + Self.GetActorReference().EvaluatePackage() + GoToState("allDone") + EndIf + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultonloadremoveweapons.psc b/source/scripts/defaultonloadremoveweapons.psc new file mode 100644 index 00000000..475583e3 --- /dev/null +++ b/source/scripts/defaultonloadremoveweapons.psc @@ -0,0 +1,65 @@ +scriptName defaultOnLoadRemoveWeapons extends ObjectReference +{ Removes all weapons of the specified types from the current actor. A ton of properties here to allow removing all of the weapons that can emerge from a levelled list.} + +Import Game +Import Debug +Import Utility + +Weapon property WeaponToRemove1 Auto +Weapon property WeaponToRemove2 Auto +Weapon property WeaponToRemove3 Auto +Weapon property WeaponToRemove4 Auto +Weapon property WeaponToRemove5 Auto +Weapon property WeaponToRemove6 Auto +Weapon property WeaponToRemove7 Auto +Weapon property WeaponToRemove8 Auto +Weapon property WeaponToRemove9 Auto +Weapon property WeaponToRemove10 Auto +Weapon property WeaponToRemove11 Auto +Weapon property WeaponToRemove12 Auto +Weapon property WeaponToRemove13 Auto +Weapon property WeaponToRemove14 Auto +Weapon property WeaponToRemove15 Auto +Weapon property WeaponToRemove16 Auto +Weapon property WeaponToRemove17 Auto +Weapon property WeaponToRemove18 Auto +Weapon property WeaponToRemove19 Auto +Weapon property WeaponToRemove20 Auto +Weapon property WeaponToRemove21 Auto +Weapon property WeaponToRemove22 Auto +Weapon property WeaponToRemove23 Auto +Weapon property WeaponToRemove24 Auto +Weapon property WeaponToRemove25 Auto +Weapon property WeaponToRemove26 Auto +Weapon property WeaponToRemove27 Auto +Weapon property WeaponToRemove28 Auto +Weapon property WeaponToRemove29 Auto +Weapon property WeaponToRemove30 Auto + +Event OnLoad() + Self.RemoveItem(WeaponToRemove1, 1, True) + Self.RemoveItem(WeaponToRemove2, 1, True) + Self.RemoveItem(WeaponToRemove3, 1, True) + Self.RemoveItem(WeaponToRemove4, 1, True) + Self.RemoveItem(WeaponToRemove5, 1, True) + Self.RemoveItem(WeaponToRemove6, 1, True) + Self.RemoveItem(WeaponToRemove7, 1, True) + Self.RemoveItem(WeaponToRemove8, 1, True) + Self.RemoveItem(WeaponToRemove9, 1, True) + Self.RemoveItem(WeaponToRemove10, 1, True) + Self.RemoveItem(WeaponToRemove11, 1, True) + Self.RemoveItem(WeaponToRemove12, 1, True) + Self.RemoveItem(WeaponToRemove13, 1, True) + Self.RemoveItem(WeaponToRemove14, 1, True) + Self.RemoveItem(WeaponToRemove15, 1, True) + Self.RemoveItem(WeaponToRemove16, 1, True) + Self.RemoveItem(WeaponToRemove17, 1, True) + Self.RemoveItem(WeaponToRemove18, 1, True) + Self.RemoveItem(WeaponToRemove19, 1, True) + Self.RemoveItem(WeaponToRemove20, 1, True) + Self.RemoveItem(WeaponToRemove21, 1, True) + Self.RemoveItem(WeaponToRemove22, 1, True) + Self.RemoveItem(WeaponToRemove23, 1, True) + Self.RemoveItem(WeaponToRemove24, 1, True) + Self.RemoveItem(WeaponToRemove25, 1, True) +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultonreadsetqueststage.psc b/source/scripts/defaultonreadsetqueststage.psc new file mode 100644 index 00000000..def6cbbf --- /dev/null +++ b/source/scripts/defaultonreadsetqueststage.psc @@ -0,0 +1,14 @@ +Scriptname DefaultOnReadSetQuestStage extends ReferenceAlias + +int Property myStage Auto + +Quest Property myQuest Auto + +; Fixed by the USKP adding the GetStageDone check to prevent repeated quests + +event onRead() + if (myQuest.IsStageDone(myStage) == 0) + myQuest.SetCurrentStageID(myStage) + endif +endEvent + diff --git a/source/scripts/defaultonreadsetqueststagenotalias.psc b/source/scripts/defaultonreadsetqueststagenotalias.psc new file mode 100644 index 00000000..2aa4b1b2 --- /dev/null +++ b/source/scripts/defaultonreadsetqueststagenotalias.psc @@ -0,0 +1,14 @@ +Scriptname DefaultOnReadSetQuestStageNotAlias extends ObjectReference + +int Property myStage Auto + +Quest Property myQuest Auto + +; Fixed by the USKP adding the GetStageDone check to prevent repeated quests + +event onRead() + if (myQuest.IsStageDone(myStage) == 0) + myQuest.SetCurrentStageID(myStage) + endif +endEvent + diff --git a/source/scripts/defaultonresettestanddisable.psc b/source/scripts/defaultonresettestanddisable.psc new file mode 100644 index 00000000..c23c3dd0 --- /dev/null +++ b/source/scripts/defaultonresettestanddisable.psc @@ -0,0 +1,20 @@ +Scriptname defaultOnResetTestAndDisable extends ObjectReference +{On reset, disable this reference if its prereq stage has been set.} + +Quest property myQuest Auto +{Optionally, quest to test a stage on.} + +int property myStage Auto +{If this stage is set, disable the reference.} + +ReferenceAlias property myAlias Auto +{Optionally, a ReferenceAlias to clear if we're disabling this ref.} + + +Event OnReset() + if (myQuest == None || myQuest.IsStageDone(myStage)) + Self.Disable() + myAlias.Clear() ; USKP 2.0.3 - forcerefto cannot use a none. That's what clear() is for. + EndIf +EndEvent + \ No newline at end of file diff --git a/source/scripts/defaultopenlinkedreftrigger.psc b/source/scripts/defaultopenlinkedreftrigger.psc new file mode 100644 index 00000000..91a61dd0 --- /dev/null +++ b/source/scripts/defaultopenlinkedreftrigger.psc @@ -0,0 +1,17 @@ +scriptName defaultOpenLinkedRefTrigger extends ObjectReference +{ +- Opens the linked ref (eg. a door) when the player enters the trigger. This action is only performed once. +} + +Auto State PreActivation + Event onTriggerEnter(objectReference triggerRef) + if (triggerRef == (Game.GetForm(0x14) as Actor)) + (GetLinkedRef() as ObjectReference).SetOpen(True) + gotoState("PostActivation") + endif + endEvent +EndState + +STATE PostActivation + ;Do nothing +EndState diff --git a/source/scripts/defaultownzombie.psc b/source/scripts/defaultownzombie.psc new file mode 100644 index 00000000..b1f99ed5 --- /dev/null +++ b/source/scripts/defaultownzombie.psc @@ -0,0 +1,83 @@ +Scriptname defaultOwnZombie extends Actor +{Put this script on an actor, and point the properties to the actors you want him to own as zombies.} + +ObjectReference Property ZombieRef01 auto +{Point this property to the actor you want this specific reference to own as a zombie} +ObjectReference Property ZombieRef02 auto +{Point this property to the actor you want this specific reference to own as a zombie} +ObjectReference Property ZombieRef03 auto +{Point this property to the actor you want this specific reference to own as a zombie} +ObjectReference Property ZombieRef04 auto +{Point this property to the actor you want this specific reference to own as a zombie} +ObjectReference Property ZombieRef05 auto +{Point this property to the actor you want this specific reference to own as a zombie} +ObjectReference Property ZombieRef06 auto +{Point this property to the actor you want this specific reference to own as a zombie} + +EffectShader Property ReanimateFXShader auto +{Should autofill with effect of the same name} + +Faction Property AddZombiesToThisFaction auto +{Put the faction in here that you want the zombies to be a part of (so they are friends with their owner)} + +Bool Property HasBeenLoaded = FALSE auto hidden + + +;USKP 2.0.3 - Convert to OnLoad since OnCellLoad doesn't work reliably for this. +EVENT OnLoad() + if (HasBeenLoaded == FALSE) + ; Put the effects on the owned zombies. And whatever else happens when something becomes a zombie. + MakeZombie(ZombieRef01) + MakeZombie(ZombieRef02) + MakeZombie(ZombieRef03) + MakeZombie(ZombieRef04) + MakeZombie(ZombieRef05) + MakeZombie(ZombieRef06) + HasBeenLoaded = TRUE + else + ; Do nothing, since I've already been loaded + endif +endEVENT + + + +EVENT OnDeath(Actor akKiller) +; I've died, try to kill the zombies I own +; ;debug.Trace("DARYL - " + self + " I DIED!!!") + TryToKill(ZombieRef01) + TryToKill(ZombieRef02) + TryToKill(ZombieRef03) + TryToKill(ZombieRef04) + TryToKill(ZombieRef05) + TryToKill(ZombieRef06) +endEVENT + + + +Function MakeZombie(ObjectReference ActorToZombify) + if (ActorToZombify) + (ActorToZombify as Actor).StopCombatAlarm() ;USKP 2.0.3 + (ActorToZombify as Actor).RemoveFromAllFactions() + (ActorToZombify as Actor).AddToFaction(AddZombiesToThisFaction) + ReanimateFXShader.Play(ActorToZombify) + endif +endFunction + + + +Function TryToKill(ObjectReference ActorToKill) + if (ActorToKill) +; ;debug.Trace("DARYL - " + self + " Attempting to kill " + ActorToKill) + if ((ActorToKill as Actor).IsDead()) + ; We don't need to kill them, since they are dead. + ; We do need to make sure they don't have the effect on them though. +; ;debug.Trace("DARYL - " + self + ActorToKill + " Is already dead, disable his shader") + ReanimateFXShader.Stop(ActorToKill) + else + ; They aren't dead, so kill them and remove the zombie effect. +; ;debug.Trace("DARYL - " + self + ActorToKill + " isn't dead, kill him and disable his shader") + (ActorToKill as Actor).Kill() + ReanimateFXShader.Stop(ActorToKill) + endif + endif +endFunction \ No newline at end of file diff --git a/source/scripts/defaultplaceatmeonactivate.psc b/source/scripts/defaultplaceatmeonactivate.psc new file mode 100644 index 00000000..9890d39f --- /dev/null +++ b/source/scripts/defaultplaceatmeonactivate.psc @@ -0,0 +1,54 @@ +scriptName defaultPlaceAtMeOnActivate extends objectReference +; +; +;==================================== + +bool property doOnce = true auto +{if true do this only once + default == true} + +bool property placeAll = true auto +{default == true + if true place all things that have been set + if false place the first thing that we find set} + +explosion property placedExplosion auto +objectReference property placedObjectRef auto + +auto state waiting + + event onActivate(objectReference triggerRef) + goToState("DoNothing") + if placeAll + placeAllThings() + else + placeFirstThing() + endif + endEvent + +endState + +state DoNothing + event onActivate(objectReference triggerRef) + endEvent +endState + +function placeAllThings() + if placedExplosion + self.placeAtMe(placedExplosion) + endif + + if placedObjectRef + self.placeAtMe(placedExplosion) + endif +endFunction + +function placeFirstThing() + if placedExplosion + self.placeAtMe(placedExplosion) + elseif placedObjectRef + self.placeAtMe(placedExplosion) + else +; debug.Trace("could not find anything to place") + endif +endFunction diff --git a/source/scripts/defaultplayeffectonactivate.psc b/source/scripts/defaultplayeffectonactivate.psc new file mode 100644 index 00000000..b7511fef --- /dev/null +++ b/source/scripts/defaultplayeffectonactivate.psc @@ -0,0 +1,22 @@ +scriptName defaultPlayEffectOnActivate extends objectReference +; +; +;============================================================= + +string property anim01 = "playAnim01" auto +string property animEndEvent = "endAnim" auto +bool property waitForEndEvent = false auto +auto state waiting + event onActivate(objectReference triggerRef) + if waitForEndEvent + goToState("DoNothing") + playAnimationAndWait(anim01, animEndEvent) + goToState("waiting") + else + playAnimation(anim01) + endif + endEvent +endState + +state DoNothing +endState diff --git a/source/scripts/defaultquestrespawnscript.psc b/source/scripts/defaultquestrespawnscript.psc new file mode 100644 index 00000000..1bd6c001 --- /dev/null +++ b/source/scripts/defaultquestrespawnscript.psc @@ -0,0 +1,103 @@ +Scriptname defaultQuestRespawnScript extends Quest +{simple script to respawn aliases} + +import Utility +import debug + +; Respawn markers +ObjectReference Property RespawnMarker1 Auto + +ObjectReference Property RespawnMarker2 Auto + +ObjectReference Property RespawnMarker3 Auto + +ObjectReference Property RespawnMarkerFailsafe Auto +{this is where I will respawn if player has LOS +on other respawn points} + + +int Property startStage = 0 Auto +{Quest stage that needs to be set for respawning +to start} + +int Property doneStage = 0 Auto +{Respawning will stop if this stage is set} + + +int Property respawnTimeMin = 5 Auto +{min time between death and respawn} + +int Property respawnTimeMax = 10 Auto +{max time between death and respawn} + +int Property respawnPool = 0 Auto +{how many NPCs can be respawned? +0 = infinite +} + +int respawnCount = 0 +;how many NPCs have been respawned? + + +; this will always respawn (ignores all the checks and waits) +; (this is what TryToRespawn calls when ready to respawn) +function Respawn(ReferenceAlias aliasToRespawn) + ; respawn me and force me into my alias + ; totally unnecessary but nice randomization of which point to choose + int startingRoll = RandomInt(1, 3) +; traceConditional(self + " rolling for respawn spot... " + startingRoll, debugFlag.value) + ObjectReference marker + if startingRoll == 1 + marker = GetRespawnMarker(RespawnMarker1, RespawnMarker2, RespawnMarker3) + elseif startingRoll == 2 + marker = GetRespawnMarker(RespawnMarker2, RespawnMarker3, RespawnMarker1) + else + marker = GetRespawnMarker(RespawnMarker3, RespawnMarker1, RespawnMarker2) + endif +; traceConditional(self + " respawning at " + marker, debugFlag.value) + + ; only respawn if current alias is actually dead + if aliasToRespawn.GetActorReference().IsDead() + aliasToRespawn.ForceRefTo(marker.PlaceAtMe( aliasToRespawn.GetActorReference().GetActorBase() ) ) +; traceConditional(self + " Respawn done", debugFlag.value) + else +; traceConditional(self + " Didn't respawn - current actor isn't dead!", debugFlag.value) + endif +endFunction + +; call this when you want to try to respawn +function TryToRespawn(ReferenceAlias aliasToRespawn) +; traceConditional(self + " Respawn called by " + aliasToRespawn, debugFlag.value) + if ( startStage == 0 || (startStage > 0 && IsStageDone(startStage)) ) && ( doneStage == 0 || ( doneStage > 0 && !IsStageDone(doneStage) ) ) && ( respawnPool == 0 || (respawnPool > 0 && respawnCount < respawnPool ) ) + respawnCount = respawnCount + 1 + ; wait for respawn time +; traceConditional(self + " Waiting to respawn...", debugFlag.value) + Wait( RandomInt(respawnTimeMin, respawnTimeMax) ) +; traceConditional(self + " Finding a respawn spot", debugFlag.value) + if (aliasToRespawn as defaultAliasRespawnScript).bRespawningOn + Respawn(aliasToRespawn) + else +; traceConditional(self + " Didn't respawn " + aliasToRespawn + " - current actor no longer set to respawn", debugFlag.value) + endif + endif +endFunction + +ObjectReference function GetRespawnMarker(ObjectReference marker1, ObjectReference marker2, ObjectReference marker3) + ; find a spot the player can't see + actor playerActor = (Game.GetForm(0x14) as Actor) as actor + + if marker1 && playerActor.HasLOS(marker1) == False + return marker1 + elseif marker2 && playerActor.HasLOS(marker2) == False + return marker2 + elseif marker3 && playerActor.HasLOS(marker3) == False + return marker3 + else + return RespawnMarkerFailsafe + endif + +endFunction + +GlobalVariable Property debugFlag Auto +{optional - set a global to turn on debug trace +messages} diff --git a/source/scripts/defaultragdollattachpointscript.psc b/source/scripts/defaultragdollattachpointscript.psc new file mode 100644 index 00000000..bba91bc3 --- /dev/null +++ b/source/scripts/defaultragdollattachpointscript.psc @@ -0,0 +1,23 @@ +scriptName DefaultRagdollAttachPointSCRIPT extends objectReference + +objectReference property RHand auto +objectReference property LHand auto +objectReference property RFoot auto +objectReference property LFoot auto + +EVENT onLoad() + forceAddRagdollToWorld() + if RHand + game.addHavokBallAndSocketConstraint(self,"NPC R Hand [RHnd]",RHand,"AttachDummy",0,0,16) + endif + if LHand + game.addHavokBallAndSocketConstraint(self,"NPC L Hand [LHnd]",LHand,"AttachDummy",0,0,16) + endif + if RFoot + game.addHavokBallAndSocketConstraint(self,"NPC R Foot [Rft ]",RFoot,"AttachDummy") + endif + if LFoot + game.addHavokBallAndSocketConstraint(self,"NPC L Foot [Lft ]",LFoot,"AttachDummy") + endif + applyHavokImpulse(0,0,1,10) +endEVENT diff --git a/source/scripts/defaultresetreferenceonunload.psc b/source/scripts/defaultresetreferenceonunload.psc new file mode 100644 index 00000000..2ce6722e --- /dev/null +++ b/source/scripts/defaultresetreferenceonunload.psc @@ -0,0 +1,8 @@ +Scriptname DefaultResetReferenceOnUnload extends ReferenceAlias +{When this reference unloads, reset an object reference.} + +Event OnUnload() + ReferenceToReset.Reset() +endEvent + +ObjectReference Property ReferenceToReset Auto diff --git a/source/scripts/defaultrumbleonactivate.psc b/source/scripts/defaultrumbleonactivate.psc new file mode 100644 index 00000000..f79fb07a --- /dev/null +++ b/source/scripts/defaultrumbleonactivate.psc @@ -0,0 +1,44 @@ +scriptname defaultRumbleOnActivate extends objectreference +{Quick script that shakes camera and/or controller on activation. Customizable via properties} +;======================================================; + +import game ; import game script for access to shake functions +import utility ; import utility for access to wait() + +float property cameraIntensity = 0.25 auto +{How hard to shake camera, range:0-1} +float property shakeLeft = 0.25 auto +{How hard to shake left motor, range:0-1} +float property shakeRight = 0.25 auto +{How hard to shake right motor, range:0-1} +float property duration = 0.25 auto +{how long to shake controller} +bool property repeatable = true auto +{by default, this happens per activation} + +;======================================================; + +auto STATE active + EVENT onActivate(objectReference actronaut) + shakeCamera(NONE, cameraIntensity) + shakeController(shakeLeft,shakeRight,duration) + gotoState("busy") + wait(duration) + if repeatable == true + gotoSTATE("active") + else + gotoState("inactive") + endif + endEVENT +endSTATE +;======================================================; +STATE busy + EVENT onActivate(objectReference actronaut) + ; don't do anything until previous shake is over with + endEVENT +endSTATE +;======================================================; +STATE inactive + ; empty state. Script is dead now. +endSTATE +;======================================================; \ No newline at end of file diff --git a/source/scripts/defaultsealeddoor.psc b/source/scripts/defaultsealeddoor.psc new file mode 100644 index 00000000..706535a9 --- /dev/null +++ b/source/scripts/defaultsealeddoor.psc @@ -0,0 +1,16 @@ +ScriptName defaultSealedDoor extends ObjectReference +{Script for 'sealing' a door with a visual effect until the seal is removed by script.} + +EffectShader property DoorVFX Auto + +Event OnLoad() + Self.BlockActivation(True) +; Debug.Trace("Sealed!") + Utility.Wait(0.5) + DoorVFX.Play(Self) +EndEvent + +Function RemoveSeal() + Self.BlockActivation(False) + DoorVFX.Stop(Self) +EndFunction \ No newline at end of file diff --git a/source/scripts/defaultsetavonactivate.psc b/source/scripts/defaultsetavonactivate.psc new file mode 100644 index 00000000..c573a4ff --- /dev/null +++ b/source/scripts/defaultsetavonactivate.psc @@ -0,0 +1,34 @@ +ScriptName defaultSetAVonActivate extends Actor +{Default script that lives on an actor. When activated, its actor value (property) gets set to a value (property)} + +import game +import debug + +;USKP 2.0.1 - So if there's supposed to be defaults, it's usually helpful to attach them! +string property sActorVariable = "Variable01" auto +{By default, this property is set to Variable01. Set which actor variable to set as a string} + +float property fActorVariable = 1.0 auto +{By default this property is set to 1. Set what you want the actor variable to be changed to} + +bool property doOnce = True auto +{By default, this fires only once} + +auto State waiting + Event onActivate(ObjectReference triggerRef) + self.SetActorValue(sActorVariable, fACtorVariable) + self.evaluatePackage() + if (doOnce == true) + gotoState ("allDone") + else + gotoState ("waiting") + endif + + + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultsetavonload.psc b/source/scripts/defaultsetavonload.psc new file mode 100644 index 00000000..e86329a8 --- /dev/null +++ b/source/scripts/defaultsetavonload.psc @@ -0,0 +1,21 @@ +ScriptName defaultSetAVOnLoad extends Actor +{Default script that lives on an actor. When the actor loads, sets an Actor Value. Defaults to Aggression=1} + +string property sActorVariable = "Aggression" auto +{By default, this property is set to Aggression. Set which actor variable to set as a string} + +float property fActorVariable auto +{By default this property is set to 1. Set what you want the actor variable to be changed to} + +auto State waiting + Event OnLoad() + self.SetActorValue(sActorVariable, fACtorVariable) + self.evaluatePackage() + goToState("allDone") + endEvent +endState + +State allDone + ;do nothing +endState + \ No newline at end of file diff --git a/source/scripts/defaultsetenablestateonreset.psc b/source/scripts/defaultsetenablestateonreset.psc new file mode 100644 index 00000000..40d9e544 --- /dev/null +++ b/source/scripts/defaultsetenablestateonreset.psc @@ -0,0 +1,13 @@ +scriptName defaultSetEnableStateOnReset extends ObjectReference +{Enables or disables this object on reset.} + +bool property EnableOnReset = True Auto +{Should this object be enabled or disabled on reset? Default: TRUE} + +Event OnReset() + if (EnableOnReset) + Self.Enable() + Else + Self.Disable() + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultsetenablestateonresetlinkedref.psc b/source/scripts/defaultsetenablestateonresetlinkedref.psc new file mode 100644 index 00000000..cd959a3e --- /dev/null +++ b/source/scripts/defaultsetenablestateonresetlinkedref.psc @@ -0,0 +1,16 @@ +scriptName defaultSetEnableStateOnResetLinkedRef extends ObjectReference +{Enables or disables this object based on whether the specified linkedref is enabled or disabled.} + +Keyword property LinkedRefKeyword = None Auto +{Which linked ref should we check?} + +bool property OppositeOfParent = False Auto +{Should this object match the state of the linked ref, or be its opposite? Default: False (Enable if Enabled)} + +Event OnReset() + if ((Self.GetLinkedRef(LinkedRefKeyword).IsDisabled() && !OppositeOfParent) || (!Self.GetLinkedRef(LinkedRefKeyword).IsDisabled() && OppositeOfParent)) + Self.Disable() + Else + Self.Enable() + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultsetmultistagealiasscript.psc b/source/scripts/defaultsetmultistagealiasscript.psc new file mode 100644 index 00000000..c9a83742 --- /dev/null +++ b/source/scripts/defaultsetmultistagealiasscript.psc @@ -0,0 +1,103 @@ +Scriptname defaultsetMultiStageAliasScript extends ReferenceAlias +{generic script for one-shot quest stage update} + +import game +import debug + +int Property TriggerType = 0 Auto +{0 = OnActivate +1 = OnDeath +2 = OnHit +3 = OnTriggerEnter +... etc... +TODO: Convert to enum when we have them +} + + +int property prereqStage1 auto +{If this stage is active, resultStage1 will be set} + +int property resultStage1 auto +{ Stage to set if prereqStage1 is true } + +int property prereqStage2 auto +{If this stage is active, resultStage2 will be set} + +int property resultStage2 auto +{ Stage to set if prereqStage2 is true } + +int testState ; for debugging + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + if TriggerType == 0 + if triggerRef == getPlayer() + if GetOwningQuest().IsStageDone(prereqStage1) == 1 + GetOwningQuest().SetCurrentStageID(resultStage1) + gotoState("hasBeenTriggered") + endif + if GetOwningQuest().IsStageDone(prereqStage2) == 1 + GetOwningQuest().SetCurrentStageID(resultStage2) + gotoState("hasBeenTriggered") + endif + endif + endif + endEVENT + + Event OnDeath(Actor akKiller) + if TriggerType == 1 + if GetOwningQuest().IsStageDone(prereqStage1) == 1 + GetOwningQuest().SetCurrentStageID(resultStage1) + gotoState("hasBeenTriggered") + endif + if GetOwningQuest().IsStageDone(prereqStage2) == 1 + GetOwningQuest().SetCurrentStageID(resultStage2) + gotoState("hasBeenTriggered") + endif + endif + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace("OnHit in waitingForPlayer") + if TriggerType == 2 + if GetOwningQuest().IsStageDone(prereqStage1) == 1 + GetOwningQuest().SetCurrentStageID(resultStage1) + gotoState("hasBeenTriggered") + endif + if GetOwningQuest().IsStageDone(prereqStage2) == 1 + GetOwningQuest().SetCurrentStageID(resultStage2) + gotoState("hasBeenTriggered") + endif + endif + endEvent + + EVENT OnTriggerEnter(objectReference triggerRef) + if TriggerType == 3 + if GetOwningQuest().IsStageDone(prereqStage1) == 1 + GetOwningQuest().SetCurrentStageID(resultStage1) + gotoState("hasBeenTriggered") + endif + if GetOwningQuest().IsStageDone(prereqStage2) == 1 + GetOwningQuest().SetCurrentStageID(resultStage2) + gotoState("hasBeenTriggered") + endif + endif + endEVENT + +endSTATE + +STATE hasBeenTriggered + ; this state doesn't do anything + EVENT onActivate(objectReference triggerRef) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace("OnHit in hasBeenTriggered") + endEvent + + EVENT onTriggerEnter(objectReference triggerRef) + endEvent +endSTATE + +EVENT onActivate(objectReference triggerRef) +endEvent \ No newline at end of file diff --git a/source/scripts/defaultsetstageactorrefscript.psc b/source/scripts/defaultsetstageactorrefscript.psc new file mode 100644 index 00000000..18902a13 --- /dev/null +++ b/source/scripts/defaultsetstageactorrefscript.psc @@ -0,0 +1,117 @@ +Scriptname defaultSetStageActorRefScript extends Actor +{generic script for one-shot quest stage update on actor reference} + +import game +import debug + +int property stage auto +{ stage to set} + +quest Property myQuest auto +{ quest containing the stage you want to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +int testState ; for debugging + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + testForTrigger(triggerRef, 0) + endEVENT + + Event OnDeath(Actor akKiller) + testForTrigger(getPlayer(), 1) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in waitingForPlayer") + testForTrigger(akAggressor, 2) + endEvent + + EVENT OnTriggerEnter(objectReference triggerRef) + testForTrigger(triggerRef, 3) + endEVENT + + Event OnEquipped(Actor akActor) + testForTrigger(akActor, 4) + endEvent + + Event OnCombatStateChanged(Actor akTarget, int aeCombatState) + if aeCombatState != 0 ; 0 = not in combat, so non-zero means entered combat + ; FOR NOW, don't care if its player + testForTrigger(getPlayer(), 5) +; testForTrigger(akTarget, 5) + endIf + endEvent + + Event OnCellLoad() + testForTrigger((Game.GetForm(0x14) as Actor), 6) + endEvent + + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + ; trigger if object is added to player's inventory + testForTrigger(akNewContainer, 7) + ; trigger if object is removed from player's inventory + testForTrigger(akOldContainer, 8) + endEvent + + Event OnOpen(ObjectReference akActionRef) + testForTrigger((Game.GetForm(0x14) as Actor), 9) + endEvent + + Event onRead() +; debug.Trace(self + " has been read") + testForTrigger((Game.GetForm(0x14) as Actor), 10) + endEvent + +endSTATE + +STATE hasBeenTriggered + ; this state doesn't do anything + EVENT onActivate(objectReference triggerRef) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in hasBeenTriggered") + endEvent + + EVENT onTriggerEnter(objectReference triggerRef) + endEvent + + Event OnEquipped(Actor akActor) + endEvent +endSTATE + +EVENT onActivate(objectReference triggerRef) +endEvent + +function testForTrigger(objectReference triggerRef, int pTestTriggerType) +; debug.trace(self + " testForTrigger, triggerRef=" + triggerRef + ", triggerType=" + pTestTriggerType) + if TriggerType == pTestTriggerType + if triggerRef == getPlayer() + if prereqStageOPT == -1 || myQuest.IsStageDone(prereqStageOPT) == 1 +; debug.trace(self + " testforTrigger SUCCEEDED") + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endif +endFunction + +int Property TriggerType = 0 Auto +{0 = OnActivate +1 = OnDeath +2 = OnHit +3 = OnTriggerEnter +4 = OnEquipped +5 = OnCombatBegin +6 = OnCellLoad +7 = Added to player inventory +8 = Removed from player inventory +9 = OnOpen (for Doors and Containers) +10 = onRead (for books) + +... etc... +TODO: Convert to enum when we have them +} diff --git a/source/scripts/defaultsetstageactrefaliasscript.psc b/source/scripts/defaultsetstageactrefaliasscript.psc new file mode 100644 index 00000000..611d13be --- /dev/null +++ b/source/scripts/defaultsetstageactrefaliasscript.psc @@ -0,0 +1,36 @@ +scriptname defaultSetStageActRefAliasScript extends ReferenceAlias +{ this is a generic script for one-shot quest stage updates} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +float property delay = 0.0 auto +{ OPTIONAL: Amount of time to wait until setting the stage. Defaults to 0 } + +bool property requirePlayerActivation = True auto +{ Whether or not the player needs to be the one to activate this: Defaults to True} + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + if (triggerRef == getPlayer() as actor || !requirePlayerActivation) + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + utility.Wait(delay) + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultsetstageactscript.psc b/source/scripts/defaultsetstageactscript.psc new file mode 100644 index 00000000..746ce418 --- /dev/null +++ b/source/scripts/defaultsetstageactscript.psc @@ -0,0 +1,36 @@ +scriptname defaultSetStageActSCRIPT extends objectReference +{ this is a generic script for one-shot quest stage updates} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +float property delay = 0.0 auto +{ OPTIONAL: Amount of time to wait until setting the stage. Defaults to 0 } + +bool property requirePlayerActivation = True auto +{ Whether or not the player needs to be the one to activate this: Defaults to True} + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + if (triggerRef == getPlayer() as actor || !requirePlayerActivation) + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + utility.Wait(delay) + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultsetstagealiasscript.psc b/source/scripts/defaultsetstagealiasscript.psc new file mode 100644 index 00000000..cf9966b6 --- /dev/null +++ b/source/scripts/defaultsetstagealiasscript.psc @@ -0,0 +1,119 @@ +Scriptname defaultsetStageAliasScript extends ReferenceAlias +{generic script for one-shot quest stage update} + +import game +import debug + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +int testState ; for debugging + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + testForTrigger(triggerRef, 0) + endEVENT + + Event OnDeath(Actor akKiller) + testForTrigger(getPlayer(), 1) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in waitingForPlayer") + testForTrigger(akAggressor, 2) + endEvent + + EVENT OnTriggerEnter(objectReference triggerRef) + testForTrigger(triggerRef, 3) + endEVENT + + Event OnEquipped(Actor akActor) + testForTrigger(akActor, 4) + endEvent + + Event OnCombatStateChanged(Actor akTarget, int aeCombatState) + if aeCombatState != 0 ; 0 = not in combat, so non-zero means entered combat + ; FOR NOW, don't care if its player + testForTrigger(getPlayer(), 5) +; testForTrigger(akTarget, 5) + endIf + endEvent + + Event OnCellLoad() + testForTrigger((Game.GetForm(0x14) as Actor), 6) + endEvent + + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + ; trigger if object is added to player's inventory + testForTrigger(akNewContainer, 7) + ; trigger if object is removed from player's inventory + testForTrigger(akOldContainer, 8) + endEvent + + Event OnOpen(ObjectReference akActionRef) + testForTrigger((Game.GetForm(0x14) as Actor), 9) + endEvent + + Event onRead() +; debug.Trace(self + " has been read") + testForTrigger((Game.GetForm(0x14) as Actor), 10) + endEvent + + Event OnEnterBleedout() + testForTrigger((Game.GetForm(0x14) as Actor), 11) + endEvent + +endSTATE + +STATE hasBeenTriggered + ; this state doesn't do anything + EVENT onActivate(objectReference triggerRef) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in hasBeenTriggered") + endEvent + + EVENT onTriggerEnter(objectReference triggerRef) + endEvent + + Event OnEquipped(Actor akActor) + endEvent +endSTATE + +EVENT onActivate(objectReference triggerRef) +endEvent + +function testForTrigger(objectReference triggerRef, int pTestTriggerType) +; debug.trace(self + " testForTrigger, triggerRef=" + triggerRef + ", triggerType=" + pTestTriggerType) + if TriggerType == pTestTriggerType + if triggerRef == getPlayer() + if prereqStageOPT == -1 || GetOwningQuest().IsStageDone(prereqStageOPT) == 1 +; debug.trace(self + " testforTrigger SUCCEEDED") + GetOwningQuest().SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endif +endFunction + +int Property TriggerType = 0 Auto +{0 = OnActivate +1 = OnDeath +2 = OnHit +3 = OnTriggerEnter +4 = OnEquipped +5 = OnCombatBegin +6 = OnCellLoad +7 = Added to player inventory +8 = Removed from player inventory +9 = OnOpen (for Doors and Containers) +10 = onRead (for books) +11 = OnEnterBleedout + +... etc... +TODO: Convert to enum when we have them +} diff --git a/source/scripts/defaultsetstageonattacked.psc b/source/scripts/defaultsetstageonattacked.psc new file mode 100644 index 00000000..4e9afe79 --- /dev/null +++ b/source/scripts/defaultsetstageonattacked.psc @@ -0,0 +1,42 @@ +scriptName defaultSetStageOnAttacked extends actor +{Set stage on specificed quest when this actor is attacked. Optionally restricted to the player.} + +quest property myQST auto +{quest to set stage upon} + +int property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} + +int property minNumberHits = 1 auto +{Minimum number of hits required to trigger the stage set. Allows for some leniancy, if desired.} + +;Internally -- Actual number of hits received. +int actualHits = 0 + +int property StageToSet auto +{Set this stage when the actor dies} + +bool property playerOnly auto +{Set this stage only if the actor is attacked by the player.} + +auto STATE waiting +Event OnHit(ObjectReference aggressor, Form weap, Projectile proj, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (aggressor == (Game.GetForm(0x14) as Actor) || !playerOnly) + if preReqStage == -1 || myQST.IsStageDone(preReqStage) == TRUE + actualHits = actualHits + 1 + if (actualHits >= minNumberHits) + myQST.SetCurrentStageID(stageToSet) + gotoState("inactive") + EndIf + elseif preReqStage != -1 && myQST.IsStageDone(preReqStage) == FALSE +; debug.trace(self + " was killed before stage " + preReqStage + " of " + myQST + " was set") + else +; debug.trace(self + " got defaultSetStageOnAttacked script into a bad state!") + endif + EndIf +endEVENT +endSTATE + +STATE inactive +endSTATE + diff --git a/source/scripts/defaultsetstageonattackedrefalias.psc b/source/scripts/defaultsetstageonattackedrefalias.psc new file mode 100644 index 00000000..4b56fd97 --- /dev/null +++ b/source/scripts/defaultsetstageonattackedrefalias.psc @@ -0,0 +1,42 @@ +scriptName defaultSetStageOnAttackedRefAlias extends ReferenceAlias +{Set stage on specificed quest when this actor is attacked. Optionally restricted to the player.} + +quest property myQST auto +{quest to set stage upon} + +int property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} + +int property minNumberHits = 1 auto +{Minimum number of hits required to trigger the stage set. Allows for some leniancy, if desired.} + +;Internally -- Actual number of hits received. +int actualHits = 0 + +int property StageToSet auto +{Set this stage when the actor dies} + +bool property playerOnly auto +{Set this stage only if the actor is attacked by the player.} + +auto STATE waiting +Event OnHit(ObjectReference aggressor, Form weap, Projectile proj, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (aggressor == (Game.GetForm(0x14) as Actor) || !playerOnly) + if preReqStage == -1 || myQST.IsStageDone(preReqStage) == TRUE + actualHits = actualHits + 1 + if (actualHits >= minNumberHits) + myQST.SetCurrentStageID(stageToSet) + gotoState("inactive") + EndIf + elseif preReqStage != -1 && myQST.IsStageDone(preReqStage) == FALSE +; debug.trace(self + " was killed before stage " + preReqStage + " of " + myQST + " was set") + else +; debug.trace(self + " got defaultSetStageOnAttacked script into a bad state!") + endif + EndIf +endEVENT +endSTATE + +STATE inactive +endSTATE + diff --git a/source/scripts/defaultsetstageonclosebook.psc b/source/scripts/defaultsetstageonclosebook.psc new file mode 100644 index 00000000..4e461401 --- /dev/null +++ b/source/scripts/defaultsetstageonclosebook.psc @@ -0,0 +1,34 @@ +Scriptname defaultSetStageOnCloseBook extends ReferenceAlias +{SCRIPT NAME NO LONGER ACCURATE. This previously waited until the book was closed to set its stage, but was changed to match expected behavior of OnRead event.} +;============================================== +int Property preReqStage = -1 Auto +{OPTIONAL: If set, this stage must have been done to set the StageToSet} +int Property StageToSet Auto +{The stage to set the quest to when I've been read} +;============================================== +auto STATE ready + Event OnActivate(ObjectReference akActionRef) + stageHandling() + EndEvent + + Event OnEquipped(Actor akActor) + stageHandling() + endEvent + + Event OnRead() + stageHandling() + EndEvent +endSTATE + +STATE Done +endSTATE + +;============================================== + +FUNCTION stageHandling() + If GetOwningQuest().GetCurrentStageID() == preReqStage || preReqStage == -1 + ; utility.wait(0.1) + GetOwningQuest().SetCurrentStageID(StageToSet) + gotoState("Done") + Endif +endFUNCTION diff --git a/source/scripts/defaultsetstageonclosebooknotalias.psc b/source/scripts/defaultsetstageonclosebooknotalias.psc new file mode 100644 index 00000000..3425aeb9 --- /dev/null +++ b/source/scripts/defaultsetstageonclosebooknotalias.psc @@ -0,0 +1,36 @@ +Scriptname defaultSetStageOnCloseBookNotAlias extends ObjectReference +{SCRIPT NAME NO LONGER ACCURATE. This previously waited until the book was closed to set its stage, but was changed to match expected behavior of OnRead event.} + +int Property preReqStage = -1 Auto +{OPTIONAL: If set, this stage must have been done to set the StageToSet} +int Property StageToSet Auto +{The stage to set the quest to when I've been read} +Quest property MyQuest Auto +{Quest to set the stage on.} + +auto STATE ready + Event OnActivate(ObjectReference akActionRef) + stageHandling() + EndEvent + + Event OnEquipped(Actor akActor) + stageHandling() + endEvent + + Event OnRead() + stageHandling() + EndEvent +endSTATE + +STATE Done +endSTATE + +;============================================== + +FUNCTION stageHandling() + If (MyQuest.GetCurrentStageID() == preReqStage || preReqStage == -1) + ; utility.wait(0.1) + MyQuest.SetCurrentStageID(StageToSet) + gotoState("Done") + Endif +endFUNCTION diff --git a/source/scripts/defaultsetstageondeath.psc b/source/scripts/defaultsetstageondeath.psc new file mode 100644 index 00000000..32e48d1d --- /dev/null +++ b/source/scripts/defaultsetstageondeath.psc @@ -0,0 +1,26 @@ +scriptName defaultSetStageOnDeath extends actor +{Set stage on specificed quest when this actor dies. Pre-Requistite stage optional} + +quest property myQST auto +{quest to set stage upon} +int property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} +int property StageToSet auto +{Set this stage when the actor dies} + +auto STATE waiting + EVENT onDeath(actor killer) + if preReqStage == -1 || myQST.IsStageDone(preReqStage) == TRUE + myQST.SetCurrentStageID(stageToSet) + gotoState("inactive") + elseif preReqStage != -1 && myQST.IsStageDone(preReqStage) == FALSE +; debug.trace(self + " was killed before stage " + preReqStage + " of " + myQST + " was set") + else +; debug.trace(self + " got defaultSetSTageonDeath script into a bad state!") + endif + endEVENT +endSTATE + +STATE inactive +endSTATE + diff --git a/source/scripts/defaultsetstageondeathrefalias.psc b/source/scripts/defaultsetstageondeathrefalias.psc new file mode 100644 index 00000000..0b0d89e6 --- /dev/null +++ b/source/scripts/defaultsetstageondeathrefalias.psc @@ -0,0 +1,27 @@ +scriptName defaultSetStageOnDeathRefAlias extends referenceAlias +{Set stage on specificed quest when this actor dies. Pre-Requistite stage optional} + +quest property myQST auto +{quest to set stage upon} +int property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} +int property StageToSet auto +{Set this stage when the actor dies} + +auto STATE waiting + EVENT onDeath(actor killer) + ;USKP 2.0.5 - Added check to make sure quest is running if preReq is not -1. Best we can do here to reduce errors without breaking full functionality. + if( preReqStage == -1 || ( (myQST.IsStageDone(preReqStage) == True) && myQST.IsRunning() ) ) + myQST.SetCurrentStageID(stageToSet) + gotoState("inactive") + elseif preReqStage != -1 && myQST.IsStageDone(preReqStage) == FALSE +; debug.trace(self + " was killed before stage " + preReqStage + " of " + myQST + " was set") + else +; debug.trace(self + " got defaultSetSTageonDeath script into a bad state!") + endif + endEVENT +endSTATE + +STATE inactive +endSTATE + diff --git a/source/scripts/defaultsetstageonhitaliasscript.psc b/source/scripts/defaultsetstageonhitaliasscript.psc new file mode 100644 index 00000000..bebb5e50 --- /dev/null +++ b/source/scripts/defaultsetstageonhitaliasscript.psc @@ -0,0 +1,70 @@ +Scriptname defaultsetStageOnHitAliasScript extends ReferenceAlias +{generic script for one-shot quest stage update} + +import game +import debug + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +int testState ; for debugging + +bool property playerOnly = True auto + +auto STATE waitingForPlayer + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in waitingForPlayer") + testForTrigger(akAggressor, 2) + endEvent + +endSTATE + +STATE hasBeenTriggered + ; this state doesn't do anything + EVENT onActivate(objectReference triggerRef) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in hasBeenTriggered") + endEvent + + EVENT onTriggerEnter(objectReference triggerRef) + endEvent + + Event OnEquipped(Actor akActor) + endEvent +endSTATE + +EVENT onActivate(objectReference triggerRef) +endEvent + +function testForTrigger(objectReference triggerRef, int pTestTriggerType) +; debug.trace(self + " testForTrigger, triggerRef=" + triggerRef + ", triggerType=" + pTestTriggerType) + if TriggerType == pTestTriggerType + if (triggerRef == getPlayer() || !playerOnly) + if prereqStageOPT == -1 || GetOwningQuest().IsStageDone(prereqStageOPT) == 1 +; debug.trace(self + " testforTrigger SUCCEEDED") + GetOwningQuest().SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endif +endFunction + +int Property TriggerType = 2 Auto hidden +{0 = OnActivate +1 = OnDeath +2 = OnHit +3 = OnTriggerEnter +4 = OnEquipped +5 = OnCombatBegin +6 = OnCellLoad +7 = Added to player inventory +8 = Removed from player inventory + +... etc... +TODO: Convert to enum when we have them +} diff --git a/source/scripts/defaultsetstageonload.psc b/source/scripts/defaultsetstageonload.psc new file mode 100644 index 00000000..b8962624 --- /dev/null +++ b/source/scripts/defaultsetstageonload.psc @@ -0,0 +1,44 @@ +scriptname defaultSetStageOnLoad extends objectReference +{Sets a stage when this object loads.} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + + +auto STATE waitingForPlayer + Event OnLoad() + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + ; Start the quest just in case it isn't already running. + if myQuest.isRunning() == FALSE + bool check = myQuest.start() + ; do a quick check in case the quest could not be started + if !check +; debug.trace("ERROR: "+myQuest+" not started by "+self) + endif + endif + + ; do the actual business of setting the stage we want + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + if disableWhenDone + Disable() + EndIf + endif + EndEvent +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsetstageonopenscript.psc b/source/scripts/defaultsetstageonopenscript.psc new file mode 100644 index 00000000..dfbdce17 --- /dev/null +++ b/source/scripts/defaultsetstageonopenscript.psc @@ -0,0 +1,32 @@ +scriptname defaultSetStageOnOpenSCRIPT extends objectReference +{ this is a generic script for one-shot quest stage updates + put on a door, sets stage when door is opened by player} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + if triggerRef == getPlayer() as actor + if (self.GetOpenState() == 1 || self.GetOpenState() == 2) ; Open or opening + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endIf + endif + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE \ No newline at end of file diff --git a/source/scripts/defaultsetstageonplayeracquire.psc b/source/scripts/defaultsetstageonplayeracquire.psc new file mode 100644 index 00000000..5e489281 --- /dev/null +++ b/source/scripts/defaultsetstageonplayeracquire.psc @@ -0,0 +1,28 @@ +Scriptname defaultSetStageOnPlayerAcquire extends ReferenceAlias +{Sets a quest stage when this item is put in the player's inventory.} + +Quest Property myQST auto +{Quest upon which to set stage. Default is the Alias's owning quest.} +int Property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} +int Property StageToSet auto +{Set this stage when the player picks up this item.} + +auto State waiting + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + if ((Game.GetForm(0x14) as Actor) == akNewContainer) + Quest qst = myQST + if (qst == None) + qst = GetOwningQuest() + endif + ;USKP 2.0.5 - Added check to make sure quest is running if preReq is not -1. Best we can do here to reduce errors without breaking full functionality. + if ( (preReqStage == -1) || ( (qst.IsStageDone(preReqStage) == True) && qst.IsRunning() ) ) + qst.SetCurrentStageID(stageToSet) + GoToState("inactive") + endif + endif + EndEvent +EndState + +State inactive +EndState diff --git a/source/scripts/defaultsetstageonplayeracquireitem.psc b/source/scripts/defaultsetstageonplayeracquireitem.psc new file mode 100644 index 00000000..b0482b34 --- /dev/null +++ b/source/scripts/defaultsetstageonplayeracquireitem.psc @@ -0,0 +1,24 @@ +Scriptname defaultSetStageOnPlayerAcquireItem extends ObjectReference +{Sets a quest stage when this item is put in the player's inventory.} + +Quest Property myQST auto +{Quest upon which to set stage. Default is the Alias's owning quest.} +int Property preReqStage = -1 auto +{(Optional)Stage that must be set for this script to run. Default: NONE} +int Property StageToSet auto +{Set this stage when the player picks up this item.} + +auto State waiting + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + if ((Game.GetForm(0x14) as Actor) == akNewContainer) + ;USKP 2.0.5 - Added check to make sure quest is running if preReq is not -1. Best we can do here to reduce errors without breaking full functionality. + if ( (preReqStage == -1) || ( (myQST.IsStageDone(preReqStage) == True) && myQST.IsRunning() ) ) + myQST.SetCurrentStageID(stageToSet) + GoToState("inactive") + endif + endif + EndEvent +EndState + +State inactive +EndState diff --git a/source/scripts/defaultsetstageonreset.psc b/source/scripts/defaultsetstageonreset.psc new file mode 100644 index 00000000..15184ee2 --- /dev/null +++ b/source/scripts/defaultsetstageonreset.psc @@ -0,0 +1,44 @@ +scriptname defaultSetStageOnReset extends objectReference +{Sets a stage when this object resets.} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + + +auto STATE waitingForPlayer + Event OnReset() + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + ; Start the quest just in case it isn't already running. + if myQuest.isRunning() == FALSE + bool check = myQuest.start() + ; do a quick check in case the quest could not be started + if !check +; debug.trace("ERROR: "+myQuest+" not started by "+self) + endif + endif + + ; do the actual business of setting the stage we want + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + if disableWhenDone + Disable() + EndIf + endif + EndEvent +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsetstageonunload.psc b/source/scripts/defaultsetstageonunload.psc new file mode 100644 index 00000000..c7456a70 --- /dev/null +++ b/source/scripts/defaultsetstageonunload.psc @@ -0,0 +1,44 @@ +scriptname defaultSetStageOnUnload extends objectReference +{Sets a stage when this object unloads.} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + + +auto STATE waitingForPlayer + Event OnUnload() + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + ; Start the quest just in case it isn't already running. + if myQuest.isRunning() == FALSE + bool check = myQuest.start() + ; do a quick check in case the quest could not be started + if !check +; debug.trace("ERROR: "+myQuest+" not started by "+self) + endif + endif + + ; do the actual business of setting the stage we want + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + if disableWhenDone + Disable() + EndIf + endif + EndEvent +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsetstagerefscript.psc b/source/scripts/defaultsetstagerefscript.psc new file mode 100644 index 00000000..98f7efe7 --- /dev/null +++ b/source/scripts/defaultsetstagerefscript.psc @@ -0,0 +1,117 @@ +Scriptname defaultsetStageRefScript extends ObjectReference +{generic script for one-shot quest stage update on references} + +import game +import debug + +int property stage auto +{ stage to set} + +quest Property myQuest auto +{ quest containing the stage you want to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +int testState ; for debugging + +auto STATE waitingForPlayer + EVENT onActivate(objectReference triggerRef) + testForTrigger(triggerRef, 0) + endEVENT + + ;Event OnDeath(Actor akKiller) ;ACTOR ONLY EVENT + ;testForTrigger(getPlayer(), 1) + ;endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in waitingForPlayer") + testForTrigger(akAggressor, 2) + endEvent + + EVENT OnTriggerEnter(objectReference triggerRef) + testForTrigger(triggerRef, 3) + endEVENT + ;ACTOR ONLY EVENT + ;Event OnEquipped(Actor akActor) + ; testForTrigger(akActor, 4) + ;endEvent + ;ACTOR ONLY EVENT + ;Event OnCombatStateChanged(Actor akTarget, int aeCombatState) + ; if aeCombatState != 0 ; 0 = not in combat, so non-zero means entered combat + ; ; FOR NOW, don't care if its player + ; testForTrigger(getPlayer(), 5) + ; testForTrigger(akTarget, 5) + ; endIf + ;endEvent + + Event OnCellLoad() + testForTrigger((Game.GetForm(0x14) as Actor), 6) + endEvent + + Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + ; trigger if object is added to player's inventory + testForTrigger(akNewContainer, 7) + ; trigger if object is removed from player's inventory + testForTrigger(akOldContainer, 8) + endEvent + + Event OnOpen(ObjectReference akActionRef) + testForTrigger((Game.GetForm(0x14) as Actor), 9) + endEvent + + Event onRead() +; debug.Trace(self + " has been read") + testForTrigger((Game.GetForm(0x14) as Actor), 10) + endEvent + +endSTATE + +STATE hasBeenTriggered + ; this state doesn't do anything + EVENT onActivate(objectReference triggerRef) + endEvent + + Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + ;trace(self + " OnHit in hasBeenTriggered") + endEvent + + EVENT onTriggerEnter(objectReference triggerRef) + endEvent + + Event OnEquipped(Actor akActor) + endEvent +endSTATE + +EVENT onActivate(objectReference triggerRef) +endEvent + +function testForTrigger(objectReference triggerRef, int pTestTriggerType) +; debug.trace(self + " testForTrigger, triggerRef=" + triggerRef + ", triggerType=" + pTestTriggerType) + if TriggerType == pTestTriggerType + if triggerRef == getPlayer() + if prereqStageOPT == -1 || myQuest.IsStageDone(prereqStageOPT) == 1 +; debug.trace(self + " testforTrigger SUCCEEDED") + myQuest.SetCurrentStageID(stage) + gotoState("hasBeenTriggered") + endif + endif + endif +endFunction + +int Property TriggerType = 0 Auto +{0 = OnActivate +N/A = OnDeath (ACTOR ONLY - Must use "defaultSetStageActorRef" script) +N/A = OnHit (ACTOR ONLY - Must use "defaultSetStageActorRef" script) +3 = OnTriggerEnter +N/A = OnEquipped (ACTOR ONLY - Must use "defaultSetStageActorRef" script) +5 = OnCombatBegin +6 = OnCellLoad +7 = Added to player inventory +8 = Removed from player inventory +9 = OnOpen (for Doors and Containers) +10 = onRead (for books) + +... etc... +TODO: Convert to enum when we have them +} \ No newline at end of file diff --git a/source/scripts/defaultsetstagetrigonleavescript.psc b/source/scripts/defaultsetstagetrigonleavescript.psc new file mode 100644 index 00000000..5015facb --- /dev/null +++ b/source/scripts/defaultsetstagetrigonleavescript.psc @@ -0,0 +1,52 @@ +Scriptname defaultSetStageTrigOnLeaveSCRIPT extends ObjectReference +{this is a generic script for one-shot quest stage updates} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +bool property doOnce = True auto +{Set the stage only once.} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + + +auto STATE waitingForPlayer + EVENT onTriggerLeave(objectReference triggerRef) + if triggerRef == getPlayer() as actor + ; check to see if a pre-req stage was specificed and if it's been met + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + ; Start the quest just in case it isn't already running. + if myQuest.isRunning() == FALSE + bool check = myQuest.start() + ; do a quick check in case the quest could not be started + if !check +; debug.trace("ERROR: "+myQuest+" not started by "+self) + endif + endif + + ; do the actual business of setting the stage we want + myQuest.SetCurrentStageID(stage) + if doOnce + gotoState("hasBeenTriggered") + endif + if disableWhenDone + Disable() + endif + endif + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsetstagetrigspecificactor.psc b/source/scripts/defaultsetstagetrigspecificactor.psc new file mode 100644 index 00000000..baf397c8 --- /dev/null +++ b/source/scripts/defaultsetstagetrigspecificactor.psc @@ -0,0 +1,50 @@ +Scriptname defaultSetStageTRIGSpecificActor extends ObjectReference +{trigger looking for a particular base actor + to set a quest stage +} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +ActorBase property TriggerActor auto +{actor that trigger is looking for} + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + +bool property onlyOnce = true auto +{ stage will be set only once. Defaults to true } + +auto STATE waitingForActor + EVENT onTriggerEnter(objectReference triggerRef) + ; check for correct actor + actor actorRef = triggerRef as actor + if actorRef != None && actorRef.GetActorBase() == TriggerActor + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + myQuest.SetCurrentStageID(stage) + if onlyOnce + gotoState("hasBeenTriggered") + endif + if disableWhenDone + Disable() + endif + ;trace(self+" triggered by "+actorRef) + endif + else + ;trace(self+" didn't trigger for base actor " + actorRef.GetActorBase() + " <> " + TriggerActor) + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsetstagetrigspecificfaction.psc b/source/scripts/defaultsetstagetrigspecificfaction.psc new file mode 100644 index 00000000..a4ea7cd1 --- /dev/null +++ b/source/scripts/defaultsetstagetrigspecificfaction.psc @@ -0,0 +1,50 @@ +Scriptname defaultSetStageTRIGSpecificFaction extends ObjectReference +{trigger looking for a particular base actor + to set a quest stage +} + +import game +import debug + +quest property myQuest auto +{ quest to call SetStage on} + +int property stage auto +{ stage to set} + +int property prereqStageOPT = -1 auto +{ OPTIONAL: stage that must be set for this trigger to fire } + +Faction property TriggerFaction auto +{faction that trigger is looking for} + +bool property disableWhenDone = true auto +{ disable myself after I've been triggered. Defaults to true } + +bool property onlyOnce = true auto +{ stage will be set only once. Defaults to true } + +auto STATE waitingForActor + EVENT onTriggerEnter(objectReference triggerRef) + ; check for correct actor + actor actorRef = triggerRef as actor + if actorRef != None && actorRef.IsInFaction(TriggerFaction) + if prereqStageOPT == -1 || MyQuest.IsStageDone(prereqStageOPT) == 1 + myQuest.SetCurrentStageID(stage) + if onlyOnce + gotoState("hasBeenTriggered") + endif + if disableWhenDone + Disable() + endif + ;trace(self+" triggered by "+actorRef) + endif + else + ;trace(self+" didn't trigger for actor " + actorRef) + endif + endEVENT +endSTATE + +STATE hasBeenTriggered + ; this is an empty state. +endSTATE diff --git a/source/scripts/defaultsoundcontrolscript.psc b/source/scripts/defaultsoundcontrolscript.psc new file mode 100644 index 00000000..91069737 --- /dev/null +++ b/source/scripts/defaultsoundcontrolscript.psc @@ -0,0 +1,63 @@ +Scriptname DefaultSoundControlScript extends ObjectReference + +;SCRIPT MANAGED BY jduvall +;*** PLEASE DO NOT EDIT, LET ME KNOW IF YOU NEED MORE OR DIFFERENT FUNCTIONALITY *** + +;USED BY THESE OBJECTS: +;DA02Pillar + + +string Property SoundMarker1Name auto +string Property SoundMarker2Name auto +string Property SoundMarker3Name auto + +Sound Property SoundMarker1 Auto +Sound Property SoundMarker2 Auto +Sound Property SoundMarker3 Auto + +int instance1 +int instance2 +int instance3 + +function playSoundByName(string soundName, ObjectReference ObjectToPlayAt = None) + HandleSoundByName(soundName, true, ObjectToPlayAt) +EndFunction + +function stopSoundByName(string soundName, ObjectReference ObjectToPlayAt = None) + HandleSoundByName(soundName, false, ObjectToPlayAt) +EndFunction + + +function HandleSoundByName(string soundName, bool PlaySound, ObjectReference ObjectToPlayAt = None) + + if ObjectToPlayAt == None + ObjectToPlayAt = Self + EndIf + + If soundName == SoundMarker1Name + if PlaySound + instance1 = SoundMarker1.play(ObjectToPlayAt) + Else + Sound.stopInstance(instance1) + EndIf + + ElseIf soundName == SoundMarker2Name + if PlaySound + instance2 = SoundMarker2.play(ObjectToPlayAt) + Else + Sound.stopInstance(instance2) + EndIf + + ElseIf soundName == SoundMarker3Name + if PlaySound + instance3 = SoundMarker3.play(ObjectToPlayAt) + Else + Sound.stopInstance(instance3) + EndIf + + Else +; debug.trace(self + "DefaultSoundControlScript HandleSoundByName() did not find a recondnized soundName, found: " + soundName, 1) + + EndIf + +EndFunction diff --git a/source/scripts/defaultstartsceneaterdelaytrigscript.psc b/source/scripts/defaultstartsceneaterdelaytrigscript.psc new file mode 100644 index 00000000..a5320ea1 --- /dev/null +++ b/source/scripts/defaultstartsceneaterdelaytrigscript.psc @@ -0,0 +1,49 @@ +Scriptname defaultStartSceneAterDelayTrigScript extends ObjectReference +{starts the specified scene (after a delay) when triggered by the trigger actor} + + +Scene Property SceneToStart Auto +{scene to start} + +int Property SecondsToDelay auto +{how long to delay} + +bool Property DoOnce = true Auto +{set to true if you want this trigger to fire only once +false means it will try to start the scene each time +the trigger actor enters it +} + +objectReference property triggerActor auto +{by default, the player} + +auto state waiting +EVENT onTriggerEnter(objectReference actronaut) + if (triggerActor == None || actronaut as actor == triggerActor) + if (PrereqQuest == None || prereqStage == -1 || PrereqQuest.IsStageDone(prereqStage)) + Utility.Wait(SecondsToDelay) + SceneToStart.Start() + tempTriggered = true + if DoOnce + gotoState("done") + disable() + delete() + endif + endif + endif +endEVENT +endState + +state done +; do nothing +endState + +Quest Property PrereqQuest = None Auto +{optional prereq quest & stage} + +int Property prereqStage = -1 Auto +{optional prereq quest & stage + -1 = no prereq stage +} + +bool tempTriggered = false diff --git a/source/scripts/defaultstartsceneifnocombattrigscript.psc b/source/scripts/defaultstartsceneifnocombattrigscript.psc new file mode 100644 index 00000000..0dcfadbb --- /dev/null +++ b/source/scripts/defaultstartsceneifnocombattrigscript.psc @@ -0,0 +1,47 @@ +Scriptname defaultStartSceneIfNoCombatTrigScript extends ObjectReference +{starts the specified scene when triggered by the trigger actor, if they are not +currently in combat} + +Scene Property SceneToStart Auto +{scene to start} + +bool Property DoOnce = true Auto +{set to true if you want this trigger to fire only once +false means it will try to start the scene each time +the trigger actor enters it +} + +objectReference property triggerActor auto +{by default, the player} + +auto state waiting +EVENT onTriggerEnter(objectReference actronaut) + if ((triggerActor == None && actronaut == (Game.GetForm(0x14) as Actor)) || actronaut as actor == triggerActor) + if (!(actronaut as actor).IsInCombat()) + if (PrereqQuest == None || prereqStage == -1 || PrereqQuest.IsStageDone(prereqStage)) + Utility.Wait(1) + SceneToStart.Start() + tempTriggered = true + if DoOnce + gotoState("done") + self.delete() + endif + endif + endif + endif +endEVENT +endState + +state done +; do nothing +endState + +Quest Property PrereqQuest = None Auto +{optional prereq quest & stage} + +int Property prereqStage = -1 Auto +{optional prereq quest & stage + -1 = no prereq stage +} + +bool tempTriggered = false diff --git a/source/scripts/defaultstartsceneonaliasdeath.psc b/source/scripts/defaultstartsceneonaliasdeath.psc new file mode 100644 index 00000000..3d81ae20 --- /dev/null +++ b/source/scripts/defaultstartsceneonaliasdeath.psc @@ -0,0 +1,11 @@ +Scriptname defaultStartSceneOnAliasDeath extends ReferenceAlias +{Starts a scene if the creature in this alias is killed be the player} + +;Properties +Scene Property SceneToStart Auto + +Event OnDeath(Actor akKiller) + if (akKiller == (Game.GetForm(0x14) as Actor)) + SceneToStart.Start() + endif +endEvent \ No newline at end of file diff --git a/source/scripts/defaultstartscenescript.psc b/source/scripts/defaultstartscenescript.psc new file mode 100644 index 00000000..319d1610 --- /dev/null +++ b/source/scripts/defaultstartscenescript.psc @@ -0,0 +1,33 @@ +Scriptname defaultStartSceneScript extends ObjectReference +{starts the specified scene when triggered by the trigger actor} + +Scene Property SceneToStart Auto +{scene to start} + +bool Property DoOnce = true Auto +{set to true if you want this trigger to fire only once +false means it will try to start the scene each time +the trigger actor enters it +} + +objectReference property triggerActor auto +{by default, the player} + +EVENT onActivate(objectReference actronaut) + if (triggerActor == None || actronaut as actor == triggerActor) + if (PrereqQuest == None || prereqStage == -1 || PrereqQuest.IsStageDone(prereqStage)) + SceneToStart.Start() + if DoOnce + self.delete() + endif + endif + endif +endEVENT + +Quest Property PrereqQuest = None Auto +{optional prereq quest & stage} + +int Property prereqStage = -1 Auto +{optional prereq quest & stage + -1 = no prereq stage +} \ No newline at end of file diff --git a/source/scripts/defaultstartscenetrigaliasscript.psc b/source/scripts/defaultstartscenetrigaliasscript.psc new file mode 100644 index 00000000..cbe59c98 --- /dev/null +++ b/source/scripts/defaultstartscenetrigaliasscript.psc @@ -0,0 +1,36 @@ +Scriptname defaultStartSceneTrigAliasScript extends ObjectReference +{starts the specified scene when triggered by the trigger alias} + +Scene Property SceneToStart Auto +{scene to start} + +bool Property DoOnce = true Auto +{set to true if you want this trigger to fire only once +false means it will try to start the scene each time +the trigger actor enters it +} + +ReferenceAlias property triggerActor auto + +EVENT onTriggerEnter(objectReference actronaut) + if (triggerActor == None) + return + endif + + if (actronaut == triggerActor.GetReference()) + if (PrereqQuest == None || prereqStage == -1 || PrereqQuest.IsStageDone(prereqStage)) + SceneToStart.Start() + if DoOnce + self.delete() + endif + endif + endif +endEVENT + +Quest Property PrereqQuest = None Auto +{optional prereq quest & stage} + +int Property prereqStage = -1 Auto +{optional prereq quest & stage + -1 = no prereq stage +} \ No newline at end of file diff --git a/source/scripts/defaultstartscenetrigscript.psc b/source/scripts/defaultstartscenetrigscript.psc new file mode 100644 index 00000000..fc5b6a65 --- /dev/null +++ b/source/scripts/defaultstartscenetrigscript.psc @@ -0,0 +1,45 @@ +Scriptname defaultStartSceneTrigScript extends ObjectReference +{starts the specified scene when triggered by the trigger actor} + +Scene Property SceneToStart Auto +{scene to start} + +bool Property DoOnce = true Auto +{set to true if you want this trigger to fire only once +false means it will try to start the scene each time +the trigger actor enters it +} + +objectReference property triggerActor auto +{by default, the player} + +auto state waiting +EVENT onTriggerEnter(objectReference actronaut) + if (triggerActor == None || actronaut as actor == triggerActor) + ;USKP 2.0.4 - Added sanity check to prevent it from trying to start scenes for non-running quests. + if (PrereqQuest == None || prereqStage == -1 || (PrereqQuest.IsRunning() && PrereqQuest.IsStageDone(prereqStage)) ) + SceneToStart.Start() + tempTriggered = true + if DoOnce + gotoState("done") + disable() + delete() + endif + endif + endif +endEVENT +endState + +state done +; do nothing +endState + +Quest Property PrereqQuest = None Auto +{optional prereq quest & stage} + +int Property prereqStage = -1 Auto +{optional prereq quest & stage + -1 = no prereq stage +} + +bool tempTriggered = false diff --git a/source/scripts/defaultstopsceneonhit.psc b/source/scripts/defaultstopsceneonhit.psc new file mode 100644 index 00000000..399aa383 --- /dev/null +++ b/source/scripts/defaultstopsceneonhit.psc @@ -0,0 +1,10 @@ +scriptname defaultStopSceneOnHit extends ReferenceAlias + +Scene property sceneToStop Auto +bool property playerOnly Auto + +Event onHit(objectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + if (!playerOnly || akAggressor == (Game.GetForm(0x14) as Actor)) + sceneToStop.Stop() + EndIf +EndEvent \ No newline at end of file diff --git a/source/scripts/defaultteleportability.psc b/source/scripts/defaultteleportability.psc new file mode 100644 index 00000000..f11eff5a --- /dev/null +++ b/source/scripts/defaultteleportability.psc @@ -0,0 +1,104 @@ +scriptName defaultTeleportAbility extends activeMagicEffect +{Attempt at a generic script for NPCs to teleport to XXX markers when threatened by melee} + +import game +import utility + +;VFX +Activator property SummonFX Auto + +;Summon parameters +activator property teleportBase auto +{Base object to search for as a teleport point} +float property fSearchRadius = 1600.0 auto +{How far near me to search for teleport points? DEFAULT = 768u} +int property iMinToTeleport = 2 auto +{Min # of hits I'll take before teleporting. DEFAULT = 2} +int property iMaxToTeleport = 4 auto +{Max # of hits I'll take before teleporting. DEFAULT = 4} +effectShader property fadeOutFX auto +effectShader property fadeInFX auto +visualEffect property TrailFX auto +;{Let's try some trailing FX to show where I'm going to pop out} + +;Internal variables. +bool combatStarted +int hitCount +ObjectReference teleportGoal +ObjectReference player +actor caster +objectReference casterRef +bool inBleedout +objectReference opponent + +Event OnEffectStart(Actor akTarget, Actor akCaster) + player = (Game.GetForm(0x14) as Actor) + caster = akCaster + casterRef = (caster as ObjectReference) +endEVENT + +;Every 2 hits, the Caller teleports. +Event OnHit(ObjectReference akAggressor, Form weap, Projectile proj, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) + opponent = akAggressor + int hitTolerance = RandomInt(iMinToTeleport, iMaxToTeleport) + hitCount = hitCount + 1 + if (hitCount > hitTolerance && !caster.IsDead()) + hitCount = 0 + if inBleedout == FALSE && caster.isDead() == FALSE + Teleport() + endif + EndIf + + ; additional check - seen instances where NPC with this ability would not die! + if Caster.getActorValue("Health") < 0 + caster.kill() +; debug.trace("teleport NPC killed by self (HP<0 safety net): "+caster) + endif + +EndEvent + +Event Teleport() + + ;Where's the Caller going? + int i = 0 ; incrementer for while + int maxSearch = 10 ; limit number of while recursions + while i < maxSearch + teleportGoal = FindRandomReferenceOfTypeFromRef(teleportBase, casterRef, fSearchRadius) + if teleportGoal.getDistance(opponent) < 512 || (player as actor).hasLoS(teleportGoal) == FALSE +; ;debug.trace(caster.getActorBase()+" found but doesn't prefer "+teleportGoal) + ; this teleport marker isn't the best, but hold onto it as a backup option + ; therefore don't kick out of the loop just yet + elseif teleportGoal.getDistance(opponent) > 512 || (player as actor).hasLoS(teleportGoal) == TRUE + ; if we found a teleport marker that works, just use it! +; ;debug.trace(caster.getActorBase()+" found a good goal and kicking out of while loop "+teleportGoal) + i = maxSearch + endif + i += 1 +; ;debug.trace("While Recursion #"+i+" on "+self) + endWhile + + + ;Perform the swap. + ;casterRef.Disable() + fadeOutFX.play(casterRef) + caster.setGhost(TRUE) + objectReference previousLoc = casterRef.PlaceAtMe(SummonFX) + Utility.Wait(0.5) + + TrailFX.Play(previousLoc, 0.5, teleportGoal) + + casterRef.MoveTo(teleportGoal) + casterRef.PlaceAtMe(SummonFX) + Utility.Wait(0.5) + + ;casterRef.Enable() + fadeOutFX.stop(casterRef) + caster.setGhost(FALSE) + caster.evaluatePackage() + caster.startCombat(opponent as actor) +EndEvent + +EVENT onEnterBleedout() + inBleedout = TRUE + ; For now never reset this boolean. Considering it part of the flow that bleeding out turns the ability off +endEVENT diff --git a/source/scripts/defaulttoggleselfonactivate.psc b/source/scripts/defaulttoggleselfonactivate.psc new file mode 100644 index 00000000..539080e8 --- /dev/null +++ b/source/scripts/defaulttoggleselfonactivate.psc @@ -0,0 +1,17 @@ +scriptName defaultToggleSelfOnActivate extends objectReference +{This script toggles it's own enable state onActivate + this is mainly used on objects that are enable parents} + +;State containment used in case other states are needed later +auto state waiting + event onActivate(objectReference triggerRef) + ;if this object is enabled, disable it + if self.isEnabled() + self.Disable() + + ;if it is disabled, enable it + else + self.Enable() + endif + endEvent +endState diff --git a/source/scripts/defaultunlockonload.psc b/source/scripts/defaultunlockonload.psc new file mode 100644 index 00000000..61b9c698 --- /dev/null +++ b/source/scripts/defaultunlockonload.psc @@ -0,0 +1,16 @@ +Scriptname defaultUnlockOnLoad extends ObjectReference +{unlocks on load, after a specified quest stage is set +} + +Quest Property myQuest Auto +{quest to check stage against} + +int Property unlockStage Auto +{unlock on load after this stage is set} + + +event OnLoad() + if myQuest.IsStageDone(unlockStage) + Lock(false) + endif +endEvent \ No newline at end of file diff --git a/source/scripts/defaultwerewolfattachpointscript.psc b/source/scripts/defaultwerewolfattachpointscript.psc new file mode 100644 index 00000000..be4b883a --- /dev/null +++ b/source/scripts/defaultwerewolfattachpointscript.psc @@ -0,0 +1,23 @@ +scriptName DefaultWerewolfAttachPointSCRIPT extends objectReference + +objectReference property RHand auto +objectReference property LHand auto +;objectReference property RFoot auto +;objectReference property LFoot auto + +EVENT onLoad() + forceAddRagdollToWorld() + if RHand + game.addHavokBallAndSocketConstraint(self,"NPC R Hand [RHnd]",RHand,"AttachDummy",0,0,16) + endif + if LHand + game.addHavokBallAndSocketConstraint(self,"NPC L Hand [RHnd]",LHand,"AttachDummy",0,0,16) + endif + ;if RFoot + ; game.addHavokBallAndSocketConstraint(self,"NPC R Foot [Rft ]",RFoot,"AttachDummy") + ;endif + ;if LFoot + ; game.addHavokBallAndSocketConstraint(self,"NPC L Foot [Lft ]",LFoot,"AttachDummy") + ;endif + applyHavokImpulse(0,0,1,10) +endEVENT diff --git a/source/scripts/dunfolgunthurcataleverpuzzle.psc b/source/scripts/dunfolgunthurcataleverpuzzle.psc new file mode 100644 index 00000000..73f42042 --- /dev/null +++ b/source/scripts/dunfolgunthurcataleverpuzzle.psc @@ -0,0 +1,86 @@ +scriptName dunFolgunthurCataLeverPuzzle extends ObjectReference Conditional +{Synchronized lever-and-portcullis puzzle in Folgunthur. Used to keep all the levers and gates in sync and more explicitly manage the puzzle.} + +import debug +import utility + + +Action property animAction auto +Bool Property SingleUse auto +Bool Property HasBeenUsed auto Conditional +Bool Property InPushedPosition auto +int Property PuzzleLeverNumber auto + +ObjectReference Property Lever1 auto +ObjectReference Property Lever2 auto +ObjectReference Property Lever3 auto +ObjectReference Property Lever4 auto + +ObjectReference Property Gate1 auto +ObjectReference Property Gate2 auto +ObjectReference Property Gate3 auto +ObjectReference Property Gate4 auto + +Bool Lever1Up = False +Bool Lever2Up = False +Bool Lever3Up = False +Bool Lever4Up = False + +Auto STATE WaitingForPlayer + EVENT onActivate (objectReference triggerRef) + GoToState("WaitingForLever") + if (triggerRef == Lever1) + Gate1.Activate(Self) + Gate3.Activate(Self) + Gate4.Activate(Self) + if (Lever1Up) + Lever1Up = False + Lever1.playAnimationandWait("FullPull","FullPulledDown") + Else + Lever1Up = True + Lever1.playAnimationandWait("FullPush","FullPushedUp") + EndIf + GotoState("WaitingForPlayer") + ElseIf (triggerRef == Lever2) + Gate2.Activate(Self) + Gate3.Activate(Self) + if (Lever2Up) + Lever2Up = False + Lever2.playAnimationandWait("FullPull","FullPulledDown") + Else + Lever2Up = True + Lever2.playAnimationandWait("FullPush","FullPushedUp") + EndIf + GotoState("WaitingForPlayer") + ElseIf (triggerRef == Lever3) + Gate3.Activate(Self) + if (Lever3Up) + Lever3Up = False + Lever3.playAnimationandWait("FullPull","FullPulledDown") + Else + Lever3Up = True + Lever3.playAnimationandWait("FullPush","FullPushedUp") + EndIf + GotoState("WaitingForPlayer") + ElseIf (triggerRef == Lever4) + Gate1.Activate(Self) + Gate4.Activate(Self) + if (Lever4Up) + Lever4Up = False + Lever4.playAnimationandWait("FullPull","FullPulledDown") + Else + Lever4Up = True + Lever4.playAnimationandWait("FullPush","FullPushedUp") + EndIf + GotoState("WaitingForPlayer") + EndIf + EndEvent +EndState + +STATE WaitingForLever + Event onActivate(objectReference triggerRef) + ;Do Nothing + EndEvent +EndState + + diff --git a/source/scripts/jaildoorscript.psc b/source/scripts/jaildoorscript.psc new file mode 100644 index 00000000..7c977eb9 --- /dev/null +++ b/source/scripts/jaildoorscript.psc @@ -0,0 +1,8 @@ +Scriptname JailDoorScript extends ObjectReference +{creates detection event when opened by player} + +Event OnActivate(ObjectReference akActionRef) + CreateDetectionEvent(akActionRef as actor, soundLevel) ; creates a detection event +endEvent + +int property SoundLevel = 25 auto diff --git a/source/scripts/trigger.psc b/source/scripts/trigger.psc new file mode 100644 index 00000000..24967754 --- /dev/null +++ b/source/scripts/trigger.psc @@ -0,0 +1,52 @@ +Scriptname Trigger extends ObjectReference +{ + base class for a trigger that watches for a target to enter and exit + + fireTriggerEvent function is called whenever the target enters or leaves the trigger + + Derive from this script, and override fireTriggerEvent function for whatever you need -- you can use IsTargetInTrigger to check if the target has just entered or left + +} + +bool bTargetInTrigger = false conditional + +objectReference property targetRef auto +{ if None (default), watching for player + otherwise, watching for this reference +} + +Event onLoad() + if targetRef == None + targetRef = (Game.GetForm(0x14) as Actor) + endif +endEvent + +Event onTriggerEnter(objectReference triggerRef) + if(triggerRef == targetRef) + ;target has entered the trigger + SetTargetInTrigger(true) +; debug.trace(self + " target has entered the trigger") + endif +endEvent + +Event onTriggerLeave(objectReference triggerRef) + if (triggerRef == targetRef) + ;target has left the trigger + SetTargetInTrigger(false) +; debug.trace(self + " target has left the trigger") + endif +endEvent + +bool function IsTargetInTrigger() + return bTargetInTrigger +endFunction + +; PRIVATE function - do not call from outside this script +function SetTargetInTrigger(bool isInTrigger) + bTargetInTrigger = isInTrigger + fireTriggerEvent() +endFunction + +function fireTriggerEvent() + ; do something when target enters/leaves trigger +endFunction diff --git a/source/scripts/triggerboxbase.psc b/source/scripts/triggerboxbase.psc new file mode 100644 index 00000000..6f831d48 --- /dev/null +++ b/source/scripts/triggerboxbase.psc @@ -0,0 +1,64 @@ +scriptName TriggerBoxBase extends objectReference hidden +; +; This script does nothing by default, it is the base for other trigger scripts +; to extend by defining the fireTriggerEvent. This base script should handle +; all logic to determine when to fire the event. +; +; by default it will fire only once, and only when the player enters it +;============================================================= + +import Game + +bool property PlayerOnly = True auto +{If true, this trigger box will fire ONLY if the player is triggering it} + +objectReference property ActivateRef auto +{If set, this trigger will only fire if this specific ref enters the trigger range} + +int property WhenToTrigger = 0 auto +{This property tells the trigger when to fire the event + 0 = On Enter (default) + 1 = On Exit} + +Auto State WaitingForTrigger + Event OnTriggerEnter (objectReference TriggerRef) + if WhenToTrigger == 0 + resolveTriggerLogic(TriggerRef) + endif + endEvent + + Event OnTriggerLeave (objectReference TriggerRef) + if WhenToTrigger == 1 + resolveTriggerLogic(TriggerRef) + endif + endEvent + +endState + +State HasBeenTriggered + Event OnTriggerEnter(objectReference TriggerRef) + endEvent + + Event OnTriggerLeave(objectReference TriggerRef) + endEvent +endState + +Function resolveTriggerLogic(ObjectReference TriggerRef) + if PlayerOnly + if TriggerRef == getPlayer() as Actor + goToState("HasBeenTriggered") + fireTriggerEvent() + endif + else + if ActivateRef + if ActivateRef == TriggerRef + goToState("HasBeenTriggered") + fireTriggerEvent() + endif + endif + endif +endFunction + +Function fireTriggerEvent() +endFunction +