From a11cafb50a2084154a7171d38dea1de2a0af8b46 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Sun, 24 Jul 2022 16:13:55 +0200 Subject: [PATCH] Delayed bottle filling (WIP) --- Bottle Rinse Repeat.esp | Bin 48910 -> 51622 bytes config/Bottle Rinse Repeat.ini | 2 + .../scripts/gr_bottle_rinse_repeat.txt | 9 ++- src/EBxActivateWaterSource.gek | 42 +++++++++++++ src/EBxBootstrap.gek | 34 +++++----- src/EBxOnControlDown.gek | 10 +++ src/EBxOnControlUp.gek | 36 ++++------- src/EBxOnCrosshair.gek | 58 ++++++++---------- src/EBxOnCrosshairTracker.gek | 13 +++- 9 files changed, 128 insertions(+), 76 deletions(-) create mode 100644 config/Bottle Rinse Repeat.ini create mode 100644 src/EBxActivateWaterSource.gek create mode 100644 src/EBxOnControlDown.gek diff --git a/Bottle Rinse Repeat.esp b/Bottle Rinse Repeat.esp index 5a45110d71640c02fb5d9785f9e4f58a8d55e0ec..d868622765e0e8bd075e1cbc310834761820787c 100644 GIT binary patch delta 10571 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 diff --git a/config/Bottle Rinse Repeat.ini b/config/Bottle Rinse Repeat.ini new file mode 100644 index 0000000..9006f18 --- /dev/null +++ b/config/Bottle Rinse Repeat.ini @@ -0,0 +1,2 @@ +[Settings] +bFillBottleDelay = 1 diff --git a/nvse/plugins/scripts/gr_bottle_rinse_repeat.txt b/nvse/plugins/scripts/gr_bottle_rinse_repeat.txt index 82f7fb3..3743dee 100644 --- a/nvse/plugins/scripts/gr_bottle_rinse_repeat.txt +++ b/nvse/plugins/scripts/gr_bottle_rinse_repeat.txt @@ -1,13 +1,16 @@ -if GetNVSEVersionFull < 6.2 - MessageBoxEx "Bottle Rinse Repeat requires xNVSE 6.20+." +if GetNVSEVersionFull < 6.25 + MessageBoxEx "Bottle Rinse Repeat requires xNVSE 6.25+." + return endif if GetPluginVersion "JohnnyGuitarNVSE" < 325 MessageBoxEx "Bottle Rinse Repeat requires JohnnyGuitar NVSE 3.25+." + return endif if GetPluginVersion "JIP LN NVSE" < 55.70 MessageBoxEx "Bottle Rinse Repeat requires JIP LN 55.70+." + return endif -call EBxBootstrap +CallAfterSeconds 0.8 EBxBootstrap 1 diff --git a/src/EBxActivateWaterSource.gek b/src/EBxActivateWaterSource.gek new file mode 100644 index 0000000..0e1e481 --- /dev/null +++ b/src/EBxActivateWaterSource.gek @@ -0,0 +1,42 @@ +scn EBxActivateWaterSource + +ref rSource +string_var sPrompt + +begin function {} + + SetGameMainLoopCallback EBxOnCrosshairTracker 0 + + SetOnControlDownEventHandler EBxOnControlDown 0 5 + ;SetOnControlUpEventHandler EBxOnControlUp 0 5 + ;EnableControl 5 + + let rSource := GetCrosshairRef + + if GetCrosshairWater + let sPrompt := playerRef.AuxiliaryVariableGetString "*sDrinkPrompt" + elseif eval IsFormValid rSource && (sPrompt := rSource.GetActivatorPrompt) == "" + let sPrompt := playerRef.AuxiliaryVariableGetString "*sActivatePrompt" + endif + + if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnUI + SetUIStringAlt "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" $sPrompt + else + SetUIStringAlt "HUDMainMenu/Info/justify_center_hotrect/string" $sPrompt + endif + + sv_destruct sPrompt + + if IsFormValid rSource + + MessageEx "filling bottles" + + call EBxFillFromObject rSource + + if rSource.HasScriptBlock 2 + rSource.Activate playerRef 1 + endif + + endif + +end \ No newline at end of file diff --git a/src/EBxBootstrap.gek b/src/EBxBootstrap.gek index 7b030a3..251e2f8 100644 --- a/src/EBxBootstrap.gek +++ b/src/EBxBootstrap.gek @@ -13,6 +13,22 @@ begin function {} playerRef.AuxiliaryVariableSetString "*sDrinkPrompt" (GetStringSetting "sTargetTypeDrink") playerRef.AuxiliaryVariableSetString "*sActivatePrompt" (GetStringSetting "sTargetTypeActivate") + ; Fix bottle names in English version + + if eval $ScotchBottle01Empty01 == "Large Whiskey Bottle" + SetName "Empty Scotch Bottle" ScotchBottle01Empty01 + endif + + if eval $Milkbottle01 == "Milk Bottle" + SetName "Empty Milk Bottle" Milkbottle01 + endif + + ; INI settings + + if FileExists "config\Bottle Rinse Repeat.ini" + set EBxFillBottleDelay to GetINIFloat "Settings:bFillBottleDelay" "Bottle Rinse Repeat.ini" + endif + ; Add new items to form lists ListAddForm NonAlchoholicDrinks EBxBrahminMilk @@ -30,16 +46,6 @@ begin function {} ListAddForm EBxUpgradableToPuraList IrradiatedWaterUnpurified ListAddForm EBxUpgradableToPurifiedList IrradiatedWaterUnpurified - ; Fix bottle names in English version - - if eval $ScotchBottle01Empty01 == "Large Whiskey Bottle" - SetName "Empty Scotch Bottle" ScotchBottle01Empty01 - endif - - if eval $Milkbottle01 == "Milk Bottle" - SetName "Empty Milk Bottle" Milkbottle01 - endif - ; PipBoy icons SetTexturePath "interface\icons\pipboyimages\items\items_whiskey.dds" WhiskeyBottle01Empty01 @@ -111,9 +117,7 @@ begin function {} if EBxTTW == 0 let i := 0 while rItem := ListGetNthForm EBxListNonAlchoholicDrinks i - if ListGetFormIndex NonAlchoholicDrinks rItem == -1 - ListAddForm NonAlchoholicDrinks rItem - endif + ListAddForm NonAlchoholicDrinks rItem -2 1 let i += 1 loop endif @@ -128,9 +132,7 @@ begin function {} let i -= 1 let rItem := ListGetNthForm rList i if GetEquipType rItem == 13 - if ListGetFormIndex AlchoholicDrinks rItem == -1 - ListAddForm AlchoholicDrinks rItem - endif + ListAddForm AlchoholicDrinks rItem -2 1 endif loop diff --git a/src/EBxOnControlDown.gek b/src/EBxOnControlDown.gek new file mode 100644 index 0000000..72a8c87 --- /dev/null +++ b/src/EBxOnControlDown.gek @@ -0,0 +1,10 @@ +scn EBxOnControlDown + +int iControl + +begin function { iControl } + + ; start countdown + playerRef.AuxiliaryVariableErase "*timer" + +end diff --git a/src/EBxOnControlUp.gek b/src/EBxOnControlUp.gek index 18ca754..61f655f 100644 --- a/src/EBxOnControlUp.gek +++ b/src/EBxOnControlUp.gek @@ -6,33 +6,23 @@ string_var sPrompt begin function { iControl } - SetGameMainLoopCallback EBxOnCrosshairTracker 0 - - SetOnControlUpEventHandler EBxOnControlUp 0 5 - EnableControl 5 - - let rSource := GetCrosshairRef - - call EBxFillFromObject rSource - - if GetCrosshairWater - let sPrompt := playerRef.AuxiliaryVariableGetString "*sDrinkPrompt" - elseif eval (sPrompt := rSource.GetActivatorPrompt) == "" - let sPrompt := playerRef.AuxiliaryVariableGetString "*sActivatePrompt" + if eval EBxFillBottleDelay > 0 && playerRef.AuxiliaryVariableGetFloat "*timer" < EBxFillBottleDelay + MessageEx "Normal activation" + let rSource := GetCrosshairRef + if IsFormValid rSource + rSource.Activate playerRef 1 + endif + playerRef.AuxiliaryVariableErase "*timer" + return endif - if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnUI - SetUIStringAlt "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" $sPrompt - else - SetUIStringAlt "HUDMainMenu/Info/justify_center_hotrect/string" $sPrompt + if EBxFillBottleDelay <= 0 + call EBxActivateWaterSource endif - sv_destruct sPrompt + playerRef.AuxiliaryVariableErase "*timer" - if IsFormValid rSource - if rSource.HasScriptBlock 2 - rSource.Activate playerRef 1 - endif - endif + EnableControl 5 + SetOnControlUpEventHandler EBxOnControlUp 0 5 end diff --git a/src/EBxOnCrosshair.gek b/src/EBxOnCrosshair.gek index 924fdb3..187c817 100644 --- a/src/EBxOnCrosshair.gek +++ b/src/EBxOnCrosshair.gek @@ -4,6 +4,9 @@ ref rSource ref rDrink int iCount array_var aDrinksToUpgrade +string_var sOrigPrompt +string_var sPrompt +string_var sBottles begin function { rSource } @@ -11,7 +14,7 @@ begin function { rSource } return endif - if GetType rSource != 21 ; activator + if rSource.GetType != 21 ; activator if GetCrosshairWater == 0 return endif @@ -31,48 +34,37 @@ begin function { rSource } let aDrinksToUpgrade := ar_null if iCount > 0 - - if GetCrosshairWater - if iCount > 1 - SetStringSetting "sTargetTypeDrink" ("Fill " + $iCount + " bottles with " + $rDrink) - else - SetStringSetting "sTargetTypeDrink" ("Fill " + $iCount + " bottle with " + $rDrink) - endif - elseif eval rSource.GetActivatorPrompt != "" - playerRef.AuxiliaryVariableSetString "*ap" (rSource.GetActivatorPrompt) - if iCount > 1 - rSource.SetActivatorPrompt ("Fill " + $iCount + " bottles with " + $rDrink) - else - rSource.SetActivatorPrompt ("Fill " + $iCount + " bottle with " + $rDrink) - endif - else - if iCount > 1 - SetStringSetting "sTargetTypeActivate" ("Fill " + $iCount + " bottles with " + $rDrink) - else - SetStringSetting "sTargetTypeActivate" ("Fill " + $iCount + " bottle with " + $rDrink) - endif - endif - + let sBottles := sv_construct "%g bottle%{s%}" iCount (iCount > 1) elseif eval EBxCanteenSipsMax > 0 && call EBxReplenishCanteen rDrink 1 + let sBottles := "canteen" + else + return + endif - if GetCrosshairWater - SetStringSetting "sTargetTypeDrink" ("Fill canteen with " + $rDrink) - elseif eval rSource.GetActivatorPrompt != "" - playerRef.AuxiliaryVariableSetString "*ap" (rSource.GetActivatorPrompt) - rSource.SetActivatorPrompt ("Fill canteen with " + $rDrink) + if GetCrosshairWater + let sPrompt := sv_construct "%{Drink or hold to fill%}%{Fill%} %z with %n" (EBxFillBottleDelay > 0) (EBxFillBottleDelay <= 0) sBottles rDrink + SetStringSetting "sTargetTypeDrink" $sPrompt + CallAfterSeconds 0 ({} => SetStringSetting "sTargetTypeDrink" (playerRef.AuxiliaryVariableGetString "*sDrinkPrompt")) + elseif eval rSource.GetActivatorPrompt != "" + let sOrigPrompt := rSource.GetActivatorPrompt + if EBxFillBottleDelay > 0 + let sPrompt := $(rSource.GetActivatorPrompt) + " or hold to fill" else - SetStringSetting "sTargetTypeActivate" ("Fill canteen with " + $rDrink) + let sPrompt := "Fill" endif - + let sPrompt := sv_construct "%z %z with %n" sPrompt sBottles rDrink + rSource.SetActivatorPrompt $sPrompt + CallAfterSeconds 0 ({} => rSource.SetActivatorPrompt $sOrigPrompt) else - return + let sPrompt := sv_construct "%{Activate or hold to fill%}%{Fill%} %z with %n" (EBxFillBottleDelay > 0) (EBxFillBottleDelay <= 0) sBottles rDrink + SetStringSetting "sTargetTypeActivate" $sPrompt + CallAfterSeconds 0 ({} => SetStringSetting "sTargetTypeActivate" (playerRef.AuxiliaryVariableGetString "*sActivatePrompt")) endif DisableControl 5 + SetOnControlDownEventHandler EBxOnControlDown 1 5 SetOnControlUpEventHandler EBxOnControlUp 1 5 - CallAfterSeconds 0 EBxOnCrosshairAfter - SetGameMainLoopCallback EBxOnCrosshairTracker 1 1 11 end diff --git a/src/EBxOnCrosshairTracker.gek b/src/EBxOnCrosshairTracker.gek index b90c6e2..f9bd960 100644 --- a/src/EBxOnCrosshairTracker.gek +++ b/src/EBxOnCrosshairTracker.gek @@ -6,12 +6,22 @@ begin function {} if MenuMode == 0 + if eval EBxFillBottleDelay > 0 && IsControlDisabled 5 && IsKeyPressed (GetControl 5) 2 + if playerRef.AuxiliaryVariableGetFloat "*timer" < EBxFillBottleDelay + playerRef.AuxiliaryVariableSetFloat "*timer" (playerRef.AuxiliaryVariableGetFloat "*timer" + GetSecondsPassed) + else + MessageEx "activating source" + call EBxActivateWaterSource + return + endif + endif + if GetCrosshairWater return endif if eval rSource := GetCrosshairRef - if GetType rSource == 21 ; activator + if rSource.GetType == 21 ; activator if rSource.GetActivatorWaterType return endif @@ -22,6 +32,7 @@ begin function {} SetGameMainLoopCallback EBxOnCrosshairTracker 0 + SetOnControlDownEventHandler EBxOnControlDown 0 5 SetOnControlUpEventHandler EBxOnControlUp 0 5 EnableControl 5