You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.1 KiB

scn EBxReplenishCanteen
ref rNewDrink
ref rCurrentDrink
ref rCanteen
ref rPreordVaultCanteen
int iCount
int iNewDrink
int bCheckOnly
begin function { rNewDrink, bCheckOnly }
if EBxReplenishableCanteen == 0
return
endif
if playerRef.GetItemCount EBxVault13Canteen == 0
let ref rPreordVaultCanteen := GetFormFromMod "FalloutNV.esm" "1735D2" ; PreordVaultCanteen
if eval ! IsFormValid rPreordVaultCanteen || playerRef.GetItemCount rPreordVaultCanteen == 0
return
endif
endif
let iNewDrink := ListGetFormIndex EBxCanteenEffects rNewDrink
if iNewDrink == -1 ; unknown type, fallback to Purified Water
set rNewDrink to WaterPurified
set iNewDrink to ListGetFormIndex EBxCanteenEffects rNewDrink
endif
let rCurrentDrink := ListGetNthForm EBxCanteenEffects EBxCanteenDrink
if IsFormValid rCurrentDrink == 0 ; invalid EBxCanteenDrink value, also fallback to Purified Water
set rCurrentDrink to WaterPurified
set EBxCanteenDrink to ListGetFormIndex EBxCanteenEffects rCurrentDrink
endif
if rNewDrink == rCurrentDrink
elseif rCurrentDrink == IrradiatedWaterUnpurified ; any replacement will do
elseif (rCurrentDrink != WaterPurified && rCurrentDrink != EBxBrahminMilk) && (rNewDrink == WaterPurified || rNewDrink == EBxBrahminMilk)
elseif playerRef.GetItemCount EBxVault13Canteen > 0
return
endif
let iCount := EBxCanteenSipsMax - playerRef.GetItemCount EBxVault13Canteen
if bCheckOnly
SetFunctionValue (EBxCanteenDrink != iNewDrink || iCount > 0)
return
endif
if iCount > 0
let rPreordVaultCanteen := GetFormFromMod "FalloutNV.esm" "1735D2" ; PreordVaultCanteen
if IsFormValid rPreordVaultCanteen
playerRef.RemoveItem rPreordVaultCanteen 1 1
endif
playerRef.AddItem EBxVault13Canteen iCount 1
endif
set rCanteen to EBxVault13CanteenEffect
SetNameEx "%n" rNewDrink rCanteen
if EBxCanteenDrink != iNewDrink || iCount > 0
PlaySound ITMBottleDown 1
set rCanteen to EBxVault13Canteen
MessageEx "%n has been replenished with %n." rCanteen rNewDrink
endif
set EBxCanteenDrink to iNewDrink
end