Exemple #1
0
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.")
Exemple #2
0
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_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 _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))
Exemple #8
0
    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 _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 _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 _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.')
Exemple #12
0
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))
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))
Exemple #14
0
                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():
Exemple #15
0
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(
Exemple #16
0
        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(
Exemple #20
0
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)
Exemple #21
0
def _muparser_parse_var(name):
    var = cvar.find_var(name)
    if var is None:
        return 0

    return var.get_float()