From 532b9f45735b9a1b04667afb83b3fe3203d74ffb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 08 六月 2021 11:49:58 +0800
Subject: [PATCH] 8972 【主干】【BT】【BT2】 GM工具增加激活删除称号命令
---
Tool/Robot/Robot/RobotMgr.py | 67 +++++++++++++++++++++------------
1 files changed, 43 insertions(+), 24 deletions(-)
diff --git a/Tool/Robot/Robot/RobotMgr.py b/Tool/Robot/Robot/RobotMgr.py
index 7e88aae..c9e038c 100644
--- a/Tool/Robot/Robot/RobotMgr.py
+++ b/Tool/Robot/Robot/RobotMgr.py
@@ -18,13 +18,14 @@
Thread.__init__(self, None, None, "AIThreadPy_%s"%index)
self.robotMgr = robotMgr
self.AIList = []
- #config = ConfigurationReader.ConfigIniReader.GetConfig()
-
- self.lastTime = 0
+ config = ConfigurationReader.ConfigIniReader.GetConfig()
+ self.tjgLimitCnt = config.GetTJGLimitCnt() # 限制脱机数量
+ self.offTime = config.GetPlayerOffTime() # 获取下线多久的玩家时间
+ self.lastTime = 0 # 控制日志输出频率
self.badRobotCnt = 0 # 历史异常脱机挂个数
self.ProcessFindTJGTime = 5
- self.lastLoginTime = 0
+ self.lastLoginTime = 0 # 处理机器人登录的频率
def runThread(self):
logging.info( "thread %s start" % self.getName() )
@@ -35,6 +36,11 @@
nowTime = time.time()
if self.lastLoginTime and nowTime - self.lastLoginTime > self.ProcessFindTJGTime:
+ logging.debug( "self.tjgLimitCnt %s " % self.tjgLimitCnt )
+ # 限制脱机挂登录数量, 没有实时的玩家上线后会补收益
+ if self.robotMgr.GetRobotCount() > self.tjgLimitCnt:
+ self.robotMgr.dbRobot.ClearToken()
+
self.lastLoginTime = nowTime
logoningList = self.robotMgr.GetRobotAccIDList() # 在登录的机器人
@@ -42,9 +48,14 @@
robotList = []
for i in xrange(len(tokenList)):
tokenInfo = tokenList.pop()
-
- if tokenInfo[1] in logoningList:
- print "正在登录中------", tokenInfo[1]
+ accID = tokenInfo[1]
+ if accID in logoningList:
+ print "正在登录中------", accID
+ continue
+
+ lastTime = self.robotMgr.GetNoteLastTimeByAccID(accID) # 上一次加入队列的时间
+ if lastTime != 0 and nowTime - lastTime < self.offTime:
+ # 登录有问题则进入排队
continue
robot = self.robotMgr.AddRobot(tokenInfo)
robotList.append(robot)
@@ -58,7 +69,7 @@
continue
# 连接-登录-运行AI
- if not robot.IsConnected():
+ if not robot.IsConnected() and robot.GetReconnectCount() < 2:
robot.ReCreateRobot()
@@ -67,7 +78,11 @@
if index >= self.robotMgr.GetRobotCount():
# ProcessAI可能会清除了robot
break
- robot = self.robotMgr.GetRobot( index )
+ try:
+ robot = self.robotMgr.GetRobot( index )
+ except:
+ # 判断index防范不到,可能多线程引起,此处报错结束循环
+ break
if not robot:
continue
robot.GetAIMgr().ProcessAI()
@@ -79,7 +94,11 @@
# 队列中清理无效的脱机挂, 一次只清理一个
for index in xrange(self.robotMgr.GetRobotCount()):
#logging.debug( "Run AI for Index:%d", index )
- robot = self.robotMgr.GetRobot( index )
+ try:
+ robot = self.robotMgr.GetRobot( index )
+ except:
+ # 判断index防范不到,可能多线程引起,此处报错结束循环
+ break
if not robot:
print "====没有机器人"
self.robotMgr.Remove(robot)
@@ -122,12 +141,22 @@
self.dbRobot = dbRobot
self.TeamMgr = {}
+ self.LoginHistory = {} # 记录历史添加时间 {账号:时间} 登录失败需3分钟后方可尝试
+
#启动AI线程
#config = ConfigurationReader.ConfigIniReader.GetConfig()
#AI_THREAD_NUM = config.GetAIThreadNum()
th = AIThread(self, 0)
th.start()
+
+
+ def NoteHistory(self, accID):
+ self.LoginHistory[accID] = time.time()
+
+ def GetNoteLastTimeByAccID(self, accID):
+ return self.LoginHistory.get(accID, 0)
+
def GetRobotAccIDList(self):
self.__robotAccIDs = []
@@ -136,7 +165,9 @@
return self.__robotAccIDs
def AddRobot(self, tokenInfo):
-
+
+ self.LoginHistory[tokenInfo[1]] = time.time() # 账号记录
+
#创建Robot实例,具体项目实现相应的RobotBase的子类,在这里创建子类的实例
logging.debug( "Create Robot index:%s....." % (tokenInfo,) )
robot = ProjectRobot( self.__asioMgr, tokenInfo )
@@ -167,19 +198,6 @@
return n
-#===============================================================================
-# def ConnectServer(self, index ):
-#
-# robot = self.GetRobot(index)
-# if not robot:
-# return False
-#
-# logging.debug( "ConnectServer for %d" % index )
-# #创建了实例了,这时只需要再次连接即可
-# robot.ReCreateRobot()
-# return True
-#===============================================================================
-
def GetRobot(self, index ):
#logging.debug( "GetRobot for %d" % index )
@@ -187,6 +205,7 @@
def Remove(self, robot):
self.__robots.remove(robot)
+ logging.info( "Remove robot 剩余: %s"%len(self.__robots) )
def DisconnectServer(self, robot ):
--
Gitblit v1.8.0