10318 【英文】【越南】【BT】【砍树】统一增加奖励获得封包
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 01 获得奖励信息 #tagMCGiveAwardInfo
|
| | |
|
| | | class tagMCGiveAwardMoney(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MoneyType", c_ubyte), |
| | | ("MoneyValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.MoneyType = 0
|
| | | self.MoneyValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGiveAwardMoney)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
|
| | | MoneyType:%d,
|
| | | MoneyValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.MoneyType,
|
| | | self.MoneyValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGiveAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("Count", c_int), |
| | | ("IsBind", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.Count = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGiveAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
|
| | | ItemID:%d,
|
| | | Count:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.Count,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGiveAwardInfo(Structure):
|
| | | Head = tagHead()
|
| | | EventLen = 0 #(BYTE EventLen)
|
| | | EventName = "" #(String EventName)
|
| | | Exp = 0 #(DWORD Exp)// 奖励经验,求余亿部分
|
| | | ExpPoint = 0 #(DWORD ExpPoint)// 奖励经验,整除亿部分
|
| | | MoneyLen = 0 #(BYTE MoneyLen)
|
| | | MoneyList = list() #(vector<tagMCGiveAwardMoney> MoneyList)// 奖励货币
|
| | | ItemLen = 0 #(BYTE ItemLen)
|
| | | ItemList = list() #(vector<tagMCGiveAwardItem> ItemList)// 奖励物品
|
| | | DataLen = 0 #(WORD DataLen)
|
| | | DataEx = "" #(String DataEx)// 扩展信息,可由不同的Event自定义信息内容
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EventLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.EventName,_pos = CommFunc.ReadString(_lpData, _pos,self.EventLen)
|
| | | self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MoneyLen):
|
| | | temMoneyList = tagMCGiveAwardMoney()
|
| | | _pos = temMoneyList.ReadData(_lpData, _pos)
|
| | | self.MoneyList.append(temMoneyList)
|
| | | self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.ItemLen):
|
| | | temItemList = tagMCGiveAwardItem()
|
| | | _pos = temItemList.ReadData(_lpData, _pos)
|
| | | self.ItemList.append(temItemList)
|
| | | self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DataEx,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x01
|
| | | self.EventLen = 0
|
| | | self.EventName = ""
|
| | | self.Exp = 0
|
| | | self.ExpPoint = 0
|
| | | self.MoneyLen = 0
|
| | | self.MoneyList = list()
|
| | | self.ItemLen = 0
|
| | | self.ItemList = list()
|
| | | self.DataLen = 0
|
| | | self.DataEx = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.EventName)
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.MoneyLen):
|
| | | length += self.MoneyList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.ItemLen):
|
| | | length += self.ItemList[i].GetLength()
|
| | | length += 2
|
| | | length += len(self.DataEx)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.EventLen)
|
| | | data = CommFunc.WriteString(data, self.EventLen, self.EventName)
|
| | | data = CommFunc.WriteDWORD(data, self.Exp)
|
| | | data = CommFunc.WriteDWORD(data, self.ExpPoint)
|
| | | data = CommFunc.WriteBYTE(data, self.MoneyLen)
|
| | | for i in range(self.MoneyLen):
|
| | | data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ItemLen)
|
| | | for i in range(self.ItemLen):
|
| | | data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.DataLen)
|
| | | data = CommFunc.WriteString(data, self.DataLen, self.DataEx)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EventLen:%d,
|
| | | EventName:%s,
|
| | | Exp:%d,
|
| | | ExpPoint:%d,
|
| | | MoneyLen:%d,
|
| | | MoneyList:%s,
|
| | | ItemLen:%d,
|
| | | ItemList:%s,
|
| | | DataLen:%d,
|
| | | DataEx:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EventLen,
|
| | | self.EventName,
|
| | | self.Exp,
|
| | | self.ExpPoint,
|
| | | self.MoneyLen,
|
| | | "...",
|
| | | self.ItemLen,
|
| | | "...",
|
| | | self.DataLen,
|
| | | self.DataEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
|
| | |
|
| | | class tagMCGuradPickupItemSucc(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 01 获得奖励信息 #tagMCGiveAwardInfo
|
| | |
|
| | | class tagMCGiveAwardMoney(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MoneyType", c_ubyte), |
| | | ("MoneyValue", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.MoneyType = 0
|
| | | self.MoneyValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGiveAwardMoney)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
|
| | | MoneyType:%d,
|
| | | MoneyValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.MoneyType,
|
| | | self.MoneyValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGiveAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("Count", c_int), |
| | | ("IsBind", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.Count = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCGiveAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
|
| | | ItemID:%d,
|
| | | Count:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.Count,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCGiveAwardInfo(Structure):
|
| | | Head = tagHead()
|
| | | EventLen = 0 #(BYTE EventLen)
|
| | | EventName = "" #(String EventName)
|
| | | Exp = 0 #(DWORD Exp)// 奖励经验,求余亿部分
|
| | | ExpPoint = 0 #(DWORD ExpPoint)// 奖励经验,整除亿部分
|
| | | MoneyLen = 0 #(BYTE MoneyLen)
|
| | | MoneyList = list() #(vector<tagMCGiveAwardMoney> MoneyList)// 奖励货币
|
| | | ItemLen = 0 #(BYTE ItemLen)
|
| | | ItemList = list() #(vector<tagMCGiveAwardItem> ItemList)// 奖励物品
|
| | | DataLen = 0 #(WORD DataLen)
|
| | | DataEx = "" #(String DataEx)// 扩展信息,可由不同的Event自定义信息内容
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EventLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.EventName,_pos = CommFunc.ReadString(_lpData, _pos,self.EventLen)
|
| | | self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.MoneyLen):
|
| | | temMoneyList = tagMCGiveAwardMoney()
|
| | | _pos = temMoneyList.ReadData(_lpData, _pos)
|
| | | self.MoneyList.append(temMoneyList)
|
| | | self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.ItemLen):
|
| | | temItemList = tagMCGiveAwardItem()
|
| | | _pos = temItemList.ReadData(_lpData, _pos)
|
| | | self.ItemList.append(temItemList)
|
| | | self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DataEx,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA8
|
| | | self.Head.SubCmd = 0x01
|
| | | self.EventLen = 0
|
| | | self.EventName = ""
|
| | | self.Exp = 0
|
| | | self.ExpPoint = 0
|
| | | self.MoneyLen = 0
|
| | | self.MoneyList = list()
|
| | | self.ItemLen = 0
|
| | | self.ItemList = list()
|
| | | self.DataLen = 0
|
| | | self.DataEx = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.EventName)
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.MoneyLen):
|
| | | length += self.MoneyList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.ItemLen):
|
| | | length += self.ItemList[i].GetLength()
|
| | | length += 2
|
| | | length += len(self.DataEx)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.EventLen)
|
| | | data = CommFunc.WriteString(data, self.EventLen, self.EventName)
|
| | | data = CommFunc.WriteDWORD(data, self.Exp)
|
| | | data = CommFunc.WriteDWORD(data, self.ExpPoint)
|
| | | data = CommFunc.WriteBYTE(data, self.MoneyLen)
|
| | | for i in range(self.MoneyLen):
|
| | | data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ItemLen)
|
| | | for i in range(self.ItemLen):
|
| | | data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.DataLen)
|
| | | data = CommFunc.WriteString(data, self.DataLen, self.DataEx)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EventLen:%d,
|
| | | EventName:%s,
|
| | | Exp:%d,
|
| | | ExpPoint:%d,
|
| | | MoneyLen:%d,
|
| | | MoneyList:%s,
|
| | | ItemLen:%d,
|
| | | ItemList:%s,
|
| | | DataLen:%d,
|
| | | DataEx:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EventLen,
|
| | | self.EventName,
|
| | | self.Exp,
|
| | | self.ExpPoint,
|
| | | self.MoneyLen,
|
| | | "...",
|
| | | self.ItemLen,
|
| | | "...",
|
| | | self.DataLen,
|
| | | self.DataEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
|
| | |
|
| | | class tagMCGuradPickupItemSucc(Structure):
|
| | |
| | |
|
| | | if sendMailKey:
|
| | | PlayerControl.SendMailByKey(sendMailKey, [curPlayer.GetID()], totalItemList, detail=dataDict)
|
| | | else:
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, totalItemList, ChConfig.ItemGive_BuyItem)
|
| | | #触发任务购买物品
|
| | | EventShell.EventRespons_ShopBuy(curPlayer, shopType)
|
| | | #curPlayer.ShopResult(itemIndex, IPY_GameWorld.tsrShopOK)
|
| | |
| | | import ShareDefine
|
| | | import GameFuncComm
|
| | | import ItemCommon
|
| | | import ItemControler
|
| | | import PlayerSuccess
|
| | | import PlayerActivity
|
| | | import PlayerBossReborn
|
| | |
| | | giveMoneyType = IPY_GameWorld.TYPE_Price_Gold_Paper
|
| | | PlayerControl.GiveMoney(curPlayer, giveMoneyType, addMoney, ChConfig.Def_GiveMoney_Pray, addDataDict, False)
|
| | | PlayerControl.NotifyCode(curPlayer, 'MoneyPray_HowMuch', [addMoney, giveMoneyType])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", moneyInfo={giveMoneyType:addMoney})
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_MoneyPray, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MoneyPray)
|
| | |
|
| | |
| | | addExp = eval(GetExpPrayAward())
|
| | | PlayerControl.PlayerControl(curPlayer).AddExp(addExp)
|
| | | PlayerControl.NotifyCode(curPlayer, 'ExpPray_HowMuch', [addExp])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", exp=addExp)
|
| | | if not isCostItem: #用物品不增加次数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_ExpPray, 1)
|
| | |
| | |
|
| | | import math
|
| | | import time
|
| | | import json
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | ## 获得背包的一个空格子
|
| | |
| | |
|
| | | return True
|
| | |
|
| | | def GivePlayerItemOrMail(curPlayer, itemList, mailKey=None, event=["", False, {}]):
|
| | | def GivePlayerItemOrMail(curPlayer, itemList, mailKey=None, event=["", False, {}], isNotifyAward=True):
|
| | | ##给物品,背包满则发邮件
|
| | | if not itemList:
|
| | | return
|
| | |
| | | else:
|
| | | for itemID, itemCnt, isAuctionItem in giveItemList:
|
| | | GivePlayerItem(curPlayer, itemID, itemCnt, isAuctionItem, [IPY_GameWorld.rptItem], event=event)
|
| | | |
| | | if isNotifyAward:
|
| | | eventName = event[0] if event else ""
|
| | | NotifyGiveAwardInfo(curPlayer, giveItemList, eventName)
|
| | | return
|
| | |
|
| | | def NotifyGiveAwardInfo(curPlayer, giveItemInfo, eventName="", exp=0, moneyInfo=None, dataEx=None):
|
| | | '''通知玩家获得奖励信息
|
| | | @param giveItemInfo: 可以是列表 [[itemID,count,isBind], ...] 或 [[itemID,count], ...] 或 {itemID:count, ...}
|
| | | @param moneyInfo: 奖励货币信息 {moneyType:moneyValue, ...} moneyType 可以是字符串或数值
|
| | | '''
|
| | | notifyItemList = []
|
| | | if isinstance(giveItemInfo, dict):
|
| | | notifyItemList = [[a, b] for a, b in giveItemInfo.items()]
|
| | | else:
|
| | | notifyItemList = giveItemInfo
|
| | | eventName = ChConfig.ItemGiveTypeDict.get(eventName, str(eventName))
|
| | | clientPack = ChPyNetSendPack.tagMCGiveAwardInfo()
|
| | | clientPack.EventName = eventName
|
| | | clientPack.EventLen = len(clientPack.EventName)
|
| | | clientPack.ExpPoint = exp / ChConfig.Def_PerPointValue
|
| | | clientPack.Exp = exp % ChConfig.Def_PerPointValue
|
| | | if moneyInfo and isinstance(moneyInfo, dict):
|
| | | for moneyType, moneyValue in moneyInfo.items():
|
| | | if isinstance(moneyType, str):
|
| | | moneyType = int(moneyType)
|
| | | if not moneyType or not moneyValue:
|
| | | continue
|
| | | money = ChPyNetSendPack.tagMCGiveAwardMoney()
|
| | | money.MoneyType = moneyType
|
| | | money.MoneyValue = moneyValue
|
| | | clientPack.MoneyList.append(money)
|
| | | clientPack.MoneyLen = len(clientPack.MoneyList)
|
| | | for itemInfo in notifyItemList:
|
| | | itemID, itemCount = itemInfo[:2]
|
| | | isBind = itemInfo[2] if len(itemInfo) > 2 else 1
|
| | | if not itemID or not itemCount:
|
| | | continue
|
| | | item = ChPyNetSendPack.tagMCGiveAwardItem()
|
| | | item.ItemID = itemID
|
| | | item.Count = itemCount
|
| | | item.IsBind = isBind
|
| | | clientPack.ItemList.append(item)
|
| | | clientPack.ItemLen = len(clientPack.ItemList)
|
| | | if dataEx:
|
| | | if isinstance(dataEx, dict):
|
| | | dataEx = json.dumps(dataEx, ensure_ascii=False)
|
| | | elif not isinstance(dataEx, str):
|
| | | dataEx = str(dataEx)
|
| | | dataEx = dataEx.replace(" ", "")
|
| | | clientPack.DataEx = dataEx
|
| | | clientPack.DataLen = len(clientPack.DataEx)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def RecycleItem(curPlayer, itemID, notifyMailKey):
|
| | |
| | | ## 给奖励物品
|
| | | # @param awardItemInfo 奖励物品信息,支持字典按职业给,或者直接list
|
| | | # @return 布尔值
|
| | | def GiveAwardItem(curPlayer, awardItemInfo):
|
| | | def GiveAwardItem(curPlayer, awardItemInfo, eventName=""):
|
| | | job = curPlayer.GetJob()
|
| | | if isinstance(awardItemInfo, dict):
|
| | | if str(job) not in awardItemInfo:
|
| | |
| | | for itemInfo in itemList:
|
| | | itemID, itemCount = itemInfo[:2]
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | |
| | | if eventName:
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, eventName)
|
| | | return True
|
| | |
|
| | | ##对外接口, 交换物品
|
| | |
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
| | | openServerDayLimit = IpyGameDataPY.GetFuncCfg("OpenServerDailyAward", 1)
|
| | | if openServerDay >= openServerDayLimit:
|
| | | OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_OpenSererDailyAward, IpyGameDataPY.GetFuncEvalCfg("OpenServerDailyAward", 2))
|
| | | OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_OpenSererDailyAward, IpyGameDataPY.GetFuncEvalCfg("OpenServerDailyAward", 2), "OpenServerDailyAward")
|
| | | return
|
| | |
|
| | | ## 领取创角奖励
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | | return
|
| | |
|
| | | def OnGiveAwardByClient(curPlayer, rewardType, dictKey, awardCfg):
|
| | | def OnGiveAwardByClient(curPlayer, rewardType, dictKey, awardCfg, eventName=""):
|
| | | ## 发放前端控制的奖励,后端只负责发放奖励,是否可领奖前端自行判断
|
| | | if curPlayer.NomalDictGetProperty(dictKey):
|
| | | GameWorld.DebugLog("已领取过该奖励! rewardType=%s, dictKey=%s" % (rewardType, dictKey))
|
| | | return
|
| | | if not ItemCommon.GiveAwardItem(curPlayer, awardCfg):
|
| | | if not ItemCommon.GiveAwardItem(curPlayer, awardCfg, eventName):
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, dictKey, 1)
|
| | | Sync_RewardGetRecordInfo(curPlayer, rewardType, 1)
|
| | |
| | | # 给物品
|
| | | for itemID, itemCount in itemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "FuncOpenAward")
|
| | | Sync_FuncOpenState(curPlayer, [funcID])
|
| | | return
|
| | |
|
| | |
| | | isBind = itemInfo[2] if len(itemInfo) > 2 else 1
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem],
|
| | | event=[ChConfig.ItemGive_OpenServerCampaign, True, drDict])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, ChConfig.ItemGive_OpenServerCampaign)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | |
| | | for itemID, itemCount, isAuctionItem in awardItemList: |
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActBuyCountGift", False, {}]) |
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "ActBuyCountGift") |
| | | |
| | | addDataDict = {"actNum":actNum, "cfgID":cfgID, "buyCount":buyCount, "awardItemList":str(awardItemList)} |
| | | DataRecordPack.DR_FuncGiveItem(curPlayer, "ActBuyCountGift", addDataDict) |
| | |
| | |
|
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActLoginNew", False, {}])
|
| | | |
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "ActLoginNew")
|
| | | return
|
| | |
|
| | | def Sync_ActLoginPlayerInfo(curPlayer, actNum):
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType), updState)
|
| | | GameWorld.DebugLog("领取轮回殿奖励! actNum=%s,roundType=%s,needValue=%s,awardIndex=%s,awardState=%s,updState=%s,curRound=%s"
|
| | | % (actNum, roundType, needValue, awardIndex, awardState, updState, curRound), playerID)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Lunhuidian", False, {}])
|
| | |
|
| | | GameWorld.DebugLog(" curRound=%s/%s,unGetIndexList=%s,curValue=%s,roundValueMax=%s"
|
| | | % (curRound, roundMax, unGetIndexList, curValue, roundValueMax), playerID)
|
| | |
| | |
|
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActTask", False, {}])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "ActTask")
|
| | |
|
| | | # 检查进入下一轮
|
| | | if roundMax > 1 and roundNum < roundMax:
|
| | |
| | |
|
| | | for itemID, itemCount, _ in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "TotalRechargeAward")
|
| | |
|
| | | addDataDict = {"TemplateID":templateID, "NeedGold":needGold, "AwardIndex":awardIndex,
|
| | | "ItemList":str(awardItemList), "ActNum":actNum}
|
| | |
| | | # 给物品
|
| | | isAuctionItem = 0
|
| | | itemList = [[itemID, itemCount, isAuctionItem]]
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["tagActXianXiaMJLottery", False, {}])
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["XianXiaMJLottery", False, {}])
|
| | |
|
| | | # 任务
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_XianXiaMJLottery, 1)
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActivityCountTotal, totalCount)
|
| | |
|
| | | GameWorld.DebugLog("领取活跃放置奖励: totalCount=%s,rewardCount=%s,rewardItemCount=%s,rewardItemList=%s" % (totalCount, rewardCount, rewardItemCount, rewardItemList))
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, rewardItemList)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, rewardItemList, event=["ActivityPlace", False, {}])
|
| | |
|
| | |
|
| | | EventShell.EventRespons_ActivityPlace(curPlayer, "getreward")
|
| | | PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_ActivityPlace, rewardCount)
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealTotal, ctgRealTotal)
|
| | | Sync_CoinToGoldCountInfo(curPlayer, [])
|
| | |
|
| | | orderInfo = addDRDict.get("orderInfo", "")
|
| | | ctgID = ctgIpyData.GetRecordID() if ctgIpyData else 0
|
| | | notifyMark = ctgIpyData.GetNotifyMark() if ctgIpyData else ""
|
| | | goldBefore = curPlayer.GetGold()
|
| | | bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
| | |
| | | PlayerControl.GiveMoney(curPlayer, moneyType, prizeGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
|
| | |
|
| | | if giveItemList:
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, "", event=[ChConfig.ItemGive_CTG, True, copy.deepcopy(addDRDict)])
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, "", event=[ChConfig.ItemGive_CTG, True, copy.deepcopy(addDRDict)], isNotifyAward=False)
|
| | | if notifyMark:
|
| | | mainItemID = giveItemList[0][0]
|
| | | PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetName(), mainItemID, ''])
|
| | | else:
|
| | | if notifyMark:
|
| | | PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetName()])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, ChConfig.ItemGive_CTG, moneyInfo={moneyType:addGold+prizeGold}, |
| | | dataEx={"orderInfo":orderInfo, "ctgID":ctgID})
|
| | |
|
| | | addVIPExp = coinExp
|
| | | PlayerVip.AddVIPExp(curPlayer, addVIPExp)
|
| | |
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem],
|
| | | event=["FuncSysPrivilegeAward", False, {}])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "FuncSysPrivilegeAward")
|
| | |
|
| | | Sync_FuncSysPrivilege(curPlayer, [funcSysID])
|
| | | return
|
| | |
| | | isAuctionItem = False
|
| | | for itemID, itemCount in rewardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, rewardItemList, "GoldGiftFirst")
|
| | |
|
| | | # 全服提示
|
| | | if len(rewardItemList) >= 2:
|
| | |
| | | for itemInfo in itemList:
|
| | | itemID, itemCount = itemInfo[:2]
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "HistoryRecharge")
|
| | |
|
| | | # 更新已领取成功标记
|
| | | awardMark = pow(2, awardID)
|
| | |
| | | for itemID, itemCount, isAuctionItem in rewardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem],
|
| | | event=["Invest", False, {}])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, rewardItemList, "Invest")
|
| | |
|
| | | # 记录领取事件
|
| | | DataRecordPack.DR_GetGoldInvestReward(curPlayer, investType, rewardIndex, rewardItemList)
|
| | |
| | | # 给物品
|
| | | for itemID, itemCount in itemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "LVAward")
|
| | |
|
| | | # 更新已领取成功标记
|
| | | awardMark = pow(2, awardID - 1)
|
| | |
| | | # 给物品
|
| | | for itemID, itemCount in itemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "LoginDayAward")
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginDayAward, awardInfo | awardMark)
|
| | |
|
| | |
| | | #给钱
|
| | | for moneyType, value in ipyData.GetMoney():
|
| | | PlayerControl.GiveMoney(curPlayer, moneyType, value)
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "XBXZ", moneyInfo=ipyData.GetMoney())
|
| | | |
| | | SyncXBXZAwardRecord(curPlayer, [index])
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_XBXZ, 1, [ipyData.GetMWID()])
|
| | |
| | | return
|
| | |
|
| | | awardItemList = ipyData.GetAwardItemList()
|
| | | if not ItemCommon.GiveAwardItem(curPlayer, awardItemList):
|
| | | if not ItemCommon.GiveAwardItem(curPlayer, awardItemList, "RealmXXZL"):
|
| | | return
|
| | |
|
| | | updAwardState = awardState|pow(2, taskID)
|
| | |
| | | if totalExp > 0:
|
| | | PlayerControl.PlayerControl(curPlayer).AddExp(totalExp)
|
| | |
|
| | | giveMoneyType = IPY_GameWorld.TYPE_Price_Silver_Money
|
| | | if totalMoney > 0:
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, totalMoney, ChConfig.Def_GiveMoney_Recover)
|
| | | PlayerControl.GiveMoney(curPlayer, giveMoneyType, totalMoney, ChConfig.Def_GiveMoney_Recover)
|
| | |
|
| | | if totalSP > 0:
|
| | | PlayerControl.PlayerAddZhenQi(curPlayer, totalSP, True, True, "Recover")
|
| | |
| | | if mapIDInfo:
|
| | | FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
|
| | | GameWorld.DebugLog("==[PlayerRecover]== Out->OnRecoverGain() recoverWay=%s, costMoneyDict=%s, recoverCntDict=%s, totalExp=%s, totalMoney=%s, totalSP=%s, totalItemDict=%s" % (recoverWay, costMoneyDict, recoverCntDict, totalExp, totalMoney, totalSP, totalItemDict))
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, totalItemDict, "Recover", totalExp, moneyInfo={giveMoneyType:totalMoney})
|
| | | return
|
| | |
|
| | | def __DoLogicBackTimes(curPlayer, recoverData, recoverCnt):
|
| | |
| | | "isAddSign":isAddLogin, "CostMoney":str([IPY_GameWorld.TYPE_Price_Gold_Money, signCost])}
|
| | | DataRecordPack.DR_FuncGiveItem(curPlayer, "DayLoginSignAward", addDataDict)
|
| | | GameWorld.DebugLog("%s: %s" % ("补签" if isAddLogin else "签到", addDataDict), curPlayer.GetPlayerID())
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardInfoList + contineAwardInfoList, "SignDay")
|
| | |
|
| | | # 刷签到附加功能属性
|
| | | PlayerMagicWeapon.CalcMagicWeaponAttr(curPlayer)
|
| | |
| | | SetSuccHasGot(curPlayer, succID)
|
| | |
|
| | | # 给物品
|
| | | giveItemList = []
|
| | | if isGiveItem:
|
| | | for itemID, itemCnt in itemDict.items():
|
| | | isPutIn = ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
|
| | | if isPutIn:
|
| | | giveItemList.append([itemID, itemCnt])
|
| | |
|
| | | if isPassport:
|
| | | # 通行证奖励只给物品
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, "SuccessAward")
|
| | | return itemDict
|
| | |
|
| | | #给钱
|
| | |
| | | PlayerMagicWeapon.AddMagicWeaponUpExp(curPlayer, mwID, addExp)
|
| | | EventReport.WriteEvent_MWSuccess(curPlayer, mwID, succID, ChConfig.CME_Log_End, 1)
|
| | | GameWorld.DebugLog(" OK! awardItemDict=%s moneyDict=%s" % (itemDict, succData.moneyDict))
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, "SuccessAward", exp=succData.exp, moneyInfo=succData.moneyDict)
|
| | | return itemDict
|
| | |
|
| | |
|
| | |
| | | GameWorld.DebugLog("vip礼包-%s" % itemList)
|
| | | for itemid, cnt, isBind in itemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, int(itemid), int(cnt), 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere],
|
| | | event=["buyVIPGift", False, {"VIPLV":vipLV}])
|
| | | event=["BuyVIPGift", False, {"VIPLV":vipLV}])
|
| | | # else:
|
| | | # __AwardToPlayerByMail(curPlayer, itemList)
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "BuyVIPGift")
|
| | | openuiid = IpyGameDataPY.GetFuncEvalCfg('VIPPanel', 1, {}).get(vipLV, 0)
|
| | | PlayerControl.WorldNotify(0, 'BuyVIPGift', [curPlayer.GetName(), vipLV, itemList[0][0], openuiid])
|
| | | Sycn_VIPAwardRecord(curPlayer)
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_WeekParty)
|
| | | for itemID, itemCnt in awardDict.items():
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardDict, "WeekParty")
|
| | | SyncWeekPartyPlayerInfo(curPlayer, day, templateID)
|
| | | return
|
| | |
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_WeekParty)
|
| | | for itemID, itemCnt, isBind in itemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "WeekParty")
|
| | | SyncWeekPartyPlayerInfo(curPlayer, day)
|
| | | DataRecordPack.DR_WeekPartyPoint(curPlayer, day, getPoint)
|
| | | return
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 1)
|
| | | SyncXiangongInfo(curPlayer, [xiangongID])
|
| | | PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "LikeXiangong", {"xiangongID":xiangongID})
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, [], "LikeXiangong", moneyInfo={moneyType:moneyValue})
|
| | | return
|
| | |
|
| | | def GetTiandaoTreeAward(curPlayer, awardIndex):
|
| | |
| | |
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TiandaoAward, awardIndex, 1)
|
| | |
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TiandaoTree", False, {}])
|
| | |
|
| | | SyncTiandaoTreeInfo(curPlayer)
|
| | | return
|
| | |
| | | awardGoldPaper = ipyData.GetPerPlayerMoneyAward()
|
| | | addDataDict = {"bossID":bossID}
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, awardGoldPaper, ChConfig.Def_GiveMoney_BossFirstKill, addDataDict)
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, [], "BossFirstKill", moneyInfo={IPY_GameWorld.TYPE_Price_Gold_Paper:awardGoldPaper})
|
| | | Sync_BossFirstKillState(curPlayer, [bossID])
|
| | | return
|
| | |
|
| | |
| | |
|
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
|
| | | ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "BossFirstKill")
|
| | |
|
| | | Sync_BossFirstKillState(curPlayer, [bossID])
|
| | | return
|