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