#!/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_VND # ³äÖµÀàÐͶ¨Òå 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 #Ö±½Ó¿Û£¬ÀàËÆ³äÖµ¿ÛÇ®£¬ÕâÀïÊÇ·¢·ÅÎïÆ·£¬¿ÉÄÜ»áÓз¢·Åʧ°ÜµÄµ±×ö 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 # ´ú±Ò³äÖµÔÚÓÎÏ·ÄÚÈÝÉÏËãÕæÊµ³äÖµ 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) 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.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 ## ------------------------------------------