| | |
| | | import PetControl |
| | | import SkillShell |
| | | import BuffSkill |
| | | import FBCommon |
| | | import ItemControler |
| | | |
| | | ( |
| | | FightState_Start, |
| | |
| | | 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 |
| | | # |
| | |
| | | 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 |
| | |
| | | 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): |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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() |
| | |
| | | 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 |
| | |
| | | clientPack.State = state |
| | | clientPack.TurnNum = turnNum |
| | | clientPack.TurnMax = turnMax |
| | | clientPack.Msg = msg |
| | | clientPack.Len = len(clientPack.Msg) |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack) |
| | | return |
| | | |