--[[ 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