9762 【BT8】【后端】藏宝阁
# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
# ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
| | |
| | | DWORD SkinValidTime; //有效时长秒
|
| | | };
|
| | |
|
| | | //古宝表
|
| | |
|
| | | struct tagGubao
|
| | | {
|
| | | WORD _GubaoID; //古宝ID
|
| | | BYTE GubaoQuality; //古宝品质
|
| | | DWORD UnlockItemID; //解锁所需物品ID
|
| | | BYTE UnlockItemCnt; //解锁所需物品数量
|
| | | list GiveSkillIDInfo; //获得职业技能ID
|
| | | };
|
| | |
|
| | | //古宝升星表
|
| | |
|
| | | struct tagGubaoStar
|
| | | {
|
| | | WORD _GubaoID; //古宝ID
|
| | | BYTE _GubaoStar; //古宝星级
|
| | | list StarUPNeedItemInfo; //升星所需物品 [[物品ID,个数], ...]
|
| | | list StarAttrTypeList; //星级属性类型列表
|
| | | list StarAttrValueList; //星级属性值列表
|
| | | };
|
| | |
|
| | | //古宝品质升级表
|
| | |
|
| | | struct tagGubaoLV
|
| | | {
|
| | | BYTE _GubaoQuality; //古宝品质
|
| | | BYTE _GubaoLV; //古宝等级
|
| | | list LVUPNeedItemInfo; //升级所需物品 [[物品ID,个数], ...]
|
| | | list LVAttrTypeList; //等级属性类型列表
|
| | | list LVAttrValueList; //等级属性值列表
|
| | | };
|
| | |
|
| | | //玩家等级表
|
| | |
|
| | | struct tagPlayerLV
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C7 古宝信息 #tagMCGubaoInfo
|
| | |
|
| | | class tagMCGubao(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("GubaoID", c_ushort), |
| | | ("GubaoStar", c_ubyte), |
| | | ("GubaoLV", 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.GubaoID = 0
|
| | | self.GubaoStar = 0
|
| | | self.GubaoLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGubao)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo:
|
| | | GubaoID:%d,
|
| | | GubaoStar:%d,
|
| | | GubaoLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.GubaoID,
|
| | | self.GubaoStar,
|
| | | self.GubaoLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGubaoInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | GubaoInfoList = list() #(vector<tagMCGubao> GubaoInfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC7
|
| | | 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):
|
| | | temGubaoInfoList = tagMCGubao()
|
| | | _pos = temGubaoInfoList.ReadData(_lpData, _pos)
|
| | | self.GubaoInfoList.append(temGubaoInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC7
|
| | | self.Count = 0
|
| | | self.GubaoInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.GubaoInfoList[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.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | GubaoInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGubaoInfo=tagMCGubaoInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
|
| | |
|
| | | class tagMCHistoryReChargeAwardRecord(Structure):
|
| | |
| | | PacketSubCMD_7=0x18
|
| | | PacketCallFunc_7=OnLoveRingUp
|
| | |
|
| | | ;古宝
|
| | | [PlayerGubao]
|
| | | ScriptName = Player\PlayerGubao.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 3
|
| | |
|
| | | PacketCMD_1=0xB2
|
| | | PacketSubCMD_1=0x16
|
| | | PacketCallFunc_1=OnGubaoActivate
|
| | |
|
| | | PacketCMD_2=0xB2
|
| | | PacketSubCMD_2=0x17
|
| | | PacketCallFunc_2=OnGubaoStarUp
|
| | |
|
| | | PacketCMD_3=0xB2
|
| | | PacketSubCMD_3=0x18
|
| | | PacketCallFunc_3=OnGubaoLVUp
|
| | |
|
| | | ;缥缈仙域
|
| | | [PlayerFairyDomain]
|
| | | ScriptName = Player\PlayerFairyDomain.py
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C7 古宝信息 #tagMCGubaoInfo
|
| | |
|
| | | class tagMCGubao(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("GubaoID", c_ushort), |
| | | ("GubaoStar", c_ubyte), |
| | | ("GubaoLV", 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.GubaoID = 0
|
| | | self.GubaoStar = 0
|
| | | self.GubaoLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGubao)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo:
|
| | | GubaoID:%d,
|
| | | GubaoStar:%d,
|
| | | GubaoLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.GubaoID,
|
| | | self.GubaoStar,
|
| | | self.GubaoLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGubaoInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | GubaoInfoList = list() #(vector<tagMCGubao> GubaoInfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC7
|
| | | 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):
|
| | | temGubaoInfoList = tagMCGubao()
|
| | | _pos = temGubaoInfoList.ReadData(_lpData, _pos)
|
| | | self.GubaoInfoList.append(temGubaoInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC7
|
| | | self.Count = 0
|
| | | self.GubaoInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.GubaoInfoList[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.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | GubaoInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGubaoInfo=tagMCGubaoInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
|
| | |
|
| | | class tagMCHistoryReChargeAwardRecord(Structure):
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package GM.Commands.Gubao |
| | | # |
| | | # @todo:古宝 |
| | | # @author hxp |
| | | # @date 2023-01-5 |
| | | # @version 1.0 |
| | | # |
| | | # 详细描述: 古宝 |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2023-01-5 15:30""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import GameWorld |
| | | import IpyGameDataPY |
| | | import PlayerGubao |
| | | |
| | | #--------------------------------------------------------------------- |
| | | #逻辑实现 |
| | | |
| | | ## GM命令执行入口 |
| | | # @param curPlayer 当前玩家 |
| | | # @param msgList 参数列表 |
| | | # @return None |
| | | # @remarks 函数详细说明. |
| | | def OnExec(curPlayer, msgList): |
| | | |
| | | if not msgList: |
| | | GameWorld.DebugAnswer(curPlayer, "重置古宝: Gubao 0") |
| | | GameWorld.DebugAnswer(curPlayer, "设置古宝: Gubao 古宝ID 等级 星级") |
| | | return |
| | | |
| | | gubaoIDList = [] |
| | | |
| | | if len(msgList) == 1: |
| | | if msgList[0] == 0: |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in range(ipyDataMgr.GetGubaoCount()): |
| | | ipyData = ipyDataMgr.GetGubaoByIndex(index) |
| | | gubaoID = ipyData.GetGubaoID() |
| | | _, star = PlayerGubao.GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if not star: |
| | | continue |
| | | gubaoIDList.append(gubaoID) |
| | | PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, 0, 0) |
| | | GameWorld.DebugAnswer(curPlayer, "重置古宝OK") |
| | | |
| | | elif len(msgList) == 3: |
| | | gubaoID, lv, star = msgList |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID) |
| | | if not ipyData: |
| | | GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID) |
| | | return |
| | | starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) |
| | | if not starIpyData: |
| | | GameWorld.DebugAnswer(curPlayer, "不存在该古宝星级!gubaoID=%s,star=%s" % (gubaoID, star)) |
| | | return |
| | | quality = ipyData.GetGubaoQuality() |
| | | lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv) |
| | | if not lvIpyData: |
| | | GameWorld.DebugAnswer(curPlayer, "不存在该古宝品质等级!gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv)) |
| | | return |
| | | GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,等级(%s),星(%s)" % (gubaoID, lv, star)) |
| | | PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, lv, star) |
| | | gubaoIDList.append(gubaoID) |
| | | else: |
| | | return |
| | | |
| | | PlayerGubao.RefreshGubaoAttr(curPlayer) |
| | | PlayerGubao.Sync_GubaoInfo(curPlayer, gubaoIDList) |
| | | return |
| | | |
| | | |
| | |
| | | ("DWORD", "SkinValidTime", 0),
|
| | | ),
|
| | |
|
| | | "Gubao":(
|
| | | ("WORD", "GubaoID", 1),
|
| | | ("BYTE", "GubaoQuality", 0),
|
| | | ("DWORD", "UnlockItemID", 0),
|
| | | ("BYTE", "UnlockItemCnt", 0),
|
| | | ("list", "GiveSkillIDInfo", 0),
|
| | | ),
|
| | |
|
| | | "GubaoStar":(
|
| | | ("WORD", "GubaoID", 1),
|
| | | ("BYTE", "GubaoStar", 1),
|
| | | ("list", "StarUPNeedItemInfo", 0),
|
| | | ("list", "StarAttrTypeList", 0),
|
| | | ("list", "StarAttrValueList", 0),
|
| | | ),
|
| | |
|
| | | "GubaoLV":(
|
| | | ("BYTE", "GubaoQuality", 1),
|
| | | ("BYTE", "GubaoLV", 1),
|
| | | ("list", "LVUPNeedItemInfo", 0),
|
| | | ("list", "LVAttrTypeList", 0),
|
| | | ("list", "LVAttrValueList", 0),
|
| | | ),
|
| | |
|
| | | "PlayerLV":(
|
| | | ("WORD", "LV", 1),
|
| | | ("DWORD", "ExpPoint", 0),
|
| | |
| | | def GetInitFightPower(self): return self.InitFightPower # 皮肤额外战力
|
| | | def GetHorseID(self): return self.HorseID # 对应坐骑ID
|
| | | def GetSkinValidTime(self): return self.SkinValidTime # 有效时长秒 |
| | | |
| | | # 古宝表 |
| | | class IPY_Gubao(): |
| | | |
| | | def __init__(self): |
| | | self.GubaoID = 0
|
| | | self.GubaoQuality = 0
|
| | | self.UnlockItemID = 0
|
| | | self.UnlockItemCnt = 0
|
| | | self.GiveSkillIDInfo = [] |
| | | return |
| | | |
| | | def GetGubaoID(self): return self.GubaoID # 古宝ID
|
| | | def GetGubaoQuality(self): return self.GubaoQuality # 古宝品质
|
| | | def GetUnlockItemID(self): return self.UnlockItemID # 解锁所需物品ID
|
| | | def GetUnlockItemCnt(self): return self.UnlockItemCnt # 解锁所需物品数量
|
| | | def GetGiveSkillIDInfo(self): return self.GiveSkillIDInfo # 获得职业技能ID |
| | | |
| | | # 古宝升星表 |
| | | class IPY_GubaoStar(): |
| | | |
| | | def __init__(self): |
| | | self.GubaoID = 0
|
| | | self.GubaoStar = 0
|
| | | self.StarUPNeedItemInfo = []
|
| | | self.StarAttrTypeList = []
|
| | | self.StarAttrValueList = [] |
| | | return |
| | | |
| | | def GetGubaoID(self): return self.GubaoID # 古宝ID
|
| | | def GetGubaoStar(self): return self.GubaoStar # 古宝星级
|
| | | def GetStarUPNeedItemInfo(self): return self.StarUPNeedItemInfo # 升星所需物品 [[物品ID,个数], ...]
|
| | | def GetStarAttrTypeList(self): return self.StarAttrTypeList # 星级属性类型列表
|
| | | def GetStarAttrValueList(self): return self.StarAttrValueList # 星级属性值列表 |
| | | |
| | | # 古宝品质升级表 |
| | | class IPY_GubaoLV(): |
| | | |
| | | def __init__(self): |
| | | self.GubaoQuality = 0
|
| | | self.GubaoLV = 0
|
| | | self.LVUPNeedItemInfo = []
|
| | | self.LVAttrTypeList = []
|
| | | self.LVAttrValueList = [] |
| | | return |
| | | |
| | | def GetGubaoQuality(self): return self.GubaoQuality # 古宝品质
|
| | | def GetGubaoLV(self): return self.GubaoLV # 古宝等级
|
| | | def GetLVUPNeedItemInfo(self): return self.LVUPNeedItemInfo # 升级所需物品 [[物品ID,个数], ...]
|
| | | def GetLVAttrTypeList(self): return self.LVAttrTypeList # 等级属性类型列表
|
| | | def GetLVAttrValueList(self): return self.LVAttrValueList # 等级属性值列表 |
| | | |
| | | # 玩家等级表 |
| | | class IPY_PlayerLV(): |
| | |
| | | self.ipyHorseTrainLen = len(self.ipyHorseTrainCache)
|
| | | self.ipyHorseSkinPlusCache = self.__LoadFileData("HorseSkinPlus", IPY_HorseSkinPlus)
|
| | | self.ipyHorseSkinPlusLen = len(self.ipyHorseSkinPlusCache)
|
| | | self.ipyGubaoCache = self.__LoadFileData("Gubao", IPY_Gubao)
|
| | | self.ipyGubaoLen = len(self.ipyGubaoCache)
|
| | | self.ipyGubaoStarCache = self.__LoadFileData("GubaoStar", IPY_GubaoStar)
|
| | | self.ipyGubaoStarLen = len(self.ipyGubaoStarCache)
|
| | | self.ipyGubaoLVCache = self.__LoadFileData("GubaoLV", IPY_GubaoLV)
|
| | | self.ipyGubaoLVLen = len(self.ipyGubaoLVCache)
|
| | | self.ipyPlayerLVCache = self.__LoadFileData("PlayerLV", IPY_PlayerLV)
|
| | | self.ipyPlayerLVLen = len(self.ipyPlayerLVCache)
|
| | | self.ipySpecMapPlayerAttrFormatCache = self.__LoadFileData("SpecMapPlayerAttrFormat", IPY_SpecMapPlayerAttrFormat)
|
| | |
| | | def GetHorseTrainByIndex(self, index): return self.ipyHorseTrainCache[index]
|
| | | def GetHorseSkinPlusCount(self): return self.ipyHorseSkinPlusLen
|
| | | def GetHorseSkinPlusByIndex(self, index): return self.ipyHorseSkinPlusCache[index]
|
| | | def GetGubaoCount(self): return self.ipyGubaoLen
|
| | | def GetGubaoByIndex(self, index): return self.ipyGubaoCache[index]
|
| | | def GetGubaoStarCount(self): return self.ipyGubaoStarLen
|
| | | def GetGubaoStarByIndex(self, index): return self.ipyGubaoStarCache[index]
|
| | | def GetGubaoLVCount(self): return self.ipyGubaoLVLen
|
| | | def GetGubaoLVByIndex(self, index): return self.ipyGubaoLVCache[index]
|
| | | def GetPlayerLVCount(self): return self.ipyPlayerLVLen
|
| | | def GetPlayerLVByIndex(self, index): return self.ipyPlayerLVCache[index]
|
| | | def GetSpecMapPlayerAttrFormatCount(self): return self.ipySpecMapPlayerAttrFormatLen
|
| | |
| | | import PlayerFB
|
| | | import PlayerFaQi
|
| | | import SkillShell
|
| | | import PlayerGubao
|
| | | import PlayerLianTi
|
| | | import PlayerYinji
|
| | | import PlayerLove
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 1)
|
| | | GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
|
| | |
|
| | | PlayerGubao.OnPlayerLogin(curPlayer)
|
| | | # 上线查询一次充值订单
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package Player.PlayerGubao |
| | | # |
| | | # @todo:古宝系统 |
| | | # @author hxp |
| | | # @date 2023-01-05 |
| | | # @version 1.0 |
| | | # |
| | | # 详细描述: 古宝系统 |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2023-01-05 15:30""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import GameWorld |
| | | import ItemCommon |
| | | import SkillCommon |
| | | import PlayerControl |
| | | import IpyGameDataPY |
| | | import ChPyNetSendPack |
| | | import NetPackCommon |
| | | import IPY_GameWorld |
| | | import ChConfig |
| | | |
| | | def GetGubaoLVInfo(curPlayer, gubaoID): |
| | | lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID) |
| | | lv = lvInfo / 100 |
| | | star = lvInfo % 100 |
| | | return lv, star |
| | | def SetGubaoLVInfo(curPlayer, gubaoID, lv, star): |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoLVInfo % gubaoID, lv * 100 + star) |
| | | return |
| | | |
| | | def OnPlayerLogin(curPlayer): |
| | | Sync_GubaoInfo(curPlayer) |
| | | return |
| | | |
| | | #// B2 16 古宝激活 #tagCMGubaoActivate |
| | | # |
| | | #struct tagCMGubaoActivate |
| | | #{ |
| | | # tagHead Head; |
| | | # WORD GubaoID; |
| | | #}; |
| | | def OnGubaoActivate(index, curPackData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) |
| | | playerID = curPlayer.GetPlayerID() |
| | | gubaoID = curPackData.GubaoID |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID) |
| | | if not ipyData: |
| | | return |
| | | needItemID = ipyData.GetUnlockItemID() |
| | | needItemCnt = ipyData.GetUnlockItemCnt() |
| | | if not needItemID or not needItemCnt: |
| | | return |
| | | |
| | | lv, star = GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if lv or star: |
| | | GameWorld.DebugLog("古宝已经激活过! gubaoID=%s" % gubaoID, playerID) |
| | | return |
| | | |
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) |
| | | hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt) |
| | | if not hasEnough: |
| | | GameWorld.DebugLog("激活古宝道具不足! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID) |
| | | return |
| | | ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao") |
| | | |
| | | lv, star = 1, 1 |
| | | SetGubaoLVInfo(curPlayer, gubaoID, lv, star) |
| | | GameWorld.Log("古宝激活成功! gubaoID=%s" % gubaoID, playerID) |
| | | giveSkillIDInfo = ipyData.GetGiveSkillIDInfo() |
| | | if giveSkillIDInfo: |
| | | SkillCommon.GivePlayerSkillByJobSkill(curPlayer, giveSkillIDInfo) |
| | | |
| | | RefreshGubaoAttr(curPlayer) |
| | | Sync_GubaoInfo(curPlayer, [gubaoID]) |
| | | return |
| | | |
| | | #// B2 17 古宝升星 #tagCMGubaoStarUp |
| | | # |
| | | #struct tagCMGubaoStarUp |
| | | #{ |
| | | # tagHead Head; |
| | | # WORD GubaoID; |
| | | #}; |
| | | def OnGubaoStarUp(index, curPackData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) |
| | | playerID = curPlayer.GetPlayerID() |
| | | gubaoID = curPackData.GubaoID |
| | | |
| | | lv, star = GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if not star: |
| | | GameWorld.DebugLog("古宝未激活,无法升星! gubaoID=%s" % gubaoID, playerID) |
| | | return |
| | | |
| | | if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoStar", gubaoID, star + 1): |
| | | GameWorld.DebugLog("古宝已满星! gubaoID=%s,star=%s" % (gubaoID, star), playerID) |
| | | return |
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) |
| | | if not ipyData: |
| | | return |
| | | needItemList = ipyData.GetStarUPNeedItemInfo() |
| | | if not needItemList: |
| | | return |
| | | |
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) |
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) |
| | | if lackItemDict: |
| | | GameWorld.DebugLog("古宝升星所需物品不足! star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID) |
| | | return |
| | | #扣消耗 |
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao") |
| | | |
| | | updStar = star + 1 |
| | | SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar) |
| | | GameWorld.Log("古宝升星: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID) |
| | | RefreshGubaoAttr(curPlayer) |
| | | Sync_GubaoInfo(curPlayer, [gubaoID]) |
| | | return |
| | | |
| | | #// B2 18 古宝升级 #tagCMGubaoLVUp |
| | | # |
| | | #struct tagCMGubaoLVUp |
| | | #{ |
| | | # tagHead Head; |
| | | # WORD GubaoID; |
| | | #}; |
| | | def OnGubaoLVUp(index, curPackData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) |
| | | playerID = curPlayer.GetPlayerID() |
| | | gubaoID = curPackData.GubaoID |
| | | |
| | | lv, star = GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if not star: |
| | | GameWorld.DebugLog("古宝未激活,无法升级! gubaoID=%s" % gubaoID, playerID) |
| | | return |
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID) |
| | | if not ipyData: |
| | | return |
| | | quality = ipyData.GetGubaoQuality() |
| | | |
| | | if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoLV", quality, lv + 1): |
| | | GameWorld.DebugLog("古宝已满级! gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv), playerID) |
| | | return |
| | | |
| | | lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv) |
| | | if not lvIpyData: |
| | | return |
| | | needItemList = lvIpyData.GetLVUPNeedItemInfo() |
| | | if not needItemList: |
| | | return |
| | | |
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) |
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) |
| | | if lackItemDict: |
| | | GameWorld.DebugLog("古宝升级所需物品不足! quality=%s,lv=%s,needItemList=%s,lackItemDict=%s" |
| | | % (quality, lv, needItemList, lackItemDict), playerID) |
| | | return |
| | | #扣消耗 |
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao") |
| | | |
| | | updLV = lv + 1 |
| | | SetGubaoLVInfo(curPlayer, gubaoID, updLV, star) |
| | | GameWorld.Log("古宝升级: gubaoID=%s,quality=%s,updLV=%s" % (gubaoID, quality, updLV), playerID) |
| | | RefreshGubaoAttr(curPlayer) |
| | | Sync_GubaoInfo(curPlayer, [gubaoID]) |
| | | return |
| | | |
| | | def RefreshGubaoAttr(curPlayer): |
| | | CalcGubaoAttr(curPlayer) |
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | return |
| | | |
| | | def CalcGubaoAttr(curPlayer): |
| | | |
| | | allAttrList = [{} for _ in range(4)] |
| | | |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in xrange(ipyDataMgr.GetGubaoCount()): |
| | | ipyData = ipyDataMgr.GetGubaoByIndex(index) |
| | | gubaoID = ipyData.GetGubaoID() |
| | | lv, star = GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if not star: |
| | | continue |
| | | |
| | | quality = ipyData.GetGubaoQuality() |
| | | lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv) |
| | | if lvIpyData: |
| | | lvAttrTypeList = lvIpyData.GetLVAttrTypeList() |
| | | lvAttrValueList = lvIpyData.GetLVAttrValueList() |
| | | for i, attrID in enumerate(lvAttrTypeList): |
| | | attrValue = lvAttrValueList[i] |
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) |
| | | |
| | | starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) |
| | | if starIpyData: |
| | | starAttrTypeList = starIpyData.GetStarAttrTypeList() |
| | | starAttrValueList = starIpyData.GetStarAttrValueList() |
| | | for i, attrID in enumerate(starAttrTypeList): |
| | | attrValue = starAttrValueList[i] |
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) |
| | | |
| | | # 保存计算值 |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList) |
| | | return |
| | | |
| | | def Sync_GubaoInfo(curPlayer, gubaoIDList=None): |
| | | if gubaoIDList == None: |
| | | syncIDList = [] |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in range(ipyDataMgr.GetGubaoCount()): |
| | | ipyData = ipyDataMgr.GetGubaoByIndex(index) |
| | | syncIDList.append(ipyData.GetGubaoID()) |
| | | else: |
| | | syncIDList = gubaoIDList |
| | | |
| | | gubaoInfoList = [] |
| | | for gubaoID in syncIDList: |
| | | lv, star = GetGubaoLVInfo(curPlayer, gubaoID) |
| | | if not lv and not star and gubaoIDList == None: |
| | | # 没有指定时只同步激活的 |
| | | continue |
| | | gubao = ChPyNetSendPack.tagMCGubao() |
| | | gubao.GubaoID = gubaoID |
| | | gubao.GubaoLV = lv |
| | | gubao.GubaoStar = star |
| | | gubaoInfoList.append(gubao) |
| | | |
| | | if not gubaoInfoList: |
| | | return |
| | | |
| | | clientPack = ChPyNetSendPack.tagMCGubaoInfo() |
| | | clientPack.GubaoInfoList = gubaoInfoList |
| | | clientPack.Count = len(clientPack.GubaoInfoList) |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack) |
| | | return |