bl2mods/Mods/ModUtils/objects/player.py
2023-03-22 12:57:56 -04:00

199 lines
3.6 KiB
Python

import unrealsdk
from ..enums import CurrencyType
class Player:
'Represents a player'
def __init__(self, player):
self._player = player
self._player.bHasSeenGoldenKeyMessageThisSession = True
@classmethod
def new_from_id(cls, pid):
return cls(unrealsdk.GetEngine().GamePlayers[pid])
@classmethod
def default(cls):
return cls.new_from_id(0)
## player objects
@property
def controller(self):
return self._player.Actor
@property
def currency(self):
return Currency(self._player.Actor.PlayerReplicationInfo)
@property
def pawn(self):
data = self.controller.MyWillowPawn
if not data:
raise AttributeError('No Pawn object. Are you on the main menu?')
return data
## useful player properties
@property
def character_name(self):
return self.controller.GetPlayerUINamePreference()
@property
def classmod_name(self):
return self.controller.PlayerReplicationInfo.GetClassModName()
@property
def level(self):
self.pawn.GetExpLevel()
@level.setter
def level(self, value):
if 1 > level > 80:
raise ValueError('Level must be anywhere from 1 to 80')
self.pawn.SetExpLevel(value)
@property
def shield_amount(self):
return self.pawn.GetShieldStrength()
@shield_amount.setter
def shield_amount(self, value):
max = self.shield_amount_max
if 0 > value > max:
raise ValueError(f'Shield amount must be between 0 and {max}')
self.pawn.SetShieldStrength(value)
@property
def shield_amount_max(self):
return self.pawn.GetMaxShieldStrength()
@property
def user_name(self):
return self._player.GetNickname()
def get_net_speed(self):
player = self.controller.Player
return {
'internet': player.ConfiguredInternetSpeed,
'lan': player.ConfiguredLanSpeed
}
def golden_key_add(self, value):
self.controller.AddGoldenKeysFromSource(0, value)
def golden_key_remove(self, value):
controller = self.controller
for _ in range(0, value - 1):
controller.SpendGoldenKey()
def console_command(self, *cmd):
command = ' '.join(str(c) for c in cmd)
self.controller.ConsoleCommand(command)
def refill_life(self):
self.pawn.FullyReplenishLife()
def refill_shields(self):
self.pawn.FullyReplenishShields()
def remove_status_effects(self):
self.pawn.RemoveAllStatusEffects()
def set_net_speed(self, lan=None, internet=None):
player = self.controller.Player
if lan == internet == None:
raise ValueError('Must provide a value for `lan` and/or `internet`')
if lan != None:
player.ConfiguredLanSpeed = lan
if internet != None:
player.ConfiguredInternetSpeed = internet
class Currency:
'Manage a player\'s currency'
def __init__(self, repinfo):
self._repinfo = repinfo
def __getattr__(self, key):
try:
get = object.__getattribute__(self, 'get')
return get(CurrencyType.parse(key))
except KeyError:
pass
object.__getattribute__(self, key)
def add(self, type, value):
if not isinstance(type, CurrencyType):
type = CurrencyType[type.upper()]
return self._repinfo.AddCurrencyOnHand(type.value)
def get(self, type):
if not isinstance(type, CurrencyType):
type = CurrencyType[type.upper()]
return self._repinfo.GetCurrencyOnHand(type.value)
def set(self, type, value):
if not isinstance(type, CurrencyType):
type = CurrencyType[type.upper()]
return self._repinfo.SetCurrencyOnHand(type.value, value)
def to_dict(self):
values = self._repinfo.GetAllCurrencyOnHand()
data = {}
for idx, type in enumerate(CurrencyType):
data[type] = values[idx]
return data
class SkillTree:
'View and/or manage a character\'s skill tree'
def __init__(self, player):
self._player = player
self._tree = player.controller.PlayerSkillTree