hxp
7 天以前 a1ea5474ffd2b081668f9a0cef8d069aa78db85d
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -29,29 +29,36 @@
import PlayerControl
import FunctionNPCCommon
import PlayerActBuyCountGift
import OpenServerActivity
import PlayerActLoginNew
import PlayerActTask
import IPY_GameWorld
import ItemCommon
import ItemControler
import PlayerTravel
import PlayerHorse
import PlayerArena
import PlayerTask
import DBDataMgr
# 功能开启需执行的函数{功能ID:执行函数, ...} 函数需返回是否激活成功, 功能开启有需要处理功能逻辑的这里增加函数调用配置即可
FuncOpenLogicDict = {
                     ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
                     ShareDefine.GameFuncID_Shop:lambda curObj:FunctionNPCCommon.DoShopOpen(curObj),
                     ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
                     ShareDefine.GameFuncID_Travel:lambda curObj:PlayerTravel.DoTravelOpen(curObj),
                     ShareDefine.GameFuncID_OSA_MainLevel:lambda curObj:OpenServerActivity.DoOSA_MainLevel(curObj),
                     ShareDefine.GameFuncID_OSA_HeroCall:lambda curObj:OpenServerActivity.DoOSA_HeroCall(curObj),
                     }
def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
def DoFuncOpenLogic(curPlayer):
def DoFuncOpenLogic(curPlayer, checkServerDay=True):
    '''执行触发功能开启逻辑
    @param finishMissionIDList: 完成的任务ID列表
    '''
    #GameWorld.DebugLog("执行触发功能开启逻辑: finishMissionIDList=%s" % finishMissionIDList, curPlayer.GetPlayerID())
    
    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
    openFuncIDList = []
    curLV = curPlayer.GetLV()
    ipyGameData = IpyGameDataPY.IPY_Data()
@@ -80,6 +87,14 @@
        
        limitMissionID = ipyData.GetLimitMissionID()
        if limitMissionID and not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
            continue
        limitOpenDay = ipyData.GetLimitOpenDay()
        if limitOpenDay and serverDay < limitOpenDay and checkServerDay:
            continue
        limitManLevel = ipyData.GetLimitManLevel()
        if limitManLevel and PlayerControl.GetMainLevelPassValue(curPlayer) < limitManLevel:
            continue
        
        # 先更新值再处理开启逻辑,不能可能导致在功能开启逻辑中再开启功能引发的递归死循环
@@ -120,29 +135,22 @@
def GetFuncOpenAward(curPlayer, funcID):
    ## 领取功能开启奖励
    ipyData = IpyGameDataPY.GetIpyGameData('FunctionForecast', funcID)
    ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
    if not ipyData:
        return
    getState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState, funcID)
    if getState:
        GameWorld.DebugLog("功能开启奖励已领取! funcID=%s" % funcID)
        return
    awardDict = ipyData.GetAward()
    job = curPlayer.GetJob()
    itemList = awardDict.get(str(job))
    openState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID)
    if not openState:
        GameWorld.DebugLog("功能未开启无法领取! funcID=%s" % funcID)
        return
    itemList = ipyData.GetAwardList()
    if not itemList:
        return
    # 检查背包
    needSpace = len(itemList)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
    if needSpace > packSpace:
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
        return
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncAwardState, funcID, 1)
    # 给物品
    for itemID, itemCount in itemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
    ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "FuncOpenAward")
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["FuncOpenAward", False, {}])
    Sync_FuncOpenState(curPlayer, [funcID])
    return