| | |
| | | PlayerControl.NotifyCode(curPlayer, "CreatSuccess")
|
| | | return
|
| | |
|
| | | if CheckIsServerCreateRoleLimit(curPlayer):
|
| | | PlayerControl.NotifyCode(curPlayer, "ServerCreateRoleLimit")
|
| | | return
|
| | | |
| | | # CD保护
|
| | | createSafeTick = 3000
|
| | | accID = curPlayer.GetAccID()
|
| | |
| | | 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()
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | # 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):
|
| | |
| | | #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,
|
| | |
| | | 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 玩家名称
|
| | |
| | | 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 = []
|
| | |
| | | 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])
|