| | |
| | | self.beautyObjIDDict = {} # 红颜战斗单位 {位置编号:batObjID, ...}
|
| | | self.actionNum = ActionNumStart # 行动位置,从1开始
|
| | | self.totalHurt = 0 # 阵容总输出
|
| | | |
| | | #特殊
|
| | | self.bossID = 0
|
| | | self.bossPosView = 0
|
| | | return
|
| | |
|
| | | def getPlayerID(self): return self.turnFight.playerID # 发起的玩家ID
|
| | |
| | | self.ownerID = lineupInfo.get("PlayerID", 0) # 阵容所属的玩家ID
|
| | | self.shapeType = lineupInfo.get("ShapeType", 0)
|
| | | self.fightPower = lineupInfo.get("FightPower", 0)
|
| | | self.bossID = lineupInfo.get("BossID", 0)
|
| | | self.bossPosView = lineupInfo.get("BossPosView", 0)
|
| | | SummonLineupObjs(self, self.faction, self.num, lineupInfo, self.getPlayerID())
|
| | | return
|
| | |
|
| | |
| | | self.isNeedReport = isNeedReport # 是否需要战报
|
| | | self.msgDict = {} # 扩展信息字典,一般由MapID绑定的功能决定信息内容 {k:v, ...}
|
| | | self._kvDict = {} # 自定义信息字典,不会被重置 {k:v, ...}
|
| | | self.awardData = None # 战斗奖励设置的数据,可以是任意数据格式,由功能自行决定,会传递给 OnTurnFightAward 处理
|
| | |
|
| | | self.factionDict = {} # 战斗阵营 {faction:BatFaction, ...},一般是只有两个阵营,faction为1或2,每个阵营支持多个阵容
|
| | | self.actionSortList = [] # 阵容行动顺序 [[faction, num], ...]
|
| | |
| | | self.setPVP()
|
| | | self.msgDict = {}
|
| | | self._kvDict = {}
|
| | | self.awardData = None
|
| | | self.nextTurnFight(msgDict)
|
| | | return
|
| | |
|
| | |
| | | tfObj.MaxHP = batObj.GetMaxHP() % ChConfig.Def_PerPointValue
|
| | | tfObj.MaxHPEx = batObj.GetMaxHP() / ChConfig.Def_PerPointValue
|
| | | tfObj.LV = batObj.GetLV()
|
| | | tfObj.PosNum = posNum
|
| | | if batLineup.bossPosView and batLineup.bossID == batObj.GetNPCID():
|
| | | tfObj.PosNum = batLineup.bossPosView
|
| | | else:
|
| | | tfObj.PosNum = posNum |
| | | tfObj.AngreXP = batObj.GetXP()
|
| | | tfLineup.ObjList.append(tfObj)
|
| | | tfLineup.ObjCnt = len(tfLineup.ObjList)
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("NPCLineup", lineupID)
|
| | | if not ipyData:
|
| | | return {}
|
| | | bossID = ipyData.GetBossID()
|
| | | bossPosView = ipyData.GetBossPosView()
|
| | |
|
| | | heroDict = {}
|
| | | for posNum in range(1, 1 + 10):
|
| | | for posNum in range(1, 1 + 6):
|
| | | if not hasattr(ipyData, "GetPosNPCID%s" % posNum):
|
| | | break
|
| | | npcID = getattr(ipyData, "GetPosNPCID%s" % posNum)()
|
| | |
| | | continue
|
| | | heroDict[str(posNum)] = battleDict
|
| | |
|
| | | lineupInfo = {"NPCLineupID":lineupID, "Hero":heroDict}
|
| | | lineupInfo = {"NPCLineupID":lineupID, "Hero":heroDict, "BossID":bossID, "BossPosView":bossPosView}
|
| | | return lineupInfo
|
| | |
|
| | | def GetNPCBattleDict(lineupIpyData, npcID, strongerLV=0, difficulty=0):
|
| | |
| | |
|
| | | batLineup.posObjIDDict[posNum] = objID
|
| | | GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
|
| | | ResetObjSkill(batObj)
|
| | | |
| | | if npcID:
|
| | | #副本指定NPC属性
|
| | | fbNPCInitAttrDict = FBLogic.GetFBNPCInitAttr(curPlayer, turnFight, batObj)
|
| | |
| | | buffMgr.ClearBuff()
|
| | |
|
| | | # 重置技能
|
| | | batObj.ResetSkillUseCnt()
|
| | | ResetObjSkillCD(batObj)
|
| | | ResetObjSkill(batObj)
|
| | |
|
| | | # 重刷属性、被动
|
| | | TurnBuff.RefreshBuffAttr(batObj)
|
| | |
| | |
|
| | | PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
|
| | | SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
|
| | | FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
|
| | | tfMgr.delTurnFight(guid)
|
| | | return True
|
| | |
|
| | |
| | |
|
| | | PlayerOnline.GetOnlinePlayer(curPlayer).SetLastBatBuffer(guid, turnFight.batBuffer)
|
| | | SyncTurnFightReport(curPlayer, guid, turnFight.batBuffer)
|
| | | FBLogic.OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, turnFight.awardData)
|
| | | tfMgr.delTurnFight(guid)
|
| | | return True
|
| | |
|
| | |
| | |
|
| | | turnFight.ResetOneActionUseSkillCnt()
|
| | | batObj.SetTiming(ChConfig.TurnTiming_Before) # 重置时机到回合前
|
| | | RefreshObjSkillByTurn(batObj) # 优先刷技能CD
|
| | | |
| | | if turnNum > 1: # 第1回合不用刷新技能
|
| | | RefreshObjSkillByTurn(batObj)
|
| | | |
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
|
| | |
|
| | | return
|
| | |
| | | RefreshObjBuffTime(turnFight, batObj)
|
| | | return
|
| | |
|
| | | def ResetObjSkillCD(batObj):
|
| | | ## 重置所有技能CD
|
| | | def ResetObjSkill(batObj):
|
| | | ## 重置所有技能,一般是每场战斗开始的重置
|
| | | curID = batObj.GetID()
|
| | | batObj.ResetSkillUseCnt() # 使用次数
|
| | | skillManager = batObj.GetSkillManager()
|
| | | for index in range(0, skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(index)
|
| | | if not curSkill:
|
| | | continue
|
| | | remainTime = curSkill.GetRemainTime()
|
| | | if remainTime <= 0:
|
| | | continue
|
| | | curSkill.SetRemainTime(0)
|
| | | skillID = curSkill.GetSkillID()
|
| | | initCD = curSkill.GetCoolDownInit()
|
| | | if initCD:
|
| | | curSkill.SetRemainTime(initCD)
|
| | | GameWorld.DebugLog("技能初始CD: curID=%s,skillID=%s,initCD=%s" % (curID, skillID, initCD))
|
| | | elif curSkill.GetRemainTime():
|
| | | curSkill.SetRemainTime(0)
|
| | | curSkill.SetEnergy(0)
|
| | | |
| | | return
|
| | |
|
| | | def RefreshObjSkillByTurn(batObj):
|
| | | '''按回合刷新技能:默认以大回合统一减1回合,使用技能后设置剩余CD统一默认加1回合,即配置1回合,设置的CD是2
|
| | | '''按回合刷新技能:默认以大回合统一减1回合
|
| | | '''
|
| | | curID = batObj.GetID()
|
| | | skillManager = batObj.GetSkillManager()
|
| | |
| | | continue
|
| | | skillID = curSkill.GetSkillID()
|
| | | preTurnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
|
| | | batObj.ResetSkillTurnUseCnt() # 重置回合使用次数
|
| | | remainTime = curSkill.GetRemainTime()
|
| | | if remainTime <= 0:
|
| | | continue
|
| | |
| | | curSkill.SetRemainTime(remainTime)
|
| | | GameWorld.DebugLog(" 更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
|
| | |
|
| | | batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
|
| | | return
|
| | |
|
| | | def RefreshObjBuffTime(turnFight, batObj):
|