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/NPC/NPCCommon.py | 37 +++++++++++++++++++++++-------------- 1 files changed, 23 insertions(+), 14 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py index 44956ba..76bfdd2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -2268,7 +2268,7 @@ # @param aiType: AI类型 # @return 如果召唤失败返回None 否则返回召唤的NPC的实例 # @remarks 在地图里召唤NPC 根据NPCID 出生点 AI类型 和TICK -def SummonMapNpc(npcId, rebornX, rebornY, aiType=0, lastTime=0, playerID=0, sightLevel=0, refreshID=0, pvpPlayerID=0): +def SummonMapNpc(npcId, rebornX, rebornY, aiType=0, lastTime=0, playerID=0, sightLevel=0, refreshID=0, mirrorPlayerID=0): npcData = GameWorld.GetGameData().FindNPCDataByID(npcId) if not npcData: GameWorld.ErrLog("找不到该NPCID: %s" % npcId) @@ -2300,8 +2300,8 @@ if curSummon.GetType() == ChConfig.ntRobot: __OnFBRobotReborn(curSummon, curSummon.GetLV()) - if curSummon.GetType() == ChConfig.ntPVP and pvpPlayerID: - curSummon.SetDict(ChConfig.Def_NPC_Dict_PVPPlayerID, pvpPlayerID) + if mirrorPlayerID: + curSummon.SetDict(ChConfig.Def_NPC_Dict_MirrorPlayerID, mirrorPlayerID) curSummon.Reborn(rebornX, rebornY, False) NPCControl(curSummon).DoNPCRebornCommLogic(tick) @@ -2506,8 +2506,8 @@ if summonPlayerID > 0: curNPC.SetDict(ChConfig.Def_NPC_Dict_SummonMapNPCPlayerID, 0) - if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PVPPlayerID): - curNPC.SetDict(ChConfig.Def_NPC_Dict_PVPPlayerID, 0) + if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID): + curNPC.SetDict(ChConfig.Def_NPC_Dict_MirrorPlayerID, 0) refreshObj = NPCRealmRefresh.GetTagNPCRefresh(curNPC) if refreshObj: @@ -4125,9 +4125,9 @@ if PetControl.RefurbishPetAttr(curNPC): return - pvpPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PVPPlayerID) - if pvpPlayerID: - self.SetPVPNPCPlayerAttr(pvpPlayerID) + mirrorPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) + if mirrorPlayerID: + self.SetMirrorPlayerNPCAttr(mirrorPlayerID, isReborn) else: DoNPCAttrStrengthen(curNPC, isReborn) @@ -4142,8 +4142,9 @@ return - def SetPVPNPCPlayerAttr(self, pvpPlayerID): - PropDict, PlusDict = PlayerViewCacheTube.GetPlayerPropPlusDictByID(pvpPlayerID) + def SetMirrorPlayerNPCAttr(self, mirrorPlayerID, isReborn): + ## 设置镜像玩家NPC属性 + PropDict, PlusDict = PlayerViewCacheTube.GetPlayerPropPlusDictByID(mirrorPlayerID) if not PropDict: return curNPC = self.__Instance @@ -4166,18 +4167,26 @@ GameObj.SetAtkBackDefRate(curNPC, PropDict.get("AtkBackDefRate", 0)) GameObj.SetSuckHPPer(curNPC, PropDict.get("SuckHPPer", 0)) GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0)) - + + if not isReborn: + return + skillManager = curNPC.GetSkillManager() SkillInfo = PlusDict.get("SkillInfo", {}) for _, skillLVDict in SkillInfo.items(): for skillID, _ in skillLVDict.items(): + skillID = GameWorld.ToIntDef(skillID) + skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID) + if not skillData: + continue skillManager.LearnSkillByID(skillID) - GameWorld.DebugLog("SetPVPNPCPlayerAttr: objID=%s,NPCID=%s,pvpPlayerID=%s,maxHP=%s,SkillInfo=%s" - % (curNPC.GetID(), curNPC.GetNPCID(), pvpPlayerID, GameObj.GetMaxHP(curNPC), SkillInfo)) + learnSkillIDList = [] for index in range(0, skillManager.GetSkillCount()): useSkill = skillManager.GetSkillByIndex(index) - GameWorld.DebugLog(" NPC SkillID=%s" % useSkill.GetSkillID()) + learnSkillIDList.append(useSkill.GetSkillID()) + GameWorld.DebugLog("设置镜像玩家: objID=%s,NPCID=%s,mirrorPlayerID=%s,maxHP=%s,learnSkillIDList=%s" + % (curNPC.GetID(), curNPC.GetNPCID(), mirrorPlayerID, GameObj.GetMaxHP(curNPC), learnSkillIDList)) return def SetHelpBattleRobotRebornAttr(self, fightPower): -- Gitblit v1.8.0