Ejemplo n.º 1
0
def player_action(game_event):
    """Called any time a player is hurt or killed."""
    # Get the attacker's userid
    attacker = game_event['attacker']

    # Get the victim's userid
    victim = game_event['userid']

    # Is this self inflicted?
    if attacker in (victim, 0):
        return

    # Was this a team inflicted?
    if Player(index_from_userid(attacker)).team == Player(
            index_from_userid(victim)).team:
        return

    # Is this player_death?
    if game_event.name == 'player_death':

        # Add a kill to the attacker's stats
        most_damage[attacker]['kills'] += 1

        # Go no further
        return

    # This is player_hurt, so add the damage
    most_damage[attacker]['damage'] += game_event['dmg_health']
Ejemplo n.º 2
0
def respawn_bots(game_event):
        userid = game_event.get_int("userid")
        index = index_from_userid(userid)
        player = Player(index)
        playerinfo = playerinfo_from_index(index)
        if playerinfo.is_fake_client():
            SayText2("Respawning {0}".format(player.name)).send()
            Delay(2, player=Player(index))
            player.respawn()
Ejemplo n.º 3
0
def player_hurt(event):
    victim = event.get_int('userid')
    attacker = event.get_int('attacker')
    weapon = event.get_string('weapon')

    if victim:
        vic_entity = Player(index_from_userid(victim))
    if attacker:
        atk_entity = Player(index_from_userid(attacker))
    if attacker and victim and not weapon.lower() in ('point_hurt'):
        if not victim == attacker:
            if not atk_entity.team == vic_entity.team:
                checkEvent(victim, 'player_victim')
                checkEvent(attacker, 'player_attacker')
        checkEvent(victim, 'player_hurt')
Ejemplo n.º 4
0
def raceinfo_menu_build(menu, index):
    menu.clear()
    races = wcs.wcs.racedb.getAll()
    userid = userid_from_index(index)
    player_entity = Player(index)
    allraces = races.keys()
    for number, race in enumerate(allraces):
        if race in wcs.wcs.wcsplayers[userid].all_races:
            level = wcs.wcs.wcsplayers[userid].all_races[race]['level']
        else:
            level = 0
        raceinfo = wcs.wcs.racedb.getRace(race)
        nol = raceinfo['numberoflevels']
        nos = int(raceinfo['numberofskills'])
        if ('|') in nol:
            nol = nol.split('|')
        if len(nol) == 1:
            max_level = int(nol) * nos
        else:
            max_level = 0
            for x in nol:
                max_level += int(x)
        level_buffer = level
        max_level = int(max_level)
        if level_buffer > max_level:
            level_buffer = max_level
        if level:
            option = PagedOption('%s - [%s/%s]' % (race, level, max_level),
                                 race)
        else:
            option = PagedOption('%s' % str(race), race)
        menu.append(option)
Ejemplo n.º 5
0
 def _send_chosen_message(self, index, value):
     """Send message about choice made for setting change."""
     value = self.options[value].text
     if isinstance(value, TranslationStrings):
         player = Player(index)
         value = value.get_string(player.language)
     _message.send(index, convar=self.convar, value=value)
Ejemplo n.º 6
0
def on_event(game_event):
    userid = game_event.get_int("userid")
    index = index_from_userid(userid)
    player = Player(index)
    reason = game_event.get_string("reason")
    SayText2("%s {0} %shas left. Reason: \"%s{1}%s\"".format(player.name, reason) % (Color(0,153,0), Color(255,255,51), Color(255,255,255), Color(255,255,51))).send()
    return CommandReturn.BLOCK
