From acd10dbd77f496e0e4be494c089c08e066085ab4 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 07 九月 2018 10:11:12 +0800
Subject: [PATCH] fix:3320 【后端】前3次宗门试炼1层和前2个大境界渡劫的世界喊话特殊处理(按等级随机邀请入队)
---
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 56 ++++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 42 ++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 56 ++++++++++++++++++
4 files changed, 159 insertions(+), 1 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
index ed48a02..3a5b702 100644
--- a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
+++ b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -269,7 +269,7 @@
Writer = hxp
Releaser = hxp
RegType = 0
-RegisterPackCount = 9
+RegisterPackCount = 10
PacketCMD_1=0xB9
PacketSubCMD_1=0x01
@@ -307,6 +307,10 @@
PacketSubCMD_9=0x10
PacketCallFunc_9=OnQueryTeamMemFuncData
+PacketCMD_10=0xB9
+PacketSubCMD_10=0x0A
+PacketCallFunc_10=OnInvitePlayerJoinTeamByLV
+
[PlayerViewCache]
ScriptName = Player\PlayerViewCache.py
Writer = alee
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 246d65a..a919a41 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -2644,6 +2644,62 @@
#------------------------------------------------------
+# B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
+
+class tagCGInvitePlayerJoinTeamByLV(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("LVLimit", c_ushort), # 目标玩家大于等于此等级
+ ("InviteCnt", c_ubyte), # 邀请玩家个数
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB9
+ self.SubCmd = 0x0A
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB9
+ self.SubCmd = 0x0A
+ self.LVLimit = 0
+ self.InviteCnt = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGInvitePlayerJoinTeamByLV)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV:
+ Cmd:%s,
+ SubCmd:%s,
+ LVLimit:%d,
+ InviteCnt:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.LVLimit,
+ self.InviteCnt
+ )
+ return DumpString
+
+
+m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV
+
+
+#------------------------------------------------------
# B9 05 查询推荐组队的附近玩家 #tagCGQueryRecommendNearbyPlayer
class tagCGQueryRecommendNearbyPlayer(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index 51fec2d..61308d2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -31,6 +31,7 @@
import copy
import time
+import random
#---------------------------------------------------------------------
TeamFBAskType_Match = 0 # 组队副本进入询问类型 - 匹配
@@ -2915,3 +2916,44 @@
SyncTeamEnterFBPrepareInfo(curTeam, askMapID, askMapEx, memStateDict, True)
return
+#// B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
+#
+#struct tagCGInvitePlayerJoinTeamByLV
+#{
+# tagHead Head;
+# WORD LVLimit; // 目标玩家大于等于此等级
+# BYTE InviteCnt; // 邀请玩家个数
+#};
+def OnInvitePlayerJoinTeamByLV(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ lvlimit = clientData.LVLimit
+ inviteCnt = clientData.InviteCnt
+
+ curPlayerTeam = curPlayer.GetTeam()
+ if not curPlayerTeam:
+ return
+ curInviteCnt = 0 #当前邀请数量
+ playerManager = GameWorld.GetPlayerManager()
+ playerCount = playerManager.GetActivePlayerCount()
+ if playerCount < 2:
+ return
+ indexList = range(playerCount)
+ random.shuffle(indexList)
+ for i in indexList:
+ tagPlayer = playerManager.GetActivePlayerAt(i)
+ if tagPlayer == None or not tagPlayer.GetInitOK():
+ continue
+ if PlayerControl.GetIsTJG(tagPlayer):
+ continue
+ if tagPlayer.GetPlayerID() == curPlayer.GetPlayerID():
+ continue
+ if tagPlayer.GetLV() < lvlimit:
+ continue
+ if tagPlayer.GetTeam():
+ continue
+ if InvitePlayerJoinTeamReq(curPlayer, tagPlayer, curPlayerTeam, tick):
+ curInviteCnt +=1
+ if curInviteCnt >= inviteCnt:
+ break
+
+ return
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 246d65a..a919a41 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -2644,6 +2644,62 @@
#------------------------------------------------------
+# B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
+
+class tagCGInvitePlayerJoinTeamByLV(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("LVLimit", c_ushort), # 目标玩家大于等于此等级
+ ("InviteCnt", c_ubyte), # 邀请玩家个数
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB9
+ self.SubCmd = 0x0A
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB9
+ self.SubCmd = 0x0A
+ self.LVLimit = 0
+ self.InviteCnt = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGInvitePlayerJoinTeamByLV)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV:
+ Cmd:%s,
+ SubCmd:%s,
+ LVLimit:%d,
+ InviteCnt:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.LVLimit,
+ self.InviteCnt
+ )
+ return DumpString
+
+
+m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV
+
+
+#------------------------------------------------------
# B9 05 查询推荐组队的附近玩家 #tagCGQueryRecommendNearbyPlayer
class tagCGQueryRecommendNearbyPlayer(Structure):
--
Gitblit v1.8.0