From fff7319fd0fb06d03364c5be64edc5bc22e1fe3f Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 28 八月 2025 18:04:18 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(NPC支持成长属性;NPC支持关联武将;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 113 -------------------------------------------------------- 1 files changed, 0 insertions(+), 113 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 11a06b4..747a68f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -145,119 +145,6 @@ def GetNPCSeries(curNPC): return curNPC.GetPoisionDef() # 毒防字段代表NPC系,按二进制位区分 def DoNPCAttrStrengthen(curNPC, isReborn, isDyn=False): - '''NPC属性增强, NPC属性成长由两个因素决定 - 1.NPC成长等级,成长等级决定成长属性,与成长表结合使用 - 可设置地图NPC等级动态成长,但是已经刷新出来的NPC等级不变,动态等级变更后刷新的NPC等级才会使用最新等级 - - 2.玩家人数因素,决定NPC属性的额外成长系数,可单独使用,或者和1一起使用 - 可设置马上刷新NPC属性 - 除血量外,其他属性会根据动态因素直接变更 - 血量会根据血量百分比动态变更至相应的百分比 - ''' - npcID = curNPC.GetNPCID() - strengthenIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCStrengthen", npcID) - if not strengthenIpyData: - #GameWorld.DebugLog("该NPC属性不成长!npcID=%s" % npcID) - return - - strengthenLV = 0 - strengthenPlayerCnt = 0 - - gameFB = GameWorld.GetGameFB() - - if strengthenIpyData.GetIsStrengthenByPlayerCount(): - strengthenPlayerCnt = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenPlayerCnt) - if not strengthenPlayerCnt: - GameWorld.ErrLog("NPC配置了按玩家人数成长类型,但是无法获取到对应的玩家人数!npcID=%s" % (npcID)) - return - - lvStrengthenType = strengthenIpyData.GetLVStrengthenType() - # 根据世界等级 - if lvStrengthenType == 3: - strengthenLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) - # 根据最大等级 - elif lvStrengthenType == 2: - strengthenLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenMaxLV) - # 根据平均等级 - elif lvStrengthenType == 1: - strengthenLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenAverageLV) - # 根据按成长等级的上下限随机 - elif lvStrengthenType == 4: - randMinLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenMinLV) - randMaxLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenMaxLV) - strengthenLV = random.randint(randMinLV, randMaxLV) - # 根据境界难度 - elif lvStrengthenType == 5: - realmLV = PlayerControl.GetDifficultyRealmLV(curNPC.GetSightLevel()) - realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, realmLV) - if realmNPCIpyData: - strengthenLV = realmNPCIpyData.GetLV() - else: - lvStrengthenType = 0 - - # 木桩怪最大、平均成长等级处理,直接取归属玩家等级 - if lvStrengthenType in [1, 2] and curNPC.GetType() in [ChConfig.ntPriWoodPilePVE, ChConfig.ntPriWoodPilePVP]: - owner = None - summonPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PriWoodPilePlayerID) - if summonPlayerID: - owner = GameWorld.GetObj(summonPlayerID, IPY_GameWorld.gotPlayer) - if owner: - strengthenLV = owner.GetLV() - - if strengthenIpyData.GetCmpNPCBaseLV(): - strengthenLV = max(strengthenLV, curNPC.GetLV()) - - if lvStrengthenType in [1, 2] and not strengthenLV: - GameWorld.ErrLog("NPC配置了成长等级类型,但是无法获取到对应的成长等级值!npcID=%s,lvStrengthenType=%s" % (npcID, lvStrengthenType)) - return - - # 副本特殊指定 - npcFBAttrDict = FBLogic.GetFBNPCStrengthenAttr(curNPC, isReborn) - if "LV" in npcFBAttrDict: - strengthenLV = npcFBAttrDict["LV"] - - attrDict = {} #GetNPCStrengthenAttrDict(npcID, strengthenLV, strengthenPlayerCnt, strengthenIpyData) - attrDict.update(npcFBAttrDict) # 如果副本有指定属性,则以副本为主 - if not attrDict: - return - - # 成长等级只在重生的时候设置一次 - if isReborn and curNPC.GetCurLV() != strengthenLV: - curNPC.SetCurLV(strengthenLV, False) # 重生的不通知等级变更,属性成长刷新后由NPC出现包通知 - - befMaxHP = GameObj.GetMaxHP(curNPC) - befHP = GameObj.GetHP(curNPC) - #GameWorld.DebugLog("NPC属性成长刷新,isReborn=%s,npcID=%s,LV=%s,curLV=%s,befMaxHP=%s,befHP=%s,attrDict=%s" - # % (isReborn, npcID, curNPC.GetLV(), curNPC.GetCurLV(), befMaxHP, befHP, attrDict)) - for attrKey, strengthenValue in attrDict.items(): - if not hasattr(curNPC, "Set%s" % attrKey): - if attrKey == "FightPower": - SetSuppressFightPower(curNPC, strengthenValue) - continue - - if attrKey == "MaxHP": - GameObj.SetMaxHP(curNPC, strengthenValue) - else: - strengthenValue = min(strengthenValue, ChConfig.Def_UpperLimit_DWord) - getattr(curNPC, "Set%s" % attrKey)(strengthenValue) - #GameWorld.DebugLog(" %s=%s" % (attrKey, strengthenValue)) - - aftMaxHP = GameObj.GetMaxHP(curNPC) - if befMaxHP != aftMaxHP: - if isReborn: - GameObj.SetHP(curNPC, aftMaxHP) - elif isDyn: - # 动态刷新属性的,血量按百分比继承 - aftHP = int(aftMaxHP * befHP / befMaxHP) - GameObj.SetHP(curNPC, aftHP) - curNPC.Notify_HP() - curNPC.Notify_MaxHP() - #GameWorld.DebugLog(" aftHP=%s,aftMaxHP=%s" % (aftHP, aftMaxHP)) - - # 机器人复活初始化给技能 - if isReborn and curNPC.GetType() == ChConfig.ntRobot: - __OnFBRobotReborn(curNPC, strengthenLV) - return def __OnFBRobotReborn(curNPC, npcLV): -- Gitblit v1.8.0