From 67bcc2ab06912fc3d9cf31ceae533da76e50d5ae Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 20 九月 2019 14:19:55 +0800
Subject: [PATCH] 8258 【后端】BOSS首杀
---
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini | 6
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 20 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerAward.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 56 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 108 ++++++++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearRec.py | 2
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 56 ++++
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py | 119 +++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 108 ++++++++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 23 +
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 7
PySysDB/PySysDBPY.h | 9
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py | 182 ++++++++++++++
PySysDB/PySysDBG.h | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 5
20 files changed, 719 insertions(+), 9 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 773614f..9542deb 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -209,6 +209,14 @@
char SourceName; //BOSS来源
};
+//Boss首杀
+
+struct tagBOSSFirstKill
+{
+ DWORD _NPCID; //ID
+ list ServerFirstKillPlayerAward; // 全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
+};
+
//宴会题库表
struct tagQuestionBank
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 5824311..6a28fd8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -909,6 +909,15 @@
DWORD StoneNPCID; //墓碑NPCID
};
+//Boss首杀
+
+struct tagBOSSFirstKill
+{
+ DWORD _NPCID; //ID
+ WORD PerPlayerMoneyAward; // 首杀全服玩家奖励灵石额度/人
+ list PersonFirstKillAward; // 个人首次击杀奖励 [[物品ID,个数,是否拍品], ...]
+};
+
//古神禁地表
struct tagElderGodArea
diff --git a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
index ab46a7a..a05a72c 100644
--- a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
+++ b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -312,7 +312,7 @@
Writer = xdh
Releaser = xdh
RegType = 0
-RegisterPackCount = 4
+RegisterPackCount = 5
PacketCMD_1=0xA9
PacketSubCMD_1=0x03
@@ -330,6 +330,10 @@
PacketSubCMD_4=0x04
PacketCallFunc_4=OnQueryBossInfo
+PacketCMD_5=0xA9
+PacketSubCMD_5=0x01
+PacketCallFunc_5=OnGetBossFirstKillAward
+
[GameWorldItem]
ScriptName = GameWorldLogic\GameWorldItem.py
Writer = hxp
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index b680926..6ab6842 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -830,7 +830,7 @@
Def_GiveMoney_Warehouse, # 仓库
Def_GiveMoney_SellPackItem, # 出售背包物品
Def_GiveMoney_CollectNPC, # 采集NPC
-Def_GiveMoney_20,
+Def_GiveMoney_BossFirstKill, # Boss首杀
Def_GiveMoney_21,
Def_GiveMoney_Trade, # 交易
Def_GiveMoney_Truck, # 运镖
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 5b4630e..c9a1ace 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1248,6 +1248,62 @@
#------------------------------------------------------
+# A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
+
+class tagCGGetBossFirstKillAward(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("NPCID", c_int),
+ ("AwardType", c_ubyte), # 0-首杀红包奖励;1-个人首杀奖励
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA9
+ self.SubCmd = 0x01
+ 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 = 0xA9
+ self.SubCmd = 0x01
+ self.NPCID = 0
+ self.AwardType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGGetBossFirstKillAward)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward:
+ Cmd:%s,
+ SubCmd:%s,
+ NPCID:%d,
+ AwardType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.NPCID,
+ self.AwardType
+ )
+ return DumpString
+
+
+m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward
+
+
+#------------------------------------------------------
# A9 04 查询boss信息 #tagCGQueryBossInfo
class tagCGQueryBossInfo(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index cf75829..83ba1f1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -27052,6 +27052,114 @@
#------------------------------------------------------
+# AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
+
+class tagMCBossFirstKillState(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("NPCID", c_int),
+ ("FKState", c_int), # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
+ ]
+
+ def __init__(self):
+ self.Clear()
+ 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.NPCID = 0
+ self.FKState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCBossFirstKillState)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
+ NPCID:%d,
+ FKState:%d
+ '''\
+ %(
+ self.NPCID,
+ self.FKState
+ )
+ return DumpString
+
+
+class tagMCBossFirstKillStateInfo(Structure):
+ Head = tagHead()
+ BossCount = 0 #(BYTE BossCount)
+ FirstKillStateList = list() #(vector<tagMCBossFirstKillState> FirstKillStateList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAB
+ self.Head.SubCmd = 0x01
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.BossCount):
+ temFirstKillStateList = tagMCBossFirstKillState()
+ _pos = temFirstKillStateList.ReadData(_lpData, _pos)
+ self.FirstKillStateList.append(temFirstKillStateList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAB
+ self.Head.SubCmd = 0x01
+ self.BossCount = 0
+ self.FirstKillStateList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.BossCount):
+ length += self.FirstKillStateList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.BossCount)
+ for i in range(self.BossCount):
+ data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ BossCount:%d,
+ FirstKillStateList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.BossCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
+
+
+#------------------------------------------------------
# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
class tagMCBossRebornData(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
index c7e35b6..faed2a0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
@@ -70,7 +70,7 @@
PlayerBillboard.ClearBillboardByIndex(oscBillboardType)
# 清除Rec
- delRecTypeList = []
+ delRecTypeList = [ShareDefine.Def_UniversalGameRecType_BossFirstKill]
universalRecMgr = GameWorld.GetUniversalRecMgr()
for recType in delRecTypeList:
universalRecMgr.Delete(recType)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearRec.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearRec.py
index 9fd1cab..d0adcc6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearRec.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearRec.py
@@ -25,7 +25,7 @@
def OnExec(curPlayer, gmList):
if not gmList:
GameWorld.DebugAnswer(curPlayer, "ClearRec 记录类型")
- GameWorld.DebugAnswer(curPlayer, " 全服寻宝-34")
+ GameWorld.DebugAnswer(curPlayer, "31-Boss首杀,34-全服寻宝")
return
recType = gmList[0]
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index 5b1da6b..135c987 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -47,12 +47,21 @@
import PyGameData
import PlayerGeTui
import IPY_GameServer
+import PlayerTeam
import CrossBoss
import PlayerFB
import time
+''' boss首杀
+ShareDefine.Def_UniversalGameRecType_BossFirstKill
+value1:bossID
+StrValue2:killedTimeStr
+StrValue3:playerName|playerName|...
'''
+
+
+''' boss击杀信息
ShareDefine.Def_UniversalGameRecType_BossInfo
value1:bossID
value2:killedTime
@@ -140,6 +149,9 @@
horsePetRobBossIDList = IpyGameDataPY.GetFuncEvalCfg("FairyGrabBossID", 1)
if bossID in horsePetRobBossIDList:
OnFamilyKillHorsePetRobBoss(killPlayerName)
+
+ # boss首杀
+ OnBossFirstKill(bossID, killerIDList)
return
def __UpdateBossRefreshList(bossID, killedTime=0, refreshTime=0):
@@ -1249,3 +1261,110 @@
PlayerControl.FamilyNotify(curFamily.GetID(), "FairyGrabBossHelp", [curPlayer.GetName(), npcID])
return
+## -------------------------------------- boss 首杀 ------------------------------------------------
+def __GetBossFirstKillRecDataList():
+ ## 获取boss首杀记录信息列表
+ return GameWorld.GetUniversalRecMgr() .GetTypeList(ShareDefine.Def_UniversalGameRecType_BossFirstKill)
+
+def __GetBossFirstKillRecDataByID(bossID):
+ ## 获取boss首杀记录信息数据
+
+ recTypeListData = __GetBossFirstKillRecDataList()
+ # 查找是否已有记录
+ bossFirstKillRec = None
+ for index in xrange(recTypeListData.Count()):
+ universalRecData = recTypeListData.At(index)
+ if universalRecData.GetValue1() == bossID:
+ bossFirstKillRec = universalRecData
+ break
+
+ if bossFirstKillRec == None:
+ #还未记录,则添加一个记录对象
+ bossFirstKillRec = recTypeListData.AddRec()
+ bossFirstKillRec.SetValue1(bossID)
+
+ return bossFirstKillRec
+
+def OnBossFirstKill(bossID, killerIDList):
+ ## 处理boss首杀逻辑
+
+ maxOSDay = IpyGameDataPY.GetFuncCfg("OSCBossFirstKill", 1)
+ openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+ if openServerDay > maxOSDay:
+ GameWorld.DebugLog("超过开服天(%s), 不开放首杀活动!" % maxOSDay)
+ return
+
+ if not bossID or not killerIDList:
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", bossID)
+ if not ipyData:
+ return
+
+ fkRecData = __GetBossFirstKillRecDataByID(bossID)
+ if not fkRecData:
+ return
+
+ firstKillTimeStr = fkRecData.GetStrValue2()
+ if firstKillTimeStr:
+ GameWorld.DebugLog("已经首杀过了! bossID=%s, %s" % (bossID, firstKillTimeStr))
+ return
+
+ killPlayerList = []
+ playerMgr = GameWorld.GetPlayerManager()
+ for playerID in killerIDList:
+ player = playerMgr.FindPlayerByID(playerID)
+ if not player:
+ continue
+ teamMemLV = PlayerTeam.__GetPlayerTeamLV(player)
+ killPlayerList.append([teamMemLV, player.GetName()])
+ if not killPlayerList:
+ return
+
+ killPlayerList.sort(reverse=True)
+ fkPlayerNameList = [nameInfo[1] for nameInfo in killPlayerList]
+
+ fkRecData.SetStrValue2(GameWorld.GetCurrentDataTimeStr())
+ fkRecData.SetStrValue3(",".join(fkPlayerNameList))
+
+ # 首杀奖励邮件
+ PlayerCompensation.SendMailByKey("BossFirstKillMail", killerIDList, ipyData.GetServerFirstKillPlayerAward(), [bossID])
+
+ ## 主动广播全服玩家
+ PlayerUniversalGameRec.SendUniversalGameRecSingle(None, fkRecData)
+ return
+
+
+#// A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
+#
+#struct tagCGGetBossFirstKillAward
+#{
+# tagHead Head;
+# DWORD NPCID;
+# BYTE AwardType; // 0-首杀红包奖励;1-个人首杀奖励
+#};
+def OnGetBossFirstKillAward(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ bossID = clientData.NPCID
+ awardType = clientData.AwardType
+
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", bossID)
+ if not ipyData:
+ return
+
+ if awardType == 0:
+ fkRecData = __GetBossFirstKillRecDataByID(bossID)
+ if not fkRecData:
+ return
+
+ firstKillTimeStr = fkRecData.GetStrValue2()
+ if not firstKillTimeStr:
+ GameWorld.DebugLog("Boss还未首杀,不能领取boss首杀公共红包奖励! bossID=%s" % (bossID), curPlayer.GetPlayerID())
+ return
+
+ msgInfo = str([bossID, awardType])
+ curPlayer.MapServer_QueryPlayerResult(0, 0, "BossFirstKill", msgInfo, len(msgInfo))
+ return
+
+## ------------------------------------------------------------------------------------------------
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index b4d2e6f..1d35e5c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -192,6 +192,11 @@
("char", "SourceName", 0),
),
+ "BOSSFirstKill":(
+ ("DWORD", "NPCID", 1),
+ ("list", "ServerFirstKillPlayerAward", 0),
+ ),
+
"QuestionBank":(
("DWORD", "ID", 1),
("char", "Answer", 0),
@@ -886,6 +891,17 @@
def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
def GetRebornPreNotifyTime(self): return self.RebornPreNotifyTime # 复活前X秒通知
def GetSourceName(self): return self.SourceName # BOSS来源
+
+# Boss首杀
+class IPY_BOSSFirstKill():
+
+ def __init__(self):
+ self.NPCID = 0
+ self.ServerFirstKillPlayerAward = []
+ return
+
+ def GetNPCID(self): return self.NPCID # ID
+ def GetServerFirstKillPlayerAward(self): return self.ServerFirstKillPlayerAward # 全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
# 宴会题库表
class IPY_QuestionBank():
@@ -1689,6 +1705,8 @@
self.ipyChinMapLen = len(self.ipyChinMapCache)
self.ipyBOSSInfoCache = self.__LoadFileData("BOSSInfo", IPY_BOSSInfo)
self.ipyBOSSInfoLen = len(self.ipyBOSSInfoCache)
+ self.ipyBOSSFirstKillCache = self.__LoadFileData("BOSSFirstKill", IPY_BOSSFirstKill)
+ self.ipyBOSSFirstKillLen = len(self.ipyBOSSFirstKillCache)
self.ipyQuestionBankCache = self.__LoadFileData("QuestionBank", IPY_QuestionBank)
self.ipyQuestionBankLen = len(self.ipyQuestionBankCache)
self.ipyFamilyRedPackCache = self.__LoadFileData("FamilyRedPack", IPY_FamilyRedPack)
@@ -1953,6 +1971,8 @@
def GetChinMapByIndex(self, index): return self.ipyChinMapCache[index]
def GetBOSSInfoCount(self): return self.ipyBOSSInfoLen
def GetBOSSInfoByIndex(self, index): return self.ipyBOSSInfoCache[index]
+ def GetBOSSFirstKillCount(self): return self.ipyBOSSFirstKillLen
+ def GetBOSSFirstKillByIndex(self, index): return self.ipyBOSSFirstKillCache[index]
def GetQuestionBankCount(self): return self.ipyQuestionBankLen
def GetQuestionBankByIndex(self, index): return self.ipyQuestionBankCache[index]
def GetFamilyRedPackCount(self): return self.ipyFamilyRedPackLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e15e43c..8e13cd9 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1040,8 +1040,8 @@
Def_UniversalGameRecType_27,
Def_UniversalGameRecType_28,
Def_UniversalGameRecType_BossInfo, # boss信息29
- Def_UniversalGameRecType_CrossBossInfo, # 跨服boss信息
- Def_UniversalGameRecType_31,
+ Def_UniversalGameRecType_CrossBossInfo, # 跨服boss信息 30
+ Def_UniversalGameRecType_BossFirstKill, # boss首杀 31
Def_UniversalGameRecType_32,
Def_UniversalGameRecType_33,
Def_UniversalGameRecType_34,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c811fcd..a29c2d1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3666,6 +3666,9 @@
Def_PDict_BRActionGotTimes = "BRActionGotTimes_%s" #当前已领次数 参数BOSS复活活动ID
Def_PDict_BRActionWorldLV = "BRActionWorldLV" #BOSS复活活动开启时世界等级
+#Boss首杀
+Def_PDict_BossFirstKillState = "BossFirstKillState_%s" # boss首杀相关状态记录
+
#仙界盛典
Def_PDict_FairyCeremonyID = "FairyCeremonyID" # 玩家身上的仙界盛典活动ID,唯一标识,取活动开始日期time值
Def_PDict_FCActionWorldLV = "FCActionWorldLV" #玩家身上的仙界盛典时的世界等级
@@ -4751,7 +4754,7 @@
Def_GiveMoney_Warehouse, # 仓库
Def_GiveMoney_SellPackItem, # 出售背包物品
Def_GiveMoney_CollectNPC, # 采集NPC
-Def_GiveMoney_20,
+Def_GiveMoney_BossFirstKill, # Boss首杀
Def_GiveMoney_21,
Def_GiveMoney_Trade, # 交易
Def_GiveMoney_Truck, # 运镖
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 5b4630e..c9a1ace 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -1248,6 +1248,62 @@
#------------------------------------------------------
+# A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
+
+class tagCGGetBossFirstKillAward(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("NPCID", c_int),
+ ("AwardType", c_ubyte), # 0-首杀红包奖励;1-个人首杀奖励
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA9
+ self.SubCmd = 0x01
+ 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 = 0xA9
+ self.SubCmd = 0x01
+ self.NPCID = 0
+ self.AwardType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGGetBossFirstKillAward)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward:
+ Cmd:%s,
+ SubCmd:%s,
+ NPCID:%d,
+ AwardType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.NPCID,
+ self.AwardType
+ )
+ return DumpString
+
+
+m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward
+
+
+#------------------------------------------------------
# A9 04 查询boss信息 #tagCGQueryBossInfo
class tagCGQueryBossInfo(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index cf75829..83ba1f1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -27052,6 +27052,114 @@
#------------------------------------------------------
+# AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
+
+class tagMCBossFirstKillState(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("NPCID", c_int),
+ ("FKState", c_int), # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
+ ]
+
+ def __init__(self):
+ self.Clear()
+ 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.NPCID = 0
+ self.FKState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCBossFirstKillState)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
+ NPCID:%d,
+ FKState:%d
+ '''\
+ %(
+ self.NPCID,
+ self.FKState
+ )
+ return DumpString
+
+
+class tagMCBossFirstKillStateInfo(Structure):
+ Head = tagHead()
+ BossCount = 0 #(BYTE BossCount)
+ FirstKillStateList = list() #(vector<tagMCBossFirstKillState> FirstKillStateList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAB
+ self.Head.SubCmd = 0x01
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.BossCount):
+ temFirstKillStateList = tagMCBossFirstKillState()
+ _pos = temFirstKillStateList.ReadData(_lpData, _pos)
+ self.FirstKillStateList.append(temFirstKillStateList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAB
+ self.Head.SubCmd = 0x01
+ self.BossCount = 0
+ self.FirstKillStateList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.BossCount):
+ length += self.FirstKillStateList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.BossCount)
+ for i in range(self.BossCount):
+ data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ BossCount:%d,
+ FirstKillStateList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.BossCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
+
+
+#------------------------------------------------------
# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
class tagMCBossRebornData(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerAward.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerAward.py
index 1012701..fda51d0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerAward.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerAward.py
@@ -26,6 +26,7 @@
import OpenServerCampaign
import ClearFirstGold
import PlayerOnlinePrize
+import GY_Query_BossFirstKill
#---------------------------------------------------------------------
## 执行逻辑
# @param curPlayer 当前玩家
@@ -49,6 +50,9 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_EndMailState, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, 0)
+ #boss首杀
+ GY_Query_BossFirstKill.OnGMResetBossFirstKillState(curPlayer)
+
if len(cmdList) == 0:
for i in ShareDefine.Def_Campaign_Type_List:
__DoOSCReset(curPlayer, i)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index f7c3a8e..4017062 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -744,6 +744,12 @@
("DWORD", "StoneNPCID", 0),
),
+ "BOSSFirstKill":(
+ ("DWORD", "NPCID", 1),
+ ("WORD", "PerPlayerMoneyAward", 0),
+ ("list", "PersonFirstKillAward", 0),
+ ),
+
"ElderGodArea":(
("DWORD", "NPCID", 1),
("BYTE", "MonsterAnger", 0),
@@ -2978,6 +2984,19 @@
def GetRelatedID(self): return self.RelatedID # 关联ID
def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
+# Boss首杀
+class IPY_BOSSFirstKill():
+
+ def __init__(self):
+ self.NPCID = 0
+ self.PerPlayerMoneyAward = 0
+ self.PersonFirstKillAward = []
+ return
+
+ def GetNPCID(self): return self.NPCID # ID
+ def GetPerPlayerMoneyAward(self): return self.PerPlayerMoneyAward # 首杀全服玩家奖励灵石额度/人
+ def GetPersonFirstKillAward(self): return self.PersonFirstKillAward # 个人首次击杀奖励 [[物品ID,个数,是否拍品], ...]
+
# 古神禁地表
class IPY_ElderGodArea():
@@ -4707,6 +4726,8 @@
self.ipyAlchemyResultLen = len(self.ipyAlchemyResultCache)
self.ipyBOSSInfoCache = self.__LoadFileData("BOSSInfo", IPY_BOSSInfo)
self.ipyBOSSInfoLen = len(self.ipyBOSSInfoCache)
+ self.ipyBOSSFirstKillCache = self.__LoadFileData("BOSSFirstKill", IPY_BOSSFirstKill)
+ self.ipyBOSSFirstKillLen = len(self.ipyBOSSFirstKillCache)
self.ipyElderGodAreaCache = self.__LoadFileData("ElderGodArea", IPY_ElderGodArea)
self.ipyElderGodAreaLen = len(self.ipyElderGodAreaCache)
self.ipyPersonalBossCache = self.__LoadFileData("PersonalBoss", IPY_PersonalBoss)
@@ -5173,6 +5194,8 @@
def GetAlchemyResultByIndex(self, index): return self.ipyAlchemyResultCache[index]
def GetBOSSInfoCount(self): return self.ipyBOSSInfoLen
def GetBOSSInfoByIndex(self, index): return self.ipyBOSSInfoCache[index]
+ def GetBOSSFirstKillCount(self): return self.ipyBOSSFirstKillLen
+ def GetBOSSFirstKillByIndex(self, index): return self.ipyBOSSFirstKillCache[index]
def GetElderGodAreaCount(self): return self.ipyElderGodAreaLen
def GetElderGodAreaByIndex(self, index): return self.ipyElderGodAreaCache[index]
def GetPersonalBossCount(self): return self.ipyPersonalBossLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 6ff5ef8..a1b5b03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -44,6 +44,7 @@
import PlayerActivity
import PlayerSuccess
import BossHurtMng
+import GY_Query_BossFirstKill
import GameLogic_FamilyInvade
import GameLogic_GatherSoul
import FormulaControl
@@ -2370,6 +2371,12 @@
elif mapID == ChConfig.Def_FBMapID_CrossPenglai:
#跨服蓬莱仙境
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai)
+
+ # 个人首杀记录
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", npcID)
+ if ipyData:
+ GY_Query_BossFirstKill.SetPlayerFirstKillBoss(curPlayer, npcID)
+
return
#################################################
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 a19af85..0cd43f2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -103,6 +103,7 @@
import PlayerSpringSale
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import GY_Query_BossFirstKill
import PlayerFeastRedPacket
import PlayerLuckyTreasure
import Item_ResetAttrPoint
@@ -711,6 +712,8 @@
PlayerFB.OnLogin(curPlayer)
#技能专精信息
SkillShell.NotifyElementSkillInfo(curPlayer)
+ #Boss首杀
+ GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py
new file mode 100644
index 0000000..e62d046
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_BossFirstKill.py
@@ -0,0 +1,182 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_BossFirstKill
+#
+# @todo:Boss首杀
+# @author hxp
+# @date 2019-09-20
+# @version 1.0
+#
+# 详细描述: Boss首杀
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2019-09-20 14:00"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import PlayerControl
+import IpyGameDataPY
+import IPY_GameWorld
+import ItemControler
+import ChPyNetSendPack
+import NetPackCommon
+import ShareDefine
+import ItemCommon
+
+# boss首杀状态位定义
+(
+BossFKState_IsKill, # 是否已经击杀过该boss
+BossFKState_PubAward, # 是否领取过全服首杀奖励
+BossFKState_PriAward, # 是否领取过个人首杀奖励
+) = range(3)
+
+def OnPlayerLogin(curPlayer):
+ maxBossFKDay = IpyGameDataPY.GetFuncCfg("OSCBossFirstKill", 1)
+ openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+ if openServerDay > maxBossFKDay:
+ return
+
+ Sync_BossFirstKillState(curPlayer, [])
+ return
+
+def SetPlayerFirstKillBoss(curPlayer, bossID):
+ fkState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossFirstKillState % bossID)
+ if GameWorld.GetDataByDigitPlace(fkState, BossFKState_IsKill):
+ GameWorld.DebugLog("已经击杀过该boss!")
+ return
+ updFKState = GameWorld.ChangeDataByDigitPlace(fkState, BossFKState_IsKill, 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossFirstKillState % bossID, updFKState)
+ GameWorld.DebugLog("设置首杀过该boss: bossID=%s,fkState=%s,updFKState=%s" % (bossID, fkState, updFKState))
+ Sync_BossFirstKillState(curPlayer, [bossID])
+ return
+
+#------------------------------------------------------------------------------
+## 跨服赛报名调用接口
+# @param query_Type 请求类型
+# @param query_ID 请求的玩家ID
+# @param packCMDList 发包命令
+# @param tick 当前时间
+# @return "True" or "False" or ""
+# @remarks 函数详细说明.
+def DoLogic(query_Type, query_ID, packCMDList, tick):
+ return
+
+
+#------------------------------------------------------------------------------
+## 执行结果
+# @param curPlayer 发出请求的玩家
+# @param callFunName 功能名称
+# @param funResult 查询的结果
+# @param tick 当前时间
+# @return None
+# @remarks 函数详细说明.
+def DoResult(curPlayer, callFunName, funResult, tick):
+ bossID, awardType = eval(funResult)
+ GameWorld.DebugLog("GY_Query_BossFirstKill bossID=%s, awardType=%s" % (bossID, awardType), curPlayer.GetPlayerID())
+ if not curPlayer:
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", bossID)
+ if not ipyData:
+ return
+
+ if awardType == 0:
+ __DoGiveBossFirstKill_PubAward(curPlayer, bossID, ipyData)
+ elif awardType == 1:
+ __DoGiveBossFirstKill_PriAward(curPlayer, bossID, ipyData)
+
+ return
+
+def __DoGiveBossFirstKill_PubAward(curPlayer, bossID, ipyData):
+ ## 首杀全服公共奖励
+
+ bitIndex = BossFKState_PubAward
+ fkState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossFirstKillState % bossID)
+ if GameWorld.GetDataByDigitPlace(fkState, bitIndex):
+ GameWorld.DebugLog("已经领取过该首杀全服奖励!fkState=%s,bitIndex=%s" % (fkState, bitIndex))
+ return
+ updFKState = GameWorld.ChangeDataByDigitPlace(fkState, bitIndex, 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossFirstKillState % bossID, updFKState)
+ GameWorld.DebugLog("更新Boss首杀全服奖励领奖记录!fkState=%s,bitIndex=%s,updFKState=%s"
+ % (fkState, bitIndex, updFKState))
+
+ awardGoldPaper = ipyData.GetPerPlayerMoneyAward()
+ addDataDict = {"bossID":bossID}
+ PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, awardGoldPaper, ChConfig.Def_GiveMoney_BossFirstKill, addDataDict)
+ Sync_BossFirstKillState(curPlayer, [bossID])
+ return
+
+def __DoGiveBossFirstKill_PriAward(curPlayer, bossID, ipyData):
+ ## 个人首杀奖励
+
+ fkState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossFirstKillState % bossID)
+ if not GameWorld.GetDataByDigitPlace(fkState, BossFKState_IsKill):
+ GameWorld.DebugLog("还未击杀过该boss,无法领取个人首杀奖励!fkState=%s,bitIndex=%s" % (fkState, BossFKState_IsKill))
+ return
+
+ awardItemList = ipyData.GetPersonFirstKillAward()
+ needSpace = len(awardItemList)
+ emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
+ if emptySpace < needSpace:
+ PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_202580")
+ return
+
+ bitIndex = BossFKState_PriAward
+ if GameWorld.GetDataByDigitPlace(fkState, bitIndex):
+ GameWorld.DebugLog("已经领取过该个人首杀奖励!fkState=%s,bitIndex=%s" % (fkState, bitIndex))
+ return
+ updFKState = GameWorld.ChangeDataByDigitPlace(fkState, bitIndex, 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossFirstKillState % bossID, updFKState)
+ GameWorld.DebugLog("更新Boss首杀个人奖励领奖记录!fkState=%s,bitIndex=%s,updFKState=%s"
+ % (fkState, bitIndex, updFKState))
+
+ for itemID, itemCount, isAuctionItem in awardItemList:
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
+
+ Sync_BossFirstKillState(curPlayer, [bossID])
+ return
+
+def Sync_BossFirstKillState(curPlayer, syncBossIDList=[], isForce=False):
+ if not syncBossIDList:
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetBOSSFirstKillCount()):
+ ipyData = ipyDataMgr.GetBOSSFirstKillByIndex(index)
+ syncBossIDList.append(ipyData.GetNPCID())
+
+ firstKillStateList = []
+ for bossID in syncBossIDList:
+ fkState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossFirstKillState % bossID)
+ if not fkState and not isForce:
+ continue
+ fkStatePack = ChPyNetSendPack.tagMCBossFirstKillState()
+ fkStatePack.NPCID = bossID
+ fkStatePack.FKState = fkState
+ firstKillStateList.append(fkStatePack)
+
+ if not firstKillStateList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCBossFirstKillStateInfo()
+ clientPack.FirstKillStateList = firstKillStateList
+ clientPack.BossCount = len(clientPack.FirstKillStateList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+def OnGMResetBossFirstKillState(curPlayer):
+ syncBossIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetBOSSFirstKillCount()):
+ ipyData = ipyDataMgr.GetBOSSFirstKillByIndex(index)
+ bossID = ipyData.GetNPCID()
+ fkState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossFirstKillState % bossID)
+ if not fkState:
+ continue
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossFirstKillState % bossID, 0)
+ syncBossIDList.append(bossID)
+ Sync_BossFirstKillState(curPlayer, syncBossIDList, isForce=True)
+ return
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e15e43c..8e13cd9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1040,8 +1040,8 @@
Def_UniversalGameRecType_27,
Def_UniversalGameRecType_28,
Def_UniversalGameRecType_BossInfo, # boss信息29
- Def_UniversalGameRecType_CrossBossInfo, # 跨服boss信息
- Def_UniversalGameRecType_31,
+ Def_UniversalGameRecType_CrossBossInfo, # 跨服boss信息 30
+ Def_UniversalGameRecType_BossFirstKill, # boss首杀 31
Def_UniversalGameRecType_32,
Def_UniversalGameRecType_33,
Def_UniversalGameRecType_34,
--
Gitblit v1.8.0