hxp
2026-03-02 7dfa5fbeb21542ca15f61d5979caaacccab63450
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -39,35 +39,19 @@
import ChConfig
import ChPyNetSendPack
import NetPackCommon
import PlayerVip
import IpyGameDataPY
import ShareDefine
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerGoldGift
import PlayerActTotalRecharge
import PlayerActGarbageSorting
import PlayerActRechargeRebateGold
import PlayerActFamilyCTGAssist
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerActRechargePrize
import PlayerFamilyRedPacket
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerActGrowupBuy
import OpenServerCampaign
import PlayerFeastTravel
import PlayerWeekParty
import PlayerActHeroAppear
import PlayerGoldInvest
import PlayerActTurntable
import PlayerTongTianLing
import PlayerZhanling
import PlayerMineArea
import ItemCommon
import PlayerGoldRush
import PlayerLLMJ
import PyGameData
import DBDataMgr
import CommFunc
import time
@@ -101,10 +85,6 @@
def OnLogin(curPlayer):
    if not DoResetCTGCountByTime(curPlayer):
        Sync_CoinToGoldCountInfo(curPlayer)
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayFreeGoldGiftState):
        Sync_DayFreeGoldGiftState(curPlayer)
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlineRechargeTHAward):
        SyncOnlineRechargeTH(curPlayer)
    return
def DoResetCTGCountByTime(curPlayer):
@@ -190,7 +170,6 @@
    ## 充值相关过天
    
    #在重置之前需要处理的
    PlayerActGrowupBuy.DoUpdateGrowupBuyStateOnDay(curPlayer) # 成长必买
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCoinTotal, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealToday, 0)
@@ -211,9 +190,6 @@
    if syncRecordIDList:
        Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
        
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayFreeGoldGiftState):
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayFreeGoldGiftState, 0)
        Sync_DayFreeGoldGiftState(curPlayer)
    return
def OnWeek(curPlayer):
@@ -244,6 +220,19 @@
        Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
    return
#// A8 06 查询充值结果 #tagCMQueryRecharge
#
#struct    tagCMQueryRecharge
#{
#    tagHead        Head;
#};
def OnQueryRecharge(index, packData, tick):
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    #if tick - curPlayer.GetDictByKey("QRtick") < 10000:
    #    return
    #curPlayer.SetDict("QRtick", tick)
    #curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
    return
