#!/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() GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s" % (zoneID, funcLineID), playerID) FBCommon.Sync_FBNPC(curPlayer=curPlayer) 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