| | |
| | | import GameWorld
|
| | | import random
|
| | | import ChConfig
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import PyGameData
|
| | | #---------------------------------------------------------------------
|
| | |
| | | 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 人物创建的时候外观属性错误
|
| | |
| | |
|
| | | #---------------------职业检查
|
| | | 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
|
| | |
| | | # 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))
|
| | |
| | | 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 #外观
|
| | | )
|
| | |
|
| | | # 创角流向
|
| | |
| | | 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线
|