From a7d7e5fc4c17ab455ce3a5118fb0c529241454f1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 20 一月 2021 11:07:34 +0800
Subject: [PATCH] 8701 【主干】【后端】活动相关的充值界面显示优化(跨服充值排行活动支持分);
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py | 108 ++++++++++++++++++++++++++++-------------------------
1 files changed, 57 insertions(+), 51 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
index c5c510a..fe910da 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
@@ -25,6 +25,7 @@
import PlayerControl
import ChConfig
import FBCommon
+import ItemControler
FBDict_SyncFBNPC = 'SyncFBNPC' #是否需要同步副本NPC
@@ -131,35 +132,18 @@
curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)
PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
- boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
- refreshMapNPCDict = IpyGameDataPY.GetFuncEvalCfg("CrossGrasslandCfg", 2)
- refreshCount, npcIDRateList = refreshMapNPCDict.get(mapID, [0, []])
- npcIDList = [rate[1] for rate in npcIDRateList]
if curState == PlayerFairyDomain.FDEventState_CanVisit:
- # 随机采集物数量
- for npcID in npcIDList:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GrasslandNPCCount % npcID, 0)
- npcCountDict = {}
- # {寻访次数:{mapID:{npcID:个数, ...}, ...}, ...}
- refreshMapNPCDictAppoint = IpyGameDataPY.GetFuncEvalCfg("CrossGrasslandCfg", 3)
- fairyDomainVisitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
- if fairyDomainVisitCnt in refreshMapNPCDictAppoint:
- appointRefreshMapNPCDict = refreshMapNPCDictAppoint[fairyDomainVisitCnt]
- npcCountDict = appointRefreshMapNPCDict.get(mapID, {})
- if not npcCountDict:
- for _ in xrange(refreshCount):
- npcID = GameWorld.GetResultByRandomList(npcIDRateList)
- if npcID:
- npcCount = npcCountDict.get(npcID, 0) + 1
- npcCountDict[npcID] = npcCount
-
+ refreshMapNPCDict = IpyGameDataPY.GetFuncEvalCfg("CrossGrasslandCfg", 2)
+ npcCountDict = refreshMapNPCDict.get((mapID, lineID), {})
for npcID, npcCount in npcCountDict.items():
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GrasslandNPCCount % npcID, npcCount)
if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID)
-
- SyncCustomSceneNPCCount(curPlayer, mapID)
+ else:
+ DoCheckUpdateGrasslandEnd(curPlayer)
+
+ SyncCustomSceneNPCCount(curPlayer, mapID, lineID)
if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
if boxNPCID:
@@ -170,31 +154,36 @@
## 自定义场景采集OK,需自带是否允许采集的判断
def OnCustomSceneCollectOK(curPlayer, mapID, lineID, npcID):
curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)
- return curState == PlayerFairyDomain.FDEventState_Visiting
+ if curState != PlayerFairyDomain.FDEventState_Visiting:
+ return False
+ curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GrasslandNPCCount % npcID)
+ if not curCount:
+ return False
+ return True
def DecCustomSceneNPCCount(curPlayer, npcID):
## 减少草园自定义场景NPC,默认减少一个
- mapID = GetGrasslandMapID(curPlayer)[0]
+ mapID, lineID = GetGrasslandMapID(curPlayer)
if not mapID:
return
curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GrasslandNPCCount % npcID)
updCount = max(0, curCount - 1)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GrasslandNPCCount % npcID, updCount)
- SyncCustomSceneNPCCount(curPlayer, mapID)
+ SyncCustomSceneNPCCount(curPlayer, mapID, lineID)
return
-def SyncCustomSceneNPCCount(curPlayer, mapID):
+def SyncCustomSceneNPCCount(curPlayer, mapID, lineID):
## 通知自定义场景NPC数
refreshMapNPCDict = IpyGameDataPY.GetFuncEvalCfg("CrossGrasslandCfg", 2)
- npcIDRateList = refreshMapNPCDict.get(mapID, [0, []])[1]
- npcCountDict = {}
- for npcRate in npcIDRateList:
- npcID = npcRate[1]
- npcCountDict[npcID] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GrasslandNPCCount % npcID)
+ npcCountDict = refreshMapNPCDict.get((mapID, lineID), {})
+ npcNowCountDict = {}
+ for npcID in npcCountDict.keys():
+ npcNowCountDict[npcID] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GrasslandNPCCount % npcID)
if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
- npcCountDict[boxNPCID] = 1
- NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcCountDict)
+ if boxNPCID:
+ npcNowCountDict[boxNPCID] = 1
+ NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcNowCountDict)
return
def RecordGrasslandAward(curPlayer, addItemList):
@@ -257,25 +246,32 @@
return
# 采集次数是否已用完
- collNPCIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("MapRefreshNPC", mapID)
- if not collNPCIpyDataList:
- return
-
- for collIpyData in collNPCIpyDataList:
- npcIDList = collIpyData.GetNPCIDList()
- for npcID in npcIDList:
- collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)
- if not collectNPCIpyData:
- return
- limitMaxTime = collectNPCIpyData.GetMaxCollectCount()
- totalCollTime = NPCCommon.GetTodayCollectCount(curPlayer, npcID)
- if totalCollTime < limitMaxTime:
- GameWorld.DebugLog("草园NPC采集次数未用完! npcID=%s,totalCollTime=%s < limitMaxTime=%s" % (npcID, totalCollTime, limitMaxTime))
- return
+ if mapID == PlayerControl.GetCustomMapID(curPlayer):
+ refreshMapNPCDict = IpyGameDataPY.GetFuncEvalCfg("CrossGrasslandCfg", 2)
+ npcCountDict = refreshMapNPCDict.get((mapID, lineID), {})
+ npcIDList = npcCountDict.keys()
+ else:
+ collNPCIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("MapRefreshNPC", mapID)
+ if not collNPCIpyDataList:
+ return
+
+ npcIDList = []
+ for collIpyData in collNPCIpyDataList:
+ npcIDList += collIpyData.GetNPCIDList()
+
+ for npcID in npcIDList:
+ collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)
+ if not collectNPCIpyData:
+ return
+ limitMaxTime = collectNPCIpyData.GetMaxCollectCount()
+ totalCollTime = NPCCommon.GetTodayCollectCount(curPlayer, npcID)
+ if totalCollTime < limitMaxTime:
+ GameWorld.DebugLog("草园NPC采集次数未用完! npcID=%s,totalCollTime=%s < limitMaxTime=%s" % (npcID, totalCollTime, limitMaxTime))
+ return
# 宝箱怪攻击次数是否已用完
- if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
- boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
+ boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
+ if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian and boxNPCID:
boxNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TreasureNPC", boxNPCID)
if not boxNPCIpyData:
return
@@ -301,6 +297,16 @@
isAuctionItem = 0
itemID, itemCount = itemCountInfo/100, itemCountInfo%100
awardItemList.append([itemID, itemCount, isAuctionItem])
+ extraAward = [] #额外物品奖励
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
+ if ipyData:
+ fdEventID = ipyData.GetID()
+ extraAward = PlayerFairyDomain.GetFairyAppointAward(curPlayer, fdEventID)
+ if not extraAward:
+ extraAward = FBCommon.GetFBLineReward(mapID, lineID)
+ if extraAward:
+ ItemControler.GivePlayerItemOrMail(curPlayer, extraAward)
+ awardItemList += extraAward
overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)}
FBCommon.NotifyFBOver(curPlayer, mapID, lineID, 1, overDict)
ResetGrasslandAwardRecord(curPlayer)
--
Gitblit v1.8.0