From 789490b7d362160f7fca4580df6176498e1eb271 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 15 十一月 2024 15:19:13 +0800 Subject: [PATCH] 10302 【越南】【英语】【砍树】【tqxbqy】【btgotq】仙缘-服务端 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py | 97 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 89 insertions(+), 8 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py index 776da9b..98fcc39 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLoginNew.py @@ -16,15 +16,18 @@ #------------------------------------------------------------------------------- import PyGameData +import PlayerCoin import ShareDefine import PlayerControl import IpyGameDataPY +import PlayerZhanling import ChPyNetSendPack import ItemControler import IPY_GameWorld import NetPackCommon import GameWorld import ChConfig +import time def OnPlayerLogin(curPlayer): @@ -32,10 +35,35 @@ actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) isReset = __CheckPlayerActLoginAction(curPlayer, actNum) # 活动中同步活动信息 - if not isReset and actInfo.get(ShareDefine.ActKey_State): + if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum): Sync_ActLoginActionInfo(curPlayer, actNum) Sync_ActLoginPlayerInfo(curPlayer, actNum) + return + +def OnDay(curPlayer): + OnCheckRelateFuncAct(curPlayer) + return + +def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None): + ## 检查关联功能ID开启的活动 + for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActLoginNew, {}).values(): + if not actInfo.get(ShareDefine.ActKey_State): + continue + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID) + if not ipyData: + continue + if not hasattr(ipyData, "GetRelateFuncID"): + continue + relateFuncID = ipyData.GetRelateFuncID() + if not relateFuncID: + continue + if openFuncIDList and relateFuncID not in openFuncIDList: + continue + actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) + __CheckPlayerActLoginAction(curPlayer, actNum) + return def RefreshActLoginActionInfo(actNum): @@ -59,6 +87,12 @@ playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) # 玩家身上的活动ID + funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActLoginNew", actInfo, playerActID) + if funcActInfo: + isInAct, actID = funcActInfo + if not isInAct: + return + # 活动ID 相同的话不处理 if actID == playerActID: GameWorld.DebugLog("新登录活动ID不变,不处理! actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID()) @@ -67,8 +101,16 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAwardEx % actNum, 0) if state: + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID) + if ipyData: + if ipyData.GetAwardExCTGID(): + PlayerCoin.DoResetCTGCountByIDList(curPlayer, "ActLoginNew", [ipyData.GetAwardExCTGID()]) + if ipyData.GetActZhanlingType(): + PlayerZhanling.ResetZhanling(curPlayer, ipyData.GetActZhanlingType()) Sync_ActLoginActionInfo(curPlayer, actNum) Sync_ActLoginPlayerInfo(curPlayer, actNum) return True @@ -76,6 +118,8 @@ def OnGetActLoginAward(curPlayer, dayNum, actNum): ## 领取活动奖励 + isAwardEx = dayNum / 1000 + dayNum = dayNum % 1000 actNum = GameWorld.ToIntDef(actNum) actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum) @@ -87,7 +131,11 @@ GameWorld.DebugLog("非登录活动中! actNum=%s" % actNum) return - curDayNum = actInfo.get(ShareDefine.ActKey_DayIndex) + 1 + playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) + if not playerActID: + return + + curDayNum = GameWorld.GetDiff_Day(int(time.time()), playerActID) + 1 if curDayNum < dayNum: GameWorld.DebugLog("未到可领取的登录天,无法领取! actNum=%s,curDayNum=%s < %s" % (actNum, curDayNum, dayNum)) return @@ -111,9 +159,25 @@ if not findIpyData: GameWorld.DebugLog("找不到对应登录天奖励! actNum=%s,cfgID=%s,templateID=%s,dayNum=%s" % (actNum, cfgID, templateID, dayNum)) return - awardItemList = findIpyData.GetLoginAwardItemList() + + if isAwardEx: + awardExCTGID = ipyData.GetAwardExCTGID() + if not awardExCTGID: + GameWorld.DebugLog("该登录活动没有扩展奖励! actNum=%s,cfgID=%s" % (actNum, cfgID)) + return + if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % awardExCTGID): + GameWorld.DebugLog("该登录活动扩展奖励礼包未购买,无法领取! actNum=%s,cfgID=%s,awardExCTGID=%s" % (actNum, cfgID, awardExCTGID)) + return + stateKey = ChConfig.Def_PDict_ActLoginNewAwardEx + awardItemList = findIpyData.GetLoginAwardItemListEx() + else: + stateKey = ChConfig.Def_PDict_ActLoginNewAward + awardItemList = findIpyData.GetLoginAwardItemList() - awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum) + if not awardItemList: + return + + awardRecord = curPlayer.NomalDictGetProperty(stateKey % actNum) if awardRecord & pow(2, dayNum): GameWorld.DebugLog("登录活动该天已领奖! actNum=%s,dayNum=%s,awardRecord=%s" % (actNum, dayNum, awardRecord)) return @@ -129,13 +193,13 @@ return if costMoneyType and costMoneyValue: - PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum}) + PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum, "isAwardEx":isAwardEx}) updAwardRecord = awardRecord | pow(2, dayNum) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, updAwardRecord) + PlayerControl.NomalDictSetProperty(curPlayer, stateKey % actNum, updAwardRecord) Sync_ActLoginPlayerInfo(curPlayer, actNum) - GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,awardItemList=%s" % (actNum, dayNum, awardItemList)) + GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,isAwardEx=%s,awardItemList=%s,curDayNum=%s" % (actNum, dayNum, isAwardEx, awardItemList, curDayNum)) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActLoginNew", False, {}]) @@ -147,6 +211,7 @@ clientPack = ChPyNetSendPack.tagMCActLoginPlayerInfoNew() clientPack.ActNum = actNum clientPack.LoginAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum) + clientPack.LoginAwardEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAwardEx % actNum) NetPackCommon.SendFakePack(curPlayer, clientPack) return @@ -156,6 +221,9 @@ if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): + return + playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) + if not playerActID: return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID) @@ -167,7 +235,10 @@ if not dayIpyDataList: return - startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) + if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID(): + startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True) + else: + startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) actPack = ChPyNetSendPack.tagMCActLoginNew() actPack.Clear() actPack.ActNum = actNum @@ -176,6 +247,7 @@ actPack.LimitLV = ipyData.GetLVLimit() actPack.RepSignMoneyType = moneyType actPack.RepSignMoneyValue = moneyValue + actPack.AwardExCTGID = ipyData.GetAwardExCTGID() actPack.AwardDayList = [] for dayIpyData in dayIpyDataList: @@ -190,6 +262,15 @@ dayInfo.AwardItemList.append(itemInfo) dayInfo.Count = len(dayInfo.AwardItemList) + dayInfo.AwardItemListEx = [] + for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemListEx(): + itemInfo = ChPyNetSendPack.tagMCActLoginNewItem() + itemInfo.ItemID = itemID + itemInfo.ItemCount = itemCount + itemInfo.IsBind = isAuctionItem + dayInfo.AwardItemListEx.append(itemInfo) + dayInfo.CountEx = len(dayInfo.AwardItemListEx) + actPack.AwardDayList.append(dayInfo) actPack.DayCount = len(actPack.AwardDayList) NetPackCommon.SendFakePack(curPlayer, actPack) -- Gitblit v1.8.0