From d1aa37504456311fe9d7ddc2f23f537c2408b90c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 09 一月 2024 11:06:44 +0800 Subject: [PATCH] 10019 【砍树】回合战斗(灵宠通用;技能通用;玩家镜像支持) 1. 灵宠修改为通用模式,玩家及NPC均可召唤灵宠,NPC对应召唤的灵宠NPC与玩家的灵宠NPCID区分; 2. 技能全部为通用技能,玩家、玩家镜像、NPC均通用;支持玩家镜像赋予玩家技能进行攻击; 3. 技能释放方式8(单体恢复:增加方式6-按目标攻击力恢复血量) 4. 修改玩家技能缓存格式 5. 修复玩家灵宠技能升级bug --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 49 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 76e6386..1a11598 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py @@ -41,6 +41,9 @@ 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) @@ -89,7 +92,7 @@ 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] # 从缓存中获取 @@ -343,6 +346,8 @@ 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) @@ -468,14 +473,49 @@ 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() @@ -493,10 +533,11 @@ 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 #被动技能无法使用 -- Gitblit v1.8.0