271 【内政】古宝系统-服务端(品质等级属性支持;效果层级调整为最大9999;)
| | |
| | | BYTE SpecEffLayerMax; //特殊效果最大层数
|
| | | BYTE SpecAttrID; //特殊属性ID
|
| | | DWORD SpecAttrValue; //特殊属性初始值
|
| | | DWORD SpecAttrPerLVAdd; //特殊属性每级成长
|
| | | DWORD SpecAttrPerStarAdd; //特殊属性每星成长
|
| | | };
|
| | |
|
| | |
| | | list LVUPNeedItemInfo; //升级所需物品 [[物品ID,个数], ...]
|
| | | };
|
| | |
|
| | | //品质升级属性表
|
| | |
|
| | | struct GubaoLVAttr
|
| | | {
|
| | | BYTE _GubaoQuality; //古宝品质
|
| | | BYTE _GubaoLV; //古宝等级
|
| | | list SpecAttrIDList; //特殊属性ID列表
|
| | | list SpecAttrValueList; //特殊总属性值列表
|
| | | };
|
| | |
|
| | | //红颜表
|
| | |
|
| | | struct Beauty
|
| | |
| | | ("GubaoID", c_ushort),
|
| | | ("GubaoStar", c_ubyte),
|
| | | ("GubaoLV", c_ubyte),
|
| | | ("EffLayer", c_ubyte), # 该特殊效果累加层值
|
| | | ("EffLayer", c_ushort), # 该特殊效果累加层值
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("BYTE", "SpecEffLayerMax", 0),
|
| | | ("BYTE", "SpecAttrID", 0),
|
| | | ("DWORD", "SpecAttrValue", 0),
|
| | | ("DWORD", "SpecAttrPerLVAdd", 0),
|
| | | ("DWORD", "SpecAttrPerStarAdd", 0),
|
| | | ),
|
| | |
|
| | |
| | | ("BYTE", "GubaoQuality", 1),
|
| | | ("BYTE", "LessEqualLV", 0),
|
| | | ("list", "LVUPNeedItemInfo", 0),
|
| | | ),
|
| | |
|
| | | "GubaoLVAttr":(
|
| | | ("BYTE", "GubaoQuality", 1),
|
| | | ("BYTE", "GubaoLV", 1),
|
| | | ("list", "SpecAttrIDList", 0),
|
| | | ("list", "SpecAttrValueList", 0),
|
| | | ),
|
| | |
|
| | | "Beauty":(
|
| | |
| | | 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(): |
| | |
| | | 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(): |
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
|
| | |
| | | if not IsGubaoActivated(curPlayer, gubaoID):
|
| | | continue
|
| | |
|
| | | quality = ipyData.GetGubaoQuality()
|
| | | |
| | | lv, star, layer = GetGubaoInfo(curPlayer, gubaoID)
|
| | | gubaoStarDict[gubaoID] = star
|
| | |
|
| | |
| | | # 特殊属性
|
| | | 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()):
|