From d171a50540a656408fbcc1cda016e3d0aede51f9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 26 二月 2025 17:53:32 +0800
Subject: [PATCH] 10385 【越南】【英语】【BT】【GM】【砍树】福地新增鼠管及优化-服务端(优化结算奖励逻辑;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py |   90 ++++++++++++++++++++-------------------------
 1 files changed, 40 insertions(+), 50 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
index 79e2717..1464b90 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()
@@ -112,9 +116,9 @@
     sendPack_Sex = 1 #sendPack.GetSex()
     sendPack_Hair = 10001 #sendPack.GetHair()
     sendPack_HairColor = 1 #sendPack.GetHairColor()
-    sendPack_Face = 10005 #sendPack.GetFace()
-    sendPack_FacePic = 0 # 固定为0,需与客户端配置一致
-    serverID = 1 #sendPack.GetFacePic() # 脸谱作为serverID用
+    sendPack_Face = sendPack.GetFace()
+    sendPack_FacePic = sendPack.GetFacePic()
+    serverID = 1
     sendPack_PlayerType = 1 #sendPack.GetPlayerType()
     sendPack_Job = sendPack.GetJob()
     
@@ -147,6 +151,7 @@
     openJob = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)
     if sendPack_Job not in openJob:
         #curPlayer.Kick(IPY_GameServer.disCreateRoleJobError)
+        GameWorld.ErrLog("创角异常职业! sendPack_Job=%s" % sendPack_Job, curPlayerID)
         PlayerControl.NotifyCode(curPlayer, "CreatUnusual")
         return
 
@@ -158,14 +163,21 @@
 #        return
     
     #----------------------脸型校验
-    #===========================================================================
-    # if sendPack_Face not in ChConfig.Def_RoleFace[sendPack_Job][sendPack_Sex - 1]:
-    #    #脸型错误
-    #    GameWorld.Log("Face = %d Error!,踢玩家下线"%(sendPack_Face) , curPlayerID)
-    #    curPlayer.Kick(IPY_GameServer.disCreateRoleFaceError)
-    #    return
-    #===========================================================================
-
+    if sendPack_Face:
+        faceIpyData = IpyGameDataPY.GetIpyGameData("PlayerFace", sendPack_Face)
+        if not faceIpyData or not faceIpyData.GetUnlockDefault():
+            #curPlayer.Kick(IPY_GameServer.disCreateRoleFaceError)
+            GameWorld.ErrLog("创角异常头像! sendPack_Face=%s" % sendPack_Face, curPlayerID)
+            PlayerControl.NotifyCode(curPlayer, "CreatUnusual")
+            return
+    if sendPack_FacePic:
+        facePicIpyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", sendPack_FacePic)
+        if not facePicIpyData or not facePicIpyData.GetUnlockDefault():
+            #curPlayer.Kick(IPY_GameServer.disCreateRoleFaceError)
+            GameWorld.ErrLog("创角异常头像框! sendPack_FacePic=%s" % sendPack_FacePic, curPlayerID)
+            PlayerControl.NotifyCode(curPlayer, "CreatUnusual")
+            return
+        
     #---------------------五行检查
     #===========================================================================
     # if sendPack_PlayerType not in range(1 , 5 + 1):
@@ -188,7 +200,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,
@@ -236,50 +248,28 @@
                                     IPY_GameServer.TYPE_Price_Gold_Paper,   #默认使用金票     (金子/金票)
                                     IPY_GameServer.TYPE_Price_Silver_Money, #默认使用银子     (银子/银票)
                                     80,                             #默认自动回血设定   inputHPRestoreSetting
-                                    80                              #默认自动回魔设定   inputMPRestoreSetting
+                                    80,                              #默认自动回魔设定   inputMPRestoreSetting
+                                    0,                              #roleType
+                                    0                               #modelMark
                                     )
     
     # 创角流向
     #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 玩家名称

--
Gitblit v1.8.0