From 0494d4903383737139445b11e525a9e2ca583801 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 21 二月 2019 16:47:35 +0800
Subject: [PATCH] 6268 【后端】【1.6.100】增加道具七日巡礼积分和节日巡礼积分支持
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py | 93 ++++++++++++++++++++++++++++++++++++++--------
1 files changed, 77 insertions(+), 16 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
index 4c13c2d..ec3f786 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -36,20 +36,13 @@
return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
-def GetServerCrossZoneIpyData(mapID, serverGroupID=0):
- ## 获取本服对应跨服玩法分区地图信息
- if mapID not in ChConfig.Def_CrossZoneTableName:
+def GetCrossCommZoneIpyDataByServerGroupID(serverGroupID):
+ ## 获取跨服常规分区
+ crossZoneName = GameWorld.GetCrossZoneName()
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZoneComm", {"CrossZoneName":crossZoneName}, True)
+ if not ipyDataList:
return
- if not serverGroupID:
- serverGroupID = GameWorld.GetServerGroupID()
-
- tableName = ChConfig.Def_CrossZoneTableName[mapID]
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
- return
-
- for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
- ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
+ for ipyData in ipyDataList:
serverGroupIDList = ipyData.GetServerGroupIDList()
for serverGroupIDInfo in serverGroupIDList:
if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
@@ -57,9 +50,75 @@
return ipyData
return
+def GetServerCrossZoneMapIpyData(mapID, serverGroupID=0):
+ ## 获取本服对应跨服玩法分区地图信息
+ if mapID not in ChConfig.Def_CrossZoneMapTableName:
+ return
+ tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
+ if not serverGroupID:
+ if GameWorld.IsCrossServer():
+ return
+ serverGroupID = GameWorld.GetServerGroupID()
+ zoneIpyData = GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ if not zoneIpyData:
+ return
+ commZoneID = zoneIpyData.GetZoneID()
+ return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":commZoneID})
+
def IsCrossServerOpen():
## 跨服服务器是否开放中
return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
+
+def SetCrossPlayerAttrValue(curPlayer, setDict, isDelay=True):
+ ''' 批量设置玩家属性值
+ @param setDict: 设置属性字典 {attrName:attrValue, ...}
+ @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
+ '''
+ if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
+ return
+ playerID = curPlayer.GetPlayerID()
+ setType = "PlayerAttr"
+ msgList = str([playerID, setType, setDict, isDelay])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
+ GameWorld.DebugLog("更新跨服玩家属性: isDelay=%s,%s" % (isDelay, setDict), playerID)
+ return
+
+def SetCrossPlayerNomalDict(curPlayer, setDict, isDelay=True):
+ ''' 批量设置玩家字典值
+ @param setDict: 设置字典, 无 dictType 信息时默认类型0 {dictKey:dictValue, dictKey:[dictValue, dictType], ...}
+ @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
+ '''
+ if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
+ return
+ playerID = curPlayer.GetPlayerID()
+ setType = "PlayerDict"
+ msgList = str([playerID, setType, setDict, isDelay])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
+ GameWorld.DebugLog("更新跨服玩家字典: isDelay=%s,%s" % (isDelay, setDict), playerID)
+ return
+
+def ClientServerMsg_SetPlayerAttrValue(curPlayer, playerSetInfoList):
+ ## 收到子服同步的设置跨服玩家属性值
+ playerID = curPlayer.GetPlayerID()
+ GameWorld.DebugLog("收到子服同步的设置跨服玩家属性值: %s" % playerSetInfoList, playerID)
+ for setType, setDict in playerSetInfoList:
+ if setType == "PlayerDict":
+ for dictKey, valeInfo in setDict.items():
+ if isinstance(valeInfo, int):
+ dictValue, dictType = valeInfo, 0
+ else:
+ dictValue, dictType = valeInfo
+ PlayerControl.NomalDictSetProperty(curPlayer, dictKey, dictValue, dictType)
+ GameWorld.DebugLog(" NomalDictSetProperty dictKey=%s, dictValue=%s, dictType=%s" % (dictKey, dictValue, dictType), playerID)
+ else:
+ for attrName, attrValue in setDict.items():
+ if hasattr(curPlayer, attrName):
+ getattr(curPlayer, attrName)(attrValue)
+ GameWorld.DebugLog(" curPlayer.%s(%s)" % (attrName, attrValue))
+ elif hasattr(PlayerControl, attrName):
+ getattr(PlayerControl, attrName)(curPlayer, attrValue)
+ GameWorld.DebugLog(" PlayerControl.%s(curPlayer, %s)" % (attrName, attrValue), playerID)
+ return
#// C1 04 主动退出跨服 #tagCMExitCrossRealm
#
@@ -87,13 +146,14 @@
GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_ExitCrossServer, playerID, [serverGroupID])
# 设置非跨服状态,踢下线
- PlayerControl.SetCrossRealmState(curPlayer, 0)
+ PlayerControl.SetCrossMapID(curPlayer, 0)
curPlayer.Kick(IPY_GameWorld.disMapServerClose)
GameWorld.Log("PlayerExitCrossServer...", curPlayer.GetPlayerID())
return
def DoEnterCrossRealm(curPlayer):
## 玩家进入跨服处理,本服的逻辑处理
+ curPlayer.SetCanAttack(False)
curPlayer.SetVisible(False)
curPlayer.SetSight(0)
curPet = curPlayer.GetPetMgr().GetFightPet()
@@ -104,6 +164,7 @@
def DoExitCrossRealm(curPlayer):
## 玩家退出跨服处理,本服的逻辑处理
GameWorld.Log("DoExitCrossRealm...", curPlayer.GetPlayerID())
+ curPlayer.SetCanAttack(True)
curPlayer.SetVisible(True)
curPlayer.SetSight(1)
curPlayer.RefreshView()
@@ -112,6 +173,6 @@
curPet = curPlayer.GetPetMgr().GetFightPet()
if curPet:
curPet.SetVisible(True)
- if PlayerControl.GetCrossRealmState(curPlayer):
- PlayerControl.SetCrossRealmState(curPlayer, 0)
+ if PlayerControl.GetCrossMapID(curPlayer):
+ PlayerControl.SetCrossMapID(curPlayer, 0)
return
--
Gitblit v1.8.0