diff options
Diffstat (limited to 'gamemode/core')
| -rw-r--r-- | gamemode/core/combat/cl_damage.lua | 71 | ||||
| -rw-r--r-- | gamemode/core/combat/sv_damage.lua | 10 | ||||
| -rw-r--r-- | gamemode/core/combat/sv_weaponswing.lua | 5 | ||||
| -rw-r--r-- | gamemode/core/npc/sv_huntingspawner.lua | 27 | ||||
| -rw-r--r-- | gamemode/core/npc/sv_npcsystem.lua | 2 |
5 files changed, 102 insertions, 13 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)() |
