8341 【恺英】【后端】强化进化系统优化(强化等级上限修改为关联进化等级,去除星级关联,进化修改)
8个文件已修改
214 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -125,16 +125,6 @@
};
//装备强化等级上限
struct tagItemPlusMax
{
    BYTE        _Type;        //按装备位对应类型查找
    BYTE        _Star;    // 装备星数
    WORD        LevelMax;    //强化等级上限
};
//装备全身星数属性
struct tagRoleEquipStars
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3599,6 +3599,7 @@
Def_PDict_EquipPartProficiency = "EPProf_%s_%s" # 装备部位对应公共强化熟练度,参数为(packType, index)
Def_PDict_EquipPartPlusEvolveLV = "EPPlusEvolveLV_%s_%s" # 装备部位对应公共强化进化等级,参数为(packType, index)
Def_PDict_TotalPlusEvolveLV = "TotalPlusEvolveLV" # 装备部位对应公共强化进化总等级
# 宝石
Def_PDict_EquipPartStoneID = "StoneID_%s_%s" # 装备位_孔位存储宝石ID*10+是(1)否(0)绑定
Def_PDict_TotalStoneLV = "TotalStoneLV" # 装备位宝石总等级
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -58,15 +58,16 @@
    
    # 判断 1.装备  2.最高强化等级, 3.铜钱数
    if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
        GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
        #GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
        return
    ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index})
    if not ipyData:
        return
    equipPlace = ipyData.GetEquipPlace()
    indexList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
    if equipPlace not in indexList:
        GameWorld.Log("    index not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
    equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
    if equipPlace not in equipPlaceList:
        #GameWorld.Log("index=%s, equipPlace=%s not in ChConfig.Pack_EquipPart_CanPlusStar" % (index, equipPlace), playerID)
        return
    
    # 暂不判断开启等级由客户端处理   
@@ -74,94 +75,58 @@
    curPack = curPlayer.GetItemManager().GetPack(packType)
    curEquip = curPack.GetAt(index)
    if not curEquip or curEquip.IsEmpty():
        GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")
        GameWorld.DebugLog("equip is empty")
        return
    maxPlusLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
    curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
    if curPartPlusLV >= maxPlusLV:
        GameWorld.Log("OnEquipMayaPlus:curPartPlusLV(%s) >= maxPlusLV(%s)" % (curPartPlusLV, maxPlusLV), playerID)
        return
    # 强化处理
    result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)
    updPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
    #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartPlusLV, updPartStarLV), playerID)
    if result == ChConfig.Def_ComposeState_None:
        return
    #===========================================================================
    # curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipMayaPlus, result)
    # 每日活动
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)
    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
    #===========================================================================
    # 强化变更时处理
    if curPartPlusLV != updPartPlusLV:
        DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))
        # 增加强化成就
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)
        EventShell.EventRespons_EquipPlus(curPlayer, ipyData.GetClassLV(), updPartPlusLV)
    return
## 开始装备强化
#  @param index 为装备位
#  @return
def DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index):
    result = ChConfig.Def_ComposeState_None
    findType = ChEquip.GetEquipPlusType(curEquip)
    if findType == -1:
        return result
    if not findType:
        return
    
    curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)
    if not ipyData:
    plusIpyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)
    if not plusIpyData:
        return
    costSilver = ipyData.GetCostCount()
    costSilver = plusIpyData.GetCostCount()
    if not costSilver:
        #GameWorld.DebugLog("已到强化最大等级! curPartPlusLV=%s" % curPartPlusLV, playerID)
        return
    if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver):
        # 金币不足,返回
        return result
    curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, index) # 进化等级
    nextEvolveLV = curEvolveLV + 1
    evolveIpyData = IpyGameDataPY.GetIpyGameDataNotLog('EquipPlusEvolve', equipPlace, nextEvolveLV)
    if not evolveIpyData:
        return
    maxPlusLV = evolveIpyData.GetNeedPlusLV()
    if curPartPlusLV >= maxPlusLV:
        GameWorld.Log("已到当前强化最大等级,进化后增加强化等级上限! curPartPlusLV(%s) >= maxPlusLV(%s), curEvolveLV=%s"
                      % (curPartPlusLV, maxPlusLV, curEvolveLV), playerID)
        return
    totalExp = ipyData.GetTotalExp()
    curExp = ChEquip.GetEquipPartProficiency(curPlayer, packType, index) + ipyData.GetAddExp()
    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False):
        return
    totalExp = plusIpyData.GetTotalExp()
    curExp = ChEquip.GetEquipPartProficiency(curPlayer, packType, index) + plusIpyData.GetAddExp()
    if curExp >= totalExp:
        #升级
        curPartPlusLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)
        curPartPlusLV += 1
        curExp = curExp - totalExp
    ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
    ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)
    # 支付金币
    PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
        __EquipMayaPlusChange(curPlayer, packType, curEquip, index, curPartPlusLV)
    DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartPlusLV)
    return ChConfig.Def_ComposeState_Sucess
    ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
    ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)
    PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
    return
