#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerCrossRealmPK # # @todo:¿ç·þPK¾º¼¼³¡ # @author hxp # @date 2018-12-21 # @version 1.0 # # ÏêϸÃèÊö: ¿ç·þPK¾º¼¼³¡ # #------------------------------------------------------------------------------- #"""Version = 2018-12-21 18:00""" #------------------------------------------------------------------------------- import ShareDefine import PlayerControl import NetPackCommon import IpyGameDataPY import PlayerActivity import ChPyNetSendPack import CrossRealmPlayer import PlayerTongTianLing import FunctionNPCCommon import PlayerActGarbageSorting import DataRecordPack import PlayerWeekParty import IPY_GameWorld import ItemControler import PlayerSuccess import ItemCommon import GameWorld import ChConfig import GameObj import PlayerGubao def DoPlayerOnDay(curPlayer): if GameWorld.IsCrossServer(): return totalScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore) if not totalScore: return zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ZoneID) seasonID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonID) # Óʼþ·¢·ÅδÁìÈ¡µÄÿÈÕPK´ÎÊý½±Àø dayPKCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 1, {}) dayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) dayPKCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayPKCountAwardState) SendDayPKAwardByMail(curPlayer, zoneID, seasonID, "PKCount", dayPKCount, dayPKCountAwardState, dayPKCountAwardDict, "CrossServer1") # Óʼþ·¢·ÅδÁìÈ¡µÄÿÈÕʤÀû´ÎÊý½±Àø dayWinCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 2, {}) dayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount) dayWinCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayWinCountAwardState) SendDayPKAwardByMail(curPlayer, zoneID, seasonID, "WinCount", dayWinCount, dayWinCountAwardState, dayWinCountAwardDict, "CrossServer2") # ÖØÖÃÿÈÕ½±Àø×´Ì¬ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ItemAddCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayPKCountAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayWinCountAwardState, 0) SyncCrossRealmPKPlayerInfo(curPlayer) SyncCrossRealmPKAwardState(curPlayer) return def DoPlayerLogin(curPlayer): if GameWorld.IsCrossServer(): return mapZoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID) mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) if not mapZoneID or not mapSeasonID: return if not __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID): SyncCrossRealmPKPlayerInfo(curPlayer) SyncCrossRealmPKAwardState(curPlayer) SyncCrossRealmPKHisSeasonInfo(curPlayer) return def IsCrossRealmPKMatchState(): ## ¿ç·þPKÆ¥ÅäÈüÊÇ·ñ¿ªÆô return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState \ % ShareDefine.DailyActionID_CrossReamPK) == ChConfig.Def_Action_Open def GetCrossPKDanAwardIpyData(seasonID, awardDanLV, isLog): ## »ñÈ¡¿ç·þ¶Îλ½±ÀøÅäÖÃÐÅÏ¢ crossZoneName = GameWorld.GetCrossZoneName() danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", crossZoneName, seasonID, awardDanLV) if not danLVAwardIpyData: danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", "", seasonID, awardDanLV) if not danLVAwardIpyData and isLog: GameWorld.ErrLog("ÕÒ²»µ½¶Îλ½±ÀøÅäÖÃ: seasonID=%s, awardDanLV=%s" % (seasonID, awardDanLV)) return danLVAwardIpyData def OnCrossRealmPKSeasonChange(value): ## ÈüÇøÈü¼¾×´Ì¬±ä¸ü£¬¹æ¶¨ËùÓÐÈüÇøµÄÈü¼¾ID¶¼Ò»Ñù£¬ÇÒÈü¼¾IDÒ»¶¨ÊÇ×ÔÔöµÄ£¬ËùÒÔÕâÀïÖ»ÅжÏÈü¼¾ID±ä¸ü¼´¿É if GameWorld.IsCrossServer(): return mapZoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID) mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) if mapSeasonID == value: GameWorld.DebugLog("¿ç·þPKÈü¼¾ÐÅÏ¢ÓëµØÍ¼µ±Ç°ÖµÏàͬ£¬²»´¦Àí£¡") return GameWorld.Log("¿ç·þPKÈü¼¾ÐÅÏ¢±ä¸ü: mapSeasonID=%s,value=%s" % (mapSeasonID, value)) mapSeasonID = value playerManager = GameWorld.GetPlayerManager() for i in xrange(playerManager.OnlineCount()): curPlayer = playerManager.OnlineAt(i) if not GameWorld.IsNormalPlayer(curPlayer): continue #¼ì²éÖØÖÃÍæ¼ÒÐÅÏ¢ __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID) return def __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID): ## ¼ì²éÍæ¼ÒÈüÇøÈü¼¾×´Ì¬Êý¾Ý playerID = curPlayer.GetPlayerID() zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ZoneID) seasonID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonID) if mapSeasonID == seasonID: GameWorld.DebugLog("Íæ¼Ò¿ç·þPKÈü¼¾ÐÅÏ¢Ïàͬ£¬²»´¦Àí! mapSeasonID=%s,seasonID=%s" % (mapSeasonID, seasonID), playerID) return GameWorld.Log("Íæ¼Ò¿ç·þPKÈüÇøÈü¼¾ÐÅÏ¢²»Í¬! ´¦ÀíÏà¹ØÊý¾Ý! mapSeasonID=%s,seasonID=%s" % (mapSeasonID, seasonID), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, mapSeasonID) playerDanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV) danLVAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLVAwardState) GameWorld.Log("¿ªÊ¼ÐÂÈü¼¾£¬·¢·ÅÉÏÈü¼¾Î´ÁìÈ¡µÄ½±Àø£¬ÖØÖÃÈü¼¾Êý¾Ý! zoneID=%s,seasonID=%s,newSeasonID=%s,playerDanLV=%s,danLVAwardState=%s" % (zoneID, seasonID, mapSeasonID, playerDanLV, danLVAwardState), playerID) # Óʼþ·¢·ÅÉÏÈü¼¾Î´ÁìÈ¡µÄ¶Îλ½±Àø¡¢Èü¼¾½±Àø£¨ÅÅÃû»ò¶Î룩 for awardDanLV in xrange(playerDanLV + 1): danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, False) if not danLVAwardIpyData: continue awardItemList = danLVAwardIpyData.GetDanLVAwardList() if not awardItemList: continue if pow(2, awardDanLV) & danLVAwardState: GameWorld.DebugLog(" ÒѾ­ÁìÈ¡¹ý¸Ã¶Îλ´ï±ê½±Àø!awardDanLV=%s,danLVAwardState=%s" % (awardDanLV, danLVAwardState), playerID) continue eventName = "DanLV" GameWorld.Log(" Óʼþ²¹·¢Î´ÁìÈ¡µÄ¶Îλ´ï±ê½±Àø!awardDanLV=%s,danLVAwardState=%s,awardItemList=%s" % (awardDanLV, danLVAwardState, awardItemList), playerID) mailDetail = {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, "awardDanLV":awardDanLV, "danLVAwardState":danLVAwardState, "mapSeasonID":mapSeasonID} PlayerControl.SendMailByKey("CrossServer3", [playerID], awardItemList, [seasonID, awardDanLV], detail=mailDetail) DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, True, mailDetail) # ²éѯ GameServer Íæ¼ÒÈü¼¾ÅÅÃû if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState) and playerDanLV: OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, True) # ÖØÖÃ״̬ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_PKCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_WinCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ItemAddCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayPKCountAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayWinCountAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLVAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, mapZoneID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, mapSeasonID) SyncCrossRealmPKPlayerInfo(curPlayer) SyncCrossRealmPKAwardState(curPlayer) # ÖØÖÃÉ̵êÎïÆ· FunctionNPCCommon.ShopItemOnCrossPKSeasonChange(curPlayer) return True #// C1 01 ¿ç·þPKÆ¥Åä #tagCMCrossRealmPKMatch # #struct tagCMCrossRealmPKMatch #{ # tagHead Head; # BYTE Type; // 0-²éѯƥÅ䣻1-Ë¢ÐÂÆ¥Åä #}; def OnCrossRealmPKMatch(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) accID = curPlayer.GetAccID() playerID = curPlayer.GetPlayerID() requestType = clientData.Type GameWorld.DebugLog("¿ç·þPKÆ¥ÅäÇëÇó: type=%s,accID=%s" % (requestType, accID), playerID) # Ë¢ÐÂÆ¥Åä if requestType == 1: if not CheckCanMatch(curPlayer): return refreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_RefreshCount) freeRefreshCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 1) if freeRefreshCountMax <= 0 or refreshCount < freeRefreshCountMax: GameWorld.DebugLog("Ãâ·ÑË¢ÐÂ: refreshCount=%s < %s" % (refreshCount, freeRefreshCountMax), playerID) else: refreshBuyCount = max(0, refreshCount - freeRefreshCountMax) refreshBuyCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 2) if refreshBuyCountMax and refreshBuyCount >= refreshBuyCountMax: GameWorld.DebugLog("¹ºÂòˢдÎÊýÒÑ´ïÿÈÕÉÏÏÞ! refreshBuyCount=%s >= %s" % (refreshBuyCount, refreshBuyCountMax), playerID) return costMoney = eval(IpyGameDataPY.GetFuncCompileCfg("CrossRealmPKMatchRefresh", 3)) moneyType = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 4) GameWorld.DebugLog("¸¶·ÑË¢ÐÂ: refreshCount=%s,refreshBuyCount=%s,costMoney=%s,moneyType=%s" % (refreshCount, refreshBuyCount, costMoney, moneyType), playerID) if not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_CrossRealmPK, {"Event":"Refresh", "refreshBuyCount":refreshBuyCount}): return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, refreshCount + 1) SyncCrossRealmPKPlayerInfo(curPlayer) dataMsg = { "requestType":requestType, "seasonID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID), # Èü¼¾ID "zoneID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID), # PKÈüÇø "playerID":playerID, "fightPower":PlayerControl.GetFightPower(curPlayer), } GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKMatch, dataMsg) GameWorld.DebugLog("·¢ËÍÇëÇóÆ¥Åäµ½¿ç·þ·þÎñÆ÷ dataMsg=%s" % str(dataMsg), playerID) return def CheckCanMatch(curPlayer): ## ¿É·ñÆ¥Åä¡¢ÌôÕ½ playerID = curPlayer.GetPlayerID() if GameWorld.IsCrossServer(): GameWorld.DebugLog("¿ç·þ·þÎñÆ÷ÎÞ·¨·¢ÆðÆ¥Åä!", playerID) return if not CrossRealmPlayer.IsCrossServerOpen(): PlayerControl.NotifyCode(curPlayer, "CrossMatching18") return if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: GameWorld.DebugLog("¸±±¾ÖУ¬ÎÞ·¨½øÐпç·þÆ¥Åä!", playerID) return if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie or GameObj.GetHP(curPlayer) == 0: #GameWorld.DebugLog("ÒÑËÀÍö£¬ÎÞ·¨½øÐпç·þÆ¥Åä!", playerID) return if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1: GameWorld.DebugLog("OnCrossRealmPKMatch ¿ç·þÈü¼¾Î´¿ªÆô£¬²»¿É½øÐÐÆ¥Å䣡", playerID) #PlayerControl.NotifyCode(curPlayer, "SeasonIsNotOpen") return if not IsCrossRealmPKMatchState(): GameWorld.DebugLog("OnCrossRealmPKMatch ¿ç·þÆ¥Åä먦Æô£¬²»¿É½øÐÐÆ¥Å䣡", playerID) #PlayerControl.NotifyCode(curPlayer, "MatchIsNotOpen") return return True def CheckHavePKCount(curPlayer): ## ¼ì²éÊÇ·ñÓÐPK´ÎÊý dayFreeMatchCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 1) if dayFreeMatchCountMax: todayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount) todayItemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount) if todayPKCount >= (dayFreeMatchCountMax + todayBuyCount + todayItemAddCount): GameWorld.DebugLog("PK´ÎÊý²»×㣬ÎÞ·¨·¢ÆðÆ¥Åä! todayPKCount=%s >= (dayFreeMatchCountMax=%s + todayBuyCount=%s + todayItemAddCount=%s)" % (todayPKCount, dayFreeMatchCountMax, todayBuyCount, todayItemAddCount), curPlayer.GetPlayerID()) return False return True def CrossServerMsg_PKOverInfo(curPlayer, overInfo): ## ÊÕµ½¿ç·þ·þÎñÆ÷µÄPK½áËãÐÅÏ¢ playerID = curPlayer.GetPlayerID() zoneID, seasonID, timeStr, winnerID, pkScore, danLV, cWinCount, addScore, tagPlayerID, tagPlayerName = overInfo isWinner = winnerID == playerID GameWorld.Log("µØÍ¼ÊÕµ½¿ç·þPK½áËã: isWinner=%s,zoneID=%s,seasonID=%s,timeStr=%s,winnerID=%s,pkScore=%s,danLV=%s,cWinCount=%s,addScore=%s,tagPlayerID=%s" % (isWinner, zoneID, seasonID, timeStr, winnerID, pkScore, danLV, cWinCount, addScore, tagPlayerID), playerID) isToday = GameWorld.CheckTimeIsSameServerDayEx(GameWorld.ChangeTimeStrToNum(timeStr)) if not __DoAddPKOverData(curPlayer, zoneID, seasonID, danLV, pkScore, cWinCount, isWinner, isToday): return overPack = ChPyNetSendPack.tagGCCrossRealmPKOverInfo() overPack.TimeStr = timeStr overPack.OverType = 0 overPack.WinnerID = winnerID overPack.RoundWinnerID = [] overPack.RoundCount = len(overPack.RoundWinnerID) overPack.AddScore = addScore overPack.Score = pkScore overPack.DanLV = danLV overPack.CWinCnt = cWinCount overPack.TagName = tagPlayerName overPack.TagNameLen = len(overPack.TagName) NetPackCommon.SendFakePack(curPlayer, overPack) return def __DoAddPKOverData(curPlayer, zoneID, seasonID, danLV, pkScore, cWinCount, isWinner, isToday): playerID = curPlayer.GetPlayerID() curSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) if curSeasonID != seasonID: GameWorld.Log(" ·Ç±¾Èü¼¾µÄ½áËãÐÅÏ¢£¬²»´¦Àí£¡curSeasonID=%s,seasonID=%s" % (curSeasonID, seasonID), playerID) return # Èü¼¾ÒÑ¹Ø±Õ if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1: GameWorld.Log(" Èü¼¾Òѹرգ¬²»´¦Àí£¡seasonID=%s" % (seasonID), playerID) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, zoneID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, seasonID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonDanLV % seasonID, danLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonScore % seasonID, pkScore) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, pkScore) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, danLV) pkCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_PKCount) + 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_PKCount, pkCount) GameWorld.Log(" ¸üÐÂÊý¾Ý: danLV=%s,pkScore=%s,pkCount=%s" % (danLV, pkScore, pkCount), playerID) if isWinner: winCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_WinCount) + 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_WinCount, winCount) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, cWinCount) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0) GameWorld.Log(" winner winCount=%s,cWinCount=%s" % (winCount, cWinCount), playerID) else: cLoseCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CLoseCount) + 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, cLoseCount) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, 0) GameWorld.Log(" loser cLoseCount=%s" % cLoseCount, playerID) # ͬһÌìµÄ»°Ôö¼Óµ±ÈÕPK´ÎÊý if isToday: todayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) + 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, todayPKCount) GameWorld.Log(" ͬһÌìµÄPK½áËãÔö¼Ó½ñÈÕPK´ÎÊý: todayPKCount=%s" % todayPKCount, playerID) if isWinner: todayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount) + 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, todayWinCount) GameWorld.Log(" Ôö¼Ó½ñÈÕÒÑ»ñʤ´ÎÊý: todayWinCount=%s" % todayWinCount, playerID) PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossReamPK) PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_CrossPK, 1) PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_CrossPK, 1) PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CrossPK, 1) PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossRealmPK, 1) PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CrossPK) PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossPK, 1) else: GameWorld.Log(" ²»Í¬ÌìµÄPK½áËã²»Ôö¼Ó½ñÈÕPK´ÎÊý! ", playerID) SyncCrossRealmPKPlayerInfo(curPlayer) return True #// C1 08 ¿ç·þPKÌôÕ½»úÆ÷È˽áËã #tagCMCrossRealmPKRobotOver # #struct tagCMCrossRealmPKRobotOver #{ # tagHead Head; # BYTE IsWin; //ÊÇ·ñ»ñʤ # DWORD TagPlayerID; //Ä¿±êÍæ¼ÒID #}; def OnCrossRealmPKRobotOver(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() isWinner = clientData.IsWin tagPlayerID = clientData.TagPlayerID if GameWorld.IsCrossServer(): GameWorld.DebugLog("¿ç·þ·þÎñÆ÷ÎÞ·¨·¢Æð»úÆ÷È˽áËã!", playerID) return if not CheckHavePKCount(curPlayer): return SendPKOver(curPlayer, tagPlayerID, isWinner) return def SendPKOver(curPlayer, tagPlayerID, isWinner): ## ·¢Ë͸ø¿ç·þPK½áËã playerID = curPlayer.GetPlayerID() dataMsg = { "playerID":playerID, "tagPlayerID":tagPlayerID, "isWinner":isWinner, "seasonID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID), # Èü¼¾ID "pkZoneID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID), # PKÈüÇø "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer), "playerJob":curPlayer.GetJob(), "face":curPlayer.GetFace(), "facePic":curPlayer.GetFacePic(), "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer), "pkScore":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore), # µ±Ç°»ý·Ö "danLV":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV), # µ±Ç°¶Îλ "cWinCount":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CWinCount), # Á¬Ê¤´ÎÊý } GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKOver, dataMsg) GameWorld.DebugLog("ͬ²½¿ç·þ·þÎñÆ÷PK½áËã: %s" % str(dataMsg), playerID) return def GMSetPlayerCrossPKData(curPlayer, danLV, pkScore, cWinCount=None, resultDict=None, zoneID=0, seasonID=0): ## GMÉèÖÃÍæ¼Ò¿ç·þPKÊý¾Ý£¬Ò»°ãÓÃÓÚ²âÊÔ»òÐÞ¸´ÍâÍøÊý¾Ý if not zoneID or not seasonID: zoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID) seasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) errorMsg = "" playerInfoDict = {} if not zoneID or not seasonID: errorMsg = "zone season or state error." else: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, danLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, pkScore) if cWinCount >= 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, cWinCount) if cWinCount > 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0) else: cWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CLoseCount) # ÇëÇó²éѯ¿ç·þ·þÎñÆ÷ playerInfoDict = {"accID":curPlayer.GetAccID(), "playerID":curPlayer.GetPlayerID(), "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer), "playerJob":curPlayer.GetJob(), "face":curPlayer.GetFace(), "facePic":curPlayer.GetFacePic(), "realmLV":curPlayer.GetOfficialRank(), "pkScore":pkScore, "danLV":danLV, "cWinCount":cWinCount, } dataMsg = {"ZoneID":zoneID, "SeasonID":seasonID, "PlayerInfo":playerInfoDict} GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKBillboard, dataMsg) SyncCrossRealmPKPlayerInfo(curPlayer) if resultDict: resultDict.update({"zoneID":zoneID, "seasonID":seasonID, "errorMsg":errorMsg, "PlayerInfo":playerInfoDict}) return errorMsg #// C1 02 ¿ç·þPK¹ºÂò´ÎÊý #tagCMCrossRealmPKBuy # #struct tagCMCrossRealmPKBuy #{ # tagHead Head; #}; def OnCrossRealmPKBuy(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() if not CrossRealmPlayer.IsCrossServerOpen(): PlayerControl.NotifyCode(curPlayer, "CrossMatching18") return if not IsCrossRealmPKMatchState(): GameWorld.DebugLog("¿ç·þÆ¥Åä먦Æô£¬²»¿É½øÐйºÂò´ÎÊý£¡", playerID) return dayFreeMatchCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 1) if not dayFreeMatchCountMax: GameWorld.DebugLog("ÿÈÕÆ¥Åä´ÎÊýûÓÐÏÞÖÆ£¬²»ÐèÒª¹ºÂò´ÎÊý£¡", playerID) return todayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount) todayItemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount) canPKCount = dayFreeMatchCountMax + todayBuyCount + todayItemAddCount - todayPKCount if canPKCount >= dayFreeMatchCountMax: GameWorld.DebugLog("¿ÉPK´ÎÊý²»ÄÜ´óÓÚÿÈÕÃâ·Ñ´ÎÊý!", playerID) return dayBuyCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 2) #todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount) if dayBuyCountMax and todayBuyCount >= dayBuyCountMax: GameWorld.DebugLog("½ñÈÕ¹ºÂò´ÎÊýÒÑÂú£¬ÎÞ·¨¹ºÂò£¡todayBuyCount=%s" % (todayBuyCount), playerID) return costGold = eval(IpyGameDataPY.GetFuncCompileCfg("CrossRealmPKMatchCount", 3)) costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costGold) if not costMoneyList: GameWorld.DebugLog("ÏÉÓñ°óÓñ²»×ã: todayBuyCount=%s,costGold=%s" % (todayBuyCount, costGold), playerID) return infoDict = {"Event":"BuyPKCount", "todayBuyCount":todayBuyCount} for moneyType, moneyNum in costMoneyList: PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_CrossRealmPK, infoDict) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, todayBuyCount + 1) GameWorld.DebugLog("¹ºÂò¿ç·þPK´ÎÊý: todayBuyCount=%s" % (todayBuyCount), playerID) SyncCrossRealmPKPlayerInfo(curPlayer) return #// C1 03 ¿ç·þPKÁìÈ¡½±Àø #tagCMCrossRealmPKGetAward # #struct tagCMCrossRealmPKGetAward #{ # tagHead Head; # BYTE AwardType; // ½±ÀøÀàÐÍ£»1-ÿÈÕÆ¥Åä½±Àø£¬2-ÿÈÕʤÀû½±Àø£¬3-¶Îλ´ï±ê½±Àø£¬4-Èü¼¾½áËã½±Àø # BYTE AwardData; // ½±ÀøÀàÐͶÔÓ¦Áìȡֵ£»Ã¿ÈÕÆ¥Åä½±ÀøÊ±ÎªÆ¥Åä´ÎÊý£¬Ã¿ÈÕʤÀû½±ÀøÊ±ÎªÊ¤Àû´ÎÊý£¬¶Îλ´ï±ê½±ÀøÊ±ÎªÁìÈ¡µÄ¶Îλ #}; def OnCrossRealmPKGetAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return playerID = curPlayer.GetPlayerID() awardType = clientData.AwardType awardData = clientData.AwardData zoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID) seasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) if not zoneID or not seasonID: GameWorld.DebugLog("µ±Ç°Ã»Óпç·þPKÈü¼¾, ÎÞ·¨ÁìÈ¡½±Àø! zoneID=%s,seasonID=%s" % (zoneID, seasonID)) return if awardType == 1: awardPKCount = awardData playerTodayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) GameWorld.DebugLog("Íæ¼ÒÁìȡÿÈÕÆ¥Åä´ÎÊý½±Àø! awardPKCount=%s,playerTodayPKCount=%s" % (awardPKCount, playerTodayPKCount), playerID) if playerTodayPKCount < awardPKCount: GameWorld.DebugLog(" PK´ÎÊý²»×㣬ÎÞ·¨ÁìÈ¡£¡", playerID) return dayPKCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 1, {}) # {"´ÎÊý":[[ÎïÆ·ID,¸öÊý,ÊÇ·ñ°ó¶¨], ...], ...} awardPKCountList = dayPKCountAwardDict.keys() awardPKCountList = [int(k) for k in awardPKCountList] awardPKCountList.sort() GameWorld.DebugLog(" awardPKCountList=%s" % awardPKCountList, playerID) if awardPKCount not in awardPKCountList: GameWorld.DebugLog(" ûÓиÃPK´ÎÊý½±Àø£¡") return awardIndex = awardPKCountList.index(awardPKCount) awardStateDictName = ChConfig.Def_PDict_CrossPK_DayPKCountAwardState awardItemList = dayPKCountAwardDict[str(awardPKCount)] eventName = "PKCount" drDataDict = {"awardPKCount":awardPKCount} elif awardType == 2: awardWinCount = awardData playerTodayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount) GameWorld.DebugLog("Íæ¼ÒÁìȡÿÈÕʤÀû´ÎÊý½±Àø! awardWinCount=%s,playerTodayWinCount=%s" % (awardWinCount, playerTodayWinCount), playerID) if playerTodayWinCount < awardWinCount: GameWorld.DebugLog(" ʤÀû´ÎÊý²»×㣬ÎÞ·¨ÁìÈ¡£¡", playerID) return dayWinCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 2, {}) # {"´ÎÊý":[[ÎïÆ·ID,¸öÊý,ÊÇ·ñ°ó¶¨], ...], ...} awardWinCountList = dayWinCountAwardDict.keys() awardWinCountList = [int(k) for k in awardWinCountList] awardWinCountList.sort() GameWorld.DebugLog(" awardWinCountList=%s" % awardWinCountList, playerID) if awardWinCount not in awardWinCountList: GameWorld.DebugLog(" ûÓиÃʤÀû´ÎÊý½±Àø£¡", playerID) return awardIndex = awardWinCountList.index(awardWinCount) awardStateDictName = ChConfig.Def_PDict_CrossPK_DayWinCountAwardState awardItemList = dayWinCountAwardDict[str(awardWinCount)] eventName = "WinCount" drDataDict = {"awardWinCount":awardWinCount} elif awardType == 3: awardDanLV = awardData playerDanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV) GameWorld.DebugLog("Íæ¼ÒÁìÈ¡¶Îλ´ï±ê½±Àø! awardDanLV=%s,playerDanLV=%s" % (awardDanLV, playerDanLV), playerID) if playerDanLV < awardDanLV: GameWorld.DebugLog(" ¶Îλδ´ï±ê£¬ÎÞ·¨ÁìÈ¡£¡", playerID) return danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, True) if not danLVAwardIpyData: return awardIndex = awardDanLV awardStateDictName = ChConfig.Def_PDict_CrossPK_DanLVAwardState awardItemList = danLVAwardIpyData.GetDanLVAwardList() eventName = "DanLV" drDataDict = {"awardDanLV":awardDanLV} elif awardType == 4: GameWorld.DebugLog("Íæ¼ÒÁìÈ¡Èü¼¾½áËã½±Àø!", playerID) totalScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore) if not totalScore: GameWorld.DebugLog("ÎÞÈü¼¾»ý·ÖÎÞ·¨ÁìÈ¡½±Àø!", playerID) return if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 2: GameWorld.DebugLog("·ÇÈü¼¾½áËã½×¶Î£¬²»¿ÉÁìÈ¡!", playerID) return if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState): GameWorld.DebugLog("ÒѾ­ÁìÈ¡¹ý¸Ã½±Àø£¬²»¿ÉÁìÈ¡!", playerID) return # ²éѯ GameServer Íæ¼ÒÈü¼¾ÅÅÃû OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, False) return else: return if not awardItemList: GameWorld.DebugLog("¸Ã½±ÀøÃ»ÓÐÅäÖý±ÀøÎïÆ·!", playerID) return awardState = curPlayer.NomalDictGetProperty(awardStateDictName) if pow(2, awardIndex) & awardState: GameWorld.DebugLog(" ÒѾ­ÁìÈ¡¹ý¸Ã½±Àø!awardIndex=%s,awardState=%s" % (awardIndex, awardState), playerID) return needSpace = len(awardItemList) # ±³°ü¿Õ¼ä packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if packSpace < needSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_202580") return awardState |= pow(2, awardIndex) PlayerControl.NomalDictSetProperty(curPlayer, awardStateDictName, awardState) SyncCrossRealmPKAwardState(curPlayer) GameWorld.DebugLog("Íæ¼ÒÁìÈ¡¿ç·þPK½±Àø! awardType=%s,awardData=%s,awardIndex=%s,awardState=%s,awardItemList=%s" % (awardType, awardData, awardIndex, awardState, awardItemList), playerID) drDataDict.update({"awardIndex":awardIndex, "awardState":awardState, "awardItemList":awardItemList}) for itemID, itemCnt, isBind in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem]) if awardType == 3: PlayerControl.WorldNotify(0, "CrossMatching22", [curPlayer.GetPlayerName(), awardDanLV]) DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, False, drDataDict) return def SendDayPKAwardByMail(curPlayer, zoneID, seasonID, eventName, dataCount, awardState, awardItemDict, mailTypeKey): ## Óʼþ·¢·ÅδÁìÈ¡µÄÿÈÕ½±Àø playerID = curPlayer.GetPlayerID() awardCountList = awardItemDict.keys() awardCountList = [int(k) for k in awardCountList] awardCountList.sort() GameWorld.DebugLog(" awardCountList=%s" % awardCountList, playerID) for i, awardCount in enumerate(awardCountList): if dataCount < awardCount: GameWorld.DebugLog("¿ç·þPKÿÈÕ½±Àø´ÎÊý²»×ã: eventName=%s,i=%s,awardCount=%s > dataCount=%s" % (eventName, i, awardCount, dataCount), playerID) break if pow(2, i) & awardState: GameWorld.DebugLog("ÒÑÁìÈ¡¸Ã¿ç·þPKÿÈÕ½±Àø: eventName=%s,i=%s,awardCount=%s" % (eventName, i, awardCount), playerID) continue awardItemList = awardItemDict[str(awardCount)] GameWorld.Log("Óʼþ·¢·Å¿ç·þPKδÁìÈ¡µÄÿÈÕ½±Àø: zoneID=%s,seasonID=%s,eventName=%s,i=%s,awardCount=%s,dataCount=%s,awardState=%s,awardItemList=%s" % (zoneID, seasonID, eventName, i, awardCount, dataCount, awardState, awardItemList), playerID) mailDetail = {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, "awardCount":awardCount, "awardState":awardState} PlayerControl.SendMailByKey(mailTypeKey, [playerID], awardItemList, [awardCount], detail=mailDetail) DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, True, mailDetail) return def OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, isMail): # ²éѯ GameServer Íæ¼ÒÈü¼¾ÅÅÃû playerID = curPlayer.GetPlayerID() danLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV) eventName, eventData = "SeasonAward", [danLV, isMail] sendMsg = str([zoneID, seasonID, eventName, eventData]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "CrossPKSeasonOrder", sendMsg, len(sendMsg)) GameWorld.Log("²éѯGameServerÍæ¼ÒÈüÇøÈü¼¾ÅÅÃû: zoneID=%s, seasonID=%s, sendMsg=%s" % (zoneID, seasonID, sendMsg), playerID) return def GameServer_CrossPKSeasonOrder(curPlayer, msgList): zoneID, seasonID, eventName, eventData, order = msgList # ÁìÈ¡Èü¼¾½±Àø if eventName == "SeasonAward": danLV, isMail = eventData DoGetPKSeasonAward(curPlayer, eventName, zoneID, seasonID, order, danLV, isMail) return def DoGetPKSeasonAward(curPlayer, eventName, zoneID, seasonID, order, danLV, isMail): ## Ö´Ðз¢·ÅÈü¼¾½áËã½±Àø£¬Ãû´Î½±ÀøÓë×î¸ß¶Îλ½±Àø»¥³â£¬ÓÅÏÈÃû´Î½±Àø isNotify = not isMail notifyKey = "" awardItemList = [] seasonAwardLV = danLV playerID = curPlayer.GetPlayerID() mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) GameWorld.Log("·¢·ÅÍæ¼Ò¿ç·þPKÈü¼¾½áËã½±Àø! zoneID=%s,seasonID=%s,order=%s,danLV=%s,isMail=%s,seasonAwardLV=%s,mapSeasonID=%s" % (zoneID, seasonID, order, danLV, isMail, seasonAwardLV, mapSeasonID), playerID) mailTypeKey, mailParamList, mailDetail = "", [], {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, "order":order, "danLV":danLV, "mapSeasonID":mapSeasonID} if order > 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID, order) crossZoneName = GameWorld.GetCrossZoneName() seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKOrderAward", crossZoneName, seasonID) if not seasonOrderAwardIpyData: seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKOrderAward", "", seasonID) seasonOrderAwardDict = {} if not seasonOrderAwardIpyData else seasonOrderAwardIpyData.GetOrderAwardInfo() # {"Ãû´Î":[[ÎïÆ·ID,¸öÊý,ÊÇ·ñ°ó¶¨], ...], ...} awardOrderList = seasonOrderAwardDict.keys() awardOrderList = [int(k) for k in awardOrderList] awardOrderList.sort() GameWorld.DebugLog(" awardOrderList=%s" % awardOrderList, playerID) fromOrder, toOrder = 1, 1 for i, awardOrder in enumerate(awardOrderList): if order <= awardOrder: toOrder = awardOrder awardItemList = seasonOrderAwardDict[str(awardOrder)] maxDanLV = IpyGameDataPY.IPY_Data().GetCrossRealmPKDanCount() - 1 # ÒòΪ¶ÎλµÈ¼¶´Ó0¿ªÊ¼£¬ËùÒÔ×î´ó¶ÎλµÈ¼¶Òª¼õ1 seasonAwardLV = maxDanLV + (len(awardOrderList) - i) GameWorld.Log("»ñµÃÅÅÃû½±Àø, ¸üн±ÀøµÈ¼¶: awardOrderList=%s,i=%s,maxDanLV=%s,seasonAwardLV=%s" % (awardOrderList, i, maxDanLV, seasonAwardLV), playerID) mailTypeKey = "CrossServer4" notifyKey = "CrossMatching23" mailParamList = [seasonID, fromOrder, toOrder] break fromOrder = awardOrder + 1 # ûÓн±ÀøµÄ»°È¡¶Îλ½±Àø if not awardItemList: danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, danLV, False) if not danLVAwardIpyData: return awardItemList = danLVAwardIpyData.GetSeasonDanLVAwardList() mailTypeKey = "CrossServer5" notifyKey = "CrossMatching24" mailParamList = [seasonID, danLV] if not awardItemList: GameWorld.Log("ûÓÐÍæ¼Ò¶ÔÓ¦µÄÈü¼¾½áËã½±Àø£¡", playerID) return ## ·¢½±ÀøÖ®Ç°ÐèÔÙÅжÏÒ»´Î£¬·ÀÖ¹ÖØ¸´·¢°üÖØ¸´ÁìÈ¡ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState): GameWorld.Log("ÒѾ­·¢·Å¹ýÈü¼¾½áËã½±Àø£¡", playerID) return if seasonID == mapSeasonID: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardState, 1) SyncCrossRealmPKAwardState(curPlayer) GameWorld.Log("»¹ÊÇͬһ¸öÈü¼¾£¬ÉèÖÃÈü¼¾½±ÀøÒÑÁìÈ¡!") PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardLV % seasonID, seasonAwardLV) SyncCrossRealmPKHisSeasonInfo(curPlayer) if not isMail: needSpace = len(awardItemList) packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if packSpace < needSpace: isMail = True if isMail: PlayerControl.SendMailByKey(mailTypeKey, [playerID], awardItemList, mailParamList, detail=mailDetail) else: for itemID, itemCnt, isBind in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem]) GameWorld.Log("ÁìÈ¡³É¹¦! awardItemList=%s" % (awardItemList), playerID) drDataDict = {"awardItemList":awardItemList, "order":order, "danLV":danLV, "seasonAwardLV":seasonAwardLV, "isMail":isMail} DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, isMail, drDataDict) if isNotify and notifyKey: PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName()] + mailParamList + [awardItemList[0][0]]) return def SyncCrossRealmPKPlayerInfo(curPlayer): ## ͬ²½Íæ¼Ò¿ç·þPKÍæ¼ÒÏà¹ØÐÅÏ¢£¬»ý·Ö¡¢¶Îλ¡¢Ïà¹Ø´ÎÊýµÈÐÅÏ¢ pkPlayerInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerInfo() pkPlayerInfo.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore) pkPlayerInfo.DanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV) pkPlayerInfo.PKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_PKCount) pkPlayerInfo.WinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_WinCount) pkPlayerInfo.CWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CWinCount) pkPlayerInfo.DayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) pkPlayerInfo.DayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount) pkPlayerInfo.DayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount) pkPlayerInfo.DayItemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount) pkPlayerInfo.DayRefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_RefreshCount) NetPackCommon.SendFakePack(curPlayer, pkPlayerInfo) return def SyncCrossRealmPKAwardState(curPlayer): ## ͬ²½Íæ¼Ò¿ç·þPKÏà¹Ø½±Àø×´Ì¬ pkAwardPack = ChPyNetSendPack.tagMCCrossRealmPKAwardState() pkAwardPack.DayPKCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayPKCountAwardState) pkAwardPack.DayWinCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayWinCountAwardState) pkAwardPack.DanLVAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLVAwardState) pkAwardPack.SeasonAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState) NetPackCommon.SendFakePack(curPlayer, pkAwardPack) return def SyncCrossRealmPKHisSeasonInfo(curPlayer): mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID) hisSeasonInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerHisSeasonInfo() hisSeasonInfo.SeasonList = [] for seasonID in xrange(1, mapSeasonID + 1): seasonInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerHisSeason() seasonInfo.SeasonID = seasonID seasonInfo.DanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonDanLV % seasonID) seasonInfo.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonScore % seasonID) seasonInfo.Order = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID) seasonInfo.AwardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardLV % seasonID) hisSeasonInfo.SeasonList.append(seasonInfo) hisSeasonInfo.Count = len(hisSeasonInfo.SeasonList) NetPackCommon.SendFakePack(curPlayer, hisSeasonInfo) return def DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, isMail, drDataDict): ## ¼Ç¼Áì½±Á÷Ïò drDataDict.update({"zoneID":zoneID, "seasonID":seasonID, "isMail":isMail}) DataRecordPack.SendEventPack("GetCrossPKAward_%s" % eventName, drDataDict, curPlayer) return