hxp
2018-12-06 605eebb3f2bb4d165c33111067f2d84bc29f18b6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -63,6 +63,9 @@
Help_score = 'score' #已获得积分
Help_grade = 'grade' #评级(5-S,4-A,3-B,2-C,1-D)
Help_leaderID = 'leaderID' #渡劫玩家ID
Help_isHelp = 'isHelp' #本次是否是助战
Help_helpCount = 'helpCount' #该副本今日已助战次数
Help_relation = 'relation' #该副本关系加成信息 [优先关系, 总加成]
#副本结算信息通用key
Over_dataMapID = 'dataMapID' #数据地图ID
@@ -87,6 +90,7 @@
Over_enterLV = 'enterLV' #进入时等级
Over_leaderID = 'leaderID' #渡劫玩家ID
Over_xianyuanCoin = 'xianyuanCoin' #获得仙缘币信息 [获得仙缘币数, 没有获得的原因] 原因: 1-达到助战次数上限,2-达到每日获得仙缘币上限
Over_helpPlayer = 'helpPlayer' #助战玩家信息 {"玩家ID":{玩家信息key:value, ...}, ...}
#副本行为
(
@@ -164,19 +168,12 @@
            return ShareDefine.EntFBAskRet_FBClose
        
        #进入次数判断
        maxTimes = fbIpyData.GetDayTimes()
        helpPoint = fbIpyData.GetHelpPoint()
        if maxTimes and not helpPoint and mapID not in ChConfig.Def_NoLimitEnterCntMap:
            enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
            maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
            if enterCnt + reqEnterCnt > maxCnt:
                GameWorld.Log("已达到当日最大进入次数!mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
                              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
                if isNotify:
                    PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_268121", [mapID])
                return ShareDefine.EntFBAskRet_NoEnterCnt
            # 周今日次数暂不做,待扩展...
        canEnter, notifyMark = __CheckCanEnterFBByTime(curPlayer, mapID, fbIpyData, reqEnterCnt, isTeamAsk)
        if not canEnter:
            if notifyMark:
                PlayerControl.NotifyCode(curPlayer, notifyMark, [mapID])
            return ShareDefine.EntFBAskRet_NoEnterCnt
        #进入CD判断
        if CheckIsEnterCD(curPlayer, mapID):
            if isNotify:
@@ -217,6 +214,50 @@
            return ShareDefine.EntFBAskRet_NoTicket
        
    return ShareDefine.EntFBAskRet_OK
def __CheckCanEnterFBByTime(curPlayer, mapID, fbIpyData, reqEnterCnt, isTeamAsk):
    #进入次数判断
    maxTimes = fbIpyData.GetDayTimes()
    if not maxTimes:
        return True, ""
    #playerID = curPlayer.GetPlayerID()
    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
    maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
    if enterCnt + reqEnterCnt <= maxCnt:
        return True, ""
    ### 以下是到达次数上限后的处理
    fbType = GameWorld.GetMap().GetMapFBTypeByMapID(mapID)
    # 单人副本达到次数后不可再进入
    if fbType == IPY_GameWorld.fbtSingle:
        #GameWorld.Log("已达到当日最大进入次数!单人副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
        return False, "GeRen_chenxin_268121"
    # 组队副本
    if fbType == IPY_GameWorld.fbtTeam:
        # 无助战的不可再进入
        if not fbIpyData.GetHelpPoint():
            #GameWorld.Log("已达到当日最大进入次数!组队副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
            #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
            return False, "GeRen_chenxin_268121"
        # 可助战的不可单人进入助战,可发起匹配
        if not isTeamAsk and (not curPlayer.GetTeamID() or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamMemCount) <= 1):
            #GameWorld.Log("已达到当日最大进入次数!组队副本不可单人助战! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
            #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
            return False, "TeamSingleEnter"
    elif mapID not in ChConfig.Def_NoLimitEnterCntMap:
        #GameWorld.Log("已达到当日最大进入次数! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s"
        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
        return False, "GeRen_chenxin_268121"
    # 周进入次数暂不做,待扩展...
    return True, ""
## 获取副本进入门票信息
#  @param curPlayer 玩家实例
@@ -1694,7 +1735,12 @@
    canBuyCnt = PlayerVip.GetPrivilegeValue(curPlayer, buyTimesVIPPriID)
    
    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mapID)
    maxDayTimes = ipyData.GetDayTimes()
    maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
    enterCnt = GetEnterFBCount(curPlayer, mapID)
    if mapID == ChConfig.Def_FBMapID_SealDemon and maxDayTimes and maxCnt - enterCnt >= maxDayTimes:
        GameWorld.DebugLog('当前次数已满,无需购买。。')
        return
    if hasBuyCnt >= canBuyCnt:
        GameWorld.DebugLog("购买次数已经用完mapID=%s"%mapID)
        return
@@ -1716,9 +1762,7 @@
    PlayerControl.NotifyCode(curPlayer, 'FBEnterTimeBuy', [mapID])
    lastRegainTime= curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID)
    if lastRegainTime:
        maxDayTimes = ipyData.GetDayTimes()
        maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
        enterCnt = GetEnterFBCount(curPlayer, mapID)
        if maxCnt - enterCnt == maxDayTimes:
            curTime = int(time.time())
            needTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbCntRegainTotalTime % mapID)