#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GameWorldFamilyWar
#
# @todo:ÏÉÃËÁªÈü
# @author hxp
# @date 2018-01-12
# @version 1.0
#
# ÏêϸÃèÊö: ÏÉÃËÁªÈü
#
#-------------------------------------------------------------------------------
#"""Version = 2018-01-12 15:00"""
#-------------------------------------------------------------------------------
import GameWorld
import IpyGameDataPY
import IPY_GameServer
import PlayerCompensation
import PlayerUniversalGameRec
import PlayerFamilyRedPacket
import PlayerDBGSEvent
import ChPyNetSendPack
import NetPackCommon
import PlayerControl
import PlayerFamily
import ShareDefine
import PyGameData
import ChConfig
import random
import copy
'''
1. ÏÉÃ˸ÄÃû
2. ±ÈÈüʱÏÉÃ˹ØÏµ±ä¸ü£¬¸±±¾½øÐÐÖв»¿É±ä¸üÏÉÃ˹ØÏµ
3. ÏÉÃ˽âÉ¢, »î¶¯Ê±¸üнâÉ¢ÁÐ±í£¬»î¶¯ºó¸üÐÂÆÀ¼¶
'''
FamilyWarRound_First = 1 # Ê×ÂÖ
FamilyWarRound_Second = 2 # ´ÎÂÖ
FamilyWar_MaxGroupID = 5 # ÁªÈü·Ö×éÊý
FamilyWar_GroupFamilyCount = 4 # ÿ×éÏÉÃËÊý
FamilyWar_MaxFamilyCount = FamilyWar_MaxGroupID * FamilyWar_GroupFamilyCount # ×î´ó±ÈÈüÏÉÃËÊý
## ʮλ: µÚ¼¸ÂÖ; ¸öλ: 1-·Ö×é, 2-Õ½¶·, 3-½áÊø; 99-ÌØÊâÖµ ÏÂÖÜ·Ö×鶨¼¶
FamilyWarState_FirstRoundGroup = 11 # Ê×ÂÖ·Ö×é
FamilyWarState_FirstRoundBattle = 12 # Ê×ÂÖÕ½¶·
FamilyWarState_FirstRoundOver = 13 # Ê×ÂÖ½áÊø
FamilyWarState_SecondRoundGroup = 21 # ´ÎÂÖ·Ö×é
FamilyWarState_SecondRoundBattle = 22 # ´ÎÂÖÕ½¶·
FamilyWarState_SecondRoundOver = 23 # ´ÎÂÖ½áÊø
FamilyWarState_NextWeekGroupRank = 99 # ÏÂÖÜ·Ö×鶨¼¶
''' ¶ÔÕ½¼Ç¼
value1 ×é¼¶±ð
value2 µÚ¼¸ÂÖ
value3 ¼Ò×åID1
value4 ¼Ò×åID2
value5 ʤÀû¼Ò×åID
strValue1 ¼Ò×åÃû1
strValue2 ¼Ò×åÃû2
strValue3 [½âÉ¢µÄ¼Ò×åID, ½âÉ¢µÄ¼Ò×åID]
'''
def GetBatRecGroupID(recData): return recData.GetValue1()
def SetBatRecGroupID(recData, groupID): return recData.SetValue1(groupID)
def GetBatRecRoundNum(recData): return recData.GetValue2()
def SetBatRecRoundNum(recData, roundNum): return recData.SetValue2(roundNum)
def GetBatRecFamilyIDA(recData): return recData.GetValue3()
def SetBatRecFamilyIDA(recData, familyIDA): return recData.SetValue3(familyIDA)
def GetBatRecFamilyIDB(recData): return recData.GetValue4()
def SetBatRecFamilyIDB(recData, familyIDB): return recData.SetValue4(familyIDB)
def GetBatRecWinFamilyID(recData):return recData.GetValue5()
def SetBatRecWinFamilyID(recData, winFamilyID): return recData.SetValue5(winFamilyID)
def GetBatRecFamilyNameA(recData): return recData.GetStrValue1()
def SetBatRecFamilyNameA(recData, familyNameA): return recData.SetStrValue1(familyNameA)
def GetBatRecFamilyNameB(recData): return recData.GetStrValue2()
def SetBatRecFamilyNameB(recData, familyNameB): return recData.SetStrValue2(familyNameB)
def GetBatRecDissolutionID(recData): return [] if not recData.GetStrValue3() else eval(recData.GetStrValue3()) # ½âÉ¢µÄ¼Ò×åIDÁбí [familyID, ...]
def SetBatRecDissolutionID(recData, dissFamilyIDList): return recData.SetStrValue3(str(dissFamilyIDList))
''' ÍõÕßÏÉÃË
value1 ¼Ò×åID
value2 ÃËÖ÷ID
value3 Á¬Ê¤´ÎÊý
value4 ÒÑ·ÖÅäµ½µÄÁ¬Ê¤´ÎÊý
value5 ÖÕ½áÁ¬Ê¤µÄ½±Àø´ÎÊý, Ö»ÄÜ»ñµÃÕâÒ»´ÎµÄÁ¬Ê¤½±Àø£¬ÓÐÖµ²ÅÏÔʾ£¬·ÖÅäºóÉèÖÃΪ0, ÓÅÏÈ·ÖÅä
strValue1 ÏÉÃËÃû
'''
def GetFWChampionFamilyID(championRecData): return championRecData.GetValue1()
def SetFWChampionFamilyID(championRecData, familyID): return championRecData.SetValue1(familyID)
def GetFWChampionLeaderID(championRecData): return championRecData.GetValue2()
def SetFWChampionLeaderID(championRecData, leaderID): return championRecData.SetValue2(leaderID)
def GetFWChampionWinCount(championRecData): return championRecData.GetValue3()
def SetFWChampionWinCount(championRecData, winCount): return championRecData.SetValue3(winCount)
def GetFWChampionWinRewardAllot(championRecData): return championRecData.GetValue4()
def SetFWChampionWinRewardAllot(championRecData, allotWinCount): return championRecData.SetValue4(allotWinCount)
def GetFWChampionEndWinCount(championRecData): return championRecData.GetValue5()
def SetFWChampionEndWinCount(championRecData, endWinCount): return championRecData.SetValue5(endWinCount)
def GetFWChampionFamilyName(championRecData): return championRecData.GetStrValue1()
def SetFWChampionFamilyName(championRecData, familyName): return championRecData.SetStrValue1(familyName)
#-------------------------------------------------------------------------------
def OnGameServerInitOK():
## ·þÎñÆ÷Æô¶¯³É¹¦
# ¼ÓÔØ±¾ÖܲμÓÏÉÃËÁªÈüµÄÏÉÃ˼°ÏÉÃ˳ÉÔ± (ÏÉÃ˳ÉÔ±²»Ò»¶¨»¹ÔÚÔÏÉÃË)
PyGameData.g_familyWarMemDict = {}
PyGameData.g_familyWarFamilyIDList = []
warMemRecList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
for i in xrange(warMemRecList.Count()):
recData = warMemRecList.At(i)
warPlayerID = recData.GetValue1()
warFamilyID = recData.GetValue2()
if warFamilyID not in PyGameData.g_familyWarFamilyIDList:
PyGameData.g_familyWarFamilyIDList.append(warFamilyID)
PyGameData.g_familyWarMemDict[warPlayerID] = warFamilyID
GameWorld.Log("¼ÓÔØÏÉÃËÁªÈü²ÎÈüÏÉÃËID: %s" % PyGameData.g_familyWarFamilyIDList)
GameWorld.Log("¼ÓÔØÏÉÃËÁªÈü²ÎÈüÏÉÃËÍæ¼Ò: %s" % PyGameData.g_familyWarMemDict)
return
def DoFamilyWarReset(isDelRec=True):
## ÖØÖÃÏÉÃËÁªÈü
PyGameData.g_familyWarFightingIDList = []
PyGameData.g_familyWarFamilyIDList = []
playerManager = GameWorld.GetPlayerManager()
for playerID in PyGameData.g_familyWarMemDict.keys():
player = playerManager.FindPlayerByID(playerID)
if player:
__NotifyPlayerJoinFamilyInfo(player, 0)
PyGameData.g_familyWarMemDict = {}
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0)
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 0)
if isDelRec:
GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarChampion)
GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
GameWorld.Log("ÖØÖÃÏÉÃËÁªÈü£¡isDelRec=%s" % isDelRec)
return
def CheckPlayerCanEnterFamilyWarFBMap(curPlayer):
## ¼ì²éÍæ¼Ò¿É·ñ½øÈëÏÉÃËÁªÈüÕ½³¡¸±±¾
playerID = curPlayer.GetPlayerID()
familyID = curPlayer.GetFamilyID()
if playerID not in PyGameData.g_familyWarMemDict:
PlayerControl.NotifyCode(curPlayer, "PlayerNotInFamilyWarMemList")
return False
warFamilyID = PyGameData.g_familyWarMemDict[playerID]
if familyID != warFamilyID:
PlayerControl.NotifyCode(curPlayer, "PlayerWarFamilyIDIsChange")
return False
if not IsFamilyInWarFighting(warFamilyID):
PlayerControl.NotifyCode(curPlayer, "PlayerFamilyWarIsOver")
return False
return True
def IsFamilyInWarFighting(familyID):
## ÏÉÃËÊÇ·ñÕýÔÚÏÉÃËÁªÈüÕ½¶·ÖÐ
return familyID in PyGameData.g_familyWarFightingIDList
def OnPlayerLogin(curFamily, curPlayer):
CheckPlayerJoinFamilyWarInfo(curPlayer)
return
def CheckPlayerJoinFamilyWarInfo(curPlayer):
playerID = curPlayer.GetPlayerID()
if playerID not in PyGameData.g_familyWarMemDict:
return
joinFamilyID = PyGameData.g_familyWarMemDict[playerID]
if not joinFamilyID or curPlayer.GetFamilyID() == joinFamilyID:
return
__NotifyPlayerJoinFamilyInfo(curPlayer, joinFamilyID)
return
def __NotifyPlayerJoinFamilyInfo(curPlayer, joinFamilyID):
joinFamilyName = ""
if joinFamilyID:
joinFamily = GameWorld.GetFamilyManager().FindFamily(joinFamilyID)
joinFamilyName = "" if not joinFamily else joinFamily.GetName()
joinFamilyWarInfo = ChPyNetSendPack.tagGCPlayerJoinFamilyWarInfo()
joinFamilyWarInfo.JoinFamilyID = joinFamilyID
joinFamilyWarInfo.JoinFamilyName = joinFamilyName
joinFamilyWarInfo.JoinFamilyNameLen = len(joinFamilyWarInfo.JoinFamilyName)
NetPackCommon.SendFakePack(curPlayer, joinFamilyWarInfo)
return
def OnDeleteFamily(familyID, familyWarRank):
## ÏÉÃ˽âÉ¢´¦Àí
isWarFamily = False
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
for i in xrange(warBatRecList.Count()):
recData = warBatRecList.At(i)
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
if familyID in [familyIDA, familyIDB]:
dissFamilyIDList = GetBatRecDissolutionID(recData)
if familyID not in dissFamilyIDList:
dissFamilyIDList.append(familyID)
SetBatRecDissolutionID(recData, dissFamilyIDList)
GameWorld.Log("¸üÐÂÏÉÃËÁªÈü¶ÔÕ½¼Ç¼½âÉ¢ÏÉÃËIDÊý¾Ý: delFamilyID=%s,roundNum=%s,groupID=%s,familyIDA=%s,familyIDB=%s,dissFamilyIDList=%s"
% (familyID, GetBatRecRoundNum(recData), GetBatRecGroupID(recData), familyIDA, familyIDB, dissFamilyIDList))
isWarFamily =True
# Èç¹ûÊÇÁªÈüÏÉÃ˽âÉ¢£¬Ö÷¶¯Í¬²½Ò»´Î¶ÔÕ½ÐÅÏ¢
if isWarFamily:
PlayerUniversalGameRec.SendUniversalGameRecInfo(None, ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
if familyWarRank:
GameWorld.Log("½âÉ¢ÏÉÃË£¬´¥·¢¸üÐÂÏÉÃËÁªÈüÅÅÃû: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
UpdFamilyWarRank()
# ²¹·¢Î´·ÖÅäµÄÁ¬Ê¤½±Àø
AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
return
def OnChangeFamilyLeader(familyID, leaderID):
## ÏÉÃËÃËÖ÷±ä¸ü
if not leaderID:
return
championRecData = GetFamilyWarChampionRecData()
championFamilyID = GetFWChampionFamilyID(championRecData)
if championFamilyID != familyID:
return
SetFWChampionLeaderID(championRecData, leaderID)
return
def OnRenameFamily(familyID, familyName):
## ÏÉÃ˸ÄÃû
isWarFamily = False
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
for i in xrange(warBatRecList.Count()):
recData = warBatRecList.At(i)
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
if familyID not in [familyIDA, familyIDB]:
continue
isWarFamily = True
if familyID == familyIDA:
SetBatRecFamilyNameA(recData, familyName)
if familyID == familyIDB:
SetBatRecFamilyNameB(recData, familyName)
GameWorld.Log("ÏÉÃËÁªÈüÏÉÃ˸ÄÃû: familyID=%s,roundNum=%s,groupID=%s,familyIDA=%s,familyIDB=%s"
% (familyID, GetBatRecRoundNum(recData), GetBatRecGroupID(recData), familyIDA, familyIDB))
# Èç¹ûÊÇÁªÈüÏÉÃ˽âÉ¢£¬Ö÷¶¯Í¬²½Ò»´Î¶ÔÕ½ÐÅÏ¢
if isWarFamily:
PlayerUniversalGameRec.SendUniversalGameRecInfo(None, ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
return
def OnFamilyWarStateChange(stateValue):
GameWorld.Log("ÏÉÃËÁªÈü״̬±ä¸ü: stateValue=%s" % stateValue)
# Ê×ÂÖ·Ö×é
if stateValue == FamilyWarState_FirstRoundGroup:
DoLogicFamilyWar_FirstRoundGroup()
# Ê×ÂÖ¿ªÕ½
elif stateValue == FamilyWarState_FirstRoundBattle:
OnFamilyWar_Start(FamilyWarRound_First)
# Ê×ÂÖ½áÊø
elif stateValue == FamilyWarState_FirstRoundOver:
OnFamilyWar_Over(FamilyWarRound_First)
# ´ÎÂÖ·Ö×é
elif stateValue == FamilyWarState_SecondRoundGroup:
DoLogicFamilyWar_SecondRoundGroup()
# ´ÎÂÖ¿ªÕ½
elif stateValue == FamilyWarState_SecondRoundBattle:
OnFamilyWar_Start(FamilyWarRound_Second)
# ´ÎÂÖ½áÊø
elif stateValue == FamilyWarState_SecondRoundOver:
OnFamilyWar_Over(FamilyWarRound_Second)
# ÏÂÖÜ·Ö×鶨¼¶
elif stateValue == FamilyWarState_NextWeekGroupRank:
pass
#·ÏÆú¸Ã½×¶ÎÂß¼£¬ÒòΪ²»ÔÙÖ§³Öµ¥´Î»î¶¯ÖÜÆÚ¿çÌ죬ËùÒÔ¸ÄΪ¹ýÌìʱ´¥·¢¼ì²éһϼ´¿É
#DoLogicFamilyWar_NextWeekGroupRank()
else:
GameWorld.ErrLog("²»´æÔÚ¸ÃÏÉÃËÁªÈü״̬£¡stateValue=%s" % stateValue)
return
def OnMapServerInitOK():
# ÉÏÖܹھüID
championFamilyID = GetFWChampionFamilyID(GetFamilyWarChampionRecData())
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ChampionFamilyID, championFamilyID)
# µ±Ç°¶ÔÕ½ÏÉÃËÃ÷ϸ
canEnter = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBCanEnter % ChConfig.Def_FBMapID_FamilyWar)
roundNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
if canEnter and roundNum:
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_VSFamilyInfo, GetRoundOpenFBVSFamilyInfo(roundNum))
return
def GetRoundOpenFBVSFamilyInfo(roundNum):
## »ñÈ¡ÂִοɿªÆô¸±±¾µÄ±ÈÈüÐÅÏ¢
championRecData = GetFamilyWarChampionRecData()
championFamilyID = GetFWChampionFamilyID(championRecData)
championWinCount = GetFWChampionWinCount(championRecData)
GameWorld.Log(" ÏÉÃËÁªÈüÀúÊ·¹Ú¾ü: championFamilyID=%s,championWinCount=%s" % (championFamilyID, championWinCount))
vsFamilyInfo = []
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
finalMatchState = False # ÊÇ·ñÒѾ´¦Àí¹ý×ܾöÈü³¡´Î
warBatRecCount = warBatRecList.Count()
for i in xrange(warBatRecCount):
recData = warBatRecList.At(i)
if roundNum != GetBatRecRoundNum(recData):
continue
# Ö»ÓÐÒì³£±ÈÈü »òÕß ´ÎÂֵĵÚÒ»Ìõ¼Ç¼Ϊ¾öÈü³¡
isFinalMatch = (warBatRecCount == 1) or (not finalMatchState and roundNum == FamilyWarRound_Second)
if isFinalMatch:
finalMatchState = True
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
familyNameA = GetBatRecFamilyNameA(recData)
familyNameB = GetBatRecFamilyNameB(recData)
if not familyIDA or not familyIDB:
GameWorld.Log(" ÓÐÏÉÃËÂÖ¿Õ£¬²»¿ªÆô±¾³¡±ÈÈü£¡i=%s,familyIDA=%s,familyIDB=%s" % (i, familyIDA, familyIDB))
continue
disFamilyIDList = GetBatRecDissolutionID(recData)
if disFamilyIDList:
GameWorld.Log(" ÓÐÏÉÃ˽âÉ¢£¬²»¿ªÆô±¾³¡±ÈÈü£¡i=%s,familyIDA=%s,familyIDB=%s" % (i, familyIDA, familyIDB))
continue
winFamilyID = GetBatRecWinFamilyID(recData)
if winFamilyID:
GameWorld.Log(" ÒÑÓÐʤ¸º½á¹ûµÄ£¬²»¿ªÆô±¾³¡±ÈÈü£¡i=%s,familyIDA=%s,familyIDB=%s,winFamilyID=%s"
% (i, familyIDA, familyIDB, winFamilyID))
continue
groupID = GetBatRecGroupID(recData)
familyRankA = PlayerFamily.GetFamilyIDRank(familyIDA)
familyRankB = PlayerFamily.GetFamilyIDRank(familyIDB)
winCountA = championWinCount if familyIDA == championFamilyID else 0
winCountB = championWinCount if familyIDB == championFamilyID else 0
vsFamilyInfo.append([isFinalMatch, roundNum, groupID, [familyIDA, familyIDB], [familyRankA, familyRankB], [familyNameA, familyNameB], [winCountA, winCountB]])
return vsFamilyInfo
def OnFamilyWar_Start(roundNum):
## ÏÉÃËÁªÈü¶ÔÕ½¿ªÊ¼
curRound = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
if curRound != roundNum:
GameWorld.ErrLog("µ±Ç°ÂÖ´ÎÒì³£Êý¾Ý£¬ÎÞ·¨¿ªÆôÏÉÃËÁªÈü!dbRound=%s,startRound=%s" % (curRound, roundNum))
return
GameWorld.Log("==========ÏÉÃËÁªÈüÕ½¶·¿ªÊ¼, µ±Ç°ÂÖ´Î(%s)=========" % (roundNum))
vsFamilyInfo = GetRoundOpenFBVSFamilyInfo(roundNum)
GameWorld.Log(" vsFamilyInfo=%s" % (vsFamilyInfo))
# ¸üÐÂÕ½¶·ÖеÄÏÉÃËIDÁбí
PyGameData.g_familyWarFightingIDList = []
for vsFamily in vsFamilyInfo:
PyGameData.g_familyWarFightingIDList.extend(vsFamily[ShareDefine.VSFamilyInfo_FamilyIDList])
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_VSFamilyInfo, vsFamilyInfo)
if vsFamilyInfo:
# ֪ͨµØÍ¼¿ªÆô¸±±¾¶ÔÕ½·ÖÏß
msgInfo = str(vsFamilyInfo)
GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, ChConfig.Def_FBMapID_FamilyWar,
"FamilyWarStart", msgInfo, len(msgInfo))
return
def DoLogicFamilyWar_FirstRoundGroup():
## Ê×ÂÖ¶ÔÕ½·Ö×é
curRound = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
if curRound == FamilyWarRound_First:
GameWorld.DebugLog("ÏÉÃËÁªÈüÒѾ´¦Àí¹ýÊ×ÂÖ·Ö×飡")
return
if curRound != 0:
GameWorld.ErrLog("ÏÉÃËÁªÈü´¦Àí¹ýÊ×ÂÖ·Ö×éÂִμǼֵÒì³££¡curRound=%s" % curRound)
return
GameWorld.Log("============= ¿ªÊ¼ÏÉÃËÁªÈü·Ö×éÊ×ÂÖ =============")
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 0) # ÐÂÒ»ÂÖ¿ªÊ¼£¬ÖØÖÃ״̬
PlayerFamily.DoFamilySort() # Ê×ÂÖ·Ö×éǰÐèÒªÇ¿ÖÆË¢ÐÂÒ»´ÎÏÉÃËÅÅÐÐ
lastFamilyWarMemDict = copy.deepcopy(PyGameData.g_familyWarMemDict)
PyGameData.g_familyWarMemDict = {}
PyGameData.g_familyWarFamilyIDList = []
universalRecMgr = GameWorld.GetUniversalRecMgr()
universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle) # ´¦ÀíÊ×ÂÖÐèÏÈÇå¿Õ¶ÔÕ½±í
universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarMember) # Çå¿Õ²ÎÈüÈËÔ±¼Ç¼
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
warMemRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
groupID = FamilyWar_MaxGroupID
groupFamilyList = []
#Ö±½ÓÈ¡ÅÅÐаñǰXÃû×÷ΪÁªÈüÏÉÃËÃûµ¥
familyMgr = GameWorld.GetFamilyManager()
sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
familyCount = len(sortFamilyIDList)
joinFamilyLVLimit = IpyGameDataPY.GetFuncCfg("FamilyMatchSet", 1)
GameWorld.DebugLog("×îµÍ²ÎÈüÏÉÃ˵ȼ¶£º %s" % joinFamilyLVLimit)
for i, familyID in enumerate(sortFamilyIDList):
family = familyMgr.FindFamily(familyID)
if not family:
GameWorld.ErrLog("ÏÉÃËÁªÈüÊ×ÂÖ·Ö×éʱÎÞ·¨ÕÒµ½¸ÃÏÉÃË: i=%s,familyID=%s" % (i, familyID))
continue
if family.GetLV() < joinFamilyLVLimit:
GameWorld.Log("ÏÉÃ˵ȼ¶²»×㣬ÎÞ·¨²ÎÓëÁªÈü£¡familyID=%s,LV=%s,joinFamilyLVLimit=%s" % (familyID, family.GetLV(), joinFamilyLVLimit))
else:
groupFamilyList.append(family)
# Ìí¼Ó²ÎÈüÏÉÃ˼°³ÉÔ±Ãûµ¥
PyGameData.g_familyWarFamilyIDList.append(familyID)
for index in xrange(family.GetCount()):
curMember = family.GetAt(index)
memPlayerID = curMember.GetPlayerID()
memPlayer = curMember.GetPlayer()
isAddOK = AddFamilyWarMem(memPlayerID, familyID, warMemRecList)
lastJoinFamilyID = lastFamilyWarMemDict.get(memPlayerID, 0)
# ÖØÐÂÍ¨ÖªÍæ¼Ò²ÎÓëµÄÏÉÃË
if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
__NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
# ÂúÒ»×éÏÉÃËÊý or ûÓÐÏÉÃËÁË
if len(groupFamilyList) == FamilyWar_GroupFamilyCount or i == familyCount - 1:
__DoFristRoundRandBattle(warBatRecList, groupID, groupFamilyList)
# 1Ϊ×îµÍ¼¶ÁªÈü×é
if groupID == 1:
break
else:
# ÏÂÒ»×é
groupID -= 1
groupFamilyList = []
GameWorld.Log(" PyGameData.g_familyWarFamilyIDList: %s" % PyGameData.g_familyWarFamilyIDList)
GameWorld.Log(" PyGameData.g_familyWarMemDict: %s" % PyGameData.g_familyWarMemDict)
GameWorld.Log(" ͨÓüǼ¶ÔÕ½¼Ò×åÊý: %s" % warBatRecList.Count())
GameWorld.Log(" ͨÓüǼ²ÎÓëÍæ¼ÒÊý: %s" % warMemRecList.Count())
GameWorld.Log(" ÏÉÃËÁªÈüÊ×ÂÖ±ÈÈü·Ö×éÈ·ÈÏÍê±Ï£¡")
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, FamilyWarRound_First) # ÉèÖÃÒÑ´¦Àí¹ýµÄÂÖ´Î
return
def AddFamilyWarMem(playerID, familyID, warMemRecList=None):
## Ìí¼ÓÏÉÃËÁªÈü²ÎÈüÈËÔ±
if familyID not in PyGameData.g_familyWarFamilyIDList:
GameWorld.DebugLog("·Ç²ÎÈüÏÉÃË£¬²»ÄÜÌí¼Ó²ÎÈü³ÉÔ±£¡familyID=%s" % familyID)
return
if playerID in PyGameData.g_familyWarMemDict:
GameWorld.DebugLog("±¾ÖÜÒѾÌí¼Ó¹ý¸Ã³ÉÔ±ËùÊô²ÎÈüÏÉÃË£¬²»Öظ´Ìí¼Ó£¡playerID=%s,familyID=%s,warFamilyID=%s"
% (playerID, familyID, PyGameData.g_familyWarMemDict[playerID]))
return
if not warMemRecList:
warMemRecList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
if not warMemRecList:
return
recData = warMemRecList.AddRec()
recData.SetValue1(playerID)
recData.SetValue2(familyID)
PyGameData.g_familyWarMemDict[playerID] = familyID # ÉèÖÃÍæ¼Ò¶ÔÓ¦µÄÏÉÃËID£¬±¾ÖÜÁªÈüÖ»ÄÜÔÚ¸ÃÏÉÃËʱ²ÅÄܽøÈëÕ½³¡
GameWorld.DebugLog(" Ìí¼ÓÏÉÃËÁªÈüÕ½¶·ÈËÔ±: playerID=%s,familyID=%s" % (playerID, familyID))
return True
def __DoFristRoundRandBattle(warBatRecList, groupID, groupFamilyList):
## Ö´ÐÐÊ×ÂÖÁªÈü·Ö×éÏÉÃËËæ»úÆ¥Åä±ÈÈü, Á½Á½Ëæ»ú
if not groupFamilyList:
return
random.shuffle(groupFamilyList) # ´òÂÒ˳Ðò, Á½Á½¶ÔÕ½
roundNum = FamilyWarRound_First
while groupFamilyList:
vaFamilyList = groupFamilyList[:2]
groupFamilyList = groupFamilyList[2:]
familyA = vaFamilyList[0]
familyB = vaFamilyList[1] if len(vaFamilyList) > 1 else None
familyIDA, familyNameA = familyA.GetID(), familyA.GetName() # AÏÉÃËÒ»¶¨´æÔÚ, BÏÉÃË¿ÉÄÜΪ¿Õ
familyIDB = 0 if not familyB else familyB.GetID()
familyNameB = "" if not familyB else familyB.GetName()
# Ê×Âֵϰֱ½Ó´ÓÏÉÃËÅÅÐаñÉÏÈ¡£¬ËùÒÔÒ»¶¨ÊÇ´æÔÚµÄÏÉÃË£¬¹ÊûÓнâÉ¢ÏÉÃËÐÅÏ¢
AddFamilyWarBatRec(warBatRecList, roundNum, groupID, familyIDA, familyIDB, familyNameA, familyNameB)
return
def AddFamilyWarBatRec(warBatRecList, roundNum, groupID, familyIDA, familyIDB, familyNameA, familyNameB, disFamilyIDList=[]):
## Ìí¼Ó±ÈÈüÆ¥Åä¶ÔÕ½¼Ç¼
if not familyIDA and not familyIDB:
return
recData = warBatRecList.AddRec()
SetBatRecGroupID(recData, groupID)
SetBatRecRoundNum(recData, roundNum)
SetBatRecFamilyIDA(recData, familyIDA)
SetBatRecFamilyIDB(recData, familyIDB)
SetBatRecFamilyNameA(recData, familyNameA)
SetBatRecFamilyNameB(recData, familyNameB)
setDissFamilyIDList = []
if familyIDA and familyIDA in disFamilyIDList:
setDissFamilyIDList.append(familyIDA)
if familyIDB and familyIDB in disFamilyIDList:
setDissFamilyIDList.append(familyIDB)
SetBatRecDissolutionID(recData, setDissFamilyIDList)
GameWorld.Log(" AddRec roundNum=%s,groupID=%s,familyIDA(%s) VS familyIDB(%s), setDissFamilyIDList=%s"
% (roundNum, groupID, familyIDA, familyIDB, setDissFamilyIDList))
return
def DoLogicFamilyWar_SecondRoundGroup():
## ´ÎÂÖ¶ÔÕ½·Ö×é
curRound = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
if curRound == FamilyWarRound_Second:
GameWorld.DebugLog("ÏÉÃËÁªÈüÒѾ´¦Àí¹ý´ÎÂÖ·Ö×飡")
return
if curRound != FamilyWarRound_First:
GameWorld.ErrLog("ÏÉÃËÁªÈü´¦Àí¹ý´ÎÂÖ·Ö×éÂִμǼֵÒì³££¡curRound=%s" % curRound)
return
GameWorld.Log("============= ¿ªÊ¼ÏÉÃËÁªÈü·Ö×é´ÎÂÖ =============")
secondRoundBatDict = {} # ¹é×éͳ¼Æ {ÁªÈü¼¶±ðID:[[familyIDA, familyIDB, winFamilyID, disFamilyIDList], ...], ...}
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
for i in xrange(warBatRecList.Count()):
recData = warBatRecList.At(i)
if FamilyWarRound_First != GetBatRecRoundNum(recData):
continue
groupID = GetBatRecGroupID(recData)
fristRoundBatRec = secondRoundBatDict.get(groupID, [])
fristRoundBatRec.append(recData)
secondRoundBatDict[groupID] = fristRoundBatRec
roundNum = FamilyWarRound_Second
groupID = FamilyWar_MaxGroupID
for i in xrange(FamilyWar_MaxGroupID):
groupID = FamilyWar_MaxGroupID - i
GameWorld.Log("-----groupID=%s-----" % groupID)
## ´ÎÂÖ·ÖÅ乿Ôò
# Èç¹ûÏÉÃËÊý=1£¬²»´ò£¬¸ÃÏÉÃËĬÈÏ»ñµÃ±¾×éµÚÒ»Ãû
# Èç¹ûÏÉÃËÊý=2£¬ÄÇôֻҪ´òÒ»ÂÖ£¬Ê×ÂÖÖ±½Ó¾ö³öµÚÒ»¡¢¶þÃû£¬´ÎÂÖ²»´ò
# Èç¹ûÏÉÃËÊý>2£¬ÄÇôһ¶¨»á´òÁ½ÂÖ£¬×ñÑʤÕß¶ÔʤÕߣ¬°ÜÕß¶Ô°ÜÕߣ¬²»¿¼ÂÇÏÉÃ˽âÉ¢
if groupID not in secondRoundBatDict:
GameWorld.Log(" ûÓиü¶±ð±ÈÈü£¬½áÊø·Ö×é!roundNum=%s,groupID=%s" % (roundNum, groupID))
continue
fristRoundBatRec = secondRoundBatDict[groupID]
if len(fristRoundBatRec) < 2:
GameWorld.Log(" Ê×ÂÖ±ÈÈü²»ÊÇÁ½³¡£¬Ö±½ÓÌø¹ý´ÎÂÖ±ÈÈü!roundNum=%s,groupID=%s" % (roundNum, groupID))
continue
## =========== ÒÔÏÂÂ߼ΪÊ×ÂÖ²ÎÈüµÄÏÉÃËÖÁÉÙÓÐ3¸öµÄÇé¿ö ==============
recData1, recData2 = fristRoundBatRec
winFamilyID1, winFamilyName1, loseFamilyID1, loseFamilyName1, disFamilyIDList1 = __GetWinLoseFamilyInfoForNextRound(recData1)
winFamilyID2, winFamilyName2, loseFamilyID2, loseFamilyName2, disFamilyIDList2 = __GetWinLoseFamilyInfoForNextRound(recData2)
disFamilyIDList = disFamilyIDList1 + disFamilyIDList2 # ´ÎÂÖÐèÒª´¦Àí½âÉ¢ÏÉÃËÐÅÏ¢
# ʤÕß¶ÔʤÕߣ¬ °ÜÕß¶Ô°ÜÕߣ¬ÆäÖÐÒ»¸ö°ÜÕßÏÉÃË¿ÉÄÜΪ¿Õ
GameWorld.Log(" ʤÕß¶ÔʤÕߣ¬°ÜÕß¶Ô°ÜÕß: winFamilyID1=%s,winFamilyID2=%s,loseFamilyID1=%s,loseFamilyID2=%s"
% (winFamilyID1, winFamilyID2, loseFamilyID1, loseFamilyID2))
AddFamilyWarBatRec(warBatRecList, roundNum, groupID, winFamilyID1, winFamilyID2, winFamilyName1, winFamilyName2, disFamilyIDList)
AddFamilyWarBatRec(warBatRecList, roundNum, groupID, loseFamilyID1, loseFamilyID2, loseFamilyName1, loseFamilyName2, disFamilyIDList)
GameWorld.Log(" ÏÉÃËÁªÈü´ÎÂÖ±ÈÈü·Ö×éÈ·ÈÏÍê±Ï£¡")
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, FamilyWarRound_Second) # ÉèÖÃÒÑ´¦Àí¹ýµÄÂÖ´Î
return
def __GetWinLoseFamilyInfoForNextRound(recData):
'''¸ù¾ÝÉÏÒ»ÂÖ±ÈÈü½á¹û»ñÈ¡ÓÐ×ʸñ²ÎÓëÏÂÒ»ÂÖ±ÈÈüµÄʤÕßÓë°ÜÕßÏÉÃËÐÅÏ¢
@param recData: ÉÏÒ»ÂÖ±ÈÈü½á¹û¼Ç¼Êý¾Ý
×¢: ÉÏÒ»ÂÖµÄʤÕßÓë°ÜÕß²¢²»Ò»¶¨¶¼ÓÐ×ʸñ²ÎÓëÏÂÒ»ÂÖ±ÈÈü£¬±ØÐëÂú×ãÆäÖÐÒ»¸öÏÉÃËδ½âÉ¢£¨¿ÉÄÜÈüǰ¡¢Èüºó½âÉ¢£©²ÅÄܲÎÓë;
'''
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
familyNameA = GetBatRecFamilyNameA(recData)
familyNameB = GetBatRecFamilyNameB(recData)
winFamilyID = GetBatRecWinFamilyID(recData)
if not winFamilyID:
winFamilyID = __SetBatRecWinFamilyIDBySystem(recData, familyIDA, familyIDB, False)
# winFamilyIDÒ»¶¨»áÓÐID
#if not winFamilyID:
# return
if winFamilyID == familyIDB:
winFamilyName = familyNameB
loseFamilyID = familyIDA
loseFamilyName = familyNameA
else:
winFamilyID = familyIDA
winFamilyName = familyNameA
loseFamilyID = familyIDB
loseFamilyName = familyNameB
disFamilyIDList = GetBatRecDissolutionID(recData)
return winFamilyID, winFamilyName, loseFamilyID, loseFamilyName, disFamilyIDList
def __SetBatRecWinFamilyIDBySystem(recData, familyIDA, familyIDB, isFight=True):
''' ϵͳ¼ì²éÉèÖñÈÈüʤÕßÏÉÃË
@param isFight: ÊÇ·ñÊDZÈÈüÖеģ¬Èç¹ûÊÇ£¬Ôò²»ÉèÖÃʤÕߣ¨ÂÖ¿Õ¼°½âÉ¢µÄ³ýÍ⣩
µ±²»ÊÇʱ£¬ÏµÍ³Ò»¶¨»áÇ¿ÖÆÉèÖÃÒ»¸öʤÕßÏÉÃËID£¬¼´Ê¹¸ÃÏÉÃËÒѾ½âÉ¢£¡
Ê×ÂÖÓÐδÕý³£½áÊøµÄ£¬´ÎÂÖ¿ªÊ¼·ÖÅäʱ½øÐв¹´¦Àí
´ÎÂÖÓÐδÕý³£½áÊøµÄ£¬ÏÂÖÜ·Ö×鶨¼¶Ê±½øÐв¹´¦Àí
²¹´¦ÀíµÄÇé¿ö£¬Ò»¶¨»áÉèÖÃÒ»¸ö»ñʤID
'''
winFamilyID = GetBatRecWinFamilyID(recData)
if winFamilyID:
return winFamilyID
winFamilyID = 0
disFamilyIDList = GetBatRecDissolutionID(recData)
# ÓÐÏÉÃ˽âÉ¢µÄÇé¿ö, ½âÉ¢¿ÉÄÜ·¢ÉúÔÚ ·Ö×éºó±ÈÈüǰ¡¢±ÈÈüºó¡¢´ÎÂÖ·Ö×éǰ£¬±ÈÈüʱ²»¿É±ä¸üÏÉÃ˹ØÏµ
if disFamilyIDList:
if familyIDA in disFamilyIDList and familyIDB in disFamilyIDList:
winFamilyID = familyIDA
GameWorld.Log(" Á½¸öÏÉÃ˶¼ÒѾ½âÉ¢£¬Ä¬ÈÏAʤ£¡familyIDA=%s,familyIDB=%s,disFamilyIDList=%s,winFamilyID=%s"
% (familyIDA, familyIDB, disFamilyIDList, winFamilyID))
elif familyIDA and familyIDB:
winFamilyID = familyIDB if familyIDA in disFamilyIDList else familyIDA
GameWorld.Log(" ¶ÔÕ½ÏÉÃËÒѾ½âÉ¢, Ö±½Ó»ñʤ: familyIDA=%s,familyIDB=%s,disFamilyIDList=%s,winFamilyID=%s"
% (familyIDA, familyIDB, disFamilyIDList, winFamilyID))
else:
winFamilyID = familyIDA if not familyIDB else familyIDB
GameWorld.Log(" ±ÈÈüÂÖ¿Õ, µ«ÏÉÃËÒѽâÉ¢, ĬÈÏ»ñʤ!familyIDA=%s,familyIDB=%s,disFamilyIDList=%s,winFamilyID=%s"
% (familyIDA, familyIDB, disFamilyIDList, winFamilyID))
# ·Ç±ÈÈüÖеÄʱºòÐèÒª¼ì²é·þÎñÆ÷Ò쳣ûÓнáËãµÄÇé¿ö
elif not isFight and familyIDA and familyIDB:
## ×¢£º ´ËÇé¿öÖ»ÓÐÊǵØÍ¼·þÎñÆ÷³öÒì³££¬»òÕ߻ʱ¼ä·þÎñÆ÷´¦Óڹطþ»òÒì³£Çé¿öϲÅÓпÉÄÜ·¢Éú
familyRankA = PlayerFamily.GetFamilyIDRank(familyIDA)
familyRankB = PlayerFamily.GetFamilyIDRank(familyIDB)
winFamilyID = familyIDA if familyRankA <= familyRankB else familyIDB
GameWorld.Log(" ±ÈÈüÒ쳣ûÓÐÕý³£½áÊø, ÓÉϵͳĬÈÏÉèÖÃʤÕß!familyIDA=%s,familyRankA=%s,familyIDB=%s,familyRankB=%s,winFamilyID=%s"
% (familyIDA, familyRankA, familyIDB, familyRankB, winFamilyID))
# ÂÖ¿Õ
elif not familyIDA or not familyIDB:
winFamilyID = familyIDA if not familyIDB else familyIDB
GameWorld.Log(" ±ÈÈüÂÖ¿Õ, ÓÉϵͳĬÈÏÉèÖÃʤÕß!familyIDA=%s,familyIDB=%s,winFamilyID=%s"
% (familyIDA, familyIDB, winFamilyID))
elif isFight:
GameWorld.DebugLog(" ±ÈÈüÖУ¬²»ÉèÖÃʤÕß!familyIDA=%s,familyIDB=%s,disFamilyIDList=%s" % (familyIDA, familyIDB, disFamilyIDList))
return 0
if not winFamilyID:
winFamilyID = familyIDA if not familyIDB else familyIDB
if not winFamilyID:
return 0
SetBatRecWinFamilyID(recData, winFamilyID)
familyMgr = GameWorld.GetFamilyManager()
family = familyMgr.FindFamily(winFamilyID)
if not family:
GameWorld.Log(" »ñʤÏÉÃËÒѽâÉ¢£¡²»·¢·Å½±Àø£¡winFamilyID=%s" % winFamilyID)
return winFamilyID
notBattleRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchOtherReward", 1) # ûÓÐÕý³£±ÈÈüµÄ½±Àø
notBattleRewardRateList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchOtherReward", 2) # ½±Àø±ÈÀý
groupID = GetBatRecGroupID(recData)
rewardPer = notBattleRewardRateList[groupID - 1] if 1 <= groupID <= len(notBattleRewardRateList) else notBattleRewardRateList[0]
playerIDList = []
addItemList = []
for itemID, itemCount, isBind in notBattleRewardItemList:
addItemList.append([itemID, max(1, int(itemCount * rewardPer / 100.0)), isBind])
for index in xrange(family.GetCount()):
curMember = family.GetAt(index)
playerIDList.append(curMember.GetPlayerID())
# ϵͳ·¢·Åδ½áËãµÄ»î¶¯½±ÀøÓʼþ
roundNum = GetBatRecRoundNum(recData)
PlayerCompensation.SendMailByKey("FairyLeagueCompensation", playerIDList, addItemList, [roundNum, groupID])
# δ½áËãµÄ»î¶¯²ÎÓë½±
joinAwardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchRankReward", 3)
PlayerCompensation.SendMailByKey("FairyLeagueJoinReward", playerIDList, joinAwardItemList, [roundNum])
GameWorld.Log(" ·¢·Åδ½áËã±ÈÈü½±Àø=roundNum=%s,groupID=%s,winFamilyID=%s,rewardPer=%s,addItemList=%s,joinAwardItemList=%s"
% (roundNum, groupID, winFamilyID, rewardPer, addItemList, joinAwardItemList))
return winFamilyID
def OnFamilyWar_Over(roundNum):
## ÏÉÃËÁªÈü¶ÔÕ½½áÊø´¦Àí
# Ê×ÂÖ½áÊøÖ»´¦ÀíδÕý³£½áËãµÄÊ×ÂÖ±ÈÈü
if roundNum == FamilyWarRound_First:
warBatRecList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
warCount = warBatRecList.Count()
for i in xrange(warCount):
recData = warBatRecList.At(i)
if roundNum != GetBatRecRoundNum(recData):
continue
if GetBatRecWinFamilyID(recData):
continue
groupID = GetBatRecGroupID(recData)
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
GameWorld.Log("ÏÉÃËÁªÈüϵͳ´¦Àíδ½áËãµÄ¶ÔÕ½½á¹û! roundNum=%s,groupID=%s,familyIDA=%s,familyIDB=%s" % (roundNum, groupID, familyIDA, familyIDB))
__SetBatRecWinFamilyIDBySystem(recData, familyIDA, familyIDB, False)
if warCount == 1:
GameWorld.Log("ÏÉÃËÁªÈüÊ×ÂÖÖ»ÓÐÒ»³¡¶ÔÕ½£¬Ö±½ÓÖ´ÐÐ×ܽáËã!")
__DoLogicFamilyWarAllOver()
return
# ´ÎÂÖ½áÊøÖ±½Ó×ܽáËã
if roundNum == FamilyWarRound_Second:
__DoLogicFamilyWarAllOver()
return
def DoOnDay():
DoLogicFamilyWar_NextWeekGroupRank()
return
def DoLogicFamilyWar_NextWeekGroupRank():
''' ÏÂÖÜ·Ö×鶨¼¶
×îµÍ¼¶±ð×飺 ²»ÉèÖÃÁªÈü¼¶±ð, ÏÂÖÜ×îµÍ¼¶±ð×éÃûµ¥ÓÉÆäËûÎÞÁªÈü¼¶±ðÏÉÃË×ÜÕ½Á¦ÅÅÐеõ½
'''
GameWorld.Log("======= ÏÉÃËÁªÈüÏÂÖÜ·Ö×鶨¼¶ =======")
# ÕâÀï²¹´¥·¢Ò»´Î£¬·ÀÖ¹×ܽáËãµÄʱºò·þÎñÆ÷Ò쳣ûÓгɹ¦½áËã
# »ò ´ÎÂÖûÓбÈÈüµ¼ÖÂûÓнáË㣨´ÎÂÖµÄÏÉÃ˶¼½âÉ¢Á˲ſÉÄܳöÏÖ£¬Ò»°ã²»¿ÉÄܳöÏÖ£¬¿É²»¿¼ÂÇ£¬Èç¹ûÕæ³öÏÖÁË£¬»áÔÚÖÜÁùÁ賿½áË㣩
__DoLogicFamilyWarAllOver()
#UpdFamilyWarRank()
return
def UpdFamilyWarRank():
'''¸üÐÂÏÉÃËÁªÈüÅÅÃû
×¢Ò⣺¸ÃÂß¼ÔÚÏÉÃËÁªÈüÖÜÆÚÖв»¿ÉÖ´ÐУ¬½öÔÚÏÂÖÜ·Ö×鶨¼¶×´Ì¬Ï¿ɸüУ¬ÓɳÌÐò¿ØÖÆ£¬Ôڻ½áÊøºó½áËãµ÷ÓÃ
ÏÉÃËÁªÈüÐÂÒ»ÖÜÆÚ¿ªÊ¼Ê±¡¢ÏÉÃ˽âɢʱ »á´¥·¢¸ÃÂß¼
'''
#gameWorld = GameWorld.GetGameWorld()
#state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
#if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank:
# GameWorld.DebugLog("·ÇÏÂÖÜ·Ö×鶨¼¶½×¶Î²»¿É¸üÐÂÏÉÃËÁªÈüÅÅÃû!")
# return
GameWorld.Log("=== ¸üÐÂÏÉÃËÁªÈüÅÅÃû ===")
familyMgr = GameWorld.GetFamilyManager()
sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
for rank, familyID in enumerate(sortFamilyIDList, 1):
family = familyMgr.FindFamily(familyID)
if not family:
continue
curRank = PlayerFamily.GetFamilyWarRank(family)
if not curRank:
break
if curRank != rank:
PlayerFamily.SetFamilyWarRank(family, rank)
GameWorld.Log(" ¸üÐÂÏÉÃËÁªÈüÏÉÃËÅÅÃû: familyID=%s,curRank=%s,updRank=%s" % (family.GetID(), curRank, rank))
return
def __DoLogicFamilyWarAllOver():
''' ÏÉÃËÈüÈ«²¿±ÈÈü½áÊøºóÂß¼
·Ç×î¸ß¼¶±ð×é: µÚÒ»Ãû½ú¼¶
·Ç×îµÍ¼¶±ð×é: ×îºóÃû½µ¼¶
×îµÍ¼¶±ð×飺 ²»ÉèÖÃÁªÈü¼¶±ð, ÏÂÖÜ×îµÍ¼¶±ð×éÃûµ¥ÓÉÆäËûÎÞÁªÈü¼¶±ðÏÉÃË×ÜÕ½Á¦ÅÅÐеõ½
'''
allOverDo = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver)
if allOverDo:
GameWorld.Log("ÒѾ´¦Àí¹ýÏÉÃËÁªÈü×ܽáË㣬²»Öظ´´¦Àí£¡")
return
GameWorld.Log("====== ÏÉÃËÁªÈü×ܽáË㣬´¦ÀíÏÉÃ˽ú¼¶¡¢½µ¼¶£¡ ======")
Def_WinScore = {FamilyWarRound_First:10, FamilyWarRound_Second:1} # ÿÂÖ»ñʤµÃ·Ö,È·±£Ê×ÂÖ»ñʤΪʤÕß×é»ý·ÖÄÜÅÅÃû1¡¢2Ãû, °´×îÖÕ»ý·ÖËãÅÅÃû
# 1. ͳ¼Æ¸÷ÏÉÃËÁªÈü×Ü»ý·Ö
allDissFamilyIDList = []
allGroupFamilyScoreDict = {}
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
if not warBatRecList.Count():
GameWorld.Log("ûÓÐÏÉÃËÁªÈü±ÈÈü¼Ç¼£¬²»ÐèÒª½áË㣡")
curRoundNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # ÖØÖöÔÕ½ÂÖ´Î
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # ÉèÖÃÒѾ´¦Àí¹ý×ܽáËã
GameWorld.Log("ÖØÖÃÂÖ´ÎÐÅÏ¢£¬ÉèÖÃÒѽáË㣡curRoundNum=%s" % curRoundNum)
return
for i in xrange(warBatRecList.Count()):
recData = warBatRecList.At(i)
groupID = GetBatRecGroupID(recData)
roundNum = GetBatRecRoundNum(recData)
familyIDA = GetBatRecFamilyIDA(recData)
familyIDB = GetBatRecFamilyIDB(recData)
winFamilyID = GetBatRecWinFamilyID(recData)
dissFamilyIDList = GetBatRecDissolutionID(recData)
for familyID in dissFamilyIDList:
if familyID not in allDissFamilyIDList:
allDissFamilyIDList.append(familyID)
if not winFamilyID:
winFamilyID = __SetBatRecWinFamilyIDBySystem(recData, familyIDA, familyIDB, False)
familyScoreA = Def_WinScore.get(roundNum, 0) if familyIDA == winFamilyID else 0
familyScoreB = Def_WinScore.get(roundNum, 0) if familyIDB == winFamilyID else 0
# ±¾×éÏÉÃËID¶ÔÓ¦µÃ·Ö
groupFamilyScoreDict = allGroupFamilyScoreDict.get(groupID, {})
groupFamilyScoreDict[familyIDA] = groupFamilyScoreDict.get(familyIDA, 0) + familyScoreA
groupFamilyScoreDict[familyIDB] = groupFamilyScoreDict.get(familyIDB, 0) + familyScoreB
allGroupFamilyScoreDict[groupID] = groupFamilyScoreDict
# 2. ÿ×éÏÉÃ˰´»ý·ÖÅÅÐòµÃ³ö×éÄÚÅÅÃû
familyWarIDRankList = []
groupID = FamilyWar_MaxGroupID
for i in xrange(FamilyWar_MaxGroupID):
groupID = FamilyWar_MaxGroupID - i
if groupID not in allGroupFamilyScoreDict:
continue
groupFamilyScoreDict = allGroupFamilyScoreDict[groupID]
groupFamilySortList = []
for familyID, score in groupFamilyScoreDict.items():
if familyID:
groupFamilySortList.append([score, familyID])
groupFamilySortList.sort(reverse=True) # °´»ý·Öµ¹ÐòÅÅ
groupFamilyIDSortList = [groupFamily[1] for groupFamily in groupFamilySortList]
GameWorld.Log("×éÏÉÃË»ý·ÖÅÅÃû: groupID=%s,groupFamilySortList=%s" % (groupID, groupFamilySortList))
familyWarIDRankList += groupFamilyIDSortList
GameWorld.Log("»ý·ÖÅÅÐòºóÏÉÃËID: %s" % familyWarIDRankList)
# 3. ´¦Àí½ú¼¶¡¢½µ¼¶
familyWarIDRankList += [0] * (FamilyWar_MaxFamilyCount - len(familyWarIDRankList)) # ²¹ÆëË÷Òý£¬·½±ãºóÃæÂß¼´¦Àí
for i in xrange(1, FamilyWar_MaxGroupID):
index = i * FamilyWar_GroupFamilyCount # ÏÂ×éµÚÒ»ÃûË÷Òý, ÕâÀï×î´óË÷ÒýΪ×îºóÒ»×éµÚÒ»Ãû
preIndex = index - 1 # ÉÏ×é×îºóÒ»ÃûË÷Òý
if not familyWarIDRankList[index]:
GameWorld.Log(" ÏÂ×éµÚÒ»ÃûÎÞÏÉÃË£¬²»½»»»!index=%s" % index)
continue
# Ö±½Ó½»»»Î»Öã¨Ò»½úÒ»½µ£©
GameWorld.Log(" ½µ¼¶ÏÉÃËË÷Òý=%s£¬½ú¼¶ÏÉÃËË÷Òý=%s" % (preIndex, index))
familyWarIDRankList[preIndex], familyWarIDRankList[index] = familyWarIDRankList[index], familyWarIDRankList[preIndex]
GameWorld.Log("½ú¼¶½µ¼¶ºóÏÉÃËID: %s" % familyWarIDRankList)
# 4. ½ØÈ¡0Ö®ºóµÄ
if 0 in familyWarIDRankList:
familyWarIDRankList = familyWarIDRankList[:familyWarIDRankList.index(0)]
GameWorld.Log("³ý0ºóÏÉÃËID: %s" % familyWarIDRankList)
# 5. ½ØÈ¡µ½µ¹ÊýµÚ¶þ×飬×îºóÒ»×éÏÂÖÜÓÉÕ½Á¦¾ö¶¨
familyWarIDRankList = familyWarIDRankList[:(FamilyWar_MaxFamilyCount - FamilyWar_GroupFamilyCount)]
GameWorld.Log("×îÖÕµÄÅÅÃûÏÉÃËID: %s" % familyWarIDRankList)
GameWorld.Log(" ½âÉ¢µÄÏÉÃËID: %s" % allDissFamilyIDList)
# ×¢Òâ: familyWarIDRankList Õâ¸öÁбíÀïµÄÏÉÃËID¿ÉÄÜÊÇÒѾ½âÉ¢µÄ£¬µ«ÊÇÔÚµ±Ç°Çé¿öÏ»¹ÐèÒªÕ¼ÓøÃÁªÈü×éµÄÃû¶î£¬Ö±µ½ÏÂÖÜ·Ö×鶨¼¶²Å±»¶¥µô
# 6. ¸üÐÂÏÉÃËÆÀ¼¶
updFamilyIDList = []
familyMgr = GameWorld.GetFamilyManager()
# ÏȸüÐÂÉÏÖÜÃû´ÎÓÐÁªÈüÅÅÃûµÄ£¬¿ÉÄÜÓÐЩÃû´Î±ä¶¯ÁË£¬¿ÉÄÜÓÐЩ½µ¼¶µô³öÅÅÃû
sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
for familyID in sortFamilyIDList:
family = familyMgr.FindFamily(familyID)
if not family:
continue
lastRank = PlayerFamily.GetFamilyWarRank(family)
if not lastRank:
break
updFamilyIDList.append(familyID)
updRank = 0 if familyID not in familyWarIDRankList else (familyWarIDRankList.index(familyID) + 1)
if updRank != lastRank:
PlayerFamily.SetFamilyWarRank(family, updRank)
GameWorld.Log("¸üÐÂÏÉÃËÆÀ¼¶: familyID=%s,lastRank=%s,updRank=%s" % (familyID, lastRank, updRank))
# ÔÙ¸üб¾ÖÜнúµÄÁªÈüÅÅÃû
for updRank, familyID in enumerate(familyWarIDRankList, 1):
if familyID in updFamilyIDList:
continue
family = familyMgr.FindFamily(familyID)
if not family:
GameWorld.Log("нúÏÉÃËÆÀ¼¶, ÏÉÃËÒѽâÉ¢!familyID=%s,updRank=%s" % (familyID, updRank))
continue
lastRank = 0
PlayerFamily.SetFamilyWarRank(family, updRank)
GameWorld.Log("нúÏÉÃËÆÀ¼¶: familyID=%s,lastRank=%s,updRank=%s" % (familyID, lastRank, updRank))
# Ç¿ÖÆ¸üÐÂÏÉÃËÅÅÐò
PlayerFamily.DoFamilySort()
if familyWarIDRankList:
UpdFamilyWarChampion(familyWarIDRankList[0])
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # ÖØÖöÔÕ½ÂÖ´Î
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # ÉèÖÃÒѾ´¦Àí¹ý×ܽáËã
UpdFamilyWarRank() # ¸ÄΪ±ÈÈü½áÊøºóĬÈϸüÐÂÁªÈüÅÅÃû
return
def UpdFamilyWarChampion(championFamilyID):
## ¸üйھüÐÅÏ¢, ¹Ú¾ü¿ÉÄÜÒѽâÉ¢
family = GameWorld.GetFamilyManager().FindFamily(championFamilyID)
championRecData = GetFamilyWarChampionRecData()
lastChampionFamilyID = GetFWChampionFamilyID(championRecData)
championFamilyName = GetFWChampionFamilyName(championRecData)
GameWorld.Log("ÉÏÖܹھüÏÉÃËID: %s" % lastChampionFamilyID)
GameWorld.Log("±¾ÖܹھüÏÉÃËID: %s" % championFamilyID)
winCount = GetFWChampionWinCount(championRecData)
if lastChampionFamilyID == championFamilyID:
winCount += 1
SetFWChampionWinCount(championRecData, winCount)
GameWorld.Log(" ¸üÐÂÁ¬Ê¤: %s" % winCount)
AllotWinRewardBySystem(championRecData, False)
else:
AllotWinRewardBySystem(championRecData, True)
SetFWChampionFamilyID(championRecData, championFamilyID)
SetFWChampionWinCount(championRecData, 1)
SetFWChampionWinRewardAllot(championRecData, 0)
GameWorld.Log(" ¹Ú¾ü±ä¸ü!")
winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # ÆðʼÁ¬Ê¤½±Àø´ÎÊý
winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # Á¬Ê¤½±Àø¼ä¸ô´ÎÊý
endWinCount = winCount + 1
if endWinCount == winRewardStartCount or (endWinCount > winRewardStartCount and (endWinCount - winRewardStartCount) % winRewardSpaceCount == 0):
SetFWChampionEndWinCount(championRecData, endWinCount)
GameWorld.Log(" ÖÕÖ¹¶Ô·½Á¬Ê¤! endWinCount=%s" % endWinCount)
# ¸üÐÂÏÉÃËÐÅÏ¢
if family:
championFamilyName = family.GetName()
SetFWChampionLeaderID(championRecData, family.GetLeaderID())
SetFWChampionFamilyName(championRecData, championFamilyName)
else:
GameWorld.Log(" ¹Ú¾üÏÉÃ˲»´æÔÚ»òÒѾ½âÉ¢ÁË!")
# ֪ͨµØÍ¼¹Ú¾ü±ä¸ü
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ChampionFamilyID, championFamilyID)
# Ö÷¶¯¹ã²¥Ò»´Î¿Í»§¶Ë
PlayerUniversalGameRec.SendUniversalGameRecSingle(None, championRecData)
# ·¢ËÍÍõÕßÏÉÃ˺ì°ü
redPackID = IpyGameDataPY.GetFuncCfg("FamilyMatchOtherReward", 3)
if redPackID and family:
PlayerFamilyRedPacket.CreatNewFamilyRedPacket(family, family.GetLeaderID(), redPackID)
# ±¾ÂÖÏÉÃËÁªÈüÒѽáÊø£¬%s0ÏÉÃ˰εÃÍ·³ï£¬³ÉΪÍõÕßÏÉÃË
if championFamilyName:
PlayerControl.WorldNotify(0, "FamilyMatchSecondSessionEnd", [championFamilyName])
return
def GetFamilyWarChampionRecData():
universalRecMgr = GameWorld.GetUniversalRecMgr()
championRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarChampion)
if championRecList.Count():
return championRecList.At(0)
return championRecList.AddRec()
def AllotWinRewardBySystem(championRecData, isAll):
## ϵͳ×Ô¶¯·ÖÅäÏÉÃËδ·ÖÅäµÄÁ¬Ê¤½±Àø
familyID = GetFWChampionFamilyID(championRecData)
leaderID = GetFWChampionLeaderID(championRecData)
winCount = GetFWChampionWinCount(championRecData) # µ±Ç°Á¬Ê¤´ÎÊý
lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # ÉÏ´ÎÒÑ·ÖÅäµÄÁ¬Ê¤½±Àø´ÎÊý
endWinCount = GetFWChampionEndWinCount(championRecData) # ÖÕ½á¶ÔÊÖµÄÁ¬Ê¤´ÎÊý
winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # Á¬Ê¤½±Àø
winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # ÆðʼÁ¬Ê¤½±Àø´ÎÊý
winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # Á¬Ê¤½±Àø¼ä¸ô´ÎÊý
if not winRewardItemList or not winRewardStartCount or not winRewardSpaceCount:
return
updAllotWinCount = 0 # ¸üеÄÒÑ·ÖÅäµ½µÄÁ¬Ê¤´ÎÊý
startRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # Ï´ÎÁ¬Ê¤½±Àø´ÎÊý
sysAllotWinCountList = range(startRewardWinCount, winCount + 1, winRewardSpaceCount)
isAllotEndWinCount = (endWinCount and (isAll or sysAllotWinCountList))
if not isAll and sysAllotWinCountList:
sysAllotWinCountList = sysAllotWinCountList[:-1] # ±£ÁôÒ»¸ö¿ÉÊÖ¶¯·ÖÅä, ÆäÓà×Ô¶¯·ÖÅä
if sysAllotWinCountList:
updAllotWinCount = sysAllotWinCountList[-1]
sysAllotCount = len(sysAllotWinCountList) # ϵͳ×Ô¶¯·¢·ÅµÄ½±Àø´ÎÊý
if isAllotEndWinCount:
sysAllotCount += 1
if sysAllotCount <= 0:
#GameWorld.Log("ÎÞÐè×Ô¶¯·ÖÅä½±Àø£¡Éϴν±ÀøÁ¬Ê¤´ÎÊý=%s,µ±Ç°Á¬Ê¤Êý=%s,ÖÕ½áÁ¬Ê¤=%s,isAll=%s,sysAllotWinCountList=%s"
# % (lastAllotWinCount, winCount, endWinCount, isAll, sysAllotWinCountList))
return
if sysAllotCount > 1:
winRewardItemList = copy.deepcopy(winRewardItemList)
for itemInfo in winRewardItemList:
itemInfo[1] *= sysAllotCount
GameWorld.Log("ϵͳ×Ô¶¯·ÖÅäÁ¬Ê¤½±Àø¸øÃËÖ÷£¡Éϴν±ÀøÁ¬Ê¤´ÎÊý=%s,µ±Ç°Á¬Ê¤Êý=%s,ÖÕ½áÁ¬Ê¤=%s,·ÖÅä´ÎÊý=%s,ÎïÆ·=%s,isAll=%s,familyID=%s,leaderID=%s"
% (lastAllotWinCount, winCount, endWinCount, sysAllotCount, winRewardItemList, isAll, familyID, leaderID))
if sysAllotWinCountList:
GameWorld.Log(" sysAllotWinCountList=%s" % sysAllotWinCountList)
if endWinCount:
GameWorld.Log(" ÖØÖÃÒÑ·ÖÅäÖÕ½á¶ÔÊÖÁ¬Ê¤´ÎÊý½±Àø!")
SetFWChampionEndWinCount(championRecData, 0)
if updAllotWinCount:
GameWorld.Log(" ¸üÐÂÒÑ·ÖÅäµ½µÄÁ¬Ê¤´ÎÊý: %s" % updAllotWinCount)
SetFWChampionWinRewardAllot(championRecData, updAllotWinCount)
PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail2", [leaderID], winRewardItemList)
GameWorld.Log(" -----------------------")
return
#// A4 10 ÏÉÃËÁªÈüÁ¬Ê¤½±Àø·ÖÅä #tagCGFamilyWarWinRewardAllot
#
#struct tagCGFamilyWarWinRewardAllot
#{
# tagHead Head;
# DWORD MemPlayerID; //·ÖÅ䏸µÄÏÉÃ˳ÉÔ±Íæ¼ÒID
#};
def OnFamilyWarWinRewardAllot(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
memPlayerID = clientData.MemPlayerID
playerID = curPlayer.GetPlayerID()
curFamily = curPlayer.GetFamily()
if curFamily == None:
return
curMember = curFamily.FindMember(playerID)
if curMember == None:
return
if curMember.GetFamilyLV() != IPY_GameServer.fmlLeader:
GameWorld.Log("²»ÊÇÃËÖ÷£¬²»ÄÜ·ÖÅäÁ¬Ê¤½±Àø£¡", playerID)
return
familyID = curFamily.GetID()
curTagMember = curFamily.FindMember(memPlayerID)
if curTagMember == None:
GameWorld.Log("ÏÉÃËûÓиóÉÔ±£¬ÎÞ·¨·ÖÅäÁ¬Ê¤½±Àø£¡familyID=%s,memPlayerID=%s" % (familyID, memPlayerID), playerID)
return
championRecData = GetFamilyWarChampionRecData()
championFamilyID = GetFWChampionFamilyID(championRecData)
if familyID != championFamilyID:
GameWorld.Log("·ÇÍõÕßÏÉÃË£¬ÎÞ·¨·ÖÅäÁ¬Ê¤½±Àø£¡championFamilyID=%s,familyID=%s" % (championFamilyID, familyID), playerID)
return
endWinCount = GetFWChampionEndWinCount(championRecData) # ÖÕ½á¶ÔÊÖµÄÁ¬Ê¤´ÎÊý
if endWinCount:
SetFWChampionEndWinCount(championRecData, 0)
GameWorld.Log("·ÖÅäÖÕ½áÏÉÃËÁ¬Ê¤½±Àø!familyID=%s,endWinCount=%s" % (familyID, endWinCount), playerID)
else:
winCount = GetFWChampionWinCount(championRecData) # µ±Ç°Á¬Ê¤´ÎÊý
lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # ÉÏ´ÎÒÑ·ÖÅäµÄÁ¬Ê¤½±Àø´ÎÊý
winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # ÆðʼÁ¬Ê¤½±Àø´ÎÊý
winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # Á¬Ê¤½±Àø¼ä¸ô´ÎÊý
nextRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # Ï´ÎÁ¬Ê¤½±Àø´ÎÊý
if winCount < nextRewardWinCount:
GameWorld.Log("Á¬Ê¤´ÎÊý²»×㣬ÎÞ·¨·ÖÅäÁ¬Ê¤½±Àø£¡ÒÑ·ÖÅäÁ¬Ê¤½±Àø´ÎÊý=%s,Ï´ÎÁ¬Ê¤½±Àø´ÎÊý(%s) > µ±Ç°Á¬Ê¤´ÎÊý(%s)"
% (lastAllotWinCount, nextRewardWinCount, winCount), playerID)
return
SetFWChampionWinRewardAllot(championRecData, nextRewardWinCount)
GameWorld.Log("·ÖÅäÏÉÃËÁ¬Ê¤½±Àø!familyID=%s,·ÖÅäÁ¬Ê¤Êý=%s" % (familyID, nextRewardWinCount), playerID)
winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # Á¬Ê¤½±Àø
PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail1", [memPlayerID], winRewardItemList)
PlayerUniversalGameRec.SendUniversalGameRecSingle(curPlayer, championRecData) # ͬ²½¸ø¸ÃÍæ¼Ò
# %s0ÏÉÃËÃËÖ÷½«Á¬Ê¤½±Àø·ÖÅ䏸%s2£¬Éñ±ø½µÊÀ
notifyItemID = winRewardItemList[0][0]
PlayerControl.WorldNotify(0, "FamilyMatchLianWinReward", [curFamily.GetName(), notifyItemID, curTagMember.GetName()])
return
def MapServer_FamilyWarOver(msgList):
## µØÍ¼ÏÉÃËÕ½½áÊø
familyIDA, familyIDB, winFamilyID, isFinalMatch = msgList
roundNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
GameWorld.Log("ÊÕµ½µØÍ¼Í¬²½µÄÏÉÃËÁªÈü½áÊøÊý¾Ý: roundNum=%s,familyIDA=%s,familyIDB=%s,winFamilyID=%s,isFinalMatch=%s"
% (roundNum, familyIDA, familyIDB, winFamilyID, isFinalMatch))
if roundNum not in [FamilyWarRound_First, FamilyWarRound_Second]:
return
universalRecMgr = GameWorld.GetUniversalRecMgr()
warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
for i in xrange(warBatRecList.Count()):
recData = warBatRecList.At(i)
if roundNum != GetBatRecRoundNum(recData):
continue
if familyIDA == GetBatRecFamilyIDA(recData) and familyIDB == GetBatRecFamilyIDB(recData):
SetBatRecWinFamilyID(recData, winFamilyID)
GameWorld.Log(" ¸üлñʤÏÉÃËID: i=%s,winFamilyID=%s" % (i, winFamilyID))
break
GameWorld.Log(" PyGameData.g_familyWarFightingIDList=%s" % PyGameData.g_familyWarFightingIDList)
if familyIDA in PyGameData.g_familyWarFightingIDList:
PyGameData.g_familyWarFightingIDList.remove(familyIDA)
if familyIDB in PyGameData.g_familyWarFightingIDList:
PyGameData.g_familyWarFightingIDList.remove(familyIDB)
GameWorld.Log(" PyGameData.g_familyWarFightingIDList=%s" % PyGameData.g_familyWarFightingIDList)
PlayerUniversalGameRec.SendUniversalGameRecInfo(None, ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
if roundNum == FamilyWarRound_First and not PyGameData.g_familyWarFightingIDList and not isFinalMatch:
# ±¾³¡ÏÉÃËÁªÈüÒѽáÊø£¬ÏÂÒ»³¡½«ÓÚÖÜÎå21£º00¾ÙÐÐ
PlayerControl.WorldNotify(0, "FamilyMatchFirstSessionEnd")
# ´ÎÂÖ ÇÒ ËùÓÐÕ½¶·ÖеÄÏÉÃ˶¼ÒѽáÊø
# Ê×ÂÖ ÇÒ ÊÇ×îÖÕ¾öÈü³¡µÄ, ÕâÖÖÇé¿ö½öÔÚÖ»ÓÐÁ½¸öÏÉÃ˵ÄÇé¿ö£¬Ö»´òÒ»³¡¾Í½áÊøÁË£¬´óÓÚ2¸öÏÉÃ˵ÄÒ»¶¨»á´òµ½´ÎÂÖ
if (roundNum == FamilyWarRound_Second and not PyGameData.g_familyWarFightingIDList) \
or (roundNum == FamilyWarRound_First and isFinalMatch):
__DoLogicFamilyWarAllOver()
return