# Name: RateMap v1.5b # # Author: JoeyT2008 # # Description: Allows players to rate their favourite maps. # # Commands: !ratemap - Brings up the rating menu, or the error message if you have already rated. # !rate - Brings up the rating menu, or the error message if you have already rated. # !rm - Brings up the rating menu, or the error message if you have already rated. # !rating - Tells the user what the current map is rated. # !rating [map] - Tells the user what the chosen map is rated. # !ratings - Shows the users all maps in a list and their ratings. # !rmhelp - Brings up the command help menu. # # Credits: Creator JoeyT2008 # # Help NATO_Hunter # R`SiN # Errant import es, popuplib, keyvalues, os, playerlib, string, threading, gamethread, urllib2, time, langlib from es import server_var ratemap_ver = es.ServerVar("ratemap_ver", "1.5b", "Version of RateMap that you are using.") ratemap_ver.makepublic() rm_commands = {"!rm": "ratemap/sendpopup", "!rate": "ratemap/sendpopup", "!ratemap": "ratemap/sendpopup", "!rating": "ratemap/viewrating", "!ratings": "ratemap/listpopup", "!rmhelp": "ratemap/commands"} rm_languages = ["en"] info = es.AddonInfo() info.name = "RateMap" info.version = ratemap_ver info.url = "http://addons.eventscripts.com/addons/view/ratemap" info.basename = "ratemap" info.author = "JoeyT2008" class DoSql(threading.Thread): def run(self): if rm_usemysql == 1: rm_removed = [] try: rm_runsql = urllib2.urlopen("%s/deleted.php?username=%s&password=%s" % (rm_sqlurl, rm_username, rm_password)).read() for rm_map in rm_runsql.split("\n"): rm_map = rm_map.replace("
", "") rm_removed.append(rm_map) except: rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "r") rm_logfiletext = rm_logfile.read() + "%s: Error: Could not check for deleted maps.\n" % (time.ctime()) rm_logfile.close() rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "w") rm_logfile.write(rm_logfiletext) rm_logfile.close() rm_filepath = es.getAddonPath("ratemap") + "/data/" for rm_map in os.listdir(rm_filepath): rm_map = rm_map.replace(".dat", "") rm_path = es.getAddonPath("ratemap") + "/data/" + rm_map + ".dat" if os.path.exists(rm_path): if rm_map in rm_removed: os.remove(rm_path) rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "r") rm_logfiletext = rm_logfile.read() + "%s: Removed: %s\n" % (time.ctime(), rm_map) rm_logfile.close() rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "w") rm_logfile.write(rm_logfiletext) rm_logfile.close() else: mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) if 'fivestars' in mapkey: rm_fivestars = mapkey['fivestars']['count'] else: rm_fivestars = 0 if 'fourstars' in mapkey: rm_fourstars = mapkey['fourstars']['count'] else: rm_fourstars = 0 if 'threestars' in mapkey: rm_threestars = mapkey['threestars']['count'] else: rm_threestars = 0 if 'twostars' in mapkey: rm_twostars = mapkey['twostars']['count'] else: rm_twostars = 0 if 'onestars' in mapkey: rm_onestars = mapkey['onestars']['count'] else: rm_onestars = 0 if 'runs' in mapkey: rm_runs = mapkey['runs']['count'] else: rm_runs = 0 if not rm_map == "": try: rm_runsql = urllib2.urlopen("%s/update.php?username=%s&password=%s&map=%s&fivestars=%s&fourstars=%s&threestars=%s&twostars=%s&onestars=%s&runs=%s" % (rm_sqlurl, rm_username, rm_password, rm_map, rm_fivestars, rm_fourstars, rm_threestars, rm_twostars, rm_onestars, rm_runs)).read() except: rm_runsql = "Could not connect to server." if rm_runsql == "FINISHED": rm_type = "Finished" rm_runsql = "SQL table updated for %s." % rm_map else: rm_type = "Error" rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "r") rm_logfiletext = rm_logfile.read() + "%s: %s: %s\n" % (time.ctime(), rm_type, rm_runsql) rm_logfile.close() rm_logfile = open(es.getAddonPath("ratemap") + "/ratemap.log", "w") rm_logfile.write(rm_logfiletext) rm_logfile.close() def loadconfig(): rm_requiredvars = {"rm_maplist": 0, "rm_maplist_type": 0, "rm_maplist_ammount": 0, "rm_popup_automatic": 0, "rm_popup_minutes": 0, "rm_usemysql": 0, "rm_maplist": 0, "rm_sqlurl": 0, "rm_username": 0, "rm_password": 0, "rm_updatetime": 0, "rm_maplist_rating": 0, "rm_maplist_min_votes": 0} rm_path = es.ServerVar("eventscripts_gamedir") + "/cfg/ratemap.cfg" if os.path.exists(rm_path): rm_config = open(rm_path, "r").read() rm_vars = {} for line in rm_config.split("\n"): line = line.strip() if not line.startswith("/") and not line.startswith("-") and not line == "": line = line.split() rm_vars[line[0]] = line[1] for rm_varname in rm_vars: if rm_varname in rm_requiredvars: del rm_requiredvars[rm_varname] if len(rm_requiredvars) == 0: global rm_maplist rm_maplist = es.ServerVar("rm_maplist", int(rm_vars["rm_maplist"])) global rm_maplist_type rm_maplist_type = es.ServerVar("rm_maplist_type", int(rm_vars["rm_maplist_type"])) global rm_maplist_ammount rm_maplist_ammount = es.ServerVar("rm_maplist_ammount", int(rm_vars["rm_maplist_ammount"])) global rm_popup_automatic rm_popup_automatic = es.ServerVar("rm_popup_automatic", int(rm_vars["rm_popup_automatic"])) global rm_popup_minutes rm_popup_minutes = es.ServerVar("rm_popup_minutes", int(rm_vars["rm_popup_minutes"])) global rm_usemysql rm_usemysql = es.ServerVar("rm_usemysql", int(rm_vars["rm_usemysql"])) global rm_sqlurl rm_sqlurl = rm_vars["rm_sqlurl"] global rm_username rm_username = rm_vars["rm_username"] global rm_password rm_password = rm_vars["rm_password"] global rm_updatetime rm_updatetime = es.ServerVar("rm_updatetime", int(rm_vars["rm_updatetime"])) global rm_maplist_rating rm_maplist_rating = es.ServerVar("rm_maplist_rating", int(rm_vars["rm_maplist_rating"])) global rm_maplist_min_votes rm_maplist_min_votes = es.ServerVar("rm_maplist_min_votes", int(rm_vars["rm_maplist_min_votes"])) es.ServerVar("ratemap_url", rm_sqlurl).makepublic() else: for rm_varname in rm_requiredvars: es.dbgmsg(0, lang("cfg_missing_var", {"var": rm_varname})) lang("mysql_fail", {"map": rm_map}) es.unload("ratemap") else: es.dbgmsg(0, lang("cfg_missing")) es.unload("ratemap") def gg_win(event_var): popup_rating() def load(): global lang lang = langlib.Strings(es.getAddonPath("ratemap") + "/strings.ini") loadconfig() global rm_rounds_left rm_rounds_left = es.ServerVar("mp_maxrounds") if rm_rounds_left == 0: rm_rounds_left = -1 for rm_command in rm_commands: es.regsaycmd(rm_command, rm_commands[rm_command]) global rm_map rm_map = es.ServerVar("eventscripts_currentmap") global rm_path rm_path = es.getAddonPath('ratemap') + "/data/" + rm_map + '.dat' if not os.path.exists(rm_path): mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey['fivestars'] = keyvalues.KeyValues(name='fivestars') mapkey['fivestars']['count'] = 0 mapkey['fourstars'] = keyvalues.KeyValues(name='fourstars') mapkey['fourstars']['count'] = 0 mapkey['threestars'] = keyvalues.KeyValues(name='threestars') mapkey['threestars']['count'] = 0 mapkey['twostars'] = keyvalues.KeyValues(name='twostars') mapkey['twostars']['count'] = 0 mapkey['onestars'] = keyvalues.KeyValues(name='onestars') mapkey['onestars']['count'] = 0 mapkey.save(rm_path) else: mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) gamethread.delayedname(rm_updatetime, "updatesql", updatesql) def unload(): gamethread.cancelDelayed("popup_rating") gamethread.cancelDelayed("updatesql") for rm_command in rm_commands: es.unregsaycmd(rm_command) def es_map_start(event_var): global rm_map rm_map = es.ServerVar("eventscripts_currentmap") global rm_path rm_path = es.getAddonPath('ratemap') + "/data/" + rm_map + ".dat" if not os.path.exists(rm_path): mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey['fivestars'] = keyvalues.KeyValues(name='fivestars') mapkey['fivestars']['count'] = 0 mapkey['fourstars'] = keyvalues.KeyValues(name='fourstars') mapkey['fourstars']['count'] = 0 mapkey['threestars'] = keyvalues.KeyValues(name='threestars') mapkey['threestars']['count'] = 0 mapkey['twostars'] = keyvalues.KeyValues(name='twostars') mapkey['twostars']['count'] = 0 mapkey['onestars'] = keyvalues.KeyValues(name='onestars') mapkey['onestars']['count'] = 0 mapkey['runs'] = keyvalues.KeyValues(name='runs') mapkey['runs']['count'] = 1 mapkey.save(rm_path) else: mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) if 'runs' in mapkey: rm_runs = mapkey['runs']['count'] rm_runs += 1 mapkey['runs']['count'] = rm_runs mapkey.save(rm_path) else: rm_runs = 1 mapkey['runs'] = keyvalues.KeyValues(name='runs') mapkey['runs']['count'] = rm_runs mapkey.save(rm_path) if rm_maplist == 1: createmaplist() gamethread.cancelDelayed("popup_rating") if rm_popup_automatic == 1: rm_popup_seconds = int(rm_popup_minutes) * 60 gamethread.delayedname(rm_popup_seconds, 'popup_rating', popup_rating) rm_sql = DoSql(); rm_sql.start() def updatesql(): rm_sql = DoSql(); rm_sql.start() gamethread.delayedname(rm_updatetime*60, "updatesql", updatesql) def popup_rating(): for rm_userid in playerlib.getPlayerList('#all'): rm_userid = int(rm_userid) mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) rm_steamid = es.getplayersteamid(rm_userid) if not rm_steamid in mapkey: popuprating(rm_userid) def createmaplist(): rm_maplistdict = {} rm_filepath = es.getAddonPath('ratemap') + "/data/" for rm_file in os.listdir(rm_filepath): rm_filepath_full = rm_filepath + rm_file rm_maps = keyvalues.KeyValues(name=rm_file) rm_maps.load(rm_filepath_full) rm_fivestars = rm_maps["fivestars"]["count"] rm_fourstars = rm_maps["fourstars"]["count"] rm_threestars = rm_maps["threestars"]["count"] rm_twostars = rm_maps["twostars"]["count"] rm_onestars = rm_maps["onestars"]["count"] rm_total_fivestars = int(rm_fivestars) * 5 rm_total_fourstars = int(rm_fourstars) * 4 rm_total_threestars = int(rm_threestars) * 3 rm_total_twostars = int(rm_twostars) * 2 rm_total_onestars = int(rm_onestars) * 1 rm_total_votes = int(rm_fivestars) + int(rm_fourstars) + int(rm_threestars) + int(rm_twostars) + int(rm_onestars) rm_total_votes2 = int(rm_total_fivestars) + int(rm_total_fourstars) + int(rm_total_threestars) + int(rm_total_twostars) + int(rm_total_onestars) if rm_total_votes2 != 0: rm_totalmaplistrating = float(rm_total_votes2) / float(rm_total_votes) if rm_maplist_type == 1: rm_maplistrating = rm_total_votes2 if rm_maplist_type == 2: rm_maplistrating = float(rm_total_votes2) / float(rm_total_votes) if rm_maplist_type == 3: rm_maplistrating = rm_total_votes rm_mapname = rm_file.replace(".dat", "") if rm_total_votes <= int(rm_maplist_min_votes) or rm_totalmaplistrating >= int(rm_maplist_rating): rm_maplistdict[rm_mapname] = rm_maplistrating rm_maplistdict_items = [(v, k) for k, v in rm_maplistdict.items()] rm_maplistdict_items.sort() rm_maplistdict_items.reverse() rm_maplistdict_items = [(k, v) for v, k in rm_maplistdict_items] rm_ammount = rm_maplist_ammount rm_txtpath = es.getAddonPath('ratemap') + "../../../../maplist.txt" rm_txtpath2 = es.getAddonPath('ratemap') + "../../../../mapcycle.txt" rm_txtpath3 = es.getAddonPath('ratemap') + "../../../../cfg/mani_admin_plugin/votemaplist.txt" f = open(rm_txtpath, 'w') f2 = open(rm_txtpath2, 'w') if os.path.exists(rm_txtpath3): f3 = open(rm_txtpath3, 'w') for rm_key in rm_maplistdict_items: rm_ammount -= 1 if not rm_ammount == 0: rm_key = str(rm_key) rm_mapname = rm_key.split("', ")[0][2:] f.write('%s\n' % rm_mapname) f2.write('%s\n' % rm_mapname) if os.path.exists(rm_txtpath3): f3.write('%s\n' % rm_mapname) f.close() f2.close() if os.path.exists(rm_txtpath3): f3.close() def round_start(event_var): global rm_rounds_left rm_rounds_left -= 1 if rm_rounds_left == 0: if rm_popup_minutes == 0: popup_rating() mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) for rm_userid in playerlib.getPlayerList("#all"): rm_userid = int(rm_userid) rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" es.tell(rm_userid, "#multi", lang("round_start_msg1", {}, rm_lang)) rm_ratingdict = getrating(rm_userid, rm_map) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map}, rm_lang)) def teamplay_round_start(event_var): mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) for rm_userid in playerlib.getPlayerList("#all"): rm_userid = int(rm_userid) rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" es.tell(rm_userid, "#multi", lang("round_start_msg1", {}, rm_lang)) rm_ratingdict = getrating(rm_userid, rm_map) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map}, rm_lang)) def viewrating(): rm_userid = es.getcmduserid() rm_player = playerlib.getPlayer(int(rm_userid)) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" rm_argcount = es.getargc() if rm_argcount <= 2: if rm_argcount == 1: rm_ratingdict = getrating(rm_userid, rm_map) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map}, rm_lang)) if rm_argcount == 2: rm_map2 = es.getargv(1) rm_ratingdict = getrating(rm_userid, rm_map2) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map2}, rm_lang)) else: es.tell(int(rm_userid), "#multi", lang("viewrating", {}, rm_lang)) def sendpopup(): rm_userid = es.getcmduserid() mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) rm_steamid = es.getplayersteamid(rm_userid) if rm_steamid in mapkey: rm_player = playerlib.getPlayer(int(rm_userid)) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" es.tell(rm_userid, "#multi", lang("sendpopup", {"map": rm_map}, rm_lang)) rm_ratingdict = getrating(rm_userid, rm_map) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map}, rm_lang)) else: popuprating(rm_userid) def popuprating(rm_userid): rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" if popuplib.isqueued('ratemenu', rm_userid): popuplib.close('ratemenu', rm_userid) ratemenu = popuplib.create("ratemenu") ratemenu.addline("RateMap v1.5b") ratemenu.addline("-------------------") ratemenu.addline("%s: %s" % (lang("map", {}, rm_lang), rm_map)) ratemenu.addline("-------------------") ratemenu.addline("->1. 5 %s" % lang("stars", {}, rm_lang)) ratemenu.addline("->2. 4 %s" % lang("stars", {}, rm_lang)) ratemenu.addline("->3. 3 %s" % lang("stars", {}, rm_lang)) ratemenu.addline("->4. 2 %s" % lang("stars", {}, rm_lang)) ratemenu.addline("->5. 1 %s" % lang("star", {}, rm_lang)) ratemenu.addline("-------------------") ratemenu.addline("0. %s" % lang("close", {}, rm_lang)) ratemenu.addline("-------------------") ratemenu.select(1, setrating) ratemenu.select(2, setrating) ratemenu.select(3, setrating) ratemenu.select(4, setrating) ratemenu.select(5, setrating) ratemenu.send(rm_userid) def setrating(rm_userid, rm_choice, rm_popup): mapkey = keyvalues.KeyValues(name=str(rm_map)) mapkey.load(rm_path) if rm_choice == 1: rm_stars = "fivestars" if rm_choice == 2: rm_stars = "fourstars" if rm_choice == 3: rm_stars = "threestars" if rm_choice == 4: rm_stars = "twostars" if rm_choice == 5: rm_stars = "onestars" rm_steamid = es.getplayersteamid(rm_userid) mapkey[rm_steamid] = keyvalues.KeyValues(name=str(rm_steamid)) mapkey[rm_steamid]["Rated"] = rm_choice rm_count = mapkey[rm_stars]["count"] rm_count = int(rm_count) rm_count += 1 mapkey[rm_stars]["count"] = rm_count mapkey.save(rm_path) rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" es.tell(rm_userid, "#multi", lang("thx_for_rating", {"map": rm_map}, rm_lang)) rm_ratingdict = getrating(rm_userid, rm_map) if not rm_ratingdict == None: es.tell(rm_userid, "#multi", lang("rating", rm_ratingdict, rm_lang)) else: es.tell(rm_userid, "#multi", lang("no_rating", {"map": rm_map}, rm_lang)) def getrating(rm_userid, rm_map2): mapkey = keyvalues.KeyValues(name=str(rm_map2)) rm_path2 = es.getAddonPath('ratemap') + "/data/" + rm_map2 + '.dat' if not os.path.exists(rm_path2): return None else: mapkey.load(rm_path2) rm_fivestars = mapkey["fivestars"]["count"] rm_fourstars = mapkey["fourstars"]["count"] rm_threestars = mapkey["threestars"]["count"] rm_twostars = mapkey["twostars"]["count"] rm_onestars = mapkey["onestars"]["count"] rm_total_fivestars = int(rm_fivestars) * 5 rm_total_fourstars = int(rm_fourstars) * 4 rm_total_threestars = int(rm_threestars) * 3 rm_total_twostars = int(rm_twostars) * 2 rm_total_onestars = int(rm_onestars) * 1 rm_total_votes = int(rm_fivestars) + int(rm_fourstars) + int(rm_threestars) + int(rm_twostars) + int(rm_onestars) rm_total_votes2 = int(rm_total_fivestars) + int(rm_total_fourstars) + int(rm_total_threestars) + int(rm_total_twostars) + int(rm_total_onestars) if rm_total_votes != 0: rm_map_rating = float(rm_total_votes2) / float(rm_total_votes) rm_map_rating = "%.2f"%rm_map_rating return {"map": rm_map2, "rating": rm_map_rating, "votes": rm_total_votes} else: return {"map": rm_map2, "rating": 0.00, "votes": 0} def listpopup(): rm_userid = es.getcmduserid() rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" if popuplib.isqueued('ratemenu2', rm_userid): popuplib.close('ratemenu2', rm_userid) ratemenu2 = popuplib.create('ratemenu2') ratemenu2.addline('RateMap v1.5b') ratemenu2.addline('-------------------') ratemenu2.addline('->1. %s' % lang("nameasc", {}, rm_lang)) ratemenu2.addline('->2. %s' % lang("nameasc", {}, rm_lang)) ratemenu2.addline('->3. %s' % lang("votesasc", {}, rm_lang)) ratemenu2.addline('->4. %s' % lang("votesasc", {}, rm_lang)) ratemenu2.addline('->5. %s' % lang("ratingasc", {}, rm_lang)) ratemenu2.addline('->6. %s' % lang("ratingasc", {}, rm_lang)) ratemenu2.addline('-------------------') ratemenu2.addline('0. %s' % lang("close", {}, rm_lang)) ratemenu2.addline('-------------------') ratemenu2.menuselect = sort ratemenu2.send(rm_userid) def sort(rm_userid, rm_choice, rm_popupid): if rm_choice == 1: sortbyname(rm_userid, 1) if rm_choice == 2: sortbyname(rm_userid, 2) if rm_choice == 3: sortbyvotes(rm_userid, 1) if rm_choice == 4: sortbyvotes(rm_userid, 2) if rm_choice == 5: sortbyrating(rm_userid, 1) if rm_choice == 6: sortbyrating(rm_userid, 2) def sortbyname(rm_userid, rm_type): rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" rm_namedict = {} rm_filepath = es.getAddonPath('ratemap') + "/data/" ratemenu3 = popuplib.easymenu('ratemenu3', '_popup_choice', showinfo) ratemenu3.settitle("RateMap v1.5b\n%s" % lang("mapratings", {}, rm_lang)) for rm_file in os.listdir(rm_filepath): rm_file = rm_file.replace(".dat", "") rm_namedict[rm_file] = rm_file rm_namedict_items = [(v, k) for k, v in rm_namedict.items()] rm_namedict_items.sort() if rm_type == 2: rm_namedict_items.reverse() rm_namedict_items = [(k, v) for v, k in rm_namedict_items] for rm_key in rm_namedict_items: rm_key = str(rm_key) rm_name = rm_key.split("', ")[0][2:] ratemenu3.addoption(rm_key, rm_name) ratemenu3.send(rm_userid) def sortbyvotes(rm_userid, rm_type): rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" rm_filepath = es.getAddonPath('ratemap') + "/data/" rm_votedict = {} rm_ratingdict = {} if popuplib.isqueued('ratemenu4', rm_userid): popuplib.close('ratemenu4', rm_userid) for rm_file in os.listdir(rm_filepath): rm_filepath_full = rm_filepath + rm_file rm_maps = keyvalues.KeyValues(name=rm_file) rm_maps.load(rm_filepath_full) rm_map_fivestars = rm_maps["fivestars"]["count"] rm_map_fourstars = rm_maps["fourstars"]["count"] rm_map_threestars = rm_maps["threestars"]["count"] rm_map_twostars = rm_maps["twostars"]["count"] rm_map_onestars = rm_maps["onestars"]["count"] rm_map_total_fivestars = rm_map_fivestars * 5 rm_map_total_fourstars = rm_map_fourstars * 4 rm_map_total_threestars = rm_map_threestars * 3 rm_map_total_twostars = rm_map_twostars * 2 rm_map_total_onestars = rm_map_onestars rm_map_votes = rm_map_fivestars + rm_map_twostars + rm_map_threestars + rm_map_fourstars + rm_map_onestars rm_map_rating = rm_map_total_fivestars + rm_map_total_twostars + rm_map_total_threestars + rm_map_total_fourstars + rm_map_total_onestars rm_votedict[rm_file] = rm_map_votes rm_ratingdict[rm_file] = rm_map_rating rm_votedict_items = [(v, k) for k, v in rm_votedict.items()] rm_votedict_items.sort() if rm_type == 1: rm_votedict_items.reverse() rm_votedict_items = [(k, v) for v, k in rm_votedict_items] rm_ratingdict_items = [(v, k) for k, v in rm_ratingdict.items()] rm_ratingdict_items.sort() if rm_type == 1: rm_ratingdict_items.reverse() ratemenu4 = popuplib.easymenu('ratemenu4', '_popup_choice', showinfo) ratemenu4.settitle("RateMap v1.5b\n%s" % lang("mapratings", {}, rm_lang)) rm_ratingdict_items = [(k, v) for v, k in rm_ratingdict_items] for rm_key in rm_votedict_items: rm_key = str(rm_key) rm_name = rm_key.split("', ")[0][2:] rm_name = rm_name.replace(".dat", "") rm_value = rm_key.split("', ")[1][:4] rm_value = rm_value.replace(")", "") rm_name = rm_name + " - " + rm_value ratemenu4.addoption(rm_key, rm_name) ratemenu4.send(rm_userid) def sortbyrating(rm_userid, rm_type): rm_filepath = es.getAddonPath('ratemap') + "/data/" rm_votedict = {} rm_ratingdict = {} rm_totalratingdict = {} if popuplib.isqueued('ratemenu5', rm_userid): popuplib.close('ratemenu5', rm_userid) ratemenu5 = popuplib.easymenu('ratemenu5', '_popup_choice', showinfo) ratemenu5.settitle("RateMap v1.5b") for rm_file in os.listdir(rm_filepath): rm_filepath_full = rm_filepath + rm_file rm_maps = keyvalues.KeyValues(name=rm_file) rm_maps.load(rm_filepath_full) rm_map_fivestars = rm_maps["fivestars"]["count"] rm_map_fourstars = rm_maps["fourstars"]["count"] rm_map_threestars = rm_maps["threestars"]["count"] rm_map_twostars = rm_maps["twostars"]["count"] rm_map_onestars = rm_maps["onestars"]["count"] rm_map_total_fivestars = rm_map_fivestars * 5 rm_map_total_fourstars = rm_map_fourstars * 4 rm_map_total_threestars = rm_map_threestars * 3 rm_map_total_twostars = rm_map_twostars * 2 rm_map_total_onestars = rm_map_onestars rm_map_votes = rm_map_fivestars + rm_map_twostars + rm_map_threestars + rm_map_fourstars + rm_map_onestars rm_map_rating = rm_map_total_fivestars + rm_map_total_twostars + rm_map_total_threestars + rm_map_total_fourstars + rm_map_total_onestars rm_votedict[rm_file] = rm_map_votes rm_ratingdict[rm_file] = rm_map_rating if rm_map_votes != 0: rm_map_rating = rm_map_rating + .00 rm_map_votes = rm_map_votes + .00 rm_map_total_rating = rm_map_rating / rm_map_votes else: rm_map_total_rating = 0 rm_totalratingdict[rm_file] = rm_map_total_rating rm_ratingdict_items = [(v, k) for k, v in rm_totalratingdict.items()] rm_ratingdict_items.sort() if rm_type == 1: rm_ratingdict_items.reverse() rm_ratingdict_items = [(k, v) for v, k in rm_ratingdict_items] for rm_key in rm_ratingdict_items: rm_key = str(rm_key) rm_key = rm_key.replace(".dat", "") rm_name = rm_key.split("', ")[0][2:] rm_name_full = rm_name + ".dat" rm_map_rating = rm_totalratingdict[rm_name_full] rm_name = rm_name + " - " + str("%.2f"%rm_map_rating) + "/5.00" ratemenu5.addoption(rm_key, rm_name) ratemenu5.send(rm_userid) def showinfo(rm_userid, rm_choice, rm_popupid): rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" if ".dat" in rm_choice: rm_choice = rm_choice.replace(".dat", "") rm_map_name = rm_choice.split("', ")[0][2:] rm_map_path = es.getAddonPath('ratemap') + "/data/" + rm_map_name + ".dat" if popuplib.isqueued('ratemenu6', rm_userid): popuplib.close('ratemenu6', rm_userid) mapkey = keyvalues.KeyValues(name=str(rm_map_name)) mapkey.load(rm_map_path) rm_map_fivestars = mapkey["fivestars"]["count"] rm_map_fourstars = mapkey["fourstars"]["count"] rm_map_threestars = mapkey["threestars"]["count"] rm_map_twostars = mapkey["twostars"]["count"] rm_map_onestars = mapkey["onestars"]["count"] rm_map_total_fivestars = rm_map_fivestars * 5 rm_map_total_fourstars = rm_map_fourstars * 4 rm_map_total_threestars = rm_map_threestars * 3 rm_map_total_twostars = rm_map_twostars * 2 rm_map_total_onestars = rm_map_onestars rm_map_votes = rm_map_fivestars + rm_map_fourstars + rm_map_threestars + rm_map_twostars + rm_map_onestars rm_map_rating = rm_map_total_fivestars + rm_map_total_fourstars + rm_map_total_threestars + rm_map_total_twostars + rm_map_total_onestars if rm_map_rating != 0: rm_map_rating = rm_map_rating + .00 rm_map_votes2 = rm_map_votes + .00 rm_map_rating = rm_map_rating / rm_map_votes2 rm_steamid = es.getplayersteamid(rm_userid) if rm_steamid in mapkey: rm_player_rating = mapkey[rm_steamid]["Rated"] if rm_player_rating == 1: rm_player_rating = "5.00" if rm_player_rating == 2: rm_player_rating = "4.00" if rm_player_rating == 3: rm_player_rating = "3.00" if rm_player_rating == 4: rm_player_rating = "2.00" if rm_player_rating == 5: rm_player_rating = "1.00" if 'runs' in mapkey: rm_runs = mapkey['runs']['count'] else: rm_runs = 0 ratemenu6 = popuplib.create('ratemenu6') ratemenu6.addline('RateMap v1.5b') ratemenu6.addline('-------------------') ratemenu6.addline('%s: %s' % (lang("mapname", {}, rm_lang), rm_map_name)) ratemenu6.addline('%s: %s' % (lang("totalvotes", {}, rm_lang), rm_map_votes)) ratemenu6.addline('%s: %s times' % (lang("mapruns", {}, rm_lang), rm_runs)) ratemenu6.addline('%s: %s' % (lang("ratingtxt", {}, rm_lang), "%.2f"%rm_map_rating + "/5.00")) if rm_steamid in mapkey: ratemenu6.addline('%s: %s' % (lang("yourrating", {}, rm_lang), rm_player_rating)) ratemenu6.addline('-------------------') ratemenu6.addline('0. %s' % lang("close", {}, rm_lang)) ratemenu6.addline('-------------------') ratemenu6.send(rm_userid) def commands(): rm_userid = es.getcmduserid() if popuplib.isqueued('ratemenu7', rm_userid): popuplib.close('ratemenu7', rm_userid) ratemenu7 = popuplib.create('ratemenu7') ratemenu7.addline('RateMap v1.5b') ratemenu7.addline('-------------------') ratemenu7.addline('Help') ratemenu7.addline('-------------------') ratemenu7.addline('->1. !ratemap') ratemenu7.addline('->2. !ratings') ratemenu7.addline('->3. !rating') ratemenu7.addline('->4. !rmhelp') ratemenu7.addline('-------------------') ratemenu7.addline('0. Close') ratemenu7.addline('-------------------') ratemenu7.menuselect = commanddesc ratemenu7.send(rm_userid) def commanddesc(rm_userid, rm_choice, rm_popupid): rm_player = playerlib.getPlayer(rm_userid) rm_lang = rm_player.get("lang") if not rm_lang in rm_languages: rm_lang = "en" if popuplib.isqueued('ratemenu8', rm_userid): popuplib.close('ratemenu8', rm_userid) ratemenu8 = popuplib.create('ratemenu8') ratemenu8.addline('RateMap v1.5b') ratemenu8.addline('-------------------') if rm_choice == 1: ratemenu8.addline('!ratemap') if rm_choice == 2: ratemenu8.addline('!ratings') if rm_choice == 3: ratemenu8.addline('!rating') if rm_choice == 4: ratemenu8.addline('!rmhelp') ratemenu8.addline('-------------------') if rm_choice == 1: ratemenu8.addline('%s' % lang("rmh1", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh2", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh3", {}, rm_lang)) if rm_choice == 2: ratemenu8.addline('%s' % lang("rmh4", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh5", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh6", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh7", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh8", {}, rm_lang)) if rm_choice == 3: ratemenu8.addline('%s' % lang("rmh9", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh10", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh11", {}, rm_lang)) if rm_choice == 4: ratemenu8.addline('%s' % lang("rmh12", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh13", {}, rm_lang)) ratemenu8.addline('%s' % lang("rmh14", {}, rm_lang)) ratemenu8.addline('-------------------') ratemenu8.addline('0. %s' % lang("close", {}, rm_lang)) ratemenu8.addline('-------------------') ratemenu8.send(rm_userid)