From d7f44d8d871a90c818bdb3ffe9a60af875b7100a Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 30 九月 2025 10:12:23 +0800 Subject: [PATCH] 135 【挑战】战锤秘境-服务端(白骨盈野;副本基础;副本扫荡;广告奖励支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 206 ++++++-------------------------------------------- 1 files changed, 27 insertions(+), 179 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 747a68f..c6ba2cc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -48,8 +48,6 @@ import PlayerBossReborn import PlayerCrossYaomoBoss import PlayerActCollectWords -import PlayerActGarbageSorting -import PlayerActBossTrial import PlayerTongTianLing import CrossPlayerData import PlayerFeastWish @@ -796,115 +794,6 @@ return -#// B4 0F 回收私有专属木桩怪 #tagCMRecyclePriWoodPile -# -#struct tagCMRecyclePriWoodPile -#{ -# tagHead Head; -# DWORD ObjID; -#}; -def OnRecyclePriWoodPile(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - objID = clientData.ObjID - curNPC = GameWorld.FindNPCByID(objID) - if not curNPC: - return - if curNPC.GetType() not in [ChConfig.ntPriWoodPilePVE, ChConfig.ntPriWoodPilePVP]: - return - summonPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_PriWoodPilePlayerID) - if curPlayer.GetPlayerID() != summonPlayerID: - #GameWorld.DebugLog("非玩家私有木桩...") - return - SetDeadEx(curNPC) - return - -#// B4 0C 召唤私有专属木桩怪 #tagCMSummonPriWoodPile -# -#struct tagCMSummonPriWoodPile -#{ -# tagHead Head; -# DWORD NPCID; -# BYTE Count; //默认1个,最多5个 -# DWORD HP; //默认0取最大值,其中一个血量数值大于0则用指定血量 -# DWORD HPEx; //默认0取最大值,其中一个血量数值大于0则用指定血量 -#}; -def OnSummonPriWoodPile(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - npcID = clientData.NPCID - count = clientData.Count - hp = clientData.HP - hpEx = clientData.HPEx - SummonPriWoodPile(curPlayer, npcID, count, hp, hpEx) - return - -def SummonPriWoodPile(curPlayer, npcID, count, hp=0, hpEx=0): - ''' 召唤私有专属木桩怪 - ''' - - mapID = PlayerControl.GetCustomMapID(curPlayer) - lineID = PlayerControl.GetCustomLineID(curPlayer) - if mapID: - if not FBLogic.OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count): - GameWorld.ErrLog("无法召唤木桩怪!mapID=%s,lineID=%s,npcID=%s,count=%s" % (mapID, lineID, npcID, count)) - return - - if count != 1: - hp, hpEx = 0, 0 # 指定血量的暂仅适用于单只的 - - playerID = curPlayer.GetPlayerID() - if playerID not in PyGameData.g_playerPriWoodPileNPCDict: - PyGameData.g_playerPriWoodPileNPCDict[playerID] = [] - playerPriWoodNPCList = PyGameData.g_playerPriWoodPileNPCDict[playerID] - maxCount = 3 - nowCount = len(playerPriWoodNPCList) - summonCount = min(count, maxCount - nowCount) - GameWorld.DebugLog("召唤木桩: npcID=%s,count=%s,maxCount=%s,nowCount=%s,summonCount=%s,hp=%s,hpEx=%s" - % (npcID, count, maxCount, nowCount, summonCount, hp, hpEx)) - if summonCount <= 0: - return - - npcManager = GameWorld.GetNPCManager() - for _ in xrange(summonCount): - #summonNPC = curPlayer.SummonNewNPC() - summonNPC = npcManager.AddPlayerSummonNPC() - - #设置召唤兽基础信息 - summonNPC.SetNPCTypeID(npcID) - summonNPC.SetSightLevel(curPlayer.GetSightLevel()) - #初始化 - InitNPC(summonNPC) - - #玩家召唤兽列表添加召唤兽,召唤兽添加主人 - #summonNPC.SetOwner(curPlayer) - summonNPC.SetDict(ChConfig.Def_NPC_Dict_PriWoodPilePlayerID, playerID) - - #将召唤兽召唤出来 - #玩家周围随机出生点 - #技能召唤坐标 ChConfig.Def_SummonAppearDist - summonPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), 3) - summonNPC.Reborn(summonPos.GetPosX(), summonPos.GetPosY(), False) - NPCControl(summonNPC).ResetNPC_Init(isReborn=True) - if hp or hpEx: - hpTotal = hpEx * ShareDefine.Def_PerPointValue + hp - GameObj.SetHP(summonNPC, hpTotal) - GameObj.SetMaxHP(summonNPC, hpTotal) - summonNPC.NotifyAppear() # 最终统一通知NPC出现 - playerPriWoodNPCList.append(summonNPC) - - return - -def ClearPriWoodPile(curPlayer): - ## 清除私有木桩 - playerID = curPlayer.GetPlayerID() - if playerID not in PyGameData.g_playerPriWoodPileNPCDict: - return - playerPriWoodNPCList = PyGameData.g_playerPriWoodPileNPCDict.pop(playerID) - for summonNPC in playerPriWoodNPCList: - if not summonNPC: - continue - SetDeadEx(summonNPC) - return - ## 设置npc死亡及自身处理(请不要将游戏逻辑加在此函数中) # @param curNPC:npc实例 # @return @@ -936,12 +825,12 @@ # 暗金boss if ChConfig.IsGameBoss(curNPC): # 通知GameServer boss状态 封魔坛在副本里单独处理 - ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid) - if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]: - GameServe_GameWorldBossState(npcid, 0) - #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick()) - #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典 - GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick()) + #ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid) + #if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]: + # GameServe_GameWorldBossState(npcid, 0) + # #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick()) + # #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典 + # GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick()) ChNPC.OnNPCSetDead(curNPC) @@ -1067,24 +956,20 @@ PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_BossHome, 1) PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_BossHome, 1) - if mapID == ChConfig.Def_FBMapID_CrossPenglai: - #跨服蓬莱仙境 - PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai) - PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1) - PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1) - PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1) - elif mapID == ChConfig.Def_FBMapID_CrossDemonLand: - #跨服魔化之地 - PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand) - PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1) - PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1) - PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1) - if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]: - PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CrossBoss) - PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1) - - if npcData.GetIsBoss() == ChConfig.Def_NPCType_Boss_Dark: - PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillBoss) +# if mapID == ChConfig.Def_FBMapID_CrossPenglai: +# #跨服蓬莱仙境 +# PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai) +# PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1) +# PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1) +# PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1) +# elif mapID == ChConfig.Def_FBMapID_CrossDemonLand: +# #跨服魔化之地 +# PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand) +# PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1) +# PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1) +# PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1) +# if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]: +# PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1) # 个人首杀记录 ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", npcID) @@ -2605,13 +2490,13 @@ #杀死NPC, 触发任务 self.__EventKillNpc() - mapID = GameWorld.GetMap().GetMapID() - killerName = "" if not self.__Killer else self.__Killer.GetPlayerName() - # 记录boss击杀信息的NPC - bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID) - if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]: - killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList] - GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList) + #mapID = GameWorld.GetMap().GetMapID() + #killerName = "" if not self.__Killer else self.__Killer.GetPlayerName() + ## 记录boss击杀信息的NPC + #bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID) + #if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]: + # killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList] + # GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList) if npcID == IpyGameDataPY.GetFuncCfg("BossRebornServerBoss", 3): PlayerControl.WorldNotify(0, "BossRebornBossKilled", [curNPC.GetNPCID()]) @@ -3321,7 +3206,6 @@ else: if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'): PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_KillNPC) - PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC) PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC) PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID]) #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1) @@ -4056,44 +3940,8 @@ DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData, crossCollectOK=True) return -#// A2 34 自定义场景中获取采集奖励 #tagCMGetCustomSceneCollectAward -# -#struct tagCMGetCustomSceneCollectAward -#{ -# tagHead Head; -# DWORD NPCID; //采集的NPCID -#}; -def OnGetCustomSceneCollectAward(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - playerID = curPlayer.GetPlayerID() - npcID = clientData.NPCID - if not curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene): - GameWorld.ErrLog("非自定义场景中,无法获取定义采集奖励!", playerID) - return - mapID = PlayerControl.GetCustomMapID(curPlayer) - lineID = PlayerControl.GetCustomLineID(curPlayer) - GameWorld.Log("前端场景采集: mapID=%s,lineID=%s,npcID=%s" % (mapID, lineID, npcID), playerID) - if not mapID: - GameWorld.ErrLog("无自定义场景地图ID,不允许采集!", playerID) - return - - if not FBLogic.OnCustomSceneCollectOK(curPlayer, mapID, lineID, npcID): - GameWorld.ErrLog("自定义场景地图不允许采集! mapID=%s,lineID=%s,npcID=%s" % (mapID, lineID, npcID), playerID) - return - - collectNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CollectNPC", npcID) - if collectNPCIpyData: - DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData) - return - def DoGiveCollectNPCAward(curPlayer, npcID, collectNPCIpyData, collectCnt=1, crossCollectOK=False, isSweep=False): return - -## 采集结果同步 -# @param None -# @param None -def SyncCollectionItemInfo(curPlayer, addExp, addMoney, addZhenQi, syncItemInfoList, collectNPCID=0): - return #暂不同步 def SyncCollNPCTime(curPlayer, npcIDList=None): ## 同步采集NPC功能号采集次数 -- Gitblit v1.8.0