7699 【2.0.200】【后端】VIP功能新BOSS之家购买次数 7724 【后端】【主干】分解获得仙丹材料的体验优化
10个文件已修改
128 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -12850,6 +12850,7 @@
                  ("BossType", c_ubyte),    #编号类型0-世界boss 1-boss之家
                  ("KillCnt", c_int),    #击杀次数
                  ("ItemAddCnt", c_int),    #物品增加次数
                  ("BuyCnt", c_ubyte),    #购买次数
                  ]
    def __init__(self):
@@ -12865,6 +12866,7 @@
        self.BossType = 0
        self.KillCnt = 0
        self.ItemAddCnt = 0
        self.BuyCnt = 0
        return
    def GetLength(self):
@@ -12877,12 +12879,14 @@
        DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
                                BossType:%d,
                                KillCnt:%d,
                                ItemAddCnt:%d
                                ItemAddCnt:%d,
                                BuyCnt:%d
                                '''\
                                %(
                                self.BossType,
                                self.KillCnt,
                                self.ItemAddCnt
                                self.ItemAddCnt,
                                self.BuyCnt
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -59,6 +59,7 @@
import FamilyRobBoss
import FBCommon
import ChNPC
import BossHurtMng
import datetime
import math
@@ -915,7 +916,7 @@
        if not GameFuncComm.GetFuncCanUse(atkPlayer, funcID):
            PlayerControl.NotifyCode(atkPlayer, funcSysMark)
            return
    canKillCnt, limitCnt = GetBossCanKillRemainCnt(atkPlayer, index)
    canKillCnt = BossHurtMng.GetCanKillBossCnt(atkPlayer, index)[0]
    
    if canKillCnt <= 0:
        #if BossHurtMng.GetPlayerBossHurt(atkPlayer, defender):
@@ -930,16 +931,6 @@
        return False
    return True
def GetBossCanKillRemainCnt(curPlayer, funcIndex):
    #获取BOSS剩余可击杀数量与最大数量
    hasKillCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCnt%funcIndex, 0)
    itemAddKillCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntItemAddCnt%funcIndex, 0)
    killLimitPrivilege = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 4, {}).get(funcIndex, 0)
    if killLimitPrivilege:
        limitCnt = PlayerVip.GetPrivilegeValue(curPlayer, killLimitPrivilege)
    else:
        limitCnt = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 2, {}).get(funcIndex, 0)
    return max(0, limitCnt + itemAddKillCnt - hasKillCnt), limitCnt
def CheckAttackNPCByCnt(attacker, defender, isNotify=True):
    ''' 判断当日攻击该NPC次数是否已满 '''
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4593,6 +4593,7 @@
Def_Cost_BuyDailyActionCnt, # 购买活动次数
Def_Cost_FBBuyBuff, # 副本买buff
Def_Cost_CreatFamily, # 创建仙盟
Def_Cost_BuyKillBossCnt, #购买boss次数
#-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
Def_Cost_RefreshArrestTask, # 刷新悬赏任务
Def_Cost_OffLineExp, # 兑换离线经验
@@ -4605,7 +4606,7 @@
Def_Cost_Trade, # 交易
Def_Cost_Rename, # 改名
Def_Cost_SkillLvUp, # 技能升级
) = range(2000, 2000 + 59)
) = range(2000, 2000 + 60)
Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key
@@ -4686,6 +4687,7 @@
Def_Cost_BuyDailyActionCnt:"BuyDailyActionCnt",
Def_Cost_FBBuyBuff:"FBBuyBuff",
Def_Cost_CreatFamily:"CreatFamily",
Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
}
## -----------------------------------------------------
@@ -5013,7 +5015,8 @@
VIPPrivilege_XianyuanCoinAddPer,    #34 仙缘币获得倍率加成(万分比)
VIPPrivilege_35,    #35 诛仙BOSS购买次数 - 副本总表统一处理
VIPPrivilege_36,    #36 仙丹批量炼制
) = range(1, 37)
VIPPrivilege_BossHomeBuy,    #37 BOSS之家购买次数
) = range(1, 38)
(
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -12850,6 +12850,7 @@
                  ("BossType", c_ubyte),    #编号类型0-世界boss 1-boss之家
                  ("KillCnt", c_int),    #击杀次数
                  ("ItemAddCnt", c_int),    #物品增加次数
                  ("BuyCnt", c_ubyte),    #购买次数
                  ]
    def __init__(self):
@@ -12865,6 +12866,7 @@
        self.BossType = 0
        self.KillCnt = 0
        self.ItemAddCnt = 0
        self.BuyCnt = 0
        return
    def GetLength(self):
@@ -12877,12 +12879,14 @@
        DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
                                BossType:%d,
                                KillCnt:%d,
                                ItemAddCnt:%d
                                ItemAddCnt:%d,
                                BuyCnt:%d
                                '''\
                                %(
                                self.BossType,
                                self.KillCnt,
                                self.ItemAddCnt
                                self.ItemAddCnt,
                                self.BuyCnt
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
@@ -545,12 +545,13 @@
        if limitIndex !=-1 and index != limitIndex:
            continue
        killCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCnt % index, 0)
        #hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt % index, 0)
        hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt % index, 0)
        itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntItemAddCnt % index, 0)
        infoPack = ChPyNetSendPack.tagMCBossCntInfo()
        infoPack.BossType = index
        infoPack.KillCnt = killCnt
        infoPack.ItemAddCnt = itemAddCnt
        infoPack.BuyCnt = hasBuyCnt
        packdata.KillCntInfoList.append(infoPack)
        
    packdata.Cnt = len(packdata.KillCntInfoList)
