#!/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 isPackSpaceEnough = True commPackItemCount = 0 # ³£¹æ±³°üÎïÆ·¸öÊý RuneItemCount = 0 # ·ûÓ¡ÎïÆ·¸öÊý # ÏÈ»ã×ÜÎïÆ·ËùÊô±³°ü for i in xrange(curPackData.Count): curPackItem = curPackData.Items[i] itemID = curPackItem.ItemID curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID) if not curItemData: continue if curItemData.GetType() in [ChConfig.Def_ItemType_Rune, ChConfig.Def_ItemType_RuneExp]: RuneItemCount += curPackItem.Count else: commPackItemCount += 1 if isPackSpaceEnough and RuneItemCount > 0: packSpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptRune, RuneItemCount) if packSpace < RuneItemCount: isPackSpaceEnough = False GameWorld.DebugLog(" ·ûÓ¡±³°ü¿Õ¼ä²»×ã, RuneItemCount=%s > packSpace=%s" % (RuneItemCount, packSpace)) PlayerControl.NotifyCode(curPlayer, "RuneBagFull") if isPackSpaceEnough and commPackItemCount > 0: itemPackSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, commPackItemCount) if itemPackSpace < commPackItemCount: isPackSpaceEnough = False GameWorld.DebugLog(" ±³°ü¿Õ¼ä²»×ã, commPackItemCount=%s > itemPackSpace=%s" % (commPackItemCount, itemPackSpace)) PlayerControl.NotifyCode(curPlayer, "BagFull") #±³°ü¿Õ¼ä²»×ã 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}]) if curPackData.Gold != 0: PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, ChConfig.Def_GiveMoney_Mail) if curPackData.GoldPaper != 0: PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, ChConfig.Def_GiveMoney_Mail) if curPackData.Silver != 0: PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, ChConfig.Def_GiveMoney_Mail) #·¢ËÍÏà¹ØÊý¾Ý »Ø±¨²¹³¥·¢·Å½á¹û 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("<$_$>") # #Ä£°å±àºÅ[%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)) # # comments = "%s: %s, %s; %s" % (title, curPackData.GUID, eventItemInfo, content) # EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_GetMail, comments) #=========================================================================== return