199 lines
3.6 KiB
Python
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
|