hxp
2019-06-27 a54fba3894b5d528bed16147f096b6a706a1fc0c
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -44,9 +44,15 @@
import ShareDefine
import PlayerFlashGiftbag
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerGoldGift
import PlayerActTotalRecharge
import OpenServerCampaign
import PlayerWeekParty
import PlayerGoldInvest
import ItemCommon
import time
#---------------------------------------------------------------------
#注意: GetChangeCoinPointTotal 充值点和赠送点总和
@@ -56,8 +62,57 @@
def GetCoinRate(): return IpyGameDataPY.GetFuncCfg("PayRMB")
def OnLogin(curPlayer):
    if not DoResetCTGCountByTime(curPlayer):
        Sync_CoinToGoldCountInfo(curPlayer)
    return
def DoResetCTGCountByTime(curPlayer):
    # 重置充值次数
    ctgResetTimeYMD = IpyGameDataPY.GetFuncCfg("CTG", 1)
    if not ctgResetTimeYMD:
        return
    if not isinstance(ctgResetTimeYMD, int):
        GameWorld.ErrLog("充值重置时间配置必须是数值格式,不能包含符号!")
        return
    curTime = int(time.time())
    #playerID = curPlayer.GetPlayerID()
    resetTime = GameWorld.ChangeTimeStrToNum(str(ctgResetTimeYMD), "%Y%m%d")
    if curTime < resetTime:
        #GameWorld.DebugLog("还未到达充值充值次数时间!curTime=%s < resetTime=%s" % (curTime, resetTime), playerID)
        return
    playerResetTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGCountResetTime)
    if playerResetTime == resetTime:
        #GameWorld.DebugLog("已经重置过充值次数!resetTime=%s" % resetTime, playerID)
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGCountResetTime, resetTime)
    DoResetCTGCount(curPlayer, ctgResetTimeYMD)
    return True
def DoResetCTGCount(curPlayer, resetEvent):
    # 重置充值次数
    playerID = curPlayer.GetPlayerID()
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for i in xrange(ipyDataMgr.GetCTGCount()):
        ipyData = ipyDataMgr.GetCTGByIndex(i)
        recordID = ipyData.GetRecordID()
        if not ipyData.GetCanResetBuyCount():
            continue
        totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
        todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
        if not totalBuyCount and not todayBuyCount:
            continue
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
        drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "ResetEvent":resetEvent,
                  "totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID}
        DataRecordPack.SendEventPack("ResetCTGCount", drDict, curPlayer)
        GameWorld.Log("重置充值次数: resetEvent=%s,recordID=%s,totalBuyCount=%s,todayBuyCount=%s"
                      % (resetEvent, recordID, totalBuyCount, todayBuyCount), playerID)
    Sync_CoinToGoldCountInfo(curPlayer)
    return
def OnDay(curPlayer):
    syncRecordIDList = []
@@ -123,6 +178,9 @@
    orderInfo = chargeInfo.GetOrderInfo() # 商品编号
    orderID = chargeInfo.GetOrderID() #订单号,兑换成功后清除
    isAddBourseMoney = chargeInfo.GetIsAddBourseMoney()
    if orderID:
        curPlayer.SendDBFinishRecharge(orderID)
    appID = chargeInfo.GetAppID()
    if not appID:
        appID = GameWorld.GetPlayerPlatform(curPlayer)
@@ -143,13 +201,13 @@
        DataRecordPack.DR_CTGError(curPlayer, "The orderCoin is not equal to the ipyData's RMB(%s)!" % payRMBNum, addDRDict)
        return
    
    addGold, prizeGold, giveItemList = 0, 0, []
    addGold, prizeGold, giveItemList, notifyMark = 0, 0, [], ''
    
    if ipyData.GetCTGID():
        ctgResultInfo = __GetCTGInfoByID(curPlayer, chargeInfo, ipyData.GetCTGID(), eventName, addDRDict, isAddBourseMoney)
        if not ctgResultInfo:
            return
        addGold, prizeGold, giveItemList = ctgResultInfo
        addGold, prizeGold, giveItemList, notifyMark = ctgResultInfo
        
    elif ipyData.GetGiftbagID():
        if not PlayerFlashGiftbag.OnPlayerOrderGiftbag(curPlayer, [ipyData.GetGiftbagID()], addDRDict):
