hxp
2024-09-10 f355e99a5f181ca869bdddf79fec1a27f237d194
ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
@@ -27,7 +27,6 @@
import GameWorld
import random
import ChConfig
import ShareDefine
import PlayerControl
import PyGameData
#---------------------------------------------------------------------
@@ -116,18 +115,25 @@
    sendPack_Sex = 1 #sendPack.GetSex()
    sendPack_Hair = 10001 #sendPack.GetHair()
    sendPack_HairColor = 1 #sendPack.GetHairColor()
    sendPack_Face = 10005 #sendPack.GetFace()
    #sendPack_Face = 10005 #sendPack.GetFace()
    sendPack_FacePic = 0 # 固定为0,需与客户端配置一致
    serverID = 1 #sendPack.GetFacePic() # 脸谱作为serverID用
    sendPack_PlayerType = 1 #sendPack.GetPlayerType()
    sendPack_Job = sendPack.GetJob()
    roleType = sendPack.GetJob() # 创角使用job作为角色用
    ipyData = IpyGameDataPY.GetIpyGameData("CreateRole", roleType)
    if not ipyData:
        return
    job = ipyData.GetJob()
    face = ipyData.GetFace() # 头像
    modelMark = ipyData.GetModelMark() # 外形  和 时装有区别
    #-----------------------名字校验
    sendPack_Name = IpyGameDataPY.GetFuncCfg("CreateRole", 1) # 将命名格式直接传给db创角 gstCreatePlayer,因为这里的curPlayerID不是实际的curPlayerID
    if not sendPack_Name:
        return
    #C++过滤空格
    #sendPack_Name = GameWorld.GetGameWorld().GetCharTrim(sendPack_Name)
    
    GameWorld.Log("playerName = %s 创建角色,sendPack_Job=%s"%(sendPack_Name, sendPack_Job) , curPlayerID)
    GameWorld.Log("创建角色: accID=%s,roleType=%s,job=%s,face=%s,modelMark=%s, name=%s" % (accID, roleType, job, face, modelMark, sendPack_Name) , curPlayerID)
    
    #if not CheckPlayerName(curPlayer , sendPack_Name):
    #    #disRoleCreateError 人物创建的时候外观属性错误
@@ -150,7 +156,7 @@
    
    #---------------------职业检查
    openJob = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)
    if sendPack_Job not in openJob:
    if job not in openJob:
        #curPlayer.Kick(IPY_GameServer.disCreateRoleJobError)
        PlayerControl.NotifyCode(curPlayer, "CreatUnusual")
        return
@@ -178,10 +184,10 @@
    #    return
    #===========================================================================
    
    createMapInfo = __GetCreateRoleMapInfo(sendPack_Job)
    createMapInfo = __GetCreateRoleMapInfo(ipyData.GetCreateRoleMap())
    if not createMapInfo:
        PlayerControl.NotifyCode(curPlayer, "CreatUnusual")
        GameWorld.ErrLog("没有职业对应创角地图信息:sendPack_Job=%s" % sendPack_Job, curPlayerID)
        GameWorld.ErrLog("没有职业对应创角地图信息:sendPack_Job=%s" % job, curPlayerID)
        return
    dataMapID, lineID, posX, posY = createMapInfo
    mapID, copyMapID = PyGameData.g_commMapLineInfo.get((dataMapID, lineID), (dataMapID, 0))
