From d37ff1be4e18dee345942f1cac676c616636cb61 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 一月 2024 15:57:41 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(每次攻击触发精怪技能支持)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py | 212 ++++++++++++++++++++++++----------------------------
1 files changed, 98 insertions(+), 114 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
index 79e2717..fa0f9e9 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
@@ -27,7 +27,6 @@
import GameWorld
import random
import ChConfig
-import ShareDefine
import PlayerControl
import PyGameData
#---------------------------------------------------------------------
@@ -83,6 +82,10 @@
PlayerControl.NotifyCode(curPlayer, "CreatSuccess")
return
+ if CheckIsServerCreateRoleLimit(curPlayer):
+ PlayerControl.NotifyCode(curPlayer, "ServerCreateRoleLimit")
+ return
+
# CD保护
createSafeTick = 3000
accID = curPlayer.GetAccID()
@@ -112,29 +115,37 @@
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() # 外形 和 时装有区别
#-----------------------名字校验
- #C++过滤空格
- sendPack_Name = GameWorld.GetGameWorld().GetCharTrim(sendPack_Name)
-
- GameWorld.Log("playerName = %s 创建角色,sendPack_Job=%s"%(sendPack_Name, sendPack_Job) , curPlayerID)
-
- if not CheckPlayerName(curPlayer , sendPack_Name):
- #disRoleCreateError 人物创建的时候外观属性错误
- #curPlayer.Kick(IPY_GameServer.disCreateRoleNameError)
- PlayerControl.NotifyCode(curPlayer, "NameError")
- return
-
- sendPack_Name = GameWorld.GetPlayerFullName(curPlayer, sendPack_Name, serverID)
+ sendPack_Name = IpyGameDataPY.GetFuncCfg("CreateRole", 1) # 将命名格式直接传给db创角 gstCreatePlayer,因为这里的curPlayerID不是实际的curPlayerID
if not sendPack_Name:
- #curPlayer.Kick(IPY_GameServer.disCreateRoleNameError)
- PlayerControl.NotifyCode(curPlayer, "NameError")
return
+ #C++过滤空格
+ #sendPack_Name = GameWorld.GetGameWorld().GetCharTrim(sendPack_Name)
+
+ 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 人物创建的时候外观属性错误
+ # #curPlayer.Kick(IPY_GameServer.disCreateRoleNameError)
+ # PlayerControl.NotifyCode(curPlayer, "NameError")
+ # return
+
+ #sendPack_Name = GameWorld.GetPlayerFullName(curPlayer, sendPack_Name, serverID)
+ #if not sendPack_Name:
+ # #curPlayer.Kick(IPY_GameServer.disCreateRoleNameError)
+ # PlayerControl.NotifyCode(curPlayer, "NameError")
+ # return
#-----------------------性别校验
#===========================================================================
@@ -145,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
@@ -173,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))
@@ -188,98 +199,76 @@
#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,
- 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 #外观
)
# 创角流向
#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 玩家名称
@@ -290,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线
--
Gitblit v1.8.0