def __init__(
        self,
        mod_label,
        mod_filename,
        desc_text,
        card_text,
        part_text,
        rewards1,
        rewards2,
        rewards3,
        single_name='Money',
        triple_name='Trust Fund',
        combo_name_mirv='Diversifying',
        combo_name_rain='Make It Rain',
        combo_name_nuke='Investing',
        combo_name_large='Big Spender',
        combo_name_bouncy='Bullish',
        combo_name_spring='Depreciating',
        combo_name_sticky='Price Fixing',
        combo_name_artillery='Windfall',
        combo_name_lingering='Jackpot',
        combo_name_divide='Compounding',
        combo_name_singularity='Moneysink',
        combo_name_roider='ROI Rage',
        combo_name_link='Pyramid Scheme',
        combo_name_transfusion='Cash Infusion',
        combo_name_generator='Taxing',
        combo_name_elemental='Cash Infusion',
        combo_name_force='Bailout',
        combo_name_money='Greed',
    ):
        """
        rewards1, rewards2, and rewards3 should be a list of tuples, with the first
        element being a balance name (or `None`), the second being a pool name
        (or `None`), and the third being a weighting value (either a number or a
        `BVC` object).
        """
        self.mod_label = mod_label
        self.mod_filename = mod_filename
        self.desc_text = desc_text
        self.card_text = card_text
        self.part_text = part_text
        self.single_name = single_name
        self.triple_name = triple_name
        self.combo_name_mirv = combo_name_mirv
        self.combo_name_rain = combo_name_rain
        self.combo_name_nuke = combo_name_nuke
        self.combo_name_large = combo_name_large
        self.combo_name_bouncy = combo_name_bouncy
        self.combo_name_spring = combo_name_spring
        self.combo_name_sticky = combo_name_sticky
        self.combo_name_artillery = combo_name_artillery
        self.combo_name_lingering = combo_name_lingering
        self.combo_name_divide = combo_name_divide
        self.combo_name_singularity = combo_name_singularity
        self.combo_name_roider = combo_name_roider
        self.combo_name_link = combo_name_link
        self.combo_name_transfusion = combo_name_transfusion
        self.combo_name_generator = combo_name_generator
        self.combo_name_elemental = combo_name_elemental
        self.combo_name_force = combo_name_force
        self.combo_name_money = combo_name_money

        # Construct our ItemPools right away
        self.rewards1 = ItemPool(self.pool1)
        self.rewards2 = ItemPool(self.pool2)
        self.rewards3 = ItemPool(self.pool3)
        for pool_obj, rewards in [
            (self.rewards1, rewards1),
            (self.rewards2, rewards2),
            (self.rewards3, rewards3),
        ]:
            for balance_name, pool_name, weight in rewards:
                if balance_name:
                    pool_obj.add_balance(balance_name, weight)
                else:
                    pool_obj.add_pool(pool_name, weight)
Beispiel #2
0
        self.itempool_leg = itempool_leg
        self.itempool_reg_qty = itempool_reg_qty
        self.itempool_leg_qty = itempool_leg_qty
        self.firerate_reg = firerate_reg
        self.firerate_leg = firerate_leg
        self.label_reg = label_reg
        self.label_leg = label_leg
        self.reg_cost = reg_cost
        self.leg_cost = leg_cost
        self.video = video

###
### Rapid-fire config (also defines the "default" reward pools)
###

fab_default_reg = ItemPool('/Game/GameData/Loot/ItemPools/Fabricator/ItemPool_FabricatorGuns')
fab_default_reg.add_pool('/Game/GameData/Loot/ItemPools/Guns/ItemPool_Guns_Uncommon', BVC(bvc=90))
fab_default_reg.add_pool('/Game/GameData/Loot/ItemPools/Guns/ItemPool_Guns_Rare', BVC(bvc=8))
fab_default_reg.add_pool('/Game/GameData/Loot/ItemPools/Guns/ItemPool_Guns_VeryRare', BVC(bvc=2))

fab_default_leg = ItemPool('/Game/GameData/Loot/ItemPools/Fabricator/ItemPool_FabricatorGuns_AltFire')
fab_default_leg.add_pool('/Game/GameData/Loot/ItemPools/Guns/ItemPool_Guns_Legendary')
fab_default_leg.add_pool('/Game/GameData/Loot/ItemPools/VendingMachines/DA_ItemPool_VendingMachine_CrazyEarl_MissionRewards', BVC(bvc=0.25))

