| | |
| | | DWORD _ID; //ID
|
| | | BYTE TreasureType; //法宝类型
|
| | | DWORD PreTreasure; //前置法宝
|
| | | list SuccID; //成就ID
|
| | | list Potentials; //技能潜力升级
|
| | | list SkillPower; //技能解锁战力
|
| | | DWORD FBMapID; //副本ID
|
| | | DWORD FBLineID; //副本线路ID
|
| | | DWORD NeedLV; //需要等级
|
| | | dict NeedItem; //需要消耗物品
|
| | | };
|
| | |
|
| | |
| | | DWORD NeedExp; //需要经验
|
| | | dict AddAttr; //属性
|
| | | list UnLockSkill; //解锁的技能
|
| | | DWORD ActiveMWID; //激活法宝ID
|
| | | list ItemAward; //物品奖励[itemID,cnt,isbind]
|
| | | DWORD ActiveSoulID; //激活魂ID
|
| | | DWORD PowerEx; //额外固定战力
|
| | | };
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 16 法宝状态记录 #tagCMMagicWeaponState
|
| | |
|
| | | class tagCMMagicWeaponState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MWID", c_int), #法宝ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x16
|
| | | 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 = 0x16
|
| | | self.MWID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMagicWeaponState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MWID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MWID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMagicWeaponState=tagCMMagicWeaponState()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 15 提升法宝等级 #tagCMMagicWeaponUp
|
| | |
|
| | | class tagCMMagicWeaponUp(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 12 通知玩家法宝信息 #tagMCMagicWeaponData
|
| | |
|
| | | class tagMCMagicWeaponData(Structure):
|
| | | Head = tagHead()
|
| | | Num = 0 #(BYTE Num)//个数
|
| | | MagicWeaponID = list() #(vector<DWORD> MagicWeaponID)// 已激活的法宝ID列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Num):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.MagicWeaponID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | self.Num = 0
|
| | | self.MagicWeaponID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Num
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Num)
|
| | | for i in range(self.Num):
|
| | | data = CommFunc.WriteDWORD(data, self.MagicWeaponID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Num:%d,
|
| | | MagicWeaponID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Num,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCMagicWeaponData=tagMCMagicWeaponData()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponData.Head.Cmd,m_NAtagMCMagicWeaponData.Head.SubCmd))] = m_NAtagMCMagicWeaponData
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
|
| | |
|
| | | class tagMCMagicWeaponInfo(Structure):
|
| | |
| | | ("MWID", c_int),
|
| | | ("LV", c_ubyte),
|
| | | ("Exp", c_int),
|
| | | ("State", c_ubyte), #是否点击法宝认主
|
| | | ("FBPassLV", c_ubyte), #副本关卡
|
| | | ("IsWear", c_ubyte), #是否佩戴(仅适用王者法宝)
|
| | | ]
|
| | |
| | | self.MWID = 0
|
| | | self.LV = 0
|
| | | self.Exp = 0
|
| | | self.State = 0
|
| | | self.FBPassLV = 0
|
| | | self.IsWear = 0
|
| | | return
|
| | |
| | | MWID:%d,
|
| | | LV:%d,
|
| | | Exp:%d,
|
| | | State:%d,
|
| | | FBPassLV:%d,
|
| | | IsWear:%d
|
| | | '''\
|
| | |
| | | self.MWID,
|
| | | self.LV,
|
| | | self.Exp,
|
| | | self.State,
|
| | | self.FBPassLV,
|
| | | self.IsWear
|
| | | )
|
| | |
| | | Writer = xdh
|
| | | Releaser = xdh
|
| | | RegType = 0
|
| | | RegisterPackCount = 4
|
| | | RegisterPackCount = 3
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0x1D
|
| | |
| | | PacketSubCMD_3=0x15
|
| | | PacketCallFunc_3=OnMagicWeaponUp
|
| | |
|
| | | PacketCMD_4=0xA5
|
| | | PacketSubCMD_4=0x16
|
| | | PacketCallFunc_4=SaveMagicWeaponState
|
| | |
|
| | | ;副本
|
| | | [FBCommon]
|
| | |
| | | Def_PDict_RealmExpBeginTime = "RealmExpBeginTime" #境界修为池经验开始计时时间
|
| | |
|
| | | #法宝
|
| | | Def_PDict_MagicWeaponExp = "MagicWeaponExp_%s" #法宝经验 参数法宝ID
|
| | | Def_PDict_MagicWeaponIsActive = "MagicWeaponIsActive_%s" #法宝激活状态 参数法宝ID
|
| | | Def_PDict_MagicWeaponIsClick = "MagicWeaponIsClick_%s" #法宝点击状态 参数法宝ID
|
| | | Def_PDict_MagicWeaponIsWear = "MagicWeaponIsWear_%s" #法宝佩戴状态 参数法宝ID
|
| | | Def_PDict_XBXZAwardRecord = "XBXZAwardRecord_%s" #仙宝寻主领奖记录 参数ID
|
| | | Def_PDict_MagicWeaponLV = "MagicWeaponLV_%s" #法宝等级 参数法宝ID
|
| | | Def_PDict_MagicWeaponUpExp = "MagicWeaponUpExp_%s" #法宝升级经验 参数法宝ID
|
| | | Def_PDict_MWFBPassLevel = "MWFBPassLevel_%s" #法宝副本通关关卡 参数(法宝ID)
|
| | |
|
| | | #炼丹炉
|
| | | Def_PDict_AlchemyLV = "AlchemyLV" #炼丹等级
|
| | | Def_PDict_AlchemyExp = "AlchemyExp" #炼丹经验
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 16 法宝状态记录 #tagCMMagicWeaponState
|
| | |
|
| | | class tagCMMagicWeaponState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MWID", c_int), #法宝ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x16
|
| | | 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 = 0x16
|
| | | self.MWID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMagicWeaponState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MWID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MWID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMagicWeaponState=tagCMMagicWeaponState()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 15 提升法宝等级 #tagCMMagicWeaponUp
|
| | |
|
| | | class tagCMMagicWeaponUp(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 12 通知玩家法宝信息 #tagMCMagicWeaponData
|
| | |
|
| | | class tagMCMagicWeaponData(Structure):
|
| | | Head = tagHead()
|
| | | Num = 0 #(BYTE Num)//个数
|
| | | MagicWeaponID = list() #(vector<DWORD> MagicWeaponID)// 已激活的法宝ID列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Num):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.MagicWeaponID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x12
|
| | | self.Num = 0
|
| | | self.MagicWeaponID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Num
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Num)
|
| | | for i in range(self.Num):
|
| | | data = CommFunc.WriteDWORD(data, self.MagicWeaponID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Num:%d,
|
| | | MagicWeaponID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Num,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCMagicWeaponData=tagMCMagicWeaponData()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponData.Head.Cmd,m_NAtagMCMagicWeaponData.Head.SubCmd))] = m_NAtagMCMagicWeaponData
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
|
| | |
|
| | | class tagMCMagicWeaponInfo(Structure):
|
| | |
| | | ("MWID", c_int),
|
| | | ("LV", c_ubyte),
|
| | | ("Exp", c_int),
|
| | | ("State", c_ubyte), #是否点击法宝认主
|
| | | ("FBPassLV", c_ubyte), #副本关卡
|
| | | ("IsWear", c_ubyte), #是否佩戴(仅适用王者法宝)
|
| | | ]
|
| | |
| | | self.MWID = 0
|
| | | self.LV = 0
|
| | | self.Exp = 0
|
| | | self.State = 0
|
| | | self.FBPassLV = 0
|
| | | self.IsWear = 0
|
| | | return
|
| | |
| | | MWID:%d,
|
| | | LV:%d,
|
| | | Exp:%d,
|
| | | State:%d,
|
| | | FBPassLV:%d,
|
| | | IsWear:%d
|
| | | '''\
|
| | |
| | | self.MWID,
|
| | | self.LV,
|
| | | self.Exp,
|
| | | self.State,
|
| | | self.FBPassLV,
|
| | | self.IsWear
|
| | | )
|
| | |
| | | RunQuestEvent(curPlayer, "on_activatepet", petID, Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_OnActiveMagicWeapon(curPlayer, mwID):
|
| | | # 激活法宝
|
| | | RunQuestEvent(curPlayer, "on_activemagicweapon", mwID, Def_RunQuestType_Normal)
|
| | | RunQuestEvent(curPlayer, "on_activemagicweaponex", mwID, Def_RunQuestType_RunAll)
|
| | | RunQuestEvent(curPlayer, "on_activemagicweaponex", 0, Def_RunQuestType_RunAll)
|
| | | return
|
| | |
|
| | | def EventRespons_MagicWeaponLV(curPlayer, mwID, lv):
|
| | | # 法宝解锁进度
|
| | | RunQuestEvent(curPlayer, "magicweaponlv", '%s_%s'%(mwID, lv), Def_RunQuestType_RunAll)
|
| | |
| | | def DoType_Active_Magicweapon(curPlayer, curMission, curActionNode):
|
| | | mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
|
| | | PlayerMagicWeapon.DoActiveMW(curPlayer, mwID)
|
| | | PlayerMagicWeapon.NotifyMagicWeapon(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | | ## 人物隐身 <Visible id="0隐身1现身"/>
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, paramList):
|
| | | if len(paramList) == 0:
|
| | | GameWorld.DebugAnswer(curPlayer, "SetFabao 法宝ID 星数(选填) 经验(选填)")
|
| | | GameWorld.DebugAnswer(curPlayer, "SetFabao 法宝ID 等级(选填) 经验(选填)")
|
| | | GameWorld.DebugAnswer(curPlayer, "法宝ID: 0-重置所有, 1-激活所有")
|
| | | return
|
| | | mwID = paramList[0]
|
| | | mwLV = paramList[1] if len(paramList) > 1 else 0
|
| | | mwLV = paramList[1] if len(paramList) > 1 else 1
|
| | | exp = paramList[2] if len(paramList) > 2 else 0
|
| | |
|
| | | if mwID == 0:
|
| | | playerSkillManager = curPlayer.GetSkillManager()
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureByIndex(i)
|
| | | mwID = ipyData.GetID()
|
| | | PlayerMagicWeapon.SetMagicWeaponActiveState(curPlayer, mwID, False)
|
| | | PlayerMagicWeapon.SetMagicWeaponClickState(curPlayer, mwID, False)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponExp % mwID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % mwID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponUpExp % mwID, 0)
|
| | | # skillIDList = ipyData.GetUnLockSkill()
|
| | | # for skillID in skillIDList:
|
| | | # playerSkillManager.DeleteSkillBySkillTypeID(skillID)
|
| | | skillIDList = ipyData.GetPotentials()
|
| | | for skillID in skillIDList:
|
| | | playerSkillManager.DeleteSkillBySkillTypeID(skillID)
|
| | | PlayerMagicWeapon.NotifyMagicWeapon(curPlayer, True)
|
| | |
|
| | | PlayerMagicWeapon.Sycn_MagicWeaponLV(curPlayer)
|
| | | PlayerMagicWeapon.CalcMagicWeaponAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | |
| | | for i in xrange(ipyDataMgr.GetTreasureCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureByIndex(i)
|
| | | mwID = ipyData.GetID()
|
| | | if PlayerMagicWeapon.GetIsActiveMagicWeapon(curPlayer, mwID):
|
| | | continue
|
| | | PlayerMagicWeapon.DoActiveMW(curPlayer, mwID)
|
| | | PlayerMagicWeapon.Sycn_MagicWeaponLV(curPlayer)
|
| | |
|
| | | else:
|
| | | ipyData = PlayerMagicWeapon.GetWMIpyData(mwID)
|
| | | if not ipyData:
|
| | |
| | | if not nextIpyData:
|
| | | GameWorld.DebugAnswer(curPlayer, "法宝等级不存在!")
|
| | | return
|
| | | for lv in xrange(mwLV+1):
|
| | | for lv in xrange(1, mwLV+1):
|
| | | PlayerMagicWeapon.DoActiveMW(curPlayer, mwID, lv)
|
| | | PlayerMagicWeapon.Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | |
| | | PlayerMagicWeapon.NotifyMagicWeapon(curPlayer)
|
| | |
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | |
| | | fbMissionID = gameFB.GetGameFBDictByKey(FBPlayerDict_MissionID)
|
| | | if fbMissionID:
|
| | | EventShell.EventRespons_FBEvent(curPlayer, "cleardevil_pass_%s" % fbMissionID)
|
| | | # 成就
|
| | | #触发激活法宝
|
| | | level = gameFB.GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassWagicWeapon, 1, [lineID + 1, level])
|
| | | # 更新关卡
|
| | | if level:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':level})
|
| | | if ipyData:
|
| | | mwID = ipyData.GetMWID()
|
| | | PlayerMagicWeapon.UptateMWFBPasslv(curPlayer, mwID, level)
|
| | | PlayerMagicWeapon.ActiveMagicWeaponByFB(curPlayer, ChConfig.Def_FBMapID_MagicWeapon, lineID, level)
|
| | | # # 成就
|
| | | # level = gameFB.GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | # PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassWagicWeapon, 1, [lineID + 1, level])
|
| | | # # 更新关卡
|
| | | # if level:
|
| | | # ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':level})
|
| | | # if ipyData:
|
| | | # mwID = ipyData.GetMWID()
|
| | | # PlayerMagicWeapon.UptateMWFBPasslv(curPlayer, mwID, level)
|
| | |
|
| | |
|
| | | DoFBHelp(curPlayer, tick)
|
| | |
| | | ("DWORD", "ID", 1),
|
| | | ("BYTE", "TreasureType", 0),
|
| | | ("DWORD", "PreTreasure", 0),
|
| | | ("list", "SuccID", 0),
|
| | | ("list", "Potentials", 0),
|
| | | ("list", "SkillPower", 0),
|
| | | ("DWORD", "FBMapID", 0),
|
| | | ("DWORD", "FBLineID", 0),
|
| | | ("DWORD", "NeedLV", 0),
|
| | | ("dict", "NeedItem", 0),
|
| | | ),
|
| | |
|
| | |
| | | ("DWORD", "NeedExp", 0),
|
| | | ("dict", "AddAttr", 0),
|
| | | ("list", "UnLockSkill", 0),
|
| | | ("DWORD", "ActiveMWID", 0),
|
| | | ("list", "ItemAward", 0),
|
| | | ("DWORD", "ActiveSoulID", 0),
|
| | | ("DWORD", "PowerEx", 0),
|
| | | ),
|
| | |
|
| | |
| | | self.ID = 0
|
| | | self.TreasureType = 0
|
| | | self.PreTreasure = 0
|
| | | self.SuccID = []
|
| | | self.Potentials = []
|
| | | self.SkillPower = []
|
| | | self.FBMapID = 0
|
| | | self.FBLineID = 0
|
| | | self.NeedLV = 0
|
| | | self.NeedItem = {} |
| | | return |
| | | |
| | | def GetID(self): return self.ID # ID
|
| | | def GetTreasureType(self): return self.TreasureType # 法宝类型
|
| | | def GetPreTreasure(self): return self.PreTreasure # 前置法宝
|
| | | def GetSuccID(self): return self.SuccID # 成就ID
|
| | | def GetPotentials(self): return self.Potentials # 技能潜力升级
|
| | | def GetSkillPower(self): return self.SkillPower # 技能解锁战力
|
| | | def GetFBMapID(self): return self.FBMapID # 副本ID
|
| | | def GetFBLineID(self): return self.FBLineID # 副本线路ID
|
| | | def GetNeedLV(self): return self.NeedLV # 需要等级
|
| | | def GetNeedItem(self): return self.NeedItem # 需要消耗物品 |
| | | |
| | | # 法宝升级表 |
| | |
| | | self.NeedExp = 0
|
| | | self.AddAttr = {}
|
| | | self.UnLockSkill = []
|
| | | self.ActiveMWID = 0
|
| | | self.ItemAward = []
|
| | | self.ActiveSoulID = 0
|
| | | self.PowerEx = 0 |
| | | return |
| | | |
| | |
| | | def GetNeedExp(self): return self.NeedExp # 需要经验
|
| | | def GetAddAttr(self): return self.AddAttr # 属性
|
| | | def GetUnLockSkill(self): return self.UnLockSkill # 解锁的技能
|
| | | def GetActiveMWID(self): return self.ActiveMWID # 激活法宝ID
|
| | | def GetItemAward(self): return self.ItemAward # 物品奖励[itemID,cnt,isbind]
|
| | | def GetActiveSoulID(self): return self.ActiveSoulID # 激活魂ID
|
| | | def GetPowerEx(self): return self.PowerEx # 额外固定战力 |
| | | |
| | | # 连续签到奖励表 |
| | |
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import Operate_EquipStone
|
| | | import PlayerMagicWeapon
|
| | | import IpyGameDataPY
|
| | | import DataRecordPack
|
| | | import EventShell
|
| | |
| | | itemID = tagItem.GetItemTypeID()
|
| | | #激活成就的道具
|
| | | if tagItem.GetType() == ChConfig.Def_ItemType_SuccessItem:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetSpecialItem, 1, [tagItem.GetEffectByIndex(0).GetEffectValue(0)])
|
| | | PlayerMagicWeapon.DoActiveMW(curPlayer, tagItem.GetEffectByIndex(0).GetEffectValue(0))
|
| | | tagItem.Clear()
|
| | | return True
|
| | | if itemID in ChConfig.Def_TransformItemIDList:
|
| | | # 直接转化为对应货币的物品仅在放入背包时直接转化,否则还是以真实物品的形式存在,但堆叠上限需要做特殊处理
|
| | |
| | | # @date 2017-05-18
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 法宝系统
|
| | | # 详细描述: 法宝系统 目前激活方式:1.任务接口激活 2.通关副本 3.获得某物品 4.仙宝寻主
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2017-05-18 12:00"""
|
| | |
| | |
|
| | | import random
|
| | |
|
| | | g_succInfoDict = {}
|
| | | g_potentialsSkillDict = {}
|
| | |
|
| | |
|
| | | ##登录处理
|
| | | # @param curPlayer 玩家
|
| | | # @return None
|
| | | def PlayerMagicWeaponLogin(curPlayer):
|
| | | NotifyMagicWeapon(curPlayer, True)
|
| | | SyncXBXZAwardRecord(curPlayer)
|
| | | Sycn_MagicWeaponLV(curPlayer)
|
| | | return
|
| | |
| | | # mwID = ipyData.GetID()
|
| | | # GameWorld.DebugLog("法宝功能开启 激活第一个法宝 mwID=%s"%mwID)
|
| | | # DoActiveMW(curPlayer, mwID)
|
| | | # NotifyMagicWeapon(curPlayer)
|
| | |
|
| | | return True
|
| | |
|
| | |
|
| | | def GetIsActiveMagicWeapon(curPlayer, mwID, lv=0):
|
| | | #获取法宝是否激活
|
| | | #通过玩家字典值可直接判断是否已经激活,这里可不验证法宝ID是否存在,即使传入不存在的也是返回未激活
|
| | | #if not GetWMIpyData(mwID):
|
| | | # return False
|
| | | if lv:
|
| | | curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID)
|
| | | return curMWLV >= lv
|
| | | return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsActive, mwID, True)
|
| | | def GetIsActiveMagicWeapon(curPlayer, mwID, lv=1):
|
| | | #获取法宝是否达到X级
|
| | | curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID)
|
| | | return curMWLV >= lv
|
| | |
|
| | |
|
| | | def SetMagicWeaponActiveState(curPlayer, mwID, isActive=True):
|
| | | #设置法宝激活状态
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsActive, mwID, isActive, True)
|
| | | return
|
| | |
|
| | |
|
| | | def ActiveMagicWeapon(curPlayer, succID):
|
| | | ##激活法宝
|
| | | mwID = GetMWIDBySuccID(succID)
|
| | | if mwID == None:
|
| | | return
|
| | | |
| | | isActive = GetIsActiveMagicWeapon(curPlayer, mwID)
|
| | | if isActive:
|
| | | return
|
| | | succIDList = GetNeedSuccIDByMWID(mwID)
|
| | | needExp = len(succIDList)
|
| | | curExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponExp % mwID)
|
| | | |
| | | if curExp >= needExp:
|
| | | return
|
| | | |
| | | newExp = min(needExp, curExp + 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponExp % mwID, newExp)
|
| | | DataRecordPack.DR_MagicWeaponExp(curPlayer, mwID, succID, newExp, needExp)
|
| | | ipyData = GetWMIpyData(mwID)
|
| | | needItemDict = ipyData.GetNeedItem()
|
| | | #GameWorld.DebugLog(' 激活法宝 mwID=%s,curExp=%s,succIDList=%s' % (mwID, newExp,succIDList))
|
| | | if newExp >= needExp and not needItemDict:
|
| | | #成就条件达成 激活法宝
|
| | | def ActiveMagicWeaponByFB(curPlayer, mapID, lineID, passLV=0):
|
| | | ##通关副本激活法宝(人族、魔族法宝)
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':passLV})
|
| | | if ipyData:
|
| | | mwID = ipyData.GetMWID()
|
| | | GameWorld.Log('更新魔族副本关卡 mwID=%s,level=%s' % (mwID, passLV), curPlayer.GetID())
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWFBPassLevel % mwID, passLV)
|
| | | Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | EventShell.EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, passLV)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID}, True)
|
| | | maxLevel = ipyDataList[-1].GetLevel()
|
| | | if passLV >= maxLevel:
|
| | | DoActiveMW(curPlayer, mwID)
|
| | | else:
|
| | | CalcMagicWeaponAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | | else:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('Treasure', {'FBMapID':mapID, 'FBLineID':lineID})
|
| | | if not ipyData:
|
| | | return
|
| | | if curPlayer.GetLV() < ipyData.GetNeedLV():
|
| | | GameWorld.Log('通关副本激活法宝 ,等级不足!!!mwID=%s, needLV=%s' % (mwID, ipyData.GetNeedLV()))
|
| | | return
|
| | | mwID = ipyData.GetID()
|
| | | DoActiveMW(curPlayer, mwID)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | def DoActiveMW(curPlayer, mwID, mwLV=0):
|
| | | def DoActiveMW(curPlayer, mwID, mwLV=1):
|
| | | if not GetWMIpyData(mwID):
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % mwID, mwLV)
|
| | | if mwLV == 0:
|
| | | SetMagicWeaponActiveState(curPlayer, mwID)
|
| | | #֪ͨ
|
| | | NotifyMagicWeapon(curPlayer)
|
| | | |
| | | if mwLV == 1:
|
| | |
|
| | | if mwID in IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure'):
|
| | | PlayerControl.NotifyCode(curPlayer, 'UnblockTreasure', [curPlayer.GetName(), mwID])
|
| | | else:
|
| | | sysMark = IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure', 2, {}).get(mwID, 'UnblockTreasure')
|
| | | PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), mwID])
|
| | |
|
| | | #任务
|
| | | EventShell.EventRespons_OnActiveMagicWeapon(curPlayer, mwID)
|
| | | else:
|
| | | |
| | | #通知客户端等级
|
| | | Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV)
|
| | |
|
| | | EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV)
|
| | | #通知客户端等级
|
| | | Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetMagicWeapon, 1, [mwID, mwLV])
|
| | |
|
| | |
| | | skillIDList = upIpyData.GetUnLockSkill()
|
| | | for skillID in skillIDList:
|
| | | GiveSkill(curPlayer, skillID, GameWorld.GetGameWorld().GetTick())
|
| | | #物品奖励
|
| | | itemAward = upIpyData.GetItemAward()
|
| | | if itemAward:
|
| | | itemID, itemCnt, isBind = itemAward
|
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1)
|
| | | if 1 > packSpace:
|
| | | PlayerControl.SendMailByKey('TreasureWakeUp', [curPlayer.GetID()], [itemAward])
|
| | | else:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem], event=["MWAward", False, {"mwID":mwID}])
|
| | | activeMWID = upIpyData.GetActiveMWID()
|
| | | if activeMWID == mwID:
|
| | | GameWorld.ErrLog(' TreasureUp.txt 配置异常 不可激活自身法宝 mwID=%s' % mwID)
|
| | | elif activeMWID:
|
| | | DoActiveMW(curPlayer, activeMWID)
|
| | | |
| | | #激活魂
|
| | | # activeSoulID = upIpyData.GetActiveSoulID()
|
| | | # if activeSoulID:
|
| | | # __DoActiveMWSoul(curPlayer, activeSoulID, False)
|
| | | |
| | |
|
| | | CalcMagicWeaponAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | |
| | |
|
| | |
|
| | | def GetWMIpyData(mwID):return IpyGameDataPY.GetIpyGameData('Treasure', mwID)
|
| | |
|
| | |
|
| | | def GetNeedSuccIDByMWID(mwID, ipyData=None):
|
| | | ##获取法宝ID开启需要完成的成就ID
|
| | | if not ipyData:
|
| | | ipyData = GetWMIpyData(mwID)
|
| | | if not ipyData:
|
| | | return []
|
| | | succIDList = list(ipyData.GetSuccID())
|
| | | return succIDList
|
| | |
|
| | |
|
| | | def GetMWIDBySuccID(succID):
|
| | | global g_succInfoDict
|
| | | |
| | | if not g_succInfoDict:
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureByIndex(i)
|
| | | mwID = ipyData.GetID()
|
| | | succIDList = GetNeedSuccIDByMWID(mwID, ipyData)
|
| | | for succid in succIDList:
|
| | | if succid in g_succInfoDict:
|
| | | GameWorld.ErrLog(' 存在相同成就激活条件的法宝 %s 和 %s' % (mwID, g_succInfoDict[succid]))
|
| | | g_succInfoDict[succid] = mwID
|
| | | return g_succInfoDict.get(succID)
|
| | |
|
| | |
|
| | | def GetMWActiveCntTotal(curPlayer):
|
| | |
| | | PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0)
|
| | | return
|
| | |
|
| | |
|
| | | def NotifyMagicWeapon(curPlayer, isLogin=False):
|
| | | #通知法宝信息
|
| | | packData = ChPyNetSendPack.tagMCMagicWeaponData()
|
| | | packData.Clear()
|
| | | packData.MagicWeaponID = []
|
| | |
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureByIndex(i)
|
| | | magicWeaponID = ipyData.GetID()
|
| | | isActive = GetIsActiveMagicWeapon(curPlayer, magicWeaponID)
|
| | | if not isActive:
|
| | | continue
|
| | | packData.MagicWeaponID.append(magicWeaponID)
|
| | | |
| | | packData.Num = len(packData.MagicWeaponID)
|
| | | if packData.Num or isLogin:
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | | ##--------------------------------------------------------------------------------------------------
|
| | |
|
| | |
| | | if isActive:
|
| | | GameWorld.DebugLog(' 该法宝已开启! mwID=%s' % mwID)
|
| | | return
|
| | | succIDList = GetNeedSuccIDByMWID(mwID)
|
| | | curExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponExp % mwID)
|
| | | if curExp < len(succIDList):
|
| | | GameWorld.DebugLog(' 该法宝所需成就未完成! mwID=%s, curExp=%s, succIDList=%s' % (mwID, curExp, succIDList))
|
| | | return
|
| | |
|
| | | #消耗物品判断
|
| | | ipyData = GetWMIpyData(mwID)
|
| | | needItemDict = ipyData.GetNeedItem()
|
| | |
| | | for mwID in needCalList:
|
| | | mwLv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID)
|
| | | curUpExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponUpExp % mwID)
|
| | | state = GetIsClickMagicWeapon(curPlayer, mwID)
|
| | | |
| | | FBPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % mwID)
|
| | | isWear = GetIsWearMagicWeapon(curPlayer, mwID)
|
| | | if isAll and not mwLv and not curUpExp and not state and not FBPassLV and not isWear:
|
| | | if isAll and not mwLv and not curUpExp and not FBPassLV and not isWear:
|
| | | continue
|
| | | pack = ChPyNetSendPack.tagMCMagicWeaponInfo()
|
| | | pack.MWID = mwID
|
| | | pack.LV = mwLv
|
| | | pack.Exp = curUpExp
|
| | | pack.State = state
|
| | | pack.FBPassLV = FBPassLV
|
| | | pack.IsWear = isWear
|
| | | sendPack.InfoList.append(pack)
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | | return
|
| | |
|
| | |
|
| | | #// A5 16 法宝状态记录 #tagCMMagicWeaponState
|
| | | #
|
| | | #struct tagCMMagicWeaponState
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD MWID; //法宝ID
|
| | | #};
|
| | | def SaveMagicWeaponState(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | mwID = clientData.MWID
|
| | | if GetIsClickMagicWeapon(curPlayer, mwID):
|
| | | return
|
| | | SetMagicWeaponClickState(curPlayer, mwID)
|
| | | Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | return
|
| | |
|
| | |
|
| | | def GetIsClickMagicWeapon(curPlayer, mwID):
|
| | | #获取法宝是否点击认主
|
| | | return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsClick, mwID, True)
|
| | |
|
| | |
|
| | | def SetMagicWeaponClickState(curPlayer, mwID, state=1):
|
| | | #设置法宝是否点击认主状态
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsClick, mwID, state, True)
|
| | | return
|
| | |
|
| | |
|
| | | #// A5 1D 法宝佩戴 #tagCMWearMagicWeapon
|
| | |
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsWear, mwID, state, True)
|
| | | return
|
| | |
|
| | |
|
| | | def UptateMWFBPasslv(curPlayer, mwID, passLV):
|
| | | GameWorld.Log('更新关卡 mwID=%s,level=%s' % (mwID, passLV), curPlayer.GetID())
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWFBPassLevel % mwID, passLV)
|
| | | CalcMagicWeaponAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | | Sycn_MagicWeaponLV(curPlayer, mwID)
|
| | | |
| | | EventShell.EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, passLV)
|
| | | return
|
| | |
| | | SetSuccFinish(curPlayer, succID, 0)
|
| | |
|
| | | Sync_SuccTypeIndexAwardRecord(curPlayer, [succID], True) #设置成未领取的在外层同步
|
| | | PlayerMagicWeapon.ActiveMagicWeapon(curPlayer, succID)
|
| | | EventShell.EventRespons_SuccessFinish(curPlayer, succID)
|
| | |
|
| | | return
|