hxp
3 天以前 c3bbd3b0263fc6c2127cd9f072f497f46f98758b
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -29,7 +29,6 @@
import GameWorld
import PlayerLLMJ
import PlayerPrestigeSys
import CrossServerPackLogic
import DataRecordPack
import PlayerSuccess
import IpyGameDataPY
@@ -45,6 +44,7 @@
import TurnBuff
import FBCommon
import CommFunc
import CrossMsg
import FBLogic
import random
@@ -436,8 +436,8 @@
                    batObj = batObjMgr.getBatObj(objID)
                    if not batObj:
                        continue
                    if posNum == ChConfig.TFPosNum_Mingge: # 理论上要都同步,但是前端需要同步修改,等前端要改时再同步
                        continue
                    #if posNum == ChConfig.TFPosNum_Mingge: # 理论上要都同步,但是前端需要同步修改,等前端要改时再同步
                    #    continue
                    tfObj = ChPyNetSendPack.tagSCTurnFightObj()
                    tfObj.ObjID = batObj.GetID()
                    tfObj.NPCID = batObj.GetNPCID()
@@ -692,7 +692,7 @@
    mgSkillLVDict = olPlayer.GetCalcSpecInfo(ChConfig.Def_CalcAttr_Mingge, mgPresetID)
    mgSkillIDList = []
    for skillTypeID, skillLV in mgSkillLVDict.items():
        skillID = skillTypeID + skillLV - 1
        skillID = SkillCommon.GetSkillIDBySkillTypeID(skillTypeID, skillLV)
        if skillID not in mgSkillIDList:
            mgSkillIDList.append(skillID)
    #shapeType = 0
@@ -855,7 +855,16 @@
    reModelID = lineupIpyData.GetReModelID()
    lvReIpyData = None
    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
    npcStronger = IpyGameDataPY.GetIpyGameDataNotLog("NPCStronger", npcID)
    npcStronger = None
    npcStrongerList = IpyGameDataPY.GetIpyGameDataListNotLog("NPCStronger", npcID)
    if npcStrongerList and strongerLV:
        for strongerData in npcStrongerList:
            if not strongerData.GetNPCLV() or strongerLV <= strongerData.GetNPCLV():
                npcStronger = strongerData
                break
        if not npcStronger:
            npcStronger = npcStrongerList[-1] # 找不到时取最后一条
    if npcStronger and strongerLV:
        lvReIpyData = IpyGameDataPY.GetIpyGameData("LVReValue", reModelID, strongerLV)
        if lvReIpyData:
@@ -1279,17 +1288,17 @@
            isMultiMap = True
            
    if isMultiMap:
        CrossServerPackLogic.SendBattleRequest(reqInfo, guid, mapID, funcLineID, reqPlayerID)
        CrossMsg.SendBattleRequest(reqInfo, guid, mapID, funcLineID, reqPlayerID)
    else:
        SSMsg_BattleRequest(reqInfo, fromServerID)
        S2B_BattleRequest(reqInfo, fromServerID)
    return
def SSMsg_BattleRequest(reqInfo, fromServerID, msgType=""):
def S2B_BattleRequest(reqInfo, fromServerID, msgType=""):
    ## 请求执行战斗,由本地图或其他服务器地图分配过来的战斗请求
    guid, mapID, funcLineID, lineupDictA, lineupDictB, reqPlayerID, playerServerID, npcLineupIDList, strongerLV, difficulty, reqData = reqInfo
    if msgType:
        GameWorld.Log("OnServerReceiveMsg => %s, fromServerID=%s,funcMapID=%s,funcLineID=%s,%s,%s"
                      % (msgType, fromServerID, mapID, funcLineID, guid, time.time()), reqPlayerID)
    #if msgType:
    #    GameWorld.Log("OnServerReceiveMsg => %s, fromServerID=%s,funcMapID=%s,funcLineID=%s,%s,%s"
    #                  % (msgType, fromServerID, mapID, funcLineID, guid, time.time()), reqPlayerID)
        
    if npcLineupIDList:
        turnFight = DoTurnFightPVE(guid, mapID, funcLineID, reqPlayerID, playerServerID, lineupDictA, npcLineupIDList, strongerLV, difficulty)