Ejemplo n.º 7
0
def restedexp_menu_build(menu, index):
    player = Player(index)
    steamid = player.steamid
    menu.clear()
    menu.append(Text('Rested Experience - Main Menu'))
    menu.append(Text('-----------------------------'))
    menu.append(Text('Current Rested Experience: %s' %
                     int(db[steamid]["exp"])))
    if db[steamid]["gaintrig"] and int(toggle.get_int()):
        menu.append(Text("Collect Per Kill: On"))
    else:
        if not db[steamid]["gaintrig"] and int(toggle.get_int()):
            menu.append(Text("Collect Per Kill: Off"))
        else:
            menu.append(Text("Collect Per Kill: Off (Server Setting)"))
    menu.append(
        Text("Collected Per Kill: %s (Server Setting)" % gainxp.get_int()))
    menu.append(Text("-----------------------------"))
    menu.append(Text("Gain Amount (Online): %s" % tickoxp.get_int()))
    menu.append(Text("Gain Amount (Offline): %s" % tickaxp.get_int()))
    menu.append(Text("Gain Tick Rate: %s" % timer.get_int()))
    menu.append(Text("-----------------------------"))
    menu.append(SimpleOption(1, 'Toggle Collect Per Kill', 'toggle'))
    menu.append(
        SimpleOption(2, "Check Other Player's Rested Experience", 'check'))
    menu.append(Text("-----------------------------"))
    menu.append(SimpleOption(9, 'Close', highlight=False))
Ejemplo n.º 8
0
def canUse(userid, race):
    raceinfo = wcs.wcs.racedb.getRace(race)
    player_entity = Player(index_from_userid(userid))
    steamid = player_entity.steamid
    admins = raceinfo['allowonly'].split('|')
    if str(player_entity.steamid) in str(vip.vips):
        vip_access = vip.vips[steamid]['race_access']
    else:
        vip_access = 0
    if (not 'VIP' in admins) or (vip_access == "1"):
        if not wcs.wcs.curmap in raceinfo['restrictmap'].split('|'):
            if (len(admins) and not admins[0]) or (
                    player_entity.steamid
                    in admins) or ('ADMINS' in admins) or ('VIP' in admins):
                team = int(player_entity.team)
                if not raceinfo['restrictteam'] or raceinfo[
                        'restrictteam'] == 0 or not int(
                            raceinfo['restrictteam']) == team:
                    totallevel = wcs.wcs.wcsplayers[userid].totallevel
                    if totallevel >= int(raceinfo['required']):
                        if int(raceinfo['maximum']) and totallevel > int(
                                raceinfo['maximum']):
                            return 2
                        return 0
                    return 3
                return 4
            return 5
        return 6
    return 7

    return 7
Ejemplo n.º 9
0
def on_client_command(array, index):
    command = array[0]

    if command in command_manager:
        try:
            method, length, permission = command_manager[command]
        except:
            method, length = command_manager[command]

        player = Player(index)

        if method and check_permission(player, permission):
            args = [player]
            for i in range(1, len(array)):
                args.append(array[i])

            if len(args) == length:
                method(*args)
            else:
                engine_server.client_printf(
                    player.edict,
                    'CA - This command requires {} arguments.\n'.format(
                        length))

            return CommandReturn.BLOCK

    return CommandReturn.CONTINUE
Ejemplo n.º 10
0
def checkBuy(userid, item):
    userid = int(userid)
    iteminfo = wcs.wcs.ini.getItems[wcs.wcs.itemdb.getSectionFromItem(
        item)][item]
    player_entity = Player(index_from_userid(userid))
    if player_entity.dead:
        is_dead = 0
    else:
        is_dead = 1
    if is_dead == int(iteminfo['dab']) or int(iteminfo['dab']) == 2:
        ConVar('wcs_userid').set_int(userid)
        ConVar('wcs_dice').set_int(random.randint(0, 100))
        if iteminfo['cfg'] == 'player_buy' and iteminfo['cmdactivate']:
            settings = iteminfo['cmdactivate']
            if ';' in settings:
                sub_settings = settings.split(';')
                for com in sub_settings:
                    execute_server_command('es', com)
            else:
                execute_server_command('es', settings)
        elif iteminfo['cmdbuy']:
            settings = iteminfo['cmdbuy']
            if ';' in settings:
                sub_settings = settings.split(';')
                for com in sub_settings:
                    execute_server_command('es', com)
            else:
                execute_server_command('es', settings)
Ejemplo n.º 11
0
def mpr_command(command, index, team=None):
    if has_private(index) == 1:
        mpr_menu.send(index)
    else:
        wcs.wcs.tell(
            Player(index).userid,
            '\x04[WCS] \x05You do not have any private races!')