#// A1 23 查询充值次数 #tagCMQueryCoinToGoldCount
#
@@ -338,7 +327,7 @@
    PlayerControl.SendMailByKey("ExchangeToPayCoin", [playerID], addItemList, paramList)
    
    if payOrderType != PayOrderType_PayCoin:
        serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
        serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
        addDRDict.update({"coinType":ChConfig.CoinType_ExchangePayCoin, "PayCoin":[befPayCoin, aftPayCoin], 
                          "VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay, "eventName":eventName})
        DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
@@ -409,6 +398,15 @@
    cPlayerCoin.isAddBourseMoney = isAddBourseMoney
    return PlayerCoinToGold(curPlayer, cPlayerCoin, eventName)
def OnDBPushRecharge(curPlayer, orderID, orderInfo, orderAmount):
    cPlayerCoin = CPY_PlayerCoinToGold()
    cPlayerCoin.useCoin = orderAmount
    cPlayerCoin.orderID = orderID
    cPlayerCoin.orderInfo = orderInfo
    cPlayerCoin.isAddBourseMoney = True
    GameWorld.Log("OnDBPushRecharge: useCoin=%s,orderInfo=%s,orderID=%s" % (cPlayerCoin.useCoin, cPlayerCoin.orderInfo, cPlayerCoin.orderID), curPlayer.GetPlayerID())
    return PlayerCoinToGold(curPlayer, cPlayerCoin, ChConfig.Def_GiveMoney_CoinToGold)
##特别说明:充值赠送点券都要计算到各个活动中
##玩家点卷兑换元宝.
# @param curPlayer 玩家实例
@@ -422,12 +420,15 @@
    orderInfo = chargeInfo.GetOrderInfo() # 商品编号
    orderID = chargeInfo.GetOrderID() #订单号,兑换成功后清除
    isAddBourseMoney = chargeInfo.GetIsAddBourseMoney()
    if orderID:
        curPlayer.SendDBFinishRecharge(orderID)
    #if orderID:
    #    curPlayer.SendDBFinishRecharge(orderID)
    appID = chargeInfo.GetAppID()
    if not appID:
        appID = GameWorld.GetPlayerPlatform(curPlayer)
    if not appID:
        appID = GameWorld.GetAppIDByAccID(curPlayer.GetAccID())
        GameWorld.DebugLog("GetAppIDByAccID appID=%s" % appID)
    addDRDict = {"orderCoin":orderCoin, "orderInfo":orderInfo, "orderID":orderID, 
                 "isAddBourseMoney":isAddBourseMoney, "eventName":eventName, "appID":appID}
    
@@ -480,13 +481,6 @@
            return
        moneyType, addGold, prizeGold, giveItemList, ctgIpyData = ctgResultInfo
        
    elif ipyData.GetGiftbagID():
        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:
        #用于支付其他的商品,待扩展...
        DataRecordPack.DR_CTGError(curPlayer, "The orderInfo is useless!", addDRDict)
@@ -506,7 +500,7 @@
    recordID = ctgIpyData.GetRecordID() if ctgIpyData else 0
    Sync_CoinToGoldReport(curPlayer, orderID, orderCoin, recordID, orderInfo)
    
    curPlayer.SendDBQueryRecharge()
    #curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
    return True
def __GetCTGInfoByID(curPlayer, recordID, addDRDict):
@@ -519,13 +513,6 @@
    
    addDRDict.update({"recordID":recordID})
    
    # 成长必买类型
    if ipyData.GetPayType() == PayType_GrowupBuy:
        canBuy, errInfo = PlayerActGrowupBuy.CheckGrowupBuyState(curPlayer, recordID)
        if not canBuy:
            DataRecordPack.DR_CTGError(curPlayer, errInfo, addDRDict)
            return
    totalBuyCountLimit = ipyData.GetTotalBuyCount()
    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
    if totalBuyCountLimit:
@@ -569,42 +556,66 @@
            return
        addDRDict.update({"selectItemList":selectItemList})
        
    totalBuyCountUpd = min(totalBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCountUpd)
    addDRDict.update({"totalBuyCountUpd":totalBuyCountUpd})
    todayBuyCountUpd = min(todayBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCountUpd)
    addDRDict.update({"todayBuyCountUpd":todayBuyCountUpd})
    weekBuyCountUpd = min(weekBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekCTGCount % recordID, weekBuyCountUpd)
    addDRDict.update({"weekBuyCountUpd":weekBuyCountUpd})
    monthBuyCountUpd = min(monthBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, monthBuyCountUpd)
    addDRDict.update({"monthBuyCountUpd":monthBuyCountUpd})
    totalBuyCountUpd, todayBuyCountUpd, weekBuyCountUpd, monthBuyCountUpd = __addCTGIDBuyCnt(curPlayer, recordID)
    addDRDict.update({"totalBuyCountUpd":totalBuyCountUpd, "todayBuyCountUpd":todayBuyCountUpd, "weekBuyCountUpd":weekBuyCountUpd, "monthBuyCountUpd":monthBuyCountUpd})
    
    giveItemList = []
    giveItemList += GetCTGGiveItemList(ipyData)
    giveItemList += selectItemList
    giveItemList += PlayerActHeroAppear.GetCTGActItemList(curPlayer, recordID) # 武将登场
    
    payType = ipyData.GetPayType()
    #payType = ipyData.GetPayType()
    moneyType = ipyData.GetMoneyType() # 获得货币类型
    addGold = ipyData.GetGainGold() # 获得货币数
    gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送货币数,首次充值赠送仙玉时,此仙玉不给
    firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
    prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
    if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money:
        if payType in [PayType_Gold, PayType_GoldPlus] and PlayerGoldInvest.GetInvestState(curPlayer, ChConfig.InvestType_Life):
            prizeGold = addGold # bt tqxbqy 版本,永久卡仙玉直充固定双倍
        actPrizeGold = PlayerActRechargePrize.DoAddPlayerActRechargePrizeCount(curPlayer, recordID)
        if actPrizeGold:
            prizeGold += actPrizeGold
            addDRDict.update({"actRechargePrize":1})
    syncRecordIDList = [recordID]
    # 打包购买 - 目前用于每日特惠,有需要可扩展为通用
    if recordID == IpyGameDataPY.GetFuncCfg("DailyTehui", 2):
        packItemDict = {}
        packCTGIDDict = {}
        dailyTehuiCTGIDList = IpyGameDataPY.GetFuncEvalCfg("DailyTehui", 1)
        for ctgID in dailyTehuiCTGIDList:
            ctgIpyData = IpyGameDataPY.GetIpyGameData("CTG", ctgID)
            if not ctgIpyData:
                continue
            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % ctgID):
                continue
            syncRecordIDList.append(ctgID)
            ctgItemList = GetCTGGiveItemList(ctgIpyData)
            packCTGIDDict[ctgID] = ctgItemList
            for itemInfo in ctgItemList:
                itemID, itemCount = itemInfo[:2]
                packItemDict[itemID] = packItemDict.get(itemID, 0) + itemCount
            __addCTGIDBuyCnt(curPlayer, ctgID)
        if packCTGIDDict:
            GameWorld.Log("打包购买: recordID=%s,packCTGIDDict=%s" % (recordID, packCTGIDDict), curPlayer.GetPlayerID())
            addDRDict.update({"packCTGIDDict":packCTGIDDict})
        for itemID, itemCount in packItemDict.items():
            giveItemList.append([itemID, itemCount, 0])
            
    Sync_CoinToGoldCountInfo(curPlayer, [recordID])
    Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
    return moneyType, addGold, prizeGold, giveItemList, ipyData
def __addCTGIDBuyCnt(curPlayer, recordID):
    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
    totalBuyCountUpd = min(totalBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCountUpd)
    todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
    todayBuyCountUpd = min(todayBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCountUpd)
    weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID)
    weekBuyCountUpd = min(weekBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekCTGCount % recordID, weekBuyCountUpd)
    monthBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID)
    monthBuyCountUpd = min(monthBuyCount + 1, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, monthBuyCountUpd)
    return totalBuyCountUpd, todayBuyCountUpd, weekBuyCountUpd, monthBuyCountUpd
