| | |
| | | |
| | | def GetObjName(gameObj): |
| | | objName = gameObj.GetName() |
| | | mirrorPlayerID = gameObj.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) |
| | | if mirrorPlayerID: |
| | | 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) |
| | |
| | | tagObj = None |
| | | if tagPlayerID: |
| | | npcID = ChConfig.Def_NPCID_PVP |
| | | tagObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=playerID, pvpPlayerID=tagPlayerID) |
| | | tagObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=playerID, mirrorPlayerID=tagPlayerID) |
| | | if not tagObj: |
| | | return |
| | | PlusData = PlayerViewCacheTube.GetPlayerPropPlusDictByID(playerID)[1] # 从缓存中获取 |
| | |
| | | tagID = tagObj.GetID() |
| | | if curObj.GetGameObjType() == IPY_GameWorld.gotPlayer: |
| | | atkOK = PlayerAttack(curObj, tagObj, tick) |
| | | elif curObj.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID): |
| | | atkOK = PlayerMirrorAttack(curObj, tagObj, tick) |
| | | else: |
| | | atkOK = NPCAttack(curObj, tagObj, tick) |
| | | |
| | |
| | | GameWorld.DebugLog(" %s 技能攻击: curID=%s,tagID=%s,atkOK=%s" % (objName, curObj.GetID(), tagObj.GetID(), atkOK)) |
| | | return atkOK |
| | | |
| | | def PlayerMirrorAttack(playerNPC, tagObj, tick): |
| | | ## 玩家镜像攻击 |
| | | |
| | | playerID = playerNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) |
| | | objName = "● %s" % GetObjName(playerNPC) |
| | | tagObjID = tagObj.GetID() |
| | | |
| | | autoUseSkillTypeIDList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 2, {}) |
| | | |
| | | tagDist = 0 |
| | | skillManager = playerNPC.GetSkillManager() |
| | | for skillTypeID in autoUseSkillTypeIDList: |
| | | curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) |
| | | if not curSkill: |
| | | continue |
| | | skillID = curSkill.GetSkillID() |
| | | |
| | | #被动技能无法使用 |
| | | if SkillCommon.isPassiveSkill(curSkill): |
| | | continue |
| | | #还在冷却时间内无法释放 |
| | | if SkillCommon.RefreshSkillRemainTime(curSkill, tick) != 0: |
| | | continue |
| | | |
| | | if not AICommon.DoNPCUseSkill(playerNPC, tagObj, curSkill, tagDist, tick): |
| | | GameWorld.DebugLog(" %s 技能攻击失败: playerID=%s,tagID=%s,skillID=%s" % (objName, playerID, tagObjID, skillID)) |
| | | continue |
| | | GameWorld.DebugLog(" %s 技能攻击成功: playerID=%s,tagID=%s,skillID=%s" % (objName, playerID, tagObjID, skillID)) |
| | | return skillID |
| | | |
| | | #普通攻击 |
| | | atkOK = BaseAttack.Attack(playerNPC, tagObj, None, tick) |
| | | if atkOK: |
| | | GameWorld.DebugLog(" %s 普通攻击: curID=%s,tagID=%s,atkOK=%s" % (objName, playerID, tagObjID, atkOK)) |
| | | else: |
| | | GameWorld.DebugLog(" %s 攻击失败: curID=%s,tagID=%s,atkOK=%s" % (objName, playerID, tagObjID, atkOK)) |
| | | |
| | | return atkOK |
| | | |
| | | def PlayerAttack(curPlayer, tagObj, tick): |
| | | ## 玩家攻击, 参考技能使用 #def UseSkillEx(index, clientData, tick): |
| | | playerID = curPlayer.GetPlayerID() |
| | | job = curPlayer.GetJob() |
| | | jobAutoUseSkillDict = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 2, {}) |
| | | if job not in jobAutoUseSkillDict: |
| | | return |
| | | skillList = jobAutoUseSkillDict[job] |
| | | autoUseSkillTypeIDList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 2, {}) |
| | | |
| | | posX, posY = tagPosX, tagPosY = curPlayer.GetPosX(), curPlayer.GetPosY() |
| | | tagObjType, tagObjID = tagObj.GetGameObjType(), tagObj.GetID() |
| | |
| | | |
| | | useSkillResult = False |
| | | skillMgr = curPlayer.GetSkillManager() |
| | | for skillID in skillList: |
| | | curSkill = skillMgr.FindSkillBySkillID(skillID) |
| | | for skillTypeID in autoUseSkillTypeIDList: |
| | | curSkill = skillMgr.FindSkillBySkillTypeID(skillTypeID) |
| | | if not curSkill: |
| | | continue |
| | | skillID = curSkill.GetSkillID() |
| | | |
| | | #CheckSkillCondition |
| | | #被动技能无法使用 |