hch
2018-11-26 eba5b922ac7bfbc45ed54054852789c02e97a2e1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py
@@ -18,6 +18,7 @@
import GameWorld
import ChConfig
import PlayerControl
import PlayerBillboard
import ChPyNetSendPack
import NetPackCommon
import PlayerViewCacheTube
@@ -34,8 +35,26 @@
def DoPlayerOnDay(curPlayer):
    checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
    checkInCount = checkInInfo / 10 # 累计登记
    checkInInfo = (checkInCount + 1) * 10 + 0
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
    todayIsCheckIn = checkInInfo % 10 # 今天是否已登记
    if todayIsCheckIn:
        checkInInfo = (checkInCount + 1) * 10 + 0
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
        SyncCheckInState(curPlayer, 0, False)
    return
def DoPlayerLogin(curPlayer):
    checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
    todayIsCheckIn = checkInInfo % 10 # 今天是否已登记
    if todayIsCheckIn:
        SyncCheckInState(curPlayer, 1, True)
    return
def SyncCheckInState(curPlayer, checkInState, isLogin):
    ## 同步登记状态
    checkInPack = ChPyNetSendPack.tagMCHelpBattleCheckInResult()
    checkInPack.IsOK = checkInState
    checkInPack.IsLogin = int(isLogin)
    NetPackCommon.SendFakePack(curPlayer, checkInPack)
    return
def GameServer_FBHelpBattleResult(curPlayer, msgList, tick):
@@ -89,9 +108,7 @@
        if not haveViewCache:
            PlayerViewCacheTube.UpdateGameServerPlayerCache(curPlayer, tick, False)
            
    checkInPack = ChPyNetSendPack.tagMCHelpBattleCheckInResult()
    checkInPack.IsOK = isOK
    NetPackCommon.SendFakePack(curPlayer, checkInPack)
    SyncCheckInState(curPlayer, 1, False)
    
    GameWorld.DebugLog("FBHelpBattleResult: %s,checkInCount=%s,fightPower=%s,isOK=%s,haveViewCache=%s" 
                       % (cmd, checkInCount, fightPower, isOK, haveViewCache), curPlayer.GetPlayerID())
@@ -201,6 +218,9 @@
        GameWorld.Log("召唤助战成功: calledPlayerID=%s,objID=%s,fightPower=%s" % (calledPlayerID, objID, fightPower), playerID)
        gameFB.SetGameFBDict(ChConfig.Def_FB_HelpBattleFBObjID % calledPlayerID, objID)
        calledCount += 1
        # 设置助战属性
        npcControl = NPCCommon.NPCControl(helpBattleNPC)
        npcControl.SetHelpBattleRobotRebornAttr(fightPower)
        __DoGiveHelpBattleRobotSkill(helpBattleNPC, jobSkillDict, job, npcLV)
        
        # 通知前端召唤成功
@@ -251,7 +271,7 @@
    SendGameServer_RefreshHelpBattlePlayer(curPlayer, isClientRefresh=True)
    return
def SendGameServer_RefreshHelpBattlePlayer(curPlayer, mapID=0, funcLineID=0, isClientRefresh=True):
def SendGameServer_RefreshHelpBattlePlayer(curPlayer, mapID=0, funcLineID=0, isClientRefresh=False):
    ## 发送GameServer请求刷新助战玩家列表
    if not mapID:
        mapID = FBCommon.GetRecordMapID(curPlayer.GetMapID())
@@ -294,6 +314,9 @@
    # 非客户端刷新的视为重新开始,重置刷新次数 
    else:
        gameFB.SetPlayerGameFBDict(playerID, ChConfig.FBPD_HelpBattleRefreshCount, 0)
        gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBFightPower, ipyData.GetFightPowerMin())
        gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBBaseHurt, ipyData.GetRobotBaseHurt())
        GameWorld.DebugLog("设置副本战力=%s,保底伤害=%s" % (ipyData.GetFightPowerMin(), ipyData.GetRobotBaseHurt()))
        
    msgInfo = str(["Refresh", mapID, funcLineID, isClientRefresh, costMoneyList, calledPlayerIDDict])
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FBHelpBattle", msgInfo, len(msgInfo))
@@ -345,6 +368,7 @@
    return
