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