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