@@ -1308,20 +1317,20 @@
    
    # 本地图自己处理的
    if fromServerID == GameWorld.GetGameWorld().GetServerID():
        SSMsg_BattleResult(retInfo, fromServerID)
        B2S_BattleResult(retInfo, fromServerID)
        
    # 其他服务器地图请求的,发送战斗结果回去
    else:
        CrossServerPackLogic.SendBattleResult(retInfo, fromServerID, guid, mapID, funcLineID, reqPlayerID)
        CrossMsg.SendBattleResult(retInfo, fromServerID, guid, mapID, funcLineID, reqPlayerID)
    return
def SSMsg_BattleResult(retInfo, fromServerID, msgType=""):
def B2S_BattleResult(retInfo, fromServerID, msgType=""):
    ## 收到战斗结果信息
    
    guid, mapID, funcLineID, reqPlayerID, winFaction, statMsg, dateStr, reqData = retInfo
    if msgType:
        GameWorld.Log("OnServerReceiveMsg => %s, fromServerID=%s,funcMapID=%s,funcLineID=%s,%s,%s"
                      % (msgType, fromServerID, mapID, funcLineID, guid, time.time()), reqPlayerID)
    #if msgType:
    #    GameWorld.Log("OnServerReceiveMsg => %s, fromServerID=%s,funcMapID=%s,funcLineID=%s,%s,%s"
    #                  % (msgType, fromServerID, mapID, funcLineID, guid, time.time()), reqPlayerID)
        
    curPlayer = None
    if reqPlayerID:
@@ -2197,23 +2206,25 @@
    heroCount = 0
    batObjMgr = BattleObj.GetBatObjMgr()
    statInfo = {}
    drLineupInfo = {}
    drHeroIDDict = {}
    for faction in turnFight.factionDict.keys():
        if str(faction) not in statInfo:
            statInfo[str(faction)] = {}
        facStatInfo = statInfo[str(faction)]
        if str(faction) not in drLineupInfo:
            drLineupInfo[str(faction)] = {}
        facDRLineupInfo = drLineupInfo[str(faction)]
        if str(faction) not in drHeroIDDict:
            drHeroIDDict[str(faction)] = {}
        facDRHeroIDDict = drHeroIDDict[str(faction)]
        batFaction = turnFight.getBatFaction(faction)
        batFaction.totalHurt = 0
        for num in batFaction.lineupDict.keys():
            if str(num) not in facStatInfo:
                facStatInfo[str(num)] = {}
            lineupStatInfo = facStatInfo[str(num)]
            if str(num) not in facDRHeroIDDict:
                facDRHeroIDDict[str(num)] = {}
            posHeroIDDict = facDRHeroIDDict[str(num)]
            batLineup = batFaction.getBatlineup(num)
            batLineup.totalHurt = 0
            facDRLineupInfo[str(num)] = batLineup.lineupInfo
            GameWorld.DebugLogEx("阵容明细: faction=%s,num=%s", faction, num)
            for posNum, objID in batLineup.getPosObjIDDict().items():
                if posNum == ChConfig.TFPosNum_Mingge:
@@ -2233,6 +2244,7 @@
                dead = 0 if batObj.IsAlive() else 1
                if heroID:
                    heroCount += 1
                    posHeroIDDict[str(posNum)] = heroID
                GameWorld.DebugLogEx("    Pos:%s ID=%s,npcID=%s,heroID=%s,HP=%s/%s, 输出=%s,承伤=%s,治疗=%s", 
                                     posNum, objID, npcID, heroID, batObj.GetHP(), batObj.GetMaxHP(), atkHurt, defHurt, cureHP)
                lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP, 
@@ -2247,7 +2259,7 @@
    # 流向记录
    if mapID != ChConfig.Def_FBMapID_Main and reqPlayerID:
        DataRecordPack.DR_FightStat(reqPlayerID, mapID, funcLineID, turnFight.isWin, turnFight.turnNum, turnFight.turnMax, 
                                    heroCount, turnFight.costTime, statInfo, drLineupInfo, guid)
                                    heroCount, turnFight.costTime, drHeroIDDict, guid)
    return
#// B4 14 查看战报 #tagCSTurnFightReportView