def GetSelectItemListInfo(selectItemInfo, selectItemValue):
    errorInfo = ""
@@ -636,27 +647,9 @@
        return []
    
    gainItemList = ipyData.GetGainItemList()
    actWorldLVGainItemInfo = ipyData.GetActWorldLVGainItemInfo()
    giveItemList = []
    # 活动世界等级对应物品信息,如果有对应活动支持 且 该配置有配,则默认走该配置,否则使用常规的默认物品配置
    payTypeActNameDict = {PayType_GrowupBuy:ShareDefine.OperationActionName_GrowupBuy,
                          # ... 有新增的活动需要支持,则在此新增配置上即可,后面取物品的逻辑都是一样的
                          }
    if actWorldLVGainItemInfo and ipyData.GetPayType() in payTypeActNameDict:
        actName = payTypeActNameDict[ipyData.GetPayType()]
        actInfo = PyGameData.g_operationActionDict.get(actName, {}) # 注:相关状态在前置逻辑已经判断过,这里不再判断
        actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
        actWorldLVList = [int(strWorldLV) for strWorldLV in actWorldLVGainItemInfo.keys()]
        actWorldLVList.sort() # 使用 int 的值排,否则可能引起排序错误
        for worldLV in actWorldLVList:
            if actWorldLV <= worldLV:
                giveItemList = actWorldLVGainItemInfo[str(worldLV)]
                break
        if not giveItemList:
            giveItemList = actWorldLVGainItemInfo[str(actWorldLVList[-1])] # 没有匹配到的话默认取最后一个等级配置
    else:
        giveItemList = gainItemList
    #actWorldLVGainItemInfo = ipyData.GetActWorldLVGainItemInfo()
    #giveItemList = []
    giveItemList = gainItemList
    return giveItemList