@@ -560,15 +561,15 @@
# BOSS剩余可击杀次数
def GetCanKillBossCnt(curPlayer, bossFuncIndex):
    #获取BOSS剩余可击杀数量与最大数量
    hasKillCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCnt%bossFuncIndex, 0)
    itemAddKillCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntItemAddCnt%bossFuncIndex, 0)
    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt%bossFuncIndex, 0)
    killLimitPrivilege = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 4, {}).get(bossFuncIndex, 0)
    if killLimitPrivilege:
        limitCnt = PlayerVip.GetPrivilegeValue(curPlayer, killLimitPrivilege)
    else:
        limitCnt = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 2, {}).get(bossFuncIndex, 0)
    return max(limitCnt + itemAddKillCnt - hasKillCnt, 0)
    return max(0, limitCnt + itemAddKillCnt + hasBuyCnt - hasKillCnt), limitCnt
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py
@@ -44,14 +44,14 @@
    realUseCnt = min(int(math.ceil(float(curKillCnt)/reduceCnt)), useCnt)
    newCnt = max(0, curKillCnt-realUseCnt*reduceCnt)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCnt % index, newCnt)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt % index, 0)
    #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt % index, 0)
    BossHurtMng.NotifyAttackBossCnt(curPlayer, index)
    
    PlayerControl.NotifyCode(curPlayer, 'WorldBossCountItem', [itemTypeID, curKillCnt-newCnt, index])
    ItemCommon.DelItem(curPlayer, curRoleItem, realUseCnt, True, ChConfig.ItemDel_ResetBossKillCnt)
    
    if index == ShareDefine.Def_Boss_Func_Dogz:
        setCrossDict = {ChConfig.Def_PDict_Boss_KillCnt % index:0, ChConfig.Def_PDict_Boss_KillCntBuyCnt % index:0}
        setCrossDict = {ChConfig.Def_PDict_Boss_KillCnt % index:0}
        CrossRealmPlayer.SetCrossPlayerNomalDict(curPlayer, setCrossDict, isDelay=False)
    return True, realUseCnt
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -6299,34 +6299,35 @@
#};
## 购买BOSS可击杀次数
def OnBuyKillBossCnt(index, clientData, tick):
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    killBossMark = clientData.KillBossMark
#    killBossCntLimitDict = ReadChConfig.GetEvalChConfig("KillBossCntLimit")
#    curBossLimitInfo = []
#    for limitInfo in killBossCntLimitDict.values():
#        if killBossMark == limitInfo[0]:
#            curBossLimitInfo = limitInfo
#            break
#    if not curBossLimitInfo:
#        return
#
#    killBossMark, limitCnt, canBuyCnt, buyCost, sysMark1, sysMark2= curBossLimitInfo
#    hasKillCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCnt%killBossMark, 0)
#    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, 0)
#    playerID = curPlayer.GetPlayerID()
#    if hasBuyCnt >= canBuyCnt:
#        GameWorld.Log('购买BOSS可击杀次数, 已达到今日最大可购买次数,hasBuyCnt=%s, canBuyCnt=%s'%(hasBuyCnt, canBuyCnt), playerID)
#        return
#    costGold = eval(buyCost)
#    infoDict = {"index":index, ChConfig.Def_Cost_Reason_SonKey:index}
#    isOK = PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGold,
#                                  ChConfig.Def_Cost_BuyKillBossCnt, infoDict)
#
#    if not isOK:
#        return
#    # 增加购买次数
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, hasBuyCnt + 1)
#    BossHurtMng.NotifyAttackBossCnt(curPlayer)
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    killBossMark = clientData.KillBossMark
    buyTimesVIPPriID = IpyGameDataPY.GetFuncEvalCfg("KillBossCntLimit1", 1, {}).get(killBossMark)
    if not buyTimesVIPPriID:
        return
    canBuyCnt = PlayerVip.GetPrivilegeValue(curPlayer, buyTimesVIPPriID)
    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, 0)
    playerID = curPlayer.GetPlayerID()
    if hasBuyCnt >= canBuyCnt:
        GameWorld.DebugLog('购买BOSS可击杀次数, 已达到今日最大可购买次数,hasBuyCnt=%s, canBuyCnt=%s'%(hasBuyCnt, canBuyCnt), playerID)
        return
    canKillCnt, dayTimesLimit = BossHurtMng.GetCanKillBossCnt(curPlayer, killBossMark)
    if canKillCnt >= dayTimesLimit:
        GameWorld.DebugLog('购买BOSS可击杀次数, 剩余次数已满!,canKillCnt=%s'%(canKillCnt), playerID)
        return
    costGold = IpyGameDataPY.GetFuncEvalCfg("KillBossCntLimit1", 2, {}).get(killBossMark)
    if not costGold:
        return
    infoDict = {"index":killBossMark, ChConfig.Def_Cost_Reason_SonKey:killBossMark}
    isOK = PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGold,
                                  ChConfig.Def_Cost_BuyKillBossCnt, infoDict)
    if not isOK:
        return
    # 增加购买次数
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, hasBuyCnt + 1)
    BossHurtMng.NotifyAttackBossCnt(curPlayer, killBossMark)
    return
