xdh
2019-04-29 da600c48b92c65ec78edea08544c6ca9a50b1143
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
@@ -24,6 +24,9 @@
import NPCCommon
import PlayerControl
import ChConfig
import FBCommon
FBDict_SyncFBNPC = 'SyncFBNPC' #是否需要同步副本NPC
def DoResetCrossGrassland(curPlayer, eventType, fdeventID):
    ## 草园重置
@@ -35,23 +38,34 @@
    if eventType == PlayerFairyDomain.FDEventType_GrasslandXian:
        npcID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
        if npcID:
            NPCCommon.UpdateNPCAttackCount(curPlayer, [npcID], 0)
            NPCCommon.UpdateNPCAttackCount(curPlayer, npcID, 0)
            
    return
def __SetGrasslandVisitState(curPlayer, mapID, lineID, state):
    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
    if not ipyData:
        return False
    eventID = ipyData.GetID()
    if not PlayerFairyDomain.SetFairyDomainEventState(curPlayer, eventID, state):
        return False
    return True
## 是否需要做进入副本通用检查条件逻辑,默认需要检查
def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
    curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)
    return curState != PlayerFairyDomain.FDEventState_Visiting
def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
    if not __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting):
        return False
    return True
    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():
@@ -70,25 +84,28 @@
        
    return
def GetCurFBFuncLineID():
    ## 获取本线路功能线路ID
    return GameWorld.GetGameWorld().GetPropertyID() % 10000 / 10
def GetCurFBLineZoneID():
    ## 获取本线路所属跨服分区
    return GameWorld.GetGameWorld().GetPropertyID() / 10000
## 进副本
def DoEnterFB(curPlayer, tick):
    playerID = curPlayer.GetPlayerID()
    zoneID = GetCurFBLineZoneID()
    funcLineID = GetCurFBFuncLineID()
    GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s" % (zoneID, funcLineID), playerID)
    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):
#    return
## 副本总逻辑计时器
def OnProcess(tick):
    gameFB = GameWorld.GetGameFB()
    if gameFB.GetGameFBDictByKey(FBDict_SyncFBNPC):
        gameFB.SetGameFBDict(FBDict_SyncFBNPC, 0)
        FBCommon.Sync_FBNPC()
    return
#
### 关闭副本
#def OnCloseFB(tick):
@@ -110,7 +127,7 @@
## 客户端进入自定义场景
def OnEnterCustomScene(curPlayer, mapID, lineID):
    __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
    PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
    return
def DoCheckUpdateGrasslandEnd(curPlayer):
@@ -160,8 +177,17 @@
            GameWorld.DebugLog("草园宝箱怪攻击次数未用完! boxNPCID=%s,attackCount=%s < maxAttackCount=%s" % (boxNPCID, attackCount, maxAttackCount))
            return
        
    __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visited)
    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