rapidfire = Config(filename='rapidfire',
        label='Rapid-Fire',
        desc=[
            "Converts the Fabricator's primary firing mode to full auto single-gun",
            "firing, and the legendary mode to a full auto shotgun-like blast.  The",
            "quantity of gear dropped on the legendary mode has been buffed up a bit",
            "as well, which is mildly cheaty.",
Beispiel #3
0
    lic=Mod.CC_BY_SA_40,
    v='1.0.0',
    cats='vendor',
)

# We're basically recreating a BL2/TPS-style "GunsAndGear" ItemPool here, which isn't something that's
# really found anywhere in BL3.  So, I've chosen these relative weights here from the BL2 version, and
# modified it slightly.  The stock BL2 weights are:
#   Guns: 100
#   Shields: 45
#   Grenades: 35
#   COMs: 25
#   Artifacts: 20
# I'm scaling the non-guns to 60% so that you'll get guns for about 2/3 of the time.
non_gun_scale = .6
pool = ItemPool(
    '/Game/PatchDLC/Ixora2/Loot/VendingMachines/DA_ItemPool_BlackMarket')
pool.add_pool('/Game/GameData/Loot/ItemPools/Guns/ItemPool_Guns_Legendary',
              BVC(bvc=1, bvs=1)),
pool.add_pool(
    '/Game/GameData/Loot/ItemPools/Shields/ItemPool_Shields_05_Legendary',
    BVC(bvc=1, bvs=.45 * non_gun_scale)),
pool.add_pool(
    '/Game/GameData/Loot/ItemPools/GrenadeMods/ItemPool_GrenadeMods_05_Legendary',
    BVC(bvc=1, bvs=.35 * non_gun_scale)),
pool.add_pool(
    '/Game/Gear/ClassMods/_Design/ItemPools/ItemPool_ClassMods_Beastmaster_05_Legendary',
    BVC(bva=
        '/Game/GameData/Loot/CharacterWeighting/Att_CharacterWeight_Beastmaster',
        bvs=.25 * non_gun_scale)),
pool.add_pool(
    '/Game/Gear/ClassMods/_Design/ItemPools/ItemPool_ClassMods_Gunner_05_Legendary',
        'Additionally, his kill skills last an additional [skillbold]$VALUE$ seconds[/skillbold].',
        )

mod.newline()

# Add to the drop pools

mod.header('Add to drop pools')

data = BL3Data()
for pool_name in [
        '/Game/PatchDLC/Ixora/GameData/Loot/ItemPools/Chest/Event/ItemPool_GearUp_Event_Industry_Legendary',
        '/Game/PatchDLC/Ixora/GameData/Loot/ItemPools/ItemPool_Ixora_All_Legendary',
        ]:
    short_name = pool_name.split('/')[-1]
    pool = ItemPool.from_data(data, pool_name)
    weight = None
    for drop in pool.balanceditems:
        if drop.balance_name and 'InvBalD_CM_Ixora_OPE_L01' in drop.balance_name:
            drop.weight.bvs /= 1.5
            weight = drop.weight
            break
    if not weight:
        raise Exception("Couldn't find Spy mod in {}".format(short_name))
    pool.add_balance(balance, weight)
    mod.comment(short_name)
    mod.reg_hotfix(Mod.LEVEL, 'FrostSite_P',
            pool_name,
            'BalancedItems',
            str(pool),
            )
            "drops to be either health charges or damage-reduction charges instead.",
        ],
        lic=Mod.CC_BY_SA_40,
        v='1.0.0',
        cats='mayhem',
        )

# Boosters to switch to
new_boosters = [
        '/Game/Gear/Shields/_Design/PartSets/Part_Augment/Charges/HealthCharge/HealthChargePickup/InvBal_HealthCharge',
        '/Game/Gear/Shields/_Design/PartSets/Part_Augment/Charges/FortifyCharge/FortifyCharge_Pickup/InvBal_FortifyCharge',
        # Not gonna do the damage one, since this is probably gonna be used by melee-focused builds.
        #'/Game/Gear/Shields/_Design/PartSets/Part_Augment/Charges/PowerCharge/PowerCharge_Pickup/InvBal_PowerCharge',
        ]
booster_weight = 1/len(new_boosters)

# Set up the pool
pool = ItemPool('/Game/PatchDLC/Mayhem2/Abilities/Enemy/FinishThem/ItemPool_Mayhem2_FinishThem')
pool.add_balance('/Game/Pickups/Health/DA_InventoryBalance_Health.DA_InventoryBalance_Health')
for booster in new_boosters:
    pool.add_balance(booster, weight=BVC(bvc=booster_weight))

# Write the hotfix
mod.reg_hotfix(Mod.EARLYLEVEL, 'MatchAll',
        pool.pool_name,
        'BalancedItems',
        str(pool))

mod.close()