hxp
2020-03-12 7edbbb07b1e442a11a65c76b48f8238ffb520d79
8399 每日灵石礼包修改(改为运营活动)
7个文件已修改
1个文件已添加
275 ■■■■■ 已修改文件
PyNetPack @ 8f2ab7 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
PyNetPack
@@ -1 +1 @@
Subproject commit 5d2c941bb636d7725df79f71f03afb2375bb2db8
Subproject commit 8f2ab740c1e7139456629265d52d237a273b8177
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -204,6 +204,7 @@
OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
OperationActionName_NewFairyCeremony = "ActNewFairyCeremony" # 仙界盛典活动
OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
@@ -225,7 +226,8 @@
                           OperationActionName_RealmPoint, OperationActionName_FlashSale,
                           OperationActionName_WishingWell, OperationActionName_TotalRecharge, 
                           OperationActionName_WeekParty, OperationActionName_LoginAward, 
                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
                           OperationActionName_DailyGiftbag] \
                           + FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3699,6 +3699,10 @@
Def_PDict_FlashGiftbagBuyCount = "FlashGiftbagBuyCount_%s"  # 限时礼包已购买次数,参数(礼包ID)
Def_PDict_FlashGiftbagMailState = "FlashGiftbagMailState"  # 玩家身上的活动更新提醒邮件状态
#每日礼包活动
Def_PDict_DailyGiftbagID = "DailyGiftbagID"  # 玩家身上的每日礼包活动ID,唯一标识,取活动开始日期time
Def_PDict_DailyGiftbagBuyCount = "DailyGiftbagBuyCount_%s"  # 每日礼包已购买次数,参数(礼包ID)
#BOSS复活
Def_PDict_BossRebornID = "BossRebornID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
Def_PDict_BossRebornTemplateID = "BossRebornTemplateID"  # 玩家身上的BOSS复活模板ID
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -97,6 +97,7 @@
import GameLogic_XMZZ
import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerCostRebate
import PlayerActTotalRecharge
import PlayerSpringSale
@@ -634,6 +635,8 @@
    PlayerSpringSale.OnPlayerLogin(curPlayer)
    #限时礼包
    PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
    #每日礼包
    PlayerDailyGiftbag.OnPlayerLogin(curPlayer)
    #限时抢购
    PlayerFlashSale.OnPlayerLogin(curPlayer)
    # 世界boss
@@ -5296,7 +5299,7 @@
        PlayerActivity.GetActivityPlaceReward(curPlayer)
    # 每日免费直购礼包
    elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
        PlayerCoin.OnGetDayFreeGoldGift(curPlayer)
        PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
    # 仙盟活跃度奖励
    elif rewardType == ChConfig.Def_RewardType_FamilyActivity:
        PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -43,6 +43,7 @@
import IpyGameDataPY
import ShareDefine
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerGoldGift
@@ -218,7 +219,11 @@
        addGold, prizeGold, giveItemList, notifyMark = ctgResultInfo
        
    elif ipyData.GetGiftbagID():
        if not PlayerFlashGiftbag.OnPlayerOrderGiftbag(curPlayer, [ipyData.GetGiftbagID()], addDRDict):
        giftbagID = ipyData.GetGiftbagID()
        if 100 <= giftbagID < 199:
            if not PlayerDailyGiftbag.OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict):
                return
        elif not PlayerFlashGiftbag.OnPlayerOrderGiftbag(curPlayer, [ipyData.GetGiftbagID()], addDRDict):
            return
    else:
        #用于支付其他的商品,待扩展...
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py
New file
@@ -0,0 +1,245 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.PlayerDailyGiftbag
#
# @todo:每日礼包
# @author hxp
# @date 2020年3月12日
# @version 1.0
#
# 详细描述: 每日礼包
#
#-------------------------------------------------------------------------------
#"""Version = 2020年3月12日 12:00"""
#-------------------------------------------------------------------------------
import PyGameData
import ShareDefine
import PlayerControl
import IpyGameDataPY
import NetPackCommon
import ChPyNetSendPack
import DataRecordPack
import ItemControler
import IPY_GameWorld
import ItemCommon
import GameWorld
import ChConfig
def OnPlayerLogin(curPlayer):
    __CheckPlayerDailyGiftbagAction(curPlayer)
    return