def __OnCTGReal(curPlayer, orderCoin):
@@ -678,16 +671,28 @@
    
    if ctgIpyData and ctgIpyData.GetPayType() == PayType_PayCoin:
        # 代币充值,仅给代币,不触发其他内容
        ctgID = ctgIpyData.GetRecordID()
        coinType = ChConfig.CoinType_PayCoin
        orderInfo = addDRDict.get("orderInfo", "")
        orderCoin = addDRDict.get("orderCoin", 0)
        payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
        playerID = curPlayer.GetPlayerID()
        moneyInfo = {}
        befPayCoin = PlayerControl.GetPayCoin(curPlayer)
        if addGold and moneyType == ShareDefine.TYPE_Price_PayCoin:
            drDict = {ChConfig.Def_Give_Reason_SonKey:orderInfo, "payOrderType":payOrderType, "orderInfo":orderInfo}
            PlayerControl.GiveMoney(curPlayer, moneyType, addGold, eventName, drDict)
            moneyInfo[moneyType] = addGold
        aftPayCoin = PlayerControl.GetPayCoin(curPlayer)
        # 三国版本充代币支持赠送元宝
        prizeMoneyType = IPY_GameWorld.TYPE_Price_Gold_Money
        if prizeGold > 0:
            PlayerControl.GiveMoney(curPlayer, prizeMoneyType, prizeGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
            moneyInfo[prizeMoneyType] = prizeGold
        if moneyInfo:
            ItemControler.NotifyGiveAwardInfo(curPlayer, [], ChConfig.ItemGive_CTG, moneyInfo=moneyInfo,
                                              dataEx={"orderInfo":orderInfo, "ctgID":ctgID})
        
        isRealMoney = True if addDRDict.get("orderID") else False # tqxbqy 真实订单充代币算真实充值
        if isRealMoney:
@@ -696,8 +701,8 @@
        ctgRealToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealToday) # 当日真实货币充值Coin数 ,不含后台充值- 今日
        ctgRealTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal) # 累计真实货币充值Coin数 ,不包后台充值 - 总计
        ctgRealFirstTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealFirstTime) # 首次真实货币充值时间戳
        serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
        addDRDict.update({"coinType":coinType, "PayCoin":[befPayCoin, aftPayCoin],
        serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
        addDRDict.update({"coinType":coinType, "PayCoin":[befPayCoin, aftPayCoin], "moneyInfo":moneyInfo,
                          "VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay, "eventName":eventName, 
                          "ctgRealToday":ctgRealToday, "ctgRealTotal":ctgRealTotal, "ctgRealFirstTime":GameWorld.ChangeTimeNumToStr(ctgRealFirstTime) if ctgRealFirstTime else ""})
        DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
@@ -752,11 +757,9 @@
                                          dataEx={"orderInfo":orderInfo, "ctgID":ctgID})
    
    addVIPExp = coinExp
    PlayerVip.AddVIPExp(curPlayer, addVIPExp)
    
    changeCoinPointBefore = curPlayer.GetChangeCoinPointTotal()
    curPlayer.SetChangeCoinPointTotal(min(changeCoinPointBefore + orderCoin, ChConfig.Def_UpperLimit_DWord), 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 0)
    
    todayCTGCoinTotal = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCoinTotal) + orderCoin, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCoinTotal, todayCTGCoinTotal)
