-
Notifications
You must be signed in to change notification settings - Fork 76
/
ShoppingBasket.lua
147 lines (123 loc) · 3.64 KB
/
ShoppingBasket.lua
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
local ItemsToBuy = {}
local ShopRange = 1250
local ShopLocation = Vector(GetShop().x, GetShop().y, GetShop().z)
function OnLoad()
Menu = scriptConfig("Shopping Basket", "MSB")
Menu:addParam("OnKeyPress", "Activade on pressing key:", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("P"))
Menu:addParam("OnRecall", "Activate on recall", SCRIPT_PARAM_ONOFF, true)
Menu:addParam("DrawN", "Draw items names", SCRIPT_PARAM_ONOFF, true)
Menu:addParam("DrawS", "Draw item sprites", SCRIPT_PARAM_ONOFF, true)
Menu:addParam("DrawG", "Draw items gold cost", SCRIPT_PARAM_ONOFF, true)
Menu:addParam("Draw", "Draw shop range", SCRIPT_PARAM_ONOFF, true)
Menu:addParam("Enabled", "Enabled", SCRIPT_PARAM_ONOFF, true)
end
function GoToShop()
if GetDistance(ShopLocation) > ShopRange then
Packet('R_WAYPOINTS', {wayPoints = {[myHero.networkID] = {{x=ShopLocation.x, y=ShopLocation.z}}}}):receive()
end
end
function OnGainBuff(unit, buff)
if Menu.Enabled and Menu.OnRecall and unit.isMe and buff.name:lower():find("recall") then
DelayAction(GoToShop, 0.3)
end
end
function OnSendPacket(p)
if not Menu.Enabled then return end
if p.header == Packet.headers.PKT_BuyItemReq and not myHero.dead and (GetDistance(ShopLocation) > ShopRange or GetDistance(ShopLocation) < 400) then
local packet = Packet(p)
local itemId = packet:get("itemId")
if itemId then
table.insert(ItemsToBuy, itemId)
end
p:Block()
end
if p.header == Packet.headers.PKT_RemoveItemReq and not myHero.dead then
if GetDistance(ShopLocation) > ShopRange or GetDistance(ShopLocation) < 400 then
p:Block()
end
end
end
function OnTick()
if not Menu.Enabled then return end
if Menu.OnKeyPress then
GoToShop()
end
--[[Buy the queued items]]
if GetDistance(ShopLocation) < ShopRange and GetDistance(ShopLocation) > 400 then
local delay = 0
while #ItemsToBuy > 0 do
delay = delay + math.random(0,1000)
delay = math.min(1500, delay)
DelayAction(BuyItemByID, delay/1000, {ItemsToBuy[1]})
table.remove(ItemsToBuy, 1)
end
end
end
function BuyItemByID(itemId)
Packet("PKT_BuyItemReq", {itemId = itemId}):send()
end
function GetBasketGold()
local result = 0
if not Menu.DrawG then return result end
for i, item in ipairs(ItemsToBuy) do
local ditem = GetItem(item)
if ditem then
result = result + ditem.gold.total
end
end
return result
end
function OnDraw()
if #ItemsToBuy > 0 then
DrawText("Shopping Basket ("..GetBasketGold().."g)", 16, 10, 10, ARGB(255,255,255,255))
end
local xpos = 10
local ypos = 20
for i, item in ipairs(ItemsToBuy) do
local text = ""
ypos = ypos + 20
if Menu.DrawN or Menu.DrawS then
local ditem = GetItem(item)
local dsprite = ditem:GetSprite()
local name = ditem:GetName()
local gold = ditem.gold.total
if Menu.DrawS then
dsprite:SetScale(0.25, 0.25)
dsprite:Draw(10, ypos - 6, 255)
end
if Menu.DrawN then
text = name
end
if Menu.DrawG then
text = text.." ("..gold.."g)"
end
else
text = "ID "..item
end
local color = ARGB(255,255,255,255)
if not CursorIsUnder(xpos, ypos, 100, 13) then
color = ARGB(255, 255, 255, 255)
else
color = ARGB(255, 255, 0, 0)
end
DrawText(text, 13, xpos + 16, ypos, color)
end
if Menu.Draw and GetDistanceSqr(ShopLocation) < ShopRange * ShopRange * 4 then
DrawCircle(ShopLocation.x, ShopLocation.y, ShopLocation.z, ShopRange, ARGB(255,255,255,255))
end
end
function OnWndMsg(Msg, Key)
if Msg == WM_LBUTTONDOWN then
local xpos = 10
local ypos = 20
local i = 1
while i <= #ItemsToBuy do
ypos = ypos + 20
if not CursorIsUnder(xpos, ypos, 100, 13) then
i = i + 1
else
table.remove(ItemsToBuy, i)
end
end
end
end