From bb652eeae4e39ee66f342975a2804ae305f0f969 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 十二月 2020 10:26:41 +0800 Subject: [PATCH] 4869 【主干】【长尾】【BT】七日巡礼重置逻辑优化;运营活动所处天索引逻辑优化; --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py | 132 +++++++++++++++++++------------------------ 1 files changed, 58 insertions(+), 74 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py index b18350d..cdb60de 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py @@ -42,6 +42,7 @@ # 活动中同步活动信息 SyncWeekPartyInfo(curPlayer) if actCostRebateInfo.get(ShareDefine.ActKey_State): + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False) SyncWeekPartyPlayerInfo(curPlayer) return @@ -61,36 +62,32 @@ playerID = curPlayer.GetPlayerID() actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {}) - #WeekPartyID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0) state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0) + actID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0) cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0) - passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) - if state: - #每天都要触发 - AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False) - AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False) - AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False) - AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False) - SyncWeekPartyPlayerInfo(curPlayer) - playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动ID + playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动ID + playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动配置ID # 活动ID 相同的话不处理 - if cfgID == playerWeekPartyID: - #GameWorld.DebugLog("周狂欢活动ID不变,不处理!", curPlayer.GetPlayerID()) + if actID == playerActID: + GameWorld.DebugLog("周狂欢活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID()) + if state: + CheckWeekPartyActionCnt(curPlayer, True) return - CheckWeekPartyActionCnt(curPlayer) # 未领取的奖励邮件发放 if playerWeekPartyID: __SendWeekPartyMail(curPlayer, playerWeekPartyID) - - if not cfgID: - GameWorld.DebugLog(' 周狂欢活动重置!') - curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty) - - GameWorld.DebugLog("周狂欢变更! state=%s,cfgID=%s,playerWeekPartyID=%s" % (state, cfgID, playerWeekPartyID), playerID) - - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty) - SyncWeekPartyInfo(curPlayer) + GameWorld.DebugLog('周狂欢活动重置!') + curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty) + + GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s" % (state, actID, cfgID, playerWeekPartyID), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty) + if state: + CheckWeekPartyActionCnt(curPlayer, False) + SyncWeekPartyInfo(curPlayer) + SyncWeekPartyPlayerInfo(curPlayer) + return True @@ -151,7 +148,7 @@ if not cfgID: return - if not state and actionID not in ChConfig.AheadFinishWPActList: + if not state: return actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID) @@ -161,27 +158,6 @@ dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0) if dayIndex >= len(templateIDList): return - if actionID in ChConfig.AheadFinishWPActList: - isFind = False - for day, dayTidList in enumerate(templateIDList[dayIndex:]): - findTid = 0 - for tid in dayTidList: - if tid / 100 == actionID: - findTid = tid - break - if not findTid: - continue - ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid) - if not ipyData: - continue - totalTimes = ipyData.GetTotalTimes() - if addCnt != totalTimes: - continue - dayIndex = day + dayIndex - isFind = True - break - if not isFind: - return dayTidList = templateIDList[dayIndex] findTidList = [] @@ -211,7 +187,7 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_WeekParty) #加积分 singleTimes = ipyData.GetSingleTimes() - addPoint = (curTimes % singleTimes + realAddCnt)/singleTimes* ipyData.GetPoint() + addPoint = (curTimes % singleTimes + realAddCnt) / singleTimes * ipyData.GetPoint() curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_WeekParty) updPoint = curPoint + addPoint PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_WeekParty) @@ -220,35 +196,43 @@ SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid) return True - -def CheckWeekPartyActionCnt(curPlayer): +def CheckWeekPartyActionCnt(curPlayer, isSync): + ## 同步活动状态时需要触发的 + + # 灵宠激活 + petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet) + for petDataIndex in range(petDataPack.GetCount()): + petItem = petDataPack.GetAt(petDataIndex) + if petItem.IsEmpty(): + continue + petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID) + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync) + + # 出战神兽 ipyDataMgr = IpyGameDataPY.IPY_Data() - for actionType in ChConfig.AheadFinishWPActList: - if actionType == ChConfig.Def_WPAct_Pet: - petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet) - for petDataIndex in range(petDataPack.GetCount()): - petItem = petDataPack.GetAt(petDataIndex) - if petItem.IsEmpty(): - continue - petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID) - AddWeekPartyActionCnt(curPlayer, actionType, petNPCID, False) - elif actionType == ChConfig.Def_WPAct_Dogz: - for i in xrange(ipyDataMgr.GetDogzCount()): - ipyData = ipyDataMgr.GetDogzByIndex(i) - if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i): - AddWeekPartyActionCnt(curPlayer, actionType, ipyData.GetDogzID(), False) - elif actionType == ChConfig.Def_WPAct_Rune: - runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4) - for holeNum in xrange(1, runeHoleCnt + 1): - runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0) - if not runeData: - continue - runeItemID = ItemControler.GetRuneItemID(runeData) - itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID) - if not itemData: - continue - itemColor = itemData.GetItemColor() - AddWeekPartyActionCnt(curPlayer, actionType, itemColor, False) + for i in xrange(ipyDataMgr.GetDogzCount()): + ipyData = ipyDataMgr.GetDogzByIndex(i) + if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i): + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync) + + # 穿戴某品质符印 + runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4) + for holeNum in xrange(1, runeHoleCnt + 1): + runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0) + if not runeData: + continue + runeItemID = ItemControler.GetRuneItemID(runeData) + itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID) + if not itemData: + continue + itemColor = itemData.GetItemColor() + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync) + + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync) + passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, isSync) + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync) + AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync) return def GetWeekPartyActionAward(curPlayer, day, templateID): @@ -337,7 +321,7 @@ return rewardItemInfo.get(curPlayer.GetJob(), []) return rewardItemInfo -def SyncWeekPartyPlayerInfo(curPlayer, day=-1, templateID=-1): +def SyncWeekPartyPlayerInfo(curPlayer, day= -1, templateID= -1): #通知当前次数、已领次数 actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {}) state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0) -- Gitblit v1.8.0