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
|
--[[
This file tells you what weapons need their swings recalculated
]]
local itm = nrequire("core/inventory/item.lua")
local ws = {}
--Cache swing hits, if we used one once, we'll probably use it again soon
local swingcache_size = 30
local swingcache = {} --Swing arc cache
--A table of all the items that are swingable
local swingable = {}
util.AddNetworkString("artery_notifyserverofswing")
util.AddNetworkString("artery_doanimation")
net.Receive("artery_notifyserverofswing",function()
local weapon = net.ReadString()
local anim = net.ReadString()
local data = net.ReadTable()
print("Got swing data for ",weapon,anim)
PrintTable(data)
--Get the data that already exists for this weapon
local olddata = file.Read("artery/dynamic/swingdata/" .. weapon .. ".txt","DATA")
if olddata == nil then olddata = {}
else olddata = util.JSONToTable(util.Decompress(olddata)) end
--Add our new data
olddata[anim] = data
--And save back
file.Write("artery/dynamic/swingdata/" .. weapon .. ".txt",util.Compress(util.TableToJSON(olddata)))
end)
function ws.makeSwingable(tbl)
assert(tbl.Name,"Tried to make a swingable weapon out of an item with no name!")
assert(tbl.attacks,"Tried to make a swingable weapon out of an item with no attacks! See rustyaxe.lua for example")
assert(tbl.pacname,"Tried to make a swingable weapon without a pac name! see rustyaxe.lua for example")
swingable[tbl.Name] = tbl
end
concommand.Add("artery_recordanimations",function(ply,cmd,args)
local animqueuetime = 0
for k,v in pairs(swingable) do
--equip the right item
print("equipable inventory:")
local eqi = ply.data.inventories[1]
print(ply.data.inventories[1])
local itm = eqi:Get({v.Equipable})
if itm ~= nil then
eqi:Remove({v.Equipable})
end
eqi:Put({v.Equipable},v)
--queue up each attack for the player to do
for i,j in pairs(v.attacks) do
timer.Simple(animqueuetime,function()
print("Doing attack:")
print(i,":",j)
net.Start("artery_doanimation")
net.WriteString(j.anim)
net.WriteDouble(j.time)
net.WriteString(v.Name)
net.WriteString(i)
net.Send(ply)
end)
animqueuetime = animqueuetime + j.time + 1
end
end
end)
concommand.Add("artery_checkSwingable",function(ply,cmd,args)
local nitms = 0
local noswingdata = {}
for k,v in pairs(swingable) do
--Make sure we have a weapon path for everything
if file.Exists( "artery/dynamic/swingdata/" .. k, "DATA" ) then
MsgC(Color(0,255,0),"Found data for " .. k .. "\n")
else
MsgC(Color(255,0,0),"Couldn't find data for " .. k .. "\n")
noswingdata[#noswingdata + 1] = k
end
nitms = nitms + 1
end
print("Scanned ",nitms,"swingable items, could not find data for:\n\t",table.concat(noswingdata,"\n\t"))
end)
concommand.Add("artery_clearswingable",function(ply,cmd,args)
swingable = {}
end)
return ws
|