#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package PlayerCoin
|
# @todo: Íæ¼Òµã¾í´¦Àí
|
#
|
# @author: panwei
|
# @date 2011-06-30
|
# @version 2.8
|
#
|
# @note: ´Ëº¯ÊýÂß¼¸Ä¶¯ÐèÉ÷ÖØ!!!
|
#
|
# @change: "2013-07-26 17:00" Alee VIP¸Ä³É¹ºÂò
|
# @change: "2013-12-27 16:30" Alee ·ö³ÖÕ˺Å
|
# @change: "2014-01-22 16:00" hxp Ð޸ijäֵʼþͬ²½ÊýֵΪnoteCoin
|
# @change: "2014-04-24 19:10" xcc »Ö¸´ÔÀ´³äÖµÉý¼¶vipµÈ¼¶µÄ´¦Àí
|
# @change: "2014-06-12 21:00" hxp Ôö¼Ó³äÖµÀñ°ü´¦ÀíÈë¿Ú
|
# @change: "2014-06-21 15:20" hxp Ôö¼ÓÌØ»Ý³äÖµ»î¶¯
|
# @change: "2014-10-16 19:00" Alee CTG²»·¢Ëͺǫ́¼Ç¼£¬Á÷Ïò¼Ç¼֧³ÖСÊýµã
|
# @change: "2014-11-11 16:30" xmnathan Ôö¼Ó³äÖµÅÅÐаñ
|
# @change: "2014-11-25 19:30" hxp Ôö¼Ó¿ª·þ³äÖµ»î¶¯
|
# @change: "2014-12-03 14:30" hxp Ôö¼ÓºÏ·þ³äÖµ»î¶¯
|
# @change: "2014-12-23 00:30" hxp Ôö¼Ó³äֵǰÐÅÏ¢Á÷Ïò
|
# @change: "2015-01-14 00:30" hxp Ôö¼ÓCTGʼþ»ã±¨
|
# @change: "2015-06-08 20:30" hxp Ôö¼Óµãȯ¶Ò»»Ê¼þ»ã±¨
|
# @change: "2015-08-26 14:00" zqx Ôö¼Ó»ñµÃ×êʯ³É¾Í
|
# @change: "2016-06-30 21:30" hxp È¥³ý¿ª·þ»î¶¯
|
# @change: "2016-07-20 14:30" hxp µãȯ¶Ò»»Ôö¼ÓÁ÷ÏòÀàÐÍ; Á÷ÏòÕûºÏ
|
#------------------------------------------------------------------------------
|
#"""Version = 2016-07-20 14:30"""
|
#------------------------------------------------------------------------------
|
import PlayerControl
|
import ItemControler
|
import GameWorld
|
import IPY_GameWorld
|
import DataRecordPack
|
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 PlayerGoldInvest
|
import PlayerActTurntable
|
import PlayerTongTianLing
|
import PlayerZhanling
|
import PlayerMineArea
|
import ItemCommon
|
import PyGameData
|
import CommFunc
|
|
import time
|
import copy
|
|
# ³äÖµ¶©µ¥ÀàÐÍ
|
PayOrderTypeList = (
|
PayOrderType_RMB, # ÈËÃñ±Ò 1
|
PayOrderType_USD, # ÃÀÔª 2
|
PayOrderType_VND, # Ô½Ä즆 3
|
PayOrderType_Soha, # sohaƽ̨±Ò 4
|
PayOrderType_BuyOrder, # ʹÓö©µ¥¼ÛÖµ¶ÔÓ¦»õ±ÒÖ§¸¶ 5
|
PayOrderType_PayCoin, # ´ú±Ò 6
|
) = range(1, 1 + 6)
|
|
PayOrderType_Default = PayOrderType_RMB
|
|
# ³äÖµÀàÐͶ¨Òå
|
PayType_Gold = 2 # ³£¹æÏÉÓñ³äÖµ
|
PayType_GoldPlus = 3 # ÖÁ×ðÏÉÓñ³äÖµ
|
PayType_GrowupBuy = 16 # ³É³¤±ØÂò
|
PayType_PayCoin = 17 # ´ú±Ò³äÖµ
|
|
#---------------------------------------------------------------------
|
#×¢Òâ: GetChangeCoinPointTotal ³äÖµµãºÍÔùË͵ã×ܺÍ
|
# GetPrizeCoinPointTotal ÔùË͵ã×ܺÍ
|
|
#µã¾í¶Ò»»±ÈÂÊ(´Ë±ÈÂÊÑϽûÉÏÏßÔËÓªºóÐÞ¸Ä!!!)
|
def GetCoinRate(): return IpyGameDataPY.GetFuncCfg("PayRMB")
|
|
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):
|
# ÖØÖóäÖµ´ÎÊý
|
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()
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0)
|
if not ipyData.GetCanResetBuyCount():
|
continue
|
totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
|
todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
|
weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID)
|
monthBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID)
|
if not totalBuyCount and not todayBuyCount and not weekBuyCount and not monthBuyCount:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekCTGCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, 0)
|
drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "ResetEvent":resetEvent,
|
"totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID,
|
"weekBuyCount":weekBuyCount, "monthBuyCount":monthBuyCount}
|
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 DoResetCTGCountByIDList(curPlayer, resetEvent, resetCTGIDList):
|
# ÖØÖóäÖµ´ÎÊý
|
if not resetCTGIDList:
|
return
|
playerID = curPlayer.GetPlayerID()
|
for recordID in resetCTGIDList:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0)
|
totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
|
todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
|
weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID)
|
monthBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID)
|
if not totalBuyCount and not todayBuyCount and not weekBuyCount and not monthBuyCount:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekCTGCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, 0)
|
drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "ResetEvent":resetEvent,
|
"totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID,
|
"weekBuyCount":weekBuyCount, "monthBuyCount":monthBuyCount}
|
DataRecordPack.SendEventPack("ResetCTGCount", drDict, curPlayer)
|
GameWorld.Log("ÖØÖóäÖµ´ÎÊý: resetEvent=%s,recordID=%s,totalBuyCount=%s,todayBuyCount=%s"
|
% (resetEvent, recordID, totalBuyCount, todayBuyCount), playerID)
|
Sync_CoinToGoldCountInfo(curPlayer, resetCTGIDList)
|
return
|
|
def OnDay(curPlayer):
|
## ³äÖµÏà¹Ø¹ýÌì
|
|
#ÔÚÖØÖÃ֮ǰÐèÒª´¦ÀíµÄ
|
PlayerActGrowupBuy.DoUpdateGrowupBuyStateOnDay(curPlayer) # ³É³¤±ØÂò
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCoinTotal, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealToday, 0)
|
|
syncRecordIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetCTGCount()):
|
ipyData = ipyDataMgr.GetCTGByIndex(i)
|
#if not ipyData.GetDailyBuyCount():
|
# continue
|
recordID = ipyData.GetRecordID()
|
selectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID)
|
if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID) and not selectItemValue:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0)
|
syncRecordIDList.append(recordID)
|
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):
|
syncRecordIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetCTGCount()):
|
ipyData = ipyDataMgr.GetCTGByIndex(i)
|
recordID = ipyData.GetRecordID()
|
if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID):
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekCTGCount % recordID, 0)
|
syncRecordIDList.append(recordID)
|
if syncRecordIDList:
|
Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
|
return
|
|
def OnMonth(curPlayer):
|
syncRecordIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetCTGCount()):
|
ipyData = ipyDataMgr.GetCTGByIndex(i)
|
recordID = ipyData.GetRecordID()
|
if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID):
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, 0)
|
syncRecordIDList.append(recordID)
|
if syncRecordIDList:
|
Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
|
return
|
|
|
#// A1 23 ²éѯ³äÖµ´ÎÊý #tagCMQueryCoinToGoldCount
|
#
|
#struct tagCMQueryCoinToGoldCount
|
#{
|
# tagHead Head;
|
# WORD RecordID; //³äÖµ¼Ç¼ID£¬Ò²¾ÍÊdzäÖµID£¬·¢0Ôò²éÈ«²¿
|
#};
|
def OnQueryCoinToGoldCount(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
recordID = clientData.RecordID
|
Sync_CoinToGoldCountInfo(curPlayer, [recordID] if recordID else [])
|
return
|
|
#// A1 26 ³äÖµ×ÔÑ¡ÎïÆ·Ñ¡Ôñ #tagCMSelectCTGItem
|
#
|
#struct tagCMSelectCTGItem
|
#{
|
# tagHead Head;
|
# WORD RecordID; //³äÖµID
|
# DWORD SelectItemValue; // ×ÔÑ¡ÎïÆ·Ë÷ÒýÖµ£¬Ã¿Á½Î»´æ´¢Ã¿¸ö×ÔÑ¡Ë÷Òý¶ÔӦѡÔñµÄÎïÆ·Ë÷Òý+1£¬´æ´¢Î»ÖµÎª0´ú±íδѡÔñ£¬×î¶àÖ§³ÖÑ¡Ôñ4ÖÖÎïÆ·
|
#};
|
def OnSelectCTGItem(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
recordID = clientData.RecordID
|
selectItemValue = clientData.SelectItemValue
|
if selectItemValue > ChConfig.Def_UpperLimit_DWord:
|
GameWorld.ErrLog("³äÖµ×ÔÑ¡ÎïÆ·Ñ¡ÔñÖµÒç³ö! recordID=%s,selectItemValue=%s" % (recordID, selectItemValue), playerID)
|
return
|
ipyData = IpyGameDataPY.GetIpyGameData("CTG", recordID)
|
if not ipyData:
|
return
|
selectItemInfo = ipyData.GetSelectItemInfo()
|
selectItemList, errorInfo = GetSelectItemListInfo(selectItemInfo, selectItemValue)
|
if errorInfo:
|
GameWorld.ErrLog("³äÖµ×ÔÑ¡ÎïÆ·Ñ¡Ôñ´íÎó! recordID=%s,errorInfo=%s" % (recordID, errorInfo), playerID)
|
return
|
GameWorld.DebugLog("³äÖµ×ÔÑ¡ÎïÆ·: recordID=%s,selectItemValue=%s,selectItemList=%s" % (recordID, selectItemValue, selectItemList), playerID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, selectItemValue)
|
Sync_CoinToGoldCountInfo(curPlayer, [recordID])
|
return
|
|
#// A1 25 ´ú±Ò¹ºÂò³äÖµÉÌÆ·±àºÅÉÌÆ· #tagCMCoinBuyOrderInfo
|
#
|
#struct tagCMCoinBuyOrderInfo
|
#{
|
# tagHead Head;
|
# BYTE AppIDLen;
|
# char AppID[AppIDLen];
|
# BYTE OrderInfoLen;
|
# char OrderInfo[OrderInfoLen]; //ÉÌÆ·±àºÅ
|
#};
|
def OnCoinBuyOrderInfo(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
appID = clientData.AppID
|
orderInfo = clientData.OrderInfo
|
|
ipyData = IpyGameDataPY.GetIpyGameData("OrderInfo", orderInfo, appID)
|
if not ipyData:
|
return
|
cPlayerCoin = CPY_PlayerCoinToGold()
|
cPlayerCoin.useCoin = CommFunc.RMBToCoin(ipyData.GetUsdMoney(), 100)
|
cPlayerCoin.orderInfo = orderInfo
|
cPlayerCoin.appID = appID
|
cPlayerCoin.orderID = ""
|
PlayerCoinToGold(curPlayer, cPlayerCoin, "CoinBuyOrderInfo", PayOrderType_PayCoin)
|
return
|
|
def ExchangePayCoin(curPlayer, errorInfo, addDRDict):
|
''' ³äÖµ¶Ò»»³É´ú±Ò
|
Ò»°ã¿ÉÓÃÓÚһЩ³äÖµ¶©µ¥¶Ò»»ÓÎÏ·¹¦ÄÜʱ£¬ÓÎÏ·¹¦ÄÜÓÐÏÞÖÆÈçÏÞ¹º£¬
|
¸Ã³äÖµÊÓΪ³É¹¦£¬²¢×ª»¯Îª¶ÔÓ¦´ú±Ò£¬¿ÉÒÔÀí½âΪÀàËÆ³äÖµµãȯ£¬´ú±Ò¿ÉÓÃÓÚÏ´γäֵʱ֧¸¶£»
|
'''
|
orderInfo = addDRDict.get("orderInfo", "")
|
orderCoin = addDRDict.get("orderCoin", 0)
|
payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
|
if not orderCoin or not orderInfo:
|
DataRecordPack.DR_CTGError(curPlayer, errorInfo, addDRDict)
|
return
|
eventName = addDRDict.get("eventName", "ExchangePayCoin")
|
playerID = curPlayer.GetPlayerID()
|
befPayCoin = PlayerControl.GetPayCoin(curPlayer)
|
drDict = {ChConfig.Def_Give_Reason_SonKey:orderInfo, "payOrderType":payOrderType, "orderInfo":orderInfo}
|
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_PayCoin, orderCoin, eventName, drDict)
|
aftPayCoin = PlayerControl.GetPayCoin(curPlayer)
|
GameWorld.Log("³äֵת»¯Îª´ú±Ò: orderInfo=%s,orderCoin=%s,payOrderType=%s,eventName=%s,befPayCoin=%s,aftPayCoin=%s,errorInfo=%s"
|
% (orderInfo, orderCoin, payOrderType, eventName, befPayCoin, aftPayCoin, errorInfo), playerID)
|
|
addItemList = []
|
paramList = [orderInfo, orderCoin]
|
PlayerControl.SendMailByKey("ExchangeToPayCoin", [playerID], addItemList, paramList)
|
|
if payOrderType != PayOrderType_PayCoin:
|
serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
addDRDict.update({"coinType":ChConfig.CoinType_ExchangePayCoin, "PayCoin":[befPayCoin, aftPayCoin],
|
"VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay, "eventName":eventName})
|
DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
|
return
|
|
## ´´½ÇÔùËÍ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return None
|
def GiveGoldByCreate(curPlayer):
|
giveCoinByCreate = IpyGameDataPY.GetFuncCfg("CornerPresentedMoney", 1)
|
if not giveCoinByCreate:
|
return
|
isAddBourseMoney = IpyGameDataPY.GetFuncCfg("CornerPresentedMoney", 2)
|
|
PlayerCoinToGoldEx(curPlayer, giveCoinByCreate, ChConfig.Def_GiveMoney_SuperAccountCreate, isAddBourseMoney)
|
return
|
|
def PlayerCoinToGoldEx(curPlayer, orderRMB, eventName, isAddBourseMoney):
|
## Ö±½Ó³äÖµ×Ô¶¨Òå½ð¶î
|
|
appID = GameWorld.GetPlayerPlatform(curPlayer)
|
payRMBNum = 1
|
oneRMBIpyData = None # ĬÈÏÈ¡µ¥Î»1»õ±Ò¶ÔÓ¦³äÖµÅäÖÃ
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetOrderInfoCount()):
|
ipyData = ipyDataMgr.GetOrderInfoByIndex(i)
|
# µ¥Î»1ÔªÅäÖ㬲»¹ØÁª³äÖµID¡¢Àñ°üID
|
if appID == ipyData.GetAppID() and ipyData.GetPayRMBNum() == payRMBNum and not ipyData.GetCTGID() and not ipyData.GetGiftbagID():
|
oneRMBIpyData = ipyData
|
break
|
if not oneRMBIpyData:
|
GameWorld.ErrLog("Can not found one RMB pay num orderInfo! appID=%s,payRMBNum=%s" % (appID, payRMBNum), curPlayer.GetPlayerID())
|
return
|
|
oneRMBCoinExp = oneRMBIpyData.GetCoinExp()
|
|
prizeGold = 0
|
giveItemList = []
|
orderCoin = CommFunc.RMBToCoin(orderRMB)
|
coinExp = int(orderRMB * oneRMBCoinExp)
|
addGold = coinExp # ´Ë·½Ê½Ôö¼ÓµÄÏÉÓñ = Ö±³ä¾Ñé
|
addDRDict = {"orderCoin":orderCoin, "isAddBourseMoney":isAddBourseMoney, "eventName":eventName}
|
DoCTGLogic(curPlayer, ChConfig.CoinType_Gold, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, coinExp=coinExp)
|
return True
|
|
def PlayerItemCTG(curPlayer, orderRMB, eventName, isAddBourseMoney, addDataDict={}):
|
## ʹÓÃÔùË͵ÄÎïÆ·¶Ò»»µãȯ£¬Ò»°ãÓÃÓÚbt°æ£¬ÏÞ³¬¼¶ÏÖ½ð
|
# 20210120 ¸Ų̂Ö÷¸É°æÔÝ·ÏÆú
|
# prizeGold = 0
|
# giveItemList = []
|
# orderCoin = CommFunc.RMBToCoin(orderRMB) # µ¥Î»£¬·Ö
|
# addGold = orderRMB * GetCoinRate()
|
# addDRDict = {"orderCoin":orderCoin, "eventName":eventName}
|
# addDRDict.update(addDataDict)
|
# DoCTGLogic(curPlayer, ChConfig.CoinType_ItemSuper, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict)
|
return
|
|
def DoGMCTG(curPlayer, orderInfo, appID, isAddBourseMoney, eventName):
|
## GM³äÖµ£¬°üº¬GMÃüÁîÖ±½Ó³äÖµ¡¢ºǫ́GM¹¤¾ß³äÖµ
|
ipyData = IpyGameDataPY.GetIpyGameData("OrderInfo", orderInfo, appID)
|
if not ipyData:
|
return
|
|
cPlayerCoin = CPY_PlayerCoinToGold()
|
cPlayerCoin.useCoin = CommFunc.RMBToCoin(ipyData.GetUsdMoney(), 100)
|
cPlayerCoin.orderInfo = orderInfo
|
cPlayerCoin.appID = appID
|
cPlayerCoin.isAddBourseMoney = isAddBourseMoney
|
return PlayerCoinToGold(curPlayer, cPlayerCoin, eventName)
|
|
##ÌØ±ð˵Ã÷£º³äÖµÔùË͵ãȯ¶¼Òª¼ÆËãµ½¸÷¸ö»î¶¯ÖÐ
|
##Íæ¼Òµã¾í¶Ò»»Ôª±¦.
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param useCoin ʹÓõĵã¾í
|
# @param eventName ¶Ò»»Ê¼þÃû
|
# @return None
|
def PlayerCoinToGold(curPlayer, chargeInfo, eventName, payOrderType=PayOrderType_Default):
|
## °´ÉÌÆ·±àºÅ³äÖµ
|
orderCoin = chargeInfo.GetCoin()
|
#notePrizeCoin = chargeInfo.GetPrizeCoin()
|
orderInfo = chargeInfo.GetOrderInfo() # ÉÌÆ·±àºÅ
|
orderID = chargeInfo.GetOrderID() #¶©µ¥ºÅ£¬¶Ò»»³É¹¦ºóÇå³ý
|
isAddBourseMoney = chargeInfo.GetIsAddBourseMoney()
|
if orderID:
|
curPlayer.SendDBFinishRecharge(orderID)
|
|
appID = chargeInfo.GetAppID()
|
if not appID:
|
appID = GameWorld.GetPlayerPlatform(curPlayer)
|
addDRDict = {"orderCoin":orderCoin, "orderInfo":orderInfo, "orderID":orderID,
|
"isAddBourseMoney":isAddBourseMoney, "eventName":eventName, "appID":appID}
|
|
if orderCoin <= 0:
|
DataRecordPack.DR_CTGError(curPlayer, "The orderCoin is zero!", addDRDict)
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("OrderInfo", orderInfo, appID)
|
if not ipyData:
|
DataRecordPack.DR_CTGError(curPlayer, "Can not found the orderInfo.", addDRDict)
|
return
|
|
# Ô½Äϰ汾Åä±í¼°coin¾ùʹÓÃÔ½Ä϶ÜÔÖµ£¬µ«ÊÇÑéÖ¤ÓÃÃÀÔªÑéÖ¤
|
GameWorld.Log("Ô½ÄϳäÖµÑéÖ¤ÃÀÔª: orderInfo=%s,orderCoin=%s,orderID=%s" % (orderInfo, orderCoin, orderID), curPlayer.GetPlayerID())
|
orderCoinUsd = orderCoin # Èë¿âµÄÊÇÃÀÔª·Ö
|
orderCoin = CommFunc.RMBToCoin(ipyData.GetPayRMBNum()) # ÓÎÏ·ÄÚorderCoinת»¯ÎªÔ½Ä϶Ü
|
usdMoney = ipyData.GetUsdMoney()
|
GameWorld.Log(" ת»¯ºó: orderInfo=%s,orderCoin=%s,orderCoinUsd=%s" % (orderInfo, orderCoin, orderCoinUsd), curPlayer.GetPlayerID())
|
addDRDict["orderCoin"] = orderCoin
|
addDRDict["orderCoinUsd"] = orderCoinUsd
|
if orderCoinUsd != CommFunc.RMBToCoin(usdMoney, 100):
|
DataRecordPack.DR_CTGError(curPlayer, "The orderCoinUsd is not equal to the ipyData's UsdMoney(%s)!" % usdMoney, addDRDict)
|
return
|
|
if payOrderType == PayOrderType_PayCoin:
|
if ipyData.GetCTGID():
|
ctgIpyData = IpyGameDataPY.GetIpyGameData("CTG", ipyData.GetCTGID())
|
if ctgIpyData:
|
if ctgIpyData.GetPayType() == PayType_PayCoin:
|
GameWorld.ErrLog("´ú±Ò¿É²»ÓÃÓÚÖ§¸¶´ú±Ò³äÖµ!appID=%s,orderInfo=%s" % (appID, orderInfo), curPlayer.GetPlayerID())
|
return
|
ctgID = ctgIpyData.GetRecordID()
|
payCoinLimitCTGIDList = IpyGameDataPY.GetFuncEvalCfg("RechargeLimit", 1)
|
if ctgID in payCoinLimitCTGIDList:
|
GameWorld.ErrLog("¸Ã³äÖµID¿É²»ÓÃÓÚÖ§¸¶´ú±Ò³äÖµ!appID=%s,orderInfo=%s,ctgID=%s" % (appID, orderInfo, ctgID), curPlayer.GetPlayerID())
|
return
|
#Ö±½Ó¿Û£¬ÀàËÆ³äÖµ¿ÛÇ®£¬ÕâÀïÊÇ·¢·ÅÎïÆ·£¬¿ÉÄÜ»áÓз¢·Åʧ°ÜµÄµ±×ö CTGError ´¦Àí
|
if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_PayCoin, orderCoin, eventName, {ChConfig.Def_Cost_Reason_SonKey:orderInfo, "orderInfo":orderInfo}):
|
GameWorld.ErrLog("´ú±Ò²»×ã! appID=%s,orderInfo=%s,orderCoin=%s,curPayCoinTotal=%s"
|
% (appID, orderInfo, orderCoin, PlayerControl.GetPayCoinTotal(curPlayer)), curPlayer.GetPlayerID())
|
return
|
|
addDRDict["payOrderType"] = payOrderType
|
|
moneyType, addGold, prizeGold, giveItemList, ctgIpyData = 0, 0, 0, [], None
|
|
if ipyData.GetCTGID():
|
ctgResultInfo = __GetCTGInfoByID(curPlayer, ipyData.GetCTGID(), addDRDict)
|
if not ctgResultInfo:
|
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)
|
return
|
|
coinExp = ipyData.GetCoinExp()
|
coinType = ChConfig.CoinType_Gold if (ctgIpyData and ctgIpyData.GetPayType() in [PayType_Gold, PayType_GoldPlus]) else ChConfig.CoinType_Buy # ¹æ¶¨2Ϊֱ³ä£¬ÆäËûΪֱ¹º
|
if not DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData, moneyType, coinExp):
|
return
|
|
#³äÖµ³É¹¦Ö÷¶¯²éѯһ´Î£¬ÎÞ³äÖµÊýÁ¿¾Í²»»á¼ÌÐø²éѯ
|
if orderID:
|
#curPlayer.SendDBFinishRecharge(orderID)
|
pass
|
|
# ³äÖµ³É¹¦»Ø±¨¿Í»§¶Ë£¬SDKµÈ»áÓõ½
|
recordID = ctgIpyData.GetRecordID() if ctgIpyData else 0
|
Sync_CoinToGoldReport(curPlayer, orderID, orderCoin, recordID, orderInfo)
|
|
curPlayer.SendDBQueryRecharge()
|
return True
|
|
def __GetCTGInfoByID(curPlayer, recordID, addDRDict):
|
## ¸ù¾Ý³äÖµÊý¾ÝID»ñÈ¡³äÖµÐÅÏ¢
|
|
ipyData = IpyGameDataPY.GetIpyGameData("CTG", recordID)
|
if not ipyData:
|
DataRecordPack.DR_CTGError(curPlayer, "Can not find CTG ipyData!", addDRDict)
|
return
|
|
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:
|
addDRDict.update({"totalBuyCountLimit":totalBuyCountLimit, "totalBuyCount":totalBuyCount})
|
if totalBuyCount >= totalBuyCountLimit:
|
ExchangePayCoin(curPlayer, "Pay count limit total!totalBuyCount=%s" % totalBuyCount, addDRDict)
|
return
|
|
dailyBuyCountLimit = ipyData.GetDailyBuyCount()
|
todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
|
if dailyBuyCountLimit:
|
addDRDict.update({"dailyBuyCountLimit":dailyBuyCountLimit, "todayBuyCount":todayBuyCount})
|
if todayBuyCount >= dailyBuyCountLimit:
|
ExchangePayCoin(curPlayer, "Pay count limit today!todayBuyCount=%s" % todayBuyCount, addDRDict)
|
return
|
|
weekBuyCountLimit = ipyData.GetWeekBuyCount()
|
weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID)
|
if weekBuyCountLimit:
|
addDRDict.update({"weekBuyCountLimit":weekBuyCountLimit, "weekBuyCount":weekBuyCount})
|
if weekBuyCount >= weekBuyCountLimit:
|
ExchangePayCoin(curPlayer, "Pay count limit week!weekBuyCount=%s" % weekBuyCount, addDRDict)
|
return
|
|
monthBuyCountLimit = ipyData.GetMonthBuyCount()
|
monthBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID)
|
if monthBuyCountLimit:
|
addDRDict.update({"monthBuyCountLimit":monthBuyCountLimit, "monthBuyCount":monthBuyCount})
|
if monthBuyCount >= monthBuyCountLimit:
|
ExchangePayCoin(curPlayer, "Pay count limit month!monthBuyCount=%s" % monthBuyCount, addDRDict)
|
return
|
|
selectItemList = []
|
selectItemInfo = ipyData.GetSelectItemInfo()
|
if selectItemInfo:
|
selectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID)
|
addDRDict.update({"selectItemValue":selectItemValue})
|
selectItemList, errorInfo = GetSelectItemListInfo(selectItemInfo, selectItemValue)
|
if errorInfo:
|
ExchangePayCoin(curPlayer, errorInfo, addDRDict)
|
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})
|
|
giveItemList = []
|
giveItemList += GetCTGGiveItemList(ipyData)
|
giveItemList += selectItemList
|
|
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})
|
|
Sync_CoinToGoldCountInfo(curPlayer, [recordID])
|
return moneyType, addGold, prizeGold, giveItemList, ipyData
|
|
def GetSelectItemListInfo(selectItemInfo, selectItemValue):
|
errorInfo = ""
|
selectItemList = []
|
selectValue = selectItemValue
|
GameWorld.DebugLog("selectItemValue=%s,selectItemInfo=%s" % (selectItemValue, selectItemInfo))
|
for selectNum, selectIDList in enumerate(selectItemInfo, 1):
|
selectIndex = selectValue % 100 - 1 # ¼Ç¼µÄʱºò+1
|
if selectIndex < 0:
|
errorInfo = "Select item is not complete!selectItemValue=%s,selectNum=%s,selectIndex=%s" % (selectItemValue, selectNum, selectIndex)
|
return selectItemList, errorInfo
|
if selectIndex >= len(selectIDList):
|
errorInfo = "Select item index out of range!selectItemValue=%s,selectNum=%s,selectIndex=%s" % (selectItemValue, selectNum, selectIndex)
|
return selectItemList, errorInfo
|
selectID = selectIDList[selectIndex]
|
selectIpyData = IpyGameDataPY.GetIpyGameData("CTGSelectItem", selectID)
|
if not selectIpyData:
|
errorInfo = "SelectID is not exist!selectItemValue=%s,selectNum=%s,selectIndex=%s,selectID=%s" % (selectItemValue, selectNum, selectIndex, selectID)
|
return selectItemList, errorInfo
|
selectItemList.append([selectIpyData.GetItemID(), selectIpyData.GetItemCount(), selectIpyData.GetIsAuctionItem()])
|
selectValue = selectValue / 100
|
GameWorld.DebugLog(" selectNum=%s,selectIndex=%s,selectID=%s,selectItemList=%s,selectItemValue=%s"
|
% (selectNum, selectIndex, selectID, selectItemList, selectItemValue))
|
return selectItemList, errorInfo
|
|
def GetCTGGiveItemList(ipyData):
|
## »ñÈ¡³äÖµID¶ÔÓ¦¸øÎïÆ·Áбí
|
if not ipyData:
|
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
|
return giveItemList
|
|
def DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData=None, moneyType=IPY_GameWorld.TYPE_Price_Gold_Money, coinExp=0):
|
|
if ctgIpyData and ctgIpyData.GetPayType() == PayType_PayCoin:
|
# ´ú±Ò³äÖµ£¬½ö¸ø´ú±Ò£¬²»´¥·¢ÆäËûÄÚÈÝ
|
coinType = ChConfig.CoinType_PayCoin
|
orderInfo = addDRDict.get("orderInfo", "")
|
orderCoin = addDRDict.get("orderCoin", 0)
|
payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
|
playerID = curPlayer.GetPlayerID()
|
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)
|
aftPayCoin = PlayerControl.GetPayCoin(curPlayer)
|
GameWorld.Log("³äÖµ´ú±Ò: orderInfo=%s,orderCoin=%s,payOrderType=%s,eventName=%s,befPayCoin=%s,aftPayCoin=%s"
|
% (orderInfo, orderCoin, payOrderType, eventName, befPayCoin, aftPayCoin), playerID)
|
|
serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
addDRDict.update({"coinType":coinType, "PayCoin":[befPayCoin, aftPayCoin],
|
"VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay, "eventName":eventName})
|
DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
|
return True
|
|
if coinType not in [ChConfig.CoinType_Gold, ChConfig.CoinType_Buy, ChConfig.CoinType_ItemSuper]:
|
DataRecordPack.DR_CTGError(curPlayer, "coinType error! coinType(%s)!" % coinType, addDRDict)
|
return
|
|
isRealMoney = True if addDRDict.get("orderID") else False # ÊÇ·ñÕæÊµ»õ±Ò³äÖµ£¬½öÕæÊµ»õ±Ò³äÖµ¶©µ¥ÓÐorderID£¬ºǫ́³äÖµµÄ²»ËãÕæÊµ»õ±Ò³äÖµ
|
payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
|
if payOrderType == PayOrderType_PayCoin:
|
#isRealMoney = True # ´ú±Ò³äÖµÔÚÓÎÏ·ÄÚÈÝÉÏËãÕæÊµ³äÖµ£¬tqxbqyÔݲ»Ë㣬´ú±ÒÀ´Ô´¿ÉÄÜÊÇÔùË͵쬹ÊÔݲ»Ëã
|
coinType = ChConfig.CoinType_UsePayCoin # tqxbqyÐè񻂿·Ö´ú±ÒÖ§¸¶
|
ctgRealToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealToday) # µ±ÈÕÕæÊµ»õ±Ò³äÖµCoinÊý £¬²»º¬ºǫ́³äÖµ- ½ñÈÕ
|
ctgRealTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal) # ÀÛ¼ÆÕæÊµ»õ±Ò³äÖµCoinÊý £¬²»°üºǫ́³äÖµ - ×ܼÆ
|
ctgRealFirstTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealFirstTime) # Ê×´ÎÕæÊµ»õ±Ò³äֵʱ¼ä´Á
|
if isRealMoney:
|
if not ctgRealFirstTime:
|
ctgRealFirstTime = int(time.time())
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealFirstTime, ctgRealFirstTime)
|
ctgRealToday = min(ctgRealToday + orderCoin, ChConfig.Def_UpperLimit_DWord)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealToday, ctgRealToday)
|
ctgRealTotal = min(ctgRealTotal + orderCoin, ChConfig.Def_UpperLimit_DWord)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealTotal, ctgRealTotal)
|
Sync_CoinToGoldCountInfo(curPlayer, [])
|
|
notifyMark = ctgIpyData.GetNotifyMark() if ctgIpyData else ""
|
goldBefore = curPlayer.GetGold()
|
bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
|
if addGold:
|
PlayerControl.GiveMoney(curPlayer, moneyType, addGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
|
|
if prizeGold:
|
PlayerControl.GiveMoney(curPlayer, moneyType, prizeGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
|
|
if giveItemList:
|
ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, "", event=[ChConfig.ItemGive_CTG, True, copy.deepcopy(addDRDict)])
|
if notifyMark:
|
mainItemID = giveItemList[0][0]
|
PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetName(), mainItemID, ''])
|
else:
|
if notifyMark:
|
PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetName()])
|
|
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)
|
|
goldAfter = curPlayer.GetGold()
|
changeCoinPointAfter = curPlayer.GetChangeCoinPointTotal()
|
bourseMoneyAfter = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
|
#---³äÖµ³É¹¦ºóÂß¼---
|
# ¹¦ÄÜͳһÒÔ·Ö´æ´¢¼Ç¼£¬Íæ¼Ò×ֵ䲻֧³Ö´æÐ¡Êý
|
|
# ËùÓÐÕæÊµ³äÖµ¾ùÓÐЧµÄ
|
if coinType in [ChConfig.CoinType_Gold, ChConfig.CoinType_Buy]:
|
#¿ç·þ³äÖµÅÅÐл
|
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)
|
PlayerActFamilyCTGAssist.OnPlayerCTG(curPlayer)
|
#¿ª·þ»î¶¯
|
#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()
|
PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
|
PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
|
PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
|
PlayerMineArea.OnMineTreasureByCTGID(curPlayer, ctgID)
|
PlayerTongTianLing.OnActiviteTTTByCTGID(curPlayer, ctgID)
|
|
serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_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,
|
"ctgRealToday":ctgRealToday, "ctgRealTotal":ctgRealTotal, "ctgRealFirstTime":GameWorld.ChangeTimeNumToStr(ctgRealFirstTime) if ctgRealFirstTime else ""})
|
DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
|
GameWorld.Log("Billing: coinType=%s,eventName=%s, %s" % (coinType, eventName, addDRDict), curPlayer.GetPlayerID())
|
return True
|
|
#===============================================================================
|
|
## Ä£Äâ³äÖµÐÅÏ¢£¬µãȯ³äÖµÐÅÏ¢
|
#
|
# µãȯ³äÖµÐÅÏ¢
|
class CPY_PlayerCoinToGold():
|
|
## ³õʼ»¯
|
# @param ²ÎÊý
|
# @return ·µ»ØÖµ
|
# @remarks
|
def __init__(self):
|
|
self.useCoin = 0 # ³äÖµ½ð¶î webÓжԽð¶î½øÐд¦Àí£¬×ªÕûÊýÈ絥λ1.10ԪתΪ110·Ö
|
self.prizeCoin = 0 # Ôݲ»Ê¹ÓÃ
|
self.appendix = '' # Ôݲ»Ê¹ÓÃ
|
self.orderInfo = "" # ÉÌÆ·±àºÅ È繺ÂòÀñ°ü Ô¿¨ ³äÖµ½ð¶îµÈ
|
self.appID = ""
|
self.orderID = ""
|
self.isAddBourseMoney = False # ÊÇ·ñͬ²½Ôö¼Ó½»Ò×Ëù¹ºÂò¶î¶È
|
return
|
|
## ʹÓõãȯÊý
|
# @param ²ÎÊý
|
# @return ·µ»ØÖµ
|
# @remarks
|
def GetCoin(self):
|
return self.useCoin
|
|
|
## ÔùË͵ãȯÊý
|
# @param ²ÎÊý
|
# @return ·µ»ØÖµ
|
# @remarks
|
def GetPrizeCoin(self):
|
return self.prizeCoin
|
|
|
## ¸½¼ÓÐÅÏ¢
|
# @param self
|
# @return None
|
def GetAppendix(self):
|
return self.appendix
|
|
# ÉÌÆ·±àºÅ
|
def GetOrderInfo(self):
|
return self.orderInfo
|
|
def GetAppID(self): return self.appID
|
|
def GetOrderID(self):
|
return self.orderID
|
|
def GetIsAddBourseMoney(self): return self.isAddBourseMoney
|
|
|
# ֪ͨ¿Í»§¶Ë±¾´Î³äÖµ½ð¶î£¬ÓÃÓÚSDKµÈ£¬coinΪÈËÃñ±Òµ¥Î»·Ö
|
def Sync_CoinToGoldReport(curPlayer, orderID, money, recordID, orderInfo):
|
openGleeGame = ChPyNetSendPack.tagMCCoinToGoldReport()
|
openGleeGame.Clear()
|
openGleeGame.OrderLen = len(orderID)
|
openGleeGame.OrderID = orderID
|
openGleeGame.Coin = money
|
openGleeGame.RecordID = recordID
|
openGleeGame.OrderInfo = orderInfo
|
openGleeGame.OrderInfoLen = len(openGleeGame.OrderInfo)
|
|
NetPackCommon.SendFakePack(curPlayer, openGleeGame)
|
return
|
|
def Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList=None):
|
if syncRecordIDList == None:
|
syncRecordIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetCTGCount()):
|
ipyData = ipyDataMgr.GetCTGByIndex(i)
|
syncRecordIDList.append(ipyData.GetRecordID())
|
|
#if not syncRecordIDList:
|
# return
|
|
countInfoPack = ChPyNetSendPack.tagMCCoinToGoldCountInfo()
|
countInfoPack.Clear()
|
countInfoPack.RealToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealToday)
|
countInfoPack.RealTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
|
countInfoPack.RealFirstTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealFirstTime)
|
countInfoPack.CTGCountInfoList = []
|
for recordID in syncRecordIDList:
|
countInfo = ChPyNetSendPack.tagMCCoinToGoldCount()
|
countInfo.RecordID = recordID
|
countInfo.TodayPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
|
countInfo.TotalPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
|
countInfo.WeekPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID)
|
countInfo.MonthPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID)
|
countInfo.SelectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID)
|
countInfoPack.CTGCountInfoList.append(countInfo)
|
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
|
|
## ------------------------------------------
|