aboutsummaryrefslogtreecommitdiff
path: root/gamemode
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode')
-rw-r--r--gamemode/core/combat/cl_damage.lua71
-rw-r--r--gamemode/core/combat/sv_damage.lua10
-rw-r--r--gamemode/core/combat/sv_weaponswing.lua5
-rw-r--r--gamemode/core/npc/sv_huntingspawner.lua27
-rw-r--r--gamemode/core/npc/sv_npcsystem.lua2
-rw-r--r--gamemode/utility/svg/cl_svg.lua2
6 files changed, 103 insertions, 14 deletions
diff --git a/gamemode/core/combat/cl_damage.lua b/gamemode/core/combat/cl_damage.lua
new file mode 100644
index 0000000..fee8175
--- /dev/null
+++ b/gamemode/core/combat/cl_damage.lua
@@ -0,0 +1,71 @@
+--Displays numbers for damage
+
+local drawables = {
+ [1] = {
+ starttime = CurTime(),
+ ammt = 5,
+ startpos = LocalPlayer():GetEyeTrace().HitPos
+ }
+}
+
+net.Receive("art_damage_ent",function()
+ print("Notified of damage")
+ local who = net.ReadEntity()
+ local dmg = net.ReadDouble()
+
+ --A random vector in the entity
+ local aa,bb = who:WorldSpaceAABB()
+ local mr = math.random
+ local rx,ry,rz = mr(aa.x,bb.x),mr(aa.y,bb.y),mr(aa.z,bb.z)
+ local drawinfo = {
+ starttime = CurTime(),
+ ammt = dmg,
+ startpos = Vector(rx,ry,rz)
+ }
+
+ --Max 255 drawables at once
+ drawables[#drawables+1 % 255] = drawinfo
+end)
+
+hook.Add( "PostDrawOpaqueRenderables", "art_damage_draw", function()
+ local trace = LocalPlayer():GetEyeTrace()
+ local angle = trace.HitNormal:Angle()
+
+ local lpp,sp = LocalPlayer():GetPos(),trace.HitPos
+ local to = lpp - sp
+ local matang = to:Angle()
+
+ matang.r = 90
+ matang.y = matang.y+90
+ matang.p = 0
+
+ render.DrawLine( trace.HitPos, trace.HitPos + 8 * angle:Forward(), Color( 255, 0, 0 ), true )
+ render.DrawLine( trace.HitPos, trace.HitPos + 8 * -angle:Right(), Color( 0, 255, 0 ), true )
+ render.DrawLine( trace.HitPos, trace.HitPos + 8 * angle:Up(), Color( 0, 0, 255 ), true )
+
+ surface.SetFont( "Trebuchet24" )
+ local lpp = LocalPlayer():GetPos()
+ for k,v in pairs(drawables) do
+ local ct = CurTime()
+ local delta = ct - v.starttime
+ local alpha = 255 * (math.log(v.ammt) - (delta/2))
+ if alpha < 1 then
+ drawables[k] = nil
+ continue
+ end
+ local lam = math.log(v.ammt)
+ local lad = (20/lam)
+ local opx = math.sin(delta) * lad
+ local opy = math.cos(delta) * lad
+ local dpos = v.startpos + Vector(opx,opy,delta*100*(1/v.ammt)+20)
+ local matang = (lpp - dpos):Angle()
+ matang.r = 90
+ matang.y = matang.y + 90
+ matang.p = 0
+ surface.SetTextColor( 255, 255, 255, alpha )
+ cam.Start3D2D( dpos, matang, lam )
+ surface.SetTextPos(0,0)
+ surface.DrawText(tostring(v.ammt))
+ cam.End3D2D()
+ end
+end )
diff --git a/gamemode/core/combat/sv_damage.lua b/gamemode/core/combat/sv_damage.lua
new file mode 100644
index 0000000..654dd82
--- /dev/null
+++ b/gamemode/core/combat/sv_damage.lua
@@ -0,0 +1,10 @@
+--Displays littler numbers when something takes damage
+
+util.AddNetworkString("art_damage_ent")
+
+hook.Add("EntityTakeDamage","art_damage_numbers",function(ent,dmg)
+ net.Start("art_damage_ent")
+ net.WriteEntity(ent)
+ net.WriteDouble(dmg:GetDamage())
+ net.Broadcast()
+end)
diff --git a/gamemode/core/combat/sv_weaponswing.lua b/gamemode/core/combat/sv_weaponswing.lua
index 29afd7a..f754000 100644
--- a/gamemode/core/combat/sv_weaponswing.lua
+++ b/gamemode/core/combat/sv_weaponswing.lua
@@ -86,6 +86,11 @@ function ws.doSwing(weapon,ply,callback)
for k,v in pairs(hitthings) do
callback(v)
end
+ if #hitthings == 0 then
+ if weapon.onMiss then
+ weapon:onMiss(ply)
+ end
+ end
end)
end
diff --git a/gamemode/core/npc/sv_huntingspawner.lua b/gamemode/core/npc/sv_huntingspawner.lua
index 283b27f..d13ec36 100644
--- a/gamemode/core/npc/sv_huntingspawner.lua
+++ b/gamemode/core/npc/sv_huntingspawner.lua
@@ -4,28 +4,30 @@
local track = nrequire("core/inventory/sv_invtracker.lua")
local itm = nrequire("core/inventory/item.lua")
local o = {}
-
+local playerhunted = {}
local huntablenodes = {}
function o.CreateSpawnNode(tbl)
huntablenodes[#huntablenodes+1] = tbl
local e = ents.Create("info_huntablespawn")
e:SetPos(tbl.Position)
+ e:Spawn()
end
local function SpawnMonsterFor(ply,zone)
--Check what hunting ground we're in
- print("I want to attack",ply)
+ --print("I want to attack",ply)
if zone == nil then return end
- print("I am in a zone!")
+ --print("I am in a zone!")
local possiblenpcs = zone.npctbl
- PrintTable(possiblenpcs)
+ --PrintTable(possiblenpcs)
local randnum = math.random(0,100)
- print("Random num was",randnum)
+ --print("Random num was",randnum)
local npctype
for k,v in pairs(possiblenpcs) do
randnum = randnum - v
- print("Subtracting ", v , " for ",k)
+ --print("Subtracting ", v , " for ",k)
+ --print(randnum)
if randnum < 0 then
npctype = k
break
@@ -36,14 +38,14 @@ local function SpawnMonsterFor(ply,zone)
print(ply,"got lucky this time...")
return
end
- print("I will spawn a ",npctype,"to attack ",ply,"!")
+ --print("I will spawn a ",npctype,"to attack ",ply,"!")
--Find a place for the npc to spawn that's out of sight!
local potentialspots = ents.FindInSphere( ply:GetPos(), 4000 )
for k,v in pairs(potentialspots) do
- print("Checking spot",v)
+ --print("Checking spot",v)
if v:GetClass() ~= "info_huntablespawn" then
- print("Was not an info_huntablespawn")
+ --print("Was not an info_huntablespawn")
potentialspots[k] = nil
else
local tr = util.TraceLine({
@@ -63,11 +65,12 @@ local function SpawnMonsterFor(ply,zone)
--Choose a random spot!
local spawnpos = a[math.random(1,#a)]
- print("I want to spawn a monster at", spawnpos)
+ --print("I want to spawn a monster at", spawnpos)
if spawnpos == nil then
- print("Couldn't find a spot to spawn an NPC around",ply,"at",ply:GetPos(),"make sure there are enough info_huntablespawn entities around in little corners and stuff")
+ --print("Couldn't find a spot to spawn an NPC around",ply,"at",ply:GetPos(),"make sure there are enough info_huntablespawn entities around in little corners and stuff")
return
end
+
--Do a trace up to hit the skybox,
local npc = ents.Create(npctype)
npc:SetPos(spawnpos:GetPos())
@@ -110,7 +113,7 @@ hook.Add("OnNPCKilled","droplootforexnpcs",function(npc,attacker,inflictor)
if rng < itemchance then
local drop = itm.GetItemByName(itemname)
print("Createing a drop of",drop)
- track.CreateDroppedItem(drop, self:GetPos()+Vector(math.random(20),math.random(20),20))
+ track.CreateDroppedItem(drop, npc:GetPos()+Vector(math.random(20),math.random(20),20))
end
end
end)
diff --git a/gamemode/core/npc/sv_npcsystem.lua b/gamemode/core/npc/sv_npcsystem.lua
index 0b250ac..1051c64 100644
--- a/gamemode/core/npc/sv_npcsystem.lua
+++ b/gamemode/core/npc/sv_npcsystem.lua
@@ -87,7 +87,7 @@ local function loadMap()
local foldername = "artery/maps/" .. mapname
ExecuteOnFolder(foldername,true,function(path)
- --print("I want to run",path)
+ print("I want to run",path)
local filetxt = file.Read(path,"DATA")
--print("File text is", filetxt)
CompileString(filetxt,path)()
diff --git a/gamemode/utility/svg/cl_svg.lua b/gamemode/utility/svg/cl_svg.lua
index 1ab37bb..6f34390 100644
--- a/gamemode/utility/svg/cl_svg.lua
+++ b/gamemode/utility/svg/cl_svg.lua
@@ -68,7 +68,7 @@ function svg.MaterialFromSVG(spath,background,foreground)
end
html:SetHTML(string.format([[
<style>%s%sbody{overflow:hidden}</style><body>%s</body>
-]],background and bgf or "",fgf and foreground or "",svgdata))
+]],background and bgf or "",foreground and fgf or "",svgdata))
local mat = {}
toprocess[#toprocess + 1] = {mat,html}
return mat