def __EquipMayaPlusChange(curPlayer, packType, curEquip, index, updPlusLV):
## 玛雅加强等级改变
#  @param curPlayer: 玩家
#  @param packType: 背包类型
#  @param curEquip: 当前装备
#  @param succeedRate: 成功率
#  @param failStarLV: 失败时的强化数
#  @return
def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):
    curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
    updPlusLV = curPlusLV + 1
    ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, updPlusLV)
    
    broadCastLVList = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelBroadCast", 1)
    #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))
    if updPlusLV in broadCastLVList:
        itemID = curEquip.GetItemTypeID()
        userData = curEquip.GetUserData()
@@ -169,12 +134,18 @@
        msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, updPlusLV]
        PlayerControl.WorldNotify(0, "StrengthenCongratulation", msgParamList)
        
    classLV = ItemCommon.GetItemClassLV(curEquip)
    # 成就
    #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusLV, 1, [updPlusLV])
    DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV)
    # 增加强化成就
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)
    EventShell.EventRespons_EquipPlus(curPlayer, classLV, updPlusLV)
    # 开服活动数据
    #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PlusLV, ChEquip.GetTotalPlusLV(curPlayer))
    return updPlusLV
    OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PlusLV, ChEquip.GetTotalPlusLV(curPlayer))
    return
def DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV):
@@ -204,15 +175,18 @@
    if not ItemCommon.CheckItemCanUse(curEquip):
        return
    curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex)
    maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curEquip)
    if curEvolveLV >= maxEvolveLV:
        GameWorld.DebugLog('装备强化进化, 已达最大进化等级equipPackindex=%s, maxEvolveLV=%s'%(equipPackindex, maxEvolveLV))
        return
    nextEvolveLV = curEvolveLV + 1
    equipPlace = curEquip.GetEquipPlace()
    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, nextEvolveLV)
    if not ipyData:
        return
    needPlusLV = ipyData.GetNeedPlusLV()
    curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, equipPackindex)
    if curPartPlusLV < needPlusLV:
        GameWorld.DebugLog("强化等级不足,无法进化! curPartPlusLV=%s < needPlusLV=%s, nextEvolveLV=%s"
                           % (curPartPlusLV, needPlusLV, nextEvolveLV))
        return
    costItemDict = ipyData.GetCostItem()
    delItemDict = {}
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -230,3 +204,4 @@
    ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, equipPackindex)
    EventShell.EventRespons_EquipPlusEvolve(curPlayer, nextEvolveLV)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
@@ -81,7 +81,8 @@
        gridIndex = ipyData.GetGridIndex()
        curEquip = curPack.GetAt(gridIndex)
        ChEquip.SetEquipPartPlusLV(curPlayer, packType, gridIndex, curEquip, starLV)
        ChEquip.SetEquipPartProficiency(curPlayer, packType, gridIndex, evolveLV)
        ChEquip.SetEquipPartProficiency(curPlayer, packType, gridIndex, 0)
        ChEquip.SetEquipPartPlusEvolveLV(curPlayer, packType, gridIndex, evolveLV)
        GameWorld.DebugAnswer(curPlayer, "设置%s阶%s部位强化等级(%s),进化等级(%s)" % (classLV, equipPlace, starLV, evolveLV))
        refreshClassLV = classLV
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -129,12 +129,6 @@
                        ("DWORD", "TotalExp", 0),
                        ),
                "ItemPlusMax":(
                        ("BYTE", "Type", 1),
                        ("BYTE", "Star", 1),
                        ("WORD", "LevelMax", 0),
                        ),
                "RoleEquipStars":(
                        ("BYTE", "StarsNeed", 1),
                        ("list", "AttrType", 0),
@@ -1746,19 +1740,6 @@
    def GetCostCount(self): return self.CostCount # 消耗铜钱
    def GetAddExp(self): return self.AddExp # 提升熟练度值
    def GetTotalExp(self): return self.TotalExp # 升级所需熟练度总值
# 装备强化等级上限
class IPY_ItemPlusMax():
    def __init__(self):
        self.Type = 0
        self.Star = 0
        self.LevelMax = 0
        return
    def GetType(self): return self.Type # 按装备位对应类型查找
    def GetStar(self): return self.Star #  装备星数
    def GetLevelMax(self): return self.LevelMax # 强化等级上限
# 装备全身星数属性
class IPY_RoleEquipStars():
@@ -4759,8 +4740,6 @@
        self.ipyItemCompoundLen = len(self.ipyItemCompoundCache)
        self.ipyItemPlusCache = self.__LoadFileData("ItemPlus", IPY_ItemPlus)
        self.ipyItemPlusLen = len(self.ipyItemPlusCache)
        self.ipyItemPlusMaxCache = self.__LoadFileData("ItemPlusMax", IPY_ItemPlusMax)
        self.ipyItemPlusMaxLen = len(self.ipyItemPlusMaxCache)
        self.ipyRoleEquipStarsCache = self.__LoadFileData("RoleEquipStars", IPY_RoleEquipStars)
        self.ipyRoleEquipStarsLen = len(self.ipyRoleEquipStarsCache)
        self.ipyEquipLegendAttrCountCache = self.__LoadFileData("EquipLegendAttrCount", IPY_EquipLegendAttrCount)
@@ -5231,8 +5210,6 @@
    def GetItemCompoundByIndex(self, index): return self.ipyItemCompoundCache[index]
    def GetItemPlusCount(self): return self.ipyItemPlusLen
    def GetItemPlusByIndex(self, index): return self.ipyItemPlusCache[index]
    def GetItemPlusMaxCount(self): return self.ipyItemPlusMaxLen
    def GetItemPlusMaxByIndex(self, index): return self.ipyItemPlusMaxCache[index]
    def GetRoleEquipStarsCount(self): return self.ipyRoleEquipStarsLen
    def GetRoleEquipStarsByIndex(self, index): return self.ipyRoleEquipStarsCache[index]
    def GetEquipLegendAttrCountCount(self): return self.ipyEquipLegendAttrCountLen
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -989,8 +989,8 @@
def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrList, plus_addEquipBaseAttrPerList):
    ## 计算装备强化后的属性
    equipPartPlusLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
    equipPartPlusEvolveLV = GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, equipIndex, curEquip)
    equipPartPlusLV = GetEquipPartPlusLV(curPlayer, packType, equipIndex)
    equipPartPlusEvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, equipIndex)
    
    if not equipPartPlusLV:
        return
