From d8cf06e323dca770512529f741a667278c0c8786 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 07 一月 2019 17:38:57 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(进入跨服地图通用逻辑)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 6 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py | 75 ++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py | 21 +++
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py | 25 ++-
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 32 +++++
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 12 ++
PySysDB/PySysDBPY.h | 12 ++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 6 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 15 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 10 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py | 84 ++++++++++++++
14 files changed, 269 insertions(+), 44 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 6ab6cee..b97f526 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1442,6 +1442,18 @@
list SeasonDanLVAwardList; //赛季段位奖励物品列表
};
+//跨服Boss蓬莱仙境分区表
+
+struct tagCrossPenglaiZone
+{
+ BYTE _ZoneID; //分区ID
+ list ServerGroupIDList; //服务器组ID列表
+ DWORD MapID; //场景地图ID
+ BYTE CopyMapID; //虚拟线路ID
+ WORD PosX; //坐标X
+ WORD PosY; //坐标Y
+};
+
//聚魂表
struct tagGatherSoul
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index 24383be..f9d1fcf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -636,7 +636,7 @@
Def_PlayerKey_IsStopSendDBCommand = "StopSendDBCom" #是否停止发送数据库操作命令
Def_PlayerKey_SendDBComTick = "SendDBComTick" #发送DB命令时间
-Def_PlayerKey_MergeRegisterType = "MergeRegisterType" #当前上传数据的活动类型
+Def_PlayerKey_CrossRegisterType = "CrossRegisterType" #当前上传数据的活动类型
Def_PlayerKey_MergeRegisterRoomID = "MergeRegisterRoomID" #当前上传数据的roomID
Def_PlayerKey_IsLoginToMergeServer = "IsLoginToMergeServer" #是否要登陆跨服服务器
Def_PlayerKey_IsCrossPKMatching = "IsCrossPKMatching" #是否跨服匹配中
@@ -680,6 +680,10 @@
Def_FBMapID_ChaosDemon = 31180
#娲皇遗迹
Def_FBMapID_QueenRelics = 51010
+#跨服竞技场
+Def_FBMapID_CrossRealmPK = 32010
+#跨服蓬莱仙境
+Def_FBMapID_CrossPenglai = 32020
#同系职业枚举
JOB_TYPY_COUNT = 5
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
index 6a9ef00..a49ec94 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -1702,7 +1702,6 @@
def CrossServerMsg_PKMatchResult(vsRoomDict):
## 跨服PK匹配结果
curServerGroupID = GameWorld.GetServerGroupID()
- actionType = ShareDefine.Def_CrossAction_PK
mapPosList = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKMatch", 5)
GameWorld.DebugLog("=== 收到PK匹配结果处理 === curServerGroupID=%s" % curServerGroupID)
if not mapPosList:
@@ -1727,7 +1726,7 @@
PlayerControl.SetVsRoomId(player, roomID, True)
# 通知地图玩家匹配成功, 上传数据, 准备进入跨服服务器
posX, posY = mapPosList[i] if len(mapPosList) > i else mapPosList[0]
- CrossRealmPlayer.SendCrossRealmReg(player, actionType, mapID, mapID, 0, posX, posY)
+ CrossRealmPlayer.SendCrossRealmReg(player, ChConfig.Def_FBMapID_CrossRealmPK, mapID, mapID, 0, posX, posY)
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
index adbe385..3937a1b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -132,15 +132,15 @@
PlayerControl.SetCrossRealmState(curPlayer, 0)
return
-def SendCrossRealmReg(curPlayer, actionType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
+def SendCrossRealmReg(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
# 发送跨服账号注册上传数据
# 设置上传数据的活动类型
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MergeRegisterType, actionType)
- sysMsg = str([actionType, mapID, dataMapID, copyMapID, posX, posY])
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType)
+ sysMsg = str([registerType, mapID, dataMapID, copyMapID, posX, posY])
curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossRealmReg", sysMsg, len(sysMsg))
- GameWorld.Log("SendCrossRealmReg actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s"
- % (actionType, mapID, dataMapID, copyMapID, posX, posY), curPlayer.GetPlayerID())
+ GameWorld.Log("SendCrossRealmReg registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s"
+ % (registerType, mapID, dataMapID, copyMapID, posX, posY), curPlayer.GetPlayerID())
return
def OnCrossRealmRegOK(playerID, msgList, tick):
@@ -153,13 +153,16 @@
if not IsCrossServerOpen():
return
- #newAccount, newName = msgList
+ registerType = msgList[0]
+ playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
+ if playerRegisterType and registerType != playerRegisterType:
+ return
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0)
- actionType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterType)
- GameWorld.Log("跨服报名成功 , actionType=%s" % (actionType), playerID)
+ GameWorld.Log("跨服报名成功 , registerType=%s" % (registerType), playerID)
# 跨服PK上传数据完毕,通知跨服服务器,准备完毕
- if actionType == ShareDefine.Def_CrossAction_PK:
+ if registerType == ChConfig.Def_FBMapID_CrossRealmPK:
regVSRoomID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterRoomID)
vsRoomID = curPlayer.GetVsRoomId()
@@ -178,13 +181,13 @@
# 其他的,在上传数据完毕后,使用通用的通知可进入跨服
else:
- NotifyCanEnterMergeServer(curPlayer, actionType)
+ NotifyCanEnterMergeServer(curPlayer, registerType)
# hxp 2015.09.10 跨服boss,后面的暂时不需要
return
-def NotifyCanEnterMergeServer(curPlayer, actionType):
+def NotifyCanEnterMergeServer(curPlayer, registerType):
# 通用包,通知客户端可进入跨服服务器
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index b1b8424..62a0a18 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1206,12 +1206,6 @@
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
-# 跨服活动类型
-(
-Def_CrossAction_PK, # 跨服匹配PK
-Def_CrossAction_Penglai, # 跨服蓬莱仙境
-) = range(2)
-
#角色改名结果
(
Def_Rename_Result_MoneyErr, # 金钱不足
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 923646a..ba09622 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -373,9 +373,9 @@
PacketSubCMD_8=0x03
PacketCallFunc_8=PySetAdult
-PacketCMD_9=
-PacketSubCMD_9=
-PacketCallFunc_9=
+PacketCMD_9=C1
+PacketSubCMD_9=05
+PacketCallFunc_9=OnEnterCrossServer
PacketCMD_10=0xB4
PacketSubCMD_10=0x04
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9f58909..f5f6b9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1790,6 +1790,12 @@
Def_FBMapID_GatherSoul = 31340
#跨服竞技场
Def_FBMapID_CrossRealmPK = 32010
+#跨服蓬莱仙境
+Def_FBMapID_CrossPenglai = 32020
+
+#注册上传跨服服务器数据后直接进入跨服服务器的地图
+RegisterEnter_CrossServerMapIDList = [Def_FBMapID_CrossPenglai]
+
#副本关闭时未拾取的物品邮件发放给玩家
#这里只有需要的副本才配置,不做默认逻辑,防止某些副本实际不能给导致刷物品,如麒麟之府
Def_SendUnPickItemMailMapIDList = [Def_FBMapID_IceLode, Def_FBMapID_PersonalBoss, Def_FBMapID_MunekadoTrial,
@@ -1878,6 +1884,7 @@
'XMZZ':[Def_FBMapID_XMZZ], #仙魔之争
'Dogz':[Def_FBMapID_Dogz], #神兽副本
'CrossRealmPK':[Def_FBMapID_CrossRealmPK], #跨服竞技场
+ 'CrossPenglai':[Def_FBMapID_CrossPenglai], #跨服蓬莱仙境
'GatherSoul':[Def_FBMapID_GatherSoul],#聚魂副本
}
@@ -3216,6 +3223,7 @@
Def_PlayerKey_CalcAddAttrType = "CalcAType_%s_%s_%s" # 刷属性类型, 参数[funcIndex, attrIndex, 缓存编号]
Def_PlayerKey_CalcAddAttrValue = "CalcAValue_%s_%s_%s" # 刷属性值, 参数[funcIndex, attrIndex, 缓存编号]
+Def_PlayerKey_CrossRegisterType = "CrossRegisterType" #跨服注册活动类型
Def_PlayerKey_IsCrossPKMatching = "IsCrossPKMatching" #是否跨服匹配中
Def_PDict_QueryTechLVUPState = "QueryTechLVUPState" # 查询科技等级提升状态
@@ -3397,8 +3405,6 @@
Def_Player_Dict_HasVIPClubNote = 'HasVIPClubNote_186' # 是否提示过vip升级可加入贵宾俱乐部信息
Def_Player_Dict_PyPlayerAction = 'PyPlayerAction_187' # py自定义玩家状态
Def_Player_Dict_FamilyLV = 'FamilyLV_189' # 玩家帮会等级
-Def_Player_Dict_MergeWarRegisterTime = 'MergeWarRegisterTime_190' # 上传数据至万国服务器cd
-Def_Player_Dict_MergeRegisterTime = 'MergeRegisterTime%s_194' # 活动的上传数据时间
Def_Player_UpdatePlayerNameCnt = "UpdatePlayerNameCnt_196" # 角色改名次数
Def_Player_Dict_UpdatePlayerNameItemIndex = "UpdatePlayerNameItemIndex_198" # 改名物品在背包的位置
Def_Player_Dict_UpdatePlayerName = "UpdatePlayerName_199" # 改名锁
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py
new file mode 100644
index 0000000..4e847df
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldLogic.FBProcess.GameLogic_CrossPenglai
+#
+# @todo:蓬莱仙境(跨服异兽之地)
+# @author hxp
+# @date 2019-01-07
+# @version 1.0
+#
+# 详细描述: 蓬莱仙境(跨服异兽之地)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2019-01-07 18:00"""
+#-------------------------------------------------------------------------------
+
+import IPY_GameWorld
+import GameWorld
+
+
+## 查询地图是否开启
+# @param tick 时间戳
+# @return 布尔值
+def OnCanOpen(tick):
+ return True
+
+## 是否能够通过活动查询进入
+# @param curPlayer 玩家实例
+# @param mapID 地图ID
+# @param lineID 线路id
+# @param tick 时间戳
+# @return 布尔值
+def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
+ return True
+
+##查询是否可以进入地图
+# @param ask:请求结构体(IPY_BMChangeMapAsk)
+# @param tick:时间戳
+# @return IPY_GameWorld.cme 枚举
+def OnChangeMapAsk(ask, tick):
+ return IPY_GameWorld.cmeAccept
+
+## 进副本
+# @param curPlayer
+# @param tick
+# @return None
+def DoEnterFB(curPlayer, tick):
+ GameWorld.DebugLog("DoEnterFB", curPlayer.GetPlayerID())
+ return
+
+
+## 开始采集
+# @param curPlayer 当前玩家
+# @param curNPC 当前NPC
+# @return None or False
+# @remarks 函数详细说明.
+def OnBeginCollect(curPlayer, curNPC):
+ return
+
+
+## 收集中
+def OnCollecting(curPlayer, tick):
+ return
+
+
+##玩家收集成功(塔, 旗)
+# @param curPlayer 玩家实例
+# @param tick 时间戳
+# @return 无意义
+# @remarks
+def OnCollectOK(curPlayer, npcID, tick):
+ return
+
+
+##---副本总逻辑计时器---
+# @param tick:时间戳
+# @return 无意义
+# @remarks 副本总逻辑计时器
+def OnProcess(tick):
+ return
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 683dc1c..2825e23 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1139,6 +1139,15 @@
("list", "SeasonDanLVAwardList", 0),
),
+ "CrossPenglaiZone":(
+ ("BYTE", "ZoneID", 1),
+ ("list", "ServerGroupIDList", 0),
+ ("DWORD", "MapID", 0),
+ ("BYTE", "CopyMapID", 0),
+ ("WORD", "PosX", 0),
+ ("WORD", "PosY", 0),
+ ),
+
"GatherSoul":(
("DWORD", "ItemID", 1),
("list", "AttrType", 0),
@@ -3505,6 +3514,25 @@
def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表
def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表
+# 跨服Boss蓬莱仙境分区表
+class IPY_CrossPenglaiZone():
+
+ def __init__(self):
+ self.ZoneID = 0
+ self.ServerGroupIDList = []
+ self.MapID = 0
+ self.CopyMapID = 0
+ self.PosX = 0
+ self.PosY = 0
+ return
+
+ def GetZoneID(self): return self.ZoneID # 分区ID
+ def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器组ID列表
+ def GetMapID(self): return self.MapID # 场景地图ID
+ def GetCopyMapID(self): return self.CopyMapID # 虚拟线路ID
+ def GetPosX(self): return self.PosX # 坐标X
+ def GetPosY(self): return self.PosY # 坐标Y
+
# 聚魂表
class IPY_GatherSoul():
@@ -3835,6 +3863,8 @@
self.ipyGodWeaponEffectLen = len(self.ipyGodWeaponEffectCache)
self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan)
self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache)
+ self.ipyCrossPenglaiZoneCache = self.__LoadFileData("CrossPenglaiZone", IPY_CrossPenglaiZone)
+ self.ipyCrossPenglaiZoneLen = len(self.ipyCrossPenglaiZoneCache)
self.ipyGatherSoulCache = self.__LoadFileData("GatherSoul", IPY_GatherSoul)
self.ipyGatherSoulLen = len(self.ipyGatherSoulCache)
self.ipyGatherSoulCompoundCache = self.__LoadFileData("GatherSoulCompound", IPY_GatherSoulCompound)
@@ -4225,6 +4255,8 @@
def GetGodWeaponEffectByIndex(self, index): return self.ipyGodWeaponEffectCache[index]
def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen
def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index]
+ def GetCrossPenglaiZoneCount(self): return self.ipyCrossPenglaiZoneLen
+ def GetCrossPenglaiZoneByIndex(self, index): return self.ipyCrossPenglaiZoneCache[index]
def GetGatherSoulCount(self): return self.ipyGatherSoulLen
def GetGatherSoulByIndex(self, index): return self.ipyGatherSoulCache[index]
def GetGatherSoulCompoundCount(self): return self.ipyGatherSoulCompoundLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
index 1c58de8..6aa5ef7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
@@ -336,6 +336,27 @@
def NPCRefresh_98(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
def NPCRefresh_99(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
def NPCRefresh_100(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_180(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_181(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_182(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_183(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_184(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_185(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_186(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_187(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_188(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_189(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_190(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_191(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_192(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_193(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_194(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_195(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_196(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_197(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_198(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_199(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_200(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
def ResetActivityBossRefreshCount():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index df300e4..6cba5b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -4275,6 +4275,18 @@
#---------------------------------------------------------------------
#---------------------------------------------------------------------
+#// C1 05 进入跨服地图 #tagCMEnterCrossServer
+#
+#struct tagCMEnterCrossServer
+#{
+# tagHead Head;
+# DWORD DataMapID;
+#};
+def OnEnterCrossServer(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID)
+ return
+
#===============================================================================
# //03 21 进入副本活动#tagCEnterFbGameEvent
# tagCEnterFbGameEvent * GettagCEnterFbGameEvent();
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 815c4d8..8b53f37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -81,6 +81,7 @@
import PlayerRefineStove
import PlayerFamilyTech
import PlayerCostRebate
+import GY_Query_CrossRealmReg
import PlayerFairyCeremony
import PlayerCrossRealmPK
import FunctionNPCCommon
@@ -1566,6 +1567,20 @@
#---------------------------------------------------------------------
+def PlayerEnterCrossServer(curPlayer, mapID):
+ playerID = curPlayer.GetPlayerID()
+ GameWorld.Log("玩家请求进入跨服地图: mapID=%s" % (mapID), playerID)
+ if GameWorld.IsCrossServer():
+ GameWorld.DebugLog("跨服服务器不允许该操作!")
+ return
+
+ if not CrossRealmPlayer.IsCrossServerOpen():
+ NotifyCode(curPlayer, "CrossMatching18")
+ return
+
+ GY_Query_CrossRealmReg.RegisterEnterCrossServer(curPlayer, mapID)
+ return
+
##玩家进入副本
# @param curPlayer 玩家实例
# @param mapID 地图ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
index 98d7d21..f3ff343 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
@@ -19,7 +19,10 @@
import PlayerControl
import CrossRealmPlayer
import IPY_GameWorld
-import ChPlayer
+import ChPyNetSendPack
+import NetPackCommon
+import IpyGameDataPY
+import ChConfig
#------------------------------------------------------------------------------
@@ -44,29 +47,66 @@
# @remarks 函数详细说明.
def DoResult(curPlayer, callFunName, funResult, tick):
resultInfo = eval(funResult)
- actionType = resultInfo[0]
- mapPosInfo = resultInfo[1:]
- if not curPlayer:
+ GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, curPlayer.GetPlayerID())
+ if not resultInfo:
return
-
- playerID = curPlayer.GetPlayerID()
- GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, playerID)
+ registerType, mapID, dataMapID, copyMapID, posX, posY = resultInfo
+ RegisterEnterCrossServer(curPlayer, registerType, mapID, dataMapID, copyMapID, posX, posY)
+ return
+def RegisterEnterCrossServer(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
+ playerID = curPlayer.GetPlayerID()
if GameWorld.IsCrossServer():
GameWorld.Log(" 跨服服务器不允许上传报名数据!", playerID)
return
- if not mapPosInfo:
+ playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
+ if playerRegisterType in ChConfig.RegisterEnter_CrossServerMapIDList:
+ GameWorld.ErrLog("跨服已经在上传数据,不重复提交!playerRegisterType=%s,registerType=%s" % (playerRegisterType, registerType), curPlayer.GetPlayerID())
+ return
+
+ if not mapID:
+ if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
+ registerTableName = "CrossPenglaiZone"
+ else:
+ return
+ RegisterMapInfo = GetCurServerGroupIDRegisterMapInfo(registerTableName)
+ if not RegisterMapInfo:
+ GameWorld.ErrLog("找不到该服务器对应跨服分区: registerType=%s,registerTableName=%s" % (registerType, registerTableName))
+ return
+ mapID, copyMapID, posX, posY = RegisterMapInfo
+ dataMapID = mapID
+
+ if not mapID:
return
#跨服前更新自己所属服务器组ID
PlayerControl.UpdPlayerServerGroupID(curPlayer)
- mapID, dataMapID, copyMapID, posX, posY = mapPosInfo
+ if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
+ prepareEnterCrossServer = ChPyNetSendPack.tagMCPrepareEnterCrossServer()
+ prepareEnterCrossServer.DataMapID = registerType
+ NetPackCommon.SendFakePack(curPlayer, prepareEnterCrossServer)
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType)
#curPlayer.SendMergeRegisterPlayer(mapID, dataMapID, copyMapID, posX, posY)
curPlayer.SendMergeRegisterPlayerAfterChange(CrossRealmPlayer.GetCrossPlayerName(curPlayer), mapID, dataMapID, copyMapID, posX, posY)
- GameWorld.Log(" 发送跨服玩家数据注册: actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s"
- % (actionType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
+ GameWorld.Log(" 发送跨服玩家数据注册: registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s"
+ % (registerType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
+ return
+
+def GetCurServerGroupIDRegisterMapInfo(tableName):
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
+ return
+
+ serverGroupID = GameWorld.GetServerGroupID()
+ for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
+ ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
+ serverGroupIDList = ipyData.GetServerGroupIDList()
+ for serverGroupIDInfo in serverGroupIDList:
+ if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
+ or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
+ return ipyData.GetMapID(), ipyData.GetCopyMapID(), ipyData.GetPosX(), ipyData.GetPosY()
return
## 跨服赛报名结果(上传数据)
@@ -76,19 +116,28 @@
def GameServer_MergeRegisterResult(index, tick):
registerResult = IPY_GameWorld.IPY_GMMergeRegisterPlayerResult()
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ registerType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0)
playerID = curPlayer.GetPlayerID()
result = registerResult.GetResult()
+ GameWorld.Log("GameServer_MergeRegisterResult registerType=%s,result=%s" % (registerType, result), playerID)
if not result:
errorMsg = registerResult.GetErrorMsg()
GameWorld.Log("CrossRealmReg result Error:%s" % errorMsg, playerID)
+ NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCEnterCrossServerError())
+ return
+
+ if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
+ CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
+ PlayerControl.SetCrossRealmState(curPlayer, 1)
+ NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer())
return
#newAccount = registerResult.GetAccount()
#newName = registerResult.GetPwd()
- msgList = str([])
+ msgList = str([registerType])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList))
- GameWorld.Log("GameServer_MergeRegisterResult msgList=%s" % msgList, playerID)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index b1b8424..62a0a18 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1206,12 +1206,6 @@
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
-# 跨服活动类型
-(
-Def_CrossAction_PK, # 跨服匹配PK
-Def_CrossAction_Penglai, # 跨服蓬莱仙境
-) = range(2)
-
#角色改名结果
(
Def_Rename_Result_MoneyErr, # 金钱不足
--
Gitblit v1.8.0