From 0d5d93d5adc8035d2a140ecb363fdb464cde9ed0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 10 七月 2024 19:29:28 +0800 Subject: [PATCH] 10192 【越南】【主干】【港台】【砍树】上线增加膜拜主动推送(膜拜玩家信息转json格式) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py | 69 +++++++++++++++++++++++++++------- 1 files changed, 55 insertions(+), 14 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py index 47443a1..2c05255 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py @@ -30,6 +30,8 @@ import PlayerDBOper import IPY_GameServer import PlayerDBGSEvent +import CrossChampionship +import GameWorldMineArea import IpyGameDataPY import CrossRealmMsg import ShareDefine @@ -206,18 +208,6 @@ return NotifyCodeList #------------------------------------------------------------------------------ -def LoadDBPlayer(): - if GameWorld.IsCrossServer(): - return - PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {}, {"PlayerID":1, "AccID":1, "_id":0}, LoadDBPlayerRet) - return - -def LoadDBPlayerRet(resultSetList, extendValueList): - for resultDict in resultSetList: - PyGameData.g_dbPlayerIDMap[resultDict["PlayerID"]] = resultDict["AccID"] - GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s, %s" % (len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap)) - return - def GetDBPlayerAccIDByID(playerID): ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家 return PyGameData.g_dbPlayerIDMap.get(playerID, "") @@ -257,8 +247,8 @@ def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3() ##VIP到期时间 -def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9() -def SetVIPExpireTime(curPlayer, expireTime): return curPlayer.SetExAttr9(expireTime) +def GetVIPExpireTime(curPlayer): return 0 +def SetVIPExpireTime(curPlayer, expireTime): return def GetValidVIPLV(curPlayer): # @return: 返回当前有效的VIP等级 # vipTime = GetVIPExpireTime(curPlayer) @@ -384,6 +374,12 @@ curPlayer.MapServer_QueryPlayerResult(0, 0, "DelItem", result, len(result)) return +def MapServerGiveAward(curPlayer, eventName, moneyInfo={}, itemList=[], drDict={}): + ## 地图给奖励 + result = str([eventName, moneyInfo, itemList, drDict]) + curPlayer.MapServer_QueryPlayerResult(0, 0, "GiveAward", result, len(result)) + return + ## 增加仙盟活跃 # @param curPlayer # @param successType: 成就类型 @@ -405,3 +401,48 @@ return ipyData.GetLimitLV() +# 因为MapServer玩家属性变更通知GameServer与功能开启通知触发时机有先后顺序,可能导致判断功能开启不准确,所以暂时记录该信息,临时用 +g_playerOpenFuncInfo = {} # 玩家触发功能开启功能ID信息,{playerID:[funcID, ...], ...} +## 功能是否可用,该函数并不能确保百分百正确,只能大致判断,仅判断部分条件,如包含未判断的条件则不能确保百分百正确 +def GetFuncCanUse(curPlayer, funcID): + playerID = curPlayer.GetPlayerID() + if playerID in g_playerOpenFuncInfo: + if funcID in g_playerOpenFuncInfo[playerID]: + return True + + ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID) + if not ipyData: + return False + + if ipyData.GetLimitLV() and ipyData.GetLimitLV() > curPlayer.GetLV(): + return False + + if ipyData.GetLimiRealmLV() and ipyData.GetLimiRealmLV() > curPlayer.GetOfficialRank(): + return False + + if ipyData.GetLimitVIPLV() and ipyData.GetLimitVIPLV() > curPlayer.GetVIPLv(): + return False + + return True + +def DoFuncOpenLogic(curPlayer, funcIDList): + global g_playerOpenFuncInfo + if GameWorld.IsCrossServer(): + return + playerID = curPlayer.GetPlayerID() + FuncOpenLogicDict = { + ShareDefine.GameFuncID_Championship:lambda curObj:CrossChampionship.DoChampionshipOpen(curObj), + ShareDefine.GameFuncID_MineArea:lambda curObj:GameWorldMineArea.DoMineAreaFuncOpen(curObj), + } + for funcID in funcIDList: + if funcID in FuncOpenLogicDict: + if playerID not in g_playerOpenFuncInfo: + g_playerOpenFuncInfo[playerID] = [] + openFuncIDList = g_playerOpenFuncInfo[playerID] + if funcID not in openFuncIDList: + openFuncIDList.append(funcID) + GameWorld.DebugLog("触发功能开启逻辑! funcID=%s" % funcID, playerID) + FuncOpenLogicDict[funcID](curPlayer) + return + + -- Gitblit v1.8.0