From 92abd0a6d6d4cfa02850da755884cb6917652b96 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 22 十二月 2023 11:39:47 +0800
Subject: [PATCH] 10046 【后端】创建角色(修改支持角色、头像、外形)
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 29 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 26 +++++
PySysDB/PySysDBPY.h | 10 ++
ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py | 129 +++++++++++++------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 73 +++-----------
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 2
PySysDB/PySysDBG.h | 11 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 3
9 files changed, 165 insertions(+), 120 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 85968ac..04436d4 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -10,6 +10,17 @@
char Numerical5; //数据5
};
+//创角表
+
+struct tagCreateRole
+{
+ BYTE _RoleType; // 角色
+ BYTE Job; // 职业
+ DWORD Face; // 默认头像
+ DWORD ModelMark; // 默认外形
+ list CreateRoleMap; // 创角地图坐标信息 [dataMapID,posX,posY]
+};
+
//创角限制服务器配置表 #tagCreateRoleLimitServer
struct tagCreateRoleLimitServer
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 76a7ef5..dec8ab6 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -21,6 +21,16 @@
list StarAttrValue; //累计总属性值
};
+//创角表
+
+struct tagCreateRole
+{
+ BYTE _RoleType; // 角色
+ list BaseAttrIDList; // 角色基础属性ID
+ list BaseAttrValueList; // 角色基础属性值
+ list CreateRoleMap; // 创角地图坐标信息 [dataMapID,posX,posY]
+};
+
//灵根表 #tagRolePoint
struct tagRolePoint
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index de6cfec..1f4f068 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -29521,7 +29521,7 @@
class tagRefreshType(Structure):
_pack_ = 1
_fields_ = [
- ("RefreshType", c_ubyte),
+ ("RefreshType", c_ushort),
("Value", c_int),
("ValueEx", c_int),
]
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 74c8c16..b83f940 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -41,6 +41,14 @@
("char", "Numerical5", 0),
),
+ "CreateRole":(
+ ("BYTE", "RoleType", 1),
+ ("BYTE", "Job", 0),
+ ("DWORD", "Face", 0),
+ ("DWORD", "ModelMark", 0),
+ ("list", "CreateRoleMap", 0),
+ ),
+
"CreateRoleLimitServer":(
("list", "LimitServerGroupIDRangeList", 0),
("list", "LimitServerGroupIDList", 0),
@@ -960,6 +968,23 @@
def GetNumerical3(self): return self.Numerical3 # 数据3
def GetNumerical4(self): return self.Numerical4 # 数据4
def GetNumerical5(self): return self.Numerical5 # 数据5
+
+# 创角表
+class IPY_CreateRole():
+
+ def __init__(self):
+ self.RoleType = 0
+ self.Job = 0
+ self.Face = 0
+ self.ModelMark = 0
+ self.CreateRoleMap = []
+ return
+
+ def GetRoleType(self): return self.RoleType # 角色
+ def GetJob(self): return self.Job # 职业
+ def GetFace(self): return self.Face # 默认头像
+ def GetModelMark(self): return self.ModelMark # 默认外形
+ def GetCreateRoleMap(self): return self.CreateRoleMap # 创角地图坐标信息 [dataMapID,posX,posY]
# 创角限制服务器配置表
class IPY_CreateRoleLimitServer():
@@ -2871,6 +2896,8 @@
self.ipyConfigEx = {}
self.ipyFuncConfigCache = self.__LoadFileData("FuncConfig", IPY_FuncConfig)
self.ipyFuncConfigLen = len(self.ipyFuncConfigCache)
+ self.ipyCreateRoleCache = self.__LoadFileData("CreateRole", IPY_CreateRole)
+ self.ipyCreateRoleLen = len(self.ipyCreateRoleCache)
self.ipyCreateRoleLimitServerCache = self.__LoadFileData("CreateRoleLimitServer", IPY_CreateRoleLimitServer)
self.ipyCreateRoleLimitServerLen = len(self.ipyCreateRoleLimitServerCache)
self.ipyWorldLVCache = self.__LoadFileData("WorldLV", IPY_WorldLV)
@@ -3211,6 +3238,8 @@
def GetFuncConfigCount(self): return self.ipyFuncConfigLen
def GetFuncConfigByIndex(self, index): return self.ipyFuncConfigCache[index]
+ def GetCreateRoleCount(self): return self.ipyCreateRoleLen
+ def GetCreateRoleByIndex(self, index): return self.ipyCreateRoleCache[index]
def GetCreateRoleLimitServerCount(self): return self.ipyCreateRoleLimitServerLen
def GetCreateRoleLimitServerByIndex(self, index): return self.ipyCreateRoleLimitServerCache[index]
def GetWorldLVCount(self): return self.ipyWorldLVLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CreateRole.py
index 94fd4d3..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
#---------------------------------------------------------------------
@@ -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线
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index de6cfec..1f4f068 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -29521,7 +29521,7 @@
class tagRefreshType(Structure):
_pack_ = 1
_fields_ = [
- ("RefreshType", c_ubyte),
+ ("RefreshType", c_ushort),
("Value", c_int),
("ValueEx", c_int),
]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index afc7b01..a9deca2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -49,6 +49,13 @@
("list", "StarAttrValue", 0),
),
+ "CreateRole":(
+ ("BYTE", "RoleType", 1),
+ ("list", "BaseAttrIDList", 0),
+ ("list", "BaseAttrValueList", 0),
+ ("list", "CreateRoleMap", 0),
+ ),
+
"RolePoint":(
("BYTE", "AttrID", 1),
("dict", "AddAttrInfoPerPoint", 0),
@@ -2288,6 +2295,21 @@
def GetStarUpNeedItemList(self): return self.StarUpNeedItemList # 升下一星所需道具 [[物品ID,个数], ...]
def GetStarAttrType(self): return self.StarAttrType # 累计总属性类型
def GetStarAttrValue(self): return self.StarAttrValue # 累计总属性值
+
+# 创角表
+class IPY_CreateRole():
+
+ def __init__(self):
+ self.RoleType = 0
+ self.BaseAttrIDList = []
+ self.BaseAttrValueList = []
+ self.CreateRoleMap = []
+ return
+
+ def GetRoleType(self): return self.RoleType # 角色
+ def GetBaseAttrIDList(self): return self.BaseAttrIDList # 角色基础属性ID
+ def GetBaseAttrValueList(self): return self.BaseAttrValueList # 角色基础属性值
+ def GetCreateRoleMap(self): return self.CreateRoleMap # 创角地图坐标信息 [dataMapID,posX,posY]
# 灵根表
class IPY_RolePoint():
@@ -6946,6 +6968,8 @@
self.ipyDienstgradLen = len(self.ipyDienstgradCache)
self.ipyTitleStarUpCache = self.__LoadFileData("TitleStarUp", IPY_TitleStarUp)
self.ipyTitleStarUpLen = len(self.ipyTitleStarUpCache)
+ self.ipyCreateRoleCache = self.__LoadFileData("CreateRole", IPY_CreateRole)
+ self.ipyCreateRoleLen = len(self.ipyCreateRoleCache)
self.ipyRolePointCache = self.__LoadFileData("RolePoint", IPY_RolePoint)
self.ipyRolePointLen = len(self.ipyRolePointCache)
self.ipyLingQiAttrCache = self.__LoadFileData("LingQiAttr", IPY_LingQiAttr)
@@ -7566,6 +7590,8 @@
def GetDienstgradByIndex(self, index): return self.ipyDienstgradCache[index]
def GetTitleStarUpCount(self): return self.ipyTitleStarUpLen
def GetTitleStarUpByIndex(self, index): return self.ipyTitleStarUpCache[index]
+ def GetCreateRoleCount(self): return self.ipyCreateRoleLen
+ def GetCreateRoleByIndex(self, index): return self.ipyCreateRoleCache[index]
def GetRolePointCount(self): return self.ipyRolePointLen
def GetRolePointByIndex(self, index): return self.ipyRolePointCache[index]
def GetLingQiAttrCount(self): return self.ipyLingQiAttrLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 2398cfe..62cc5d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -129,7 +129,8 @@
def PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, sendPack_PosX, sendPack_PosY):
gameWorldTick = GameWorld.GetGameWorld().GetTick()
Def_Max_Move_Tick = 5000
-
+ if not curPlayer.GetSpeed():
+ return False
if abs(gameWorldTick - clientWorldTick) >= Def_Max_Move_Tick:
curPlayer.Sync_ClientTick()
#时间相差过大,可能因网络引起,拉回
@@ -1673,17 +1674,12 @@
NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FromMapID, 0)
# 老号支持,本来就在中立地图的,返回新手村
if not mapID:
- # {职业:[dataMapID,posX,posY], ...}
- createRoleMapDict = IpyGameDataPY.GetFuncEvalCfg("CreateRoleMap", 1, {})
- if not createRoleMapDict:
+ ipyData = IpyGameDataPY.GetIpyGameData("CreateRole", curPlayer.GetRoleType())
+ if not ipyData:
return
- job = curPlayer.GetJob()
+ mapID, posX, posY = ipyData.GetCreateRoleMap()
lineID = 0
- if job in createRoleMapDict:
- mapID, posX, posY = createRoleMapDict[job]
- else:
- mapInfoList = createRoleMapDict.values()
- mapID, posX, posY = mapInfoList[0]
+
#离开副本
else:
fromFBMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromFBMapID)
@@ -3911,10 +3907,7 @@
LuckyHitRateTotal = curPlayer.GetLuckyHitRate()
job = curPlayer.GetJob()
- diffAttrDict = self.__GetAttrFightPowerParamDiff(job)
- for paramName, diffValue in diffAttrDict.items():
- exec("%s = max(0, %s - %s)" % (paramName, paramName, diffValue))
-
+
#获取策划配置的表格
FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
@@ -3924,26 +3917,6 @@
GameWorld.ErrLog("模块战力超过数值上限, MfpType=%s,fightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
totalFightPower = ShareDefine.Def_UpperLimit_DWord
return totalFightPower
-
- def __GetAttrFightPowerParamDiff(self, job):
- ## 战力计算属性参数与实际属性差值
-
- #角色基础模块某些属性不计算战力
- if self.mfpType != ShareDefine.Def_MFPType_Role:
- return {}
-
- roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
- notFightPowerEffIDNameDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 2)
- if job not in roleBaseAttrDict:
- return {}
-
- diffAttrDict = {}
- jobBaseAttrDict = roleBaseAttrDict[job]
- for attrID, paramName in notFightPowerEffIDNameDict.items():
- if attrID not in jobBaseAttrDict:
- continue
- diffAttrDict[paramName] = jobBaseAttrDict[attrID]
- return diffAttrDict
def GetMFPAttrStr(self):
attrStr = ""
@@ -4387,31 +4360,21 @@
def CalcRoleBaseAttr(self, curPlayer):
# 计算玩家角色基础属性值
- curPlayerID = curPlayer.GetID()
+ #curPlayerID = curPlayer.GetID()
job = curPlayer.GetJob()
-
- lvAttrDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAttr%s" % job, 1)
-
- if not lvAttrDict:
- GameWorld.ErrLog('无此职业等级刷属性配置!job=%s' % (job), curPlayerID)
+ roleType = curPlayer.GetRoleType()
+ ipyData = IpyGameDataPY.GetIpyGameData("CreateRole", roleType)
+ if not ipyData:
return
-
+ baseAttrIDList = ipyData.GetBaseAttrIDList()
+ baseAttrValueList = ipyData.GetBaseAttrValueList()
allAttrList = [{} for _ in range(4)]
- # 职业初始属性
- roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
- if job in roleBaseAttrDict:
- for roleBaseAttrID, value in roleBaseAttrDict[job].items():
- CalcAttrDict_Type(roleBaseAttrID, value, allAttrList)
- #GameWorld.DebugLog("初始加属性: %s" % allAttrList)
-
- # 等级成长属性
- LV = curPlayer.GetLV()
- for lvAttrID, formula in lvAttrDict.items():
- calcValue = eval(FormulaControl.GetCompileFormula("LVUPAttr%s_%s" % (job, lvAttrID), formula))
- CalcAttrDict_Type(lvAttrID, calcValue, allAttrList)
- #GameWorld.DebugLog(" lvAttrID=%s,calcValue=%s" % (lvAttrID, calcValue))
- #GameWorld.DebugLog("等级加属性: %s" % allAttrList)
+ # 初始属性
+ if baseAttrIDList and baseAttrValueList and len(baseAttrIDList) == len(baseAttrValueList):
+ for i, attrID in enumerate(baseAttrIDList):
+ CalcAttrDict_Type(attrID, baseAttrValueList[i], allAttrList)
+ GameWorld.DebugLog("初始加属性: %s" % allAttrList)
# 属性点属性
hadRefreshAttr = curPlayer.GetDictByKey(ChConfig.Def_Player_HadRefreshAttr) # 本地图是否刷新过属性
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 8d9d4b7..243c324 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -166,6 +166,9 @@
curPlayerPropDict["LV"] = curPlayer.GetLV()
curPlayerPropDict["RealmLV"] = curPlayer.GetOfficialRank()
curPlayerPropDict["Job"] = curPlayer.GetJob()
+ curPlayerPropDict["RoleType"] = curPlayer.GetRoleType()
+ curPlayerPropDict["Face"] = curPlayer.GetFace()
+ curPlayerPropDict["ModelMark"] = curPlayer.GetModelMark()
curPlayerPropDict["VIPLV"] = curPlayer.GetVIPLv()
curPlayerPropDict["Name"] = curPlayer.GetPlayerName()
curPlayerPropDict["FamilyID"] = curPlayer.GetFamilyID()
--
Gitblit v1.8.0