ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -24,78 +24,29 @@
import ChPyNetSendPack
import GameWorld
import NetPackCommon
import PlayerGodWeapon
import PlayerHorse
import PlayerPet
import ShareDefine
import IpyGameDataPY
import PlayerMagicWeapon
import PlayerRefineStove
import PlayerControl
import PlayerPrestigeSys
import PlayerBillboard
import PlayerTreasure
import PlayerSignDay
import PlayerGoldGift
import PlayerEquipDecompose
import PlayerCrossChampionship
import PlayerFreeGoods
import FunctionNPCCommon
import PlayerGreatMaster
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActTask
import IPY_GameWorld
import ItemCommon
import ItemControler
import PlayerLianTi
import PlayerArena
import PlayerFaQi
import PlayerGuaji
import PlayerTask
# 功能开启需执行的函数{功能ID:执行函数, ...} 函数需返回是否激活成功, 功能开启有需要处理功能逻辑的这里增加函数调用配置即可
FuncOpenLogicDict = {
                     ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
                     ShareDefine.GameFuncID_GodWeapon:lambda curObj:PlayerGodWeapon.DoGodWeaponOpen(curObj),
                     ShareDefine.GameFuncID_Pet:lambda curObj:PlayerPet.DoPetOpen(curObj),
                     ShareDefine.GameFuncID_MagicWeapon:lambda curObj:PlayerMagicWeapon.DoMagicWeaponOpen(curObj),
                     ShareDefine.GameFuncID_RefineStove:lambda curObj:PlayerRefineStove.DoRefineStoveOpen(curObj),
                     ShareDefine.GameFuncID_Official:lambda curObj:PlayerPrestigeSys.DoOfficialOpen(curObj),
                     ShareDefine.GameFuncID_Billboard:lambda curObj:PlayerBillboard.DoBillboardOpen(curObj),
                     ShareDefine.GameFuncID_SignDay:lambda curObj:PlayerSignDay.DoSignDayOpen(curObj),
                     ShareDefine.GameFuncID_Treasure:lambda curObj:PlayerTreasure.DoTreasureOpen(curObj),
                     ShareDefine.GameFuncID_FirstGoldTip:lambda curObj:PlayerGoldGift.DoFirstGoldOpen(curObj),
                     ShareDefine.GameFuncID_EquipDecompose:lambda curObj:PlayerEquipDecompose.DoEquipDecomposeOpen(curObj),
                     ShareDefine.GameFuncID_FreeGoods:lambda curObj:PlayerFreeGoods.DoFreeGoodsOpen(curObj),
                     ShareDefine.GameFuncID_OSSail:lambda curObj:FunctionNPCCommon.OSSaleOpenMail(curObj),
                     ShareDefine.GameFuncID_AddPoint:lambda curObj:PlayerControl.DoAddPointOpen(curObj),
                     ShareDefine.GameFuncID_Talent:lambda curObj:PlayerGreatMaster.DoTalentOpen(curObj),
                     ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
                     ShareDefine.GameFuncID_FaQi:lambda curObj:PlayerFaQi.DoFaQiOpen(curObj),
                     ShareDefine.GameFuncID_LianTi:lambda curObj:PlayerLianTi.DoLianTiOpen(curObj),
                     ShareDefine.GameFuncID_Championship:lambda curObj:PlayerCrossChampionship.DoChampionshipOpen(curObj),
                     ShareDefine.GameFuncID_Guaji:lambda curObj:PlayerGuaji.DoGuajiOpen(curObj),
                     #ShareDefine.GameFuncID_RunDaily:lambda curObj:FBCommon.DoFuncOpen_RunDaily(curObj),
                     #ShareDefine.GameFuncID_RunFamily:lambda curObj:FBCommon.DoFuncOpen_RunFamily(curObj),
                     }
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
# 功能开启后升级逻辑 需要处理的函数 {功能ID:执行函数, ...}
#FuncLVUpLogicDict = {
#                     ShareDefine.GameFuncID_Pet:lambda curObj:PlayerPet.DoLVUPLogic_Pet(curObj),
#                     }
# 功能开启需要同步到GameServer的
FuncOpenNotifyGameServer = [ShareDefine.GameFuncID_Championship, ShareDefine.GameFuncID_MineArea]
def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
def DoFuncOpenLogic(curPlayer, finishMissionIDList=[]):
def DoFuncOpenLogic(curPlayer):
    '''执行触发功能开启逻辑
    @param finishMissionIDList: 完成的任务ID列表
    '''
@@ -109,11 +60,11 @@
        ipyData = ipyGameData.GetFuncOpenLVByIndex(i)
        funcID = ipyData.GetFuncId()
        limitMissionID = ipyData.GetLimitMissionID()
        if limitMissionID and limitMissionID in finishMissionIDList:
            if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
                GameWorld.DebugLog("    设置功能开启所需任务完成: funcID=%s,limitMissionID=%s" % (funcID, limitMissionID), curPlayer.GetPlayerID())
        if limitMissionID and not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID) \
            and PlayerTask.IsTaskFinish(curPlayer, limitMissionID):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
            GameWorld.DebugLog("    设置功能开启所需任务完成: funcID=%s,limitMissionID=%s" % (funcID, limitMissionID), curPlayer.GetPlayerID())
        isOpen = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID, True)
        if isOpen:
            #GameWorld.DebugLog("    功能已经开启过, 不需要重复触发开启! funcID=%s" % (funcID), curPlayer.GetPlayerID())
@@ -123,21 +74,12 @@
        if limitLV and curLV < limitLV:
            continue
        
        limitMagicWeapon = ipyData.GetLimitMagicWeapon()
        limitMagicWeaponID, limitMagicWeaponlv = limitMagicWeapon/100, limitMagicWeapon%100
        if limitMagicWeaponID and not PlayerMagicWeapon.GetIsActiveMagicWeapon(curPlayer, limitMagicWeaponID, limitMagicWeaponlv):
            continue
        limitRealmLV = ipyData.GetLimiRealmLV()
        if limitRealmLV and curPlayer.GetOfficialRank() < limitRealmLV:
            continue
        
        limitMissionID = ipyData.GetLimitMissionID()
        if limitMissionID and not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
            continue
        limitVIPLV = ipyData.GetLimitVIPLV()
        if limitVIPLV and curPlayer.GetVIPLv() < limitVIPLV:
            continue
        
        # 先更新值再处理开启逻辑,不能可能导致在功能开启逻辑中再开启功能引发的递归死循环
@@ -157,16 +99,6 @@
        
    if openFuncIDList:
        Sync_FuncOpenState(curPlayer, openFuncIDList)
        notifyGameServerFuncIDList = []
        for funcID in openFuncIDList:
            if funcID not in FuncOpenNotifyGameServer:
                continue
            notifyGameServerFuncIDList.append(funcID)
        if notifyGameServerFuncIDList:
            GameWorld.DebugLog("notifyGameServerFuncIDList=%s" % notifyGameServerFuncIDList)
            msgInfo = str(notifyGameServerFuncIDList)
            GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FuncOpen", msgInfo, len(msgInfo))
        PlayerActTask.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
        PlayerActLoginNew.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
        PlayerActBuyCountGift.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
@@ -175,6 +107,7 @@
## 功能是否可用
def GetFuncCanUse(curPlayer, funcID):
    if funcID < 0: return False
    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID, True)
## 获取功能限制等级(等级条件为全局)