#// A2 23 NPC秀结束 #tagCMNPCShowEnd
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
@@ -99,12 +99,24 @@
    giveCnt = 0
    if perDecomposeCnt and updDecomposeCnt >= perDecomposeCnt:
        awardRateList = IpyGameDataPY.GetFuncEvalCfg('EquipDecomposeAward', 2)
        resetItemIDList = IpyGameDataPY.GetFuncEvalCfg('EquipDecomposeAward', 3)
        giveCnt = updDecomposeCnt/perDecomposeCnt
        giveItemIDDict = {}
        for _ in xrange(giveCnt):
            itmeID = GameWorld.GetResultByRandomList(awardRateList)
            if not itmeID:
                continue
            if itmeID in resetItemIDList: #给玩家拥有最少的材料
                minCnt, rItemID = 0, 0
                for itemid in resetItemIDList:
                    cnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemid)
                    cnt += ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptWarehouse, itemid)
                    if cnt and not minCnt or cnt < minCnt:
                        minCnt = cnt
                        rItemID = itemid
                if rItemID:
                    itmeID = rItemID
            giveItemIDDict[itmeID] = giveItemIDDict.get(itmeID, 0) + 1
        if giveItemIDDict:
            for giveItemID, itemCnt in giveItemIDDict.items(): 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py
@@ -34,7 +34,7 @@
import PlayerActivity
import PlayerSuccess
import PyGameData
import AttackCommon
import BossHurtMng
import copy
import datetime
@@ -159,7 +159,7 @@
                if curDayTimes:
                    curDayTimes = dayTimesLimit
            elif dailyID is ShareDefine.DailyActionID_WorldBOSS:
                canKillCnt, dayTimesLimit = AttackCommon.GetBossCanKillRemainCnt(curPlayer, 0)
                canKillCnt, dayTimesLimit = BossHurtMng.GetCanKillBossCnt(curPlayer, 0)
                curDayTimes = dayTimesLimit - canKillCnt
            elif dailyID is ShareDefine.DailyActionID_SealDemon:
                #找回前先立即刷新一次
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -195,11 +195,11 @@
    maxCnt = FBCommon.GetEnterFBMaxCnt(curPlayer, ChConfig.Def_FBMapID_ZhuXianBoss)
    curPlayerPropDict['CntMark_%s' % ChConfig.Def_FBMapID_ZhuXianBoss] = max(maxCnt - enterCnt, 0)
    # 世界BOSS剩余次数
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_World] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_World)
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_World] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_World)[0]
    # BOSS之家剩余次数
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Home] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Home)
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Home] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Home)[0]
    # 神兽BOSS剩余次数
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Dogz] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Dogz)
    curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Dogz] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Dogz)[0]
    
    #-----------
    #扩展属性缓存