#!/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)
|
|
|