| | |
| | | #
|
| | | ##@package Player.PlayerCrossBattlefield
|
| | | #
|
| | | # @todo:跨服战场
|
| | | # @todo:跨服战场/古神战场
|
| | | # @author hxp
|
| | | # @date 2022-01-06
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 跨服战场
|
| | | # 详细描述: 跨服战场/古神战场
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2022-01-06 20:30"""
|
| | |
| | | import NetPackCommon
|
| | | import ItemControler
|
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | |
|
| | |
|
| | | def DoPlayerLogin(curPlayer):
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_BuyOpenCountWeek, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreTotalWeek, 0)
|
| | | SyncCrossBattlefieldPlayerInfo(curPlayer)
|
| | | return
|
| | |
|
| | | #// C1 09 跨服战场购买开启场次 #tagCMCrossBattlefieldBuyOpen
|
| | |
| | | # BYTE Hour; //战场开启时
|
| | | # BYTE Minute; //战场开启分
|
| | | # BYTE Faction; //阵营 1-红;2-蓝
|
| | | # BYTE ServerOnly; //是否仅本服玩家可加入,0-否,1-是
|
| | | #};
|
| | | def OnCrossBattlefieldBuyOpen(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
| | | hour = clientData.Hour
|
| | | minute = clientData.Minute
|
| | | faction = clientData.Faction
|
| | | serverOnly = clientData.ServerOnly
|
| | |
|
| | | if GameWorld.IsCrossServer():
|
| | | GameWorld.DebugLog("跨服服务器无法发起匹配!", playerID)
|
| | |
| | | return
|
| | |
|
| | | dataMsg = {"openHour":hour, "openMinute":minute, "faction":faction, "todayBuyOpenCount":todayBuyOpenCount,
|
| | | "serverOnly":serverOnly,
|
| | | "accID":curPlayer.GetAccID(),
|
| | | "playerID":playerID,
|
| | | "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
|
| | |
| | | todayBuyOpenCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_BuyOpenCountToday)
|
| | | updTodayBuyOpenCount = todayBuyOpenCount + 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_BuyOpenCountToday, updTodayBuyOpenCount)
|
| | | SyncCrossBattlefieldPlayerInfo(curPlayer)
|
| | |
|
| | | isSameWeek = GameWorld.CheckTimeIsSameWeek(buyTime)
|
| | | if isSameWeek:
|
| | | weekBuyOpenCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_BuyOpenCountWeek)
|
| | | updWeekBuyOpenCount = weekBuyOpenCount + 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_BuyOpenCountWeek, updWeekBuyOpenCount)
|
| | | |
| | | SyncCrossBattlefieldPlayerInfo(curPlayer)
|
| | | |
| | | GameWorld.Log("购买召集跨服战场结果: openHour=%s,openMinute=%s,faction=%s,updTodayBuyOpenCount=%s,updWeekBuyOpenCount=%s,buyTime=%s,isToday=%s,isSameWeek=%s"
|
| | | % (openHour, openMinute, faction, updTodayBuyOpenCount, updWeekBuyOpenCount, GameWorld.ChangeTimeNumToStr(buyTime), isToday, isSameWeek), playerID)
|
| | |
|
| | |
| | | # 固定礼包
|
| | | buyAwardItemList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBuyOpen", 3)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, buyAwardItemList)
|
| | | |
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_CallOpen, 1)
|
| | | return
|
| | |
|
| | | def __DoBattlefieldOver(curPlayer, dataMsg):
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | overTime, highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter = dataMsg
|
| | | |
| | | overTime, \
|
| | | isWinner, faction, rank, score, highScoreToday, highScoreWeekTotal, enterCountWeek, \
|
| | | isCallOpen, isCalled, killCnt, ckillCntInfo, killBossCnt, killScoreKing, killGuardCnt, auraScore, superItemAwardCnt, \
|
| | | factionBuffCollCnt, personBuffCollCnt, crystalCollCnt, wallCollCnt = dataMsg
|
| | | |
| | | isToday = GameWorld.CheckTimeIsSameServerDayEx(overTime)
|
| | | isSameWeek = GameWorld.CheckTimeIsSameWeek(overTime)
|
| | | GameWorld.Log("跨服战场结算玩家结果: highScoreToday=%s,highScoreWeekTotal=%s,enterCountWeek=%s,isCallEnter=%s,overTime=%s,isToday=%s,isSameWeek=%s" |
| | | % (highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter, GameWorld.ChangeTimeNumToStr(overTime), isToday, isSameWeek), playerID)
|
| | | GameWorld.Log("跨服战场结算玩家结果: highScoreToday=%s,highScoreWeekTotal=%s,enterCountWeek=%s,overTime=%s,isToday=%s,isSameWeek=%s" |
| | | % (highScoreToday, highScoreWeekTotal, enterCountWeek, GameWorld.ChangeTimeNumToStr(overTime), isToday, isSameWeek), playerID)
|
| | | GameWorld.Log(" isWinner=%s,faction=%s,rank=%s,score=%s,isCallOpen=%s,isCalled=%s" % (isWinner, faction, rank, score, isCallOpen, isCalled), playerID)
|
| | | GameWorld.Log(" killCnt=%s,ckillCntInfo=%s,killBossCnt=%s,killScoreKing=%s,killGuardCnt=%s,auraScore=%s,superItemAwardCnt=%s" |
| | | % (killCnt, ckillCntInfo, killBossCnt, killScoreKing, killGuardCnt, auraScore, superItemAwardCnt), playerID)
|
| | | GameWorld.Log(" factionBuffCollCnt=%s,personBuffCollCnt=%s,crystalCollCnt=%s,wallCollCnt=%s" |
| | | % (factionBuffCollCnt, personBuffCollCnt, crystalCollCnt, wallCollCnt), playerID)
|
| | |
|
| | | if isToday:
|
| | | addCnt = 1
|
| | | # 非召集进入的需要增加日常次数
|
| | | if not isCallEnter:
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
|
| | | # 召集进入由于是免费进入,不许要增加日常次数,直接增加日常活跃
|
| | | else:
|
| | | # 召集进入由于是免费进入,不需要增加日常次数,直接增加日常活跃
|
| | | if isCallOpen or isCalled:
|
| | | activityNum = PlayerActivity.GetActivityNum(PlayerActivity.RelatedType_1, ShareDefine.DailyActionID_CrossBattlefield)
|
| | | PlayerActivity.AddActivityFinishCnt(curPlayer, activityNum, None, addCnt)
|
| | | # 非召集兑入进入的需要增加日常次数
|
| | | else:
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreToday, highScoreToday)
|
| | | SyncCrossBattlefieldPlayerInfo(curPlayer)
|
| | |
|
| | | if isSameWeek:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, enterCountWeek)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreTotalWeek, highScoreWeekTotal)
|
| | | |
| | | SyncCrossBattlefieldPlayerInfo(curPlayer)
|
| | | |
| | | # 成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_Join, 1)
|
| | | if isCalled:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_Called, 1)
|
| | | if isWinner:
|
| | | if faction == ShareDefine.CampType_Justice:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_WinJ, 1)
|
| | | elif faction == ShareDefine.CampType_Evil:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_WinE, 1)
|
| | | if killCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_KillCnt, killCnt)
|
| | | for ckillCnt, addCnt in ckillCntInfo.items():
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_CKillCnt, addCnt, [ckillCnt])
|
| | | if killBossCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_KillBoss, killBossCnt)
|
| | | if killScoreKing > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_KillScoreKing, killScoreKing)
|
| | | if killGuardCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_KillGuard, killGuardCnt)
|
| | | if score > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_Score, score)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_ScoreMore, 1, [score])
|
| | | if auraScore > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_AuraScore, auraScore)
|
| | | if superItemAwardCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_SuperItem, superItemAwardCnt)
|
| | | if factionBuffCollCnt > 0: |
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_FactionBuff, factionBuffCollCnt)
|
| | | if personBuffCollCnt > 0: |
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_PersonBuff, personBuffCollCnt)
|
| | | if crystalCollCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_Crystal, crystalCollCnt)
|
| | | if wallCollCnt > 0:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Battlefield_Wall, wallCollCnt)
|
| | | return
|
| | |
|
| | | def SyncCrossBattlefieldPlayerInfo(curPlayer):
|
| | | clientPack = ChPyNetSendPack.tagMCCrossBattlefieldPlayerInfo()
|
| | | clientPack.BuyOpenCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_BuyOpenCountToday)
|
| | | clientPack.HighScoreToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_HighScoreToday)
|
| | | clientPack.EnterCountWeek = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_EnterCountWeek)
|
| | | clientPack.BuyOpenCountWeek = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_BuyOpenCountWeek)
|
| | | clientPack.HighScoreTotalWeek = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Battlefield_HighScoreTotalWeek)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|