bl2mods/Mods/LootSplosion/__init__.py
2023-03-22 12:57:56 -04:00

73 lines
1.9 KiB
Python

from Mods.ModMenu import EnabledSaveType, Hook, SDKMod, OptionManager, RegisterMod
from Mods.ModUtils import SdkMod
## Enemies that MAY be upped: badass constructor, saturn, knuckle dragger, cassius
ENEMY_DROP_MULTI = {
'PawnBalance_Anemone_Cassius': 2, # Cassius
'PawnBalance_ConstructorBadass': 30, # Badass Constructor
'PawnBalance_LoaderGiant': 10, # Saturn
'PawnBalance_PrimalBeast_KnuckleDragger': 10, # Knuckle Dragger
'PawnBalance_Uranus': 1 # Uranus
}
class LootSplosion(SdkMod):
__doc__ = 'Multiplies drops of enemies that are killed. The extra drops can optionally require a critical hit.'
Name = 'Lootsplosion'
Description = 'Multiplies drops of enemies that are killed'
Author = 'Izalia Mae'
Version = '1.0'
def __init__(self):
self.set_enable_state('settings')
self.Options.new_slider(
'Drop Multiplier', 'Number of times to multiply the drops',
default = 15,
min = 0,
max = 50,
increment = 1,
id = 'multiplier'
)
self.Options.new_boolean(
'CritRequired', 'Require a critical hit',
default = True,
id = 'crit'
)
def get_drop_multi(self, enemy):
enemy_level = ENEMY_DROP_MULTI.get(enemy, None)
drop_level = self.Options.get('multiplier').CurrentValue
if enemy_level == None:
return self.Options.get('multiplier').CurrentValue
return min(drop_level, enemy_level)
@Hook("WillowGame.WillowPawn.DropLootOnDeath")
def handle_loot_drop(self, caller, function, params):
if not caller.bWasLastDamageACriticalHit and self.Options.get('crit').CurrentValue:
return True
enemy = caller.GetBalancedActorTypeIdentifier()
multi = self.get_drop_multi(enemy)
self.log(f'Drop Multi ({enemy}): {multi}')
for _ in range(multi):
caller.DropLootOnDeath(
params.Killer,
params.DamageType,
params.DamageTypeDefinition
)
return True
mod = LootSplosion()
mod.register()