From 7cbe12e27c113622f8315600059211ab37093731 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 02 七月 2019 16:24:32 +0800
Subject: [PATCH] 7699 【2.0.200】【后端】VIP功能新BOSS之家购买次数 7724 【后端】【主干】分解获得仙丹材料的体验优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py | 9 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 8 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py | 12 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 57 +++++++++---------
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 8 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 13 ---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 7 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 6 +-
10 files changed, 72 insertions(+), 56 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index e1abbfd..aac90ff 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 5ffddf5..c1d7228 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/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次数是否已满 '''
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 566fa0a..87f9f97 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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)
(
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index e1abbfd..aac90ff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
index 87ee2c5..1996d44 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py
index 535c4ad..af755ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_ResetBossKillCnt.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 13ea2ee..054ad18 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
index 7d8dc41..abbe155 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
+++ b/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():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py
index 28c88b7..4de6d95 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py
+++ b/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:
#找回前先立即刷新一次
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 1fdd34e..a075bef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/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]
#-----------
#扩展属性缓存
--
Gitblit v1.8.0