Ejemplo n.º 12
0
def player_death(args):
    userid = args.get_int('userid')
    attacker = args.get_int('attacker')
    if attacker > 0:
        if userid == attacker:  # Suicide
            players[
                userid] = 0  # Not sure is this require to "start over" from kills
            for i in soundlib.getUseridList():
                soundlib.playgamesound(i, 'quake/suicide.wav')
        if not soundlib.getTeam(userid) == soundlib.getTeam(attacker):
            players[userid] = 0
            players[attacker] += 1

            if _firstblood:
                soundlib.playgamesound(attacker, 'quake/firstblood.wav')
                setFirstblood(False)
            else:
                sound = getSound(players[attacker])
                if sound:
                    _play(attacker, sound)
            if GAME_NAME in games:
                if args.get_int('headshot'):
                    for i in soundlib.getUseridList():
                        soundlib.playgamesound(i, 'quake/headshot.mp3')
            else:
                if Player(index_from_userid(
                        userid)).last_hitgroup == HitGroup.HEAD:
                    for i in soundlib.getUseridList():
                        soundlib.playgamesound(i, 'quake/headshot.mp3')

            if args.get_string('weapon') == 'knife':
                for i in soundlib.getUseridList():
                    soundlib.playgamesound(i, 'quake/humiliation.mp3')
Ejemplo n.º 13
0
def wcs_amount_select(menu, index, choice):
    if choice.value == 'spendlevels':
        userid = userid_from_index(index)
        amount = int(choice.text)
        mxlvl = maxlevel.get_int()
        if bankplayer[userid].levels >= amount:
            if int(wcs.wcs.wcsplayers[userid].all_races[
                    wcs.wcs.wcsplayers[userid].currace]['level'] +
                   amount) > int(mxlvl):
                amount = int(mxlvl) - int(wcs.wcs.wcsplayers[userid].all_races[
                    wcs.wcs.wcsplayers[userid].currace]['level'])
            wcs.wcs.wcsplayers[userid].give_level(amount)
            bankplayer[userid].levels -= amount
            wcs.wcs.tell(
                userid_from_index(index),
                '\x04[WCS] \x05You got \x04%s Levels \x05left in your \x04Bank!'
                % bankplayer[userid].levels)
            bankplayer[userid].save()
        else:
            wcs.wcs.tell(
                userid_from_index(index),
                "\x04[WCS] \x05You don't have enough \x04levels \x05in your \x04bank!"
            )
            menu.send(index)
    else:
        userid = choice.value.userid
        amount = int(choice.text)
        player = Player(index)
        bankplayer[userid].levels += amount
        wcs.wcs.tell(
            userid,
            '\x04[WCS] \x05You got \x04%s Bank-Levels \x05from admin \x04%s!' %
            (amount, player.name))
        bankplayer[userid].save()
Ejemplo n.º 14
0
def send_win_message(message='', recipients=None):
    """Creates and sends the 'cs_win_panel_round' event.

    Args:
        message (str): Message to send, supports some HTML tags.
        recipients: List/tuple of player indexes that should receive the
            message.
    """
    event = game_event_manager.create_event('cs_win_panel_round')
    event.set_string('funfact_token', message)

    # Should the message be sent to everyone on the server?
    if recipients is None:
        game_event_manager.fire_event(event)

    # Or have the recipients been specified?
    else:
        for index in recipients:
            try:
                # Try to get a Player instance.
                Player(index).base_client.fire_game_event(event)
            except ValueError:
                continue

        # When firing events to players/clients directly, we need to free it
        # once we're done with it.
        game_event_manager.free_event(event)
Ejemplo n.º 15
0
def canUse(userid, race):
    player_entity = Player(index_from_userid(userid))
    raceinfo = wcs.wcs.racedb.getRace(race)
    totallevel = wcs.wcs.wcsplayers[userid].totallevel
    if totallevel >= int(raceinfo['required']):
        return 1
    return 0
Ejemplo n.º 16
0
def _drop_command(command, index):
    """Throw melee weapon on 'drop'."""
    player = Player(index)
    class_name = getattr(player.active_weapon, 'classname', None)
    if class_name not in _melee_weapons:
        return True

    if not _available_count[player.userid]:
        TextMsg(MESSAGE_STRINGS['Empty']).send(index)
        return

    _available_count[player.userid] -= 1
    TextMsg(MESSAGE_STRINGS['Remaining']).send(
        index,
        current=_available_count[player.userid],
        total=int(total_max),
    )

    start_location = player.eye_location
    velocity = player.view_coordinates - start_location
    weapon = Weapon.create(class_name)
    weapon.spawn()
    weapon.teleport(origin=start_location, velocity=velocity * 200)
    _throwers[weapon.index] = player.userid

    delay = int(remove_delay)
    weapon.delay(delay, weapon.remove)