@@ -159,11 +217,11 @@
        DataRecordPack.DR_CTGError(curPlayer, "The orderInfo is useless!", addDRDict)
        return
    
    DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict)
    DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark, ipyData)
    
    #充值成功主动查询一次,无充值数量就不会继续查询
    if orderID:
        curPlayer.SendDBFinishRecharge(orderID)
        #curPlayer.SendDBFinishRecharge(orderID)
        # 充值成功回报客户端,SDK等会用到
        Sync_CoinToGoldReport(curPlayer, orderID, orderCoin)
        
@@ -178,30 +236,42 @@
        DataRecordPack.DR_CTGError(curPlayer, "Can not find CTG ipyData!", addDRDict)
        return
    
    dailyBuyCount = ipyData.GetDailyBuyCount()
    addDRDict.update({"recordID":recordID})
    totalBuyCountLimit = ipyData.GetTotalBuyCount()
    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
    if totalBuyCountLimit:
        addDRDict.update({"totalBuyCountLimit":totalBuyCountLimit, "totalBuyCount":totalBuyCount})
        if totalBuyCount >= totalBuyCountLimit:
            DataRecordPack.DR_CTGError(curPlayer, "Pay count limit total!totalBuyCount=%s" % totalBuyCount, addDRDict)
            return
    dailyBuyCountLimit = ipyData.GetDailyBuyCount()
    todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
    if dailyBuyCount:
        addDRDict.update({"dailyCanBuyCount":dailyBuyCount, "todayBuyCount":todayBuyCount})
        if todayBuyCount >= dailyBuyCount:
    if dailyBuyCountLimit:
        addDRDict.update({"dailyBuyCountLimit":dailyBuyCountLimit, "todayBuyCount":todayBuyCount})
        if todayBuyCount >= dailyBuyCountLimit:
            DataRecordPack.DR_CTGError(curPlayer, "Pay count limit today!todayBuyCount=%s" % todayBuyCount, addDRDict)
            return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCount + 1)
    if totalBuyCountLimit:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCount + 1)
        addDRDict.update({"totalBuyCountUpd":(totalBuyCount + 1)})
    if dailyBuyCountLimit:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCount + 1)
        addDRDict.update({"todayBuyCountUpd":(todayBuyCount + 1)})
    giveItemList = ipyData.GetGainItemList()
    addGold = ipyData.GetGainGold() # 获得仙玉数
    gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送仙玉数,首次充值赠送仙玉时,此仙玉不给
    firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCount + 1)
    notifyMark = ipyData.GetNotifyMark()
    prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
    
    addDRDict.update({"totalBuyCount":(totalBuyCount + 1)})
    Sync_CoinToGoldCountInfo(curPlayer, [recordID])
    return addGold, prizeGold, giveItemList
    return addGold, prizeGold, giveItemList, notifyMark
def DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict):
def DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark='', ipyData=None):
    goldBefore = curPlayer.GetGold()
    bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
    
@@ -218,8 +288,11 @@
            PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giveItemList)
        else:
            for itemID, itemCount, isBind in giveItemList:
                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem],
                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem],
                                             event=[ChConfig.ItemGive_CTG, True, addDRDict])
        if notifyMark:
            mainItemID = giveItemList[0][0]
            PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetName(), mainItemID, ''])
                
    addVIPExp = int(orderCoin / 100 * GetCoinRate())
    PlayerVip.AddVIPExp(curPlayer, addVIPExp)
@@ -239,8 +312,16 @@
    #---充值成功后逻辑---
    #仙界盛典-充值大礼
    PlayerFairyCeremony.OnFCRecharge(curPlayer)
    PlayerNewFairyCeremony.OnFCRecharge(curPlayer)
    PlayerGoldGift.DayChargeRedPackAward(curPlayer)
    PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, addGold)
    #累积充值X元
    PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin/100)
    #开服活动
    OpenServerCampaign.AddOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Recharge, orderCoin)
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Recharge, addVIPExp)
    #投资
    if ipyData:
        PlayerGoldInvest.InvestByCTG(curPlayer, ipyData.GetCTGID())
    GameWorld.Log("Billing: eventName=%s, %s" % (eventName, addDRDict), curPlayer.GetPlayerID())
    return