From 6b76741f4ea905c4de5997c40b0476bd63fa37b8 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 12 一月 2024 16:27:29 +0800 Subject: [PATCH] 10019 【砍树】回合战斗(增加伤血统计、奖励结算及通知;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 61 ++++++++++++++++++++++++++---- 1 files changed, 53 insertions(+), 8 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py index ad2a386..1cdcb8c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py +++ b/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 -- Gitblit v1.8.0