Ejemplo n.º 17
0
def cmd_teleport(cmd):
    player = Player(cmd.index)

    initial_noblock = player.noblock
    player.set_noblock(True)
    player.delay(STUCK_RELEASE_TIMEOUT, player.set_noblock,
                 (initial_noblock, ))
Ejemplo n.º 18
0
def _on_player_death(event):
    player = Player(index_from_userid(event['userid']))
    flag = flag_manager.find_by_carrier(player.index)

    if flag:
        flag_manager.on_carried_death(flag)
        score_managers[teams_by_number[5-player.team]].score += 1
Ejemplo n.º 19
0
def pre_on_take_damage(args):
    # Get the victim
    victim = make_object(Player, args[0])

    # Get TakeDamageInfo object
    info = make_object(TakeDamageInfo, args[1])

    # Was it a self-inflicted damage?
    if info.attacker == victim.index:
        return

    # Check if attacker is a player
    entity = Entity(info.attacker)
    if not entity.is_player():
        return

    # Get the attacker
    attacker = Player(info.attacker)

    # Do our thing
    if attacker.is_bot() and not victim.is_bot():
        info.damage *= caches_from[victim.index].multiplier

    elif not attacker.is_bot() and victim.is_bot():
        info.damage *= caches_to[attacker.index].multiplier
Ejemplo n.º 20
0
def _on_enter_buy_zone(event):
    player = Player(index_from_userid(event['userid']))
    flag = flag_manager.find_by_carrier(player.index)

    if flag:
        flag_manager.on_enter_buy_zone(flag)
        score_managers[teams_by_number[player.team]].score += 3
Ejemplo n.º 21
0
def wcs_amount_select(menu, index, choice):
    amount = int(choice.text)
    player_entity = Player(index)
    if choice.value == 'xp':
        for player in PlayerIter():
            wcs.wcs.wcsplayers[player.userid].give_xp(amount)
            wcs.wcs.tell(
                player.userid,
                '\x04[WCS] \x05You got \x04%s XP \x05from admin \x04%s!' %
                (amount, player_entity.name))
    if choice.value == 'level':
        for player in PlayerIter():
            wcs.wcs.wcsplayers[player.userid].give_level(amount)
            wcs.wcs.tell(
                player.userid,
                '\x04[WCS] \x05You got \x04%s Levels \x05from admin \x04%s!' %
                (amount, player_entity.name))
    if choice.value == 'cash':
        for player in PlayerIter():
            player.cash += amount
            wcs.wcs.tell(
                player.userid,
                '\x04[WCS] \x05You got \x04%s$ \x05from admin \x04%s!' %
                (amount, player_entity.name))
    menu.clear()
Ejemplo n.º 22
0
def doCommand(userid):
    player_entity = Player(index_from_userid(userid))
    racel = wcs.wcs.wcsplayers[userid].currace
    race = wcs.wcs.racedb.getRace(racel)
    name = race['skillnames'].split('|')
    skills = wcs.wcs.wcsplayers[userid].skills.split('|')
    levels = int(race['numberoflevels'])
    myinfo_menu = SimpleMenu()
    myinfo_menu.select_callback = myinfo_select
    myinfo_menu.append(Text('->1. %s' % player_entity.name))
    myinfo_menu.append(Text('-' * 25))
    myinfo_menu.append(
        Text('o Total level %s' % str(wcs.wcs.wcsplayers[userid].totallevel)))
    myinfo_menu.append(Text('-' * 25))
    myinfo_menu.append(
        Text('o %s: Level %s' % (str(wcs.wcs.wcsplayers[userid].currace),
                                 str(wcs.wcs.wcsplayers[userid].level))))
    for skill, level in enumerate(skills):
        myinfo_menu.append(
            Text(' - %s: [%s/%s]' % (name[skill], str(level), str(levels))))
    myinfo_menu.append(Text('-' * 25))
    myinfo_menu.append(Text('Health : %s HP' % player_entity.health))
    myinfo_menu.append(
        Text('Speed : %s%%' % str(round(player_entity.speed * 100))))
    myinfo_menu.append(
        Text('Gravity : %s%%' % str(round(player_entity.gravity * 100))))
    myinfo_menu.append(Text(' '))
    myinfo_menu.append(SimpleOption(8, 'Next', value=7))
    myinfo_menu.append(SimpleOption(9, 'Close', highlight=False))
    myinfo_menu.send(index_from_userid(userid))
