#!/usr/bin/python
# -*- coding: GBK -*-
#
#
##@package PlayerCompensation.py
#
# @todo:Óʼþ¹ÜÀí£¨²¹³¥£©
# 1. È«·þÓʼþÒ»¸öGUIDÒ»·âÓʼþ£¬ÓÐʱ¼äÏÞÖÆ£¬½ÓÊÕÓʼþµÄ³ÖÐøÊ±¼äºÍÑÓ³Ùɾ³ýʱ¼äµã(¿É½ÓÊÕºóµÄXÌìɾ³ýÓʼþ)
# ±íʾÈç¹ûÈ«·þÓʼþÒѾ֪ͨ¹ýij¸öÍæ¼Ò£¬ÄÇô¶ÔÓÚ¸ÃÍæ¼Ò£¬¼´Ê¹Óʼþ¹ýÆÚÍæ¼ÒûÓÐÖ÷¶¯É¾³ýÓʼþ£¬Ò²Ó¦¸Ã֪ͨ¸ÃÍæ¼Ò
# 2. ¸öÈËÓʼþÒ»¸öGUID¿ÉÒÔÊǸöÈË»òÕß¶àÈËÓʼþ£¬µ«ÊǶàÈËÓʼþ²»Ö§³ÖÅäÖÿÉÁìÈ¡µÄ³ÖÐøÊ±¼ä£¬ÈôÒªÖ§³ÖÐèÐÞ¸ÄÁìÈ¡¼Ç¼Âß¼
# 3. ¸öÈËÓʼþ°´ÀàÐÍ·Ö²»Í¬µÄ¿É±£´æÊýÁ¿£¬Íæ¼Ò²»¸ÐÖª
# 4. ¹ØÓÚÓʼþ·¢¼þÈË ±êÌâ ºÍ ÕýÎÄ£¬Èç¹ûÊÇÄ£°å»òÕß×éºÏÐÅÏ¢À࣬¶¼Ó¦¸ÃÓÉǰ¶Ë×éÖ¯Íê³É£¬ºó¶Ëֻȡģ°å±êʶ
# 5. ¿ÉÁìÈ¡¼´ÒÑ֪ͨ¹ýÍæ¼Ò¸Ã·âÓʼþ£¬ÐèÒªÔÚÓʼþ·¢ÉúʱºÍÉÏÏßʱÉèÖÃ״̬
#
# @author alee
# @date 2017-08-11 20:00
# @version 1.1
# @note:
# @change: "2018-08-10 12:00" hxp È«·þÓʼþÔö¼ÓÉý¼¶ºóÊÇ·ñ¿ÉÁìȡѡÏîÉèÖã¬Ôö¼ÓÓʼþ²éѯ¡¢Í¨¹ýÉóºË¡¢É¾³ý¹¦ÄÜ£»
#------------------------------------------------------------------------------
#"""Version = 2018-08-10 12:00"""
#------------------------------------------------------------------------------
import GameWorld
import ChConfig
import ShareDefine
import IPY_GameServer
import ChGameToMapPyPack
import NetPackCommon
import CommFunc
import ChPyNetSendPack
import DataRecordPack
import ReadChConfig
import PlayerDBOper
import EventReport
import IpyGameDataPY
import PlayerControl
import datetime
import uuid
import math
import json
#Áìȡ״̬ ¸öλÊý±êʶ £¨¿ÉÁìÈ¡¼´ÒÑ֪ͨ¹ýÍæ¼Ò¸Ã·âÓʼþ£¬ÐèÒªÔÚÓʼþ·¢ÉúʱºÍÉÏÏßʱÉèÖÃ״̬
#0 δ֪ͨ£¬1 ²»¿ÉÁìÈ¡£¬ 2 ¿ÉÁìÈ¡£¬ 3 ÒÑÁìÈ¡
(
Unknown_State,
Disable_State,
Enable_State,
Yet_State
) = range(4)
CheckState_OK = 0 # ÒÑÉóºË
CheckState_No = 1 # δÉóºË
LimitLVType_Not = 0 # Éý¼¶Âú×ãÁìÈ¡µÈ¼¶ºó²»¿ÉÁì
LimitLVType_Can = 1 # Éý¼¶Âú×ãÁìÈ¡µÈ¼¶ºó¿ÉÁì
#Áìȡ״̬ ʮλÊý±êʶ
(
Read_State_No, # Óʼþδ¶Á
Read_State_Yes # ÓʼþÒѶÁ
) = range(2)
#Áìȡ״̬
(
Entire_CompensationType, #È«·þ
Personal_CompensationType, #¸öÈË
Unknow_CompensationType #δ֪
) = range(3)
Def_RequestState = "CompensationRequestState"
## ¸ù¾ÝÎïÆ·ÐÅÏ¢×ֵ䣬Éú³É²¹³¥ÎïÆ·ÊµÀý£¬ÓÃÓÚGM¹¤¾ßÌí¼Ó²¹³¥
# @param curItemDict
# @return IpyCompensationItem
def MakeCompensationItem(curItemDict):
curItemData = IPY_GameServer.IpyCompensationItem()
#curItemData.GUID = curItemDict['GUID']
curItemData.ItemID = curItemDict['ItemID']
curItemData.Count = curItemDict['Count']
curItemData.IsBind = curItemDict.get('IsBind',0)
curItemData.UserData = curItemDict.get('UserData', '')
return curItemData
# ´Ë´¦»õ±ÒplayerIDList·¢·Åͳһ£¬Èç¸ù¾ÝÍæ¼Ò²»Í¬¶ø±ä£¬ÔòÓ¦ÐèÐÞ¸Ä
## ¹¦ÄÜ·¢·ÅÎïÆ·²¹³¥/½±ÀøÓʼþ
# @param addItemList [(itemID, itemCnt, isBind), {»òÎïÆ·ÐÅÏ¢×Öµä}, ...]
# @return GUID
def SendPersonalItemMailEx(title, content, getDays, playerIDList, addItemList, gold = 0, goldPaper = 0, silver = 0,
detail="", moneySource=ChConfig.Def_GiveMoney_Mail):
limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays))
limitTime = limitTime.split(".")[0]
return SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource)
def SendPersonalItemMailBatch(batchMailInfoList):
## ÅúÁ¿·¢ËÍÓʼþ
mailTypeKey, batchPlayerIDList, batchAddItemList, batchParamList, batchGold, batchGoldPaper, batchSilver, batchDetail, moneySource = batchMailInfoList
lenPlayerID = len(batchPlayerIDList)
lenItem = len(batchAddItemList)
lenParam = len(batchParamList)
lenGold = len(batchGold)
lenGoldPaper = len(batchGoldPaper)
lenSilver = len(batchSilver)
lenDetail = len(batchDetail)
title = ""
getDays = 30
limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays))
limitTime = limitTime.split(".")[0]
for i, playerIDList in enumerate(batchPlayerIDList):
addItemList = batchAddItemList[i] if lenItem == lenPlayerID else []
paramList = batchParamList[i] if lenParam == lenPlayerID else []
gold = batchGold[i] if lenGold == lenPlayerID else 0
goldPaper = batchGoldPaper[i] if lenGoldPaper == lenPlayerID else 0
silver = batchSilver[i] if lenSilver == lenPlayerID else 0
detail = batchDetail[i] if lenDetail == lenPlayerID else ""
content = "%s%s" % (mailTypeKey, str(paramList))
SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail, moneySource=moneySource)
return
def SendMailByKey(mailTypeKey, playerIDList, addItemList, paramList=[], gold=0, goldPaper=0, silver=0,
detail="", moneySource=ChConfig.Def_GiveMoney_Mail):
if not mailTypeKey:
mailTypeKey = ShareDefine.DefaultLackSpaceMailType
GameWorld.DebugLog("SendMailByKey %s, playerIDList=%s, addItemList=%s, paramList=%s, gold=%s, goldPaper=%s, silver=%s, moneySource=%s"
% (mailTypeKey, playerIDList, addItemList, paramList, gold, goldPaper, silver, moneySource))
title = ""
content = "%s%s" % (mailTypeKey, json.dumps(paramList, ensure_ascii=False))
return SendPersonalItemMailEx(title, content, 30, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource)
# ´Ë´¦»õ±ÒplayerIDList·¢·Åͳһ£¬Èç¸ù¾ÝÍæ¼Ò²»Í¬¶ø±ä£¬ÔòÓ¦ÐèÐÞ¸Ä
## ¹¦ÄÜ·¢·ÅÎïÆ·²¹³¥/½±ÀøÓʼþ
# @param addItemList [(itemID, itemCnt, isBind), {»òÎïÆ·ÐÅÏ¢×Öµä}, ...]
# @return GUID
# @remarks addItemListÖ§³Öappend×Öµä
def SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold = 0, goldPaper = 0, silver = 0,
detail="", moneySource=ChConfig.Def_GiveMoney_Mail):
if not playerIDList:
return ""
#if not addItemList:
# return ""
curServerTime = GameWorld.GetCurrentDataTimeStr()
# µ±Ç°Ê±¼äÒѾ³¬¹ýÁìȡʱ¼ä
if not curServerTime or curServerTime >= limitTime:
GameWorld.DebugLog("¹¦ÄÜ·¢·ÅÎïÆ·²¹³¥/½±ÀøÓʼþ£¬Áìȡʱ¼äÒѳ¬Ê±£¬Ä¬Èϲ»Ìí¼Ó£¡LimitTime=%s" % limitTime)
return ""
addItemDictList = []
for itemInfo in addItemList:
if isinstance(itemInfo, dict):
addItemDictList.append(itemInfo)
continue
if len(itemInfo) == 3:
itemID, itemCnt, isBind = itemInfo
else:
continue
addItemDict = {}
addItemDict['ItemID'] = itemID
addItemDict['Count'] = itemCnt
addItemDict['IsBind'] = isBind
addItemDictList.append(addItemDict)
perMailItemCnt = IpyGameDataPY.GetFuncCfg("MailMaxItemCnt")
mailCnt = max(1, int(math.ceil(len(addItemDictList)/float(perMailItemCnt)))) # Ò»·âÓʼþ×î¶à5¸öÎïÆ·
for i in xrange(mailCnt):
startIndex = i*perMailItemCnt
GUID = str(uuid.uuid1())
AddPersonalItem(GUID, addItemDictList[startIndex:startIndex + perMailItemCnt], playerIDList,
limitTime, "%s<$_$>%s<$_$>%s" % (ChConfig.Def_Mail_SenderSys, title, content),
gold, goldPaper, silver, detail, moneySource)
return GUID
## ·¢ËÍ´¿ÎÄ×Ö¸öÈ˲¹³¥
# @param limitTime ¿ÉÒÔ´«¿Õ
# @return None
def SendPersonalAsTextMail(PlayerID, title, content, limitTime):
if GameWorld.IsCrossServer():
return
GUID = str(uuid.uuid1())
PyAddPersonalCompensation(GUID, PlayerID, GameWorld.GetCurrentDataTimeStr(), limitTime,
"%s<$_$>%s<$_$>%s" % (ChConfig.Def_Mail_SenderSys,title, content))
return
def GetEntireCompensationInfo(checkState, limitLVType, limitLV):
return checkState * 1000000 + limitLVType * 100000 + limitLV
def ParseEntireCompensationInfo(mailInfo):
limitLV = mailInfo % 100000
checkState = mailInfo / 1000000
limitLVType = (mailInfo - checkState * 1000000) / 100000
return checkState, limitLVType, limitLV
def QueryCompensationInfo(fromDate, toDate, guid, searchTitle, searchContent, searchState=None, maxCount=10):
'''²¹³¥Óʼþ²éѯ
'''
compensationMgr = GameWorld.GetCompensationMgr()
retList = []
if guid:
infoDict = __GetQueryCompensationInfoDict(compensationMgr, compensationMgr.FindEntireCompensation(guid), "", "", searchTitle, searchContent, searchState)
if infoDict:
retList.append(infoDict)
return retList
if fromDate:
fromDate = "%s 00:00:00" % fromDate
if toDate:
toDate = "%s 23:59:59" % toDate
entireCnt = compensationMgr.GetEntireCompensationCount()
for i in xrange(entireCnt):
compensation = compensationMgr.AtEntireCompensation(i)
infoDict = __GetQueryCompensationInfoDict(compensationMgr, compensation, fromDate, toDate, searchTitle, searchContent, searchState)
if not infoDict:
continue
retList.append(infoDict)
if len(retList) >= maxCount:
break
return retList
def __GetQueryCompensationInfoDict(compensationMgr, compensation, fromDate, toDate, searchTitle, searchContent, searchState):
if not compensation or not compensation.GUID:
return
if fromDate and compensation.CreateTime < fromDate:
return
if toDate and compensation.CreateTime > toDate:
return
contentList = compensation.Text.split("<$_$>")
if len(contentList) != 3:
return
sender, title, content = contentList
if searchTitle and searchTitle not in title:
return
if searchContent and searchContent not in content:
return
checkState, limitLVType, limitLV = ParseEntireCompensationInfo(compensation.PlayerLV)
if searchState != None and searchState != checkState:
return
GUID = compensation.GUID
itemList = []
curGUIDItemCount = compensationMgr.FindItemCount(GUID)
for i in xrange(curGUIDItemCount):
curItem = GameWorld.GetCompensationMgr().FindItemAt(GUID, i)
itemID = curItem.ItemID
if not itemID:
continue
itemList.append([itemID, curItem.Count, curItem.IsBind, curItem.UserData])
compensationDict = {"GUID":GUID, "CheckState":checkState, "LimitLVType":limitLVType, "LimitLV":limitLV,
"Gold":compensation.Gold, "GoldPaper":compensation.GoldPaper, "Silver":compensation.Silver,
"PlayerJob":compensation.PlayerJob, "Sender":sender, "Title":title, "Content":content,
"CreateTime":compensation.CreateTime, "LimitTime":compensation.LimitTime, "ItemList":itemList}
return compensationDict
def EntireCompensationOper(operGUIDList, operation):
'''È«·þÓʼþ²Ù×÷¹ÜÀí
@param operGUIDList: ´ý²Ù×÷µÄÓʼþGUIDÁбí
@param operation: 1-ͨ¹ý£»2-ɾ³ý
'''
okGUIDList = []
successGUIDList = []
compensationMgr = GameWorld.GetCompensationMgr()
for GUID in operGUIDList:
compensation = compensationMgr.FindEntireCompensation(GUID)
if not compensation or compensation.GUID != GUID:
continue
# ɾ³ý
if operation == 2:
compensationMgr.DeleteEntireCompensation(GUID)
compensationMgr.DeleteCompensationItem(GUID)
compensationMgr.DeleteRecByGUID(GUID)
GameWorld.Log("ɾ³ýÈ«·þÓʼþ: GUID=%s" % GUID)
DataRecordPack.DR_EntireCompensation(GUID, "Delete")
# ͨ¹ý
elif operation == 1:
mailInfo = compensation.PlayerLV
checkState, limitLVType, limitLV = ParseEntireCompensationInfo(mailInfo)
updMailInfo = GetEntireCompensationInfo(CheckState_OK, limitLVType, limitLV)
compensationMgr.SetEntireCompensationPlayerLV(GUID, updMailInfo)
GameWorld.Log("È«·þÓʼþÉóºËͨ¹ý: GUID=%s,mailInfo=%s,checkState=%s,updMailInfo=%s"
% (GUID, mailInfo, checkState, updMailInfo))
if checkState != CheckState_OK:
okGUIDList.append(GUID)
DataRecordPack.DR_EntireCompensation(GUID, "CheckOK")
else:
continue
successGUIDList.append(GUID)
playerManager = GameWorld.GetPlayerManager()
for i in xrange(playerManager.GetActivePlayerCount()):
player = playerManager.GetActivePlayerAt(i)
if player == None or not player.GetInitOK() or PlayerControl.GetIsTJG(player):
continue
#¹ã²¥ÔÚÏßÍæ¼Ò
notifyList = []
for GUID in okGUIDList:
compensationType, curEntireRequire = CheckRequestCompensation(player, GUID, False)
if compensationType == Unknow_CompensationType:
continue
Text, gold, goldPaper, silver = curEntireRequire.Text, curEntireRequire.Gold, curEntireRequire.GoldPaper, curEntireRequire.Silver
createTime = curEntireRequire.CreateTime
notifyList.append((GUID, Text, createTime, gold, goldPaper, silver))
#GameWorld.DebugLog("¹ã²¥ÔÚÏßÍæ¼ÒÈ«·þÓʼþ: %s" % str(notifyList), player.GetPlayerID())
if notifyList:
SyncQueryCompensationResult(player, notifyList)
return successGUIDList
## Ìí¼ÓÈ«·þ²¹³¥
# @param addItemDictList, LimitTime, mailInfo, PlayerJob, Text
# @return None
def AddEntireItem(GUID, addItemDictList, LimitTime, mailInfo, PlayerJob, Text,
gold = 0, goldPaper = 0, silver = 0, detail="", serverID=0):
'''
@param mailInfo: GetEntireCompensationInfo µÄ·µ»ØÖµ, ĿǰÔÝ´æ×Ö¶Î PlayerLV ÖÐ
'''
if GameWorld.IsCrossServer():
return
#GameWorld.DebugLog("Compensation### AddEntireItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList))
#Ìí¼Ó²¹³¥°üµÄËùÓÐÎïÆ·
for addItemDict in addItemDictList:
curItemData = MakeCompensationItem(addItemDict)
GameWorld.GetCompensationMgr().AddCompensationItem(GUID, curItemData)
createTime = GameWorld.GetCurrentDataTimeStr()
#Ìí¼ÓÈ«·þÁìÈ¡²¹³¥Ìõ¼þ
GameWorld.GetCompensationMgr().AddEntireCompensationItem(GUID, createTime, LimitTime, mailInfo,
PlayerJob, Text, gold, goldPaper, silver, serverID)
checkState, limitLVType, limitLV = ParseEntireCompensationInfo(mailInfo)
addDict = {"LimitTime":LimitTime, "LimitLV":limitLV, "LimitLVType":limitLVType, "CheckState":checkState, "PlayerJob":PlayerJob, "Text":Text,
"Gold":gold, "GoldPaper":goldPaper, "Silver":silver, "ItemList":addItemDictList, "Detail":detail}
#Ìí¼ÓÁ÷Ïò
eventName = "Add" if checkState == CheckState_OK else "AddToCheck"
DataRecordPack.DR_EntireCompensation(GUID, eventName, addDict)
__WriteSendMailOKEvent(GUID, addItemDictList, LimitTime, Text, None, mailInfo, PlayerJob)
testAccIDList = ReadChConfig.GetEvalChConfig("TestAccID")
playerManager = GameWorld.GetPlayerManager()
for i in xrange(playerManager.GetActivePlayerCount()):
player = playerManager.GetActivePlayerAt(i)
if player == None or not player.GetInitOK() or PlayerControl.GetIsTJG(player):
continue
if checkState == CheckState_No:
playerAccID = GameWorld.GetPlatformAccID(player.GetAccID())
if playerAccID not in testAccIDList:
continue
#¹ã²¥ÔÚÏßÍæ¼Ò
compensationType, curEntireRequire = CheckRequestCompensation(player, GUID, False)
if compensationType == Unknow_CompensationType:
continue
Text, gold, goldPaper, silver = curEntireRequire.Text, curEntireRequire.Gold, curEntireRequire.GoldPaper, curEntireRequire.Silver
#GameWorld.Log("#¹ã²¥ÔÚÏßÍæ¼Ò%s"%player.GetPlayerID())
SyncQueryCompensationResult(player, [(GUID, Text, createTime, gold, goldPaper, silver)])
return
# ¼ì²éÓʼþÊÇ·ñÒÑ´ïµ½±£´æÉÏÏÞ£¬È糬¹ýÔòÏÈɾ³ý¾ÉÓʼþ
# @param LimitTime ²ÎÊý¿É´«¿Õ£¬¸öÈËÓʼþ²»ÏÞÖÆÁìÈ¡ÆÚÏÞ£¬Ö»ÏÞÖÆ±£´æÊýÁ¿£¬
def PyAddPersonalCompensation(GUID, PlayerID, CreateTime, LimitTime, Text, gold = 0, goldPaper = 0, silver = 0, moneySource=ChConfig.Def_GiveMoney_Mail):
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(PlayerID)
totalCount = GameWorld.GetCompensationMgr().GetPersonalCompensationCount(PlayerID)
#´ýÖ§³Öpy¶Á±í
maxMailCount = IpyGameDataPY.GetFuncCfg("MailDefaultCount")
delCount = totalCount - maxMailCount + 1
GameWorld.DebugLog("ÐÂÔö¸öÈËÓʼþ: totalCount=%s,maxMailCount=%s" % (totalCount, maxMailCount), PlayerID)
if delCount > 0:
GameWorld.Log("¸öÈËÓʼþ´ïµ½ÉÏÏÞ£¬ÐèҪɾ³ý£¡delCount=%s" % (delCount), PlayerID)
#ÏÈÈ¡µÃҪɾ³ýµÄGUID
delGUIDs = []
for i in xrange(delCount):
curIpyPersonalData = GameWorld.GetCompensationMgr().PersonalCompensationAt(PlayerID, i)
delGUIDs.append(curIpyPersonalData.GUID)
for guid in delGUIDs:
ClearPersonalCompensation(PlayerID, guid)
GameWorld.Log(" DeletePersonalCompensation GUID = %s" % guid, PlayerID)
if curPlayer:
NotifyCompensationResult(curPlayer, guid, 1)
#δ²¹Á÷Ïò
#´Ë´¦Ã»ÓÐÏ·¢Í¨Öª
mailType = moneySource - ChConfig.Def_GiveMoney_Unknown # typeÀàÐÍΪbyte£¬´æÖµÊ±ÐèÒª´¦ÀíÏÂ
GameWorld.GetCompensationMgr().AddPersonalCompensation(GUID, PlayerID, CreateTime,
LimitTime, Text, mailType, gold, goldPaper, silver)
return
# ´Ë´¦»õ±ÒplayerIDList·¢·Åͳһ£¬Èç¸ù¾ÝÍæ¼Ò²»Í¬¶ø±ä£¬ÔòÓ¦ÐèÐÞ¸Ä
## Ìí¼Ó¸öÈ˲¹³¥
# @param addItemDict, PlayerIDList, LimitTime, Text
# @return None
def AddPersonalItem(GUID, addItemDictList, PlayerIDList, LimitTime, Text, gold = 0, goldPaper = 0, silver = 0, detail="", moneySource=ChConfig.Def_GiveMoney_Mail):
if GameWorld.IsCrossServer():
return
GameWorld.DebugLog("Compensation### AddPersonalItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList))
#Ìí¼Ó²¹³¥°üµÄËùÓÐÎïÆ·
for addItemDict in addItemDictList:
curItemData = MakeCompensationItem(addItemDict)
GameWorld.GetCompensationMgr().AddCompensationItem(GUID, curItemData)
#offlinePlayerIDList = []
onlinePlayerInfo = {}
#ÅúÁ¿Ìí¼ÓÍæ¼Ò¸öÈ˲¹³¥ÁìÈ¡±í
createTime = GameWorld.GetCurrentDataTimeStr()
for PlayerID in PlayerIDList:
PyAddPersonalCompensation(GUID, PlayerID, createTime, LimitTime, Text, gold, goldPaper, silver, moneySource)
# Õë¶Ô¸öÈ˲¹³¥£¬Èç¹ûÊÇÔÚÏßÍæ¼Ò£¬ÔòÁ¢¼´ÍÆË͸ø¿Í»§¶Ë
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(PlayerID)
if curPlayer:
SyncQueryCompensationResult(curPlayer, [(GUID, Text, createTime, gold, goldPaper, silver)])
onlinePlayerInfo[curPlayer.GetAccID()] = [curPlayer.GetName(), curPlayer.GetLV()]
#===========================================================================
# else:
# offlinePlayerIDList.append(PlayerID)
#
# if offlinePlayerIDList:
# PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {"PlayerID":{"$in":offlinePlayerIDList}},
# {"PlayerID":1, "AccID":1, "PlayerName":1, "LV":1, "_id":0},
# FindDBResult_SendMail, [GUID, addItemDictList, createTime, Text])
# if onlinePlayerInfo:
# __WriteSendMailOKEvent(GUID, addItemDictList, createTime, Text, onlinePlayerInfo)
#===========================================================================
#Ìí¼ÓÁ÷Ïò
addDict = {"LimitTime":LimitTime, "Text":Text, "Gold":gold, "GoldPaper":goldPaper, "Silver":silver,
"ItemListLen":len(addItemDictList), "Detail":detail, "MoneySource":moneySource}
DataRecordPack.DR_AddPersonalCompensation(PlayerIDList, GUID, addItemDictList, addDict)
return
def FindDBResult_SendMail(resultSetList, extendValueList):
if not resultSetList:
return
playerInfoDict = {}
GUID, addItemDictList, LimitTime, Text = extendValueList
GameWorld.Log("ÓʼþÀëÏßÍæ¼ÒDBÐÅÏ¢: GUID=%s, %s" % (GUID, str(resultSetList)))
for resultDict in resultSetList:
playerInfoDict[resultDict["AccID"]] = [resultDict["PlayerName"], resultDict["LV"]]
__WriteSendMailOKEvent(GUID, addItemDictList, LimitTime, Text, playerInfoDict)
return
## ֪ͨµØÍ¼Óʼþ·¢ËÍOK
def __WriteSendMailOKEvent(GUID, addItemDictList, LimitTime, Text, playerInfoDict={}, playerLV=0, playerJob=0):
#===============================================================================
# eventName = "SendMail"
# #%s<$_$>%s
# sender, title, content = Text.split("<$_$>")
#
# #Ä£°å±àºÅ[%s,%s]
# if "" in content:
# mailContentList = content.split("")
# mailTemplateNO = GameWorld.ToIntDef(mailContentList[0][14:], None)
# EventMailInfo = ReadChConfig.GetEvalChConfig("EventMailInfo")
# if mailTemplateNO not in EventMailInfo:
# return
# title, content = EventMailInfo[mailTemplateNO]
#
# mailParamStr = mailContentList[1]
# mailParamStr = mailParamStr.replace(" ", "")
# if mailParamStr.startswith("[") and mailParamStr.endswith("]") and len(mailParamStr) > 2:
# content = content % tuple(eval(mailParamStr))
#
# itemInfo = "ÎïÆ·:"
# for addItemDict in addItemDictList:
# itemName = "%s" % addItemDict['ItemID']
# if addItemDict.get('IsBind',0):
# itemName += "(°ó)"
# itemInfo += " %s*%s" % (itemName, addItemDict['Count'])
#
# # È«·þ
# if not playerInfoDict:
# comments = "%s: %s ÓÐЧÆÚ:%s, ÏÞÖÆµÈ¼¶:%s,Ö°Òµ:%s; %s; %s" % (title, GUID, LimitTime, playerLV, playerJob, itemInfo, content)
# customEvent = EventReport.custom_events()
# customEvent.account_id = "ServerAccount"
# customEvent.event_name = eventName
# customEvent.session_id = "ServerSession"
# customEvent.account_name = customEvent.account_id
# customEvent.comments = CommFunc.GetStrCutoff(comments, 255)
# EventReport.WriteEvent(customEvent)
# else:
# comments = "%s: %s ÓÐЧÆÚ:%s, %s; %s" % (title, GUID, LimitTime, itemInfo, content)
# comments = CommFunc.GetStrCutoff(comments, 255)
# for accID, playerInfo in playerInfoDict.items():
# playerName, playerLV = playerInfo
# customEvent = EventReport.custom_events()
# customEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(accID))
# customEvent.account_id = GameWorld.GetPlatformAccID(accID)
# customEvent.event_name = eventName
# customEvent.session_id = "GameServerPlayerSession"
#
# customEvent.account_name = customEvent.account_id
# customEvent.chr_name = playerName
# customEvent.comments = comments
# EventReport.WriteEvent(customEvent)
#===============================================================================
return
##A9 A1 ²éÑ¯Íæ¼Ò²¹³¥#tagCGQueryCompensation
# @param index, clientData, tick
# @return None
def OnQueryPlayerCompensation(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
NotifyPlayerCompensation(curPlayer)
# ÌáÈ¡½ÓÊÕÓʼþÏ·¢
def NotifyPlayerCompensation(curPlayer):
notifyList = SeekPlayerCompensation(curPlayer)
SyncQueryCompensationResult(curPlayer, notifyList)
return
# ɾ³ý¸öÈËÓʼþ±í ״̬±í£¬Í¬Ò»¸öGUID ¿ÉÒÔ¶àÈËÁìÈ¡£¬²»ÄÜͬʱɾ³ýÎïÆ·
def ClearPersonalCompensation(curPlayerID, curGUID):
GameWorld.GetCompensationMgr().DeletePersonalCompensation(curPlayerID, curGUID)
GameWorld.GetCompensationMgr().DeletePlayerCompensationRec(curPlayerID, curGUID)
#´æÔÚ¶àÈËÓʼþµÄÇé¿ö£¬¹Êɾ³ýÎïÆ·Ðè¼ì²éÊÇ·ñ×îºóÒ»¸öÁìÈ¡Õ߲ſÉɾ³ý
if GameWorld.GetCompensationMgr().GetPersonalCountByGUID(curGUID) == 0:
GameWorld.GetCompensationMgr().DeleteCompensationItem(curGUID)
return
# ÉèÖÃÁìȡ״̬
def SetPrizeState(curPlayerID, GUID, prizeState, readState):
state = readState*10 + prizeState
GameWorld.GetCompensationMgr().AddPlayerRec(curPlayerID, GUID, state)
##²éÕÒÍæ¼Ò¿ÉÁìÈ¡µÄ²¹³¥Áбí
# @param curPlayer
# @return None
def SeekPlayerCompensation(curPlayer):
curPlayerID = curPlayer.GetID()
curTime = datetime.datetime.today()
allList = [] #²¹³¥ÎïÆ·±í [(GUID,TEXT),(GUID,TEXT),...]
#¸öÈ˲¹³¥
curPersonalCount = GameWorld.GetCompensationMgr().GetPersonalCompensationCount(curPlayerID)
for i in xrange(curPersonalCount):
curIpyPersonalData = GameWorld.GetCompensationMgr().PersonalCompensationAt(curPlayerID, i)
#¿ÉÒÔÓõĽ±Àø
allList.append((curIpyPersonalData.GUID, curIpyPersonalData.Text, curIpyPersonalData.CreateTime,
curIpyPersonalData.Gold, curIpyPersonalData.GoldPaper, curIpyPersonalData.Silver))
#È«·þ²¹³¥
curEntireCount = GameWorld.GetCompensationMgr().GetEntireCompensationCount()
curJob = curPlayer.GetJob()
curLV = curPlayer.GetLV()
isTestAccID = GameWorld.GetPlatformAccID(curPlayer.GetAccID()) in ReadChConfig.GetEvalChConfig("TestAccID")
for i in xrange(curEntireCount - 1, -1, -1):
curRequire = GameWorld.GetCompensationMgr().AtEntireCompensation(i)
checkState, limitLVType, limitLV = ParseEntireCompensationInfo(curRequire.PlayerLV)
if checkState == CheckState_No:
if not isTestAccID:
#δÉóºËµÄÓʼþ²»´¦Àí
continue
#»ñÈ¡¼Ç¼
states = GameWorld.GetCompensationMgr().FindPlayerRecState(curPlayerID, curRequire.GUID)
readState = states/10 # ¿É¶Á
curState = states%10 # Áìȡ״̬
if curState in (Disable_State, Yet_State):
#²»¿ÉÁì »ò ÒÑÁì
continue
limitTime = datetime.datetime.strptime(curRequire.LimitTime, ChConfig.TYPE_Time_Format)
if limitTime < curTime and curState == Unknown_State:
#δ֪ͨ¹ýµÄÓʼþ³¬Ê±£¬²Å¿ÉÉèÖóɲ»¿ÉÁìÈ¡
SetPrizeState(curPlayerID, curRequire.GUID, Disable_State, readState)
continue
if limitLV > curLV:
#µÈ¼¶²»×ã
if limitLVType == LimitLVType_Not:
SetPrizeState(curPlayerID, curRequire.GUID, Disable_State, readState)
continue
if curRequire.PlayerJob not in (-1, 127):
curJob = curPlayer.GetJob()
#ÓÐÖ°ÒµÏÞÖÆ
if (curRequire.PlayerJob&pow(2,curJob)) == 0:
SetPrizeState(curPlayerID, curRequire.GUID, Disable_State, readState)
continue
#¿ÉÒÔÓõĽ±Àø
if Enable_State != curState:
SetPrizeState(curPlayerID, curRequire.GUID, Enable_State, readState)
allList.append((curRequire.GUID, curRequire.Text, curRequire.CreateTime,
curRequire.Gold, curRequire.GoldPaper, curRequire.Silver))
return allList
##·¢ËÍ¿ÉÁìÈ¡½±Àø²éѯ½á¹û
# @param curPlayer, notifyList
# @return None
def SyncQueryCompensationResult(curPlayer, notifyList):
sendPack = ChPyNetSendPack.tagGCQueryCompensationResult()
sendPack.Clear()
for GUID, Text, CreateTime, gold, goldPaper, silver in notifyList:
curGUIDItemCount = GameWorld.GetCompensationMgr().FindItemCount(GUID)
subPack = ChPyNetSendPack.tagGCCompensationPack()
subPack.GUID = GUID
subPack.CreateTime = CreateTime
subPack.Text = Text
subPack.TextLen = len(Text)
subPack.Gold = gold
subPack.GoldPaper = goldPaper
subPack.Silver = silver
subPack.IsRead = GameWorld.GetCompensationMgr().FindPlayerRecState(curPlayer.GetPlayerID(), GUID)/10
for index in xrange(curGUIDItemCount):
curItem = GameWorld.GetCompensationMgr().FindItemAt(GUID, index)
subPackItem = ChPyNetSendPack.tagGCCompensationItem()
subPackItem.ItemID = curItem.ItemID
subPackItem.Count = curItem.Count
subPackItem.IsBind = curItem.IsBind
subPackItem.UserData = curItem.UserData
subPackItem.UserDataLen = len(curItem.UserData)
subPack.Items.append(subPackItem)
subPack.Count = len(subPack.Items)
sendPack.PackList.append(subPack)
sendPack.Count = len(sendPack.PackList)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
##03 03 Íæ¼ÒÇëÇóÁìÈ¡²¹³¥#tagMGRequestCompensation
# @param routeIndex, mapID, curPackData, tick
# @return None
def OnMGRequestCompensation(routeIndex, mapID, curPackData, tick):
global g_PlayerRequestStateDict
GameWorld.DebugLog("Compensation### OnMGRequestCompensation in")
myPlayerID = curPackData.PlayerID
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(myPlayerID)
if not curPlayer:
return
if curPlayer.GetDictByKey(Def_RequestState):#УÑéËø
GameWorld.DebugLog("Compensation### already request")
return
curPlayer.SetDict(Def_RequestState, 1)#¼ÓËø
GUID = curPackData.GUID
GameWorld.DebugLog("Compensation### OnMGRequestCompensation myPlayerID %s GUID %s"%(myPlayerID, GUID))
compensationType, curEntireRequire = CheckRequestCompensation(curPlayer, GUID)
if compensationType == Unknow_CompensationType:
#Áìȡʧ°Ü
curPlayer.SetDict(Def_RequestState, 0)#½âËø
GameWorld.DebugLog("Compensation### OnMGRequestCompensation no found")
return
Text, gold, goldPaper, silver, moneySource = curEntireRequire.Text, curEntireRequire.Gold, curEntireRequire.GoldPaper, curEntireRequire.Silver, curEntireRequire.Type
#УÑé±³°üÊ£Óà¿Õ¼äÊÇ·ñ×ã¹»
#===========================================================================
# curCUIDItemCount = GameWorld.GetCompensationMgr().FindItemCount(GUID)
# if curPackData.PackSpaceCount < curCUIDItemCount:
# curPlayer.SetDict(Def_RequestState, 0)#½âËø
# GameWorld.DebugLog("Compensation### OnMGRequestCompensation no enough space")
# return
#===========================================================================
#·¢Ë͵½MapServer¸øÓè½±Àø
SendGMRequestCompensationResult(routeIndex, mapID, curPlayer, GUID, compensationType, Text, gold, goldPaper, silver, moneySource)
GameWorld.DebugLog("Compensation### OnMGRequestCompensation out")
##ÇëÇóÁìÈ¡ÎïÆ·
# @param curPlayer, GUID
# @return CompensationType ²¹³¥ÀàÐÍ
def CheckRequestCompensation(curPlayer, GUID, isPersonnal = True):
curPlayerID = curPlayer.GetID()
if isPersonnal:
#ÔÚ¸öÈ˲¹³¥ÖÐ
curPersonalCompensation = GameWorld.GetCompensationMgr().FindPersonalCompensation(curPlayerID, GUID)
if curPersonalCompensation.PlayerID == curPlayerID:
#·µ»Ø²¹³¥ÀàÐÍ
return Personal_CompensationType, curPersonalCompensation
#---------
#ÔÚÈ«·þ²¹³¥ÖÐ
states = GameWorld.GetCompensationMgr().FindPlayerRecState(curPlayerID, GUID)
readState = states/10 # ¿É¶Á
curState = states%10 # Áìȡ״̬
if curState in (Disable_State, Yet_State):
#²»¿ÉÁì »ò ÒÑÁì
return Unknow_CompensationType, None
curEntireRequire = GameWorld.GetCompensationMgr().FindEntireCompensation(GUID)
if curEntireRequire.GUID != GUID:
#²»ÔÙÈ«·þ²¹³¥ÖУ¬É¾³ý¼Ç¼
GameWorld.GetCompensationMgr().DeletePlayerCompensationRec(curPlayerID, GUID)
return Unknow_CompensationType, None
checkState, limitLVType, limitLV = ParseEntireCompensationInfo(curEntireRequire.PlayerLV)
if checkState == CheckState_No:
isTestAccID = GameWorld.GetPlatformAccID(curPlayer.GetAccID()) in ReadChConfig.GetEvalChConfig("TestAccID")
if not isTestAccID:
#δÉóºËµÄÓʼþ²»´¦Àí
return Unknow_CompensationType, None
#δ֪ͨ¹ý£¬ÇÒÒѳ¬Ê±
limitTime = datetime.datetime.strptime(curEntireRequire.LimitTime, ChConfig.TYPE_Time_Format)
curTime = datetime.datetime.today()
if limitTime < curTime and Unknown_State == curState:
#³¬Ê±£¬ÉèÖóɲ»¿ÉÁìÈ¡
SetPrizeState(curPlayerID, GUID, Disable_State, readState)
return Unknow_CompensationType, None
if Enable_State == curState:
#¿ÉÁìÈ¡ÇÒδ³¬Ê±£¬·µ»ØÎïÆ·ÐÅÏ¢
return Entire_CompensationType, curEntireRequire
curLV = curPlayer.GetLV()
if limitLV > curLV:
#µÈ¼¶²»×ã
if limitLVType == LimitLVType_Not:
SetPrizeState(curPlayerID, GUID, Disable_State, readState)
return Unknow_CompensationType, None
curJob = curPlayer.GetJob()
if curEntireRequire.PlayerJob not in (-1, 127):
#ÓÐÖ°ÒµÏÞÖÆ
if (curEntireRequire.PlayerJob&pow(2,curJob)) == 0:
SetPrizeState(curPlayerID, GUID, Disable_State, readState)
return Unknow_CompensationType, None
if curEntireRequire.ServerID and curEntireRequire.ServerID != GameWorld.GetPlayerServerID(curPlayer):
# Ö¸¶¨·þÎñÆ÷Óʼþ
SetPrizeState(curPlayerID, GUID, Disable_State, readState)
return Unknow_CompensationType, None
#¿ÉÒÔÓõĽ±Àø
SetPrizeState(curPlayerID, GUID, Enable_State, readState)
#·µ»ØÎïÆ·ÐÅÏ¢
return Entire_CompensationType, curEntireRequire
##·¢ËÍ·â°ü 03 02 Íæ¼ÒÁìÈ¡²¹³¥½á¹û#tagGMRequestCompensationResult
# @param routeIndex, mapID, curPlayer, curItem
# @return None
def SendGMRequestCompensationResult(routeIndex, mapID, curPlayer, GUID, compensationType, Text,
gold, goldPaper, silver, moneySource):
sendPack = ChGameToMapPyPack.tagGMRequestCompensationResult()
sendPack.PlayerID = curPlayer.GetID()
sendPack.CompensationType = compensationType
sendPack.GUID = GUID
sendPack.Text = Text
sendPack.TextLen = len(Text)
sendPack.Gold = gold
sendPack.GoldPaper = goldPaper
sendPack.Silver = silver
sendPack.MoneySource = moneySource
curGUIDItemCount = GameWorld.GetCompensationMgr().FindItemCount(GUID)
for i in xrange(curGUIDItemCount):
curItem = GameWorld.GetCompensationMgr().FindItemAt(GUID, i)
subPackItem = ChGameToMapPyPack.tagGMCompensationItem()
subPackItem.ItemID = curItem.ItemID
subPackItem.Count = curItem.Count
subPackItem.IsBind = curItem.IsBind
subPackItem.UserData = curItem.UserData
subPackItem.UserDataLen = len(curItem.UserData)
sendPack.Items.append(subPackItem)
sendPack.Count = len(sendPack.Items)
NetPackCommon.SendPyPackToMapServer(routeIndex, mapID, sendPack)
return
##03 04 Íæ¼ÒÁìÈ¡²¹³¥ÎïÆ··¢·Å½á¹û#tagMGGiveCompensationResult
# @param routeIndex, mapID, curPackData, tick
# @return None
def OnMGGiveCompensationResult(routeIndex, mapID, curPackData, tick):
myPlayerID = curPackData.PlayerID
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(myPlayerID)
if not curPlayer:
return
GUID = curPackData.GUID
CompensationType = curPackData.CompensationType
curPlayer.SetDict(Def_RequestState, 0)#½âËø
if curPackData.Result:
GiveCompensationSuccess(curPlayer, GUID, CompensationType)
return
##Íæ¼ÒÁìÈ¡²¹³¥ÎïÆ··¢·Å³É¹¦
# @param curPlayer, GUID
# @return None
def GiveCompensationSuccess(curPlayer, GUID, CompensationType):
curPlayerID = curPlayer.GetID()
NotifyCompensationResult(curPlayer, GUID, 1)
#Á÷Ïò¼Ç¼
DataRecordPack.DR_GiveCompensationSuccess(curPlayerID, GUID)
#È«·þ½±ÀøÁìÈ¡¼Ç¼±ä¸üΪÒÑÁìÈ¡
if CompensationType == Entire_CompensationType:
GameWorld.GetCompensationMgr().AddPlayerRec(curPlayerID, GUID, 10 + Yet_State)
return
#¸öÈ˽±ÀøÁìÈ¡ÌõĿִÐÐɾ³ý
if CompensationType == Personal_CompensationType:
ClearPersonalCompensation(curPlayerID, GUID)
return
return
##ÇåÀí³¬Ê±È«·þ²¹³¥, È«·þÓʼþ·ÖÁ½²¿´¦Àí£º1. Óʼþ½ÓÊÕµÄÓÐЧʱ¼ä£¬ºǫ́ÉèÖã¬2. Óʼþɾ³ýʱ¼äΪ½ÓÊÕÓÐЧʱ¼äÔÙÑÓ³¤30Ìì
# @param None
# @return None
def ClearUpEntireCompensation():
#УÑé¹ýÆÚ²¹³¥
curTime = datetime.datetime.today()
needClearGUIDList = []
entireCnt = GameWorld.GetCompensationMgr().GetEntireCompensationCount()
for i in xrange(entireCnt):
curEntireRequire = GameWorld.GetCompensationMgr().AtEntireCompensation(i)
# ³¬¹ý½ÓÊÕÓʼþ30ÌìÔòÍêȫɾ³ý´ËÓʼþ
limitTime = datetime.datetime.strptime(curEntireRequire.LimitTime, ChConfig.TYPE_Time_Format) + datetime.timedelta(days = 30)
if limitTime < curTime:
needClearGUIDList.append(curEntireRequire.GUID)
#ɾ³ý¹ýÆÚ²¹³¥ÐÅÏ¢£¬ ûÓÐÖ÷¶¯Í¨ÖªÔÚÏßÍæ¼Ò
for GUID in needClearGUIDList:
#ɾ³ýÁìÈ¡Ìõ¼þ
GameWorld.GetCompensationMgr().DeleteEntireCompensation(GUID)
#ɾ³ý¹ýÆÚÎïÆ·
GameWorld.GetCompensationMgr().DeleteCompensationItem(GUID)
#Çå³ýÁìȡ״̬¼Ç¼¾Í
GameWorld.GetCompensationMgr().DeleteRecByGUID(GUID)
return
## ÇåÀí³¬Ê±²¹³¥, ¸öÈËÓʼþÔÚ³¬¹ýÉÏÏÞºó²Å»á×Ô¶¯É¾³ý
# @param None
# @return None
def ClearUpTimeOutCompensation():
ClearUpEntireCompensation()
return
#===============================================================================
# //A9 A6 ÉèÖÃÓʼþ£¨²¹³¥£©ÒѶÁ״̬ #tagCGReadCompensation
#
# struct tagCGReadCompensation
# {
# tagHead Head;
# char GUID[40];
# BYTE IsRead; //ÉèÖÃÓʼþ£¨²¹³¥£©ÊÇ·ñÒѶÁ 1¶ÁÈ¡
# };
#===============================================================================
def OnReadCompensation(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
GUID = clientData.GUID
curPlayerID = curPlayer.GetID()
#ÔÚ¸öÈ˲¹³¥ÖÐ
curPersonalCompensation = GameWorld.GetCompensationMgr().FindPersonalCompensation(curPlayerID, GUID)
if curPersonalCompensation.PlayerID != curPlayerID:
curEntireRequire = GameWorld.GetCompensationMgr().FindEntireCompensation(GUID)
if curEntireRequire.GUID != GUID:
#GameWorld.DebugLog("ÕÒ²»µ½ÓʼþGUID:%s"%GUID)
# ÕÒ²»µ½Óʼþ
return
curState = GameWorld.GetCompensationMgr().FindPlayerRecState(curPlayerID, GUID)
if curState/10 >= Read_State_Yes:
# ÒѶÁ
#GameWorld.DebugLog("ÒѶÁGUID:%s"%GUID)
return
curState = Read_State_Yes*10 + curState%10
GameWorld.GetCompensationMgr().AddPlayerRec(curPlayerID, GUID, curState)
#GameWorld.DebugLog("ÒѶÁcurState:%s"%curState)
return
#===============================================================================
# //A9 A7 ɾ³ýÓʼþ£¨²¹³¥£© #tagCGDelCompensation
#
# struct tagCGDelCompensation
# {
# tagHead Head;
# char GUID[40];
# };
#===============================================================================
def OnDelCompensation(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
GUID = clientData.GUID
curPlayerID = curPlayer.GetID()
#ÔÚ¸öÈ˲¹³¥ÖÐ
curPersonalCompensation = GameWorld.GetCompensationMgr().FindPersonalCompensation(curPlayerID, GUID)
if curPersonalCompensation.PlayerID == curPlayerID:
ClearPersonalCompensation(curPlayerID, GUID)
NotifyCompensationResult(curPlayer, GUID, 1)
#GameWorld.DebugLog("¸öÈ˲¹³¥ÖÐOnDelCompensation:%s"%GUID)
return
curEntireRequire = GameWorld.GetCompensationMgr().FindEntireCompensation(GUID)
if curEntireRequire.GUID != GUID:
# ÕÒ²»µ½Óʼþ
NotifyCompensationResult(curPlayer, GUID, 0)
#GameWorld.DebugLog("ÕÒ²»µ½ÓʼþOnDelCompensation:%s"%GUID)
return
#È«·þÓʼþ
curEntireRequire = GameWorld.GetCompensationMgr().FindEntireCompensation(GUID)
if curEntireRequire.GUID == GUID:
SetPrizeState(curPlayerID, GUID, Disable_State, GameWorld.GetCompensationMgr().FindPlayerRecState(curPlayerID, GUID)/10)
NotifyCompensationResult(curPlayer, GUID, 1)
#GameWorld.DebugLog("È«·þÓʼþOnDelCompensation:%s"%GUID)
return
NotifyCompensationResult(curPlayer, GUID, 0)
# Óʼþɾ³ýÇé¿ö
def NotifyCompensationResult(curPlayer, GUID, result):
sendMCPack = ChPyNetSendPack.tagGCDelCompensationResult()
sendMCPack.GUID = GUID
sendMCPack.Result = result
NetPackCommon.SendFakePack(curPlayer, sendMCPack)