6459 【后端】【2.0】缥缈仙域开发单(同步副本NPC个数优化,变更时主动同步)
 
	
	
	
	
	
	
	
	
	
	
	
	
	
 |  |  | 
 |  |  |     #可以进入
 | 
 |  |  |     return True
 | 
 |  |  | #---------------------------------------------------------------------
 | 
 |  |  | def Sync_FBNPC(mapID=0, npcIDList=[], curPlayer=None):
 | 
 |  |  |     ## 同步当前副本NPC给副本中的所有玩家
 | 
 |  |  |     if not mapID:
 | 
 |  |  |         mapID = GameWorld.GetMap().GetMapID()
 | 
 |  |  |         mapID = GetRecordMapID(mapID)
 | 
 |  |  |     npcCntDict = {}
 | 
 |  |  |     gameNPCManager = GameWorld.GetNPCManager()
 | 
 |  |  |     for index in xrange(gameNPCManager.GetNPCCount()):
 | 
 |  |  |         curNPC = gameNPCManager.GetNPCByIndex(index)
 | 
 |  |  |         npcID = curNPC.GetNPCID()
 | 
 |  |  |         if not npcID:
 | 
 |  |  |             continue
 | 
 |  |  |         if curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
 | 
 |  |  |             continue
 | 
 |  |  |         if npcIDList and npcID not in npcIDList:
 | 
 |  |  |             continue
 | 
 |  |  |         npcCntDict[npcID] = npcCntDict.get(npcID, 0) + 1
 | 
 |  |  |          | 
 |  |  |     if curPlayer:
 | 
 |  |  |         NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcCntDict)
 | 
 |  |  |     else:
 | 
 |  |  |         playerManager = GameWorld.GetMapCopyPlayerManager()
 | 
 |  |  |         for i in xrange(playerManager.GetPlayerCount()):
 | 
 |  |  |             curPlayer = playerManager.GetPlayerByIndex(i)
 | 
 |  |  |             if curPlayer.GetID() == 0:
 | 
 |  |  |                 continue
 | 
 |  |  |             NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcCntDict)
 | 
 |  |  |     return npcCntDict
 | 
 |  |  | 
 | 
 |  |  | ##获得地图上的NPC列表
 | 
 |  |  | # @param 无参数
 | 
 |  |  | # @return 返回值, NPC实例列表[curNPC,curNPC,,,,,]
 | 
 
 |  |  | 
 |  |  | import IPY_GameWorld
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | import PlayerFairyDomain
 | 
 |  |  | import CrossRealmPlayer
 | 
 |  |  | import GameWorldProcess
 | 
 |  |  | import PlayerControl
 | 
 |  |  | import ShareDefine
 | 
 
 |  |  | 
 |  |  | import GameWorldProcess
 | 
 |  |  | import PlayerFairyDomain
 | 
 |  |  | import NPCCustomRefresh
 | 
 |  |  | import CrossRealmPlayer
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | import PyGameData
 | 
 |  |  | import NPCCommon
 | 
 |  |  | import PlayerControl
 | 
 |  |  | import ChConfig
 | 
 |  |  | import FBCommon
 | 
 |  |  | 
 | 
 |  |  | FBDict_SyncFBNPC = 'SyncFBNPC' #是否需要同步副本NPC
 | 
 |  |  | 
 | 
 |  |  | def DoResetCrossGrassland(curPlayer, eventType, fdeventID):
 | 
 |  |  |     ## 草园重置
 | 
 |  |  | 
 |  |  |     zoneID = FBCommon.GetCrossDynamicLineMapZoneID()
 | 
 |  |  |     funcLineID = FBCommon.GetCrossDynamicLineMapFuncLineID()
 | 
 |  |  |     GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s" % (zoneID, funcLineID), playerID)
 | 
 |  |  |     FBCommon.Sync_FBNPC(curPlayer=curPlayer)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ### 副本总逻辑计时器
 | 
 |  |  | #def OnProcess(tick):
 | 
 |  |  | #    return
 | 
 |  |  | ## 副本总逻辑计时器
 | 
 |  |  | def OnProcess(tick):
 | 
 |  |  |     gameFB = GameWorld.GetGameFB()
 | 
 |  |  |     if gameFB.GetGameFBDictByKey(FBDict_SyncFBNPC):
 | 
 |  |  |         gameFB.SetGameFBDict(FBDict_SyncFBNPC, 0)
 | 
 |  |  |         FBCommon.Sync_FBNPC()
 | 
 |  |  |          | 
 |  |  |     return
 | 
 |  |  | #
 | 
 |  |  | ### 关闭副本
 | 
 |  |  | #def OnCloseFB(tick):
 | 
 |  |  | 
 |  |  |     GameWorld.DebugLog("设置草园已完成!mapID=%s, lineID=%s" % (mapID, lineID))
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def DoFB_NPCDead(curNPC):
 | 
 |  |  |     #GameWorld.DebugLog("DoFB_NPCDead 设置需要同步副本NPC!")
 | 
 |  |  |     GameWorld.GetGameFB().SetGameFBDict(FBDict_SyncFBNPC, 1)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def OnNPCRebornInFB(curNPC):
 | 
 |  |  |     #GameWorld.DebugLog("OnNPCRebornInFB 设置需要同步副本NPC!")
 | 
 |  |  |     GameWorld.GetGameFB().SetGameFBDict(FBDict_SyncFBNPC, 1)
 | 
 |  |  |     return
 | 
 |  |  | 
 |