7699 【2.0.200】【后端】VIP功能新BOSS之家购买次数 7724 【后端】【主干】分解获得仙丹材料的体验优化
| | |
| | | ("BossType", c_ubyte), #编号类型0-世界boss 1-boss之家
|
| | | ("KillCnt", c_int), #击杀次数
|
| | | ("ItemAddCnt", c_int), #物品增加次数
|
| | | ("BuyCnt", c_ubyte), #购买次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BossType = 0
|
| | | self.KillCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.BuyCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | 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
|
| | |
|
| | |
| | | import FamilyRobBoss
|
| | | import FBCommon
|
| | | import ChNPC
|
| | | import BossHurtMng
|
| | |
|
| | | import datetime
|
| | | import math
|
| | |
| | | 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):
|
| | |
| | | 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次数是否已满 '''
|
| | |
| | | Def_Cost_BuyDailyActionCnt, # 购买活动次数
|
| | | Def_Cost_FBBuyBuff, # 副本买buff
|
| | | Def_Cost_CreatFamily, # 创建仙盟
|
| | | Def_Cost_BuyKillBossCnt, #购买boss次数
|
| | | #-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
|
| | | Def_Cost_RefreshArrestTask, # 刷新悬赏任务
|
| | | Def_Cost_OffLineExp, # 兑换离线经验
|
| | |
| | | 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
|
| | |
|
| | |
| | | Def_Cost_BuyDailyActionCnt:"BuyDailyActionCnt",
|
| | | Def_Cost_FBBuyBuff:"FBBuyBuff",
|
| | | Def_Cost_CreatFamily:"CreatFamily",
|
| | | Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
|
| | | }
|
| | | ## -----------------------------------------------------
|
| | |
|
| | |
| | | VIPPrivilege_XianyuanCoinAddPer, #34 仙缘币获得倍率加成(万分比)
|
| | | VIPPrivilege_35, #35 诛仙BOSS购买次数 - 副本总表统一处理
|
| | | VIPPrivilege_36, #36 仙丹批量炼制
|
| | | ) = range(1, 37)
|
| | | VIPPrivilege_BossHomeBuy, #37 BOSS之家购买次数
|
| | | ) = range(1, 38)
|
| | |
|
| | |
|
| | | (
|
| | |
| | | ("BossType", c_ubyte), #编号类型0-世界boss 1-boss之家
|
| | | ("KillCnt", c_int), #击杀次数
|
| | | ("ItemAddCnt", c_int), #物品增加次数
|
| | | ("BuyCnt", c_ubyte), #购买次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BossType = 0
|
| | | self.KillCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.BuyCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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)
|
| | |
| | |
|
| | | # 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
|
| | |
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | #};
|
| | | ## 购买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
|
| | |
| | | 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():
|
| | |
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import PyGameData
|
| | | import AttackCommon
|
| | | import BossHurtMng
|
| | |
|
| | | import copy
|
| | | import datetime
|
| | |
| | | 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:
|
| | | #找回前先立即刷新一次
|
| | |
| | | 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]
|
| | |
|
| | | #-----------
|
| | | #扩展属性缓存
|