271 【内政】古宝系统-服务端(品质等级属性支持;效果层级调整为最大9999;)
4个文件已修改
68 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -937,7 +937,6 @@
    BYTE        SpecEffLayerMax;    //特殊效果最大层数
    BYTE        SpecAttrID;    //特殊属性ID
    DWORD        SpecAttrValue;    //特殊属性初始值
    DWORD        SpecAttrPerLVAdd;    //特殊属性每级成长
    DWORD        SpecAttrPerStarAdd;    //特殊属性每星成长
};
@@ -978,6 +977,16 @@
    list        LVUPNeedItemInfo;    //升级所需物品 [[物品ID,个数], ...]
};
//品质升级属性表
struct GubaoLVAttr
{
    BYTE        _GubaoQuality;    //古宝品质
    BYTE        _GubaoLV;    //古宝等级
    list        SpecAttrIDList;    //特殊属性ID列表
    list        SpecAttrValueList;    //特殊总属性值列表
};
//红颜表
struct Beauty
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -5412,7 +5412,7 @@
                  ("GubaoID", c_ushort),    
                  ("GubaoStar", c_ubyte),    
                  ("GubaoLV", c_ubyte),    
                  ("EffLayer", c_ubyte),    # 该特殊效果累加层值
                  ("EffLayer", c_ushort),    # 该特殊效果累加层值
                  ]
    def __init__(self):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -785,7 +785,6 @@
                        ("BYTE", "SpecEffLayerMax", 0),
                        ("BYTE", "SpecAttrID", 0),
                        ("DWORD", "SpecAttrValue", 0),
                        ("DWORD", "SpecAttrPerLVAdd", 0),
                        ("DWORD", "SpecAttrPerStarAdd", 0),
                        ),
@@ -812,6 +811,13 @@
                        ("BYTE", "GubaoQuality", 1),
                        ("BYTE", "LessEqualLV", 0),
                        ("list", "LVUPNeedItemInfo", 0),
                        ),
                "GubaoLVAttr":(
                        ("BYTE", "GubaoQuality", 1),
                        ("BYTE", "GubaoLV", 1),
                        ("list", "SpecAttrIDList", 0),
                        ("list", "SpecAttrValueList", 0),
                        ),
                "Beauty":(
@@ -3339,8 +3345,7 @@
    def GetSpecEffLayerMax(self): return self.attrTuple[8] # 特殊效果最大层数 BYTE
    def GetSpecAttrID(self): return self.attrTuple[9] # 特殊属性ID BYTE
    def GetSpecAttrValue(self): return self.attrTuple[10] # 特殊属性初始值 DWORD
    def GetSpecAttrPerLVAdd(self): return self.attrTuple[11] # 特殊属性每级成长 DWORD
    def GetSpecAttrPerStarAdd(self): return self.attrTuple[12] # 特殊属性每星成长 DWORD
    def GetSpecAttrPerStarAdd(self): return self.attrTuple[11] # 特殊属性每星成长 DWORD
# 古宝共鸣属性表
class IPY_GubaoResonanceAttr():
@@ -3386,6 +3391,18 @@
    def GetGubaoQuality(self): return self.attrTuple[0] # 古宝品质 BYTE
    def GetLessEqualLV(self): return self.attrTuple[1] # 小于等于等级 BYTE
    def GetLVUPNeedItemInfo(self): return self.attrTuple[2] # 升级所需物品 [[物品ID,个数], ...] list
# 品质升级属性表
class IPY_GubaoLVAttr():
    def __init__(self):
        self.attrTuple = None
        return
    def GetGubaoQuality(self): return self.attrTuple[0] # 古宝品质 BYTE
    def GetGubaoLV(self): return self.attrTuple[1] # 古宝等级 BYTE
    def GetSpecAttrIDList(self): return self.attrTuple[2] # 特殊属性ID列表 list
    def GetSpecAttrValueList(self): return self.attrTuple[3] # 特殊总属性值列表 list
# 红颜表
class IPY_Beauty():
@@ -5721,6 +5738,7 @@
        self.__LoadFileData("GubaoResonance", onlyCheck)
        self.__LoadFileData("GubaoStar", onlyCheck)
        self.__LoadFileData("GubaoLV", onlyCheck)
        self.__LoadFileData("GubaoLVAttr", onlyCheck)
        self.__LoadFileData("Beauty", onlyCheck)
        self.__LoadFileData("BeautyQualityLV", onlyCheck)
        self.__LoadFileData("BeautySkin", onlyCheck)
@@ -6598,6 +6616,13 @@
        self.CheckLoadData("GubaoLV")
        return self.ipyGubaoLVCache[index]
    def GetGubaoLVAttrCount(self):
        self.CheckLoadData("GubaoLVAttr")
        return self.ipyGubaoLVAttrLen
    def GetGubaoLVAttrByIndex(self, index):
        self.CheckLoadData("GubaoLVAttr")
        return self.ipyGubaoLVAttrCache[index]
    def GetBeautyCount(self):
        self.CheckLoadData("Beauty")
        return self.ipyBeautyLen
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -37,7 +37,7 @@
    return lv, star, layer
def SetGubaoInfo(curPlayer, gubaoID, lv, star, layer):
    ## 特殊效果层*100000 + 等级*100 + 星级
    info = min(layer, 99) * 100000 + min(lv, 999) * 100 + min(star, 99)
    info = min(layer, 9999) * 100000 + min(lv, 999) * 100 + min(star, 99)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoInfo % gubaoID, info)
    return
