From 96d55bcc186f2ef028baea2724e2e0d5b44e4449 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 30 三月 2021 10:23:14 +0800 Subject: [PATCH] 5011 【主干】【bt】【bt2】【btzf】跨服服务器接收玩家数据数据越界报错 --- ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py | 66 ++++++++++++++------------------- 1 files changed, 28 insertions(+), 38 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py index ac6c503..2692310 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py @@ -83,6 +83,10 @@ PlayerControl.NotifyCode(curPlayer, "CreatSuccess") return + if CheckIsServerCreateRoleLimit(curPlayer): + PlayerControl.NotifyCode(curPlayer, "ServerCreateRoleLimit") + return + # CD保护 createSafeTick = 3000 accID = curPlayer.GetAccID() @@ -188,7 +192,7 @@ #GameWorld.DebugLog("SendToDBPlayerCreate dataMapID=%s,lineID=%s,posX=%s,posY=%s,mapID=%s,copyMapID=%s" # % (dataMapID, lineID, posX, posY, mapID, copyMapID)) #根据职业获得默认的属性, #STR//力量 ,PNE//智力,PHY//敏捷,CON//体力 - baseSTR, basePNE, basePHY, baseCON = __GetPlayerBasePoint(sendPack_Job) + baseSTR, basePNE, basePHY, baseCON = 0, 0, 0, 0 curPlayer.SendToDBPlayerCreate( curPlayerID, #PlayerID, @@ -242,44 +246,20 @@ # 创角流向 #DataRecordPack.DR_CreateRole(curPlayer.GetAccID(), sendPack_Name, sendPack_Job) return +#--------------------------------------------------------------------- +def CheckIsServerCreateRoleLimit(curPlayer): + ## 服务器是否创角限制 + groupID = GameWorld.GetServerGroupID() + ipyDataMgr = IpyGameDataPY.IPY_Data() + for i in xrange(ipyDataMgr.GetCreateRoleLimitServerCount()): + ipyData = ipyDataMgr.GetCreateRoleLimitServerByIndex(i) + if groupID in ipyData.GetLimitServerGroupIDList(): + return True + for idA, idB in ipyData.GetLimitServerGroupIDRangeList(): + if idA <= groupID <= idB: + return True + return False -#--------------------------------------------------------------------- -## 获取玩家基础属性点 -# @param sendPack_Job 职业类型 -# @return baseSTR, basePNE, basePHY, baseCON -# @remarks 函数详细说明. -def __GetPlayerBasePoint(sendPack_Job): - baseSTR, basePNE, basePHY, baseCON = (0, 0, 0, 0) - #{ 职业 : { key : value } } - - jobDict = IpyGameDataPY.GetFuncEvalCfg("CreatRolePoint%s" % sendPack_Job, 1) - - if not jobDict: - GameWorld.ErrLog('CreatRoleErr RoleBasePoint, job = %s' % (sendPack_Job)) - return baseSTR, basePNE, basePHY, baseCON - - for key, value in jobDict.items(): - - if type(key) == str: - key = key.upper() - - if key in ['STR', ShareDefine.Def_Effect_STR]: - baseSTR = value - - elif key in ['PNE', ShareDefine.Def_Effect_PNE]: - basePNE = value - - elif key in ['PHY', ShareDefine.Def_Effect_PHY]: - basePHY = value - - elif key in ['CON', ShareDefine.Def_Effect_CON]: - baseCON = value - - else: - GameWorld.ErrLog('CreatRoleErr RoleBasePoint, key = %s' % (key)) - - return baseSTR, basePNE, basePHY, baseCON -#--------------------------------------------------------------------- ## 检查玩家名字是否合法(这里的PlayerName为过滤完空格的名字) # @param curPlayer 当前玩家 # @param playerName 玩家名称 @@ -320,6 +300,11 @@ if createRoleDataMapID not in mapShuntInfoDict: return createRoleDataMapID, 0, posX, posY # 默认1线 + activityLineIndex = 0 # 活动线默认1线 + activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {}) + if createRoleDataMapID in activityMapLineDict: + activityLineIndex = max(0, activityMapLineDict[createRoleDataMapID] - 1) + lineMaxPlayerCount = mapShuntInfoDict[createRoleDataMapID] emptyLineID = None heavyLineList = [] @@ -348,6 +333,11 @@ if dataMapID != createRoleDataMapID: continue + #创角不分配到非一线的活动线路 + if lineID != 0 and lineID == activityLineIndex: + #GameWorld.DebugLog("创角不分配到活动线!lineID=%s" % lineID) + continue + #GameWorld.DebugLog(" lineIndex=%s,lineID=%s,playerCnt=(%s/%s)" % (lineIndex, lineID, curPlayerCnt, maxPlayerCnt)) if curPlayerCnt >= lineMaxPlayerCount: heavyLineList.append([curPlayerCnt, lineID]) -- Gitblit v1.8.0