From be1496bfd2b5e0d180e07e0f1a35aa3a741160f4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 18 四月 2022 16:14:38 +0800
Subject: [PATCH] 9553 【主干】【BT6】【BT6】【yn_1.0.1】【后端】新增下载奖励
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py | 82 ++++++++++++++++++++++++++++++++--------
1 files changed, 65 insertions(+), 17 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
index 1e4371b..dc0b47e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
@@ -12,7 +12,6 @@
#
# @change: "2011-02-23 14:20" panwei 系统提示函数重写
# @change: "2011-07-15 19:30" Alee 队伍通知
-# @change: "2011-09-02 16:20" panwei 新增竞技场设置和获取决斗值接口
# @change: "2012-11-06 15:00" jiang 新增竞威望设置和获取威望设接口
# @change: "2012-11-07 17:30" wdb 新增跨服预选赛排位信息
# @change: "2012-11-14 12:00" jiang 修改扩展属性字段记录的属性类型必须和MapServer一致
@@ -33,6 +32,7 @@
import IpyGameDataPY
import CrossRealmMsg
import ShareDefine
+import PyGameData
import ChConfig
import types
#---------------------------------------------------------------------
@@ -72,16 +72,47 @@
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_Notify, crossNotifyList, serverGroupIDList)
return
+def CrossNotifyEx(serverGroupIDList, crossNotifyList):
+ ''' 跨服广播信息提示,支持同步多条,同时也建议多条一起同步
+ @param serverGroupIDList: 需要同步到的目标服务器组ID列表
+ @param crossNotifyList: 信息提示列表,[[notifyType, paramsList, 自定义扩展信息], ...] notifyType 如 ShareDefine.CrossNotify_CrossAct
+ '''
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_Notify, crossNotifyList, serverGroupIDList)
+ return
+
def CrossServerMsg_Notify(crossNotifyList):
GameWorld.DebugLog("收到跨服同步的广播提示内容: count=%s" % len(crossNotifyList))
for notifyInfo in crossNotifyList:
- if "Type" not in notifyInfo or "Params" not in notifyInfo:
+ if isinstance(notifyInfo, dict):
+ if "Type" not in notifyInfo or "Params" not in notifyInfo:
+ continue
+ notifyType = notifyInfo["Type"]
+ params = notifyInfo["Params"]
+ elif isinstance(notifyInfo, list) and len(notifyInfo) >= 2:
+ notifyType, params = notifyInfo[:2]
+ else:
continue
- notifyType = notifyInfo["Type"]
- params = notifyInfo["Params"]
+
if notifyType == ShareDefine.CrossNotify_World:
country, msgMark, msgParamList = params
WorldNotify(country, msgMark, msgParamList)
+ elif notifyType == ShareDefine.CrossNotify_CrossAct:
+ country, msgMark, msgParamList = params
+ serverIDRangeList = notifyInfo[2]
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(i)
+ if curPlayer == None or not curPlayer.GetInitOK() or GetIsTJG(curPlayer):
+ continue
+ if not serverIDRangeList:
+ NotifyCode(curPlayer, msgMark, msgParamList)
+ return
+ playerServerID = GameWorld.GetPlayerServerID(curPlayer)
+ for serverIDA, serverIDB in serverIDRangeList:
+ if serverIDA <= playerServerID <= serverIDB:
+ NotifyCode(curPlayer, msgMark, msgParamList)
+ break
+
elif notifyType == ShareDefine.CrossNotify_Family:
familyID, msgMark, msgParamList = params
FamilyNotify(familyID, msgMark, msgParamList)
@@ -157,24 +188,24 @@
return NotifyCodeList
-
-
-#waring:以下使用的扩展属性字段记录的属性类型必须和MapServer一致
#------------------------------------------------------------------------------
-##设置决斗值(竞技场用)
-# @param curPlayer 玩家
-# @param value 数值
-# @return None
-def SetVsFightValue(curPlayer, value):
+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
-##获取决斗值(竞技场用)
-# @param curPlayer 玩家
-# @return 决斗值
-def GetVsFightValue(curPlayer):
- return 0
+def GetDBPlayerAccIDByID(playerID):
+ ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家
+ return PyGameData.g_dbPlayerIDMap.get(playerID, "")
+#waring:以下使用的扩展属性字段记录的属性类型必须和MapServer一致
#------------------------------------------------------------------------------
## 设置威望
# @param curPlayer: 玩家实例
@@ -190,6 +221,11 @@
def GetPrestige(curPlayer):
return 0
+##总战斗力
+def GetFightPower(curPlayer): return curPlayer.GetFightPowerEx() * ChConfig.Def_PerPointValue + curPlayer.GetFightPower()
+def SetFightPower(curPlayer, value):
+ curPlayer.SetFightPower(value % ChConfig.Def_PerPointValue, value / ChConfig.Def_PerPointValue)
+ return
#------------------------------------------------------------------------------
## 协助目标玩家ID
@@ -270,6 +306,18 @@
#------------------------------------------------------------------------------
+def MapServer_QueryPlayer_DoLogic(tagPlayer, callName, cmdInfo, srcPlayerID=0, queryType=0):
+ ## 通知目标玩家地图执行 DoLogic
+ tagPlayerID = tagPlayer.GetPlayerID()
+ tagMapID = tagPlayer.GetRealMapID()
+ if tagMapID:
+ cmdStr = str(cmdInfo)
+ GameWorld.Log("MapServer_QueryPlayer_DoLogic: %s, cmdInfo=%s,tagPlayerID=%s,tagMapID=%s"
+ % (callName, cmdInfo, tagPlayerID, tagMapID), srcPlayerID)
+ #MapServer_QueryPlayer(int srcPlayerID, int queryType, int queryID, int mapID, char *callName, char *cmd,WORD cmdLen, int RouteServerIndex)
+ GameWorld.GetPlayerManager().MapServer_QueryPlayer(srcPlayerID, 0, tagPlayerID, tagMapID, callName,
+ cmdStr, len(cmdStr), tagPlayer.GetRouteServerIndex())
+ return
## 增加成就完成进度
# @param curPlayer
--
Gitblit v1.8.0