hxp
2024-01-12 6b76741f4ea905c4de5997c40b0476bd63fa37b8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -32,6 +32,8 @@
import PetControl
import SkillShell
import BuffSkill
import FBCommon
import ItemControler
(
FightState_Start,
@@ -52,7 +54,8 @@
        objName = "%s[%s]" % (objName, mirrorPlayerID)
    faction = GameObj.GetFaction(gameObj)
    fightPlaceNum = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_FightPetPlaceNum)
    return "%s%s %s" % ("A" if faction == 1 else "B", fightPlaceNum, objName)
    curID = gameObj.GetNPCID() if gameObj.GetGameObjType() == IPY_GameWorld.gotNPC else ""
    return "%s%s %s%s" % ("A" if faction == 1 else "B", fightPlaceNum, objName, curID)
#// B4 10 回合制战斗 #tagCMTurnFight
#
@@ -94,7 +97,8 @@
def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick):
    playerID = curPlayer.GetPlayerID()
    posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
    GameWorld.DebugLog("===== 执行回合制战斗: mapID=%s,funcLineID=%s,tagPlayerID=%s" % (mapID, funcLineID, tagPlayerID), playerID)
    GameWorld.DebugLog("===== 执行回合制战斗: mapID=%s,funcLineID=%s,playerID=%s,tagPlayerID=%s" % (mapID, funcLineID, playerID, tagPlayerID))
    ipyData = None
    tagObj = None
    if tagPlayerID:
        npcID = ChConfig.Def_NPCID_PVP
@@ -205,16 +209,42 @@
            break
                
    GameWorld.DebugLog("--- 战斗结束处理 ---")
    overState = FightState_Win if isWin else FightState_Fail
    SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, overState, turnNum, turnMax)
    # 统计总伤害
    factionTotalHurtDict = {}
    for gameObj in fightObjList:
        if not gameObj:
            continue
        faction = GameObj.GetFaction(gameObj)
        objName = GetObjName(gameObj)
        objID = gameObj.GetID()
        totalHurtEx = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurtEx) * ChConfig.Def_PerPointValue
        totalHurt = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx
        factionTotalHurtDict[faction] = factionTotalHurtDict.get(faction, 0) + totalHurt
        GameWorld.DebugLog("%s objID=%s,faction=%s, 总输出: %s" % (objName, objID, faction, totalHurt))
    for faction, totalHurt in factionTotalHurtDict.items():
        GameWorld.DebugLog("faction=%s, 阵营总输出: %s" % (faction, totalHurt))
    GameWorld.DebugLog("玩家剩余血量: %s / %s" % (GameObj.GetHP(curPlayer), GameObj.GetMaxHP(curPlayer)))
    GameWorld.DebugLog("对方剩余血量: %s / %s" % (GameObj.GetHP(tagObj), GameObj.GetMaxHP(tagObj)))
    
    # 结算奖励...待扩展
    awardItemList = []
    if isWin and ipyData:
        # 山寨测试先默认都是首次奖励,正式后需删除
        awardItemList = ipyData.GetAwardItemListFirst()
    GameWorld.DebugLog("奖励物品: %s" % awardItemList)
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
    overMsg = {"itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
    overState = FightState_Win if isWin else FightState_Fail
    SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, overState, turnNum, turnMax, str(overMsg))
    
    for gameObj in fightObjList:
        TurnFightObjOverReset(gameObj, tick)
        
    GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
                       % (mapID, funcLineID, tagPlayerID, isWin, overState), playerID)
    GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,playerID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
                       % (mapID, funcLineID, playerID, tagPlayerID, isWin, overState))
    return
def CheckIswin(curPlayer, tagObj):
@@ -364,6 +394,8 @@
    isMainRole = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightMainRole)
    gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightID, playerID)
    gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnRebornCount, 0)
    gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, 0)
    gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, 0)
    SetTimeline(gameObj, 1, 0)
    GameObj.SetFaction(gameObj, faction)
    GameObj.SetHPFull(gameObj)
@@ -524,7 +556,7 @@
            if curBuff.GetCalcStartTick() > timeLine:
                # 回合制中产生的buff是以timeline作为CalcStartTick的,所以超过timeline的可视为非回合制buff
                continue
            GameWorld.DebugLog("    删除回合制buff: buffSkillID=%s" % buffSkillID, objID)
            GameWorld.DebugLog("    删除回合制buff: objID=%s,buffSkillID=%s" % (objID, buffSkillID))
            ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
            BuffSkill.DoBuffDisApper(gameObj, curBuff, tick)
            buffState.DeleteBuffByIndex(i)
@@ -551,6 +583,17 @@
    NPCCommon.SetDeadEx(gameObj)
    return
def AddTurnObjHurtValue(curObj, tagObj, hurtType, hurtValue, curSkill=None):
    if not curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
        return
    skillID = curSkill.GetSkillID() if curSkill else 0
    totalHurtEx = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurtEx) * ChConfig.Def_PerPointValue
    totalHurt = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx + hurtValue
    curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, totalHurt % ChConfig.Def_PerPointValue)
    curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, totalHurt / ChConfig.Def_PerPointValue)
    GameWorld.DebugLog("        伤血: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s"
                       % (curObj.GetID(), tagObj.GetID(), skillID, hurtType, hurtValue, totalHurt))
    return
def DoAttack(curObj, tagObj, tick):
    curID = curObj.GetID()
@@ -780,7 +823,7 @@
            GameWorld.DebugLog("        %s 攻击失败: curID=%s,tagID=%s,atkOK=%s" % (objName, playerID, tagObjID, atkOK))
    return useSkillResult
def SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, state, turnNum=0, turnMax=0):
def SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, state, turnNum=0, turnMax=0, msg=""):
    clientPack = ChPyNetSendPack.tagMCTurnFightState()
    clientPack.Clear()
    clientPack.MapID = mapID
@@ -789,6 +832,8 @@
    clientPack.State = state
    clientPack.TurnNum = turnNum
    clientPack.TurnMax = turnMax
    clientPack.Msg = msg
    clientPack.Len = len(clientPack.Msg)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return