xdh
2019-03-27 a572273422ce72347de0697eccc0c57fefb1f85d
6244 【后端】【2.0】法宝调整
15个文件已修改
562 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFabao.py 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MagicWeapon.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py 211 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -678,9 +678,9 @@
    DWORD        _ID;    //ID
    BYTE        TreasureType;    //法宝类型
    DWORD        PreTreasure;    //前置法宝
    list        SuccID;    //成就ID
    list        Potentials;    //技能潜力升级
    list        SkillPower;    //技能解锁战力
    DWORD        FBMapID;    //副本ID
    DWORD        FBLineID;    //副本线路ID
    DWORD        NeedLV;    //需要等级
    dict        NeedItem;    //需要消耗物品
};
@@ -693,9 +693,6 @@
    DWORD        NeedExp;    //需要经验
    dict        AddAttr;    //属性
    list        UnLockSkill;    //解锁的技能
    DWORD        ActiveMWID;    //激活法宝ID
    list        ItemAward;    //物品奖励[itemID,cnt,isbind]
    DWORD        ActiveSoulID;    //激活魂ID
    DWORD        PowerEx;    //额外固定战力
};
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -9899,58 +9899,6 @@
#------------------------------------------------------
# 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):
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -14901,73 +14901,6 @@
#------------------------------------------------------
# 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):
@@ -14976,7 +14909,6 @@
                  ("MWID", c_int),    
                  ("LV", c_ubyte),    
                  ("Exp", c_int),    
                  ("State", c_ubyte),    #是否点击法宝认主
                  ("FBPassLV", c_ubyte),    #副本关卡
                  ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
                  ]
@@ -14994,7 +14926,6 @@
        self.MWID = 0
        self.LV = 0
        self.Exp = 0
        self.State = 0
        self.FBPassLV = 0
        self.IsWear = 0
        return
@@ -15010,7 +14941,6 @@
                                MWID:%d,
                                LV:%d,
                                Exp:%d,
                                State:%d,
                                FBPassLV:%d,
                                IsWear:%d
                                '''\
@@ -15018,7 +14948,6 @@
                                self.MWID,
                                self.LV,
                                self.Exp,
                                self.State,
                                self.FBPassLV,
                                self.IsWear
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1045,7 +1045,7 @@
Writer = xdh
Releaser = xdh
RegType = 0
RegisterPackCount = 4
RegisterPackCount = 3
PacketCMD_1=0xA5
PacketSubCMD_1=0x1D
@@ -1059,9 +1059,6 @@
PacketSubCMD_3=0x15
PacketCallFunc_3=OnMagicWeaponUp
PacketCMD_4=0xA5
PacketSubCMD_4=0x16
PacketCallFunc_4=SaveMagicWeaponState
;副本
[FBCommon]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3867,14 +3867,12 @@
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" #炼丹经验
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -9899,58 +9899,6 @@
#------------------------------------------------------
# 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):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -14901,73 +14901,6 @@
#------------------------------------------------------
# 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):
@@ -14976,7 +14909,6 @@
                  ("MWID", c_int),    
                  ("LV", c_ubyte),    
                  ("Exp", c_int),    
                  ("State", c_ubyte),    #是否点击法宝认主
                  ("FBPassLV", c_ubyte),    #副本关卡
                  ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
                  ]
@@ -14994,7 +14926,6 @@
        self.MWID = 0
        self.LV = 0
        self.Exp = 0
        self.State = 0
        self.FBPassLV = 0
        self.IsWear = 0
        return
@@ -15010,7 +14941,6 @@
                                MWID:%d,
                                LV:%d,
                                Exp:%d,
                                State:%d,
                                FBPassLV:%d,
                                IsWear:%d
                                '''\
@@ -15018,7 +14948,6 @@
                                self.MWID,
                                self.LV,
                                self.Exp,
                                self.State,
                                self.FBPassLV,
                                self.IsWear
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -1727,13 +1727,6 @@
    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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -7279,8 +7279,6 @@
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现身"/>
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFabao.py
@@ -30,31 +30,21 @@
#  @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()
@@ -64,8 +54,10 @@
        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:
@@ -77,11 +69,10 @@
            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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MagicWeapon.py
@@ -446,15 +446,18 @@
        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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -570,9 +570,9 @@
                        ("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),
                        ),
@@ -582,9 +582,6 @@
                        ("DWORD", "NeedExp", 0),
                        ("dict", "AddAttr", 0),
                        ("list", "UnLockSkill", 0),
                        ("DWORD", "ActiveMWID", 0),
                        ("list", "ItemAward", 0),
                        ("DWORD", "ActiveSoulID", 0),
                        ("DWORD", "PowerEx", 0),
                        ),
@@ -2525,18 +2522,18 @@
        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 # 需要消耗物品
# 法宝升级表
@@ -2548,9 +2545,6 @@
        self.NeedExp = 0
        self.AddAttr = {}
        self.UnLockSkill = []
        self.ActiveMWID = 0
        self.ItemAward = []
        self.ActiveSoulID = 0
        self.PowerEx = 0
        return
        
@@ -2559,9 +2553,6 @@
    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 # 额外固定战力
# 连续签到奖励表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -31,6 +31,7 @@
import ChPyNetSendPack
import NetPackCommon
import Operate_EquipStone
import PlayerMagicWeapon
import IpyGameDataPY
import DataRecordPack
import EventShell
@@ -1094,7 +1095,8 @@
        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:
            # 直接转化为对应货币的物品仅在放入背包时直接转化,否则还是以真实物品的形式存在,但堆叠上限需要做特殊处理
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
@@ -9,7 +9,7 @@
# @date 2017-05-18
# @version 1.0
#
# 详细描述: 法宝系统
# 详细描述: 法宝系统 目前激活方式:1.任务接口激活 2.通关副本 3.获得某物品 4.仙宝寻主
#
#-------------------------------------------------------------------------------
#"""Version = 2017-05-18 12:00"""
@@ -38,15 +38,10 @@
import random
g_succInfoDict = {}
g_potentialsSkillDict = {}
##登录处理
# @param curPlayer 玩家
# @return None
def PlayerMagicWeaponLogin(curPlayer):
    NotifyMagicWeapon(curPlayer, True)
    SyncXBXZAwardRecord(curPlayer)
    Sycn_MagicWeaponLV(curPlayer)
    return
@@ -63,78 +58,61 @@
#    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])
@@ -145,25 +123,7 @@
    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()
@@ -181,32 +141,6 @@
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):
@@ -270,26 +204,6 @@
    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
##--------------------------------------------------------------------------------------------------
@@ -386,11 +300,7 @@
    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()
@@ -602,16 +512,15 @@
    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)
@@ -620,34 +529,6 @@
        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
@@ -691,13 +572,3 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -85,7 +85,6 @@
        SetSuccFinish(curPlayer, succID, 0)
        
        Sync_SuccTypeIndexAwardRecord(curPlayer, [succID], True) #设置成未领取的在外层同步
        PlayerMagicWeapon.ActiveMagicWeapon(curPlayer, succID)
        EventShell.EventRespons_SuccessFinish(curPlayer, succID)
        
    return