| | |
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | | import PlayerWeekParty
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import CommFunc
|
| | |
| | | return todayGiftbag
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | __CheckPlayerFlashGiftbagAction(curPlayer)
|
| | | |
| | | TransferPlayerActDBKeyValue(curPlayer)
|
| | | |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | isReset = __CheckPlayerFlashGiftbagAction(curPlayer, actNum)
|
| | | if not isReset:
|
| | | pass
|
| | | |
| | | return
|
| | |
|
| | | def RefreshFlashGiftbagActionInfo():
|
| | | def TransferPlayerActDBKeyValue(curPlayer):
|
| | | ## 玩家登录时调用,旧版本玩家活动数据转移到新版本字典,线上版本维护之后的版本可删除此代码,线上版本分支 gt_1.100.4
|
| | | |
| | | ##限时礼包活动
|
| | | Def_PDict_FlashGiftbagID = "FlashGiftbagID" # 玩家身上的限时礼包活动ID,唯一标识,取活动开始日期time
|
| | | Def_PDict_FlashGiftbagBuyCount = "FlashGiftbagBuyCount_%s" # 限时礼包已购买次数,参数(礼包ID)
|
| | | Def_PDict_FlashGiftbagMailState = "FlashGiftbagMailState" # 玩家身上的活动更新提醒邮件状态
|
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(Def_PDict_FlashGiftbagID)
|
| | | if not playerActID:
|
| | | return
|
| | | |
| | | tagActNum = 10
|
| | | |
| | | playerMailState = curPlayer.NomalDictGetProperty(Def_PDict_FlashGiftbagMailState) # 玩家身上的活动提醒邮件状态
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID % tagActNum, playerActID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState % tagActNum, playerMailState)
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, Def_PDict_FlashGiftbagID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, Def_PDict_FlashGiftbagMailState, 0)
|
| | | |
| | | GameWorld.Log("限时礼包转移玩家活动字典记录: playerActID=%s,tagActNum=%s" % (playerActID, tagActNum), curPlayer.GetPlayerID())
|
| | | |
| | | ipyMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyMgr.GetFlashGiftbagCount()):
|
| | | ipyData = ipyMgr.GetFlashGiftbagByIndex(index)
|
| | | giftbagID = ipyData.GetGiftbagID()
|
| | | |
| | | buyCount = curPlayer.NomalDictGetProperty(Def_PDict_FlashGiftbagBuyCount % giftbagID)
|
| | | if buyCount <= 0:
|
| | | continue
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagBuyCount % (tagActNum, giftbagID), buyCount)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, Def_PDict_FlashGiftbagBuyCount % giftbagID, 0)
|
| | | GameWorld.Log(" 转移购买次数: giftbagID=%s,buyCount=%s" % (giftbagID, buyCount), curPlayer.GetPlayerID())
|
| | | |
| | | return
|
| | |
|
| | | def RefreshFlashGiftbagActionInfo(actNum):
|
| | | ## 收到GameServer同步的活动信息,刷新活动信息
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(index)
|
| | | if curPlayer.GetID() == 0:
|
| | | continue
|
| | | __CheckPlayerFlashGiftbagAction(curPlayer)
|
| | | __CheckPlayerFlashGiftbagAction(curPlayer, actNum)
|
| | | return
|
| | |
|
| | | def __CheckPlayerFlashGiftbagAction(curPlayer):
|
| | | def __CheckPlayerFlashGiftbagAction(curPlayer, actNum):
|
| | | ## 检查玩家显示礼包活动数据信息
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
|
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_FlashGiftbag, actNum)
|
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | |
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagID) # 玩家身上的活动ID
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagID % actNum) # 玩家身上的活动ID
|
| | | 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)
|
| | | __ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList, actNum)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID % actNum, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState % actNum, 0)
|
| | | GameWorld.DebugLog("限时礼包重置! actNum=%s,actID=%s,playerActID=%s,state=%s,giftbagTypeList=%s" |
| | | % (actNum, actID, playerActID, state, giftbagTypeList), playerID)
|
| | | Sync_FlashGiftbagActionInfo(curPlayer, actNum)
|
| | | else:
|
| | | GameWorld.DebugLog("限时礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | GameWorld.DebugLog("限时礼包活动ID不变,不处理!actNum=%s,playerActID=%s" % (actNum, playerActID), curPlayer.GetPlayerID())
|
| | |
|
| | | playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagMailState) # 玩家身上的活动提醒邮件状态
|
| | | playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagMailState % actNum) # 玩家身上的活动提醒邮件状态
|
| | | 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)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState % actNum, state)
|
| | | GameWorld.DebugLog(" 发送新限时礼包邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID)
|
| | |
|
| | | if not isReset and cfgID:
|
| | | if giftbagTypeList:
|
| | | SyncFlashGiftbagBuyCount(curPlayer, giftbagTypeList=giftbagTypeList)
|
| | | Sync_FlashGiftbagActionInfo(curPlayer)
|
| | | SyncFlashGiftbagBuyCount(curPlayer, actNum, giftbagTypeList=giftbagTypeList)
|
| | | Sync_FlashGiftbagActionInfo(curPlayer, actNum)
|
| | | return isReset
|
| | |
|
| | | def __ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList):
|
| | | def __ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList, actNum):
|
| | | ##重置限时礼包限购物品次数
|
| | | syncIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | |
| | | continue
|
| | | if giftbag.GetGiftbagType() not in giftbagTypeList:
|
| | | continue
|
| | | buyCntKey = ChConfig.Def_PDict_FlashGiftbagBuyCount % giftbag.GetGiftbagID()
|
| | | buyCntKey = ChConfig.Def_PDict_FlashGiftbagBuyCount % (actNum, giftbag.GetGiftbagID())
|
| | | if curPlayer.NomalDictGetProperty(buyCntKey) <= 0:
|
| | | continue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, buyCntKey, 0)
|
| | | syncIDList.append(giftbag.GetGiftbagID())
|
| | | if syncIDList:
|
| | | SyncFlashGiftbagBuyCount(curPlayer, syncIDList)
|
| | | SyncFlashGiftbagBuyCount(curPlayer, actNum, syncIDList)
|
| | | return
|
| | |
|
| | | def OnPlayerOrderGiftbag(curPlayer, giftbagIDList, addDRDict):
|
| | | ## 玩家订购限时礼包
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
|
| | | if not actInfo:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag action info is null!", addDRDict)
|
| | | return
|
| | |
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag state is 0!", addDRDict)
|
| | | return
|
| | | |
| | | 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
|
| | | actGiftbagType = giftbagTypeList[-1] if state > len(giftbagTypeList) else giftbagTypeList[state - 1]
|
| | | giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("FlashGiftbag", {"GiftbagType":actGiftbagType}, True, True)
|
| | | actGiftbagIDList = []
|
| | | giftbagIpyData = None
|
| | | for ipyData in giftbagIpyDataList:
|
| | | actGiftbagIDList.append(ipyData.GetGiftbagID())
|
| | | if ipyData.GetGiftbagID() in giftbagIDList:
|
| | | giftbagIpyData = ipyData
|
| | | break
|
| | | canBuy = False
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | |
|
| | | if not giftbagIpyData:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "OrderInfo giftbagIDList=%s can not found actGiftbagID in actGiftbagIDList=%s,actGiftbagType=%s" |
| | | % (giftbagIDList, actGiftbagIDList, actGiftbagType), addDRDict)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | continue
|
| | | |
| | | giftbagTypeList = GetGiftbagTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
|
| | | if not giftbagTypeList:
|
| | | continue
|
| | | actGiftbagType = giftbagTypeList[-1] if state > len(giftbagTypeList) else giftbagTypeList[state - 1]
|
| | | giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("FlashGiftbag", {"GiftbagType":actGiftbagType}, True, True)
|
| | | actGiftbagIDList = []
|
| | | giftbagIpyData = None
|
| | | for ipyData in giftbagIpyDataList:
|
| | | actGiftbagIDList.append(ipyData.GetGiftbagID())
|
| | | if ipyData.GetGiftbagID() in giftbagIDList:
|
| | | giftbagIpyData = ipyData
|
| | | break
|
| | | |
| | | if not giftbagIpyData:
|
| | | continue
|
| | | |
| | | giftbagID = giftbagIpyData.GetGiftbagID()
|
| | | giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob()) |
| | | addDRDict.update({"giftbagID":giftbagID, "giftItemList":giftItemList})
|
| | | buyCountLimit = giftbagIpyData.GetBuyCountLimit()
|
| | | buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % (actNum, giftbagID))
|
| | | if buyCountLimit:
|
| | | addDRDict.update({"buyCountLimit":buyCountLimit, "buyCount":buyCount})
|
| | | if buyCount >= buyCountLimit:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag Pay count limit !buyCount=%s,buyCountLimit=%s" |
| | | % (buyCount, buyCountLimit), addDRDict)
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagBuyCount % (actNum, giftbagID), buyCount + 1)
|
| | | |
| | | if giftItemList:
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, giftItemList, "", event=[ChConfig.ItemGive_CTG, True, addDRDict])
|
| | | |
| | | # 取玩家APPID,混服使用
|
| | | appID = GameWorld.GetPlayerPlatform(curPlayer)
|
| | | notifyKey = giftbagIpyData.GetNotifyKey()
|
| | | if notifyKey:
|
| | | orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID, appID)
|
| | | rmb = "0" if not orderIpyData else str(orderIpyData.GetPayRMBNum()) # RMB支持小数,这里直接转str广播
|
| | | PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), rmb, giftbagIpyData.GetMainItemID()])
|
| | | |
| | | SyncFlashGiftbagBuyCount(curPlayer, actNum, [giftbagID])
|
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GiftBag, actGiftbagType, False)
|
| | | |
| | | canBuy = True
|
| | | GameWorld.DebugLog(" 购买限时礼包: actNum=%s,actGiftbagType=%s,giftbagID=%s,buyCount=%s" |
| | | % (actNum, actGiftbagType, giftbagID, buyCount + 1))
|
| | | break
|
| | | |
| | | if not canBuy:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag can not buy!", addDRDict)
|
| | | return
|
| | |
|
| | | giftbagID = giftbagIpyData.GetGiftbagID()
|
| | | giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob()) |
| | | addDRDict.update({"giftbagID":giftbagID, "giftItemList":giftItemList})
|
| | | buyCountLimit = giftbagIpyData.GetBuyCountLimit()
|
| | | buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % giftbagID)
|
| | | if buyCountLimit:
|
| | | addDRDict.update({"buyCountLimit":buyCountLimit, "buyCount":buyCount})
|
| | | if buyCount >= buyCountLimit:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "FlashGiftbag Pay count limit !buyCount=%s,buyCountLimit=%s" |
| | | % (buyCount, buyCountLimit), addDRDict)
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagBuyCount % giftbagID, buyCount + 1)
|
| | | |
| | | if giftItemList:
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, giftItemList, "", event=[ChConfig.ItemGive_CTG, True, addDRDict])
|
| | | |
| | | # 取玩家APPID,混服使用
|
| | | appID = GameWorld.GetPlayerPlatform(curPlayer)
|
| | | notifyKey = giftbagIpyData.GetNotifyKey()
|
| | | if notifyKey:
|
| | | orderIpyData = GetFlashGiftbagIDOrderInfoIpyData(giftbagID, appID)
|
| | | rmb = "0" if not orderIpyData else str(orderIpyData.GetPayRMBNum()) # RMB支持小数,这里直接转str广播
|
| | | 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.append([itemID[job], itemCnt, isBind])
|
| | | return jobItemList
|
| | |
|
| | | def SyncFlashGiftbagBuyCount(curPlayer, syncIDList=[], giftbagTypeList=[]):
|
| | | def SyncFlashGiftbagBuyCount(curPlayer, actNum, syncIDList=[], giftbagTypeList=[]):
|
| | | ## 通知限时礼包玩家活动信息
|
| | | giftbagBuyInfo = ChPyNetSendPack.tagMCFlashGiftbagPlayerInfo()
|
| | | giftbagBuyInfo.ActNum = actNum
|
| | | giftbagBuyInfo.BuyCountList = []
|
| | | if syncIDList:
|
| | | for giftID in syncIDList:
|
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % giftID)
|
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % (actNum, giftID))
|
| | | buyCountInfo = ChPyNetSendPack.tagMCFlashGiftbagBuyCount()
|
| | | buyCountInfo.GiftbagID = giftID
|
| | | buyCountInfo.BuyCount = buyCnt
|
| | |
| | | if giftbagTypeList and giftbag.GetGiftbagType() not in giftbagTypeList:
|
| | | continue
|
| | | giftID = giftbag.GetGiftbagID()
|
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % giftID)
|
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagBuyCount % (actNum, giftID))
|
| | | if buyCnt <= 0:
|
| | | continue
|
| | | buyCountInfo = ChPyNetSendPack.tagMCFlashGiftbagBuyCount()
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, giftbagBuyInfo)
|
| | | return
|
| | |
|
| | | def Sync_FlashGiftbagActionInfo(curPlayer):
|
| | | def Sync_FlashGiftbagActionInfo(curPlayer, actNum):
|
| | | ## 通知限时礼包活动信息
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
|
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_FlashGiftbag, actNum)
|
| | | if not actInfo:
|
| | | return
|
| | |
|
| | |
| | |
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
| | | packInfo = ChPyNetSendPack.tagMCFlashGiftbagInfo()
|
| | | packInfo.ActNum = actNum
|
| | | packInfo.StartDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetStartDate(), openServerDay)
|
| | | packInfo.EndtDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetEndDate(), openServerDay)
|
| | | packInfo.AdvanceMinutes = flashGiftbagIpyData.GetAdvanceMinutes()
|