From 2287e657195a6a77ea58c4984901d6ceb63fe6f7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 12 一月 2024 11:38:31 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(战斗结束处理,重置血量,清除回合buff等)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 68 ++++++++++++++++++++++++++++------
1 files changed, 56 insertions(+), 12 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 4b650a9..ad2a386 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -31,6 +31,7 @@
import GameObj
import PetControl
import SkillShell
+import BuffSkill
(
FightState_Start,
@@ -171,7 +172,7 @@
for obj in fightObjList:
TurnFightObjPerTurnActionnum(turnNum, actionNum, obj, tick)
-
+
objType = gameObj.GetGameObjType()
objID = gameObj.GetID()
SyncTurnFightObjAction(curPlayer, turnNum, objType, objID)
@@ -180,7 +181,7 @@
# 复活时机在自己行动节点
if not DoReborn(gameObj):
continue
-
+
faction = GameObj.GetFaction(gameObj)
objName = GetObjName(gameObj)
curHP = GameObj.GetHP(gameObj)
@@ -202,12 +203,15 @@
if isWin != None:
break
-
+
+ GameWorld.DebugLog("--- 战斗结束处理 ---")
overState = FightState_Win if isWin else FightState_Fail
SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, overState, turnNum, turnMax)
+ # 结算奖励...待扩展
+
for gameObj in fightObjList:
- TurnFightObjOverReset(gameObj)
+ TurnFightObjOverReset(gameObj, tick)
GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
% (mapID, funcLineID, tagPlayerID, isWin, overState), playerID)
@@ -473,22 +477,62 @@
return
-def TurnFightObjOverReset(gameObj):
+def TurnFightObjOverReset(gameObj, tick):
## 回合制战斗实例结束重置
if not gameObj:
return
+
+ objType = gameObj.GetGameObjType()
+
+ #NPC直接回收
+ if objType == IPY_GameWorld.gotNPC:
+ RecycleObj(gameObj)
+ return
+
+ if objType != IPY_GameWorld.gotPlayer:
+ return
+
+ timeline = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline)
+ isDelRefresh = ClearTurnFightBuff(gameObj, timeline, tick)
SetTimeline(gameObj, 0, 0)
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, 0)
GameObj.SetFaction(gameObj, 0)
-
- objType = gameObj.GetGameObjType()
- if objType == IPY_GameWorld.gotPlayer:
- pass
-
- elif objType == IPY_GameWorld.gotNPC:
- RecycleObj(gameObj)
+ GameObj.SetHPFull(gameObj)
+ if isDelRefresh:
+ playerControl = PlayerControl.PlayerControl(gameObj)
+ playerControl.RefreshPlayerAttrByBuff()
return
+def ClearTurnFightBuff(gameObj, timeLine, tick):
+ ## 清除回合制战斗相关buff
+ isDelRefresh = False
+ objType = gameObj.GetGameObjType()
+ objID = gameObj.GetID()
+ for buffType in range(IPY_GameWorld.bfBuff, IPY_GameWorld.btBufMax):
+ if objType != IPY_GameWorld.gotPlayer and buffType in ChConfig.Def_BuffType_OnlyPlayer:
+ continue
+ buffTuple = SkillCommon.GetBuffManagerByBuffType(gameObj, buffType)
+ if buffTuple == ():
+ continue
+ buffState = buffTuple[0]
+ for i in range(0, buffState.GetBuffCount())[::-1]:
+ curBuff = buffState.GetBuff(i)
+ curSkill = curBuff.GetSkill()
+ buffSkillID = curSkill.GetSkillID()
+ if not buffSkillID:
+ continue
+ if curBuff.GetCalcStartTick() > timeLine:
+ # 回合制中产生的buff是以timeline作为CalcStartTick的,所以超过timeline的可视为非回合制buff
+ continue
+ GameWorld.DebugLog(" 删除回合制buff: buffSkillID=%s" % buffSkillID, objID)
+ ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
+ BuffSkill.DoBuffDisApper(gameObj, curBuff, tick)
+ buffState.DeleteBuffByIndex(i)
+ SkillShell.ClearBuffEffectBySkillID(gameObj, buffSkillID, ownerID, ownerType)
+ #删除未知BUFF,刷新属性
+ isDelRefresh = True
+ return isDelRefresh
+
def RecycleObj(gameObj):
## 释放回合制战斗对象
--
Gitblit v1.8.0