hxp
2018-11-06 4769b561d767b92be5da180262610695ae3d6605
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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package PlayerMergeEvent
#
# @todo:Íæ¼Ò¿ç·þ·þÎñÆ÷ÖвúÉúÊý¾Ý±ä»¯µÄʼþ
# @author hxp
# @date 2017-06-22
# @version 1.1
#
# @change: "2017-07-06 20:30" hxp Ôö¼Ó»ñµÃ¹¦Ñ«
#
# ÏêϸÃèÊö: Íæ¼Ò¿ç·þ·þÎñÆ÷ÖвúÉúÊý¾Ý±ä»¯µÄʼþ
#
#-------------------------------------------------------------------------------
#"""Version = 2017-07-06 20:30"""
#-------------------------------------------------------------------------------
 
import GameWorld
import ItemCommon
import PlayerControl
import IPY_GameWorld
import DataRecordPack
import ShareDefine
import ChConfig
 
import time
 
(
Def_MSPEvent_PayMoney, # Ê¹Óûõ±Ò£¬½öÖ§³ÖÏûºÄ»õ±ÒºóÖ»ÔÚ¿ç·þµ±Ï»ñµÃÊÕÒæµÄ¹¦ÄÜ£¬²»Ö§³Ö»Ø·þºó»¹ÓÐÊÕÒæ»ò»ñµÃÎïÆ·µÈ
Def_MSPEvent_DelItem, # ¿Û³ýÎïÆ·£¬½öÖ§³ÖʹÓÃÎïÆ·ºó»Ø±¾·þûÓгÖÐø×÷ÓõÄÎïÆ·£¬¹¦ÄÜÉè¼ÆµÄʱºòÇë²ß»®ÖªÏþ
Def_MSPEvent_FBResult, # ¸±±¾½áËã
Def_MSPEvent_AddExp, # Ôö¼Ó¾­Ñé
Def_MSPEvent_AddZhenQi,# Ôö¼ÓÕæÆø
Def_MSPEvent_AddGongXun,# Ôö¼Ó¹¦Ñ«
) = range(1, 1 + 6)
 
g_msPlayerEventDict = {} # ¿ç·þ·þÎñÆ÷ÖÐÍæ¼Òʼþ¼Ç¼ {playerID:[[ʼþÀàÐÍ, Ê¼þʱ¼ä, Ê¼þÊý¾Ý], ...], ...}
g_msPlayerAddExpEventDict = {} # ¿ç·þ·þÎñÆ÷ÖÐÍæ¼Ò»ñµÃ¾­Ñéʼþ¼Ç¼ {playerID:totalExp, ...}
g_msPlayerAddZhenQiEventDict = {} # ¿ç·þ·þÎñÆ÷ÖÐÍæ¼Ò»ñµÃÕæÆøÊ¼þ¼Ç¼ {playerID:[totalZhenQi, eventName, eventData], ...}
 
def AddMSPlayerEvent(playerID, eventType, eventInfo):
    ''' ¿ç·þ·þÎñÆ÷ÖÐÍæ¼Òʼþ
    @param eventType: Ê¼þÀàÐÍ
    @param eventInfo: Ê¼þÊý¾Ý, µ± eventType Îª Def_MSPEvent_FBResult Ê±£¬ Ê¼þÊý¾Ý±ØÐëΪ [¿ç·þ¸±±¾»î¶¯ÀàÐÍ, ...]
    '''
    global g_msPlayerEventDict
    global g_msPlayerAddExpEventDict
    global g_msPlayerAddZhenQiEventDict
    
    if not GameWorld.IsMergeServer():
        return
    
    # ¼Ó¾­Ñ飬ÏÈÀÛ¼Ó
    if eventType == Def_MSPEvent_AddExp:
        g_msPlayerAddExpEventDict[playerID] = g_msPlayerAddExpEventDict.get(playerID, 0) + eventInfo
    # ¼ÓÕæÆø£¬ÏÈÀÛ¼Ó
    elif eventType == Def_MSPEvent_AddZhenQi:
        totalZhenQi = eventInfo[0]
        eventList = g_msPlayerAddZhenQiEventDict.get(playerID, [])
        if eventList:
            totalZhenQi += eventList[0]
        g_msPlayerAddZhenQiEventDict[playerID] = [totalZhenQi] + eventInfo[1:]
    else:
        eventList = g_msPlayerEventDict.get(playerID, [])
        eventList.append([eventType, int(time.time()), eventInfo])
        g_msPlayerEventDict[playerID] = eventList
    return
 
