From 6544af7b584112da8dc482cb29dacfb89d750ba6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 七月 2019 19:05:09 +0800
Subject: [PATCH] 8154 【后端】【主干】【300】拍卖行优化(可根据开服天或指定日期上架系统拍品)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py | 120 ++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 77 insertions(+), 43 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
index 3a704b3..45d0497 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
@@ -24,19 +24,24 @@
import DataRecordPack
import ItemControler
import IPY_GameWorld
+import PlayerWeekParty
import ItemCommon
import GameWorld
import ChConfig
+def GetGiftbagTypeList(cfgID, dayIndex, woldLV):
+ if cfgID == None or dayIndex == None:
+ return []
+ ipyData = IpyGameDataPY.GetIpyGameData("ActFlashGiftbag", cfgID)
+ if not ipyData:
+ return []
+ giftbagTypeList = GameWorld.GetDictValueByRangeKey(ipyData.GetGiftbagTypeList(), woldLV, [])
+ todayGiftbag = giftbagTypeList[-1] if dayIndex >= len(giftbagTypeList) else giftbagTypeList[dayIndex]
+ return todayGiftbag
+
def OnPlayerLogin(curPlayer):
- isReset = __CheckPlayerFlashGiftbagAction(curPlayer)
- if not isReset:
- actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
- # 活动中同步活动信息
- if actInfo.get(ShareDefine.ActKey_State):
- SyncFlashGiftbagBuyCount(curPlayer, giftbagTypeList=actInfo.get(ShareDefine.ActKey_GiftbagTypeList, []))
- Sync_FlashGiftbagActionInfo(curPlayer)
+ __CheckPlayerFlashGiftbagAction(curPlayer)
return
def RefreshFlashGiftbagActionInfo():
@@ -57,26 +62,36 @@
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
actID = actInfo.get(ShareDefine.ActKey_ID, 0)
state = actInfo.get(ShareDefine.ActKey_State, 0)
- giftbagTypeList = actInfo.get(ShareDefine.ActKey_GiftbagTypeList, [])
- #if not state or not giftbagTypeList:
- # return
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagID) # 玩家身上的活动ID
-
- # 活动ID 相同的话不处理
- if actID == playerActID:
+ giftbagTypeList = [] if not cfgID else GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
+ isReset = False
+ if actID != playerActID:
+ isReset = True
+ __ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID, actID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState, 0)
+ GameWorld.DebugLog("限时礼包重置! actID=%s,playerActID=%s,state=%s,giftbagTypeList=%s" % (actID, playerActID, state, giftbagTypeList), playerID)
+ Sync_FlashGiftbagActionInfo(curPlayer)
+ else:
GameWorld.DebugLog("限时礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
- return
-
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID, actID)
- ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList)
-
- GameWorld.DebugLog("限时礼包重置! actID=%s,playerActID=%s,state=%s,giftbagTypeList=%s" % (actID, playerActID, state, giftbagTypeList), playerID)
-
- Sync_FlashGiftbagActionInfo(curPlayer)
- return True
+
+ playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagMailState) # 玩家身上的活动提醒邮件状态
+ if actID and state and state != playerMailState:
+ flashGiftbagIpyData = IpyGameDataPY.GetIpyGameData("ActFlashGiftbag", cfgID)
+ if flashGiftbagIpyData and flashGiftbagIpyData.GetMailKey() and curPlayer.GetLV() >= flashGiftbagIpyData.GetLVLimit():
+ PlayerControl.SendMailByKey(flashGiftbagIpyData.GetMailKey(), [playerID], flashGiftbagIpyData.GetMailItemPrize())
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState, state)
+ GameWorld.DebugLog(" 发送新限时礼包邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID)
+
+ if not isReset and cfgID:
+ if giftbagTypeList:
+ SyncFlashGiftbagBuyCount(curPlayer, giftbagTypeList=giftbagTypeList)
+ Sync_FlashGiftbagActionInfo(curPlayer)
+ return isReset
-def ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList):
+def __ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList):
##重置限时礼包限购物品次数
syncIDList = []
ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -108,7 +123,7 @@
DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag state is 0!", addDRDict)
return
- giftbagTypeList = actInfo.get(ShareDefine.ActKey_GiftbagTypeList, [])
+ giftbagTypeList = GetGiftbagTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
if not giftbagTypeList:
DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag GiftbagTypeList is null!", addDRDict)
return
@@ -128,7 +143,7 @@
return
giftbagID = giftbagIpyData.GetGiftbagID()
- giftItemList = giftbagIpyData.GetGiftItemList()
+ giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob())
addDRDict.update({"giftbagID":giftbagID, "giftItemList":giftItemList})
buyCountLimit = giftbagIpyData.GetBuyCountLimit()
buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % giftbagID)
@@ -147,17 +162,29 @@
PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giftItemList)
else:
for itemID, itemCount, isBind in giftItemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem],
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem],
event=[ChConfig.ItemGive_CTG, True, addDRDict])
-
+
+ # 取玩家APPID,混服使用
+ appID = GameWorld.GetPlayerPlatform(curPlayer)
notifyKey = giftbagIpyData.GetNotifyKey()
if notifyKey:
- orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID)
+ orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID, appID)
rmb = 0 if not orderIpyData else int(orderIpyData.GetPayRMBNum())
PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), rmb, giftbagIpyData.GetMainItemID()])
-
+
SyncFlashGiftbagBuyCount(curPlayer, [giftbagID])
+ PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GiftBag, actGiftbagType, False)
return True
+
+def __GetJobItemList(itemList, job):
+ jobItemList = []
+ for itemID, itemCnt, isBind in itemList:
+ if type(itemID) == int:
+ jobItemList.append([itemID, itemCnt, isBind])
+ elif job in itemID:
+ jobItemList.append([itemID[job], itemCnt, isBind])
+ return jobItemList
def SyncFlashGiftbagBuyCount(curPlayer, syncIDList=[], giftbagTypeList=[]):
## 通知限时礼包玩家活动信息
@@ -196,13 +223,16 @@
if not actInfo:
return
- if not actInfo.get(ShareDefine.ActKey_State):
- return
+ #需要提前通知,所以去掉此限制
+ #if not actInfo.get(ShareDefine.ActKey_State):
+ # return
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
- giftbagTypeList = actInfo.get(ShareDefine.ActKey_GiftbagTypeList, 0)
+ if not cfgID:
+ return
+ giftbagTypeList = GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
- if not cfgID or not giftbagTypeList:
+ if not giftbagTypeList:
return
flashGiftbagIpyData = IpyGameDataPY.GetIpyGameData("ActFlashGiftbag", cfgID)
@@ -215,9 +245,14 @@
GameWorld.ErrLog("限时礼包开关时间时分配置错误!cfgID=%s" % cfgID)
return
+ # 取玩家APPID,混服使用
+ appID = GameWorld.GetPlayerPlatform(curPlayer)
+
+ openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
packInfo = ChPyNetSendPack.tagMCFlashGiftbagInfo()
- packInfo.StartDate = flashGiftbagIpyData.GetStartDate()
- packInfo.EndtDate = flashGiftbagIpyData.GetEndDate()
+ packInfo.StartDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetStartDate(), openServerDay)
+ packInfo.EndtDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetEndDate(), openServerDay)
+ packInfo.AdvanceMinutes = flashGiftbagIpyData.GetAdvanceMinutes()
packInfo.ActivityTime = []
for i, startTime in enumerate(startTimeList):
timeInfo = ChPyNetSendPack.tagMCFlashGiftbagTime()
@@ -239,7 +274,7 @@
for giftIpyData in giftbagIpyDataList:
giftbagID = giftIpyData.GetGiftbagID()
- orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID)
+ orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID, appID)
giftBag = ChPyNetSendPack.tagMCFlashGiftbag()
giftBag.GiftID = giftbagID
giftBag.OrderInfo = "" if not orderIpyData else orderIpyData.GetOrderInfo()
@@ -248,7 +283,7 @@
giftBag.RMB = 0 if not orderIpyData else int(orderIpyData.GetPayRMBNum())
giftBag.RMBOriginal = giftIpyData.GetOriginalRMB()
giftBag.ItemInfo = []
- for itemID, itemCount, isBind in giftIpyData.GetGiftItemList():
+ for itemID, itemCount, isBind in __GetJobItemList(giftIpyData.GetGiftItemList(), curPlayer.GetJob()):
item = ChPyNetSendPack.tagMCFlashGiftbagItem()
item.ItemID = itemID
item.ItemCount = itemCount
@@ -265,21 +300,20 @@
NetPackCommon.SendFakePack(curPlayer, packInfo)
return
-def GetFlashGiftbagIDOrderInfoIpyData(giftbagID):
+def GetFlashGiftbagIDOrderInfoIpyData(giftbagID, appID):
## 获取礼包ID对应实际售价
key = "FlashGiftbagIDRMB"
FlashGiftbagIDRMBDict = IpyGameDataPY.GetConfigEx(key)
if not FlashGiftbagIDRMBDict:
FlashGiftbagIDRMBDict = {}
- appID = GameWorld.GetPlatform()
ipyDataMgr = IpyGameDataPY.IPY_Data()
for i in xrange(ipyDataMgr.GetOrderInfoCount()):
ipyData = ipyDataMgr.GetOrderInfoByIndex(i)
- if ipyData.GetAppID() != appID:
- continue
+ #if ipyData.GetAppID() != appID:
+ # continue
if not ipyData.GetGiftbagID():
continue
- FlashGiftbagIDRMBDict[ipyData.GetGiftbagID()] = ipyData
+ FlashGiftbagIDRMBDict[(ipyData.GetGiftbagID(), ipyData.GetAppID())] = ipyData
IpyGameDataPY.SetConfigEx(key, FlashGiftbagIDRMBDict)
- return FlashGiftbagIDRMBDict.get(giftbagID)
+ return FlashGiftbagIDRMBDict.get((giftbagID, appID))
--
Gitblit v1.8.0