Ejemplo n.º 23
0
def doCommand2(userid):
    player_entity = Player(index_from_userid(userid))
    available = available_races(userid)
    left = left_to_next(userid)
    all_count = all_races()
    perc = float(available) / (float(all_count) / 100.0)
    perc = Decimal(perc)
    perc = round(perc, 2)
    rank = wcs.wcs.wcsplayers[userid].get_rank()
    myinfo2_menu = SimpleMenu()
    myinfo2_menu.select_callback = myinfo2_select
    myinfo2_menu.append(Text('->1. %s' % player_entity.name))
    myinfo2_menu.append(Text('-' * 25))
    myinfo2_menu.append(
        Text('Total level: %s' % str(wcs.wcs.wcsplayers[userid].totallevel)))
    myinfo2_menu.append(Text('-' * 25))
    myinfo2_menu.append(Text('- WCS rank: %s' % rank[0]))
    myinfo2_menu.append(Text('- Levels to next race: %s' % left))
    myinfo2_menu.append(
        Text('- Races available: %s of %s' % (available, all_count)))
    myinfo2_menu.append(Text('- Percentage of races: %s' % perc))
    myinfo2_menu.append(Text('-' * 25))
    myinfo2_menu.append(SimpleOption(7, 'Back', value=8))
    myinfo2_menu.append(Text(' '))
    myinfo2_menu.append(SimpleOption(9, 'Close', highlight=False))
    myinfo2_menu.send(index_from_userid(userid))
Ejemplo n.º 24
0
    def iterator():
        """Iterate over all :class:`players.entity.Player` objects."""
        # Loop through all players on the server
        for edict in PlayerGenerator():

            # Yield the Player instance for the current edict
            yield Player(index_from_edict(edict))
Ejemplo n.º 25
0
    def build(cls, menu, index):
        """Add reasons from reasons file into the menu"""
        menu.clear()
        reasons_list = reasons_messages['reasons'][Player(
            index).language[:2]]['ban']

        for reasons in reasons_list:
            menu.append(PagedOption(reasons, reasons))
Ejemplo n.º 26
0
def wcs_amount_select(menu, index, choice):
    userid = choice.value.userid
    amount = int(choice.text)
    player = Player(index)
    wcs.wcs.wcsplayers[userid].give_xp(amount)
    wcs.wcs.tell(
        userid, '\x04[WCS] \x05You got \x04%s XP \x05from admin \x04%s!' %
        (amount, player.name))
Ejemplo n.º 27
0
def callback(popup, index, option):
    player_from = Player(index)
    try:
        player_to = Player.from_userid(option.value)
    except:
        SAY_PLAYER_DISCONNECT.send(index)
    else:
        teleport_player_to_player(player_from, player_to)
Ejemplo n.º 28
0
def wcs_amount_select(menu, index, choice):
	userid = choice.value.userid
	if choice.text == 'Yes':
		player_entity = Player(index)
		wcs.wcs.wcsplayers[player_entity.userid].delete_player()
		wcs.wcs.tell(userid, '\x04[WCS] \x05You have been completely reset by admin \x04%s!' % player_entity.name)
	if choice.text == 'No':
		menu.close(index)
Ejemplo n.º 29
0
def is_admin(userid):
    admins = ini.getAdmins
    index = index_from_userid(userid)
    player = Player(index)
    if player.steamid in admins:
        return True
    else:
        return False
Ejemplo n.º 30
0
def listener_on_client_active(index):
    player = Player(index)

    # Check if CommunityID conversion will fail
    if player.steamid == "BOT":
        return

    player_manager.create(player)