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