def getBackpackName(self, accname, charid, containerID): for appdatafolders in getAppdataFolders(): path = os.path.join(appdatafolders, accname, "Char{0}".format(charid), "Containers", "Container_51017x{0}.xml".format(containerID)) if not os.access(path, os.F_OK): continue try: data = open(path).read() except: print "[Scripts] Could not open file Container_51017x{0}.xml".format(containerID) return None try: return re.search(r"""name="container_name" value='"(.*?)"'""", data, re.I).groups()[0] except: return None return True
def AddScripts(self, data, stats, period, online, group): for appdatafolders in getAppdataFolders(): appdatafolders = os.path.join(appdatafolders, "..") if not os.access(appdatafolders, os.F_OK): print "[Scripts] Error: Could not find a scripts folder with access rights" return False # Try adding scripts to appdata success = self.AddScripts_Real(data, stats, period, online, group) if success: return True else: print "[Scripts] Error: Could not write scripts to Appdata" return False
def AddShopLootScript(self, data, text, targetWindow): # Make sure we got SQL access to item DB if self.__CONN == None: self.__CONN = sqlite3.connect("itemdb") __SQL = self.__CONN.cursor() __SQL.execute("CREATE TABLE if not exists items (id INTEGER NOT NULL PRIMARY KEY UNIQUE, name TEXT)") __SQL.close() # Check if AO folder exists for appdatafolders in getAppdataFolders(): if not os.access(appdatafolders, os.F_OK): print "[Scripts] Error: Could not find a scripts folder with access rights" return False filedata = """<a href="text://{0}<br>{1}<br>""".format( datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S"), text[0] ) for itemdata in data: item = itemdata.split('/') #try: itemname = self.getItemName( int(item[0]) ) filedata += "<a href='itemref://%d/%d/%d'>QL%d %s</a><br>" % (int(item[0]), int(item[1]), int(item[2]), int(item[2]), itemname) #except: #print "[Scripts] Error.. ", sys.exc_info()[0] , " for", item[0],item[1],item[2] filedata += """<br><a href='chatcmd:///start http://aodevs.com/projects/view/14'>Get parser here</a>">{0}</a>""".format(text[1]) #print filedata prefix = self.getPrefix(targetWindow) # Make sure the scripts folder exists path = os.path.join(appdatafolders, "scripts") if not os.access(appdatafolders, os.F_OK): try: print "[Scripts] Making dir %s" % os.path.join(path, "dcDumps") os.makedirs( os.path.join(path, "dcDumps") ) except: #print "[Scripts] Failed creating scripts dir at: %s" % appdatafolders print "[Scripts] Error: Could not write loot script to Appdata" return False if self.WriteScripts(os.path.join(appdatafolders, "scripts", text[2]), prefix+filedata): #print "wrote to {0}".format(os.path.join(appdatafolders, "scripts", "loot")) self.WriteScripts(os.path.join(appdatafolders, "scripts", "e{0}".format(text[2])), '/text '+filedata) else: print "could not write to {0}".format(os.path.join(appdatafolders, "scripts", text[2])) return False
def AddOnlineStatus(self, online): for appdatafolders in getAppdataFolders(): if not os.access(appdatafolders, os.F_OK): print "[Scripts] Error: Could not find a scripts folder with access rights" return False if online: od = "/text DCDump is <font color=green>currently parsing!</font>" else: od = "/text DCDump is <font color=red>not parsing!</font>" # /dc command if not self.WriteScripts( os.path.join(appdatafolders, "scripts", "dc"), "/text "+ self.getDcHelp(online)): print "[Scripts] Could not write /dc" # /dcStatus if not self.WriteScripts( os.path.join(appdatafolders, "scripts", "dcStatus"), od): print "[Scripts] Could not write /dcStatus"
def AddLootScript(self, data, targetWindow): text = ('Item drops for last corpse:', 'Click to see drops', 'loot') for appdatafolders in getAppdataFolders(): self.AddShopLootScript(data, text, targetWindow)
def OpenBackpack(self, charid, containerid, items): print "OpenBackpack called!" if len(self.accids) == 0: self.accids = Chars.GetAccFromID( False) if not charid in self.accids: return False else: accname = self.accids[charid] name = None for appdatafolders in getAppdataFolders(): path = os.path.join(appdatafolders, "Prefs", accname, "Char{0}".format(charid), "Containers", "Container_51017x{0}.xml".format(containerid)) try: ts = os.stat(path).st_mtime except: return False # Get backpack name if not containerid in self.backpacks: name = self.getBackpackName(accname, charid, containerid) self.backpacks[containerid] = (name, ts) # Check if we need to update backpack name elif self.backpacks[containerid][1] != ts: name = self.getBackpackName(accname, charid, containerid) self.backpacks[containerid] = (name, ts) else: name = self.backpacks[containerid][0] # If the name is None, lets just bail now. if not name: return False if 'shop:' in name.lower() and not containerid in self.shoppacks: # Add to shoppacks self.shoppacks[containerid] = (name.replace('SHOP:', '').strip(), items) print "[Scripts] Adding Shop:",name if not 'shop:' in name.lower() and containerid in self.shoppacks: # Remove from shoppacks print "[Scripts] Removing",name del self.shoppacks[containerid] i = 1 for entry in self.shoppacks: text = ('My stuff for sale:', self.shoppacks[entry][0], 'shop{0}'.format(i)) for appdatafolders in getAppdataFolders(): self.AddShopLootScript(appdatafolders, self.shoppacks[entry][1], text, "Default") i += 1 if len(self.shoppacks) == 0: shopscript = 'You have no registered shops.<br><br>' shopscript += '1) Put everything you want to sell into a backpack<br>' shopscript += '2) Rename the backpack to "Shop: Something Here"<br>' shopscript += '3) Zone and open the backpack.<br><br>' shopscript += 'The backpack names and contents will only update once per zoning.<br>' shopscript += '''It should now be available via /shopm<br>''' shopscript += '''If you change the contents of the backpack, please zone then re-open it.<br>''' else: i = 1 shopscript = "--- Announce shops ---<br>" for entry in self.shoppacks: shopscript += '''<a href='chatcmd:///shop{1}'>Announce: {0}</a><br>'''.format(self.shoppacks[entry][0], i) i += 1 i = 1 shopscript += "<br>--- View shops ---<br>" for entry in self.shoppacks: shopscript += '''<a href='chatcmd:///eshop{1}'>View: {0}</a><br>'''.format(self.shoppacks[entry][0], i) i += 1 # Write to /shopm for appdatafolders in getAppdataFolders(): if not self.WriteScripts( os.path.join(appdatafolders, 'scripts', 'shopm'), '/text <a href="text://<font color=yellow>{0}</font>">Shop details</a>'.format(shopscript)): print "[Scripts] Failed to write /shopm" return False else: print "[Scripts] Debug: OK to write /shopm (shops: {0}, {1}".format(len(self.shoppacks) ,os.path.join(appdatafolders, 'scripts', 'shopm')) return True return True
def AddScripts_Real(self, data, stats, period, online, group="Default"): """ @param data: Dictionary with data from Processing module @param stats: Dictionary with statistics from Processing module @param period: Tuple of two timestamps (epoch) Writes input data to AOPATH\scripts Use /dc ingame to access available commands """ # Make sure we really have data! (1 is "?Tanks", so need at least 2) if len(data) <= 1: print "AddScripts() called on zero data, ignored."; return # Make sure the scripts folder exists for appdatafolders in getAppdataFolders(): scriptsfolders = os.path.join(appdatafolders, "scripts") #print scriptsfolders if not os.access(scriptsfolders, os.F_OK): try: print "[Scripts] Making dir %s" % appdatafolders os.makedirs( "dcDumps" ) except: print "[Scripts] Failed creating scripts dir at: %s" % appdatafolders return False if not os.access(os.path.join(scriptsfolders, "dcDumps"), os.F_OK): try: print "[Scripts] Making dir %s" % os.path.join(appdatafolders, "dcDumps") os.makedirs( os.path.join(scriptsfolders, "dcDumps") ) except: print "[Scripts] Failed creating scripts dir at: %s" % appdatafolders return False dates = ( datetime.datetime.fromtimestamp(period[0]), datetime.datetime.fromtimestamp(period[1])) if dates[0] > dates[1]: dates = (dates[1], dates[0]) # Minimum 1 second duration, prevents all kinds of nasty div-zero if dates[0] == dates[1]: #dates = (dates[0], datetime.datetime.fromtimestamp(period[1]+1)) print "[Scripts] Fight duration is 0 seconds, aborting /dc scripts.." return True 'A bit redundant, but backward-compatible' try: ptime = data['?Paused'] except: ptime = 0 prefix = self.getPrefix(group) #if not os.access(os.path.join(scriptsfolders, "dcBoth"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcBoth"), prefix+"/dcDumps/dcBoth1"): return False if not os.access(os.path.join(scriptsfolders, "dcBothe"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcBothe"), "/dcDumps/dcBothe1"): return False #if not os.access(os.path.join(scriptsfolders, "dcRaid"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcRaid"), prefix+"/dcDumps/dcRaid1"): return False if not os.access(os.path.join(scriptsfolders, "dcRaide"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcRaide"), "/dcDumps/dcRaide1"): return False #if not os.access(os.path.join(scriptsfolders, "dcDump"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcDump"), prefix+"/dcDumps/dcDump1"): return False if not os.access(os.path.join(scriptsfolders, "dcDumpe"), os.F_OK): if not self.WriteScripts(os.path.join(scriptsfolders, "dcDumpe"), "/dcDumps/dcDumpe1"): return False #if not self.WriteScripts(os.path.join(scriptsfolders, "dcExp"), self.getDcExp(stats, dates, ptime)): return False if not self.WriteScripts(os.path.join(scriptsfolders, "dcExpe"), "/text "+ self.getDcExp(stats, dates, ptime)): return False if not self.WriteScripts(os.path.join(scriptsfolders, "dcProfs"), prefix+ self.getDcProfs(stats, dates, ptime)): return False if not self.WriteScripts(os.path.join(scriptsfolders, "dcProfse"), "/text "+ self.getDcProfs(stats, dates, ptime)): return False if not self.WriteScripts(os.path.join(scriptsfolders, "dcTank"), prefix+ self.getDcTank(data, dates, ptime)): return False if not self.WriteScripts(os.path.join(scriptsfolders, "dcTanke"), "/text "+ self.getDcTank(data, dates, ptime)): return False # /dc command if not self.WriteScripts(appdatafolders+"\scripts\\dc", "/text "+ self.getDcHelp(online)): return False if online: if not self.WriteScripts( os.path.join(scriptsfolders, "dcStatus"), "/text DCDump is <font color=green>currently parsing!</font>"): return False else: if not self.WriteScripts( os.path.join(scriptsfolders, "dcStatus"), "/text DCDump is <font color=red>not parsing!</font>"): return False # Subfolder scripts pathToDumps = os.path.join(scriptsfolders, "dcDumps") #if not os.access(pathToDumps, os.F_OK): # os.makedirs(pathToDumps) """ raidData = raidout = "" for i in xrange(1, len(raidData)): raidout += "/dcDumps/dcRaide%d\n"%i """ #self.WriteScripts(appdatafolders+"scripts\\dcRaide", raidout); i = 1 scriptData = self.getRaidData(data, dates, ptime) scriptData.append(self.getDcDump(data, dates, ptime)) for Filedata in scriptData: if i < len(scriptData): if not self.WriteScripts(pathToDumps+"\\dcBoth%d"%i, Filedata+"\n/dcDumps/dcBoth%d"%(i+1) ): return False if not self.WriteScripts(pathToDumps+"\\dcBothe%d"%i, "/text "+ Filedata+"\n/dcDumps/dcBothe%d"%(i+1) ): return False else: if not self.WriteScripts(pathToDumps+"\\dcBoth%d"%i, Filedata ): return False if not self.WriteScripts(pathToDumps+"\\dcBothe%d"%i, "/text "+ Filedata ): return False i += 1 #self.WriteScripts(pathToDumps+"\\dcBoth2", self.getDcBothData2(data, dates, ptime)) #self.WriteScripts(pathToDumps+"\\dcBothe2", "/text "+ self.getDcBothData2(data, dates, ptime)) # Detailed stats if not self.WriteScripts(pathToDumps+"\\dcDump1", self.getDcDump(data, dates, ptime)): return False if not self.WriteScripts(pathToDumps+"\\dcDumpe1", "/text "+ self.getDcDump(data, dates, ptime)): return False # Raid stats (multi page support) i = 1 scriptData = self.getRaidData(data, dates, ptime) for Filedata in scriptData: if i < len(scriptData): if not self.WriteScripts(pathToDumps+"\\dcRaid%d"%i, Filedata+"\n/dcDumps/dcRaid%d"%(i+1)): return False if not self.WriteScripts(pathToDumps+"\\dcRaide%d"%i, "/text "+ Filedata+"\n/dcDumps/dcRaide%d"%(i+1)): return False else: if not self.WriteScripts(pathToDumps+"\\dcRaid%d"%i, Filedata): return False if not self.WriteScripts(pathToDumps+"\\dcRaide%d"%i, "/text "+ Filedata): return False i += 1 return True