def RefreshDailyGiftbagActionInfo():
    ## 收到GameServer同步的活动信息,刷新活动信息
    playerManager = GameWorld.GetPlayerManager()
    for index in xrange(playerManager.GetPlayerCount()):
        curPlayer = playerManager.GetPlayerByIndex(index)
        if curPlayer.GetID() == 0:
            continue
        __CheckPlayerDailyGiftbagAction(curPlayer)
    return
def __CheckPlayerDailyGiftbagAction(curPlayer):
    ## 检查玩家每日礼包活动数据信息
    playerID = curPlayer.GetPlayerID()
    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
    state = actInfo.get(ShareDefine.ActKey_State, 0)
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
    if not state or not cfgID:
        return
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagID) # 玩家身上的活动ID
    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
    if not cfgIpyData:
        return
    giftbagType = cfgIpyData.GetGiftbagType()
    isReset = False
    if actID != playerActID:
        isReset = True
        __ResetGiftbagItemBuyCount(curPlayer, giftbagType)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagID, actID)
        GameWorld.DebugLog("每日礼包重置! actID=%s,playerActID=%s,state=%s,giftbagType=%s" % (actID, playerActID, state, giftbagType), playerID)
    else:
        GameWorld.DebugLog("每日礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
        SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
    Sync_DailyGiftbagActionInfo(curPlayer)
    return isReset
def __ResetGiftbagItemBuyCount(curPlayer, giftbagType):
    ##重置每日礼包限购物品次数
    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
    if not giftbagIpyDataList:
        return
    for giftIpyData in giftbagIpyDataList:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftIpyData.GetGiftbagID(), 0)
    SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
    return
def OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, isCTG=True):
    ## 玩家订购每日礼包
    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
    if not actInfo:
        if isCTG:
            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag action info is null!", addDRDict)
        return
    state = actInfo.get(ShareDefine.ActKey_State, 0)
    if not state:
        if isCTG:
            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag state is 0!", addDRDict)
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
    if not cfgIpyData:
        if isCTG:
            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag GiftbagType is null!", addDRDict)
        return
    giftbagType = cfgIpyData.GetGiftbagType()
    giftbagIpyData = IpyGameDataPY.GetIpyGameData("DailyGiftbag", giftbagType, giftbagID)
    if not giftbagIpyData:
        if isCTG:
            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag giftbagType=%s giftbagID=%s can not found!"
                                       % (giftbagType, giftbagID), addDRDict)
        return
    giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob())
    addDRDict.update({"giftbagType":giftbagType, "giftbagID":giftbagID, "giftItemList":giftItemList})
    buyCountLimit = giftbagIpyData.GetBuyCountLimit()
    buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
    if buyCountLimit:
        addDRDict.update({"buyCountLimit":buyCountLimit, "buyCount":buyCount})
        if buyCount >= buyCountLimit:
            if isCTG:
                DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag Pay count limit !buyCount=%s,buyCountLimit=%s"
                                           % (buyCount, buyCountLimit), addDRDict)
            return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID, buyCount + 1)
    if giftItemList:
        needSpace = len(giftItemList)
        emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
        if emptySpace < needSpace:
            PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giftItemList)
        else:
            for itemID, itemCount, isBind in giftItemList:
                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem],
                                             event=[ChConfig.ItemGive_CTG, True, addDRDict])
    SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
    return True
def OnGetDailyFreeGiftbag(curPlayer):
    ## 领取每日免费直购礼包
    giftbagID = 0 # 免费礼包ID固定为0
    addDRDict = {}
    OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, False)
    return
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 SyncDailyGiftbagBuyCount(curPlayer, giftbagType):
    ## 通知每日礼包玩家活动信息
    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
    if not giftbagIpyDataList:
        return
    giftbagBuyInfo = ChPyNetSendPack.tagMCDailyGiftbagPlayerInfo()
    giftbagBuyInfo.BuyCountList = []
    for giftIpyData in giftbagIpyDataList:
        giftbagID = giftIpyData.GetGiftbagID()
        buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
        if buyCnt <= 0:
            continue
        buyCountInfo = ChPyNetSendPack.tagMCDailyGiftbagBuyCount()
        buyCountInfo.GiftbagID = giftbagID
        buyCountInfo.BuyCount = buyCnt
        giftbagBuyInfo.BuyCountList.append(buyCountInfo)
    giftbagBuyInfo.Count = len(giftbagBuyInfo.BuyCountList)
    NetPackCommon.SendFakePack(curPlayer, giftbagBuyInfo)
    return