@@ -257,6 +257,8 @@
        if not IsGubaoActivated(curPlayer, gubaoID):
            continue
        
        quality = ipyData.GetGubaoQuality()
        lv, star, layer = GetGubaoInfo(curPlayer, gubaoID)
        gubaoStarDict[gubaoID] = star
        
@@ -275,15 +277,23 @@
        # 特殊属性
        attrID = ipyData.GetSpecAttrID()
        effType = ipyData.GetSpecEffType()
        layerMax = ipyData.GetSpecEffLayerMax()
        SpecAttrValue = ipyData.GetSpecAttrValue()
        SpecAttrPerLVAdd = ipyData.GetSpecAttrPerLVAdd()
        SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
        attrValue = SpecAttrValue + SpecAttrPerLVAdd *  max(lv - 1, 0) + SpecAttrPerStarAdd * star
        if effType: # 有特殊效果类型的
            attrValue *= layer
        specLVAttr = 0
        lvAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoLVAttr", quality, lv)
        if lvAttrIpyData:
            specAttrIDList = lvAttrIpyData.GetSpecAttrIDList()
            specAttrValueList = lvAttrIpyData.GetSpecAttrValueList()
            for sIndex in range(min(len(specAttrIDList), len(specAttrValueList))):
                if specAttrIDList[sIndex] == attrID:
                    specLVAttr = specAttrValueList[sIndex]
        if not layerMax:
            layer, layerMax = 1, 1 # 无层级限制的默认1层
        attrValue = int((SpecAttrValue + SpecAttrPerStarAdd * star + specLVAttr / float(layerMax)) * layer)
        attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
        GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,lv=%s,star=%s,effType=%s,layer=%s,attrID=%s,v=%s,perLV=%s,perStar=%s,attrValue=%s,%s"
                           % (gubaoID, lv, star, effType, layer, attrID, SpecAttrValue, SpecAttrPerLVAdd, SpecAttrPerStarAdd, attrValue, attrDict), playerID)
        GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,quality=%s,lv=%s,star=%s,effType=%s,layer=%s/%s,attrID=%s,v=%s,perStar=%s,specLVAttr=%s,attrValue=%s,%s"
                           % (gubaoID, quality, lv, star, effType, layer, layerMax, attrID, SpecAttrValue, SpecAttrPerStarAdd, specLVAttr, attrValue, attrDict), playerID)
        
    # 共鸣
    for index in range(ipyDataMgr.GetGubaoResonanceCount()):