hxp
2018-09-21 f4c96f50734c9afe6f8e69a232df73812c1b8f96
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/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