def Sync_DailyGiftbagActionInfo(curPlayer):
    ## 通知每日礼包活动信息
    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
    if not actInfo:
        return
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
    if not cfgID:
        return
    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
    if not cfgIpyData:
        return
    giftbagType = cfgIpyData.GetGiftbagType()
    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
    if not giftbagIpyDataList:
        return
    # 取玩家APPID,混服使用
    appID = GameWorld.GetPlayerPlatform(curPlayer)
    packInfo = ChPyNetSendPack.tagMCDailyGiftbagInfo()
    packInfo.GiftbagInfo = []
    for giftIpyData in giftbagIpyDataList:
        giftbagID = giftIpyData.GetGiftbagID()
        orderIpyData = GetGiftbagIDOrderInfoIpyData(giftbagID, appID)
        giftBag = ChPyNetSendPack.tagMCDailyGiftbag()
        giftBag.GiftID = giftbagID
        giftBag.OrderInfo = "" if not orderIpyData else orderIpyData.GetOrderInfo()
        giftBag.OrderInfoLen = len(giftBag.OrderInfo)
        giftBag.BuyCountLimit = giftIpyData.GetBuyCountLimit()
        giftBag.RMB = 0 if not orderIpyData else int(orderIpyData.GetPayRMBNum())
        giftBag.ItemInfo = []
        for itemID, itemCount, isBind in __GetJobItemList(giftIpyData.GetGiftItemList(), curPlayer.GetJob()):
            item = ChPyNetSendPack.tagMCDailyGiftbagItem()
            item.ItemID = itemID
            item.ItemCount = itemCount
            giftBag.ItemInfo.append(item)
        giftBag.GiftItemCount = len(giftBag.ItemInfo)
        packInfo.GiftbagInfo.append(giftBag)
    packInfo.GiftbagCount = len(packInfo.GiftbagInfo)
    NetPackCommon.SendFakePack(curPlayer, packInfo)
    return
def GetGiftbagIDOrderInfoIpyData(giftbagID, appID):
    ## 获取礼包ID对应数据配置
    key = "GiftbagIpyDataDict"
    GiftbagIpyDataDict = IpyGameDataPY.GetConfigEx(key)
    if not GiftbagIpyDataDict:
        GiftbagIpyDataDict = {}
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for i in xrange(ipyDataMgr.GetOrderInfoCount()):
            ipyData = ipyDataMgr.GetOrderInfoByIndex(i)
            if not ipyData.GetGiftbagID():
                continue
            GiftbagIpyDataDict[(ipyData.GetGiftbagID(), ipyData.GetAppID())] = ipyData
        IpyGameDataPY.SetConfigEx(key, GiftbagIpyDataDict)
    return GiftbagIpyDataDict.get((giftbagID, appID))
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -81,6 +81,7 @@
import PlayerFeastWeekParty
import PlayerActLogin
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerFeastRedPacket
@@ -1336,6 +1337,9 @@
                
            elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
                PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo()
            elif actionName == ShareDefine.OperationActionName_DailyGiftbag:
                PlayerDailyGiftbag.RefreshDailyGiftbagActionInfo()
            
            elif actionName == ShareDefine.OperationActionName_FairyCeremony:
                PlayerFairyCeremony.RefreshOperationAction_FairyCeremony()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -204,6 +204,7 @@
OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
OperationActionName_NewFairyCeremony = "ActNewFairyCeremony" # 仙界盛典活动
OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
@@ -225,7 +226,8 @@
                           OperationActionName_RealmPoint, OperationActionName_FlashSale,
                           OperationActionName_WishingWell, OperationActionName_TotalRecharge, 
                           OperationActionName_WeekParty, OperationActionName_LoginAward, 
                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
                           OperationActionName_DailyGiftbag] \
                           + FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,