#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # writer:ifo # @copyright: Copyright (c) 2004, 2010 Xiamen Wangyou Network Technology Co.,Ltd., All rights reserved. #------------------------------------------------------------------------------- # #ÅúÁ¿×¢²áÕʺŠimport os import sys import md5 import uuid import logging import pymongo import MangoDBCommon import AccountInfo from time import localtime import MongoDBConfig import CommFunc import tagDSAccountReader import tagDBPlayerReader import tagRoleItemReader import tagRolePetReader import tagPetSkillReader import tagRoleSkillReader now = localtime() file = "%s-%d-%d-%d.log" % ( "MongoGMAcc", now.tm_year, now.tm_mon, now.tm_mday ) logging.basicConfig(level=logging.DEBUG, format='%(name)-12s %(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%Y-%m-%dT%H:%M:%S', filename=file, filemode='a+') tagDSAccountReader.ReadConfig("tagDSAccount.txt") tagDSAccountConfig = tagDSAccountReader.GetConfig() tagDBPlayerReader.ReadConfig("tagDBPlayer.txt") tagDBPlayerConfig = tagDBPlayerReader.GetConfig() tagRoleItemReader.ReadConfig("tagRoleItem.txt") tagRoleItemConfig = tagRoleItemReader.GetConfig() tagRolePetReader.ReadConfig("tagRolePet.txt") tagRolePetConfig = tagRolePetReader.GetConfig() tagPetSkillReader.ReadConfig("tagPetSkill.txt") tagPetSkillConfig = tagPetSkillReader.GetConfig() tagRoleSkillReader.ReadConfig("tagRoleSkill.txt") tagRoleSkillConfig = tagRoleSkillReader.GetConfig() class MongoGMAcc: def __init__(self): self.connection = 0 self.userDb = 0 self.regDB = None self.userList = [] def LoginMongoDB(self,user, pwd, ip = '', port = '', connection = None ): try: if not connection: connection = pymongo.Connection(ip, port) db = connection.admin return db.authenticate(user, pwd) except Exception,e: print 'Login mongodb failed:user = %s,pwd = %s'%(user, pwd) logging.error('Login mongodb failed:user = %s,pwd = %s'%(user, pwd)) return False def ConnectServer(self): try: self.connection = pymongo.Connection(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT) except: print 'Connect mongo db server %s:%s failed!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT) logging.error('Connect mongo db server %s:%s failed!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT)) return print 'Connect mongo db server %s:%s ok!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT) logging.info('Connect mongo db server %s:%s ok!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT)) isTrue,psw = CommFunc.Decrypt(MongoDBConfig.USER_DB_Password) if not isTrue: print 'decode psw fail!' logging.error('decode psw fail!') return if not self.LoginMongoDB(MongoDBConfig.USER_DB_UserName, psw, connection = self.connection): return self.userDb = self.connection[MongoDBConfig.USER_DB_NAME] self.regDB = self.connection[MongoDBConfig.REG_DB_NAME] return True def CreateAccountInfo(self,curUser,commentLine): rec = AccountInfo.tagDSAccount() for i in range(len(commentLine)): print '---',commentLine[i],getattr(curUser,commentLine[i]), '++++' setattr(rec,commentLine[i],getattr(curUser,commentLine[i])) accid = getattr(curUser,"ACCID") setattr(rec,"ACCID",accid.strip().lower()) lastExceptionCnt = MangoDBCommon.getADOExceptionCount() lastSIDErrorCnt = MangoDBCommon.getSIDErrorCnt() if rec.adoLoadC(self.userDb.tagDSAccount): print 'Accid = %s exists!'%accid logging.warning('Accid = %s exists!'%accid) return else: if lastExceptionCnt != MangoDBCommon.getADOExceptionCount(): #Êý¾Ý¿â·ÃÎÊÒì³£ print 'DB access excption!' logging.error('DB access excption!') return if lastSIDErrorCnt != MangoDBCommon.getSIDErrorCnt(): #Óû§È·Êµ²»´æÔÚ print 'accid = %s not found!'%accid logging.error('accid = %s not found!'%accid) return #ÃÜÂë½øÐÐ2´ÎMD5 psw = getattr(curUser,"Psw") psw = psw.strip().lower() md5Obj1 = md5.new() md5Obj1.update(psw) psw = md5Obj1.hexdigest() md5Obj2 = md5.new() md5Obj2.update(psw) psw = md5Obj2.hexdigest() setattr(rec,"Psw",psw.strip().lower()) if not rec.adoInsertC(self.userDb.tagDSAccount): print 'Reg accid = %s failed!'%accid logging.warning('Reg accid = %s failed!'%accid) return print 'Reg accid = %s ok'%accid logging.info('Reg accid = %s ok'%accid) def hasPlayerByPlayerName(self, db, playerName): collection = db.tagDBPlayer #ÕýÔò±í´ïʽ£¬ÊµÏÖ´óСд²»Ãô¸Ð²éѯ name = '^%s$'%playerName resultCollection = collection.find({'PlayerName':{'$regex':MangoDBCommon.fix_incomingText(playerName), '$options':'i'}, 'IsDeleted':0}) return (resultCollection.count() != 0) def CreatePlayer(self,curUser,commentLine): createPlayer = AccountInfo.tagDBPlayer() createPlayer.IsDeleted = 0 createPlayer.AccState = 1 createPlayer.GMLevel = 90 createPlayer.HPRestoreSetting = 20 createPlayer.MPRestoreSetting = 20 createPlayer.UseGoldType = 2 createPlayer.UseSilverType = 4 createPlayer.SID = 2266520 for i in range(len(commentLine)): setattr(createPlayer,commentLine[i],getattr(curUser,commentLine[i])) #ÕʺÅͳһתСд accid = getattr(curUser,"AccID") setattr(createPlayer,"AccID",accid.strip().lower()) self.DBPlayerCollection = self.userDb.tagDBPlayer #¼ì²é¸ÃÕʺÅÊÇ·ñÒÑÓÐÓÐЧ½ÇÉ« if createPlayer.adoLoadCEx(self.userDb.tagDBPlayer, {'AccID':createPlayer.AccID, 'IsDeleted':createPlayer.IsDeleted}): print 'player of accid = %s exists!'%createPlayer.AccID logging.warning('player of accid = %s exists!'%createPlayer.AccID) return #¼ì²é½ÇÉ«ÃûÊÇ·ñÖØ¸´ if self.hasPlayerByPlayerName(self.userDb, createPlayer.PlayerName): print 'player of playerName = %s exists!'%createPlayer.PlayerName logging.warning('player of playerName = %s exists!'%createPlayer.PlayerName) return #Éú³É×ÔÔö³¤µÄplayerID createPlayer.PlayerID = MangoDBCommon.seq(self.userDb, 'tagDBPlayer', 'PlayerID', MangoDBCommon.PLAYERID_FEED, MangoDBCommon.PLAYERID_STEP) #УÑéͨ¹ý£¬ÍùÊý¾Ý¿âÖвåÈë½ÇÉ« if not createPlayer.adoInsertC(self.userDb.tagDBPlayer): print 'insert player failed!accid = %s'%createPlayer.AccID logging.warning('insert player failed!accid = %s'%createPlayer.AccID) return #²åÈë½ÇÉ«³É¹¦ #¶ÁÈ¡½ÇÉ«ID if not createPlayer.adoLoad(self.userDb.tagDBPlayer): print 'insert player failed!accid = %s'%createPlayer.AccID logging.warning('insert player failed!accid = %s'%createPlayer.AccID) return self.userList.append(createPlayer) print 'insert role ok!accid = %s'%createPlayer.AccID logging.info('insert role ok!accid = %s'%createPlayer.AccID) def MakeRoleItem(self,curUser,commentLine,userItemDataDict): createItem = AccountInfo.tagRoleItem() userDataList = userItemDataDict.get((curUser.Sex,curUser.Job)) if userDataList == None: print 'not this itemData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID) logging.warning('not this itemData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID)) return for userData in userDataList: createItem.ItemGUID = str(uuid.uuid1()) createItem.PlayerID = curUser.PlayerID for i in range(2,len(commentLine)): setattr(createItem,commentLine[i],getattr(userData,commentLine[i])) if not createItem.adoCheckUpdateC(self.userDb.tagRoleItem): print 'insert Item failed!ItemGUID = %s'%createItem.ItemGUID logging.warning('insert Item failed!ItemGUID = %s'%createItem.ItemGUID) continue print 'insert Item ok!accid = %s,ItemGUID = %s'%(curUser.AccID,createItem.ItemGUID) logging.info('insert Item ok!accid = %s,ItemGUID = %s'%(curUser.AccID,createItem.ItemGUID)) def AddRolePet(self,curUser,commentLine,rolePetDataDict,petSkillCommentLine,petSkillDataDict): createRolePet = AccountInfo.tagRolePet() userDataList = rolePetDataDict.get((curUser.Sex,curUser.Job)) if userDataList == None: print 'not this rolePetData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID) logging.warning('not this rolePetData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID)) return for userData in userDataList: createRolePet.PlayerID = curUser.PlayerID createRolePet.PetID = createRolePet.PlayerID*10 for i in range(2,len(commentLine)): setattr(createRolePet,commentLine[i],getattr(userData,commentLine[i])) if not createRolePet.adoCheckUpdate(self.userDb.tagRolePet): print 'insert RolePet failed!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name) logging.warning('insert RolePet failed!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name)) continue print 'insert RolePet ok!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name) logging.info('insert RolePet ok!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name)) createPetSkill = AccountInfo.tagPetSkill() key = getattr(createRolePet,"NPCID") if petSkillDataDict.has_key(key): curPetSkill = petSkillDataDict[key] for j in range(1,len(petSkillCommentLine)): curPetSkillInfoList = getattr(curPetSkill,petSkillCommentLine[j]) for k in range(len(curPetSkillInfoList)): createPetSkill.PetID = createRolePet.PetID createPetSkill.PlayerID = createRolePet.PlayerID setattr(createPetSkill,petSkillCommentLine[j],curPetSkillInfoList[k]) if not createPetSkill.adoCheckUpdate(self.userDb.tagPetSkill): print 'insert PetSkill failed!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID) logging.warning('insert PetSkill failed!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID)) continue print 'insert PetSkill ok!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID) logging.info('insert PetSkill ok!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID)) def AddRoleSkill(self,user,commentLine,roleSkillDataDict): createRoleSkill = AccountInfo.tagRoleSkill() key = getattr(user,"AccID") if roleSkillDataDict.has_key(key): curRoleSkill = roleSkillDataDict[key] for j in range(1,len(commentLine)): curRoleSkillInfoList = getattr(curRoleSkill,commentLine[j]) for k in range(len(curRoleSkillInfoList)): createRoleSkill.PlayerID = user.PlayerID setattr(createRoleSkill,commentLine[j],curRoleSkillInfoList[k]) if not createRoleSkill.adoCheckUpdate(self.userDb.tagRoleSkill): print 'insert RoleSkill failed!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID) logging.warning('insert RoleSkill failed!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID)) continue print 'insert RoleSkill ok!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID) logging.info('insert RoleSkill ok!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID)) if __name__ == '__main__': newAccount = MongoGMAcc() if not newAccount.ConnectServer(): os.system('pause') UserCount = tagDSAccountConfig.GetRecordCount() CommentLine = tagDSAccountConfig.GetCommentLine() for i in range(UserCount): curUser = tagDSAccountConfig.GetRecordByIndex(i) newAccount.CreateAccountInfo(curUser,CommentLine) UserCount = tagDBPlayerConfig.GetRecordCount() CommentLine = tagDBPlayerConfig.GetCommentLine() for i in range(UserCount): curUser = tagDBPlayerConfig.GetRecordByIndex(i) newAccount.CreatePlayer(curUser,CommentLine) userItemDataCount = tagRoleItemConfig.GetRecordCount() userItemDataDict={} for i in range(userItemDataCount): curUserItemIndex = tagRoleItemConfig.GetRecordByIndex(i) userItemDataDict.update({(curUserItemIndex.Sex,curUserItemIndex.Job):[]}) for i in range(userItemDataCount): curUserItemIndex = tagRoleItemConfig.GetRecordByIndex(i) key = (curUserItemIndex.Sex,curUserItemIndex.Job) if userItemDataDict.has_key(key): userItemDataDict[key].append(curUserItemIndex) CommentLine = tagRoleItemConfig.GetCommentLine() for user in newAccount.userList: newAccount.MakeRoleItem(user,CommentLine,userItemDataDict) rolePetDataCount = tagRolePetConfig.GetRecordCount() rolePetDataDict={} for i in range(rolePetDataCount): curRolePetIndex = tagRolePetConfig.GetRecordByIndex(i) rolePetDataDict.update({(curRolePetIndex.Sex,curRolePetIndex.Job):[]}) for i in range(rolePetDataCount): curRolePetIndex = tagRolePetConfig.GetRecordByIndex(i) key = (curRolePetIndex.Sex,curRolePetIndex.Job) if rolePetDataDict.has_key(key): rolePetDataDict[key].append(curRolePetIndex) petSkillDataCount = tagPetSkillConfig.GetRecordCount() petSkillDataDict={} for i in range(petSkillDataCount): curPetSkillIndex = tagPetSkillConfig.GetRecordByIndex(i) petSkillDataDict.update({curPetSkillIndex.NPCID:curPetSkillIndex}) CommentLine = tagRolePetConfig.GetCommentLine() PetSkillCommentLine = tagPetSkillConfig.GetCommentLine() for user in newAccount.userList: newAccount.AddRolePet(user,CommentLine,rolePetDataDict,PetSkillCommentLine,petSkillDataDict) roleSkillDataCount = tagRoleSkillConfig.GetRecordCount() roleSkillDataDict={} for i in range(roleSkillDataCount): curRoleSkillIndex = tagRoleSkillConfig.GetRecordByIndex(i) roleSkillDataDict.update({curRoleSkillIndex.AccID:curRoleSkillIndex}) CommentLine = tagRoleSkillConfig.GetCommentLine() for user in newAccount.userList: newAccount.AddRoleSkill(user,CommentLine,roleSkillDataDict)