bottle-rinse-repeat/src/EBxBootstrap.gek
2022-07-23 17:38:20 +02:00

164 lines
4.7 KiB
Plaintext

scn EBxBootstrap
ref rItem
ref rScript
ref rBrahminScriptDC
ref rList
int i
begin function {}
; Save default activate prompts for later
playerRef.AuxiliaryVariableSetString "*sDrinkPrompt" (GetStringSetting "sTargetTypeDrink")
playerRef.AuxiliaryVariableSetString "*sActivatePrompt" (GetStringSetting "sTargetTypeActivate")
; Add new items to form lists
ListAddForm NonAlchoholicDrinks EBxBrahminMilk
ListAddForm NVDLC03AllEmptyBottlesLIST EBxBeerBottleEmpty
ListAddForm RockItLauncherAmmo EBxBeerBottleEmpty
ListAddForm NVDLC03AllEmptyBottlesLIST EBxVodkaBottleEmpty
ListAddForm RockItLauncherAmmo EBxVodkaBottleEmpty
ListAddForm NVDLC03AllEmptyBottlesLIST EBxWineBottleEmpty
ListAddForm RockItLauncherAmmo EBxWineBottleEmpty
ListAddForm EBxUpgradableToDirtyList IrradiatedWaterUnpurified
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
SetTexturePath "interface\icons\pipboyImages\Items\item_scotch.dds" ScotchBottle01Empty01
SetTexturePath "interface\icons\pipboyimages\items\items_cola.dds" NukaColaBottle
SetTexturePath "interface\icons\pipboyimages\items\items_cola.dds" SodaBottleEmpty01
SetTexturePath "interface\icons\pipboyimages\items\items_sunset_sarsp.dds" SSBottleEmpty
SetTexturePath "interface\icons\pipboyimages\items\milkbottle.dds" Milkbottle01
; Make irradiated water worthless
SetValueAlt IrradiatedWaterUnpurified EBxBottlePrice
; Vault 13 Canteen
if IsModLoaded "ClassicPack.esm"
let rItem := GetFormFromMod "FalloutNV.esm" "174095" ; PreordVault13CanteenQuest
if IsFormValid rItem
RemoveScript rItem
endif
let rItem := GetFormFromMod "FalloutNV.esm" "1735D2" ; PreordVaultCanteen
if IsFormValid rItem
SetScript EBxPreordVault13CanteenScript rItem
endif
endif
; Draining on middle click
; Short callback notation with SetOnKeyUp/DownEventHandler currently throws an exception with xNVSE 6.20 + JIP LN 56.31
SetOnMenuOpenEventHandler (begin function { i }
SetOnKeyUpEventHandler EBxOnMiddleClick 1 258
end) 1 1002
SetOnMenuCloseEventHandler (begin function { i }
SetOnKeyUpEventHandler EBxOnMiddleClick 0 258
end) 1 1002
; Vault 13 Canteen effect
SetOnUseAidItemEventHandler (begin function { rItem }
if this == playerRef
if eval rItem := ListGetNthForm EBxCanteenEffects EBxCanteenDrink
playerRef.CIOS rItem
else
playerRef.CIOS WaterPurified
endif
endif
end) 1 EBxVault13Canteen
; SSBottleEmptyNoFloat
if IsScripted SSBottleEmptyNoFloat == 0
SetEventHandler "OnAdd" (begin function { rItem, rScript }
; The item is not in player's inventory at this point
CallAfterSeconds 0 (begin function {}
let i := PlayerRef.GetItemCount SSBottleEmptyNoFloat
if i > 0
PlayerRef.RemoveItem SSBottleEmptyNoFloat i 1
PlayerRef.AddItem SSBottleEmpty i 1
endif
end)
end) "first"::SSBottleEmptyNoFloat "second"::playerRef
endif
; If not TTW, update NonAlchoholicDrinks
let EBxTTW := IsModLoaded "Fallout3.esm"
if EBxTTW == 0
let i := 0
while rItem := ListGetNthForm EBxListNonAlchoholicDrinks i
if ListGetFormIndex NonAlchoholicDrinks rItem == -1
ListAddForm NonAlchoholicDrinks rItem
endif
let i += 1
loop
endif
; Automatic detection of alchoholic drinks
let rList := TempCloneForm EmptyFormList
GetLoadedType rList 47
let i := ListGetCount rList
while i > 0
let i -= 1
let rItem := ListGetNthForm rList i
if GetEquipType rItem == 13
if ListGetFormIndex AlchoholicDrinks rItem == -1
ListAddForm AlchoholicDrinks rItem
endif
endif
loop
; Enable brahmin milking
if EBxTTW
set rBrahminScriptDC to GetFormFromMod "Fallout3.esm" "38705" ; CRBrahminScriptDC
endif
GetLoadedType rList 43
let i := ListGetCount rList
while i > 0
let i -= 1
let rItem := ListGetNthForm rList i
if eval (GetCreatureType rItem == 1) && (rScript := GetScript rItem) && (rScript == CRBrahminScript || rScript == rBrahminScriptDC)
continue
endif
ListRemoveNthForm rList i
loop
SetEventHandler "OnActivate" EBxMilkBrahmin "first"::rList "second"::playerRef
ListClear rList
let rList := 0
; Game load events
SetEventHandler "NewGame" ({} => call EBxOnGameLoad 1)
SetEventHandler "PostLoadGame" EBxOnGameLoad
end