ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
@@ -21,14 +21,17 @@
import ShareDefine
import PlayerControl
import IpyGameDataPY
import PlayerSuccess
import PlayerActivity
import PlayerBillboard
import PlayerViewCache
import PlayerZhanling
import ItemControler
import PlayerBeauty
import PlayerArena
import PlayerGubao
import PyGameData
import PlayerTask
import FBCommon
import ChConfig
@@ -68,21 +71,24 @@
    if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
        return
    
    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAArenaBattle, 1)
    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)
@@ -133,13 +139,29 @@
        if GameWorld.CanHappen(exItemRate):
            awardItemList.append([exItemID, 1])
            GameWorld.DebugLog("红颜概率额外获得1个物品: exItemRate=%s, exItemID=%s, awardItemList=%s" % (exItemRate, exItemID, awardItemList))
    overMsg.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
    awardDict.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
                    FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)})
    
    turnFight.awardData = [tagPlayerID, isWin, atkAddScore, defDecScore, 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
    # 无论胜负,只要挑战都给固定奖励
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Arena", False, {}], isNotifyAward=False)
    __updArenaBatRecord(curPlayer, tagPlayerID, isWin, atkAddScore, defDecScore)
    PlayerArena.Sync_ArenaInfo(curPlayer)
    # 战斗结束系统强制刷新匹配
    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()
@@ -153,8 +175,9 @@
        winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
        updWinCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt + 1)
        GameWorld.DebugLog("updWinCnt=%s" % (updWinCnt), playerID)
    tagViewCache = turnFight.tagViewCache
    tagViewCache = PlayerViewCache.FindViewCache(tagPlayerID)
    gameRecMgr = DBDataMgr.GetGameRecMgr()
    atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
    recData = atkRecMgr.AddRecData(maxCount)
@@ -162,14 +185,15 @@
    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)
@@ -205,36 +229,8 @@
    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)
    return
def OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, awardData):
    ## 回合战斗结算奖励
    if not curPlayer:
        return
    if not awardData:
        return
    tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList = awardData
    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
    # 无论胜负,只要挑战都给固定奖励
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Arena", False, {}], isNotifyAward=False)
    __updArenaBatRecord(curPlayer, turnFight, tagPlayerID, isWin, atkAddScore, defDecScore)
    PlayerArena.Sync_ArenaInfo(curPlayer)
    # 战斗结束系统强制刷新匹配
    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