From a1f053eb420898b323a18b9e260aaec34af2992a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 08 十月 2023 14:49:30 +0800
Subject: [PATCH] 9896 【BT0.1】【主干】坐骑、灵宠、称号升星
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 53 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 156 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 216 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 93 ++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 156 +++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 216 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 24 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py | 29 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 87 ++++
PySysDB/PySysDBPY.h | 33 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py | 98 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 17
14 files changed, 1,173 insertions(+), 7 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 1e47284..dfe9400 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -10,6 +10,17 @@
list Skills; //被动技能
};
+//称号升星表
+
+struct tagTitleStarUp
+{
+ DWORD _TitleID; //称号NPCID
+ BYTE _TitleStar; //称号星级
+ list StarUpNeedItemList; //升下一星所需道具 [[物品ID,个数], ...]
+ list StarAttrType; //累计总属性类型
+ list StarAttrValue; //累计总属性值
+};
+
//灵根表 #tagRolePoint
struct tagRolePoint
@@ -339,6 +350,17 @@
DWORD InitFightPower; //初始战力
};
+//灵宠升星表
+
+struct tagPetStarUp
+{
+ DWORD _PetNPCID; //灵兽NPCID
+ BYTE _PetStar; //灵兽星级
+ list StarUpNeedItemList; //升下一星所需道具 [[物品ID,个数], ...]
+ list StarAttrType; //累计总属性类型
+ list StarAttrValue; //累计总属性值
+};
+
//灵宠培养表
struct tagPetTrain
@@ -451,6 +473,17 @@
BYTE Quality; //坐骑品质
};
+//坐骑升星表
+
+struct tagHorseStarUp
+{
+ DWORD _HorseID; //坐骑ID
+ BYTE _HorseStar; //坐骑星级
+ list StarUpNeedItemList; //升下一星所需道具 [[物品ID,个数], ...]
+ list StarAttrType; //累计总属性类型
+ list StarAttrValue; //累计总属性值
+};
+
//古宝表
struct tagGubao
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 04f4a00..11c4858 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -11954,6 +11954,58 @@
#------------------------------------------------------
+# A5 35 坐骑升星 #tagCMHorseStarUp
+
+class tagCMHorseStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("HorseID", c_int), #坐骑ID,对应坐骑表ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x35
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x35
+ self.HorseID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMHorseStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 35 坐骑升星 //tagCMHorseStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ HorseID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.HorseID
+ )
+ return DumpString
+
+
+m_NAtagCMHorseStarUp=tagCMHorseStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseStarUp.Cmd,m_NAtagCMHorseStarUp.SubCmd))] = m_NAtagCMHorseStarUp
+
+
+#------------------------------------------------------
# A5 31 坐骑培养 #tagCMHorseTrain
class tagCMHorseTrain(Structure):
@@ -13425,6 +13477,58 @@
#------------------------------------------------------
+# A5 36 称号升星 #tagCMTitleStarUp
+
+class tagCMTitleStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("TitleID", c_int), #称号ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x36
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x36
+ self.TitleID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMTitleStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 36 称号升星 //tagCMTitleStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ TitleID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.TitleID
+ )
+ return DumpString
+
+
+m_NAtagCMTitleStarUp=tagCMTitleStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTitleStarUp.Cmd,m_NAtagCMTitleStarUp.SubCmd))] = m_NAtagCMTitleStarUp
+
+
+#------------------------------------------------------
# A5 11 试用首充武器 #tagCMTryFirstGoldItem
class tagCMTryFirstGoldItem(Structure):
@@ -14366,6 +14470,58 @@
#------------------------------------------------------
+# A7 06 宠物升星 #tagCMPetStarUp
+
+class tagCMPetStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("PetItemIndex", c_ubyte), #宠物数据背包索引
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA7
+ self.SubCmd = 0x06
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA7
+ self.SubCmd = 0x06
+ self.PetItemIndex = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMPetStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A7 06 宠物升星 //tagCMPetStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ PetItemIndex:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.PetItemIndex
+ )
+ return DumpString
+
+
+m_NAtagCMPetStarUp=tagCMPetStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetStarUp.Cmd,m_NAtagCMPetStarUp.SubCmd))] = m_NAtagCMPetStarUp
+
+
+#------------------------------------------------------
# A7 05 宠物培养 #tagCMPetTrain
class tagCMPetTrain(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 46c327c..0f37d31 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -21821,6 +21821,114 @@
#------------------------------------------------------
+# A3 CD 坐骑星级信息 #tagMCHorseStarInfo
+
+class tagMCHorseStar(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("HorseID", c_int), # 坐骑表ID
+ ("Star", c_ubyte), # 星级
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.HorseID = 0
+ self.Star = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCHorseStar)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 CD 坐骑星级信息 //tagMCHorseStarInfo:
+ HorseID:%d,
+ Star:%d
+ '''\
+ %(
+ self.HorseID,
+ self.Star
+ )
+ return DumpString
+
+
+class tagMCHorseStarInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ HorseStarList = list() #(vector<tagMCHorseStar> HorseStarList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCD
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temHorseStarList = tagMCHorseStar()
+ _pos = temHorseStarList.ReadData(_lpData, _pos)
+ self.HorseStarList.append(temHorseStarList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCD
+ self.Count = 0
+ self.HorseStarList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.HorseStarList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.HorseStarList[i].GetLength(), self.HorseStarList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ HorseStarList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCHorseStarInfo=tagMCHorseStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseStarInfo.Head.Cmd,m_NAtagMCHorseStarInfo.Head.SubCmd))] = m_NAtagMCHorseStarInfo
+
+
+#------------------------------------------------------
# A3 38 投资理财信息 #tagMCInvestInfo
class tagMCInvestInfo(Structure):
@@ -24952,6 +25060,114 @@
#------------------------------------------------------
+# A3 CE 称号星级信息 #tagMCTitleStarInfo
+
+class tagMCTitleStar(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("TitleID", c_int), # 称号ID
+ ("Star", c_ubyte), # 星级
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.TitleID = 0
+ self.Star = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCTitleStar)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 CE 称号星级信息 //tagMCTitleStarInfo:
+ TitleID:%d,
+ Star:%d
+ '''\
+ %(
+ self.TitleID,
+ self.Star
+ )
+ return DumpString
+
+
+class tagMCTitleStarInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ TitleStarList = list() #(vector<tagMCTitleStar> TitleStarList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCE
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temTitleStarList = tagMCTitleStar()
+ _pos = temTitleStarList.ReadData(_lpData, _pos)
+ self.TitleStarList.append(temTitleStarList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCE
+ self.Count = 0
+ self.TitleStarList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.TitleStarList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.TitleStarList[i].GetLength(), self.TitleStarList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ TitleStarList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCTitleStarInfo=tagMCTitleStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTitleStarInfo.Head.Cmd,m_NAtagMCTitleStarInfo.Head.SubCmd))] = m_NAtagMCTitleStarInfo
+
+
+#------------------------------------------------------
# A3 56 通天令信息 #tagMCTongTianLingInfo
class tagMCTongTianLingInfo(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 8977ad8..15c7437 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1582,6 +1582,7 @@
Def_IudetPet_State = 204 # 当前状态, 对应 Def_PetStateList
Def_IudetPet_QualityLV = 206 # 品质
Def_IudetPet_Exp = 208 # 经验
+Def_IudetPet_Star = 210 # 星级
Def_IudetPet_Skill = 201 # 技能列表
Def_IudetHorsePetSkinIndex = 210 # 骑宠觉醒外观索引
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 625f7a3..56d1cca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -52,7 +52,7 @@
Writer = wdb
Releaser = wdb
RegType = 0
-RegisterPackCount = 6
+RegisterPackCount = 7
PacketCMD_1=0xA5
PacketSubCMD_1=0x01
@@ -77,6 +77,10 @@
PacketCMD_6=0xA5
PacketSubCMD_6=0x31
PacketCallFunc_6=OnHorseTrain
+
+PacketCMD_7=0xA5
+PacketSubCMD_7=0x35
+PacketCallFunc_7=OnHorseStarUp
;玛雅加强
[EquipPlus]
@@ -241,7 +245,7 @@
Writer = hxp
Releaser = hxp
RegType = 0
-RegisterPackCount = 3
+RegisterPackCount = 4
PacketCMD_1=0xA7
PacketSubCMD_1=0x02
@@ -255,6 +259,22 @@
PacketSubCMD_3=0x05
PacketCallFunc_3=OnPetTrain
+PacketCMD_4=0xA7
+PacketSubCMD_4=0x06
+PacketCallFunc_4=OnPetStarUp
+
+;称号
+[PlayerDienstgrad]
+ScriptName = Player\PlayerDienstgrad.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xA5
+PacketSubCMD_1=0x36
+PacketCallFunc_1=OnTitleStarUp
+
;事件
[EventShell]
ScriptName = Event\EventShell.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 3cd2686..9433b07 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4024,6 +4024,7 @@
# 坐骑
Def_PDict_HorserLV = "HorserLV" # 坐骑等级
+Def_PDict_HorserStar = "HorserStar_%s" # 坐骑星级,参数(坐骑ID)
Def_PDict_HorserEatItemCount = "HorserEatItemCount" # 当前阶已吃培养丹个数
Def_PDict_HorserSkinPlusState = "HorserSkinPlusState%s" # 坐骑幻化皮肤激活状态,按二进制位存储,每位代表幻化ID是否已激活,支持多值
Def_PDict_HorserSkinEndTime = "HorserSkinEndTime_%s" # 坐骑幻化皮肤激活结束时间戳,仅针对非永久的幻化皮肤
@@ -4033,6 +4034,10 @@
#骑宠觉醒
Def_PDict_HorsePetSkinData = "HorsePetSkinData%d_%s" #觉醒等级*100+外观索引 参数(类型,关联ID) 1-坐骑 2-灵宠
Def_PDict_HorsePetSkinExp = "HorsePetSkinExp%d_%s" #经验 参数(类型,关联ID) 1-坐骑 2-灵宠
+
+# 称号
+Def_PDict_TitleStar = "TitleStar_%s" # 称号星级,参数(称号ID)
+
# 符印
Def_PDict_Rune_HoleOpenState = "Rune_HoleOpenState" # 符印解锁状态
Def_PDict_Rune_Data = "Rune_Data_%s" # 符印镶嵌数据, 参数(第几孔)
@@ -4789,7 +4794,10 @@
Def_CalcAttrFunc_LingQiEnchant, # 灵器附魔 54
Def_CalcAttrFunc_Gubao, # 古宝 55
Def_CalcAttrFunc_Shentong, # 神通 56
-) = range(57)
+Def_CalcAttrFunc_HorseStar, # 坐骑星级 57
+Def_CalcAttrFunc_PetStar, # 灵宠星级 58
+Def_CalcAttrFunc_TitleStar, # 称号星级 59
+) = range(60)
# 技能功能点列表 - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
@@ -4810,9 +4818,9 @@
ShareDefine.Def_MFPType_LingQi:[Def_CalcAttrFunc_LingQi, Def_CalcAttrFunc_LingQiAttr, Def_CalcAttrFunc_LingQiJingLianAttr, Def_CalcAttrFunc_GuardTarin,
Def_CalcAttrFunc_WingTarin, Def_CalcAttrFunc_PeerlessWeaponTrain, Def_CalcAttrFunc_PeerlessWeapon2Train],
ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
- ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_PetSkin, Def_CalcAttrFunc_PetTarin],
+ ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_PetSkin, Def_CalcAttrFunc_PetTarin, Def_CalcAttrFunc_PetStar],
ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
- ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse, Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_HorseSkin, Def_CalcAttrFunc_HorseTarin],
+ ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse, Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_HorseSkin, Def_CalcAttrFunc_HorseTarin, Def_CalcAttrFunc_HorseStar],
ShareDefine.Def_MFPType_HorseSoul:[Def_CalcAttrFunc_HorseSoul],
ShareDefine.Def_MFPType_FaQi:[Def_CalcAttrFunc_FaQi],
ShareDefine.Def_MFPType_Love:[Def_CalcAttrFunc_LoveRing, Def_CalcAttrFunc_LoveRingCouple],
@@ -4820,7 +4828,7 @@
ShareDefine.Def_MFPType_LianTi:[Def_CalcAttrFunc_LianTi],
ShareDefine.Def_MFPType_Prestige:[Def_CalcAttrFunc_Prestige],
ShareDefine.Def_MFPType_GodWeapon:[Def_CalcAttrFunc_GodWeapon],
- ShareDefine.Def_MFPType_Dienstgrad:[Def_CalcAttrFunc_Dienstgrad],
+ ShareDefine.Def_MFPType_Dienstgrad:[Def_CalcAttrFunc_Dienstgrad, Def_CalcAttrFunc_TitleStar],
ShareDefine.Def_MFPType_Rune:[Def_CalcAttrFunc_Rune],
ShareDefine.Def_MFPType_MagicWeapon1:[Def_CalcAttrFunc_MagicWeapon1],
ShareDefine.Def_MFPType_MagicWeapon2:[Def_CalcAttrFunc_MagicWeapon2],
@@ -4859,6 +4867,7 @@
Def_CalcAttrFunc_WingTarin:"翅膀培养", Def_CalcAttrFunc_PeerlessWeaponTrain:"灭世培养", Def_CalcAttrFunc_PeerlessWeapon2Train:"噬魂培养", Def_CalcAttrFunc_FaQi:"法器",
Def_CalcAttrFunc_LoveRing:"情戒基础", Def_CalcAttrFunc_LoveRingCouple:"情戒仙侣", Def_CalcAttrFunc_Charm:"魅力", Def_CalcAttrFunc_LianTi:"炼体",
Def_CalcAttrFunc_Enchant:"附魔", Def_CalcAttrFunc_LingQiEnchant:"灵器附魔", Def_CalcAttrFunc_Gubao:"古宝", Def_CalcAttrFunc_Shentong:"神通",
+ Def_CalcAttrFunc_HorseStar:"坐骑星级", Def_CalcAttrFunc_PetStar:"宠物星级", Def_CalcAttrFunc_TitleStar:"称号星级",
}
#-------------------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 04f4a00..11c4858 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -11954,6 +11954,58 @@
#------------------------------------------------------
+# A5 35 坐骑升星 #tagCMHorseStarUp
+
+class tagCMHorseStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("HorseID", c_int), #坐骑ID,对应坐骑表ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x35
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x35
+ self.HorseID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMHorseStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 35 坐骑升星 //tagCMHorseStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ HorseID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.HorseID
+ )
+ return DumpString
+
+
+m_NAtagCMHorseStarUp=tagCMHorseStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseStarUp.Cmd,m_NAtagCMHorseStarUp.SubCmd))] = m_NAtagCMHorseStarUp
+
+
+#------------------------------------------------------
# A5 31 坐骑培养 #tagCMHorseTrain
class tagCMHorseTrain(Structure):
@@ -13425,6 +13477,58 @@
#------------------------------------------------------
+# A5 36 称号升星 #tagCMTitleStarUp
+
+class tagCMTitleStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("TitleID", c_int), #称号ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA5
+ self.SubCmd = 0x36
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA5
+ self.SubCmd = 0x36
+ self.TitleID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMTitleStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 36 称号升星 //tagCMTitleStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ TitleID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.TitleID
+ )
+ return DumpString
+
+
+m_NAtagCMTitleStarUp=tagCMTitleStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTitleStarUp.Cmd,m_NAtagCMTitleStarUp.SubCmd))] = m_NAtagCMTitleStarUp
+
+
+#------------------------------------------------------
# A5 11 试用首充武器 #tagCMTryFirstGoldItem
class tagCMTryFirstGoldItem(Structure):
@@ -14366,6 +14470,58 @@
#------------------------------------------------------
+# A7 06 宠物升星 #tagCMPetStarUp
+
+class tagCMPetStarUp(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("PetItemIndex", c_ubyte), #宠物数据背包索引
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA7
+ self.SubCmd = 0x06
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xA7
+ self.SubCmd = 0x06
+ self.PetItemIndex = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMPetStarUp)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A7 06 宠物升星 //tagCMPetStarUp:
+ Cmd:%s,
+ SubCmd:%s,
+ PetItemIndex:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.PetItemIndex
+ )
+ return DumpString
+
+
+m_NAtagCMPetStarUp=tagCMPetStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetStarUp.Cmd,m_NAtagCMPetStarUp.SubCmd))] = m_NAtagCMPetStarUp
+
+
+#------------------------------------------------------
# A7 05 宠物培养 #tagCMPetTrain
class tagCMPetTrain(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 46c327c..0f37d31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -21821,6 +21821,114 @@
#------------------------------------------------------
+# A3 CD 坐骑星级信息 #tagMCHorseStarInfo
+
+class tagMCHorseStar(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("HorseID", c_int), # 坐骑表ID
+ ("Star", c_ubyte), # 星级
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.HorseID = 0
+ self.Star = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCHorseStar)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 CD 坐骑星级信息 //tagMCHorseStarInfo:
+ HorseID:%d,
+ Star:%d
+ '''\
+ %(
+ self.HorseID,
+ self.Star
+ )
+ return DumpString
+
+
+class tagMCHorseStarInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ HorseStarList = list() #(vector<tagMCHorseStar> HorseStarList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCD
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temHorseStarList = tagMCHorseStar()
+ _pos = temHorseStarList.ReadData(_lpData, _pos)
+ self.HorseStarList.append(temHorseStarList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCD
+ self.Count = 0
+ self.HorseStarList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.HorseStarList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.HorseStarList[i].GetLength(), self.HorseStarList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ HorseStarList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCHorseStarInfo=tagMCHorseStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseStarInfo.Head.Cmd,m_NAtagMCHorseStarInfo.Head.SubCmd))] = m_NAtagMCHorseStarInfo
+
+
+#------------------------------------------------------
# A3 38 投资理财信息 #tagMCInvestInfo
class tagMCInvestInfo(Structure):
@@ -24952,6 +25060,114 @@
#------------------------------------------------------
+# A3 CE 称号星级信息 #tagMCTitleStarInfo
+
+class tagMCTitleStar(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("TitleID", c_int), # 称号ID
+ ("Star", c_ubyte), # 星级
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.TitleID = 0
+ self.Star = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCTitleStar)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 CE 称号星级信息 //tagMCTitleStarInfo:
+ TitleID:%d,
+ Star:%d
+ '''\
+ %(
+ self.TitleID,
+ self.Star
+ )
+ return DumpString
+
+
+class tagMCTitleStarInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ TitleStarList = list() #(vector<tagMCTitleStar> TitleStarList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCE
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temTitleStarList = tagMCTitleStar()
+ _pos = temTitleStarList.ReadData(_lpData, _pos)
+ self.TitleStarList.append(temTitleStarList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA3
+ self.Head.SubCmd = 0xCE
+ self.Count = 0
+ self.TitleStarList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.TitleStarList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.TitleStarList[i].GetLength(), self.TitleStarList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ TitleStarList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCTitleStarInfo=tagMCTitleStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTitleStarInfo.Head.Cmd,m_NAtagMCTitleStarInfo.Head.SubCmd))] = m_NAtagMCTitleStarInfo
+
+
+#------------------------------------------------------
# A3 56 通天令信息 #tagMCTongTianLingInfo
class tagMCTongTianLingInfo(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
index c914e61..df771fc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
@@ -39,6 +39,7 @@
GameWorld.DebugAnswer(curPlayer, "全部幻化: Horse skin 1")
GameWorld.DebugAnswer(curPlayer, "重置幻化: Horse skin 0")
GameWorld.DebugAnswer(curPlayer, "设置幻化: Horse skin 幻化ID 状态")
+ GameWorld.DebugAnswer(curPlayer, "设置星级: Horse star 坐骑ID 星级")
return
if msgList[0] == "skin":
@@ -60,6 +61,29 @@
else:
return
+ elif msgList[0] == "star":
+ horseID = msgList[1] if len(msgList) > 1 else 0
+ horseStar = msgList[2] if len(msgList) > 2 else 0
+ if not horseID or not horseStar:
+ return
+ skinID = 0
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
+ skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
+ if horseID != skinPlusIpyData.GetHorseID():
+ continue
+ if PlayerHorse.CheckHorseSkinState(curPlayer, skinPlusIpyData):
+ skinID = skinPlusIpyData.GetID()
+ break
+ if not skinID:
+ GameWorld.DebugAnswer(curPlayer, "该坐骑不存在或未激活:horseID=%s" % horseID)
+ return
+ if not IpyGameDataPY.GetIpyGameData("HorseStarUp", horseID, horseStar):
+ GameWorld.DebugAnswer(curPlayer, "不存在该坐骑星级:horseID=%s,star=%s" % (horseID, horseStar))
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, horseStar)
+ GameWorld.DebugAnswer(curPlayer, "设置坐骑星级:horseID=%s,star=%s,skinID=%s" % (horseID, horseStar, skinID))
+
elif len(msgList) == 1:
if msgList[0] == 0:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserLV, 1)
@@ -75,6 +99,11 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
+ for index in range(ipyDataMgr.GetHorseCount()):
+ ipyData = ipyDataMgr.GetHorseByIndex(index)
+ horseID = ipyData.GetHorseID()
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, 0)
+
elif len(msgList) == 2:
lv, eatItemCount = msgList
if lv < 1:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 56c64be..9c78e57 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -41,6 +41,14 @@
("list", "Skills", 0),
),
+ "TitleStarUp":(
+ ("DWORD", "TitleID", 1),
+ ("BYTE", "TitleStar", 1),
+ ("list", "StarUpNeedItemList", 0),
+ ("list", "StarAttrType", 0),
+ ("list", "StarAttrValue", 0),
+ ),
+
"RolePoint":(
("BYTE", "AttrID", 1),
("dict", "AddAttrInfoPerPoint", 0),
@@ -290,6 +298,14 @@
("DWORD", "InitFightPower", 0),
),
+ "PetStarUp":(
+ ("DWORD", "PetNPCID", 1),
+ ("BYTE", "PetStar", 1),
+ ("list", "StarUpNeedItemList", 0),
+ ("list", "StarAttrType", 0),
+ ("list", "StarAttrValue", 0),
+ ),
+
"PetTrain":(
("BYTE", "TrainType", 1),
("BYTE", "TrainLV", 1),
@@ -371,6 +387,14 @@
("DWORD", "HorseID", 1),
("DWORD", "HorseSkinID", 0),
("BYTE", "Quality", 0),
+ ),
+
+ "HorseStarUp":(
+ ("DWORD", "HorseID", 1),
+ ("BYTE", "HorseStar", 1),
+ ("list", "StarUpNeedItemList", 0),
+ ("list", "StarAttrType", 0),
+ ("list", "StarAttrValue", 0),
),
"Gubao":(
@@ -2160,6 +2184,23 @@
def GetLightAttribute(self): return self.LightAttribute # 点亮属性值
def GetSkills(self): return self.Skills # 被动技能
+# 称号升星表
+class IPY_TitleStarUp():
+
+ def __init__(self):
+ self.TitleID = 0
+ self.TitleStar = 0
+ self.StarUpNeedItemList = []
+ self.StarAttrType = []
+ self.StarAttrValue = []
+ return
+
+ def GetTitleID(self): return self.TitleID # 称号NPCID
+ def GetTitleStar(self): return self.TitleStar # 称号星级
+ def GetStarUpNeedItemList(self): return self.StarUpNeedItemList # 升下一星所需道具 [[物品ID,个数], ...]
+ def GetStarAttrType(self): return self.StarAttrType # 累计总属性类型
+ def GetStarAttrValue(self): return self.StarAttrValue # 累计总属性值
+
# 灵根表
class IPY_RolePoint():
@@ -2683,6 +2724,23 @@
def GetSkillUnLockSys(self): return self.SkillUnLockSys # 灵兽技能解锁提示
def GetInitFightPower(self): return self.InitFightPower # 初始战力
+# 灵宠升星表
+class IPY_PetStarUp():
+
+ def __init__(self):
+ self.PetNPCID = 0
+ self.PetStar = 0
+ self.StarUpNeedItemList = []
+ self.StarAttrType = []
+ self.StarAttrValue = []
+ return
+
+ def GetPetNPCID(self): return self.PetNPCID # 灵兽NPCID
+ def GetPetStar(self): return self.PetStar # 灵兽星级
+ def GetStarUpNeedItemList(self): return self.StarUpNeedItemList # 升下一星所需道具 [[物品ID,个数], ...]
+ def GetStarAttrType(self): return self.StarAttrType # 累计总属性类型
+ def GetStarAttrValue(self): return self.StarAttrValue # 累计总属性值
+
# 灵宠培养表
class IPY_PetTrain():
@@ -2857,6 +2915,23 @@
def GetHorseID(self): return self.HorseID # 坐骑ID
def GetHorseSkinID(self): return self.HorseSkinID # 外观物品ID
def GetQuality(self): return self.Quality # 坐骑品质
+
+# 坐骑升星表
+class IPY_HorseStarUp():
+
+ def __init__(self):
+ self.HorseID = 0
+ self.HorseStar = 0
+ self.StarUpNeedItemList = []
+ self.StarAttrType = []
+ self.StarAttrValue = []
+ return
+
+ def GetHorseID(self): return self.HorseID # 坐骑ID
+ def GetHorseStar(self): return self.HorseStar # 坐骑星级
+ def GetStarUpNeedItemList(self): return self.StarUpNeedItemList # 升下一星所需道具 [[物品ID,个数], ...]
+ def GetStarAttrType(self): return self.StarAttrType # 累计总属性类型
+ def GetStarAttrValue(self): return self.StarAttrValue # 累计总属性值
# 古宝表
class IPY_Gubao():
@@ -6599,6 +6674,8 @@
self.ipyConfigEx = {}
self.ipyDienstgradCache = self.__LoadFileData("Dienstgrad", IPY_Dienstgrad)
self.ipyDienstgradLen = len(self.ipyDienstgradCache)
+ self.ipyTitleStarUpCache = self.__LoadFileData("TitleStarUp", IPY_TitleStarUp)
+ self.ipyTitleStarUpLen = len(self.ipyTitleStarUpCache)
self.ipyRolePointCache = self.__LoadFileData("RolePoint", IPY_RolePoint)
self.ipyRolePointLen = len(self.ipyRolePointCache)
self.ipyLingQiAttrCache = self.__LoadFileData("LingQiAttr", IPY_LingQiAttr)
@@ -6649,6 +6726,8 @@
self.ipyAttrFruitLen = len(self.ipyAttrFruitCache)
self.ipyPetInfoCache = self.__LoadFileData("PetInfo", IPY_PetInfo)
self.ipyPetInfoLen = len(self.ipyPetInfoCache)
+ self.ipyPetStarUpCache = self.__LoadFileData("PetStarUp", IPY_PetStarUp)
+ self.ipyPetStarUpLen = len(self.ipyPetStarUpCache)
self.ipyPetTrainCache = self.__LoadFileData("PetTrain", IPY_PetTrain)
self.ipyPetTrainLen = len(self.ipyPetTrainCache)
self.ipyEquipDecomposeCache = self.__LoadFileData("EquipDecompose", IPY_EquipDecompose)
@@ -6667,6 +6746,8 @@
self.ipyHorseSkinPlusLen = len(self.ipyHorseSkinPlusCache)
self.ipyHorseCache = self.__LoadFileData("Horse", IPY_Horse)
self.ipyHorseLen = len(self.ipyHorseCache)
+ self.ipyHorseStarUpCache = self.__LoadFileData("HorseStarUp", IPY_HorseStarUp)
+ self.ipyHorseStarUpLen = len(self.ipyHorseStarUpCache)
self.ipyGubaoCache = self.__LoadFileData("Gubao", IPY_Gubao)
self.ipyGubaoLen = len(self.ipyGubaoCache)
self.ipyGubaoStarCache = self.__LoadFileData("GubaoStar", IPY_GubaoStar)
@@ -7201,6 +7282,8 @@
def GetDienstgradCount(self): return self.ipyDienstgradLen
def GetDienstgradByIndex(self, index): return self.ipyDienstgradCache[index]
+ def GetTitleStarUpCount(self): return self.ipyTitleStarUpLen
+ def GetTitleStarUpByIndex(self, index): return self.ipyTitleStarUpCache[index]
def GetRolePointCount(self): return self.ipyRolePointLen
def GetRolePointByIndex(self, index): return self.ipyRolePointCache[index]
def GetLingQiAttrCount(self): return self.ipyLingQiAttrLen
@@ -7251,6 +7334,8 @@
def GetAttrFruitByIndex(self, index): return self.ipyAttrFruitCache[index]
def GetPetInfoCount(self): return self.ipyPetInfoLen
def GetPetInfoByIndex(self, index): return self.ipyPetInfoCache[index]
+ def GetPetStarUpCount(self): return self.ipyPetStarUpLen
+ def GetPetStarUpByIndex(self, index): return self.ipyPetStarUpCache[index]
def GetPetTrainCount(self): return self.ipyPetTrainLen
def GetPetTrainByIndex(self, index): return self.ipyPetTrainCache[index]
def GetEquipDecomposeCount(self): return self.ipyEquipDecomposeLen
@@ -7269,6 +7354,8 @@
def GetHorseSkinPlusByIndex(self, index): return self.ipyHorseSkinPlusCache[index]
def GetHorseCount(self): return self.ipyHorseLen
def GetHorseByIndex(self, index): return self.ipyHorseCache[index]
+ def GetHorseStarUpCount(self): return self.ipyHorseStarUpLen
+ def GetHorseStarUpByIndex(self, index): return self.ipyHorseStarUpCache[index]
def GetGubaoCount(self): return self.ipyGubaoLen
def GetGubaoByIndex(self, index): return self.ipyGubaoCache[index]
def GetGubaoStarCount(self): return self.ipyGubaoStarLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
index 8348670..7643d37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
@@ -28,6 +28,9 @@
import CrossPlayerData
import GameFuncComm
import ShareDefine
+import ChPyNetSendPack
+import NetPackCommon
+import ItemCommon
import time
#-------------------------------------------------------------
@@ -136,6 +139,10 @@
CrossPlayerData.OnDienstgradChange(curPlayer, dienstgradID, 1)
if dienstgradID == IpyGameDataPY.GetFuncCfg("TitleAddPoint"):
__DoTitleAddPoint(curPlayer)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % dienstgradID, 1)
+ SyncTitleStarInfo(curPlayer, dienstgradID)
+
#重新刷新角色属性
if isRefreshAttr:
CalcAllDienstgradAttr(curPlayer)
@@ -393,6 +400,8 @@
curDienstgradMgr = curPlayer.GetDienstgradManager()
curDienstgradMgr.Sync_AllDienstgrad()
curDienstgradMgr.Notify_PlayerChangeDienstgrad(curDienstgradMgr.GetCurGradID())
+ SyncTitleStarInfo(curPlayer)
+ return
#===============================================================================
# //B2 01 使用称号(有属性不显示场景中) #tagPyCMUseDienstgrad
@@ -447,6 +456,47 @@
FitOnDienstgrad(index, curGradID)
else:
TakeOffDienstgrad(index)
+
+#// A5 36 称号升星 #tagCMTitleStarUp
+#
+#struct tagCMTitleStarUp
+#{
+# tagHead Head;
+# DWORD TitleID; //称号ID
+#};
+def OnTitleStarUp(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ titleID = clientData.TitleID
+
+ curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID)
+ ipyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, curStar)
+ if not ipyData:
+ return
+ nextStar = curStar + 1
+ nextIpyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, nextStar)
+ needItemList = ipyData.GetStarUpNeedItemList()
+ if not needItemList or not nextIpyData:
+ GameWorld.DebugLog("称号已满星,无法升星. titleID=%s,curStar=%s" % (titleID, curStar), playerID)
+ return
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("称号升星所需物品不足! titleID=%s,curStar=%s,needItemList=%s,lackItemDict=%s"
+ % (titleID, curStar, needItemList, lackItemDict), playerID)
+ return
+
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "TitleStarUp")
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, nextStar)
+
+ GameWorld.DebugLog("称号升星. titleID=%s,curStar=%s,nextStar=%s" % (titleID, curStar, nextStar), playerID)
+
+ CalcAllDienstgradAttr(curPlayer)
+ playerControl = PlayerControl.PlayerControl(curPlayer)
+ playerControl.RefreshPlayerAttrState()
+
+ SyncTitleStarInfo(curPlayer, titleID)
+ return
#-------------------------------------------------------------
## 获取已激活称号列表
@@ -481,6 +531,8 @@
def CalcAllDienstgradAttr(curPlayer):
# 计算全部称号属性
allAttrList = [{} for i in range(4)]
+ allAttrListStar = [{} for _ in range(4)]
+
dienstgradManager = curPlayer.GetDienstgradManager()
gradCnt = dienstgradManager.GetCount()
for i in xrange(gradCnt):
@@ -497,8 +549,18 @@
for i, attrID in enumerate(attrTypeList):
PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
+ curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % curGradID)
+ starIpyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", curGradID, curStar)
+ if starIpyData:
+ starAttrType = starIpyData.GetStarAttrType()
+ starAttrValue = starIpyData.GetStarAttrValue()
+ for i, attrID in enumerate(starAttrType):
+ attrValue = starAttrValue[i]
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
+
# 保存计算值
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dienstgrad, allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_TitleStar, allAttrListStar)
return
## 称号每日更新处理
@@ -565,4 +627,38 @@
for dienstgradID in dienstgradIDList:
PlayerAddDienstgrad(curPlayer, dienstgradID)
#PlayerFitOnDienstgrad(curPlayer, dienstgradID)
- return
\ No newline at end of file
+ return
+
+def SyncTitleStarInfo(curPlayer, titleID=None):
+ if titleID > 0:
+ syncIDList = [titleID]
+ else:
+ syncIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetDienstgradCount()):
+ ipyData = ipyDataMgr.GetDienstgradByIndex(index)
+ syncIDList.append(ipyData.GetID())
+
+ if not syncIDList:
+ return
+
+ titleStarList = []
+ for titleID in syncIDList:
+ curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID)
+ if not curStar:
+ continue
+ starInfo = ChPyNetSendPack.tagMCTitleStar()
+ starInfo.Clear()
+ starInfo.TitleID = titleID
+ starInfo.Star = curStar
+ titleStarList.append(starInfo)
+
+ if not titleStarList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCTitleStarInfo()
+ clientPack.Clear()
+ clientPack.TitleStarList = titleStarList
+ clientPack.Count = len(clientPack.TitleStarList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index e9da8fd..660a45f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -220,6 +220,11 @@
GameWorld.Log("坐骑激活成功!activateID=%s,activateState=%s,updActivateState=%s,updSkinEndTime=%s"
% (activateID, activateState, updActivateState, updSkinEndTime), playerID)
+ horseStar = 1 # 初始星级
+ horseID = ipyData.GetHorseID()
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, horseStar)
+ SyncHorseStarInfo(curPlayer, horseID)
+
# 刷属性,更新排行榜
RefreshHorseAttr(curPlayer)
PlayerControl.WorldNotify(0, "GetMount", [curPlayer.GetName(), ipyData.GetHorseSkinPlusID()])
@@ -403,6 +408,7 @@
allAttrListHorseSoul = [{} for _ in range(4)]
allAttrListSkin = [{} for _ in range(4)]
allAttrListTrain = [{} for _ in range(4)]
+ allAttrListStar = [{} for _ in range(4)]
customAttrDictSkin = {}
@@ -481,6 +487,20 @@
for i, attrID in enumerate(attrTypeList):
attrValue = attrValueList[i]
qualityAttrDict[attrID] = qualityAttrDict.get(attrID, 0) + attrValue
+
+ #星级
+ horseStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserStar % horseID)
+ starIpyData = IpyGameDataPY.GetIpyGameData("HorseStarUp", horseID, horseStar)
+ if starIpyData:
+ starAttrType = starIpyData.GetStarAttrType()
+ starAttrValue = starIpyData.GetStarAttrValue()
+ for i, attrID in enumerate(starAttrType):
+ attrValue = starAttrValue[i]
+ if attrID == ShareDefine.Def_Effect_Speed:
+ horseSpeed += attrValue
+ continue
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
+
customAttrDictSkin["horseSkinQualityAttrInfo"] = horseSkinQualityAttrInfo
# 新培养属性
@@ -533,6 +553,7 @@
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin, customAttrDict=customAttrDictSkin)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseStar, allAttrListStar)
return
def GetHorseSkinActCount(curPlayer):
@@ -710,6 +731,44 @@
RefreshHorseAttr(curPlayer)
return
+#// A5 35 坐骑升星 #tagCMHorseStarUp
+#
+#struct tagCMHorseStarUp
+#{
+# tagHead Head;
+# DWORD HorseID; //坐骑ID,对应坐骑表ID
+#};
+def OnHorseStarUp(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ horseID = clientData.HorseID
+
+ horseStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserStar % horseID)
+ ipyData = IpyGameDataPY.GetIpyGameData("HorseStarUp", horseID, horseStar)
+ if not ipyData:
+ return
+ nextStar = horseStar + 1
+ nextIpyData = IpyGameDataPY.GetIpyGameData("HorseStarUp", horseID, nextStar)
+ needItemList = ipyData.GetStarUpNeedItemList()
+ if not needItemList or not nextIpyData:
+ GameWorld.DebugLog("坐骑已满星,无法升星. horseID=%s,curStar=%s" % (horseID, horseStar), playerID)
+ return
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("坐骑升星所需物品不足! horseID=%s,curStar=%s,needItemList=%s,lackItemDict=%s"
+ % (horseID, horseStar, needItemList, lackItemDict), playerID)
+ return
+
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "HorseStarUp")
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, nextStar)
+
+ GameWorld.DebugLog("坐骑升星. horseID=%s,curStar=%s,nextStar=%s" % (horseID, horseStar, nextStar), playerID)
+
+ RefreshHorseAttr(curPlayer)
+ SyncHorseStarInfo(curPlayer, horseID)
+ return
+
def GetHorseTrainTypes():
return len(IpyGameDataPY.GetFuncEvalCfg("HorseTrain", 1))
@@ -734,6 +793,7 @@
Sync_HorseClassData(curPlayer)
SyncHorsePetSkinData(curPlayer)
SyncHorseSkinTimeInfo(curPlayer)
+ SyncHorseStarInfo(curPlayer)
return
def Sync_HorseClassData(curPlayer):
@@ -967,3 +1027,36 @@
NetPackCommon.SendFakePack(curPlayer, packData)
return
+def SyncHorseStarInfo(curPlayer, horseID=None):
+ if horseID > 0:
+ syncIDList = [horseID]
+ else:
+ syncIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetHorseCount()):
+ ipyData = ipyDataMgr.GetHorseByIndex(index)
+ syncIDList.append(ipyData.GetHorseID())
+
+ if not syncIDList:
+ return
+
+ horseStarList = []
+ for horseID in syncIDList:
+ horseStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserStar % horseID)
+ if not horseStar:
+ continue
+ starInfo = ChPyNetSendPack.tagMCHorseStar()
+ starInfo.Clear()
+ starInfo.HorseID = horseID
+ starInfo.Star = horseStar
+ horseStarList.append(starInfo)
+
+ if not horseStarList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCHorseStarInfo()
+ clientPack.Clear()
+ clientPack.HorseStarList = horseStarList
+ clientPack.Count = len(clientPack.HorseStarList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
index bb6fab2..0e5c0d2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
@@ -121,6 +121,7 @@
initClass = petIpyData.GetInitRank() if classlv == -1 else classlv#初始阶级
newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, max(0, initClass - 1)) #代码里从0开始
newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_QualityLV, petIpyData.GetQuality()) # 宠物品质
+ newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_Star, 1) # 起始1星
petSkillList = petIpyData.GetSkillID()
@@ -873,6 +874,7 @@
skillAttrList = [{} for _ in range(4)]
allAttrListPetSkin = [{} for _ in range(4)]
allAttrListTrain = [{} for _ in range(4)]
+ allAttrListStar = [{} for _ in range(4)]
customAttrDictPet = {}
totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
@@ -972,7 +974,19 @@
if skinIpyData:
for attrID, attrValue in skinIpyData.GetAttrInfo().items():
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
+
+ #星级
+ curStar = petItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
+ starIpyData = IpyGameDataPY.GetIpyGameData("PetStarUp", petItemNPCID, curStar)
+ if starIpyData:
+ starAttrType = starIpyData.GetStarAttrType()
+ starAttrValue = starIpyData.GetStarAttrValue()
+ for i, attrID in enumerate(starAttrType):
+ attrValue = starAttrValue[i]
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
+
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetStar, allAttrListStar)
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, fpExTotal)
# GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
return
@@ -1104,6 +1118,45 @@
RefreshPetItemAddAttr(curPlayer, True)
return
+#// A7 06 宠物升星 #tagCMPetStarUp
+#
+#struct tagCMPetStarUp
+#{
+# tagHead Head;
+# BYTE PetItemIndex; //宠物数据背包索引
+#};
+def OnPetStarUp(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ PetItemIndex = clientData.PetItemIndex
+ petDataItem = GetPetDataItemByIndex(curPlayer, PetItemIndex)
+ if not petDataItem:
+ return
+ petNPCID = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
+ curStar = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
+ ipyData = IpyGameDataPY.GetIpyGameData("PetStarUp", petNPCID, curStar)
+ if not ipyData:
+ return
+ nextStar = curStar + 1
+ nextIpyData = IpyGameDataPY.GetIpyGameData("PetStarUp", petNPCID, nextStar)
+ needItemList = ipyData.GetStarUpNeedItemList()
+ if not needItemList or not nextIpyData:
+ GameWorld.DebugLog("灵宠已满星,无法升星. petNPCID=%s,curStar=%s" % (petNPCID, curStar), playerID)
+ return
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("灵宠升星所需物品不足! petNPCID=%s,curStar=%s,needItemList=%s,lackItemDict=%s"
+ % (petNPCID, curStar, needItemList, lackItemDict), playerID)
+ return
+
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "PetStarUp")
+ petDataItem.SetUserAttr(ShareDefine.Def_IudetPet_Star, nextStar)
+ GameWorld.DebugLog("灵宠升星. petNPCID=%s,curStar=%s,nextStar=%s" % (petNPCID, curStar, nextStar), playerID)
+
+ RefreshPetItemAddAttr(curPlayer, True)
+ return
+
def Sync_PetTrainData(curPlayer):
clientPack = ChPyNetSendPack.tagMCPetTrainInfo()
clientPack.TrainLVList = []
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 8977ad8..15c7437 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1582,6 +1582,7 @@
Def_IudetPet_State = 204 # 当前状态, 对应 Def_PetStateList
Def_IudetPet_QualityLV = 206 # 品质
Def_IudetPet_Exp = 208 # 经验
+Def_IudetPet_Star = 210 # 星级
Def_IudetPet_Skill = 201 # 技能列表
Def_IudetHorsePetSkinIndex = 210 # 骑宠觉醒外观索引
--
Gitblit v1.8.0