From bd120b98d0db43bc89c6734d3ed003f3971cf712 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 24 六月 2019 14:44:14 +0800
Subject: [PATCH] 6501 装备星数任务接口
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py | 101 +++++++++++++++++++-------------------------------
1 files changed, 38 insertions(+), 63 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index 36086f0..e35ab19 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -39,6 +39,7 @@
import PlayerCompensation
import IpyGameDataPY
import PyGameDataStruct
+import CrossRealmPlayer
import PyDataManager
import PlayerControl
import CrossRealmMsg
@@ -47,10 +48,9 @@
import PlayerGeTui
import IPY_GameServer
import CrossBoss
+import PlayerFB
import time
-
-
'''
ShareDefine.Def_UniversalGameRecType_BossInfo
@@ -103,12 +103,12 @@
if bossID <= 0:
return
- bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID = msgList
+ bossID, killPlayerName, hurtValue, isNotify, mapID, realMapID, copyMapID, killerIDList = msgList
+ mapID = PlayerFB.GetRecordMapID(mapID)
if GameWorld.IsCrossServer():
- CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID)
+ CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, mapID, realMapID, copyMapID, killerIDList)
return
- mapID = dataMapID
isAddKillCnt = False
isMapNeedShunt = IsMapNeedBossShunt(mapID)
@@ -159,13 +159,14 @@
## 世界boss状态变更
if len(msgList) <= 0:
return
-
- bossID, isAlive, dataMapID, realMapID, copyMapID = msgList
+
+ bossID, isAlive, mapID, realMapID, copyMapID = msgList
+ mapID = PlayerFB.GetRecordMapID(mapID)
if GameWorld.IsCrossServer():
- CrossBoss.DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID)
+ CrossBoss.DoCrossBossStateChange(bossID, isAlive, mapID, realMapID, copyMapID)
return
- mapID, lineID = dataMapID, copyMapID
+ lineID = copyMapID
GameWorld.Log("世界boss状态变更: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick))
if bossID <= 0:
@@ -322,7 +323,19 @@
def OnQueryBossInfo(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
bossIDList = clientData.BossIDList
- Sync_BossInfo(curPlayer, bossIDList)
+ if not bossIDList:
+ Sync_BossInfo(curPlayer)
+ CrossBoss.Sync_CrossBossInfo(curPlayer)
+ return
+ bossID = bossIDList[0]
+ ipyData = IpyGameDataPY.GetIpyGameData('BOSSInfo', bossID)
+ if not ipyData:
+ return
+ mapID = ipyData.GetMapID()
+ if mapID in ChConfig.Def_CrossMapIDList:
+ CrossBoss.Sync_CrossBossInfo(curPlayer, bossIDList)
+ else:
+ Sync_BossInfo(curPlayer, bossIDList)
return
@@ -483,9 +496,8 @@
isAlive = __GetIsAlive(bossID)
if not isAlive:
continue
- mapID = ipyData.GetMapID()
- if mapID != ChConfig.Def_FBMapID_SealDemon:
- GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID, 1)
+ #if mapID not in ChConfig.WorldBossFBMapIDList:
+ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID, 1)
return
## 玩家登录通知
@@ -502,7 +514,6 @@
state = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_OperationActionState % ShareDefine.OperationActionName_BossReborn)
if state:
Sync_BossRebornPoint(curPlayer)
- Sync_DogzNPCRefreshTime(curPlayer)
return
## 地图启动ok通知
@@ -517,10 +528,6 @@
if IsMapNeedBossShunt(0):
GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntPlayer, PyGameData.g_bossShuntPlayerInfo)
GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntLineState, PyGameData.g_bossShuntLineState)
- #通知一个参数
- bossID = IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2)
- onlineCnt = __GetBossOnlineHeroCnt(bossID)[0]
- GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_BossOnlineHeroCnt % bossID, onlineCnt)
#仙盟击杀骑宠boss数
if PyGameData.g_familyKillHorsePetRobBossCntDict:
@@ -541,9 +548,9 @@
def OnKillBossDropGoodItem(msgList, tick):
# playerName, mapID, npcID, itemID, userData
- if len(msgList) != 8:
+ if len(msgList) != 10:
return
- playerID, killerName, mapID, npcID, itemID, userData, weightValue, serverGroupID = msgList
+ playerID, killerName, mapID, lineID, npcID, itemID, userData, weightValue, serverGroupID, playerLV = msgList
GameWorld.DebugLog("击杀Boss掉落好物品: mapID=%s,npcID=%s,killerName=%s,itemID=%s, userData=%s, weightValue=%s, serverGroupID=%s"
% (mapID, npcID, killerName, itemID, userData, weightValue, serverGroupID))
maxRecordCnt = IpyGameDataPY.GetFuncCfg('DropRecordNum')
@@ -554,7 +561,11 @@
# 同步到玩家对应子服
if not serverGroupID:
return
- CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_DropGoodItem, msgList, [serverGroupID])
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
+ if not zoneIpyData:
+ return
+ serverGroupIDList = zoneIpyData.GetServerGroupIDList()
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_DropGoodItem, msgList, serverGroupIDList)
return
recType = ShareDefine.Def_UniversalGameRecType_BossDropGoodItemInfo
@@ -584,10 +595,10 @@
if commonList and commonList[0][0] != -1:
recordList.Delete(commonList[0][0])
- PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, [mapID, npcID, itemID, playerID, weightValue],
- [killerName, "", userData])
+ PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, [mapID*100+lineID, npcID, itemID, playerID, weightValue],
+ [killerName, '%s|%s'%(serverGroupID, playerLV), userData])
- msgList = [killerName, playerID, mapID, npcID, itemID, userData]
+ msgList = [killerName, playerID, mapID, npcID, itemID, userData, serverGroupID, playerLV, lineID]
PlayerControl.WorldNotify(0, 'DropRecord' , msgList)
return
@@ -655,8 +666,6 @@
newNum = newOnlieCnt * 100 + unUpdataCnt
PlayerDBGSEvent.SetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_GameWorldBossOnlineCnt % bossid, newNum)
- if bossid == IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2):
- GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_BossOnlineHeroCnt % bossid, newOnlieCnt)
GameWorld.DebugLog("设置计算boss刷新时间用的在线人数 Change:bossid=%s, beforeOnlineCnt = %s, newOnlieCnt = %s, unUpdataCnt=%s" % (bossid, beforeOnlineCnt, newOnlieCnt, unUpdataCnt))
return
@@ -719,6 +728,7 @@
def GetBossAttentionDict(self):
return self.bossAttentionDict
+ # RecordData改json记录 bossid存为字符串
def UpdateBossAttention(self, playerid, bossid, isAdd):
if playerid in self.bossAttentionDict:
bossAttentionData = self.bossAttentionDict[playerid]
@@ -760,7 +770,7 @@
packData.BossList = []
for bossid, addState in bttentionDict.items():
bossInfo = ChPyNetSendPack.tagGCBossAttention()
- bossInfo.BossID=bossid
+ bossInfo.BossID=int(bossid)
bossInfo.AddState=addState
packData.BossList.append(bossInfo)
@@ -792,10 +802,7 @@
data.clear()
pos += data.readData(datas, pos, dataslen)
playerID = data.PlayerID
- if type(eval(data.RecordData)) != list:
- self.bossAttentionDict[playerID] = data
- else:
- data.clear()
+ self.bossAttentionDict[playerID] = data
return pos
@@ -1080,38 +1087,6 @@
packData.RebornCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornCnt)
playerManager = GameWorld.GetPlayerManager()
if not curPlayer:
- for i in xrange(playerManager.GetActivePlayerCount()):
- curPlayer = playerManager.GetActivePlayerAt(i)
- if curPlayer == None or not curPlayer.GetInitOK():
- continue
- if PlayerControl.GetIsTJG(curPlayer):
- continue
- NetPackCommon.SendFakePack(curPlayer, packData)
- else:
- if PlayerControl.GetIsTJG(curPlayer):
- return
- NetPackCommon.SendFakePack(curPlayer, packData)
- return
-
-def Sync_DogzNPCRefreshTime(curPlayer=None):
- #同步神兽副本NPC刷新时间
- refreshTimeDict = PyGameData.g_dogzNPCRefreshTimeDict
-
- if not refreshTimeDict:
- return
- curTime = int(time.time())
- packData = ChPyNetSendPack.tagGCDogzNPCRefreshTime()
- packData.InfoList=[]
- for npcid, timeinfo in refreshTimeDict.items():
- lastRefreshTime, nextNeedTime = timeinfo
- remainTime = max(0, nextNeedTime - curTime + lastRefreshTime)
- timeInfo = ChPyNetSendPack.tagDogzTimeInfoObj()
- timeInfo.NPCID = npcid
- timeInfo.RefreshSecond = remainTime
- packData.InfoList.append(timeInfo)
- packData.Cnt = len(packData.InfoList)
- if not curPlayer:
- playerManager = GameWorld.GetPlayerManager()
for i in xrange(playerManager.GetActivePlayerCount()):
curPlayer = playerManager.GetActivePlayerAt(i)
if curPlayer == None or not curPlayer.GetInitOK():
--
Gitblit v1.8.0