def _punish_player(userid, punishment, adminid, args = [], force = False): if adminid == 0 or xapunishments.isUseridAuthorized(adminid, punishment+"_player") or force: if (not xapunishments.isUseridAuthorized(userid, "immune_"+punishment)) or (userid == adminid) or force: if userid in playerlib.getUseridList("#alive"): if callable(punishment_method[punishment]): xapunishments.logging.log("Player "+es.getplayername(adminid)+ " used punishment "+str(punishment)+" on player "+es.getplayername(userid)) try: punishment_method[punishment](userid, adminid, args, force) except TypeError: try: punishment_method[punishment](userid, adminid, args) except TypeError: punishment_method[punishment](userid, adminid) return True else: es.dbgmsg(0, "xapunishments.py: Cannot find method '"+str(punishment_method[punishment])+"'!") return False else: es.tell(adminid, xalanguage("dead", {'username':es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell(adminid, xalanguage("immune", {'username':es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell(adminid, xalanguage("not allowed", (), playerlib.getPlayer(adminid).get("lang"))) return False
def _play_quakesound(soundname, userid, attackerid): if soundname in quake_sounds_kv: if 'mode' in quake_sounds_kv[soundname]: mode = int(quake_sounds_kv[soundname]['mode']) else: mode = '1' if 'visual_mode' in quake_sounds_kv[soundname]: visual_mode = int(quake_sounds_kv[soundname]['visual_mode']) else: visual_mode = '1' if mode == 0: useridlist_sound = [] elif mode == 1: useridlist_sound = playerlib.getUseridList('#human') elif mode == 2: useridlist_sound = [userid, attackerid] elif mode == 3: useridlist_sound = [attackerid] elif mode == 4: useridlist_sound = [userid] else: useridlist_sound = playerlib.getUseridList('#human') if visual_mode == 0: useridlist_text = [] elif visual_mode == 1: useridlist_text = playerlib.getUseridList('#human') elif visual_mode == 2: useridlist_text = [userid, attackerid] elif visual_mode == 3: useridlist_text = [attackerid] elif visual_mode == 4: useridlist_text = [userid] else: useridlist_text = playerlib.getUseridList('#human') if (userid > 0) and (attackerid > 0): langdata = {"username":es.getplayername(userid), "attackername":es.getplayername(attackerid)} elif userid > 0: langdata = {"username":es.getplayername(userid)} elif attackerid > 0: langdata = {"attackername":es.getplayername(attackerid)} else: langdata = {} for userid in useridlist_sound: if not es.isbot(userid): soundfile = None style = str(quake_sounds_setting.get(userid)) if style != 'off': if style in quake_sounds_kv[soundname]['sound']: soundfile = str(quake_sounds_kv[soundname]['sound'][style]) elif 'standard' in quake_sounds_kv[soundname]['sound']: soundfile = str(quake_sounds_kv[soundname]['sound']['standard']) if soundfile: es.playsound(userid, soundfile, 1.0) for userid in useridlist_text: if not es.isbot(userid): style = str(quake_sounds_setting.get(userid)) if style != 'off': player = playerlib.getPlayer(userid) soundtext = quake_sounds_language(soundname, langdata, player.get("lang")) usermsg.centermsg(userid, str(soundtext))
def score_menu_cmd(userid, args): # Make sure player exists if not es.exists('userid', userid) and userid != 0: return # Get list of levels scoreList = [] for player in es.getUseridList(): scoreList.append('[%s] %s' % (Player(player).level, es.getplayername(player))) # Sort from highest to lowest scoreList.sort(lambda a, b: cmp(int(b[1:].split("]")[0]), int(a[1:].split("]")[0]))) # Is the list empty ? if not scoreList: return # Get the list number the player is at listNumber = scoreList.index('[%s] %s' % (Player(userid).level, es.getplayername(userid))) + 1 # Create a new OrderedMenu ggScoreMenu = OrderedMenu(userid, 'GunGame: Score Menu', scoreList, highlightIndex=listNumber) # Send the OrderedMenu on the page the player is on ggScoreMenu.send_page(get_index_page(listNumber))
def sendSecondMenu(userid, choice, popupid): oldChoice, target = choice if oldChoice == 2: steamid = playerlib.uniqueid(userid, False) lang = playerlib.getPlayer(userid).get("lang") if steamid not in locations: es.tell(userid, "#green", xalanguage("no locations", {}, lang) ) return currentMap = str(es.ServerVar('eventscripts_currentmap')) if currentMap not in locations[steamid]: es.tell(userid, "#green", xalanguage("no map locations", {}, lang) ) return if es.getplayerprop(target, 'CBasePlayer.pl.deadflag'): es.tell(userid, xalanguage('one player died', {}, playerlib.getPlayer(userid).get("lang") ) ) return x, y, z = locations[steamid][currentMap] es.server.queuecmd('es_xsetpos %s %s %s %s' % (target, x, y, z + 10) ) if not int(xa_anonymous): args = {} args["player"] = es.getplayername(target) args["admin"] = es.getplayername(userid) for player in playerlib.getPlayerList("#all"): es.tell(int(player), xalanguage("teleport to location", args, player.get("lang") ) ) xateleport.logging.log("has teleported user %s [%s] to their saved location" % (es.getplayername(target), es.getplayersteamid(target)), userid) else: lang = playerlib.getPlayer(userid).get("lang") popupMenu = popuplib.easymenu("xa_teleport_players", "_popup_choice", teleportPlayerToPlayer) popupMenu.settitle(xalanguage["player select to send to"]) for player in filter(lambda x: not es.getplayerprop(x, "CBasePlayer.pl.deadflag"), es.getUseridList()): popupMenu.addoption([target, player], es.getplayername(player), lang=lang) popupMenu.send(userid)
def mute(self, userid, adminid, args=None): userid = int(userid) steamid = es.getplayersteamid(userid) if userid in self.muted: self.muted.remove(userid) self.steamids.remove(steamid) status = 'unmuted' if not bool(self.muted): es.addons.unregisterTickListener(self._tickListener) self.tickStatus = self.UNREGISTERED else: if not bool(self.muted): es.addons.registerTickListener(self._tickListener) self.tickStatus = self.REGISTERED self.steamids.add(steamid) self.muted.add(userid) status = 'muted' if str(xa_adminmute_anonymous) == '0': tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList('#human'): tokens['state'] = xalanguage(status, lang=player.get("lang")) es.tell(int(player), '#multi', xalanguage('admin state', tokens, player.get("lang")))
def teleportPlayerToPlayer(userid, choice, popupid): target, recipient = choice if es.getplayerprop(target, 'CBasePlayer.pl.deadflag') or es.getplayerprop( recipient, 'CBasePlayer.pl.deadflag'): es.tell( userid, xalanguage('one player died', {}, playerlib.getPlayer(userid).get("lang"))) return if not es.exists('userid', target) or not es.exists('userid', recipient): """ One of the player's doesn't exists... Return early and break the function """ return x, y, z = es.getplayerlocation(recipient) z += 100 es.server.queuecmd('es_xsetpos %s %s %s %s' % (target, x, y, z)) if not int(xa_anonymous): args = {} args["admin"] = es.getplayername(userid) args["target"] = es.getplayername(target) args["recipient"] = es.getplayername(recipient) for player in playerlib.getPlayerList("#all"): es.tell( int(player), xalanguage("player sent to player", args, player.get("lang"))) xateleport.logging.log( "has teleported user %s [%s] to user %s [%s]" % (es.getplayername(target), es.getplayersteamid(target), es.getplayername(recipient), es.getplayersteamid(recipient)), userid, True)
def voteBanCheck(userid, choice, popupid): """ Executed when a player has chosen another to vote ban. Get the steamid of the victim, and check for the amount of bans needed. Ban the player if their are enough votes """ userid = str(userid) if not es.exists('userid', choice): """ Something went wrong, the user no longer exists, return early """ return steamid = es.getplayersteamid(choice) if userid not in userids or steamid not in targets: """ One of the instances weren't avaiable, return early """ return xavotekickban.logging.log("has voted to ban user %s [%s]" % (es.getplayername(choice), es.getplayersteamid(choice) ), userid ) userids[userid]["bans"].append(choice) targets[steamid]["bans"] += 1 bansRemaining = getBansRemaining(steamid) if bansRemaining == 0: """ There has been enough kicks passed, kick the player. """ removePlayer(steamid) es.server.queuecmd('banid %s %s;writeid;kickid %s "You have been banned"' % (banTime, choice, choice) ) tokens = {} tokens['name'] = es.getplayername(choice) for player in playerlib.getPlayerList('#all'): es.tell(int(player), '#multi', xalanguage('player banned', tokens, player.get("lang") ) ) xavotekickban.logging.log("has been vote banned", choice) else: tokens = {} tokens['name'] = es.getplayername(choice) tokens['amount'] = bansRemaining for player in playerlib.getPlayerList("#all"): es.tell( int(player), '#multi', xalanguage('player votes banned', tokens, player.get("lang") ) ) xavotekickban.logging.log("needs %s more votes till they are banned" % bansRemaining, choice)
def score_menu_cmd(userid, args): # Make sure player exists if not es.exists('userid', userid) and userid != 0: return # Get list of levels scoreList = [] for player in es.getUseridList(): scoreList.append('[%s] %s' % (Player(player).level, es.getplayername(player))) # Sort from highest to lowest scoreList.sort( lambda a, b: cmp(int(b[1:].split("]")[0]), int(a[1:].split("]")[0]))) # Is the list empty ? if not scoreList: return # Get the list number the player is at listNumber = scoreList.index( '[%s] %s' % (Player(userid).level, es.getplayername(userid))) + 1 # Create a new OrderedMenu ggScoreMenu = OrderedMenu(userid, 'GunGame: Score Menu', scoreList, highlightIndex=listNumber) # Send the OrderedMenu on the page the player is on ggScoreMenu.send_page(get_index_page(listNumber))
def _punish_player(userid, punishment, adminid, args = [], force = False): if adminid == 0 or xapunishments.isUseridAuthorized(adminid, punishment+"_player") or force: if (not xapunishments.isUseridAuthorized(userid, "immune_"+punishment)) or (userid == adminid) or force: if userid in playerlib.getUseridList("#alive") or True == punishment_ondead[punishment]: if callable(punishment_method[punishment]): xapunishments.logging.log("used punishment %s on user %s [%s]" % (punishment, es.getplayername(userid), es.getplayersteamid(userid)), adminid, True) try: punishment_method[punishment](userid, adminid, args, force) except TypeError: try: punishment_method[punishment](userid, adminid, args) except TypeError: punishment_method[punishment](userid, adminid) return True else: es.dbgmsg(0, "xapunishments.py: Cannot find method '"+str(punishment_method[punishment])+"'!") return False else: if userid not in dead_delayed: dead_delayed[userid] = [] dead_delayed[userid].append(punishment,adminid,args,force) xapunishments.logging.log("will be punished when he next spawns", userid) es.tell(adminid, xalanguage("dead", {'username':es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell(adminid, xalanguage("immune", {'username':es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell(adminid, xalanguage("not allowed", (), playerlib.getPlayer(adminid).get("lang"))) return False
def sendSecondMenu(userid, choice, popupid): oldChoice, target = choice if oldChoice == 2: steamid = playerlib.uniqueid(userid, False) lang = playerlib.getPlayer(userid).get("lang") if steamid not in locations: es.tell(userid, "#green", xalanguage("no locations", {}, lang) ) return currentMap = str(es.ServerVar('eventscripts_currentmap')) if currentMap not in locations[steamid]: es.tell(userid, "#green", xalanguage("no map locations", {}, lang) ) return if es.getplayerprop(target, 'CBasePlayer.pl.deadflag'): es.tell(userid, xalanguage('one player died', {}, playerlib.getPlayer(userid).get("lang") ) ) return x, y, z = locations[steamid][currentMap] es.server.queuecmd('es_xsetpos %s %s %s %s' % (target, x, y, z + 10) ) if not int(xa_anonymous): args = {} args["player"] = es.getplayername(target) args["admin"] = es.getplayername(userid) for player in playerlib.getPlayerList("#all"): es.tell(int(player), xalanguage("teleport to location", args, player.get("lang") ) ) xateleport.logging.log("has teleported user %s [%s] to their saved location" % (es.getplayername(target), es.getplayersteamid(target)), userid) else: lang = playerlib.getPlayer(userid).get("lang") popupMenu = popuplib.easymenu("xa_teleport_players", "_popup_choice", teleportPlayerToPlayer) popupMenu.settitle(xalanguage["player select to send to"]) for player in filter(lambda x: not es.getplayerprop(x, "CBasePlayer.pl.deadflag"), es.getUseridList()): popupMenu.addoption([target, player], es.getplayername(player), lang=lang) popupMenu.send(userid)
def _punishment_slay(userid, adminid, args, force): if str(xa_adminslay_anonymous) == '0' and not force: tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for user in playerlib.getPlayerList(): es.tell(int(userid), xalanguage("admin slay", tokens, user.get("lang"))) player = playerlib.getPlayer(userid) player.kill()
def respawn(userid, player): es.setplayerprop(userid, "CCSPlayer.m_iPlayerState", 0) es.setplayerprop(userid, "CCSPlayer.baseclass.m_lifeState", 512) command = 'es_xspawnplayer ' + userid gamethread.delayed(0.01, es.server.queuecmd, (command)) spawner = es.getplayername(player.userid) other = es.getplayername(userid) es.msg('#multi', '#green[SH]', other, '#lightgreenhas been respawned by#green', spawner, '#lightgreenZeus!')
def _gimp(userid, adminid, args): gimped = players[userid]['gimped'] players[userid]['gimped'] = (1 if not gimped else 0) if str(xa_admingimp_anonymous) == "0": tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage("gimped", lang=player.get("lang")) if not gimped else xalanguage("ungimped", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang")))
def _drug(userid, adminid, args): drugged = players[userid]['drugged'] players[userid]['drugged'] = (1 if not drugged else 0) if str(xa_admindrug_anonymous) == "0": tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage("drugged", lang=player.get("lang")) if not drugged else xalanguage("undrugged", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang"))) es.setplayerprop(userid, 'CBasePlayer.m_iDefaultFOV', 165 if not drugged else 90)
def rtv(): """ Executed when a user types 'rtv' in chat """ global votes_in global vote_req_total userid = es.getcmduserid() steamid = es.getplayersteamid(userid) entry(steamid) if not players[steamid][0]: if (time.time() - map_start_time) < float(vote_req_time): tokens = {} tokens['time'] = int(float(vote_req_time) - int( time.time() - map_start_time ) ) es.tell(userid, '#multi', lang('map_time', tokens, playerlib.getPlayer(userid).get('lang') ) ) xartv.logging.log("has been denied the right to RTV as not enough time in the map has passed", userid ) else: if allowVoting: players[steamid][0] = True vote_req_total = int( round(vote_req_p / 100. * len(playerlib.getPlayerList("#human") ) ) ) if not votes_in: name = es.getplayername(userid) for user in es.getUseridList(): tokens = {} tokens['player'] = es.getplayername(user) es.tell(user, '#multi', lang('player_started', tokens, playerlib.getPlayer(user).get('lang') ) ) popuplib.unsend("nomination_menu", user) votes_in += 1 xartv.logging.log("has rocked the vote, %s votes in" % votes_in, userid ) if votes_in >= int(vote_req_min): if votes_in >= vote_req_total: xartv.logging.log("Rock the vote has passed, starting the vote") rtv_init() else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = vote_req_total - votes_in xartv.logging.log("%s votes still needed to rock the vote" % (vote_req_total - votes_in) ) for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens ,playerlib.getPlayer(user).get('lang') ) ) else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = int(vote_req_min) - votes_in for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens, playerlib.getPlayer(user).get('lang') ) ) else: es.tell(userid, '#multi', lang('started', lang=playerlib.getPlayer(userid).get('lang') ) ) else: xartv.logging.log("has attempted to RTV more than once", userid) es.tell(userid, '#multi', lang('1vote', lang=playerlib.getPlayer(userid).get('lang') ) )
def rtv(): """ Executed when a user types 'rtv' in chat """ global votes_in global vote_req_total userid = es.getcmduserid() steamid = es.getplayersteamid(userid) entry(steamid) if not players[steamid][0]: if (time.time() - map_start_time) < float(vote_req_time): tokens = {} tokens['time'] = int(float(vote_req_time) - int( time.time() - map_start_time ) ) es.tell(userid, '#multi', lang('map_time', tokens, playerlib.getPlayer(userid).get('lang') ) ) xartv.logging.log("has been denied the right to RTV as not enough time in the map has passed", userid ) else: if allowVoting: players[steamid][0] = True vote_req_total = int( round(vote_req_p / 100. * len(playerlib.getPlayerList("#human") ) ) ) if not votes_in: name = es.getplayername(userid) for user in es.getUseridList(): tokens = {} tokens['player'] = es.getplayername(user) es.tell(user, '#multi', lang('player_started', tokens, playerlib.getPlayer(user).get('lang') ) ) popuplib.unsend("nomination_menu", user) votes_in += 1 xartv.logging.log("has rocked the vote, %s votes in" % votes_in, userid ) if votes_in >= int(vote_req_min): if votes_in >= vote_req_total: xartv.logging.log("Rock the vote has passed, starting the vote") rtv_init() else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = vote_req_total - votes_in xartv.logging.log("%s votes still needed to rock the vote" % (vote_req_total - votes_in) ) for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens ,playerlib.getPlayer(user).get('lang') ) ) else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = int(vote_req_min) - votes_in for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens, playerlib.getPlayer(user).get('lang') ) ) else: es.tell(userid, '#multi', lang('started', lang=playerlib.getPlayer(userid).get('lang') ) ) else: xartv.logging.log("has attempted to RTV more than once", userid) es.tell(userid, '#multi', lang('1vote', lang=playerlib.getPlayer(userid).get('lang') ) )
def TeamChat(userid, text, teamonly): text = str(str(text).strip('"')) if es.exists('saycommand',text.split(' ')[0]) or text.split(' ')[0].lower() in ["!vote","!kick","!ban","!tele","!teleport","!burn","!slay","!noclip","!beacon","!happy","!slap","!nominate","!rtv","rtv","/rtv","votekick","voteban","!votekick","!voteban","!me","/me"]: return (userid, text, teamonly) else: if es.getplayerteam(userid) == 1: return (userid, text, teamonly) if es.getplayerteam(userid) == 2: es.msg('#multi','[#greenInfected#default] %s: #default%s'%(es.getplayername(userid),text)) if es.getplayerteam(userid) == 3: es.msg('#multi','[#greenSurvivor#default] %s: #default%s'%(es.getplayername(userid),text)) es.cexec_all('play common/talk.wav') return (0, None, None)
def xarates_cmd(): int_userid = es.getcmduserid() xarates.logging.log( 'xarates request by %s (%s)' % (es.getplayersteamid(int_userid), es.getplayername(int_userid))) dict_rates = {} longest_name = 4 longest_rate = 4 longest_cmdrate = 8 longest_updaterate = 11 longest_interp = 6 for instance_player in playerlib.getPlayerList("#all"): int_player = int(instance_player) if es.getplayersteamid(int_player) != "BOT": str_name = es.getplayername(int_player) if len(str_name) > longest_name: longest_name = len(str_name) dict_rates[int_player] = {} str_rate = es.getclientvar(int_player, "rate") dict_rates[int_player]["rate"] = str_rate if len(str_rate) > longest_rate: longest_rate = len(str_rate) str_cmdrate = es.getclientvar(int_player, "cl_cmdrate") dict_rates[int_player]["cmdrate"] = str_cmdrate if len(str_cmdrate) > longest_cmdrate: longest_cmdrate = len(str_cmdrate) str_updaterate = es.getclientvar(int_player, "cl_updaterate") dict_rates[int_player]["updaterate"] = str_updaterate if len(str_updaterate) > longest_updaterate: longest_updaterate = len(str_updaterate) str_interp = es.getclientvar(int_player, "cl_interp") dict_rates[int_player]["interp"] = str_interp if len(str_interp) > longest_interp: longest_interp = len(str_interp) total_len = longest_name + longest_rate + longest_cmdrate + longest_updaterate + longest_interp + 12 usermsg.echo(int_userid, "|%s|" % ("-" * total_len)) usermsg.echo( int_userid, "|%-*s %-*s %-*s %-*s %-*s|" % (longest_name, "Name", longest_rate, "Rate", longest_cmdrate, "CMD Rate", longest_updaterate, "Update Rate", longest_interp, "Interp")) usermsg.echo(int_userid, "|%s|" % ("-" * total_len)) for int_player in dict_rates: usermsg.echo( int_userid, "|%-*s %-*s %-*s %-*s %-*s|" % (longest_name, es.getplayername(int_player), longest_rate, dict_rates[int_player]["rate"], longest_cmdrate, dict_rates[int_player]["cmdrate"], longest_updaterate, dict_rates[int_player]["updaterate"], longest_interp, dict_rates[int_player]["interp"])) usermsg.echo(int_userid, "|%s|" % ("-" * total_len))
def _punish_player(userid, punishment, adminid, args=[], force=False): if adminid == 0 or xapunishments.isUseridAuthorized( adminid, punishment + "_player") or force: if (not xapunishments.isUseridAuthorized( userid, "immune_" + punishment)) or (userid == adminid) or force: if userid in playerlib.getUseridList( "#alive") or True == punishment_ondead[punishment]: if callable(punishment_method[punishment]): xapunishments.logging.log( "used punishment %s on user %s [%s]" % (punishment, es.getplayername(userid), es.getplayersteamid(userid)), adminid, True) try: punishment_method[punishment](userid, adminid, args, force) except TypeError: try: punishment_method[punishment](userid, adminid, args) except TypeError: punishment_method[punishment](userid, adminid) return True else: es.dbgmsg( 0, "xapunishments.py: Cannot find method '" + str(punishment_method[punishment]) + "'!") return False else: if userid not in dead_delayed: dead_delayed[userid] = [] dead_delayed[userid].append(punishment, adminid, args, force) xapunishments.logging.log( "will be punished when he next spawns", userid) es.tell( adminid, xalanguage("dead", {'username': es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell( adminid, xalanguage("immune", {'username': es.getplayername(userid)}, playerlib.getPlayer(adminid).get("lang"))) return False else: es.tell( adminid, xalanguage("not allowed", (), playerlib.getPlayer(adminid).get("lang"))) return False
def fire_gg_knife_steal(attacker, victim): ggAttacker = Player(attacker) # Set up the gg_knife_steal event gg_knife_steal = GG_Knife_Steal(attacker=attacker, userid=victim, attacker_level=ggAttacker.level, userid_level=Player(victim).level) # Fire the gg_knife_steal event gg_knife_steal.fire() # Announce the level steal saytext2('#human', ggAttacker.index, 'StoleLevel', {'attacker': es.getplayername(attacker), 'victim': es.getplayername(victim)})
def _gimp(userid, adminid, args): gimped = players[userid]['gimped'] players[userid]['gimped'] = (1 if not gimped else 0) if str(xa_admingimp_anonymous) == "0": tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage( "gimped", lang=player.get("lang")) if not gimped else xalanguage( "ungimped", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang")))
def _punishment_slap(userid, adminid, args, force): if len(args) > 1: health = args[1] else: health = xa_slap_to_damage if str(xa_adminslap_anonymous) == '0' and not force: tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) tokens['health'] = str(health) for user in playerlib.getPlayerList(): es.tell(int(user), xalanguage("admin slap", tokens, user.get("lang"))) player = playerlib.getPlayer(userid) player.set('health', int(health))
def _freeze(userid, adminid, args): player = playerlib.getPlayer(userid) if str(xa_adminfreeze_anonymous) == '0': tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage("frozen", lang=player.get("lang")) if player.get('freeze') == '0' else xalanguage("defrosted", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang"))) if player.get('freeze') == '0': gamethread.queue(player.set, ('noclip', 1)) gamethread.queue(player.set, ('freeze', 1)) else: gamethread.queue(player.set, ('freeze', 0))
def log(module, text, userid=None, admin=False, loglvl=0): """ XA logging module: module name (usually automatically provided) test: text string to log userid: optionally provide a userid as reference admin: set to true if this is an admin action loglvl: an optional level - messages with lower xa_log values will not be recorded Appends a line to the module's log file (found in the xa/logs directory). Includes ability to reference a specific player and also flag as an admin action """ # Is logging enabled and does our module exist? if int(es.ServerVar('xa_log')) and int( es.ServerVar('xa_log')) >= loglvl and xa.exists(module): # Was a valid source userid specified? if userid and es.exists('userid', int(userid)): # Is this userid an admin? if admin: # Adming log logtext = '%s: Admin %s [%s]: %s' % ( module, es.getplayername(userid), es.getplayersteamid(userid), text) else: # User log logtext = '%s: User %s [%s]: %s' % ( module, es.getplayername(userid), es.getplayersteamid(userid), text) else: # Default log logtext = '%s: %s' % (module, text) # Create our log folder if it does not exist if not os.path.isdir('%s/logs' % xa.coredir()): os.mkdir('%s/logs' % xa.coredir()) # Write to our log file logname = '%s/logs/l%s' % (xa.coredir(), time.strftime('%m%d000.log')) logfile = open(logname, 'a+') logfile.write( time.strftime('L %m/%d/%Y - %H:%M:%S: ') + logtext + '\n') logfile.close() # Write to the SRCDS log file es.log(logtext)
def _beacon(userid, adminid, args): beaconed = players[userid]['beaconed'] if str(xa_adminbeacon_anonymous) == "0": tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage("beaconed", lang=player.get("lang")) if not beaconed else xalanguage("unbeaconed", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang"))) if not beaconed: players[userid]['beaconed'] = 1 _beacon_loop(userid) else: players[userid]['beaconed'] = 0 gamethread.cancelDelayed('beacon_%s'%userid)
def _punishment_burn(userid, adminid, args, force): if len(args) > 1: burntime = args[1] else: burntime = xa_admin_burn_time if str(xa_adminburn_anonymous) == '0' and not force: tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for user in playerlib.getPlayerList(): es.tell(user, xalanguage("admin burn", tokens, user.get("lang"))) player = playerlib.getPlayer(userid) player.set('burn') if int(burntime) > 0: gamethread.delayedname(int(burntime), 'burn_%s'%userid, _punishment_extinguish, (userid, adminid, (), True))
def _mute(userid, adminid, args): steamid = es.getplayersteamid(userid) if userid in muted: del muted[userid] status = 'unmuted' else: muted[userid] = steamid status = 'muted' if str(xa_adminmute_anonymous) == '0': tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList('#human'): tokens['state'] = xalanguage(status, lang=player.get("lang")) es.tell(int(player), '#multi', xalanguage('admin state', tokens, player.get("lang")))
def teleportPlayerToPlayer(userid, choice, popupid): target, recipient = choice if es.getplayerprop(target, 'CBasePlayer.pl.deadflag') or es.getplayerprop(recipient, 'CBasePlayer.pl.deadflag'): es.tell(userid, xalanguage('one player died', {}, playerlib.getPlayer(userid).get("lang") ) ) return x, y, z = es.getplayerlocation(recipient) z += 100 es.server.queuecmd('es_xsetpos %s %s %s %s' % (target, x, y, z) ) if not int(xa_anonymous): args = {} args["admin"] = es.getplayername(userid) args["target"] = es.getplayername(target) args["recipient"] = es.getplayername(recipient) for player in playerlib.getPlayerList("#all"): es.tell(int(player), xalanguage("player sent to player", args, player.get("lang") ) )
def _punishment_extinguish(userid, adminid, args, force): if str(xa_adminburn_anonymous) == '0' and not force: tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for user in playerlib.getPlayerList(): es.tell(user, xalanguage("admin extinguish", tokens, user.get("lang"))) # Copied from un-released playerlib flamelist = es.createentitylist("entityflame") handle = es.getplayerhandle(userid) for flame_entity in flamelist: string = es.getindexprop(flame_entity, 'CEntityFlame.m_hEntAttached') if string == handle: es.setindexprop(flame_entity, 'CEntityFlame.m_flLifetime', 0) break
def rtv_cmd(userid, args): global voteRocked # The vote has already been rocked for this map if voteRocked: msg(userid, "RTVInitiated", {}, True) return # The leader level is past the level to disable RTV if get_leader_level() >= rtv_DisableLevel: msg(userid, "RTVPastLevel", {"level": rtv_DisableLevel}, True) return # Removed userids no longer in the server checkList = rtvList for uid in checkList: if not es.exists("userid", uid): rtvList.remove(uid) # The number of total votes required to RTV votesRequired = int((len(getUseridList("#human")) * gg_map_vote_rtv_percent / 100.0) + 0.999) # The user has already voted if userid in rtvList: if not len(rtvList) >= votesRequired: saytext2( "#human", Player(userid).index, "RTVVote", { "name": es.getplayername(userid), "votes": len(rtvList), "required": votesRequired }) return else: rtvList.append(userid) # The vote passed if len(rtvList) >= votesRequired: msg("#human", "RTVPassed", {}, True) voteStart() voteRocked = True else: saytext2( "#human", Player(userid).index, "RTVVote", { "name": es.getplayername(userid), "votes": len(rtvList), "required": votesRequired })
def rtv(): """ Executed when a user types 'rtv' in chat """ global votes_in global vote_req_total userid = es.getcmduserid() steamid = es.getplayersteamid(userid) entry(steamid) if not players[steamid][0]: if (time.time() - map_start_time) < float(vote_req_time): tokens = {} tokens["time"] = int(float(vote_req_time) - int(time.time() - map_start_time)) es.tell(userid, "#multi", lang("map_time", tokens, playerlib.getPlayer(userid).get("lang"))) else: if allowVoting: players[steamid][0] = True vote_req_total = int(round(vote_req_p / 100.0 * len(playerlib.getPlayerList("#human")))) if not votes_in: name = es.getplayername(userid) for user in es.getUseridList(): tokens = {} tokens["player"] = es.getplayername(user) es.tell(user, "#multi", lang("player_started", tokens, playerlib.getPlayer(user).get("lang"))) popuplib.unsend("nomination_menu", user) votes_in += 1 if votes_in >= int(vote_req_min): if votes_in >= vote_req_total: rtv_init() else: name = es.getplayername(userid) tokens = {} tokens["player"] = name tokens["votes"] = vote_req_total - votes_in for user in es.getUseridList(): es.tell(user, "#multi", lang("req", tokens, playerlib.getPlayer(user).get("lang"))) else: name = es.getplayername(userid) tokens = {} tokens["player"] = name tokens["votes"] = int(vote_req_min) - votes_in for user in es.getUseridList(): es.tell(user, "#multi", lang("req", tokens, playerlib.getPlayer(user).get("lang"))) else: es.tell(userid, "#multi", lang("started", lang=playerlib.getPlayer(userid).get("lang"))) else: es.tell(userid, "#multi", lang("1vote", lang=playerlib.getPlayer(userid).get("lang")))
def rtv(): """ Executed when a user types 'rtv' in chat """ global votes_in global vote_req_total userid = es.getcmduserid() steamid = es.getplayersteamid(userid) entry(steamid) if not players[steamid][0]: if (time.time() - map_start_time) < float(vote_req_time): tokens = {} tokens['time'] = int(float(vote_req_time) - int( time.time() - map_start_time ) ) es.tell(userid, '#multi', lang('map_time', tokens, playerlib.getPlayer(userid).get('lang') ) ) else: if allowVoting: players[steamid][0] = True vote_req_total = int( round(vote_req_p / 100. * len(playerlib.getPlayerList("#human") ) ) ) if not votes_in: name = es.getplayername(userid) for user in es.getUseridList(): tokens = {} tokens['player'] = es.getplayername(user) es.tell(user, '#multi', lang('player_started', tokens, playerlib.getPlayer(user).get('lang') ) ) popuplib.unsend("nomination_menu", user) votes_in += 1 if votes_in >= int(vote_req_min): if votes_in >= vote_req_total: rtv_init() else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = vote_req_total - votes_in for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens ,playerlib.getPlayer(user).get('lang') ) ) else: name = es.getplayername(userid) tokens = {} tokens['player'] = name tokens['votes'] = int(vote_req_min) - votes_in for user in es.getUseridList(): es.tell(user, '#multi', lang('req', tokens, playerlib.getPlayer(user).get('lang') ) ) else: es.tell(userid, '#multi', lang('started', lang=playerlib.getPlayer(userid).get('lang') ) ) else: es.tell(userid, '#multi', lang('1vote', lang=playerlib.getPlayer(userid).get('lang') ) )
def fire_gg_knife_steal(attacker, victim): ggAttacker = Player(attacker) # Set up the gg_knife_steal event gg_knife_steal = GG_Knife_Steal(attacker=attacker, userid=victim, attacker_level=ggAttacker.level, userid_level=Player(victim).level) # Fire the gg_knife_steal event gg_knife_steal.fire() # Announce the level steal saytext2('#human', ggAttacker.index, 'StoleLevel', { 'attacker': es.getplayername(attacker), 'victim': es.getplayername(victim) })
def genPlayerlistPop(popupname, callback): checkPop(popupname) p = popuplib.easymenu(popupname, None, callback) p.settitle('Select Player') for i in es.getUseridList(): p.addoption(i, es.getplayername(i)) return p
def voteBan(): """ Executed when a player types 'voteban' in either console or chat. Build a popup of all the valid players they can ban. """ userid = str(es.getcmduserid()) if es.getplayercount() >= minBanPlayers: """ There are enough players to run the command """ myPopupInstance = popuplib.easymenu("xa_voteban_%s" % userid, "_popup_choice", voteBanCheck) myPopupInstance.settitle("Select a player to ban") for player in es.getUseridList(): """ Loop through all the players in the server """ if str(player) != userid: """ The current iteration is not equal to the user who executed the command """ myPopupInstance.addoption( player, es.getplayername(player), bool(player not in userids[userid]["bans"])) myPopupInstance.send(userid) else: """ There are not enough players, notify the user """ es.tell( userid, '#green', xalanguage("not enough players", {}, playerlib.getPlayer(userid).get("lang")))
def removeWeapon(self, weapon): """ Executes "lastinv" on the client if the weapon to remove is the player's active weapon Removes the weapon by index Creates a new weapon at the player's feet if necessary Announces the restricted pickup """ longname = "weapon_" + weapon xarestrict.logging.log("Weapon %s has been removed from user %s" % (weapon, es.getplayername(self.userid))) if es.createplayerlist(self.userid)[self.userid]["weapon"] == longname: es.cexec(self.userid, "lastinv") for index in es.createentitylist(longname): if es.getindexprop(x, "CBaseEntity.m_hOwnerEntity") <> self.handle: continue gamethread.delayedname(0.2, "saferemove_%s" % index, saferemove, index) if (getTeam(2).isRestricted(weapon) and getTeam(3).isRestricted(weapon)) if int(removebanned) else False: lastgive = -1 else: eye_angles = tuple(es.getplayerprop(self.userid, eyeangle_prop % x) for x in range(3)) es.server.cmd("es_xsetang %s 90 0 0" % self.userid) es.server.cmd("es_xentcreate %s %s" % (self.userid, longname)) lastgive = int(es.ServerVar("eventscripts_lastgive")) setNPCWeapon(longname) es.server.cmd("es_xsetang %s %s %s %s" % ((self.userid,) + eye_angles)) self.announceRestrictedPickup(weapon, lastgive) break
def _mute(userid, adminid, args): steamid = es.getplayersteamid(userid) if userid in muted: del muted[userid] status = 'unmuted' else: muted[userid] = steamid status = 'muted' if str(xa_adminmute_anonymous) == '0': tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList('#human'): tokens['state'] = xalanguage(status, lang=player.get("lang")) es.tell(int(player), '#multi', xalanguage('admin state', tokens, player.get("lang")))
def voteSubmit(userid, choice, popupname): votedUserids.add(userid) # Is a revote ? for option in mapVoteOptions.keys(): if userid in mapVoteOptions[option]: # Is not the same choice ? if choice != option: mapVoteOptions[option].remove(userid) mapVoteOptions[choice].append(userid) break # Same choice, stop here else: return # Is a new vote else: mapVoteOptions[choice].append(userid) # Announce players choice if enabled if int(gg_map_vote_show_player_vote): saytext2("#human", Player(userid).index, "VotedFor", {"name": es.getplayername(userid), "map": choice.lower()}) # Everyone voted ? if isVoteDone(): voteEnd()
def player_death(ev): userid = ev['userid'] steamid = es.getplayersteamid(userid) if steamid == 'BOT': steamid = es.getplayername(userid) attacker = ev['attacker'] weapon = ev['weapon'] if weapon != 'world': if weapon != 'worldspawn': if userid != attacker: if ev['es_userteam'] != ev['es_attackerteam']: # Normal Player kill xp_kill_min = es.ServerVar('xp_kill_min') xp_kill_max = es.ServerVar('xp_kill_max') xp = random.randint(xp_kill_min,xp_kill_max) if attacker != '0': if userid != '0': pid, plevel = cursor.execute('SELECT id, level FROM users WHERE id=?', (steamid,)).fetchone() if es.getplayersteamid(attacker) == 'BOT': aid = getID(attacker) alevel = '1' else: aid, alevel = cursor.execute('SELECT id, level FROM users WHERE id=?', (getID(attacker),)).fetchone() level_dif = int(plevel) - int(alevel) if alevel < 1: xp = xp * float(es.ServerVar('xp_multi')) if level_dif > 1: xp = xp * level_dif * level_dif elif level_dif == 1: xp = xp * 2 if steamid == 'BOT': return xp_msg = langlib.Strings(es.getAddonPath('superhero') + '/languages/xp_msg.ini') global popup_language sh_givexp(attacker,xp,xp_msg('xp_kill',lang=str(popup_language)))
def playerinfo_list_selection(userid,choice,popup): steamid = getID(choice.userid) pheroes = cursor.execute('SELECT heroes FROM users WHERE id=?', (steamid,)).fetchone() if pheroes: id = choice.userid playerinfo = popuplib.create('playerinfo') playerinfo.addline('-> 1.'+str(es.getplayername(id))) playerinfo.addline('---------') heroes = [] heroes = list(pheroes) heroes = heroes[0].split(',') counter = 0 for hero in heroes: hero = str(hero) if hero != '0': counter += 1 playerinfo.addline(str(counter)+' - '+hero) if counter == 0: playerinfo_popup = langlib.Strings(es.getAddonPath("superhero") + "/languages/playerinfo_popup.ini") global popup_language playerinfo.addline(playerinfo_popup('playerinfo_noheroes',lang=str(popup_language))) playerinfo.addline('---------') playerinfo.addline('-> 2.Back') playerinfo.menuselect = playerinfo_selection #close_popups(userid) popuplib.send('playerinfo',userid)
def _play_sound(soundfile, soundname, userid): player = playerlib.getPlayer(userid) if userid in playerlimit: playerlimit[userid] = playerlimit[userid] + 1 else: playerlimit[userid] = 1 if (playerlimit[userid] < int(sounds_per_round)) or ( xasounds.isUseridAuthorized(userid, "play_adminsound") == True ): if (int(sounds_filter_if_dead) == 1) and int(player.get("isdead")) == 1: useridlist_sound = playerlib.getUseridList("#dead") else: useridlist_sound = es.getUseridList() langdata = {"username": es.getplayername(userid), "sound": str(soundname)} for userid in useridlist_sound: if int(xaplayerdata_sounds.get(userid)) == 1: es.playsound(userid, soundfile, 1.0) for userid in useridlist_sound: if int(xaplayerdata_sounds.get(userid)) == 1: player = playerlib.getPlayer(userid) soundtext = xalanguage("played sound", langdata, player.get("lang")) es.tell(userid, soundtext) else: soundtext = xalanguage("sound limit", {}, player.get("lang")) es.tell(userid, soundtext)
def _inputbox_handle(): userid = es.getcmduserid() count = int(es.getargc()) if count > 4: parent = es.getargv(1) if popuplib.exists(parent): module = es.getargv(2) if xa.exists(module): module = xa.find(module) varname = es.getargv(3) if module and varname in module.variables: var = module.variables[varname] i = 4 oldval = str(var) newvalue = '' while i < count: newvalue = newvalue + ' ' + es.getargv(i) i = i + 1 newvalue = newvalue.strip() var.set(newvalue) es.esctextbox( 10, userid, "Changed '" + str(varname) + "' setting", "Changed '%s' to '%s'\nThe variable menu is open again.\nPress [ESC] a second time." % (varname, newvalue)) menu = _variableEditMenu(userid, module, var, parent) menu.send(userid) xaconfig.logging.log( "Admin %s just change config %s from %s to %s" % (es.getplayername(userid), varname, oldval, newvalue)) else: es.esctextbox(10, userid, "Invalid Entry", "<value>")
def voteSubmit(userid, choice, popupname): votedUserids.add(userid) # Is a revote ? for option in mapVoteOptions.keys(): if userid in mapVoteOptions[option]: # Is not the same choice ? if choice != option: mapVoteOptions[option].remove(userid) mapVoteOptions[choice].append(userid) break # Same choice, stop here else: return # Is a new vote else: mapVoteOptions[choice].append(userid) # Announce players choice if enabled if int(gg_map_vote_show_player_vote): saytext2('#human', Player(userid).index, 'VotedFor', { 'name': es.getplayername(userid), 'map': choice.lower() }) # Everyone voted ? if isVoteDone(): voteEnd()
def level_menu_cmd(userid, args): # Make sure player exists if not es.exists('userid', userid) and userid != 0: return if len(args): # Send user level search searchInput = str(args) checkUserid = es.getuserid(searchInput) # If the search failed, tell them and return if not checkUserid: msg(userid, 'LevelInfo_PlayerSearchFailed', {'player': searchInput}) return # Get the player instance ggPlayer = Player(checkUserid) # Send the results saytext2(userid, ggPlayer.index, 'LevelInfo_PlayerSearch', {'player': es.getplayername(checkUserid), 'level': ggPlayer.level, 'weapon': ggPlayer.weapon}) else: # Send menu popuplib.send('ggLevelMenu', userid)
def player_spawn(ev): dbg('player_spawn') if not es.isbot(ev['userid']): steamid = es.getplayersteamid(ev['userid']) if not steamid: dbg('NO STEAM ID!!!') return if steamid == 'STEAM_ID_PENDING': dbg('STEAM_ID_PENDING') gamethread.delayedname(1, 'xs_delayed_%s' % ev['userid'], pendingCheck, kw={userid:ev['userid']}) pending.append(ev['userid']) return if not ev['userid'] in newconnected: return if not steamid in players: players.newplayer(steamid) if not steamid in toplist: toplist.newplayer(steamid) players.increment(steamid,'sessions') players.update(steamid,'sessionstart',time.time()) players.update(steamid,'lastseen',time.time()) players.update(steamid,'teamchange_time',time.time()) newname = es.getplayername(ev['userid']) players.name(steamid,newname) newconnected.remove(ev['userid']) if ev['userid'] in pending: pending.remove(ev['userid']) dbg('player spawned: %s' % steamid)
def log_event(self, event_var): '''Method used to log the given event''' # Store the event and userid Event Variables event = event_var['es_event'] userid = event_var['userid'] # Is this an event that needs to log the "attacker" instead? if event in ('gg_levelup', 'gg_knife_steal', 'gg_win'): # Store the attacker's userid userid = event_var['attacker'] # Is the player still on the server? if not es.exists('userid', userid) and userid != 0: # If not, return return # Get all other information to be logged player_name = es.getplayername(userid) steamid = es.getplayersteamid(userid) team_name = self.get_team_name(userid) # Log the event with the necessary information es.server.queuecmd('es_xlogq "%s<%s><%s><%s>" triggered "%s"' % (player_name, userid, steamid, team_name, event))
def log(module, text, userid=0, admin=False): if bool(int(es.ServerVar("xa_log"))) and xa.exists(module): if (int(userid) > 0) and es.exists('userid', int(userid)): if admin: logtext = str(module) + ': Admin ' + es.getplayername(userid) + ' [' + es.getplayersteamid(userid) + ']: ' + str(text) else: logtext = str(module) + ': User ' + es.getplayername(userid) + ' [' + es.getplayersteamid(userid) + ']: ' + str(text) else: logtext = str(module) + ': ' + str(text) logname = '%s/logs/l%s' % (xa.coredir(), time.strftime('%m%d000.log')) logfile = open(logname, 'a+') logfile.write(time.strftime('L %m/%d/%Y - %H:%M:%S: ') + logtext + '\n') logfile.close() es.log(logtext) return True return False
def playerinfo_list_selection(userid, choice, popup): steamid = getID(choice.userid) pheroes = cursor.execute('SELECT heroes FROM users WHERE id=?', (steamid, )).fetchone() if pheroes: id = choice.userid playerinfo = popuplib.create('playerinfo') playerinfo.addline('-> 1.' + str(es.getplayername(id))) playerinfo.addline('---------') heroes = [] heroes = list(pheroes) heroes = heroes[0].split(',') counter = 0 for hero in heroes: hero = str(hero) if hero != '0': counter += 1 playerinfo.addline(str(counter) + ' - ' + hero) if counter == 0: playerinfo_popup = langlib.Strings( es.getAddonPath("superhero") + "/languages/playerinfo_popup.ini") global popup_language playerinfo.addline( playerinfo_popup('playerinfo_noheroes', lang=str(popup_language))) playerinfo.addline('---------') playerinfo.addline('-> 2.Back') playerinfo.menuselect = playerinfo_selection #close_popups(userid) popuplib.send('playerinfo', userid)
def _drug(userid, adminid, args): drugged = players[userid]['drugged'] players[userid]['drugged'] = (1 if not drugged else 0) if str(xa_admindrug_anonymous) == "0": tokens = {} tokens['admin'] = es.getplayername(adminid) tokens['user'] = es.getplayername(userid) for player in playerlib.getPlayerList(): tokens['state'] = xalanguage( "drugged", lang=player.get("lang")) if not drugged else xalanguage( "undrugged", lang=player.get("lang")) es.tell(int(player), xalanguage("admin state", tokens, player.get("lang"))) es.setplayerprop(userid, 'CBasePlayer.m_iDefaultFOV', 165 if not drugged else 90)
def database_update(self): ''' Updates the time and the player's name in the database ''' if self.wins: _update_winner(('name', 'timestamp'), (_es.getplayername( self.userid), 'strftime("%s","now")'), uniqueid=self.steamid)
def _play_sound(soundfile, soundname, userid): player = playerlib.getPlayer(userid) if userid in playerlimit: playerlimit[userid] = playerlimit[userid] + 1 else: playerlimit[userid] = 1 if (playerlimit[userid] < int(sounds_per_round)) or ( xasounds.isUseridAuthorized(userid, "play_adminsound") == True): if (int(sounds_filter_if_dead) == 1) and int( player.get('isdead')) == 1: useridlist_sound = playerlib.getUseridList('#dead') else: useridlist_sound = es.getUseridList() langdata = { "username": es.getplayername(userid), "sound": str(soundname) } for userid in useridlist_sound: if int(xaplayerdata_sounds.get(userid)) == 1: es.playsound(userid, soundfile, 1.0) for userid in useridlist_sound: if int(xaplayerdata_sounds.get(userid)) == 1: player = playerlib.getPlayer(userid) soundtext = xalanguage('played sound', langdata, player.get("lang")) es.tell(userid, soundtext) else: soundtext = xalanguage('sound limit', {}, player.get("lang")) es.tell(userid, soundtext)