#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package GameWorldMergeBoss
|
#
|
# @todo:¿ç·þboss
|
# @author hxp
|
# @date 2015-9-21
|
# @version 1.3
|
#
|
# ÏêϸÃèÊö: ¿ç·þboss
|
# @change: "2015-10-10 10:10" hxp Ôö¼Ó¶àµØÍ¼Ö§³Ö
|
# @change: "2017-05-23 10:30" hxp ±¾·þ¿ç·þplayerIDΨһͨÓ÷½Ê½ÐÞ¸Ä
|
# @change: "2017-07-06 20:30" hxp Ôö¼Ó¹¦Ñ«·½Ê½Ð޸ģ»»î¶¯ÖÐÁÙʱ·þÎñÆ÷ά»¤´¦ÀíÖ§³Ö
|
#
|
#---------------------------------------------------------------------
|
#"""Version = 2017-07-06 20:30"""
|
#---------------------------------------------------------------------
|
import GameWorld
|
import ReadChConfig
|
import PlayerCompensation
|
import PlayerMergeRegister
|
import MergeBroadcast
|
import ShareDefine
|
import ChConfig
|
import PlayerControl
|
import PlayerMergeEvent
|
|
import time
|
|
g_mergeBossOverPlayerList = [] # ÒѾ½áËãÍê¿ç·þbossµÄ±¾·þÍæ¼ÒIDÁбí
|
|
def IsMergeBossOpen(curPlayer, isNotify):
|
global g_mergeBossOverPlayerList
|
|
if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss) != 1:
|
if isNotify:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_21675")
|
return False
|
|
# ÒѾ´òÍê½áËãÁË
|
if curPlayer.GetPlayerID() in g_mergeBossOverPlayerList:
|
if isNotify:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_884824")
|
return False
|
|
return True
|
|
def OnClientServerInitOK(tick):
|
# ×Ó·þÆô¶¯³É¹¦Ê± ¿ç·þ·þÎñÆ÷֪ͨ×Ó·þÐÅÏ¢
|
mergeBossState = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss)
|
dictKeyValue = {ShareDefine.Def_Notify_WorldKey_MergeBoss:mergeBossState}
|
MergeBroadcast.SendBroadcastMerge(ChConfig.Def_MergeDictKeyValue, 0, dictKeyValue, False)
|
return
|
|
def MergeBoss_ChangeState(state):
|
##¿ç·þboss»î¶¯×´Ì¬±ä¸ü
|
global g_mergeBossOverPlayerList
|
|
if GameWorld.IsMergeServer():
|
pass
|
else:
|
g_mergeBossOverPlayerList = []
|
|
return
|
|
## ¿ç·þboss±»»÷ɱÊÕµ½ÐÅÏ¢´¦Àí
|
# @param infoDict ÐÅÏ¢×Öµä
|
# @return None
|
def RecvMergeBossKilled(infoDict):
|
if GameWorld.IsMergeServer():
|
return
|
|
npcID = infoDict["NPCID"] # ±»»÷ɱµÄbossID
|
lastHurtPlayerID = infoDict["LastHurtID"] # ×îºóÒ»»÷Íæ¼Ò
|
orderPlayerIDList = infoDict["OrderIDList"] # Íæ¼ÒÉËѪÅÅÐÐ
|
|
__GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID)
|
__GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList)
|
return
|
|
## ¸ø¿ç·þboss×îºóÒ»»÷²¹µ¶½±Àø
|
def __GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID):
|
lastHurtAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_LastHurtAward")
|
|
title, contentTemple, getDays = lastHurtAwardInfo[0]
|
awardItemDict = lastHurtAwardInfo[1]
|
if npcID not in awardItemDict:
|
GameWorld.ErrLog("ÕÒ²»µ½¿ç·þboss×îºóÒ»»÷½±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_LastHurtAward.txt" % npcID)
|
return
|
|
regRecData = PlayerMergeRegister.GetRegisterPlayerRec(lastHurtPlayerID)
|
# ²»ÊDZ¾·þÍæ¼Ò
|
if not regRecData:
|
GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒlastHurtPlayerID=%s" % lastHurtPlayerID)
|
return
|
|
addItemList = awardItemDict[npcID]
|
content = contentTemple % npcID
|
PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [lastHurtPlayerID], addItemList)
|
return
|
|
## ¸ø¿ç·þbossÉ˺¦ÅÅÐаñ½±Àø
|
def __GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList):
|
orderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_HurtOrderAward")
|
|
title, contentTemple, getDays = orderAwardInfo[0]
|
awardItemDict = orderAwardInfo[1]
|
if npcID not in awardItemDict:
|
GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt" % npcID)
|
return
|
|
orderItemDict = awardItemDict[npcID]
|
for order, orderPlayerID in enumerate(orderPlayerIDList, 1):
|
if order not in orderItemDict:
|
GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±Àø£¡bossID=%s,order=%s,playerID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt"
|
% (npcID, order, orderPlayerID))
|
continue
|
|
regRecData = PlayerMergeRegister.GetRegisterPlayerRec(orderPlayerID)
|
# ²»ÊDZ¾·þÍæ¼Ò
|
if not regRecData:
|
GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒorderPlayerID=%s" % orderPlayerID)
|
continue
|
|
content = contentTemple % (npcID, order)
|
addItemList = orderItemDict[order]
|
PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [orderPlayerID], addItemList)
|
return
|
|
|
## ¿ç·þboss»î¶¯½áËãÊÕµ½ÐÅÏ¢´¦Àí
|
# @param infoDict ÐÅÏ¢×Öµä
|
# @return None
|
def RecvMergeBossResult(infoDict):
|
global g_mergeBossOverPlayerList
|
|
if GameWorld.IsMergeServer():
|
return
|
|
totalOrderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_TotalOrderAward")
|
title, contentTemple, getDays = totalOrderAwardInfo[0]
|
awardItemDict = totalOrderAwardInfo[1]
|
|
playerScoreDict = infoDict["PlayerScore"] # Íæ¼Ò×îÖջÃ÷ϸÇé¿ö
|
|
curTime = int(time.time())
|
universalRecMgr = GameWorld.GetUniversalRecMgr()
|
mergeEventRec = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_MergeEvent)
|
|
for playerID, scoreInfo in playerScoreDict.items():
|
|
regRecData = PlayerMergeRegister.GetRegisterPlayerRec(playerID)
|
# ²»ÊDZ¾·þÍæ¼Ò
|
if not regRecData:
|
GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒplayerID=%s" % playerID)
|
continue
|
|
if playerID not in g_mergeBossOverPlayerList:
|
g_mergeBossOverPlayerList.append(playerID)
|
|
accID = PlayerMergeRegister.GetMergeRegRecAccID(regRecData)
|
|
order, gongXun = scoreInfo
|
content = contentTemple % (order)
|
if order in awardItemDict:
|
addItemList = awardItemDict[order]
|
PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [playerID], addItemList)
|
else:
|
GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÕóÓª×ÜÉ˺¦ÅÅÐн±Àø£¡order=%s, ¼ì²éMergeBoss_TotalOrderAward.txt" % (order))
|
|
if gongXun > 0:
|
# ²åÈë½áËãʼþ
|
player = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
eventData = gongXun
|
PlayerMergeEvent.AddMergePlayerEvent(mergeEventRec, playerID, PlayerMergeEvent.Def_MSPEvent_AddGongXun,
|
curTime, eventData, player)
|
|
GameWorld.Log("¿ç·þBoss×ܽáËã: playerID=%s,accID=%s,order=%s,gongXun=%s"
|
% (playerID, accID, order, gongXun))
|
|
return
|
|
|