def command_dispatch(cmd, id, client): if cmd[0] == "!status": room.send_message( "Name: %s\n Map: %s\n Players: %d/%d (%d bots)\n Tags: %s" % (server.server.name, server.server.map_name, server.server.num_clients, server.server.max_clients, server.server.num_fake_clients, cvar.find_var("sv_tags").get_string())) elif cmd[0] == "!players": msg = "\n".join("%s: %s" % (p.name, p.kills) for p in PlayerIter()) room.send_message(msg if msg else "No players.") elif cmd[0] == "!abuse": room.send_message("mod abuse: " + str(mod_abuse) + "/11") elif cmd[0] == "!rcon": if id in elevated: server.queue_command_string(cmd[1]) else: room.send_message("You do not have permission to do that.") elif cmd[0] == "!rm": if id in elevated: msg = client.get_message(int(cmd[1])) msg.delete() else: room.send_message("You do not have permission to do that.") elif cmd[0] == "!trash": if id in elevated: msg = client.get_message(int(cmd[1])) msg.move("19718") else: room.send_message("You do not have permission to do that.") else: room.send_message("No such command.")
def load(): if cvar.find_var('eventscripts_addondir') is not None: raise RuntimeError('EventScripts is already loaded.') print('Adding "{}" to sys.path.'.format(str(ES_PATH))) sys.path.append(str(ES_PATH)) print('Adding "{}" to sys.path.'.format(ES_LIBS_PATH)) sys.path.append(str(ES_LIBS_PATH)) print('Initializing console variables...') from . import cvars print('Initializing console commands...') from . import cmds print('Initializing logic...') from . import logic print('Initializing EventScripts...') import es logic.post_initialization() # TODO: There is a conflict between ES' and SP's keyvalues module import _libs.python.keyvalues as x sys.modules['keyvalues'] = x es.load('esc') es.server.queuecmd('es_load corelib')
def _get_convar(name, create=False, description='Custom server variable.'): convar = cvar.find_var(name) if convar is None: if create or autocreate_cvar.get_bool(): return ConVar(name, '', description) else: import es es.dbgmsg(0, 'ERROR: Variable does not exist.') return convar
def _get_stack_length(argv): name = argv[2] if len(argv) > 1 else '' try: stack = stacks[name] except KeyError: es.dbgmsg(0, 'The stack {} couldn\'t be found.'.format(name)) else: var_name = argv[1] var = cvar.find_var(var_name) if var is not None: var.set_string(str(len(stack))) else: es.dbgmsg(0, 'The var "{}" could not be set'.format(var_name))
def _save_stack(argv): var_name = argv[2] if len(argv) > 1 else '' var = cvar.find_var(var_name) if var is not None: name = argv[1] try: stack = stacks[name] except KeyError: es.dbgmsg(0, 'The stack {} couldn\'t be found.'.format(name)) else: stack.append(var.get_string()) else: es.dbgmsg(0, 'The variable {} does not exist.'.format(var_name))
def __init__(self, name, value): """Object initialization.""" # Store the convar self.convar = cvar.find_var(name) # Store its runtime value self.value = value # Store its default value, if it exists if self.convar is not None: self.default = self.convar.get_int() else: self.default = None
def _pop_stack(argv): name = argv[2] if len(argv) > 1 else '' try: stack = stacks[name] except KeyError: es.dbgmsg(0, 'The stack {} couldn\'t be found.'.format(name)) else: if stack: value = stack.pop() var_name = argv[1] var = cvar.find_var(var_name) if var is not None: var.set_string(value) else: es.dbgmsg(0, 'The var "{}" could not be set'.format(var_name)) else: es.dbgmsg(0, 'stack: ERROR: Pop attempt when stack empty.')
def profile(argv): operation = argv[0] if len(argv) > 0 else '' var_name = argv[1] if len(argv) > 1 else '' if operation.lower() == 'begin': es.dbgmsg(1, 'Profiler timer {} started.'.format(var_name)) es.setString(var_name, str(time.time())) else: var = cvar.find_var(var_name) if var is None: es.dbgmsg(0, 'The var "{}" could not be found'.format(var_name)) return if not _can_change(var): return now = time.time() diff = now - atof(var.get_string()) es.dbgmsg(2, 'Profiler: {} - {} = {}'.format(now, var.get_string(), diff)) var.set_float(diff) es.dbgmsg(1, 'Profiler timer {} ended: {}'.format(var_name, diff))
game_event_manager.fire_event(event) except RuntimeError: # TODO: # I have no idea why that happens, but the event gets fired... pass else: es.dbgmsg(0, 'es_client_command not fired! =(') return CommandReturn.CONTINUE # ============================================================================= # >> RCON PASSWORD PROTECTION # ============================================================================= if protectrcon_cvar.get_int() > 0: cvar.find_var('rcon_password').add_flags(ConVarFlags.PROTECTED) # ============================================================================= # >> mattie_eventscripts.res # ============================================================================= if game_event_manager.load_events_from_file(str(ES_EVENTS_PATH)) == 0: raise ValueError('Failed to load mattie_eventscripts.res') if defaultevents_cvar.get_int() != 0: default_event_registration() # ============================================================================= # >> eventscripts_setipcmdline # ============================================================================= def check_ip_cmdline():
config_manager.controlled_cvar( bool_handler, "enabled", default=1, description="Enable/Disable team balancing", ) text_msg = { 'denied your_team': TextMsg(strings_module['denied your_team']), 'denied locked': TextMsg(strings_module['denied locked']), 'denied balance': TextMsg(strings_module['denied balance']), 'denied no_license': TextMsg(strings_module['denied no_license']), } cvar_limitteams = cvar.find_var('mp_limitteams') cvar_autoteambalance = cvar.find_var('mp_autoteambalance') def ratio_handler(cvar): try: val = float(cvar.get_string()) except ValueError: raise InvalidValue if val < 0: raise InvalidValue return val config_manager.controlled_cvar(
self.clear() # Store a global instance of `DefaultConVars` default_convars = DefaultConVars([ DefaultConVar('mp_buytime', 60 * 60), DefaultConVar('mp_startmoney', 10_000), DefaultConVar('mp_buy_anywhere', 1), DefaultConVar('mp_solid_teammates', int(cvar_enable_noblock.get_int() == 0)), DefaultConVar('mp_respawn_on_death_t', 0), DefaultConVar('mp_respawn_on_death_ct', 0), DefaultConVar('mp_randomspawn', 0), DefaultConVar('mp_randomspawn_los', 0), DefaultConVar('mp_buy_during_immunity', 0), DefaultConVar('mp_respawn_immunitytime', 0 if cvar_spawn_protection_delay.get_int() > 0 else 2), DefaultConVar('sv_infinite_ammo', 0 if cvar_enable_infinite_ammo.get_bool() else 2), DefaultConVar('mp_friendlyfire', 0), DefaultConVar('mp_freezetime', 0), DefaultConVar('mp_dm_bonus_length_max', 0), DefaultConVar('mp_dm_bonus_length_min', 0), DefaultConVar('mp_dm_time_between_bonus_max', 9999), DefaultConVar('mp_dm_time_between_bonus_min', 9999), DefaultConVar('mp_do_warmup_period', 0) ]) # Store the convar `mp_restartgame` mp_restartgame = cvar.find_var('mp_restartgame')
game_event_manager.fire_event(event) except RuntimeError: # TODO: # I have no idea why that happens, but the event gets fired... pass else: es.dbgmsg(0, 'es_client_command not fired! =(') return CommandReturn.CONTINUE # ============================================================================= # >> RCON PASSWORD PROTECTION # ============================================================================= if protectrcon_cvar.get_int() > 0: cvar.find_var('rcon_password').add_flags(ConVarFlags.PROTECTED) # ============================================================================= # >> mattie_eventscripts.res # ============================================================================= if game_event_manager.load_events_from_file(str(ES_EVENTS_PATH)) == 0: raise ValueError('Failed to load mattie_eventscripts.res') if defaultevents_cvar.get_int() != 0: default_event_registration() # ============================================================================= # >> eventscripts_setipcmdline # =============================================================================
# ============================================================================= NO_SRV_CHECK_GAMES = ['csgo'] if PLATFORM == 'windows': clib = memory.find_binary('msvcrt.dll') tier1 = memory.find_binary('bin/tier0') else: clib_path = find_library('c') if clib_path is None: raise ValueError('Unable to find C library.') clib = memory.find_binary(clib_path, check_extension=False) tier1 = memory.find_binary('bin/libtier0', SOURCE_ENGINE_BRANCH not in NO_SRV_CHECK_GAMES) sv_cheats = cvar.find_var('sv_cheats') # ============================================================================= # >> ConVar structure for es.forcevalue() # ============================================================================= type_manager = TypeManager() ConVar_ = type_manager.create_type_from_file( 'ConVar_', EMU_DATA_PATH / 'memory' / 'ConVar_.ini') # ============================================================================= # >> C FUNCTIONS # ============================================================================= atoi = clib['atoi'].make_function(Convention.CDECL, [DataType.STRING], DataType.INT)
] if PLATFORM == 'windows': clib = memory.find_binary('msvcrt.dll') tier1 = memory.find_binary('bin/tier0') else: clib_path = find_library('c') if clib_path is None: raise ValueError('Unable to find C library.') clib = memory.find_binary(clib_path, check_extension=False) tier1 = memory.find_binary( 'bin/libtier0', SOURCE_ENGINE_BRANCH not in NO_SRV_CHECK_GAMES) sv_cheats = cvar.find_var('sv_cheats') # ============================================================================= # >> ConVar structure for es.forcevalue() # ============================================================================= type_manager = TypeManager() ConVar_ = type_manager.create_type_from_file( 'ConVar_', EMU_DATA_PATH / 'memory' / 'ConVar_.ini') # ============================================================================= # >> C FUNCTIONS # ============================================================================= atoi = clib['atoi'].make_function(
def command_dispatch(cmd, sender): id = sender.id if sender else 0 if cmd[0] == "!status": send_command_response( "Name: %s\nMap: %s\nPlayers: %d/%d (%d bots)\nTags: %s" % (server.server.name, server.server.map_name, server.server.num_clients, server.server.max_clients, server.server.num_fake_clients, cvar.find_var("sv_tags").get_string()), sender, True) elif cmd[0] == "!players": msg = "\n".join( "%s%s - %s (http://steamcommunity.com/profiles/%s): %s kills/%s deaths" % ("*DEAD* " if p.playerinfo.is_dead() else "", "RED" if p.team == 2 else "BLU" if p.team == 3 else "SPEC", p.name, SteamID.parse(p.steamid if p.steamid != "BOT" else "[U:1:22202]" ).to_uint64(), p.kills, p.deaths) for p in PlayerIter()) send_command_response(msg if msg else "No players.", sender, True) elif cmd[0] == "!abuse": send_command_response("Admin abuse: " + str(mod_abuse) + "/11", sender, False) elif cmd[0] == "!rcon": if id in elevated: server.queue_command_string(cmd[1]) else: send_command_response("You do not have permission to do that.", sender, False) elif cmd[0] == "!rm": if id in elevated: msg = client.get_message(int(cmd[1])) msg.delete() else: send_command_response("You do not have permission to do that.", sender, False) elif cmd[0] == "!trash": if id in elevated: msg = client.get_message(int(cmd[1])) msg.move("19718") else: send_command_response("You do not have permission to do that.", sender, False) elif cmd[0] == "!pull": if id in elevated: result = run([ "git", "-C", PLUGIN_PATH + "/tf2goat/", "pull", "origin", branch, "-X", "theirs", "--no-edit" ]) if result.returncode == 0: send_command_response("Pulled; restarting in 5 seconds...", sender, False) sleep(5) _core_command.reload_plugin("tf2goat") else: send_command_response( "Pull failed. Return code: %d" % result.returncode, sender, False) else: send_command_response("You do not have permission to do that.", sender, False) elif cmd[0] == "!curl": if id in elevated: url, path = cmd[1].split(" ", 1) try: urlretrieve(url, filename=GAME_PATH + path) send_command_response("Curl successful.", sender, False) except: send_command_response("Curl failed.", sender, False) else: send_command_response("You do not have permission to do that.", sender, False) else: send_command_response("No such command.", sender, False)
def _muparser_parse_var(name): var = cvar.find_var(name) if var is None: return 0 return var.get_float()