@@ -1348,22 +1348,14 @@
def GetEquipPartProficiency(curPlayer, packType, index):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))
## 设置公共部位强化熟练度
def SetEquipPartProficiency(curPlayer, packType, index, value):
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value)
## 获取公共部位强化星级, 因装备的最高可强化星级影响,用于算当前装备属性使用, 不影响全身星级
def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
    maxStarLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
    return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
    return
## 获取公共部位强化等级
def GetEquipPartPlusLV(curPlayer, packType, index):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))
## 设置公共部位强化等级
def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, setPlusLV):
@@ -1384,13 +1376,6 @@
    GameWorld.DebugLog("设置强化等级: index=%s,befPlusLV=%s,setPlusLV=%s,befTotalPlusLV=%s,updTotalPlusLV=%s" 
                       % (index, befPlusLV, setPlusLV, befTotalPlusLV, updTotalPlusLV))
    return
## 获取公共部位强化进化等级, 用于算当前装备属性使用, 不影响全身星级
def GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, index, curEquip):
    maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, index, curEquip)
    return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)), maxEvolveLV)
## 获取公共部位强化进化等级
def GetEquipPartPlusEvolveLV(curPlayer, packType, index):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -735,8 +735,8 @@
    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, packIndex, curEquip)
    
    #部位强化数据
    plusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, packIndex, curEquip)
    plusEvolveLV = ChEquip.GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, packIndex, curEquip)
    plusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, packIndex)
    plusEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, packIndex)
    
    #部位洗练数据
    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % packIndex)
@@ -1811,26 +1811,13 @@
    ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
    return
## 获取物品最高强化等级
#  @param itemType: 物品类型
#  @return 最大星级,0为不可强化
def GetItemMaxPlusLV(curPlayer, equipPackindex, curItem):
    findType = ChEquip.GetEquipPlusType(curItem)
    if not findType:
        return 0
    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curItem)
    ipyData = IpyGameDataPY.InterpolationSearch('ItemPlusMax', 'Star', equipStar, {'Type':findType})
    if not ipyData:
        return 0
    return ipyData.GetLevelMax()
## 获取物品最高强化进化等级
#  @param itemType: 物品类型
#  @return 最大星级,0为不可强化
def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
    packType = IPY_GameWorld.rptEquip
    curPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, equipPackindex, curItem)
    curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, equipPackindex)
    equipPlace = curItem.GetEquipPlace()
    ipyData = IpyGameDataPY.InterpolationSearch('EquipPlusEvolve', 'NeedPlusLV', curPlusLV, {'EquipPlace':equipPlace})
    if not ipyData:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -135,8 +135,8 @@
            itemDict["Star"] = equipStar
            
        #部位强化数据
        equipPartPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip)
        equipPartPlusEvolveLV = ChEquip.GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, index, curEquip)
        equipPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
        equipPartPlusEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, index)
        if equipPartPlusLV:
            itemDict["PlusLV"] = equipPartPlusLV
        if equipPartPlusEvolveLV: