The only "boost" that I've found to persist across a save/load, are the "Add Resources" boosts, such as
. Statuses also seem to persist across save/load, at least something like
have persisted across my saves/loads.
Regarding your 1-click-boost, don't you experience crash more often, when using that, than when using several "smaller" ones? I have a "Booster Shot" I used to do, that more or less did everything I wanted. Not as extreme as yours, but the more I added, the more the game tended to crash when I applied the boosts. Main difference to yours and mine (besides yours including many more than mine do), is that I create tables for the repeating boosts, so I can easily add/remove/change all in one line.
Code: Select all
{$lua}
if syntaxcheck then return end
--[[
Booster Shot.
Gives you all those vital vitamins and minerals that boost your defences and abilities.
Disappears on Load.
Vitamins to look at:
ProficiencyBonusOverride(4)
]]
local abilityPoints = 30 -- 30 is maximum.
local movementMeters = 1000 -- The amount of movement.
local rollBonus = 50 -- Bonus added to all dice rolls.
local resistanceLevel = "Immune" -- Resistant or Immune.
local damageRoll = "12d12+20" -- 1d4, 1d4+3, etc.
local weaponEnchantment = "20" -- Dagger +20.
local sightSpellRange = 32
local damageTypeWeapon = {
"Bludgeoning",
"Piercing",
"Slashing",
"Cold",
"Necrotic",
"Psychic",
"Radiant",
}
local damageType = {
"Bludgeoning",
"Piercing",
"Slashing",
"Acid",
"Cold",
"Fire",
"Force",
"Lightning",
"Necrotic",
"Poison",
"Psychic",
"Radiant",
"Thunder",
}
local ability = {
"Strength",
"Dexterity",
"Constitution",
"Intelligence",
"Wisdom",
"Charisma",
}
local skill = {
"Acrobatics",
"AirSpecialist",
"AnimalHandling",
"Arcana",
"Athletics",
"Brewmaster",
"Crafting",
"Deception",
"DualWielding",
"FireSpecialist",
"History",
"Insight",
"Intimidation",
"Investigation",
"Leadership",
"Luck",
"MagicArmorMastery",
"Medicine",
"Perception",
"Perseverance",
"PhysicalArmorMastery",
"Polymorph",
"Ranged",
"RangerLore",
"Reason",
"Religion",
"Repair",
"RogueLore",
"Runecrafting",
"Shield",
"SingleHanded",
"SleightOfHand",
"Stealth",
"Sulfurology",
"Survival",
"Thievery",
"TwoHanded",
"Performance",
"Persuasion",
"Wand",
"WarriorLore",
"WaterSpecialist"
}
rollType = {
'MeleeWeaponAttack',
'MeleeOffHandWeaponAttack',
'RangedWeaponAttack',
'RangedOffHandWeaponAttack',
'MeleeSpellAttack',
'RangedSpellAttack',
'Attack',
'SkillCheck',
'RawAbility',
'DeathSavingThrow',
'SavingThrow',
}
boost = {
"ActionResourcePreventReduction(Movement);",
"Advantage(AllSavingThrows);",
"Advantage(AllAbilities);",
"Advantage(AttackRoll);",
"WeaponProperty(Magical);",
string.format("DarkvisionRangeMin(%s);", sightSpellRange),
string.format("SightRangeMinimum(%s);", sightSpellRange),
string.format("UnlockSpellVariant(DistantSpellCheck(),ModifyTargetRadius(Override,%s),);", sightSpellRange),
string.format("UnlockSpellVariant(DistantTouchSpellCheck(),ModifyTargetRadius(Override,%s),ModifySpellFlags(Melee,0),);", sightSpellRange),
string.format("ActionResourceOverride(Movement,%s,0);", movementMeters),
string.format("WeaponEnchantment(%s);", weaponEnchantment),
}
for i = 1, #rollType do
table.insert(boost, string.format("RollBonus(%s,%s);", rollType[i], rollBonus))
table.insert(boost, string.format("MinimumRollResult(%s,%s);", rollType[i], 20))
end
for i = 1, #damageTypeWeapon do
table.insert(boost, string.format("CharacterUnarmedDamage(%s, %s);", damageRoll, damageTypeWeapon[i]))
table.insert(boost, string.format("CharacterWeaponDamage(%s, %s);", damageRoll, damageTypeWeapon[i]))
end
for i = 1, #damageType do
table.insert(boost, string.format("Resistance(%s, %s);", damageType[i], resistanceLevel))
end
for i = 1, #ability do
table.insert(boost, string.format("AbilityOverrideMinimum(%s, %s);", ability[i], abilityPoints))
table.insert(boost, string.format("ProficiencyBonus(SavingThrow, %s);", ability[i]))
end
--[[ For some reason, the following breaks the rest.
for i = 1, #skill do
table.insert(boost, string.format("ProficiencyBonus(Skill, %s);", skill[i]))
table.insert(boost, string.format("ExpertiseBonus(%s);", skill[i]))
table.insert(boost, string.format("Advantage(Skill,%s)", skill[i]))
end
]]
{$asm}
[ENABLE]
{$lua}
AddBoostsToPlayer(boost)
{$asm}
[DISABLE]
{$lua}
RemoveBoostsFromPlayer(boost)
{$asm}
I have had the suspicion that the game would crash if the execution takes too long. Maybe the loops cause enough extra overhead that it will crash, as opposed to just have everything static.