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 玩家名称
@@ -320,6 +310,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 +343,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])