def factory(random_col: bool): act = _ba.get_foreground_host_activity() if not isinstance(act, GameActivity): return m = _ba.get_foreground_host_activity().map.get_def_bound_box( 'area_of_interest_bounds') part1 = list(m) part2 = list(m) half = (m[0] + m[3]) / 2 part1[3] = half part2[0] = half ba.timer(0.3, ba.Call(create_fly, part1, random_col)) ba.timer(1, ba.Call(create_fly, part2, random_col)) ba.timer(0.12, ba.Call(create_fly, part1, random_col)) ba.timer(0.88, ba.Call(create_fly, part2, random_col)) ba.timer(1.8, ba.Call(create_fly, part1, random_col)) ba.timer(3.3, ba.Call(create_fly, part2, random_col)) ba.timer(4.78, ba.Call(create_fly, part1, random_col)) ba.timer(2, ba.Call(create_fly, part2, random_col)) ba.timer(6.3, ba.Call(create_fly, part1, random_col)) ba.timer(3.3, ba.Call(create_fly, part2, random_col)) ba.timer(4.78, ba.Call(create_fly, part1, random_col)) ba.timer(2, ba.Call(create_fly, part2, random_col)) ba.timer(6.3, ba.Call(create_fly, part1, random_col)) ba.timer(3.5, ba.Call(create_fly, part2, random_col)) ba.timer(4.28, ba.Call(create_fly, part1, random_col)) ba.timer(2.2, ba.Call(create_fly, part2, random_col)) ba.timer(6.1, ba.Call(create_fly, part1, random_col))
def fly(arguments): if arguments == [] or arguments == ['']: return elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for players in activity.players: if players.actor.node.fly != True: players.actor.node.fly = True else: players.actor.node.fly = False else: try: activity = _ba.get_foreground_host_activity() player = int(arguments[0]) if activity.players[player].actor.node.fly != True: activity.players[player].actor.node.fly = True else: activity.players[player].actor.node.fly = False except: return
def creep(arguments): if arguments == [] or arguments == ['']: return elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for players in activity.players: node = players.actor.node if node.head_model != None: node.head_model = None node.handlemessage(ba.PowerupMessage(poweruptype='punch')) node.handlemessage(ba.PowerupMessage(poweruptype='shield')) else: try: player = int(arguments[0]) activity = _ba.get_foreground_host_activity() node = activity.players[player].actor.node if node.head_model != None: node.head_model = None node.handlemessage(ba.PowerupMessage(poweruptype='punch')) node.handlemessage(ba.PowerupMessage(poweruptype='shield')) except: return
def headless(arguments): if arguments == [] or arguments == ['']: return elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for players in activity.players: node = players.actor.node if node.head_model != None: node.head_model = None node.style = 'cyborg' else: try: player = int(arguments[0]) activity = _ba.get_foreground_host_activity() node = activity.players[player].actor.node if node.head_model != None: node.head_model = None node.style = 'cyborg' except: return
def end(arguments): if arguments == [] or arguments == ['']: try: with _ba.Context(_ba.get_foreground_host_activity()): _ba.get_foreground_host_activity().end_game() except: pass
def _put_log() -> None: try: sessionname = str(_ba.get_foreground_host_session()) except Exception: sessionname = 'unavailable' try: activityname = str(_ba.get_foreground_host_activity()) except Exception: activityname = 'unavailable' info = { 'log': _ba.getlog(), 'version': app.version, 'build': app.build_number, 'userAgentString': app.user_agent_string, 'session': sessionname, 'activity': activityname, 'fatal': 0, 'userRanCommands': _ba.has_user_run_commands(), 'time': _ba.time(TimeType.REAL), 'userModded': _ba.has_user_mods(), 'newsShow': _ba.get_news_show(), } def response(data: Any) -> None: # A non-None response means success; lets # take note that we don't need to report further # log info this run if data is not None: app.log_have_new = False _ba.mark_log_sent() master_server_post('bsLog', info, response)
def pause(self) -> None: """Pause the game due to a user request or menu popping up. If there's a foreground host-activity that says it's pausable, tell it to pause ..we now no longer pause if there are connected clients. """ activity: Optional[ba.Activity] = _ba.get_foreground_host_activity() if (activity is not None and activity.allow_pausing and not _ba.have_connected_clients()): from ba import _gameutils from ba._language import Lstr from ba._nodeactor import NodeActor # FIXME: Shouldn't be touching scene stuff here; # should just pass the request on to the host-session. with _ba.Context(activity): globs = activity.globalsnode if not globs.paused: _ba.playsound(_ba.getsound('refWhistle')) globs.paused = True # FIXME: This should not be an attr on Actor. activity.paused_text = NodeActor( _ba.newnode('text', attrs={ 'text': Lstr(resource='pausedByHostText'), 'client_only': True, 'flatness': 1.0, 'h_align': 'center' }))
def handlemsg_all(msg): """Handle Spaz message for all players in activity""" activity = _ba.get_foreground_host_activity() for i in activity.players: i.actor.node.handlemessage(msg)
def getactivity(gameactivity: bool = False) -> Optional[Activity]: activity = get_foreground_host_activity() if activity: if (gameactivity and isinstance(activity.__class__, GameActivity) and not getattr(activity, 'has_ended', lambda: True) ()) or not gameactivity: return weakref.ref(activity)() return None
def god_mode(arguments, clientid): if arguments == [] or arguments == ['']: myself = clientid_to_myself(clientid) activity = _ba.get_foreground_host_activity() player = activity.players[myself].actor if player._punch_power_scale != 7: player._punch_power_scale = 7 player.node.hockey = True player.node.invincible = True else: player._punch_power_scale = 1.2 player.node.hockey = False player.node.invincible = False elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for i in activity.players: if i.actor._punch_power_scale != 7: i.actor._punch_power_scale = 7 i.actor.node.hockey = True i.actor.node.invincible = True else: i.actor._punch_power_scale = 1.2 i.actor.node.hockey = False i.actor.node.invincible = False else: activity = _ba.get_foreground_host_activity() req_player = int(arguments[0]) player = activity.players[req_player].actor if player._punch_power_scale != 7: player._punch_power_scale = 7 player.node.hockey = True player.node.invincible = True else: player._punch_power_scale = 1.2 player.node.hockey = False player.node.invincible = False
def rotate_camera(): activity = _ba.get_foreground_host_activity() if activity.globalsnode.camera_mode != 'rotate': activity.globalsnode.camera_mode = 'rotate' else: activity.globalsnode.camera_mode == 'normal'
def pause(): activity = _ba.get_foreground_host_activity() if activity.globalsnode.paused != True: activity.globalsnode.paused = True else: activity.globalsnode.paused = False
def slow_motion(): activity = _ba.get_foreground_host_activity() if activity.globalsnode.slow_motion != True: activity.globalsnode.slow_motion = True else: activity.globalsnode.slow_motion = False
def new_end(self, results: Any = None, delay: float = 0.0, force: bool = False): """Runs when game is ended.""" activity = _ba.get_foreground_host_activity() if isinstance(activity, CoopScoreScreen): team_balancer.checkToExitCoop() org_end(self, results, delay, force)
def super_punch(arguments, clientid): activity = _ba.get_foreground_host_activity() if arguments == [] or arguments == ['']: myself = clientid_to_myself(clientid) if activity.players[myself].actor._punch_power_scale != 15: activity.players[myself].actor._punch_power_scale = 15 activity.players[myself].actor._punch_cooldown = 0 else: activity.players[myself].actor._punch_power_scale = 1.2 activity.players[myself].actor._punch_cooldown = 400 elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for i in activity.players: if i.actor._punch_power_scale != 15: i.actor._punch_power_scale = 15 i.actor._punch_cooldown = 0 else: i.actor._punch_power_scale = 1.2 i.actor._punch_cooldown = 400 else: try: activity = _ba.get_foreground_host_activity() req_player = int(arguments[0]) if activity.players[req_player].actor._punch_power_scale != 15: activity.players[req_player].actor._punch_power_scale = 15 activity.players[req_player].actor._punch_cooldown = 0 else: activity.players[req_player].actor._punch_power_scale = 1.2 activity.players[req_player].actor._punch_cooldown = 400 except: return
def invi(arguments): if arguments == [] or arguments == ['']: return elif arguments[0] == 'all': activity = _ba.get_foreground_host_activity() for i in activity.players: body = i.actor.node if body.torso_model != None: body.head_model = None body.torso_model = None body.upper_arm_model = None body.forearm_model = None body.pelvis_model = None body.hand_model = None body.toes_model = None body.upper_leg_model = None body.lower_leg_model = None body.style = 'cyborg' else: player = int(arguments[0]) activity = _ba.get_foreground_host_activity() body = activity.players[player].actor.node if body.torso_model != None: body.head_model = None body.torso_model = None body.upper_arm_model = None body.forearm_model = None body.pelvis_model = None body.hand_model = None body.toes_model = None body.upper_leg_model = None body.lower_leg_model = None body.style = 'cyborg'
def list_callback(playerdata: PlayerData, args): client_ids = [ (i['players'][0]['name_full'] if i['players'] else i['displayString'], str(i['client_id'])) for i in _ba.get_game_roster() ] chatmessage(get_locale('player_ids_text')) activity = _ba.get_foreground_host_activity() for i in range(len(activity.players)): p = activity.players[i] chatmessage('{} | {} | {}'.format( i, p.getname().ljust(15), p.sessionplayer.inputdevice.client_id)) chatmessage(get_locale('dividing_strip_text'))
def _new_hp(): if not self.node: return hp = ba.newnode('math', owner=self.node, attrs={ 'input1': (0, 0.65, 0), 'operation': 'add' }) self.node.connectattr('torso_position', hp, 'input2') self.hp = ba.newnode('text', owner=self.node, attrs={ 'text': '', 'in_world': True, 'shadow': 1.0, 'flatness': 1.0, 'scale': 0.008, 'h_align': 'center', }) hp.connectattr('output', self.hp, 'position') #ba.animate(self.hp, 'scale', {0:0, 0.2:0, 0.6:0.018, 0.8:0.012}) activity = get_foreground_host_activity() if don.tint: activity.globalsnode.tint = (tintColor) def _update(): if not self.hp: return if self.shield: hptext = int( (self.shield_hitpoints / self.shield_hitpoints_max) * 100) else: hptext = int(self.hitpoints * 0.1) if hptext >= 75: color = (1, 1, 1) elif hptext >= 50: color = (1, 1, 1) elif hptext >= 25: color = (1, 1, 1) else: color = (1, 1, 1) self.hp.text = 'HP:' + str(hptext) self.hp.color = (0.2, 1.0, 0.8) if self.shield else color ba.timer(0.05, _update, repeat=True)
def dv(arguments): activity = _ba.get_foreground_host_activity() if arguments == [] or arguments == ['']: if activity.globalsnode.tint != (1, 1, 1): activity.globalsnode.tint = (1, 1, 1) else: #will fix this soon pass elif arguments[0] == 'off': if activity.globalsnode.tint != (1, 1, 1): return else: pass
def display_achievement_banner(achname: str) -> None: """Display a completion banner for an achievement. Used for server-driven achievements. """ try: # FIXME: Need to get these using the UI context or some other # purely local context somehow instead of trying to inject these # into whatever activity happens to be active # (since that won't work while in client mode). activity = _ba.get_foreground_host_activity() if activity is not None: with _ba.Context(activity): get_achievement(achname).announce_completion() except Exception: from ba import _error _error.print_exception('error showing server ach')
def sleep(arguments, clientid): activity = _ba.get_foreground_host_activity() if arguments == [] or arguments == ['']: myself = clientid_to_myself(clientid) activity.players[myself].actor.node.handlemessage('knockout', 8000) elif arguments[0] == 'all': for i in activity.players: i.actor.node.handlemessage('knockout', 8000) else: try: req_player = int(arguments[0]) activity.players[req_player].actor.node.handlemessage( 'knockout', 8000) except: return
def night_mode() -> None: """Checks the time and enables night mode.""" if settings['autoNightMode']['enable']: start = datetime.strptime(settings['autoNightMode']['startTime'], "%H:%M") end = datetime.strptime(settings['autoNightMode']['endTime'], "%H:%M") now = datetime.now() if now.time() > start.time() or now.time() < end.time(): activity = _ba.get_foreground_host_activity() activity.globalsnode.tint = (0.5, 0.7, 1.0) if settings['autoNightMode']['fireflies']: fire_flies.factory( settings['autoNightMode']["fireflies_random_color"])
def resume(self) -> None: """Resume the game due to a user request or menu closing. If there's a foreground host-activity that's currently paused, tell it to resume. """ # FIXME: Shouldn't be touching scene stuff here; # should just pass the request on to the host-session. activity = _ba.get_foreground_host_activity() if activity is not None: with _ba.Context(activity): globs = activity.globalsnode if globs.paused: _ba.playsound(_ba.getsound('refWhistle')) globs.paused = False # FIXME: This should not be an actor attr. activity.paused_text = None
def _notify_handlers(cmd: str, playerdata: PlayerData): args = cmd.split() for handler in _handlers: if args[0] in handler.commands and playerdata.status in handler.statuses: if _lastrun.get(playerdata.id, {}).get( args[0], 0) + handler.statuses[playerdata.status] < int( datetime.now().timestamp()): try: with ba.Context(get_foreground_host_activity()): handler.callback(playerdata, args) except Exception: ba.print_exception( f'Error while processing command {cmd} from {playerdata.id}' ) chatmessage(get_locale('command_some_error')) lastrun = _lastrun.get(playerdata.id, {}) lastrun[args[0]] = int(datetime.now().timestamp()) _lastrun[playerdata.id] = lastrun else: chatmessage(get_locale('commands_too_many'))
def handlemsg(client, msg): """Handles Spaz Msg For Single Player""" activity = _ba.get_foreground_host_activity() activity.players[client].actor.node.handlemessage(msg)