· 6 years ago · Dec 27, 2019, 12:30 AM
1local SQLITE_DB = [[
2CREATE TABLE IF NOT EXISTS `nut_marketplace` (
3 `_id` INTEGER PRIMARY KEY,
4 `_sellerID` INTEGER,
5 `_sellerName` TEXT,
6 `_itemID` TEXT,
7 `_itemName` TEXT,
8 `_itemPrice` INTEGER,
9 `_itemSold` INTEGER,
10 `_time` INTEGER
11);
12]]
13
14function PLUGIN:InitializedPlugins()
15 if (!nut.db.object) then
16 nut.db.query(SQLITE_DB)
17 end;
18end;
19
20netstream.Hook("nutMarketplaceSearch", function(player, item, price)
21 local query = "SELECT * FROM nut_marketplace WHERE _sellerID <> "..player:getChar():getID().." AND _itemSold IS NULL"
22
23 if (item) then
24 query = query.." AND _itemName LIKE '%"..item.."%'"
25 end;
26
27 if (price > 0) then
28 query = query.." AND _itemPrice <= "..price
29 end;
30
31 nut.db.query(query, function(data)
32 if (data) then
33 netstream.Start(player, "marketplaceSearchResults", data)
34 end;
35 end)
36end)
37
38netstream.Hook("nutMarketplaceRemove", function(player, index)
39 local character = player:getChar()
40 nut.db.query("SELECT * FROM nut_marketplace WHERE _id = "..index.." AND _sellerID = "..character:getID().." AND _itemSold IS NULL", function(data)
41 if (data) then
42 data = data[1]
43
44 local inventory = character:getInv()
45
46 local success, fault = inventory:add(data._itemID)
47
48 if (success) then
49 nut.db.query("DELETE FROM nut_marketplace WHERE _id = "..index)
50
51 netstream.Start(player, "marketplaceMessage", "Item Removed From Market")
52
53 timer.Simple(0.5, function()
54 nut.db.query("SELECT * FROM nut_marketplace WHERE _sellerID = "..character:getID(), function(result)
55 netstream.Start(player, "marketplaceUI", result)
56 end)
57 end)
58 elseif (fault == "noSpace") then
59 netstream.Start(player, "marketplaceMessage", "Not Enough Inventory Space")
60 else
61 netstream.Start(player, "marketplaceMessage", "Unknown Fault: "..fault)
62 end;
63 else
64 netstream.Start(player, "marketplaceMessage", "Unable to Find Selected Item")
65 end;
66 end)
67end)
68
69netstream.Hook("nutMarketplaceClaim", function(player, index)
70 local character = player:getChar()
71 nut.db.query("SELECT * FROM nut_marketplace WHERE _id = "..index.." AND _sellerID = "..character:getID().." AND _itemSold IS NOT NULL", function(data)
72 if (data) then
73 data = data[1]
74
75 local profit = tonumber(data._itemPrice) - (tonumber(data._itemPrice) * 0.05)
76
77 character:giveMoney(math.Round(profit, 0))
78
79 nut.db.query("DELETE FROM nut_marketplace WHERE _id = "..index)
80
81 netstream.Start(player, "marketplaceMessage", "Profit of $"..math.Round(profit, 0).." Claimed")
82
83 timer.Simple(0.5, function()
84 nut.db.query("SELECT * FROM nut_marketplace WHERE _sellerID = "..character:getID(), function(result)
85 netstream.Start(player, "marketplaceUI", result)
86 end)
87 end)
88 else
89 netstream.Start(player, "marketplaceMessage", "Unable to Find Selected Item")
90 end;
91 end)
92end)
93
94netstream.Hook("nutMarketplacePurchase", function(player, index)
95 nut.db.query("SELECT * FROM nut_marketplace WHERE _id = "..index.." AND _itemSold IS NULL", function(data)
96 if (data) then
97 data = data[1]
98
99 local character = player:getChar()
100 local inventory = character:getInv()
101
102 if (character:getMoney() >= tonumber(data._itemPrice)) then
103 local success, fault = inventory:add(data._itemID)
104
105 if (success) then
106 character:takeMoney(tonumber(data._itemPrice))
107
108 nut.db.updateTable({_itemSold = 1}, nil, "marketplace", "_id = "..index)
109
110 netstream.Start(player, "marketplaceMessage", "Purchase Successful")
111
112 timer.Simple(0.5, function() netstream.Start(player, "marketplaceUI", nil, index) end)
113 elseif (fault == "noSpace") then
114 netstream.Start(player, "marketplaceMessage", "Not Enough Inventory Space")
115 else
116 netstream.Start(player, "marketplaceMessage", "Unknown Fault: "..fault)
117 end;
118 else
119 netstream.Start(player, "marketplaceMessage", "Not Enough Money")
120 end;
121 else
122 netstream.Start(player, "marketplaceMessage", "Unable to Find Selected Item")
123 end;
124 end)
125end)
126
127netstream.Hook("nutMarketplaceSubmit", function(player, id, price)
128 local character = player:getChar()
129 local inventory = character:getInv():getItems()
130
131 for i, v in pairs(inventory) do
132 if (v.id == id) then
133 local item = v.uniqueID
134
135 v:remove()
136
137 nut.db.insertTable({
138 _sellerID = character:getID(),
139 _sellerName = character:getName(),
140 _itemID = item,
141 _itemName = nut.item.list[item].name,
142 _itemPrice = price,
143 _time = os.time()
144 }, nil, "marketplace")
145
146 netstream.Start(player, "marketplaceMessage", "Market Submission Completed")
147
148 timer.Simple(0.5, function()
149 nut.db.query("SELECT * FROM nut_marketplace WHERE _sellerID = "..character:getID(), function(result)
150 netstream.Start(player, "marketplaceUI", result)
151 end)
152 end)
153
154 break
155 end;
156 end;
157end)