@@ -196,52 +202,54 @@
    baseSTR, basePNE, basePHY, baseCON = 0, 0, 0, 0
    
    curPlayer.SendToDBPlayerCreate(
                                    curPlayerID,                    #PlayerID,
                                    sendPack_Name,                  #PlayerName, //size = 14
                                    1,                              #inputAccState,      //0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除
                                    0,                              #inputGMLevel   //GM等级, 0:不是GM  >=1 : GM的等级
                                    sendPack_Sex,                   #Sex, //性别
                                    sendPack_Hair,                  #Hair, //发型, 1.标准型(男) 2.名仕型 3.浪子型 4.标准型(女) 5.马髻型 6.妩媚型
                                    sendPack_HairColor,             #HairColor, //头发颜色, 5种
                                    sendPack_Face,                  #Face, //基本脸型
                                    sendPack_FacePic,               #脸部图片
                                    sendPack_Job,                   #Job, //ְҵ
                                    1,                              #LV, //等级
                                    0,                              #TotalExp, //总经验
                                    0,                              #FamilyID, //家族
                                    1,                              #Country, //国家, 1.秦国(新手) 2.魏国 3.楚国   阵营
                                    0,                              #Mate,
                                    0,                              #Gold, //金子
                                    0,                              #Silver, //银子
                                    0,                              #金票
                                    0,                              #银票
                                    0,                              #FightPoint, //战斗值
                                    0,                              #HappyPoint, //娱乐值
                                    mapID,                          #MapID, //角色所在地图
                                    dataMapID,                      #DataMapID, //地图分线ID
                                    copyMapID,                      #CopyMapID, //副本地图ID
                                    posX,                           #PosX, //角色坐标
                                    posY,                           #PosY,
                                    0,                              #State, //角色状态   1.封存 2.死亡 3.正常  以后还有陆续添加
                                    100,                            #HP, //当前HP
                                    100,                            #MP, //当前MP
                                    0,                              #FreePoint, //未分配点数
                                    0,                              #FreeSkillPoint,//未分配技能点数
                                    baseSTR,                        #STR, //力量
                                    basePNE,                        #PNE, //智力
                                    basePHY,                        #PHY, //敏捷
                                    baseCON,                        #CON, //体力
                                    "",                             #Setting, //用户设定
                                    0,                              #PKValue, //PKֵ
                                    0,                              #ActiveValue, //击杀敌国阵营玩家和NPC的统计值
                                    sendPack_PlayerType,            #PlayerType, //角色的五行属性,组队用 1. 金 2. 木 3. 水 4. 土 5. 火
                                    "",                             #上次登录时间, 设置为空, 以便触发OnDay事件
                                    0,                              #是否使用仓库密码
                                    "111111",                       #仓库密码
                                    IPY_GameServer.TYPE_Price_Gold_Paper,   #默认使用金票     (金子/金票)
                                    curPlayerID, #PlayerID,
                                    sendPack_Name, #PlayerName, //size = 14
                                    1, #inputAccState,      //0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除
                                    0, #inputGMLevel   //GM等级, 0:不是GM  >=1 : GM的等级
                                    sendPack_Sex, #Sex, //性别
                                    sendPack_Hair, #Hair, //发型, 1.标准型(男) 2.名仕型 3.浪子型 4.标准型(女) 5.马髻型 6.妩媚型
                                    sendPack_HairColor, #HairColor, //头发颜色, 5种
                                    face, #Face, //基本脸型
                                    sendPack_FacePic, #脸部图片
                                    job, #Job, //ְҵ
                                    1, #LV, //等级
                                    0, #TotalExp, //总经验
                                    0, #FamilyID, //家族
                                    1, #Country, //国家, 1.秦国(新手) 2.魏国 3.楚国   阵营
                                    0, #Mate,
                                    0, #Gold, //金子
                                    0, #Silver, //银子
                                    0, #金票
                                    0, #银票
                                    0, #FightPoint, //战斗值
                                    0, #HappyPoint, //娱乐值
                                    mapID, #MapID, //角色所在地图
                                    dataMapID, #DataMapID, //地图分线ID
                                    copyMapID, #CopyMapID, //副本地图ID
                                    posX, #PosX, //角色坐标
                                    posY, #PosY,
                                    0, #State, //角色状态   1.封存 2.死亡 3.正常  以后还有陆续添加
                                    100, #HP, //当前HP
                                    100, #MP, //当前MP
                                    0, #FreePoint, //未分配点数
                                    0, #FreeSkillPoint,//未分配技能点数
                                    baseSTR, #STR, //力量
                                    basePNE, #PNE, //智力
                                    basePHY, #PHY, //敏捷
                                    baseCON, #CON, //体力
                                    "", #Setting, //用户设定
                                    0, #PKValue, //PKֵ
                                    0, #ActiveValue, //击杀敌国阵营玩家和NPC的统计值
                                    sendPack_PlayerType, #PlayerType, //角色的五行属性,组队用 1. 金 2. 木 3. 水 4. 土 5. 火
                                    "", #上次登录时间, 设置为空, 以便触发OnDay事件
                                    0, #是否使用仓库密码
                                    "111111", #仓库密码
                                    IPY_GameServer.TYPE_Price_Gold_Paper, #默认使用金票     (金子/金票)
                                    IPY_GameServer.TYPE_Price_Silver_Money, #默认使用银子     (银子/银票)
                                    80,                             #默认自动回血设定   inputHPRestoreSetting
                                    80                              #默认自动回魔设定   inputMPRestoreSetting
                                    80, #默认自动回血设定   inputHPRestoreSetting
                                    80, #默认自动回魔设定   inputMPRestoreSetting
                                    roleType,   #角色
                                    modelMark   #外观
                                    )
    
    # 创角流向
@@ -271,32 +279,27 @@
        return False
    
    if DirtyList.IsWordForbidden(playerName):
        GameWorld.Log('玩家创建角色失败, 名字不合法 = %s'%(playerName))
        GameWorld.Log('玩家创建角色失败, 名字不合法 = %s' % (playerName))
        return False
    
    playerNameLen = len(playerName)
    
    if playerNameLen < ChConfig.Def_CreatRole_MinStr:
        GameWorld.Log('玩家创建角色失败, 角色名字过短 = %s , %s < %s'%(playerName, playerNameLen, ChConfig.Def_CreatRole_MinStr))
        GameWorld.Log('玩家创建角色失败, 角色名字过短 = %s , %s < %s' % (playerName, playerNameLen, ChConfig.Def_CreatRole_MinStr))
        return False
    
    if playerNameLen > ChConfig.Def_CreatRole_MaxStr:
        GameWorld.Log('玩家创建角色失败, 角色名字过长 = %s , %s > %s'%(playerName, playerNameLen, ChConfig.Def_CreatRole_MaxStr))
        GameWorld.Log('玩家创建角色失败, 角色名字过长 = %s , %s > %s' % (playerName, playerNameLen, ChConfig.Def_CreatRole_MaxStr))
        return False
    
    return True
def __GetCreateRoleMapInfo(job):
def __GetCreateRoleMapInfo(createRoleMap):
    '''获取创角重生新手村地图
    @return: None
    @return: dataMapID, lineID, posX, posY
    '''
    createRoleMapDict = IpyGameDataPY.GetFuncEvalCfg("CreateRoleMap", 1) # {ְҵ:[dataMapID, posX,posY], ...}
    if job not in createRoleMapDict:
        return
    createRoleDataMapID, posX, posY = createRoleMapDict[job]
    createRoleDataMapID, posX, posY = createRoleMap
    mapShuntInfoDict = IpyGameDataPY.GetFuncEvalCfg("SetWorldPosShunt", 1) # 地图对应分流人数 {dataMapID:人数, ...}
    if createRoleDataMapID not in mapShuntInfoDict:
        return createRoleDataMapID, 0, posX, posY # 默认1线