| #!/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  | 
|   | 
|   | 
|   | 
|   |