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