From 388823edfe6308cba6f76ca6dc4f20022c5cb2be Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 30 六月 2025 19:03:50 +0800 Subject: [PATCH] 10431 【英文】看广告获得限时代金券 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 4 + ServerPython/db/PyMongoDataServer/GMToolLogicProcess/Commands/GMT_GetPlayerInfo.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 23 +++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 4 +- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerInfo.py | 2 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 4 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 56 ++++++++++++++++++++------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 5 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4 + 9 files changed, 82 insertions(+), 22 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py index 2dfe3f7..929b436 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py @@ -1223,6 +1223,7 @@ TYPE_Price_Tuijinbi = 48 # 推金币次数 TYPE_Price_XianyuanScore = 49 # 仙缘积分 TYPE_Price_HuanjinggeScore = 50 # 幻境阁积分 +TYPE_Price_PayCoinDay = 98 # 代币时效,每日过天重置 TYPE_Price_PayCoin = 99 # 代币 #key可用于遍历所有货币,value仅GM相关会用到 @@ -1232,7 +1233,7 @@ 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 48:"推金币次数", 49:"仙缘积分", 50:"幻境阁积分", - 99:"代币" + 98:"代币时效", 99:"代币" } #需要记录累计消耗的货币类型 @@ -1275,6 +1276,7 @@ TYPE_Price_Tuijinbi:CDBPlayerRefresh_Tuijinbi, TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore, TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore, + TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay, } # 支持负值的货币及对应0418刷新类型 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index c4c542e..2f1d79a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -3703,6 +3703,7 @@ Def_PDict_ShareGameAwardState = "ShareGameAwardState" # 每日分享游戏领奖记录 Def_PDict_GoodGameAwardState = "GoodGameAwardState" # 游戏好评领奖记录 Def_PDict_LikeGameAwardState = "LikeGameAwardState" # 游戏点赞领奖记录 +Def_PDict_ADAwardCnt = "ADAwardCnt" # 游戏广告每日奖励次数 Def_PDict_EquipViewCacheState = "EquipViewCacheState" # 本次上线是否同步过装备缓存 Def_PDict_PackDataSyncState = "PackDataSyncState" # 本次上线打包数据同步状态,按位存储是否同步 0-本服,1-跨服 Def_PDict_PackDataSyncFightPower = "PackDataSyncFightPower" # 本次上线打包数据同步时的战力,用于对比,只对比求余亿部分即可 @@ -6113,7 +6114,8 @@ Def_RewardType_LunhuidianAward, # 轮回殿奖励 78 Def_RewardType_RechargeDayAward, # 累充每日奖励 79 Def_RewardType_FamilyGCZ, # 仙盟攻城战 80 -)= range(81) +Def_RewardType_ADAward, # 每日广告奖励 81 +)= range(82) #boss复活相关活动定义 BossRebornActIDList = ( diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index 7b529a6..93ad697 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -969,6 +969,10 @@ shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState) if shareGameAwardState: Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, shareGameAwardState) + #每日广告奖励 + adAwardCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADAwardCnt) + if adAwardCnt: + Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ADAward, adAwardCnt) #游戏好评奖励 goodGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoodGameAwardState) if goodGameAwardState: @@ -5766,6 +5770,9 @@ #游戏点赞奖励67 elif rewardType == ChConfig.Def_RewardType_LikeGame: OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_LikeGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 4)) + #每日广告奖励 + elif rewardType == ChConfig.Def_RewardType_ADAward: + OnGetADAward(curPlayer) return ## 领取创角奖励 @@ -5789,6 +5796,22 @@ NetPackCommon.SendFakePack(curPlayer, sendPack) return +def OnGetADAward(curPlayer): + ## 每日广告奖励 + maxCnt = IpyGameDataPY.GetFuncCfg("ADAward", 1) + adAwardCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADAwardCnt) + if adAwardCnt >= maxCnt: + GameWorld.DebugLog("已达每日广告最大领奖次数! adAwardCnt=%s >= %s" % (adAwardCnt, maxCnt)) + return + + if not ItemCommon.GiveAwardItem(curPlayer, IpyGameDataPY.GetFuncEvalCfg("ADAward", 2)): + return + + updAwardCnt = adAwardCnt + 1 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADAwardCnt, updAwardCnt) + Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ADAward, updAwardCnt) + return + def OnGiveAwardByClient(curPlayer, rewardType, dictKey, awardCfg): ## 发放前端控制的奖励,后端只负责发放奖励,是否可领奖前端自行判断 if curPlayer.NomalDictGetProperty(dictKey): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py index 08de77a..0f0ffab 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py @@ -470,8 +470,8 @@ return #直接扣,类似充值扣钱,这里是发放物品,可能会有发放失败的当做 CTGError 处理 if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_PayCoin, payCoin, eventName, {ChConfig.Def_Cost_Reason_SonKey:orderInfo, "orderInfo":orderInfo}): - GameWorld.ErrLog("代币不足! appID=%s,orderInfo=%s,payCoin=%s,curPayCoin=%s" - % (appID, orderInfo, payCoin, PlayerControl.GetPayCoin(curPlayer)), curPlayer.GetPlayerID()) + GameWorld.ErrLog("代币不足! appID=%s,orderInfo=%s,payCoin=%s,curPayCoinTotal=%s" + % (appID, orderInfo, payCoin, PlayerControl.GetPayCoinTotal(curPlayer)), curPlayer.GetPlayerID()) return addDRDict["payOrderType"] = payOrderType diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py index 28366ae..3aaf2ef 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -3055,7 +3055,7 @@ #代币支付 elif TYPE_Price == ShareDefine.TYPE_Price_PayCoin: - needMoneyCount = GetPayCoin(curPlayer) + needMoneyCount = GetPayCoinTotal(curPlayer) #自定义货币 elif TYPE_Price in ShareDefine.TYPE_Price_CurrencyDict: @@ -3219,10 +3219,21 @@ #代币支付 elif type_Price == ShareDefine.TYPE_Price_PayCoin: curPlayerPayCoin = GetPayCoin(curPlayer) - if curPlayerPayCoin < price: + curPayCoinDay = GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay) + payCoinTotal = curPlayerPayCoin + curPayCoinDay + if payCoinTotal < price: return False #有足够的钱支付 - SetPayCoin(curPlayer, curPlayerPayCoin - price) + costPayCoinDay = price if (curPayCoinDay >= price) else curPayCoinDay + costPayCoin = price + if costPayCoinDay: + GameWorld.DebugLog("先扣代币时效: curPayCoinDay=%s,price=%s,costPayCoinDay=%s" % (curPayCoinDay, price, costPayCoinDay)) + SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay, curPayCoinDay - costPayCoinDay) + costPayCoin -= costPayCoinDay + GameWorld.DebugLog("再扣代币: costPayCoin=%s" % (costPayCoin)) + #时效不够扣除,再扣非时效 + if costPayCoin > 0: + SetPayCoin(curPlayer, curPlayerPayCoin - costPayCoin) #自定义货币 elif type_Price in ShareDefine.TYPE_Price_CurrencyDict: @@ -3324,17 +3335,19 @@ and costType == ChConfig.Def_Cost_Unknown: #GameWorld.DebugLog("该货币没有指定消费类型不记录!type_Price=%s,costType=%s" % (type_Price, costType)) return + if type_Price == ShareDefine.TYPE_Price_PayCoin: + playerID = curPlayer.GetPlayerID() + nowMoney = GetMoneyReal(curPlayer, type_Price) + payCoinDay = GetMoney(curPlayer, ShareDefine.TYPE_Price_PayCoinDay) + infoDict["PlayerMoneyCount2"] = payCoinDay + orderInfo = infoDict.get("orderInfo", "") + GameWorld.Log("记录消耗代币: eventName=%s,price=%s,nowMoney=%s,payCoinDay=%s,orderInfo=%s" % (eventName, price, nowMoney, payCoinDay, orderInfo), playerID) + GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [2, price, nowMoney, payCoinDay], orderInfo, 1) # 流向用 eventName #if eventName: DataRecordPack.DR_UseMoney(curPlayer, eventName, type_Price, price, infoDict) # 流向 EventReport.WriteEvent_virtual_resource(curPlayer, type_Price, reason_name, quantity, unitPrice, ShareDefine.Def_UserAction_Money_Use, infoDict) - if type_Price == ShareDefine.TYPE_Price_PayCoin: - playerID = curPlayer.GetPlayerID() - nowMoney = GetMoneyReal(curPlayer, type_Price) - orderInfo = infoDict.get("orderInfo", "") - GameWorld.Log("记录消耗代币: eventName=%s,price=%s,nowMoney=%s,orderInfo=%s" % (eventName, price, nowMoney, orderInfo), playerID) - GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [2, price, nowMoney], orderInfo, 1) #=========================================================================== # if type_Price == IPY_GameWorld.TYPE_Price_Gold_Money: # EventReport.WriteEvent_virtual_cost(curPlayer, quantity, unitPrice, reason_name) @@ -3523,6 +3536,10 @@ DataRecordPack.DR_GiveMoneyError(curPlayer, priceType, value, giveType, addDataDict) return + # 时效代币后续处理均视为代币,包含系统提示、记录、流向等 + if priceType == ShareDefine.TYPE_Price_PayCoinDay: + priceType = ShareDefine.TYPE_Price_PayCoin + if isSysHint and priceType != ShareDefine.TYPE_Price_BourseMoney: #通知客户端得到金钱 if priceType == ShareDefine.TYPE_Price_PayCoin: @@ -3547,16 +3564,18 @@ eventName = ChConfig.Def_GetType_Dict[giveType] addDataDict["eventName"] = eventName - DataRecordPack.DR_GiveMoney(curPlayer, eventName, priceType, value, addDataDict) - EventReport.WriteEvent_virtual_resource(curPlayer, priceType, giveType, 1, value, - ShareDefine.Def_UserAction_Money_Get, addDataDict) - if priceType == ShareDefine.TYPE_Price_PayCoin: playerID = curPlayer.GetPlayerID() nowMoney = GetMoneyReal(curPlayer, priceType) + payCoinDay = GetMoney(curPlayer, ShareDefine.TYPE_Price_PayCoinDay) + addDataDict["PlayerMoneyCount2"] = payCoinDay orderInfo = addDataDict.get("orderInfo", "") - GameWorld.Log("记录获得代币: eventName=%s,value=%s,nowMoney=%s,orderInfo=%s" % (eventName, value, nowMoney, orderInfo), playerID) - GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [1, value, nowMoney], orderInfo, 1) + GameWorld.Log("记录获得代币: eventName=%s,value=%s,nowMoney=%s,payCoinDay=%s,orderInfo=%s" % (eventName, value, nowMoney, payCoinDay, orderInfo), playerID) + GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [1, value, nowMoney, payCoinDay], orderInfo, 1) + + DataRecordPack.DR_GiveMoney(curPlayer, eventName, priceType, value, addDataDict) + EventReport.WriteEvent_virtual_resource(curPlayer, priceType, giveType, 1, value, + ShareDefine.Def_UserAction_Money_Get, addDataDict) #=============================================================================== # reason_name = "Unknown" if not giveType else giveType # eventName = reason_name @@ -6434,8 +6453,15 @@ def SetChatBubbleBox(curPlayer, value): return curPlayer.SetExAttr10(value, False, True) ##游戏充值支付代币 +def GetPayCoinTotal(curPlayer): return GetPayCoin(curPlayer) + GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay) def GetPayCoin(curPlayer): return curPlayer.GetExAttr11() def SetPayCoin(curPlayer, value): return curPlayer.SetExAttr11(min(value, ChConfig.Def_UpperLimit_DWord), False, False) +def PayCoinOnDay(curPlayer): + # 每日过天清除时效代币 + payCoinDay = GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay) + if payCoinDay > 0: + PayMoney(curPlayer, ShareDefine.TYPE_Price_PayCoin, payCoinDay, "PayCoinOnDay") + return ## 获取佩戴的称号ID def GetTitleID(curPlayer): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py index a0b6dcd..f74af48 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -571,6 +571,7 @@ PlayerLove.DoPlayerOnDay(curPlayer) #仙宫 PlayerXiangong.PlayerOnDay(curPlayer) + PlayerControl.PayCoinOnDay(curPlayer) PlayerSuperDiscount.PlayerOnDay(curPlayer) #玩法前瞻奖励 gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState) @@ -582,6 +583,10 @@ if shareGameAwardState: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0) ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0) + #每日广告奖励 + if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADAwardCnt): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADAwardCnt, 0) + ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ADAward, 0) # 特殊时间点X点过天 elif onEventType == ShareDefine.Def_OnEventTypeEx: # 资源找回 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerInfo.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerInfo.py index 1882f46..e7be6ae 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerInfo.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerInfo.py @@ -66,7 +66,7 @@ # 需要额外同步的自定义货币 CurrencyValueDict = {} - for moneyType in [ShareDefine.TYPE_Price_PayCoin]: + for moneyType in [ShareDefine.TYPE_Price_PayCoin, ShareDefine.TYPE_Price_PayCoinDay]: CurrencyValueDict['PlayerCurrency_%s' % moneyType] = PlayerControl.GetMoneyReal(curPlayer, moneyType) playerInfo.update(CurrencyValueDict) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py index 2dfe3f7..929b436 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py @@ -1223,6 +1223,7 @@ TYPE_Price_Tuijinbi = 48 # 推金币次数 TYPE_Price_XianyuanScore = 49 # 仙缘积分 TYPE_Price_HuanjinggeScore = 50 # 幻境阁积分 +TYPE_Price_PayCoinDay = 98 # 代币时效,每日过天重置 TYPE_Price_PayCoin = 99 # 代币 #key可用于遍历所有货币,value仅GM相关会用到 @@ -1232,7 +1233,7 @@ 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 48:"推金币次数", 49:"仙缘积分", 50:"幻境阁积分", - 99:"代币" + 98:"代币时效", 99:"代币" } #需要记录累计消耗的货币类型 @@ -1275,6 +1276,7 @@ TYPE_Price_Tuijinbi:CDBPlayerRefresh_Tuijinbi, TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore, TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore, + TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay, } # 支持负值的货币及对应0418刷新类型 diff --git a/ServerPython/db/PyMongoDataServer/GMToolLogicProcess/Commands/GMT_GetPlayerInfo.py b/ServerPython/db/PyMongoDataServer/GMToolLogicProcess/Commands/GMT_GetPlayerInfo.py index 9d53d2c..e8b83cf 100644 --- a/ServerPython/db/PyMongoDataServer/GMToolLogicProcess/Commands/GMT_GetPlayerInfo.py +++ b/ServerPython/db/PyMongoDataServer/GMToolLogicProcess/Commands/GMT_GetPlayerInfo.py @@ -154,7 +154,7 @@ # 需要额外同步的自定义货币 CurrencyValueDict = {} - for moneyType in [99]: + for moneyType in [99, 98]: if moneyType == 99: moneyValue = dbPlayer.ExAttr11 else: -- Gitblit v1.8.0