From b7b7f007f2905960394423df9f7c1c0f2112189f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 12 二月 2019 11:30:24 +0800
Subject: [PATCH] 5819 【后端】【1.6】运营活动支持对应不同的职业和世界等级(限时礼包、限时特惠)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 8 ++--
PySysDB/PySysDBPY.h | 4 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py | 23 ++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py | 18 +++++----
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3 +
7 files changed, 37 insertions(+), 24 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 790c6c4..17088d8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -824,7 +824,7 @@
WORD AdvanceMinutes; //前端提前X分钟展示活动
WORD LVLimit; //限制等级
BYTE IsDayReset; //是否每天重置
- list ShopTypeList; //商店类型列表
+ dict ShopTypeList; //商店类型列表
char MailKey; //活动更新时发送邮件key
list MailItemPrize; //活动更新时发送邮件奖励物品
};
@@ -1220,7 +1220,7 @@
WORD AdvanceMinutes; //前端提前X分钟展示活动
WORD LVLimit; //限制等级
BYTE IsDayReset; //是否每天重置
- list GiftbagTypeList; //礼包类型列表
+ dict GiftbagTypeList; //礼包类型列表
char MailKey; //活动更新时发送邮件key
list MailItemPrize; //活动更新时发送邮件奖励物品
};
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 9a35d89..7328533 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -251,7 +251,8 @@
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
OperationActionName_BossReborn, OperationActionName_TotalRecharge,
- OperationActionName_CostRebate, ]
+ OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
+ OperationActionName_SpringSale,]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
index 2e88be0..24e6d1c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
@@ -408,7 +408,7 @@
if not state:
GameWorld.DebugLog("限时特惠非活动中!state=%s" % (state), curPlayer.GetPlayerID())
return
- shopTypeList = PlayerSpringSale.GetShopTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ shopTypeList = PlayerSpringSale.GetShopTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
if not shopTypeList:
return
actShopType = shopTypeList[-1] if state > len(shopTypeList) else shopTypeList[state - 1]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 31c8a2a..046d524 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -691,7 +691,7 @@
("WORD", "AdvanceMinutes", 0),
("WORD", "LVLimit", 0),
("BYTE", "IsDayReset", 0),
- ("list", "ShopTypeList", 0),
+ ("dict", "ShopTypeList", 0),
("char", "MailKey", 0),
("list", "MailItemPrize", 0),
),
@@ -982,7 +982,7 @@
("WORD", "AdvanceMinutes", 0),
("WORD", "LVLimit", 0),
("BYTE", "IsDayReset", 0),
- ("list", "GiftbagTypeList", 0),
+ ("dict", "GiftbagTypeList", 0),
("char", "MailKey", 0),
("list", "MailItemPrize", 0),
),
@@ -2718,7 +2718,7 @@
self.AdvanceMinutes = 0
self.LVLimit = 0
self.IsDayReset = 0
- self.ShopTypeList = []
+ self.ShopTypeList = {}
self.MailKey = ""
self.MailItemPrize = []
return
@@ -3334,7 +3334,7 @@
self.AdvanceMinutes = 0
self.LVLimit = 0
self.IsDayReset = 0
- self.GiftbagTypeList = []
+ self.GiftbagTypeList = {}
self.MailKey = ""
self.MailItemPrize = []
return
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 bca97e7..0545836 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
@@ -30,13 +30,13 @@
import ChConfig
-def GetGiftbagTypeList(cfgID, dayIndex):
+def GetGiftbagTypeList(cfgID, dayIndex, woldLV):
if cfgID == None or dayIndex == None:
return []
ipyData = IpyGameDataPY.GetIpyGameData("ActFlashGiftbag", cfgID)
if not ipyData:
return []
- giftbagTypeList = ipyData.GetGiftbagTypeList()
+ giftbagTypeList = GameWorld.GetDictValueByRangeKey(ipyData.GetGiftbagTypeList(), woldLV, [])
todayGiftbag = giftbagTypeList[-1] if dayIndex >= len(giftbagTypeList) else giftbagTypeList[dayIndex]
return todayGiftbag
@@ -65,7 +65,7 @@
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagID) # 玩家身上的活动ID
- giftbagTypeList = [] if not cfgID else GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ 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
@@ -123,7 +123,7 @@
DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag state is 0!", addDRDict)
return
- giftbagTypeList = GetGiftbagTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ 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
@@ -143,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)
@@ -176,6 +176,15 @@
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=[]):
## 通知限时礼包玩家活动信息
@@ -221,7 +230,7 @@
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
if not cfgID:
return
- giftbagTypeList = GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ giftbagTypeList = GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
if not giftbagTypeList:
return
@@ -274,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(orderIpyData.GetGiftItemList(), curPlayer.GetJob()):
item = ChPyNetSendPack.tagMCFlashGiftbagItem()
item.ItemID = itemID
item.ItemCount = itemCount
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
index 374e2d7..811a4f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
@@ -25,13 +25,13 @@
import GameWorld
import ChConfig
-def GetShopTypeList(cfgID, dayIndex):
+def GetShopTypeList(cfgID, dayIndex, woldLV):
if cfgID == None or dayIndex == None:
return []
ipyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID)
if not ipyData:
return []
- shopTypeList = ipyData.GetShopTypeList()
+ shopTypeList = GameWorld.GetDictValueByRangeKey(ipyData.GetShopTypeList(), woldLV, [])
todayShopType = shopTypeList[-1] if dayIndex >= len(shopTypeList) else shopTypeList[dayIndex]
return todayShopType
@@ -58,12 +58,12 @@
actID = actInfo.get(ShareDefine.ActKey_ID, 0)
state = actInfo.get(ShareDefine.ActKey_State, 0)
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-
+ woldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleID) # 玩家身上的活动ID
isReset = False
if actID != playerActID:
isReset = True
- shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), woldLV)
FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, 0)
@@ -97,7 +97,7 @@
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
if not cfgID:
return
- shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
if not shopTypeList:
return
@@ -110,7 +110,7 @@
if len(startTimeList) != len(endTimeList):
GameWorld.ErrLog("限时特惠开关时间时分配置错误!cfgID=%s" % cfgID)
return
-
+ job = curPlayer.GetJob()
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
packInfo = ChPyNetSendPack.tagMCSpringSaleInfo()
packInfo.StartDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetStartDate(), openServerDay)
@@ -145,12 +145,14 @@
giftBag.ItemInfo = []
itemList = [[itemIpyData.GetItemID(), itemIpyData.GetItemCnt(), itemIpyData.GetIsBind()]]
itemList += itemIpyData.GetItemListEx()
+ jobItemList = itemIpyData.GetJobItem()
for itemID, itemCount, isBind in itemList:
item = ChPyNetSendPack.tagMCSpringSaleItem()
- item.ItemID = itemID
+ jobItemID = FunctionNPCCommon.GetShopJobItem(job, itemID, jobItemList)
+ item.ItemID = jobItemID
item.ItemCount = itemCount
item.IsBind = isBind
- item.IsMainItem = int(itemID == itemIpyData.GetMainItemID())
+ item.IsMainItem = int(itemID == FunctionNPCCommon.GetShopJobItem(job, itemIpyData.GetMainItemID(), jobItemList))
giftBag.ItemInfo.append(item)
giftBag.GiftItemCount = len(giftBag.ItemInfo)
shop.GiftbagInfo.append(giftBag)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 9a35d89..7328533 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -251,7 +251,8 @@
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
OperationActionName_BossReborn, OperationActionName_TotalRecharge,
- OperationActionName_CostRebate, ]
+ OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
+ OperationActionName_SpringSale,]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
--
Gitblit v1.8.0