コード例 #1
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
 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
コード例 #2
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
    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 
コード例 #3
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
    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
コード例 #4
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
    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"
コード例 #5
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
 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)
コード例 #6
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
    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 &quot;Shop: Something Here&quot;<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
コード例 #7
0
ファイル: Scripts.py プロジェクト: sebid/DcDump
    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