hxp
2019-12-17 4226d0d2ec4cf5541a17d9a6cdbf1a32a011d052
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BZZD.py
@@ -32,11 +32,14 @@
import PlayerSuccess
import PlayerBossReborn
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerActLogin
import PlayerWeekParty
import ItemControler
import GameFuncComm
import SkillShell
import BuffSkill
import EventShell
import random
import math
@@ -101,6 +104,10 @@
def OnFBPlayerOnLogin(curPlayer):
    playerID = curPlayer.GetPlayerID()
    historyEnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_HistoryEnterCnt)
    expPerSecondDict = IpyGameDataPY.GetFuncEvalCfg("XjmjFirstEnter", 2, {})
    if historyEnterCnt not in expPerSecondDict:
        return
    playerExpTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_FirstEnterExpTime)
    if not playerExpTime:
        #GameWorld.DebugLog("还没进入过仙界秘境,不处理经验补时!", playerID)
@@ -117,7 +124,7 @@
    if not giveTime:
        #GameWorld.DebugLog("经验补时时间已超过单次挑战时长,不处理经验补时!playerExpTime=%s" % playerExpTime, playerID)
        return
    expPerSecond = IpyGameDataPY.GetFuncCfg("XjmjFirstEnter", 2)
    expPerSecond = expPerSecondDict[historyEnterCnt]
    giveExp = expPerSecond * giveTime
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_FirstEnterExpTime, FirstEnterExpTimeMax)
    if giveExp:
@@ -186,13 +193,22 @@
        FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_BZZD)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_XJMJ, 1)
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_XJMJ, 1)
        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_XJMJ, 1)
        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_XJMJ, 1)
        PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_XJMJ, 1)
        EventShell.EventRespons_FBEvent(curPlayer, 'passxjmj')
        FBCommon.UpdateFBEnterTick(curPlayer)
        gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_EnterLV, playerLV)
        PyGameData.g_bzzdPlayerKillNPCCntDict.pop(playerID, 0)
        
        logType = FBCommon.GetFBJoinType(curPlayer, False)
        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_BZZD, 0, ChConfig.CME_Log_Start, logType)
        historyEnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_HistoryEnterCnt)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_HistoryEnterCnt, min(historyEnterCnt+1, 999))
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_FirstEnterExpTime, 1)
        __GiveFirstEnterPrize(curPlayer, historyEnterCnt+1)
    fbPlayerCnt = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenPlayerCnt)
    isTeamEnter = (teamID and fbPlayerCnt > 1)
    if not isTeamEnter:
@@ -229,27 +245,21 @@
        FBCommon.SendFBEncourageInfo(curPlayer, encourageLV)
    DoFBHelp(curPlayer, tick)
    
    isFirstEnter = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_FirstEnterExpTime)
    # 没有首次进入经验时间记录,可视为首次进入
    if not isFirstEnter:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_FirstEnterExpTime, 1)
        __GiveFirstEnterPrize(curPlayer)
    return
def __GiveFirstEnterPrize(curPlayer):
    XjmjFirstEnterPrize = IpyGameDataPY.GetFuncEvalCfg("XjmjFirstEnter", 1)
    if not XjmjFirstEnterPrize:
def __GiveFirstEnterPrize(curPlayer, historyEnterCnt):
    XjmjFirstEnterPrizeDict = IpyGameDataPY.GetFuncEvalCfg("XjmjFirstEnter", 1, {})
    if historyEnterCnt not in XjmjFirstEnterPrizeDict:
        return
    silverMoney, goldPaper, itemID = XjmjFirstEnterPrize
    silverMoney, goldMoney, itemID = XjmjFirstEnterPrizeDict[historyEnterCnt]
    if silverMoney:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, silverMoney)
    if goldPaper:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, goldPaper)
    if goldMoney:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, goldMoney)
    if itemID:
        ItemControler.GivePlayerItem(curPlayer, itemID, 1, 1, [IPY_GameWorld.rptItem])
    GameWorld.DebugLog("首次进入给奖励:silverMoney=%s,goldPaper=%s,itemID=%s"
                       % (silverMoney, goldPaper, itemID), curPlayer.GetPlayerID())
        ItemControler.GivePlayerItem(curPlayer, itemID, 1, 0, [IPY_GameWorld.rptItem])
    GameWorld.DebugLog("首次进入给奖励:silverMoney=%s,goldMoney=%s,itemID=%s"
                       % (silverMoney, goldMoney, itemID), curPlayer.GetPlayerID())
    return
def CheckHurtBuff(curPlayer, tick, isAdd=True):
@@ -286,12 +296,12 @@
    curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, max(notify_tick, 0), True)
    curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
    DoFBHelp(curPlayer, tick)
    isFirstEnter = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_FirstEnterExpTime)
    # 没有首次进入经验时间记录,可视为首次进入
    if not isFirstEnter:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_FirstEnterExpTime, 1)
        __GiveFirstEnterPrize(curPlayer)
#
#    isFirstEnter = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_FirstEnterExpTime)
#    # 没有首次进入经验时间记录,可视为首次进入
#    if not isFirstEnter:
#        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BZZD_FirstEnterExpTime, 1)
#        __GiveFirstEnterPrize(curPlayer)
    return
##玩家退出副本
@@ -451,8 +461,8 @@
    gameFB.SetGameFBDict(BZZD_LastCheckExpTick, tick) # 这个全局tick只是处理多久执行一次而已,不参与其他逻辑
    
    fightTime = int(math.ceil((tick - GameWorld.GetGameFB().GetFBStepTick()) / 1000.0)) # 已经战斗时长,秒
    expPerSecond = IpyGameDataPY.GetFuncCfg("XjmjFirstEnter", 2)
    minTotalExp = expPerSecond * fightTime # 理论保底最少经验
    expPerSecondDict = IpyGameDataPY.GetFuncEvalCfg("XjmjFirstEnter", 2, {})
    
    playerManager = GameWorld.GetMapCopyPlayerManager()
    playerCount = playerManager.GetPlayerCount()
@@ -461,6 +471,9 @@
        if not curPlayer:
            continue
        playerID = curPlayer.GetPlayerID()
        historyEnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_HistoryEnterCnt)
        if historyEnterCnt not in expPerSecondDict:
            continue
        playerExpTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_FirstEnterExpTime)
        if playerExpTime >= fightTime:
            #GameWorld.DebugLog("已经处理完保底经验时间,不再处理!", playerID)
@@ -472,6 +485,8 @@
        exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
        expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
        playerTotalExp = expPoint * ChConfig.Def_PerPointValue + exp
        expPerSecond = expPerSecondDict[historyEnterCnt]
        minTotalExp = expPerSecond * fightTime # 理论保底最少经验
        giveExp = max(0, minTotalExp - playerTotalExp)
        if giveExp > 0:
            giveExp = PlayerControl.PlayerControl(curPlayer).AddExp(giveExp, ShareDefine.Def_ViewExpType_Sys)