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']
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()
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')
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)
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)
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
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))
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
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
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)
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!')
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')
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()
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)
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
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)
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, ))
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
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
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
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()
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))
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))
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))
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))
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))
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)
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)
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
def listener_on_client_active(index): player = Player(index) # Check if CommunityID conversion will fail if player.steamid == "BOT": return player_manager.create(player)