From ac4f3139e69d4671a46a299df51159f018a5da13 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 26 十一月 2019 11:35:00 +0800
Subject: [PATCH] 8346 【恺英】【后端】协助系统(封包、表)
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 340 ++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 248 +++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 7
PySysDB/PySysDBPY.h | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 340 ++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 6
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 248 +++++++++++
PySysDB/PySysDBG.h | 1
10 files changed, 1,200 insertions(+), 4 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 4daeb65..6a7d795 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -221,6 +221,7 @@
DWORD StoneNPCID; //墓碑NPCID
WORD RebornPreNotifyTime; //复活前X秒通知
char SourceName; //BOSS来源
+ BYTE CanAssist; //是否可协助
};
//Boss首杀
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 293b0a4..8f8aff0 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -932,6 +932,7 @@
BYTE RelatedType; //刷怪关联类型
WORD RelatedID; //关联ID
DWORD StoneNPCID; //墓碑NPCID
+ BYTE CanAssist; //是否可协助
};
//Boss首杀
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 1dd0089..c744f36 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1960,6 +1960,120 @@
#------------------------------------------------------
+# B0 13 取消协助Boss #tagCGCancelAssistBoss
+
+class tagCGCancelAssistBoss(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x13
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x13
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss
+
+
+#------------------------------------------------------
+# B0 15 领取协助感谢礼物 #tagCGGetAssistGift
+
+class tagCGGetAssistGift(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x15
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x15
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGGetAssistGift=tagCGGetAssistGift()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistGift.Head.Cmd,m_NAtagCGGetAssistGift.Head.SubCmd))] = m_NAtagCGGetAssistGift
+
+
+#------------------------------------------------------
#B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
class tagQueryFamilyArrestOverState(Structure):
@@ -2005,6 +2119,120 @@
m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState
+
+
+#------------------------------------------------------
+# B0 14 发送协助感谢礼物 #tagCGSendAssistGift
+
+class tagCGSendAssistGift(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x14
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x14
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGSendAssistGift=tagCGSendAssistGift()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGSendAssistGift.Head.Cmd,m_NAtagCGSendAssistGift.Head.SubCmd))] = m_NAtagCGSendAssistGift
+
+
+#------------------------------------------------------
+# B0 12 开始协助Boss #tagCGStartAssistBoss
+
+class tagCGStartAssistBoss(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x12
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x12
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGStartAssistBoss=tagCGStartAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss
#------------------------------------------------------
@@ -13940,6 +14168,118 @@
#------------------------------------------------------
+# B0 10 请求协助Boss #tagCMRequestAssistBoss
+
+class tagCMRequestAssistBoss(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ObjID", c_int),
+ ("NPCID", c_int),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB0
+ self.SubCmd = 0x10
+ 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 = 0xB0
+ self.SubCmd = 0x10
+ self.ObjID = 0
+ self.NPCID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMRequestAssistBoss)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B0 10 请求协助Boss //tagCMRequestAssistBoss:
+ Cmd:%s,
+ SubCmd:%s,
+ ObjID:%d,
+ NPCID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ObjID,
+ self.NPCID
+ )
+ return DumpString
+
+
+m_NAtagCMRequestAssistBoss=tagCMRequestAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistBoss.Cmd,m_NAtagCMRequestAssistBoss.SubCmd))] = m_NAtagCMRequestAssistBoss
+
+
+#------------------------------------------------------
+# B0 11 请求协助组队副本 #tagCMRequestAssistTeamFB
+
+class tagCMRequestAssistTeamFB(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MapID", c_ushort),
+ ("LineID", c_ushort),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB0
+ self.SubCmd = 0x11
+ 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 = 0xB0
+ self.SubCmd = 0x11
+ self.MapID = 0
+ self.LineID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMRequestAssistTeamFB)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B0 11 请求协助组队副本 //tagCMRequestAssistTeamFB:
+ Cmd:%s,
+ SubCmd:%s,
+ MapID:%d,
+ LineID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MapID,
+ self.LineID
+ )
+ return DumpString
+
+
+m_NAtagCMRequestAssistTeamFB=tagCMRequestAssistTeamFB()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistTeamFB.Cmd,m_NAtagCMRequestAssistTeamFB.SubCmd))] = m_NAtagCMRequestAssistTeamFB
+
+
+#------------------------------------------------------
# B0 05 开始世界传送 #tagCMWorldTransfer
class tagCMWorldTransfer(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index b5df0a7..58315ef 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -5778,6 +5778,254 @@
#------------------------------------------------------
+# B0 01 新增协助 #tagGCAssistInfoList
+
+class tagGCAssistInfo(Structure):
+ GUID = "" #(char GUID[40])
+ PlayerName = "" #(char PlayerName[33])
+ Job = 0 #(BYTE Job)
+ LV = 0 #(WORD LV)//等级
+ RealmLV = 0 #(BYTE RealmLV)//境界
+ AssistType = 0 #(BYTE AssistType)//协助类型 1-boss, 2-副本, 3-
+ AssistValue1 = 0 #(DWORD AssistValue1)//协助参数1,由协助类型决定
+ AssistValue2 = 0 #(DWORD AssistValue2)//协助参数2
+ AssistValue3 = 0 #(DWORD AssistValue3)//协助参数3
+ AssistValue4 = 0 #(DWORD AssistValue4)//协助参数4
+ AssistValue5 = 0 #(DWORD AssistValue5)//协助参数5
+ AssistDataLen = 0 #(WORD AssistDataLen)
+ AssistData = "" #(String AssistData)//其他自定义数据
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AssistType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AssistValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.AssistData,_pos = CommFunc.ReadString(_lpData, _pos,self.AssistDataLen)
+ return _pos
+
+ def Clear(self):
+ self.GUID = ""
+ self.PlayerName = ""
+ self.Job = 0
+ self.LV = 0
+ self.RealmLV = 0
+ self.AssistType = 0
+ self.AssistValue1 = 0
+ self.AssistValue2 = 0
+ self.AssistValue3 = 0
+ self.AssistValue4 = 0
+ self.AssistValue5 = 0
+ self.AssistDataLen = 0
+ self.AssistData = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 40
+ length += 33
+ length += 1
+ length += 2
+ length += 1
+ length += 1
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+ length += 2
+ length += len(self.AssistData)
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ data = CommFunc.WriteString(data, 33, self.PlayerName)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.RealmLV)
+ data = CommFunc.WriteBYTE(data, self.AssistType)
+ data = CommFunc.WriteDWORD(data, self.AssistValue1)
+ data = CommFunc.WriteDWORD(data, self.AssistValue2)
+ data = CommFunc.WriteDWORD(data, self.AssistValue3)
+ data = CommFunc.WriteDWORD(data, self.AssistValue4)
+ data = CommFunc.WriteDWORD(data, self.AssistValue5)
+ data = CommFunc.WriteWORD(data, self.AssistDataLen)
+ data = CommFunc.WriteString(data, self.AssistDataLen, self.AssistData)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ GUID:%s,
+ PlayerName:%s,
+ Job:%d,
+ LV:%d,
+ RealmLV:%d,
+ AssistType:%d,
+ AssistValue1:%d,
+ AssistValue2:%d,
+ AssistValue3:%d,
+ AssistValue4:%d,
+ AssistValue5:%d,
+ AssistDataLen:%d,
+ AssistData:%s
+ '''\
+ %(
+ self.GUID,
+ self.PlayerName,
+ self.Job,
+ self.LV,
+ self.RealmLV,
+ self.AssistType,
+ self.AssistValue1,
+ self.AssistValue2,
+ self.AssistValue3,
+ self.AssistValue4,
+ self.AssistValue5,
+ self.AssistDataLen,
+ self.AssistData
+ )
+ return DumpString
+
+
+class tagGCAssistInfoList(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ AssistInfoList = list() #(vector<tagGCAssistInfo> AssistInfoList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x01
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAssistInfoList = tagGCAssistInfo()
+ _pos = temAssistInfoList.ReadData(_lpData, _pos)
+ self.AssistInfoList.append(temAssistInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x01
+ self.Count = 0
+ self.AssistInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.AssistInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ AssistInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagGCAssistInfoList=tagGCAssistInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
+
+
+#------------------------------------------------------
+# B0 02 删除协助 #tagGCClearAssist
+
+class tagGCClearAssist(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x02
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x02
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagGCClearAssist=tagGCClearAssist()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
+
+
+#------------------------------------------------------
#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
class tagFamilyArrestOverState(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 421e496..75acbed 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -201,6 +201,7 @@
("DWORD", "StoneNPCID", 0),
("WORD", "RebornPreNotifyTime", 0),
("char", "SourceName", 0),
+ ("BYTE", "CanAssist", 0),
),
"BOSSFirstKill":(
@@ -923,7 +924,8 @@
self.NoUpdataCnt = 0
self.StoneNPCID = 0
self.RebornPreNotifyTime = 0
- self.SourceName = ""
+ self.SourceName = ""
+ self.CanAssist = 0
return
def GetNPCID(self): return self.NPCID # ID
@@ -934,7 +936,8 @@
def GetNoUpdataCnt(self): return self.NoUpdataCnt # 多少次未更新实时在线数量字段时强制更新
def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
def GetRebornPreNotifyTime(self): return self.RebornPreNotifyTime # 复活前X秒通知
- def GetSourceName(self): return self.SourceName # BOSS来源
+ def GetSourceName(self): return self.SourceName # BOSS来源
+ def GetCanAssist(self): return self.CanAssist # 是否可协助
# Boss首杀
class IPY_BOSSFirstKill():
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 1c964a5..b0d7e07 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1784,3 +1784,9 @@
2:[RedPackType_FeastSucc],
}
+# 协助类型
+AssistType = (
+AssistType_Boss,
+AssistType_TeamFB,
+) = range(1, 3)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 1dd0089..c744f36 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -1960,6 +1960,120 @@
#------------------------------------------------------
+# B0 13 取消协助Boss #tagCGCancelAssistBoss
+
+class tagCGCancelAssistBoss(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x13
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x13
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss
+
+
+#------------------------------------------------------
+# B0 15 领取协助感谢礼物 #tagCGGetAssistGift
+
+class tagCGGetAssistGift(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x15
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x15
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGGetAssistGift=tagCGGetAssistGift()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistGift.Head.Cmd,m_NAtagCGGetAssistGift.Head.SubCmd))] = m_NAtagCGGetAssistGift
+
+
+#------------------------------------------------------
#B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
class tagQueryFamilyArrestOverState(Structure):
@@ -2005,6 +2119,120 @@
m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState
+
+
+#------------------------------------------------------
+# B0 14 发送协助感谢礼物 #tagCGSendAssistGift
+
+class tagCGSendAssistGift(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x14
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x14
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGSendAssistGift=tagCGSendAssistGift()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGSendAssistGift.Head.Cmd,m_NAtagCGSendAssistGift.Head.SubCmd))] = m_NAtagCGSendAssistGift
+
+
+#------------------------------------------------------
+# B0 12 开始协助Boss #tagCGStartAssistBoss
+
+class tagCGStartAssistBoss(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x12
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x12
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagCGStartAssistBoss=tagCGStartAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss
#------------------------------------------------------
@@ -13940,6 +14168,118 @@
#------------------------------------------------------
+# B0 10 请求协助Boss #tagCMRequestAssistBoss
+
+class tagCMRequestAssistBoss(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ObjID", c_int),
+ ("NPCID", c_int),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB0
+ self.SubCmd = 0x10
+ 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 = 0xB0
+ self.SubCmd = 0x10
+ self.ObjID = 0
+ self.NPCID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMRequestAssistBoss)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B0 10 请求协助Boss //tagCMRequestAssistBoss:
+ Cmd:%s,
+ SubCmd:%s,
+ ObjID:%d,
+ NPCID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ObjID,
+ self.NPCID
+ )
+ return DumpString
+
+
+m_NAtagCMRequestAssistBoss=tagCMRequestAssistBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistBoss.Cmd,m_NAtagCMRequestAssistBoss.SubCmd))] = m_NAtagCMRequestAssistBoss
+
+
+#------------------------------------------------------
+# B0 11 请求协助组队副本 #tagCMRequestAssistTeamFB
+
+class tagCMRequestAssistTeamFB(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MapID", c_ushort),
+ ("LineID", c_ushort),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB0
+ self.SubCmd = 0x11
+ 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 = 0xB0
+ self.SubCmd = 0x11
+ self.MapID = 0
+ self.LineID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMRequestAssistTeamFB)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B0 11 请求协助组队副本 //tagCMRequestAssistTeamFB:
+ Cmd:%s,
+ SubCmd:%s,
+ MapID:%d,
+ LineID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MapID,
+ self.LineID
+ )
+ return DumpString
+
+
+m_NAtagCMRequestAssistTeamFB=tagCMRequestAssistTeamFB()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistTeamFB.Cmd,m_NAtagCMRequestAssistTeamFB.SubCmd))] = m_NAtagCMRequestAssistTeamFB
+
+
+#------------------------------------------------------
# B0 05 开始世界传送 #tagCMWorldTransfer
class tagCMWorldTransfer(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index b5df0a7..58315ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -5778,6 +5778,254 @@
#------------------------------------------------------
+# B0 01 新增协助 #tagGCAssistInfoList
+
+class tagGCAssistInfo(Structure):
+ GUID = "" #(char GUID[40])
+ PlayerName = "" #(char PlayerName[33])
+ Job = 0 #(BYTE Job)
+ LV = 0 #(WORD LV)//等级
+ RealmLV = 0 #(BYTE RealmLV)//境界
+ AssistType = 0 #(BYTE AssistType)//协助类型 1-boss, 2-副本, 3-
+ AssistValue1 = 0 #(DWORD AssistValue1)//协助参数1,由协助类型决定
+ AssistValue2 = 0 #(DWORD AssistValue2)//协助参数2
+ AssistValue3 = 0 #(DWORD AssistValue3)//协助参数3
+ AssistValue4 = 0 #(DWORD AssistValue4)//协助参数4
+ AssistValue5 = 0 #(DWORD AssistValue5)//协助参数5
+ AssistDataLen = 0 #(WORD AssistDataLen)
+ AssistData = "" #(String AssistData)//其他自定义数据
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AssistType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AssistValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistValue5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.AssistDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.AssistData,_pos = CommFunc.ReadString(_lpData, _pos,self.AssistDataLen)
+ return _pos
+
+ def Clear(self):
+ self.GUID = ""
+ self.PlayerName = ""
+ self.Job = 0
+ self.LV = 0
+ self.RealmLV = 0
+ self.AssistType = 0
+ self.AssistValue1 = 0
+ self.AssistValue2 = 0
+ self.AssistValue3 = 0
+ self.AssistValue4 = 0
+ self.AssistValue5 = 0
+ self.AssistDataLen = 0
+ self.AssistData = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 40
+ length += 33
+ length += 1
+ length += 2
+ length += 1
+ length += 1
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+ length += 2
+ length += len(self.AssistData)
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ data = CommFunc.WriteString(data, 33, self.PlayerName)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.RealmLV)
+ data = CommFunc.WriteBYTE(data, self.AssistType)
+ data = CommFunc.WriteDWORD(data, self.AssistValue1)
+ data = CommFunc.WriteDWORD(data, self.AssistValue2)
+ data = CommFunc.WriteDWORD(data, self.AssistValue3)
+ data = CommFunc.WriteDWORD(data, self.AssistValue4)
+ data = CommFunc.WriteDWORD(data, self.AssistValue5)
+ data = CommFunc.WriteWORD(data, self.AssistDataLen)
+ data = CommFunc.WriteString(data, self.AssistDataLen, self.AssistData)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ GUID:%s,
+ PlayerName:%s,
+ Job:%d,
+ LV:%d,
+ RealmLV:%d,
+ AssistType:%d,
+ AssistValue1:%d,
+ AssistValue2:%d,
+ AssistValue3:%d,
+ AssistValue4:%d,
+ AssistValue5:%d,
+ AssistDataLen:%d,
+ AssistData:%s
+ '''\
+ %(
+ self.GUID,
+ self.PlayerName,
+ self.Job,
+ self.LV,
+ self.RealmLV,
+ self.AssistType,
+ self.AssistValue1,
+ self.AssistValue2,
+ self.AssistValue3,
+ self.AssistValue4,
+ self.AssistValue5,
+ self.AssistDataLen,
+ self.AssistData
+ )
+ return DumpString
+
+
+class tagGCAssistInfoList(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ AssistInfoList = list() #(vector<tagGCAssistInfo> AssistInfoList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x01
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAssistInfoList = tagGCAssistInfo()
+ _pos = temAssistInfoList.ReadData(_lpData, _pos)
+ self.AssistInfoList.append(temAssistInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x01
+ self.Count = 0
+ self.AssistInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.AssistInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ AssistInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagGCAssistInfoList=tagGCAssistInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
+
+
+#------------------------------------------------------
+# B0 02 删除协助 #tagGCClearAssist
+
+class tagGCClearAssist(Structure):
+ Head = tagHead()
+ GUID = "" #(char GUID[40])
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x02
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB0
+ self.Head.SubCmd = 0x02
+ self.GUID = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 40
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 40, self.GUID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ GUID:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.GUID
+ )
+ return DumpString
+
+
+m_NAtagGCClearAssist=tagGCClearAssist()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
+
+
+#------------------------------------------------------
#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
class tagFamilyArrestOverState(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 562f2ec..b5de14f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -769,6 +769,7 @@
("BYTE", "RelatedType", 0),
("WORD", "RelatedID", 0),
("DWORD", "StoneNPCID", 0),
+ ("BYTE", "CanAssist", 0),
),
"BOSSFirstKill":(
@@ -3074,7 +3075,8 @@
self.IsNeedShunt = 0
self.RelatedType = 0
self.RelatedID = 0
- self.StoneNPCID = 0
+ self.StoneNPCID = 0
+ self.CanAssist = 0
return
def GetNPCID(self): return self.NPCID # ID
@@ -3083,7 +3085,8 @@
def GetIsNeedShunt(self): return self.IsNeedShunt # 是否需要分流
def GetRelatedType(self): return self.RelatedType # 刷怪关联类型
def GetRelatedID(self): return self.RelatedID # 关联ID
- def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
+ def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
+ def GetCanAssist(self): return self.CanAssist # 是否可协助
# Boss首杀
class IPY_BOSSFirstKill():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 1c964a5..b0d7e07 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1784,3 +1784,9 @@
2:[RedPackType_FeastSucc],
}
+# 协助类型
+AssistType = (
+AssistType_Boss,
+AssistType_TeamFB,
+) = range(1, 3)
+
--
Gitblit v1.8.0