def __OnHelpBattleRecord(curPlayer, msgList, tick):
    ## 助战记录同步
    cmd, helpRecordList = msgList
    playerID = curPlayer.GetPlayerID()
    GameWorld.DebugLog("__OnHelpBattleRecord %s,helpRecordList=%s" % (cmd, helpRecordList), playerID)
@@ -353,6 +377,7 @@
    addXianyuanCoinTotalTotay = 0 # 累计需要增加的今日仙缘币
    drList = []
    
    totalHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleTotalCount)
    recordPack = ChPyNetSendPack.tagMCHelpBattleRecordList()
    recordPack.RecordList = []
    for recordInfo in helpRecordList:
@@ -376,16 +401,22 @@
        addXianyuanCoinTotal += xianyuanCoinAdd
        if isSameDay:
            addXianyuanCoinTotalTotay += xianyuanCoinAdd
        totalHelpCount += 1
    recordPack.RecordCount = len(recordPack.RecordList)
    NetPackCommon.SendFakePack(curPlayer, recordPack)
    
    addDataDict = {"HelpList":drList}
    GameWorld.DebugLog("    addXianyuanCoinTotal=%s,addXianyuanCoinTotalTotay=%s" % (addXianyuanCoinTotal, addXianyuanCoinTotalTotay), playerID)
    GameWorld.DebugLog("    addXianyuanCoinTotal=%s,addXianyuanCoinTotalTotay=%s,totalHelpCount=%s"
                       % (addXianyuanCoinTotal, addXianyuanCoinTotalTotay, totalHelpCount), playerID)
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, addXianyuanCoinTotal, addDataDict=addDataDict, isSysHint=False)
    if addXianyuanCoinTotalTotay:
        PlayerControl.AddTodayXianyuanCoin(curPlayer, addXianyuanCoinTotalTotay)
    # 更新总助战次数,更新排行榜
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleTotalCount, totalHelpCount)
    if totalHelpCount >= IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 4):
        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
    return
def DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID):
@@ -425,14 +456,34 @@
    coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
    
    GameWorld.DebugLog("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID)
    addDataDict = {"MapID":mapID, "FuncLineID":lineID}
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
    PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
    if coinAddReal:
        addDataDict = {"MapID":mapID, "FuncLineID":lineID}
        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
        PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
    # 通知自己获得仙缘币
    Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal)
    return
def DoTeamFBAddXianyuanCoin(curPlayer, mapID, lineID, callPlayerID, callPlayerName, relation):
    ## 挑战组队副本增加仙缘币
    return
def Sync_AddXianyuanCoinMsg(curPlayer, mapID, funcLineID, addXianyuanCoin, callPlayerID=0, callPlayerName=""):
    '''同步自己主动战斗获得仙缘币信息
    1. 主动发起通关镜像助战副本,此时 callPlayerID 及 name 为空
    2. 参与通关真实助战的副本,次数如果自己是助战的,则 callPlayer 及 name 有值
    @param addXianyuanCoin: 增加的仙缘币,可能为0,代表已达本日上限,但是前端扔需要展示记录
    @param callPlayerID: 助战别人时,对方玩家的playerID
    @param callPlayerName: 助战别人时,对方玩家的名字
    '''
    msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg()
    msgPack.MapID = mapID
    msgPack.FuncLineID = funcLineID
    msgPack.XianyuanCoinAdd = addXianyuanCoin
    msgPack.CallPlayerID = callPlayerID
    msgPack.CallPlayerName = callPlayerName
    msgPack.NameLen = len(msgPack.CallPlayerName)
    NetPackCommon.SendFakePack(curPlayer, msgPack)
    return