forked from ChimneySwift/fancy_vend
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpurchase.lua
More file actions
85 lines (72 loc) · 2.77 KB
/
purchase.lua
File metadata and controls
85 lines (72 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function fancy_vend.make_purchase(pos, player, lots)
if not fancy_vend.can_buy_from_vendor(pos, player) then
return false, "You cannot purchase from this vendor"
end
local settings = fancy_vend.get_vendor_settings(pos)
local meta = core.get_meta(pos)
local inv = meta:get_inventory()
local player_inv = player:get_inventory()
local status, errorcode = fancy_vend.get_vendor_status(pos)
-- Double check settings, vendors which were incorrectly set up before this bug fix won't matter anymore
settings.input_item_qty = math.abs(settings.input_item_qty)
settings.output_item_qty = math.abs(settings.output_item_qty)
if status then
-- Get input and output quantities after multiplying by lot count
local output_qty = settings.output_item_qty * lots
local input_qty = settings.input_item_qty * lots
-- Perform inventory checks
local ct = fancy_vend.run_inv_checks(pos, player, lots)
if ct.player_has then
if ct.player_fits then
if settings.admin_vendor then
core.log("action", player:get_player_name().." trades "..
settings.input_item_qty.." "..settings.input_item.." for "..
settings.output_item_qty.." "..settings.output_item..
" using vendor at "..core.pos_to_string(pos)
)
fancy_vend.inv_remove(player_inv, "main",
ct.player_item_table, settings.input_item, input_qty
)
fancy_vend.inv_insert(player_inv, "main",
ItemStack(settings.output_item), output_qty, nil
)
return true, "Trade successful"
elseif ct.vendor_has then
if ct.vendor_fits then
core.log("action", player:get_player_name().." trades "..
settings.input_item_qty.." "..settings.input_item.." for "..
settings.output_item_qty.." "..settings.output_item..
" using vendor at "..core.pos_to_string(pos)
)
fancy_vend.inv_remove(inv, "main",
ct.vendor_item_table, settings.output_item, output_qty
)
fancy_vend.inv_remove(player_inv, "main",
ct.player_item_table, settings.input_item, input_qty
)
fancy_vend.inv_insert(player_inv, "main",
ItemStack(settings.output_item), output_qty, ct.vendor_item_table
)
fancy_vend.inv_insert(inv, "main",
ItemStack(settings.input_item), input_qty, ct.player_item_table,
pos, (core.get_modpath("pipeworks") and settings.currency_eject)
)
-- Run mail mod checks
fancy_vend.alert_owner_if_empty(pos)
return true, "Trade successful"
else
return false, "Vendor has insufficient space"
end
else
return false, "Vendor has insufficient resources"
end
else
return false, "You have insufficient space"
end
else
return false, "You have insufficient funds"
end
else
return false, "Vendor is inactive"..fancy_vend.make_inactive_string(errorcode)
end
end