From 47eb171907516123892ea3f5d1888c6394c72382 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 30 十月 2025 16:50:20 +0800
Subject: [PATCH] 16 卡牌服务端(宝箱开启、物品合成通知;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py | 27 ++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 10 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 92 ------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 68 ------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py | 17 ---
PySysDB/PySysDBPY.h | 27 -----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py | 1
8 files changed, 23 insertions(+), 221 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index f419b6e..dc81b01 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1363,13 +1363,6 @@
WORD OldPrice; //礼包原价
};
-//拍卖物品表
-
-struct tagAuctionItem
-{
- DWORD _AuctionItemID;
-};
-
//VIP特权表
struct tagVipPrivilege
@@ -1541,19 +1534,6 @@
BYTE CanBreakCollect; //被攻击是否打断采集
};
-//宝箱怪表
-
-struct tagTreasureNPC
-{
- DWORD _NPCID; //宝箱怪NPCID
- dict AttackCountDropWeightInfo; //攻击次数对应掉落权重饼图 {次数:[[权重, [物品ID,个数,是否拍品]], ...], ...}
- list AttackDropWeightList; //常规攻击权重饼图 [[权重, [物品ID,个数,是否拍品]], ...]
- list AttackDropWeightListEx; //额外掉落权重饼图库,每次攻击都会掉落 [[权重, [物品ID,个数,是否拍品]], ...]
- BYTE DropCountEx; //额外库执行次数
- BYTE AlchemyDiffLV; //过滤炼丹等级差,0-不过滤,>0过滤大于自身炼丹等级X级的物品
- char NotDropNotify; //没有掉落时提示信息
-};
-
//宝箱表开启
struct Chests
@@ -1561,11 +1541,8 @@
DWORD _ChestsItemID; //宝箱物品ID
DWORD CostItemID; //消耗物品ID
BYTE CostItemCount; //消耗物品个数
- WORD CostGold; //消耗仙玉
- BYTE ShowType; //前端表现类型0-无表现, >0有表现需同步结果,具体类型前端自定义
- BYTE IsBind; //开出物品是否绑定
- BYTE AucionItemCanSell; //开出拍品可否上架集市
- list AucionItemDiffSellIDList; //可否上架差异拍品ID列表,即可上架代表不可上架的拍品ID列表,不可上架代表可上架的拍品ID列表
+ BYTE CostMoneyType; //开启消耗货币类型
+ WORD CostMoneyValue; //消耗货币
};
//宝箱表产出表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index af57e4b..c0f9f16 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -15353,98 +15353,6 @@
#------------------------------------------------------
-# A8 10 通知获得物品 #tagMCNotifyUseItemGetItem
-
-class tagMCNotifyUseItemGetItem(Structure):
- Head = tagHead()
- UseItemID = 0 #(DWORD UseItemID)// 使用的物品ID
- UseCount = 0 #(WORD UseCount)// 使用物品个数
- GetItemLen = 0 #(WORD GetItemLen)
- GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
- MoneyType = 0 #(BYTE MoneyType)// 获得货币类型
- MoneyCount = 0 #(DWORD MoneyCount)// 获得货币数量
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xA8
- self.Head.SubCmd = 0x10
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.UseCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen)
- self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.MoneyCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xA8
- self.Head.SubCmd = 0x10
- self.UseItemID = 0
- self.UseCount = 0
- self.GetItemLen = 0
- self.GetItemData = ""
- self.MoneyType = 0
- self.MoneyCount = 0
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 4
- length += 2
- length += 2
- length += len(self.GetItemData)
- length += 1
- length += 4
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteDWORD(data, self.UseItemID)
- data = CommFunc.WriteWORD(data, self.UseCount)
- data = CommFunc.WriteWORD(data, self.GetItemLen)
- data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
- data = CommFunc.WriteBYTE(data, self.MoneyType)
- data = CommFunc.WriteDWORD(data, self.MoneyCount)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- UseItemID:%d,
- UseCount:%d,
- GetItemLen:%d,
- GetItemData:%s,
- MoneyType:%d,
- MoneyCount:%d
- '''\
- %(
- self.Head.OutputString(),
- self.UseItemID,
- self.UseCount,
- self.GetItemLen,
- self.GetItemData,
- self.MoneyType,
- self.MoneyCount
- )
- return DumpString
-
-
-m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
-
-
-#------------------------------------------------------
# A8 17 宠物培养信息 #tagMCPetTrainInfo
class tagMCPetTrainInfo(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
index 54125ab..27fb851 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
@@ -476,6 +476,7 @@
curSingleItem.Clear()
return
+ ItemControler.NotifyGiveAwardInfo(curPlayer, {newItemID:itemCount}, "Compound")
return userData
#// A3 13 物品拆解 #tagCMItemDecompound
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 57227ca..e36e757 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1116,10 +1116,6 @@
("WORD", "OldPrice", 0),
),
- "AuctionItem":(
- ("DWORD", "AuctionItemID", 1),
- ),
-
"VipPrivilege":(
("DWORD", "VIPPriID", 1),
("DWORD", "VIP0", 0),
@@ -1255,25 +1251,12 @@
("BYTE", "CanBreakCollect", 0),
),
- "TreasureNPC":(
- ("DWORD", "NPCID", 1),
- ("dict", "AttackCountDropWeightInfo", 0),
- ("list", "AttackDropWeightList", 0),
- ("list", "AttackDropWeightListEx", 0),
- ("BYTE", "DropCountEx", 0),
- ("BYTE", "AlchemyDiffLV", 0),
- ("char", "NotDropNotify", 0),
- ),
-
"Chests":(
("DWORD", "ChestsItemID", 1),
("DWORD", "CostItemID", 0),
("BYTE", "CostItemCount", 0),
- ("WORD", "CostGold", 0),
- ("BYTE", "ShowType", 0),
- ("BYTE", "IsBind", 0),
- ("BYTE", "AucionItemCanSell", 0),
- ("list", "AucionItemDiffSellIDList", 0),
+ ("BYTE", "CostMoneyType", 0),
+ ("WORD", "CostMoneyValue", 0),
),
"ChestsAward":(
@@ -3985,15 +3968,6 @@
def GetPrice(self): return self.attrTuple[2] # 礼包现价 WORD
def GetOldPrice(self): return self.attrTuple[3] # 礼包原价 WORD
-# 拍卖物品表
-class IPY_AuctionItem():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetAuctionItemID(self): return self.attrTuple[0] # DWORD
-
# VIP特权表
class IPY_VipPrivilege():
@@ -4189,21 +4163,6 @@
def GetNotifyCollectResult(self): return self.attrTuple[10] # 是否通知采集结果 BYTE
def GetCanBreakCollect(self): return self.attrTuple[11] # 被攻击是否打断采集 BYTE
-# 宝箱怪表
-class IPY_TreasureNPC():
-
- def __init__(self):
- self.attrTuple = None
- return
-
- def GetNPCID(self): return self.attrTuple[0] # 宝箱怪NPCID DWORD
- def GetAttackCountDropWeightInfo(self): return self.attrTuple[1] # 攻击次数对应掉落权重饼图 {次数:[[权重, [物品ID,个数,是否拍品]], ...], ...} dict
- def GetAttackDropWeightList(self): return self.attrTuple[2] # 常规攻击权重饼图 [[权重, [物品ID,个数,是否拍品]], ...] list
- def GetAttackDropWeightListEx(self): return self.attrTuple[3] # 额外掉落权重饼图库,每次攻击都会掉落 [[权重, [物品ID,个数,是否拍品]], ...] list
- def GetDropCountEx(self): return self.attrTuple[4] # 额外库执行次数 BYTE
- def GetAlchemyDiffLV(self): return self.attrTuple[5] # 过滤炼丹等级差,0-不过滤,>0过滤大于自身炼丹等级X级的物品 BYTE
- def GetNotDropNotify(self): return self.attrTuple[6] # 没有掉落时提示信息 char
-
# 宝箱表开启
class IPY_Chests():
@@ -4214,11 +4173,8 @@
def GetChestsItemID(self): return self.attrTuple[0] # 宝箱物品ID DWORD
def GetCostItemID(self): return self.attrTuple[1] # 消耗物品ID DWORD
def GetCostItemCount(self): return self.attrTuple[2] # 消耗物品个数 BYTE
- def GetCostGold(self): return self.attrTuple[3] # 消耗仙玉 WORD
- def GetShowType(self): return self.attrTuple[4] # 前端表现类型0-无表现, >0有表现需同步结果,具体类型前端自定义 BYTE
- def GetIsBind(self): return self.attrTuple[5] # 开出物品是否绑定 BYTE
- def GetAucionItemCanSell(self): return self.attrTuple[6] # 开出拍品可否上架集市 BYTE
- def GetAucionItemDiffSellIDList(self): return self.attrTuple[7] # 可否上架差异拍品ID列表,即可上架代表不可上架的拍品ID列表,不可上架代表可上架的拍品ID列表 list
+ def GetCostMoneyType(self): return self.attrTuple[3] # 开启消耗货币类型 BYTE
+ def GetCostMoneyValue(self): return self.attrTuple[4] # 消耗货币 WORD
# 宝箱表产出表
class IPY_ChestsAward():
@@ -6154,7 +6110,6 @@
self.__LoadFileData("TreasureUp", onlyCheck)
self.__LoadFileData("SignIn", onlyCheck)
self.__LoadFileData("VIPAward", onlyCheck)
- self.__LoadFileData("AuctionItem", onlyCheck)
self.__LoadFileData("VipPrivilege", onlyCheck)
self.__LoadFileData("Store", onlyCheck)
self.__LoadFileData("ActSpringSale", onlyCheck)
@@ -6167,7 +6122,6 @@
self.__LoadFileData("RuneCompound", onlyCheck)
self.__LoadFileData("ResourcesBack", onlyCheck)
self.__LoadFileData("CollectNPC", onlyCheck)
- self.__LoadFileData("TreasureNPC", onlyCheck)
self.__LoadFileData("Chests", onlyCheck)
self.__LoadFileData("ChestsAward", onlyCheck)
self.__LoadFileData("VIPKillNPC", onlyCheck)
@@ -7202,13 +7156,6 @@
self.CheckLoadData("VIPAward")
return self.ipyVIPAwardCache[index]
- def GetAuctionItemCount(self):
- self.CheckLoadData("AuctionItem")
- return self.ipyAuctionItemLen
- def GetAuctionItemByIndex(self, index):
- self.CheckLoadData("AuctionItem")
- return self.ipyAuctionItemCache[index]
-
def GetVipPrivilegeCount(self):
self.CheckLoadData("VipPrivilege")
return self.ipyVipPrivilegeLen
@@ -7292,13 +7239,6 @@
def GetCollectNPCByIndex(self, index):
self.CheckLoadData("CollectNPC")
return self.ipyCollectNPCCache[index]
-
- def GetTreasureNPCCount(self):
- self.CheckLoadData("TreasureNPC")
- return self.ipyTreasureNPCLen
- def GetTreasureNPCByIndex(self, index):
- self.CheckLoadData("TreasureNPC")
- return self.ipyTreasureNPCCache[index]
def GetChestsCount(self):
self.CheckLoadData("Chests")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index e22230c..73f307f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -1380,23 +1380,6 @@
return
-def SendUseItemGetItemResult(curPlayer, useItemID, useCount, getItemInfo, moneyType=0, moneyCount=0):
- # 通知客户端使用物品结果包
- # @param getItemInfo: [{"ItemID":物品ID, "Count":个数, "IsBind":是否绑定, "IsSuite":是否套装化, "UserData":"自定义属性字符串"}, ...]
-
- getItemInfo = json.dumps(getItemInfo, ensure_ascii=False)
- getItemInfo = getItemInfo.replace(" ", "")
- getItemPack = ChPyNetSendPack.tagMCNotifyUseItemGetItem()
- getItemPack.Clear()
- getItemPack.UseItemID = useItemID
- getItemPack.UseCount = useCount
- getItemPack.GetItemData = str(getItemInfo)
- getItemPack.GetItemLen = len(getItemPack.GetItemData)
- getItemPack.MoneyType = moneyType
- getItemPack.MoneyCount = moneyCount
- NetPackCommon.SendFakePack(curPlayer, getItemPack)
- return
-
#---------------------------------------------------------------------
## 准备结束
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 452ef4b..3ea23fe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -2010,7 +2010,7 @@
return False
if isAuctionItem:
- ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
+ ipyData = None #IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
if not ipyData:
GameWorld.ErrLog("非拍卖物品,默认转为非拍品! itemID=%s,itemCount=%s,isAuctionItem=%s"
% (itemID, itemCount, isAuctionItem), curPlayer.GetPlayerID())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index f4d4cca..08d8ed8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -347,11 +347,11 @@
return
curSingleItem.SetRemainHour(outTimeServerDay)
- if isAuctionItem:
- if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID):
- ItemControler.SetIsAuctionItem(curSingleItem, isAuctionItem)
- else:
- GameWorld.DebugLog("拍卖物品表不存在该ID!创建拍品失败,默认转为非拍品!itemID=%s" % itemID)
+ #if isAuctionItem:
+ # if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID):
+ # ItemControler.SetIsAuctionItem(curSingleItem, isAuctionItem)
+ # else:
+ # GameWorld.DebugLog("拍卖物品表不存在该ID!创建拍品失败,默认转为非拍品!itemID=%s" % itemID)
ItemControler.SetItemCount(curSingleItem, itemCount)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
index 1899293..ab9923a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
@@ -40,19 +40,17 @@
if not chestsIpyData:
return
- showType = chestsIpyData.GetShowType() # 规定有开箱表现的默认只能开启1个
#if showType:
# useCnt = 1
useCnt = min(curRoleItem.GetCount(), useCnt)
- isBind = int(chestsIpyData.GetIsBind()) # 奖励物品是否绑定
+ isBind = 0 # 奖励物品是否绑定
costItemID = chestsIpyData.GetCostItemID()
costItemCountTotal = chestsIpyData.GetCostItemCount() * useCnt
- costGoldTotal = chestsIpyData.GetCostGold() * useCnt
- auctionItemCanSell = chestsIpyData.GetAucionItemCanSell()
- aucionItemDiffSellIDList = chestsIpyData.GetAucionItemDiffSellIDList()
+ costMoneyType = chestsIpyData.GetCostMoneyType()
+ costGoldTotal = chestsIpyData.GetCostMoneyValue() * useCnt
- if costGoldTotal and not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGoldTotal):
+ if costGoldTotal and costMoneyType and not PlayerControl.HaveMoney(curPlayer, costMoneyType, costGoldTotal):
return
if costItemID:
@@ -69,8 +67,8 @@
if not awardInfo:
return
needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount = awardInfo
- GameWorld.DebugLog(" needSpaceDict=%s,jobAwardItemList=%s,moneyType=%s,moneyCount=%s,notifyItemList=%s,updOpenCount=%s,auctionItemCanSell=%s,aucionItemDiffSellIDList=%s"
- % (needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount, auctionItemCanSell, aucionItemDiffSellIDList))
+ GameWorld.DebugLog(" needSpaceDict=%s,jobAwardItemList=%s,moneyType=%s,moneyCount=%s,notifyItemList=%s,updOpenCount=%s"
+ % (needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount))
for packType, needSpace in needSpaceDict.items():
packSpace = ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace)
@@ -82,9 +80,9 @@
# 扣除消耗
if costItemID:
ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCountTotal, "Chests")
- if costGoldTotal:
+ if costMoneyType and costGoldTotal:
infoDict = {ChConfig.Def_Cost_Reason_SonKey:chestsItemID}
- PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGoldTotal, ChConfig.Def_Cost_UseItem, infoDict)
+ PlayerControl.PayMoney(curPlayer, costMoneyType, costGoldTotal, ChConfig.Def_Cost_UseItem, infoDict)
# 更新开启次数
if updOpenCount:
@@ -97,11 +95,8 @@
# 给奖励
syncItemList = []
for itemID, itemCount in jobAwardItemList:
- canSell = (not auctionItemCanSell) if itemID in aucionItemDiffSellIDList else auctionItemCanSell
- isAuctionItem = 1 if canSell and IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID) else 0
-
userDataList = []
- giveOKCount = ItemControler.DoGiveItemLoop(curPlayer, itemID, itemCount, isAuctionItem,
+ giveOKCount = ItemControler.DoGiveItemLoop(curPlayer, itemID, itemCount, isBind,
event=[ChConfig.ItemGive_Chests, False, {"UseItemID":chestsItemID}],
jsonItemList=syncItemList, userDataList=userDataList)
if giveOKCount < itemCount:
@@ -119,9 +114,7 @@
if not PlayerControl.GiveMoney(curPlayer, moneyType, moneyCount, ChConfig.Def_GiveMoney_UseItem, addDataDict, False):
moneyType, moneyCount = 0, 0
- # 通知
- if showType and syncItemList:
- ChItem.SendUseItemGetItemResult(curPlayer, chestsItemID, useCnt, syncItemList, moneyType, moneyCount)
+ ItemControler.NotifyGiveAwardInfo(curPlayer, jobAwardItemList, "Chests", moneyInfo={moneyType, moneyCount})
return True, useCnt
--
Gitblit v1.8.0