@@ -770,44 +773,21 @@
    
    # 所有真实充值均有效的
    if coinType in [ChConfig.CoinType_Gold, ChConfig.CoinType_Buy, ChConfig.CoinType_UsePayCoin]:
        #跨服充值排行活动
        CrossActCTGBillboard.AddCTGRMB(curPlayer, orderCoin)
        #跨服全民充值
        CrossActAllRecharge.AddCTGRMB(curPlayer, orderCoin)
        PlayerActManyDayRecharge.AddManyDayRechargeValue(curPlayer, orderCoin) # 多日连充
        #红包, 需要真实充值
        PlayerFamilyRedPacket.OnPlayerRecharge(curPlayer, orderCoin)
        
    # 只算充仙玉的
    if coinType == ChConfig.CoinType_Gold:
        PlayerActRechargeRebateGold.AddRechargeRebateGoldRMB(curPlayer, addGold)
    #仙界盛典-充值大礼
    PlayerFairyCeremony.OnFCRecharge(curPlayer)
    PlayerNewFairyCeremony.OnFCRecharge(curPlayer)
    PlayerGoldGift.OnPlayerChargeGold(curPlayer)
    #累积充值X元
    PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin, coinType)
    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CTG, addVIPExp, coinType) # 垃圾分类
    PlayerActSingleRecharge.UpdSingleRechargeValue(curPlayer, orderCoin, coinType) # 单笔累充
    PlayerActTurntable.OnPlayerRecharge(curPlayer, orderCoin, coinType) # 转盘
    PlayerFairyCeremony.AddFCCTGRMB(curPlayer, orderCoin)
    PlayerNewFairyCeremony.AddFCCostGold(curPlayer, orderCoin)
    #开服活动
    #OpenServerCampaign.AddOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Recharge, orderCoin)
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Recharge, addVIPExp)
    PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_CTGExp, addVIPExp)
    #投资
    if ctgIpyData:
        ctgID = ctgIpyData.GetRecordID()
        PlayerActFamilyCTGAssist.OnPlayerCTG(curPlayer, ctgID)
        PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
        PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
        PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
        PlayerMineArea.OnMineTreasureByCTGID(curPlayer, ctgID)
        PlayerTongTianLing.OnActiviteTTTByCTGID(curPlayer, ctgID)
        PlayerGoldRush.OnGoldRushByCTGID(curPlayer, ctgID)
        PlayerLLMJ.OnActiviteByCTGID(curPlayer, ctgID)
        
    serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
    addDRDict.update({"gold":[goldBefore, goldAfter], "changeCoinPoint":[changeCoinPointBefore, changeCoinPointAfter], "todayCTGCoinTotal":todayCTGCoinTotal,
                      "bourseMoney":[bourseMoneyBefore, bourseMoneyAfter], "addGold":addGold, "prizeGold":prizeGold, "giveItemList":giveItemList, "coinType":coinType,
                      "coinExp":coinExp, "addVIPExp":addVIPExp, "VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay,
@@ -915,82 +895,3 @@
    countInfoPack.RecordCount = len(countInfoPack.CTGCountInfoList)
    NetPackCommon.SendFakePack(curPlayer, countInfoPack)
    return
## ---------- 每日免费直购礼包 ----------------
def OnGetDayFreeGoldGift(curPlayer):
    ''' 领取每日免费直购礼包
    '''
    isGet = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayFreeGoldGiftState)
    if isGet:
        #GameWorld.DebugLog("已经领取过每日免费直购礼包!")
        return
    rewardItemList = IpyGameDataPY.GetFuncEvalCfg("DayFreeGoldGift", 1)
    if not rewardItemList:
        return
    needSpace = len(rewardItemList)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
    if needSpace > packSpace:
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayFreeGoldGiftState, 1)
    # 给物品
    isAuctionItem = False
    for itemID, itemCount in rewardItemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
    # 通知客户端
    Sync_DayFreeGoldGiftState(curPlayer)
    return
def Sync_DayFreeGoldGiftState(curPlayer):
    clientPack = ChPyNetSendPack.tagMCDayFreeGoldGiftState()
    clientPack.DayFreeGoldGiftState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayFreeGoldGiftState)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
## ------------------------------------------
## ---------- 创角在线充值特惠 ---------------
def OnGetOnlineRechargeTH(curPlayer):
    ## 领取创角在线充值特惠
    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlineRechargeTHAward)
    if awardState:
        #GameWorld.DebugLog("已领取该奖励!")
        return
    # 后端只验证是否有充值其中一个即可,不验证充值时间(充值同步到游戏服务器有时间差)
    canGet = False
    needCtgIDList = IpyGameDataPY.GetFuncEvalCfg("OnlineRechargeTH", 2)
    for ctgID in needCtgIDList:
        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % ctgID):
            canGet = True
            break
    if not canGet:
        return
    awardItemList = IpyGameDataPY.GetFuncEvalCfg("OnlineRechargeTH", 3)
    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnlineRechargeTHAward, 1)
    for itemID, itemCount, isAuctionItem in awardItemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem],
                                     event=["OnlineRechargeTH", False, {}])
    SyncOnlineRechargeTH(curPlayer)
    return
def SyncOnlineRechargeTH(curPlayer):
    clientPack = ChPyNetSendPack.tagMCOnlineRechargeTH()
    clientPack.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlineRechargeTHAward)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
## ------------------------------------------