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/Script/GameWorldLogic/GameWorldBoss.py | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 119 insertions(+), 0 deletions(-) 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 + +## ------------------------------------------------------------------------------------------------ + -- Gitblit v1.8.0