def BroadcastMergePlayerEvent():
    # Í¬²½¹ã²¥×Ó·þ¿ç·þÍæ¼Ò±ä»¯Ê¼þ
    # Íæ¼Ò´Ó¿ç·þ·þÎñÆ÷ÏÂÏßʱ»á´¥·¢Ò»´Î; Íæ¼ÒÍ˳ö¿ç·þ»î¶¯¸±±¾Ê±»á´¥·¢Ò»´Î; ¿ç·þ»î¶¯½áÊøÊ±ÍÆ¼öÊÖ¶¯´¥·¢Ò»´Î
    
    global g_msPlayerEventDict
    global g_msPlayerAddExpEventDict
    global g_msPlayerAddZhenQiEventDict
    
    # ¿ç·þ·þÎñÆ÷ÖеÄÍæ¼Ò
    if not GameWorld.IsMergeServer():
        return
    
    curTime = int(time.time())
    
    # »ã×ÜÔö¼Ó¾­Ñéʼþ
    if g_msPlayerAddExpEventDict:
        for playerID, totalExp in g_msPlayerAddExpEventDict.items():
            eventList = g_msPlayerEventDict.get(playerID, [])
            eventList.append([Def_MSPEvent_AddExp, curTime, totalExp])
            g_msPlayerEventDict[playerID] = eventList
        g_msPlayerAddExpEventDict = {}
        
    # »ã×ÜÔö¼ÓÕæÆøÊ¼þ
    if g_msPlayerAddZhenQiEventDict:
        for playerID, zhenQiEvent in g_msPlayerAddZhenQiEventDict.items():
            eventList = g_msPlayerEventDict.get(playerID, [])
            eventList.append([Def_MSPEvent_AddZhenQi, curTime, zhenQiEvent])
            g_msPlayerEventDict[playerID] = eventList
        g_msPlayerAddZhenQiEventDict = {}
        
    if not g_msPlayerEventDict:
        return
    GameWorld.SendBroadcastMerge(ChConfig.Def_MergePlayerEvent, 0, g_msPlayerEventDict, False)
    
    g_msPlayerEventDict = {}
    return
 
 
#---------------------------------------------------------------------------------------------------
 
def OnClientServerPlayerDoMergeEvent(curPlayer, eventList):
    ## ×Ó·þÍæ¼Ò´¦ÀíÍæ¼ÒÔÚ¿ç·þÖб仯µÄʼþ
    
    playerID = curPlayer.GetPlayerID()
    playerControl = PlayerControl.PlayerControl(curPlayer)
    
    for eventType, eventTime, eventData in eventList:
        
        eventName = "MergeEvent_%s" % eventType
        eventTimeStr = GameWorld.ChangeTimeNumToStr(eventTime)
        
        # Ê¹Óûõ±Ò
        if eventType == Def_MSPEvent_PayMoney:
            type_Price, price, costType, infoDict, quantity, costVIPGold = eventData
            infoDict["MergeEventTime"] = eventTimeStr
            PlayerControl.PayMoney(curPlayer, type_Price, price, costType, infoDict, quantity, costVIPGold, False)
            
        # ¿Û³ýÎïÆ·
        elif eventType == Def_MSPEvent_DelItem:
            itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
            itemTypeID, totalUseCnt, makeItemBind, eventName, saveDataDict = eventData
            saveDataDict["MergeEventTime"] = eventTimeStr
            useItemMode = ItemCommon.UseStuffMode_Bind if makeItemBind else ItemCommon.UseStuffMode_All
            itemIndexList = ItemCommon.GetItem_FromPack_ByID(itemTypeID, itemPack, totalUseCnt, useItemMode)[1]
            ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, totalUseCnt, makeItemBind, eventName, saveDataDict, False)
            
        # ¼Ó¾­Ñé
        elif eventType == Def_MSPEvent_AddExp:
            playerControl.AddExp(eventData, isSysHint=False)
            
        # ¼ÓÕæÆø
        elif eventType == Def_MSPEvent_AddZhenQi:
            addValue, eName, eData = eventData
            PlayerControl.PlayerAddZhenQi(curPlayer, addValue, True, False, eName, eData)
            
        # ¼Ó¹¦Ñ«
        elif eventType == Def_MSPEvent_AddGongXun:
            PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongXun, eventData)
            
        # ¸±±¾»î¶¯½áËã
        elif eventType == Def_MSPEvent_FBResult:
            pass
            #fbActionType = eventData[0]
                
            #elif fbActionType == ShareDefine.Def_MergeAction_Boss:
            #    gongXun = value3
            #    PlayerControl.NotifyCode(curPlayer, "Campaign_liubo_115113", [gongXun])
            
#        if gongXun > 0:
#            addDataDict = {ChConfig.Def_Give_Reason_SonKey:eventName}
#            PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongXun, gongXun, ChConfig.Def_GiveMoney_Unknown, addDataDict)
 
        DataRecordPack.DR_MergePlayerEvent(playerID, eventType, eventTimeStr, eventData, "Get")
        
    return