|  |  |  | 
|---|
|  |  |  | import GameWorld | 
|---|
|  |  |  | import ChConfig | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetShopTypeList(cfgID, dayIndex): | 
|---|
|  |  |  | if cfgID == None or dayIndex == None: | 
|---|
|  |  |  | return [] | 
|---|
|  |  |  | ipyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID) | 
|---|
|  |  |  | if not ipyData: | 
|---|
|  |  |  | return [] | 
|---|
|  |  |  | shopTypeList = ipyData.GetShopTypeList() | 
|---|
|  |  |  | todayShopType = shopTypeList[-1] if dayIndex >= len(shopTypeList) else shopTypeList[dayIndex] | 
|---|
|  |  |  | return todayShopType | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OnPlayerLogin(curPlayer): | 
|---|
|  |  |  | isReset = __CheckPlayerSpringSaleAction(curPlayer) | 
|---|
|  |  |  | if not isReset: | 
|---|
|  |  |  | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {}) | 
|---|
|  |  |  | # 活动中同步活动信息 | 
|---|
|  |  |  | if actInfo.get(ShareDefine.ActKey_State): | 
|---|
|  |  |  | Sync_SpringSaleActionInfo(curPlayer) | 
|---|
|  |  |  | __CheckPlayerSpringSaleAction(curPlayer) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def RefreshSpringSaleActionInfo(): | 
|---|
|  |  |  | 
|---|
|  |  |  | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {}) | 
|---|
|  |  |  | actID = actInfo.get(ShareDefine.ActKey_ID, 0) | 
|---|
|  |  |  | state = actInfo.get(ShareDefine.ActKey_State, 0) | 
|---|
|  |  |  | shopTypeList = actInfo.get(ShareDefine.ActKey_ShopTypeList, []) | 
|---|
|  |  |  | #if not state or not shopTypeList: | 
|---|
|  |  |  | #    return | 
|---|
|  |  |  | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleID) # 玩家身上的活动ID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 活动ID 相同的话不处理 | 
|---|
|  |  |  | if actID == playerActID: | 
|---|
|  |  |  | GameWorld.DebugLog("限时特惠活动ID不变,不处理!", curPlayer.GetPlayerID()) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID) | 
|---|
|  |  |  | FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | GameWorld.DebugLog("限时特惠重置! actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actID, playerActID, state, shopTypeList), playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Sync_SpringSaleActionInfo(curPlayer) | 
|---|
|  |  |  | return True | 
|---|
|  |  |  | isReset = False | 
|---|
|  |  |  | if actID != playerActID: | 
|---|
|  |  |  | isReset = True | 
|---|
|  |  |  | shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0)) | 
|---|
|  |  |  | FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, 0) | 
|---|
|  |  |  | #Sync_SpringSaleActionInfo(curPlayer) | 
|---|
|  |  |  | GameWorld.DebugLog("限时特惠重置! actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actID, playerActID, state, shopTypeList), playerID) | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | GameWorld.DebugLog("限时特惠活动ID不变,不处理!", playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleMailState) # 玩家身上的活动提醒邮件状态 | 
|---|
|  |  |  | if actID and state and state != playerMailState: | 
|---|
|  |  |  | springSaleIpyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID) | 
|---|
|  |  |  | if springSaleIpyData and springSaleIpyData.GetMailKey() and curPlayer.GetLV() >= springSaleIpyData.GetLVLimit(): | 
|---|
|  |  |  | PlayerControl.SendMailByKey(springSaleIpyData.GetMailKey(), [playerID], springSaleIpyData.GetMailItemPrize()) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, state) | 
|---|
|  |  |  | GameWorld.DebugLog("    发送新限时特惠邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if cfgID: | 
|---|
|  |  |  | Sync_SpringSaleActionInfo(curPlayer) | 
|---|
|  |  |  | return isReset | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Sync_SpringSaleActionInfo(curPlayer): | 
|---|
|  |  |  | ## 通知限时特惠活动信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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) | 
|---|
|  |  |  | shopTypeList = actInfo.get(ShareDefine.ActKey_ShopTypeList, 0) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not cfgID or not shopTypeList: | 
|---|
|  |  |  | if not cfgID: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0)) | 
|---|
|  |  |  | if not shopTypeList: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | springSaleIpyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID) | 
|---|
|  |  |  | 
|---|
|  |  |  | GameWorld.ErrLog("限时特惠开关时间时分配置错误!cfgID=%s" % cfgID) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 | 
|---|
|  |  |  | packInfo = ChPyNetSendPack.tagMCSpringSaleInfo() | 
|---|
|  |  |  | packInfo.StartDate = springSaleIpyData.GetStartDate() | 
|---|
|  |  |  | packInfo.EndtDate = springSaleIpyData.GetEndDate() | 
|---|
|  |  |  | packInfo.StartDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetStartDate(), openServerDay) | 
|---|
|  |  |  | packInfo.EndtDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetEndDate(), openServerDay) | 
|---|
|  |  |  | packInfo.AdvanceMinutes = springSaleIpyData.GetAdvanceMinutes() | 
|---|
|  |  |  | packInfo.ActivityTime = [] | 
|---|
|  |  |  | for i, startTime in enumerate(startTimeList): | 
|---|
|  |  |  | timeInfo = ChPyNetSendPack.tagMCSpringSaleTime() | 
|---|