ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
@@ -21,11 +21,16 @@
import ShareDefine
import PlayerControl
import IpyGameDataPY
import PlayerActivity
import PlayerBillboard
import PlayerViewCache
import PlayerZhanling
import ItemControler
import PlayerBeauty
import PlayerArena
import PlayerGubao
import PyGameData
import PlayerTask
import FBCommon
import ChConfig
@@ -37,8 +42,8 @@
    '''
    playerID = curPlayer.GetPlayerID()
    matchIDList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
    #if tagPlayerID in matchIDList:
    #    return matchIDList.index(tagPlayerID)
    if tagPlayerID in matchIDList:
        return matchIDList.index(tagPlayerID)
    
    gameRecMgr = DBDataMgr.GetGameRecMgr()
    atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
@@ -65,21 +70,23 @@
    if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
        return
    
    return True
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
    return True, funcLineID
def GetFBPlayerLineupID(curPlayer, mapID, funcLineID):
    ## 获取玩家使用的攻防阵容ID
    # @return: 攻击方阵容ID, 防守方阵容ID
    return ShareDefine.Lineup_Arena, ShareDefine.Lineup_ArenaDef
    return ShareDefine.Lineup_ArenaAtk, ShareDefine.Lineup_ArenaDef
def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
    ## 回合战斗结束
def OnTurnFightAward(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict):
    ## 回合战斗结算奖励
    if not curPlayer:
        return
    
    playerID = curPlayer.GetPlayerID()
    tagPlayerID = turnFight.tagPlayerID
    isWin = turnFight.isWin
    tagPlayerID = reqData[1]
    isWin = winFaction == ChConfig.Def_FactionA
    
    canAtkRet = __checkCanAtkTagPlayer(curPlayer, tagPlayerID)
    GameWorld.DebugLog("结算竞技场! isWin=%s,tagPlayerID=%s,canAtkRet=%s" % (isWin, tagPlayerID, canAtkRet), playerID)
@@ -122,17 +129,25 @@
        atkAddScore, defDecScore = winScoreInfo
        GameWorld.DebugLog("scoreIndex=%s,winScoreInfo=%s" % (scoreIndex, winScoreInfo), playerID)
        
    # 无论胜负,只要挑战都给固定奖励
    awardItemList = []
    awardItemList += IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
    exItemRate, exItemID = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_ArenaItemEx) # 概率额外获得1个物品
    if exItemRate and exItemID:
        if GameWorld.CanHappen(exItemRate):
            awardItemList.append([exItemID, 1])
            GameWorld.DebugLog("红颜概率额外获得1个物品: exItemRate=%s, exItemID=%s, awardItemList=%s" % (exItemRate, exItemID, awardItemList))
    awardDict.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
                    FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)})
    GameWorld.DebugLog("竞技场结算奖励: tagPlayerID=%s,isWin=%s,atkAddScore=%s,defDecScore=%s,awardItemList=%s" % (tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList))
    if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
        return
    
    # 无论胜负,只要挑战都给固定奖励
    awardItemList = IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Arena", False, {}], isNotifyAward=False)
    
    __updArenaBatRecord(curPlayer, turnFight, tagPlayerID, isWin, atkAddScore, defDecScore)
    overMsg.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
                    FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)})
    __updArenaBatRecord(curPlayer, tagPlayerID, isWin, atkAddScore, defDecScore)
    
    PlayerArena.Sync_ArenaInfo(curPlayer)
    
@@ -140,9 +155,11 @@
    PlayerArena.DoArenaMatchRefresh(curPlayer, True, isSys=True)
    
    PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_ArenaCnt, 1)
    PlayerGubao.AddGubaoSpecEffLayer(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)
    PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_Arena, 1)
    return
def __updArenaBatRecord(curPlayer, turnFight, tagPlayerID, isWin, atkAddScore, defDecScore):
def __updArenaBatRecord(curPlayer, tagPlayerID, isWin, atkAddScore, defDecScore):
    ## 更新战斗相关日志、榜单等
    
    playerID = curPlayer.GetPlayerID()
@@ -152,7 +169,13 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore)
    GameWorld.DebugLog("score=%s,atkAddScore=%s,updScore=%s" % (score, atkAddScore, updScore), playerID)
    
    tagViewCache = turnFight.tagViewCache
    if isWin:
        winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
        updWinCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt + 1)
        GameWorld.DebugLog("updWinCnt=%s" % (updWinCnt), playerID)
    tagViewCache = PlayerViewCache.FindViewCache(tagPlayerID)
    gameRecMgr = DBDataMgr.GetGameRecMgr()
    atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
    recData = atkRecMgr.AddRecData(maxCount)
@@ -160,21 +183,22 @@
    PlayerArena.SetRecAtkType(recData, PlayerArena.RecAtkType_Atk)
    PlayerArena.SetRecTagPlayerID(recData, tagPlayerID)
    PlayerArena.SetRecIsWin(recData, isWin)
    PlayerArena.SetRecFace(recData, tagViewCache.GetFace())
    PlayerArena.SetRecFacePic(recData, tagViewCache.GetFacePic())
    PlayerArena.SetRecRealmLV(recData, tagViewCache.GetRealmLV())
    PlayerArena.SetRecLV(recData, tagViewCache.GetLV())
    PlayerArena.SetRecFace(recData, tagViewCache.GetFace() if tagViewCache else 0)
    PlayerArena.SetRecFacePic(recData, tagViewCache.GetFacePic() if tagViewCache else 0)
    PlayerArena.SetRecRealmLV(recData, tagViewCache.GetRealmLV() if tagViewCache else 1)
    PlayerArena.SetRecLV(recData, tagViewCache.GetLV() if tagViewCache else 1)
    # 名字、变更积分 +-、战力
    # 战力统一记录防守阵容
    fightPower = TurnAttack.GetCacheLineupFightPower(tagViewCache, ShareDefine.Lineup_ArenaDef)
    recData.SetUserData({"Name":tagViewCache.GetPlayerName(), "AddScore":atkAddScore, "FightPower":fightPower})
    fightPower = TurnAttack.GetCacheLineupFightPower(tagViewCache, ShareDefine.Lineup_ArenaDef) if tagViewCache else 0
    tagPlayerName = tagViewCache.GetPlayerName() if tagViewCache else ""
    recData.SetUserData({"Name":tagPlayerName, "AddScore":atkAddScore, "FightPower":fightPower})
    # 攻击方仅在积分变更或者初始积分时更新榜单
    if atkAddScore or updScore == IpyGameDataPY.GetFuncCfg("ArenaSet", 1):
        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Arena, updScore)
        
    # 被击方
    if tagPlayerID < ShareDefine.RealPlayerIDStart:
        GameWorld.DebugLog("目标非真实玩家不处理! tagPlayerID=%s" % tagPlayerID, playerID)
        #GameWorld.DebugLog("目标非真实玩家不处理! tagPlayerID=%s" % tagPlayerID, playerID)
        return
    
    # 以战斗记录作为最新积分的更新记录,支持离线玩家上线后更新最新积分
@@ -203,7 +227,7 @@
    PlayerArena.SetRecRealmLV(recData, curPlayer.GetOfficialRank())
    PlayerArena.SetRecLV(recData, curPlayer.GetLV())
    # 名字、变更积分 +-、战力
    fightPower = TurnAttack.GetPlayerLineupFightPower(curPlayer, ShareDefine.Lineup_ArenaDef)
    fightPower = TurnAttack.GetPlayerLineupFightPower(curPlayer, ShareDefine.Lineup_ArenaAtk)
    recData.SetUserData({"Name":curPlayer.GetPlayerName(), "AddScore":-defDecScore, "FightPower":fightPower})
    if defDecScore: # 防守方仅变更时更新
        PlayerBillboard.UpdateBillboardByID(tagPlayerID, ShareDefine.Def_BT_Arena, updScore)