#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
#
|
##@package PlayerCompensationTube.py
|
#
|
# @todo:GM²¹³¥¹ÜÀí µØÍ¼´¦Àí
|
#
|
# @author xmnathan
|
# @date 2010-01-01 10:00
|
# @version 1.4
|
# @note:
|
# @change: "2014-09-29 13:00" xmnathan GM²¹³¥¹ÜÀí
|
# @change: "2014-11-05 10:50" xmnathan Áìȡʧ°ÜÒ²»Ø°üGameServer£¬ÓÃÓÚÖØÖÃÁìȡ״̬
|
# @change: "2016-07-25 22:00" hxp Ôö¼ÓÁìÈ¡Óʼþʼþ»ã±¨
|
# @change: "2017-05-04 12:00" hxp Ôö¼Ó·ûÓ¡ÐéÄâ±³°üÖ§³Ö
|
#------------------------------------------------------------------------------
|
#"""Version = 2017-05-04 12:00"""
|
#------------------------------------------------------------------------------
|
import IPY_GameWorld
|
import GameWorld
|
import ShareDefine
|
import ChPyNetSendPack
|
import NetPackCommon
|
import ItemCommon
|
import ItemControler
|
import ChMapToGamePyPack
|
import ReadChConfig
|
import EventReport
|
import ChConfig
|
import PlayerControl
|
|
##A5 3B ÇëÇóÁìÈ¡²¹³¥#tagCMRequestCompensation
|
# @param index, clientPack, tick
|
# @return None
|
def OnCMRequestCompensation(index, clientPack, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if not curPlayer:
|
return
|
GameWorld.DebugLog("#OnCMRequestCompensation in, PlayerID %s GUID %s"%(curPlayer.GetPlayerID(), clientPack.GUID))
|
#±³°üûλÖÃ
|
itemPackSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
|
|
#·¢ËÍÏà¹ØÊý¾Ý
|
sendPack = ChMapToGamePyPack.tagMGRequestCompensation()
|
sendPack.GUID = clientPack.GUID
|
sendPack.PlayerID = curPlayer.GetPlayerID()
|
sendPack.PackSpaceCount = itemPackSpace
|
NetPackCommon.SendPyPackToGameServer(sendPack)
|
return
|
|
|
##03 02 Íæ¼ÒÁìÈ¡²¹³¥½á¹û#tagGMRequestCompensationResult
|
# @param curPackData, tick
|
# @return None
|
def OnGMRequestCompensationResult(curPackData, tick):
|
GameWorld.DebugLog("OnGMRequestCompensationResult in")
|
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
|
if not curPlayer:
|
#·¢ËÍÏà¹ØÊý¾Ý »Ø±¨²¹³¥·¢·Å½á¹û
|
sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
|
sendPack.GUID = curPackData.GUID
|
sendPack.PlayerID = curPackData.PlayerID
|
sendPack.CompensationType = curPackData.CompensationType
|
sendPack.Result = 0
|
NetPackCommon.SendPyPackToGameServer(sendPack)
|
GameWorld.DebugLog(" PlayerID %s no found "%curPackData.PlayerID)
|
return
|
|
needPackSpaceDict = {}
|
isPackSpaceEnough = True
|
# ÏÈ»ã×ÜÎïÆ·ËùÊô±³°ü
|
for i in xrange(curPackData.Count):
|
curPackItem = curPackData.Items[i]
|
itemID = curPackItem.ItemID
|
curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
if not curItemData:
|
continue
|
|
packType = ChConfig.GetItemPackType(curItemData.GetType())
|
needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count)
|
needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
|
|
GameWorld.DebugLog(" needPackSpaceDict=%s" % str(needPackSpaceDict))
|
for packType, needSpace in needPackSpaceDict.items():
|
if needSpace > ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace):
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType])
|
isPackSpaceEnough = False
|
break
|
|
#±³°ü¿Õ¼ä²»×ã
|
if not isPackSpaceEnough:
|
GameWorld.DebugLog(" itemPack no space")
|
sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()
|
sendMCPack.GUID = curPackData.GUID
|
sendMCPack.Result = 0
|
NetPackCommon.SendFakePack(curPlayer, sendMCPack)
|
#·¢ËÍÏà¹ØÊý¾Ý »Ø±¨²¹³¥·¢·Å½á¹û
|
sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
|
sendPack.GUID = curPackData.GUID
|
sendPack.PlayerID = curPackData.PlayerID
|
sendPack.CompensationType = curPackData.CompensationType
|
sendPack.Result = 0
|
NetPackCommon.SendPyPackToGameServer(sendPack)
|
return
|
|
for i in xrange(curPackData.Count):
|
curPackItem = curPackData.Items[i]
|
itemID = curPackItem.ItemID
|
if ItemControler.GetAppointItemRealID(itemID):
|
#¶¨ÖÆÎïÆ·
|
ItemControler.GivePlayerItem(curPlayer, itemID, curPackItem.Count, curPackItem.IsBind, [IPY_GameWorld.rptItem],
|
False, showSysInfo=False, event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}])
|
continue
|
|
curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, curPackItem.IsBind)
|
if not curCreateItem:
|
GameWorld.ErrLog("OnGMRequestCompensationResult CreateSingleItem %s Err "%itemID)
|
continue
|
|
##UserData°üº¬ÁË×·¼ÓÊôÐÔ²»ÍêÕû£¬ÕâÀïÐèÒª²¹Æë
|
if curPackItem.UserDataLen:
|
UserDataDict = eval(curPackItem.UserData)
|
#ÉèÖÃUserData
|
UserData = "%s"%UserDataDict
|
curCreateItem.SetUserData(UserData, len(UserData))
|
ItemCommon.MakeEquipGS(curCreateItem)
|
#·ÅÈëÍæ¼Ò±³°ü
|
ItemControler.PlayerItemControler(curPlayer).PutInItem(IPY_GameWorld.rptItem, curCreateItem,
|
event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}])
|
moneySource = curPackData.MoneySource + ChConfig.Def_GiveMoney_Unknown # ´æÖµÊ±ÎªbyteÀàÐÍ£¬Ê¹ÓÃʱÐ軹ԻØÀ´
|
if curPackData.Gold != 0:
|
PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, moneySource)
|
|
if curPackData.GoldPaper != 0:
|
PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, moneySource)
|
|
if curPackData.Silver != 0:
|
PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, moneySource)
|
|
#·¢ËÍÏà¹ØÊý¾Ý »Ø±¨²¹³¥·¢·Å½á¹û
|
sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
|
sendPack.GUID = curPackData.GUID
|
sendPack.PlayerID = curPackData.PlayerID
|
sendPack.CompensationType = curPackData.CompensationType
|
sendPack.Result = 1
|
NetPackCommon.SendPyPackToGameServer(sendPack)
|
#¸æË߿ͻ§¶Ë²¹³¥ÒÑÁìÈ¡
|
sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()
|
sendMCPack.GUID = curPackData.GUID
|
sendMCPack.Result = 1
|
NetPackCommon.SendFakePack(curPlayer, sendMCPack)
|
|
#===========================================================================
|
# #ÁìÈ¡²¹³¥Ê¼þ¼Ç¼
|
# Text = curPackData.Text
|
# #%s<$_$>%s
|
# sender, title, content = Text.split("<$_$>")
|
# #<MailTemplate>Ä£°å±àºÅ</MailTemplate>[%s,%s]
|
# if "</MailTemplate>" in content:
|
# mailContentList = content.split("</MailTemplate>")
|
# 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))
|
#
|
# comments = "%s: %s, %s; %s" % (title, curPackData.GUID, eventItemInfo, content)
|
# EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_GetMail, comments)
|
#===========================================================================
|
return
|
|
|
|
|