| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GameWorldLogic.FBProcess.GameLogic_CrossGrassland  | 
| #  | 
| # @todo:¿ç·þ²ÝÔ°  | 
| # @author hxp  | 
| # @date 2019-04-15  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¿ç·þ²ÝÔ°  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2019-04-15 16:30"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import GameWorldProcess  | 
| import PlayerFairyDomain  | 
| import NPCCustomRefresh  | 
| import IpyGameDataPY  | 
| import PyGameData  | 
| import NPCCommon  | 
| import PlayerControl  | 
| import ChConfig  | 
| import FBCommon  | 
|   | 
| FBDict_SyncFBNPC = 'SyncFBNPC' #ÊÇ·ñÐèҪͬ²½¸±±¾NPC  | 
|   | 
| def DoResetCrossGrassland(curPlayer, eventType, fdeventID):  | 
|     ## ²ÝÔ°ÖØÖà  | 
|       | 
|     resetCollectType = 10 + eventType  | 
|     NPCCommon.DoResetCollectNPCTimeByType(curPlayer, [resetCollectType])  | 
|       | 
|     # ±¦Ïä¹Ö´ÎÊýÖØÖà  | 
|     if eventType == PlayerFairyDomain.FDEventType_GrasslandXian:  | 
|         npcID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)  | 
|         if npcID:  | 
|             NPCCommon.UpdateNPCAttackCount(curPlayer, npcID, 0)  | 
|               | 
|     return  | 
|   | 
| ## ÊÇ·ñÐèÒª×ö½øÈ븱±¾Í¨Óüì²éÌõ¼þÂß¼£¬Ä¬ÈÏÐèÒª¼ì²é  | 
| def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):  | 
|     curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)  | 
|     return curState != PlayerFairyDomain.FDEventState_Visiting  | 
|   | 
| def OnEnterFBEvent(curPlayer, mapID, lineID, tick):  | 
|     curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)  | 
|     return curState in [PlayerFairyDomain.FDEventState_CanVisit, PlayerFairyDomain.FDEventState_Visiting]  | 
|   | 
| ## ½øÈë¿ç·þ¸±±¾×¢²áÊý¾ÝǰÂß¼  | 
| ## @return: ÊÇ·ñ¿ÉÒÔ×¢²áǰÍù¿ç·þ¸±±¾£¬´Îº¯ÊýÖпÉÒÔдһЩ¿Û³ýÏûºÄÂß¼µÈ  | 
| def OnRegEnterCrossFB(curPlayer, mapID, lineID):  | 
|     curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)  | 
|     if curState == PlayerFairyDomain.FDEventState_CanVisit:  | 
|         delResult = FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID)  | 
|         isOK = delResult[0]  | 
|         if not isOK:  | 
|             return False  | 
|         return PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)  | 
|       | 
|     if curState == PlayerFairyDomain.FDEventState_Visiting:  | 
|         return True  | 
|       | 
|     return False  | 
|   | 
| ## ¿ç·þ¹¦ÄÜÏß·Êý¾Ý»º´æ£¬Ï´οªÆôͬÑù¹¦ÄÜÏß·ʱ»áÓøÃÊý¾Ý½øÐл¹Ô֮ǰµÄ¸±±¾×´Ì¬  | 
| def OnGetCrossFuncLineDataCache():  | 
|     refreshNPCInfo = NPCCustomRefresh.GetCopyMapRandomRefreshNPCInfo()  | 
|     return refreshNPCInfo  | 
|   | 
| ## ¿ªÆô¸±±¾  | 
| def OnOpenFB(tick):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     realMapID, copyMapID = gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()  | 
|     key = (realMapID, copyMapID)  | 
|     if key in PyGameData.g_crossFuncLineDataCache:  | 
|         refreshNPCInfo = PyGameData.g_crossFuncLineDataCache.pop(key)  | 
|         GameWorld.DebugLog("¸±±¾¿ªÆô¸ù¾Ý±£´æµÄÐéÄâÏß·±êÊÔµãË¢¹ÖÐÅϢˢ¹Ö: realMapID=%s,copyMapID=%s,refreshNPCInfo=%s" % (realMapID, copyMapID, refreshNPCInfo))  | 
|         NPCCustomRefresh.OnFBOpenSetRandomRefreshNPCInfo(refreshNPCInfo, tick)  | 
|           | 
|     return  | 
|   | 
| ## ½ø¸±±¾  | 
| def DoEnterFB(curPlayer, tick):  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     zoneID = FBCommon.GetCrossDynamicLineMapZoneID()  | 
|     funcLineID = FBCommon.GetCrossDynamicLineMapFuncLineID()  | 
|     crossMapID = PlayerControl.GetCrossMapID(curPlayer)  | 
|     GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s,crossMapID=%s" % (zoneID, funcLineID, crossMapID), playerID)  | 
|     FBCommon.Sync_FBNPC(curPlayer=curPlayer)  | 
|     if crossMapID == ChConfig.Def_FBMapID_CrossGrasslandXian:  | 
|         boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)  | 
|         if boxNPCID:  | 
|             NPCCommon.SyncNPCAttackCount(curPlayer, [boxNPCID])  | 
|     return  | 
|   | 
| ## ¸±±¾×ÜÂß¼¼ÆÊ±Æ÷  | 
| def OnProcess(tick):  | 
|     gameFB = GameWorld.GetGameFB()  | 
|     if gameFB.GetGameFBDictByKey(FBDict_SyncFBNPC):  | 
|         gameFB.SetGameFBDict(FBDict_SyncFBNPC, 0)  | 
|         FBCommon.Sync_FBNPC()  | 
|           | 
|     return  | 
| #  | 
| ### ¹Ø±Õ¸±±¾  | 
| #def OnCloseFB(tick):  | 
| #    return  | 
| #  | 
| ### Íæ¼ÒÍ˳ö¸±±¾  | 
| #def DoExitFB(curPlayer, tick):  | 
| #    return  | 
|   | 
| ##Íæ¼ÒÖ÷¶¯À뿪¸±±¾.  | 
| def DoPlayerLeaveFB(curPlayer, tick):  | 
|       | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     #×îºóÒ»ÈËÍ˳ö¸±±¾Ôò¹Ø±ÕµØÍ¼  | 
|     if gameWorld.GetMapCopyPlayerManager().GetPlayerCount() == 1:  | 
|         GameWorldProcess.CloseFB(tick)  | 
|           | 
|     return  | 
|   | 
| ## ¿Í»§¶Ë½øÈë×Ô¶¨Ò峡¾°  | 
| def OnEnterCustomScene(curPlayer, mapID, lineID):  | 
|     PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)  | 
|     return  | 
|   | 
| def DoCheckUpdateGrasslandEnd(curPlayer):  | 
|     ## ¼ì²é¸üвÝÔ°ÒѰݷÃÍê³É  | 
|       | 
|     grasslandMapIDList = [ChConfig.Def_FBMapID_CrossGrasslandLing, ChConfig.Def_FBMapID_CrossGrasslandXian]  | 
|     crossMapID = PlayerControl.GetCrossMapID(curPlayer)  | 
|     clientCustomSceneMapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)  | 
|     if crossMapID in grasslandMapIDList:  | 
|         mapID = crossMapID  | 
|         lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)  | 
|     elif clientCustomSceneMapID in grasslandMapIDList:  | 
|         mapID = clientCustomSceneMapID  | 
|         lineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneLineID)  | 
|     else:  | 
|         return  | 
|       | 
|     # ²É¼¯´ÎÊýÊÇ·ñÒÑÓÃÍê  | 
|     collNPCIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("MapRefreshNPC", mapID)  | 
|     if not collNPCIpyDataList:  | 
|         return  | 
|       | 
|     for collIpyData in collNPCIpyDataList:  | 
|         npcIDList = collIpyData.GetNPCIDList()  | 
|         for npcID in npcIDList:  | 
|             collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)  | 
|             if not collectNPCIpyData:  | 
|                 return  | 
|             limitMaxTime = collectNPCIpyData.GetMaxCollectCount()  | 
|             totalCollTime = NPCCommon.GetTodayCollectCount(curPlayer, npcID)  | 
|             if totalCollTime < limitMaxTime:  | 
|                 GameWorld.DebugLog("²ÝÔ°NPC²É¼¯´ÎÊýδÓÃÍê! npcID=%s,totalCollTime=%s < limitMaxTime=%s" % (npcID, totalCollTime, limitMaxTime))  | 
|                 return  | 
|               | 
|     # ±¦Ïä¹Ö¹¥»÷´ÎÊýÊÇ·ñÒÑÓÃÍê  | 
|     if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:  | 
|         boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)  | 
|         boxNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TreasureNPC", boxNPCID)  | 
|         if not boxNPCIpyData:  | 
|             return  | 
|         attackCountDropWeightInfo = boxNPCIpyData.GetAttackCountDropWeightInfo()  | 
|         if not attackCountDropWeightInfo:  | 
|             return  | 
|         maxAttackCount = max(attackCountDropWeightInfo)  | 
|         attackCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_NPCAttackCount % boxNPCID)  | 
|         if attackCount < maxAttackCount:  | 
|             GameWorld.DebugLog("²ÝÔ°±¦Ïä¹Ö¹¥»÷´ÎÊýδÓÃÍê! boxNPCID=%s,attackCount=%s < maxAttackCount=%s" % (boxNPCID, attackCount, maxAttackCount))  | 
|             return  | 
|           | 
|     PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visited)  | 
|     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  | 
|   |