From 5a0157d6388bf849498760563c57014be8b17122 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 12 三月 2025 14:55:51 +0800 Subject: [PATCH] 10416 【英文】【bt】【GM】【砍树】登录基金和幻境基金 完成后可以重置购买 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py index 809079f..ad3e140 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py @@ -50,6 +50,7 @@ def OnPlayerLogin(curPlayer): for zhanlingType in ZhanlingTypeList: + CheckZhanlingAllFinish(curPlayer, zhanlingType) # 因为是后面加的功能,为了处理线上玩家及兼容之后可能修改配置等,故上线默认检查一次 if zhanlingType == ZhanlingType_Login: value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType) if not value1: @@ -57,6 +58,23 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime) GameWorld.DebugLog("设置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID()) SyncZhanlingInfo(curPlayer, zhanlingType) + return + +def OnDay(curPlayer): + resetZhanlingDict = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {}) + for zhanlingTypeStr, cdDays in resetZhanlingDict.items(): + zhanlingType = int(zhanlingTypeStr) + finishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType) + if not finishTime: + GameWorld.DebugLog("战令奖励未全部领取,不重置! zhanlingType=%s" % zhanlingType, curPlayer.GetPlayerID()) + continue + passDays = GameWorld.GetDiff_Day(int(time.time()), finishTime) + if passDays < cdDays: + GameWorld.DebugLog("战令重置CD天未到,不重置! zhanlingType=%s,passDays=%s < %s, finishTime=%s" + % (zhanlingType, passDays, cdDays, GameWorld.ChangeTimeNumToStr(finishTime)), curPlayer.GetPlayerID()) + continue + ResetZhanling(curPlayer, int(zhanlingTypeStr)) + return def OnActiviteByCTGID(curPlayer, ctgID): @@ -109,6 +127,10 @@ elif zhanlingType in ZhanlingValue1TypeList: backValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, 0) + elif zhanlingType == ZhanlingType_Login: + firstLoginTime = int(time.time()) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime) + GameWorld.DebugLog("重置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID()) GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)" % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID()) @@ -119,6 +141,8 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, 0) SyncZhanlingInfo(curPlayer, zhanlingType) return @@ -267,7 +291,39 @@ ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem]) ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "Zhanling") + if str(zhanlingType) in IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {}): + CheckZhanlingAllFinish(curPlayer, zhanlingType) return + +def CheckZhanlingAllFinish(curPlayer, zhanlingType): + ## 判断战令类型是否所有奖励已领取 + + if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType): + return True + + ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True) + if not ipyDataList: + return + + for ipyData in ipyDataList: + rewardIndex = ipyData.GetRewardIndex() + + if ipyData.GetZLRewardItemListH() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]): + GameWorld.DebugLog("还有高级战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID()) + return + + if ipyData.GetZLRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]): + GameWorld.DebugLog("还有普通战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID()) + return + + if ipyData.GetFreeRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]): + GameWorld.DebugLog("还有免费战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID()) + return + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, int(time.time())) + SyncZhanlingInfo(curPlayer, zhanlingType) + GameWorld.DebugLog("设置战令已全部领取完毕! zhanlingType=%s" % (zhanlingType), curPlayer.GetPlayerID()) + return True def SyncZhanlingInfo(curPlayer, zhanlingType, ipyDataList=None): @@ -292,6 +348,7 @@ clientPack.ZhanlingType = zhanlingType clientPack.IsActivite = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)&pow(2, zhanlingType) else 0 clientPack.IsActiviteH = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)&pow(2, zhanlingType) else 0 + clientPack.AllFinishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType) clientPack.Value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType) clientPack.RewardList = rewardList clientPack.RewardCount = len(clientPack.RewardList) -- Gitblit v1.8.0