diff options
| author | Alexander Pickering <Alexander.Pickering@anondomain.site90.net> | 2016-01-11 20:01:06 -0500 |
|---|---|---|
| committer | Alexander Pickering <Alexander.Pickering@anondomain.site90.net> | 2016-01-11 20:01:06 -0500 |
| commit | 6d9625e0e3e936cbbce110226b37fc96db793fc0 (patch) | |
| tree | e925d53dadb8dd1d6d9cec20e5b241bd9c5cd3a5 | |
| parent | cfb350ae08614563d3544c68a59b3ece22b77d6f (diff) | |
| download | wintersurvival2-6d9625e0e3e936cbbce110226b37fc96db793fc0.tar.gz wintersurvival2-6d9625e0e3e936cbbce110226b37fc96db793fc0.tar.bz2 wintersurvival2-6d9625e0e3e936cbbce110226b37fc96db793fc0.zip | |
Got npc working
| -rw-r--r-- | entities/entities/ws_npc_ambient/shared.lua | 16 | ||||
| -rw-r--r-- | gamemode/npcsystem/aidirector.lua | 5 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/antlion1.lua | 2 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/antlion2.lua | 2 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/antlion3.lua | 177 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/base.lua | 5 |
6 files changed, 205 insertions, 2 deletions
diff --git a/entities/entities/ws_npc_ambient/shared.lua b/entities/entities/ws_npc_ambient/shared.lua index c14de1e..3379ed0 100644 --- a/entities/entities/ws_npc_ambient/shared.lua +++ b/entities/entities/ws_npc_ambient/shared.lua @@ -99,6 +99,22 @@ function ENT:BehaveAct() end
end
+--[[
+function ENT:BehaveUpdate(num)
+ if(!self.BehaveCycle) then return
+ else
+ print("We have behavior!")
+ end
+ --print(num)
+ --self:BehaveUpdate(num)
+
+ if(self.BehaveUpdate) then
+ self:BehaveUpdate(num)
+ end
+
+end
+]]--
+
function ENT:RunBehaviour()
if(self.Behave) then
self:Behave()
diff --git a/gamemode/npcsystem/aidirector.lua b/gamemode/npcsystem/aidirector.lua index 2f9b7a7..008ad1a 100644 --- a/gamemode/npcsystem/aidirector.lua +++ b/gamemode/npcsystem/aidirector.lua @@ -101,6 +101,11 @@ function SpawnNpcByName(name, position) if(entdata.OnSpawn) then
ent.OnSpawn = entdata.OnSpawn
end
+ --[[
+ if(entdata.BehaveCycle) then
+ ent.BehaveCycle = entdata.BehaveCycle
+ end
+ ]]--
print("NPC created")
ent:Spawn()
print("NPC spawned")
diff --git a/gamemode/npcsystem/npcs/antlion1.lua b/gamemode/npcsystem/npcs/antlion1.lua index 2123bf2..4e35cb3 100644 --- a/gamemode/npcsystem/npcs/antlion1.lua +++ b/gamemode/npcsystem/npcs/antlion1.lua @@ -8,7 +8,7 @@ NPC.Social = "Solo" --Solo, Pack NPC.Stats = { ["Vitality"] = 150, - ["Speed"] = 800, + ["Speed"] = 200, ["AwareDist"] = 1000, ["Accel"] = 400, ["Decel"] = 400, diff --git a/gamemode/npcsystem/npcs/antlion2.lua b/gamemode/npcsystem/npcs/antlion2.lua index d55ba40..353b3cd 100644 --- a/gamemode/npcsystem/npcs/antlion2.lua +++ b/gamemode/npcsystem/npcs/antlion2.lua @@ -8,7 +8,7 @@ NPC.Social = "Solo" --Solo, Pack NPC.Stats = { ["Vitality"] = 150, - ["Speed"] = 800, + ["Speed"] = 200, ["AwareDist"] = 1000, ["Accel"] = 400, ["Decel"] = 400, diff --git a/gamemode/npcsystem/npcs/antlion3.lua b/gamemode/npcsystem/npcs/antlion3.lua new file mode 100644 index 0000000..0f09214 --- /dev/null +++ b/gamemode/npcsystem/npcs/antlion3.lua @@ -0,0 +1,177 @@ +NPC.Name = "Antlion Charger" +NPC.Desc = "A fearsome monster!" +NPC.Class = "Agressive" --Ambient, Agressive, Boss +NPC.Model = "models/antlion.mdl" +NPC.Icon = Material("wintersurvival2/hud/ws1_icons/icon_rock") + +NPC.Social = "Solo" --Solo, Pack + +NPC.Stats = { + ["Vitality"] = 150, + ["Speed"] = 200, + ["AwareDist"] = 1000, + ["Accel"] = 400, + ["Decel"] = 400, + ["Step"] = 20, --Step height + ["Hull"] = HULL_LARGE +} + +--Drops should be formated as [index]={["item name"], percent_drop} where percent_drop is a number from 0 to 100 +NPC.Drops = { + [0] = {"Meat",100}, + [1] = {"Meat",100}, + [2] = {"Meat",80}, + [3] = {"Meat",50}, + [4] = {"Chitin",80}, + [5] = {"Chitin",50}, +} + +--Some npc's like birds have diffent names for their idle sequences +NPC.IdleSequences = { + [0] = "Idle", +} + +--Distance to be made aware of players + +--Attacks should be formated as [i]={function (return int dammage) canattack(ply) = function doattack(ply)} +--NPC will do the most dammage possible per attack +local checkmele = function(self, ply) + if(ply:GetPos():Distance(self:GetPos()) < 100) then return 20 end + return -1 +end + +local domele = function(self, ply) + self:StartActivity(ACT_MELEE_ATTACK1) + --Antlion has 6 attack animations + local attackanim = math.Round(math.Rand(1,6)) + coroutine.wait(0.5) + --If the player is still in front of us after the animation, they didn't dodge! apply dammage! + if(ply:GetPos():Distance(self:GetPos()) < 100) then + ply:TakeDamage(20) + end + --Finish up the animation + coroutine.wait(0.25) +end + +local checkcharge = function(self,ply) + local dist = ply:GetPos():Distance(self:GetPos()) + if(dist > 500 and dist < 1000) then return 10 end + return -1 +end + +local docharge = function(self,ply) + self:PlaySequenceAndWait("charge_start") + self:SetSequence(self:LookupSequence("charge_run")) + timer.Create("Runcycle", 0.3, 0, function() self:SetCycle(0) end) + self.loco:SetDesiredSpeed(800) + local navarea = navmesh.GetNavArea(self:GetPos(), 100) + if navarea:IsValid() then + local moveop = {} + moveop.tolerance = 50 + moveop.repath = 2 + moveop.lookahead = 3 + moveop.draw = true + self:MoveToPos(ply:GetPos(),moveop) + else + print("Could not find valid navmesh, suicideing to prevent server crash!") + self:BecomeRagdoll(DamageInfo()) + end + timer.Remove("Runcycle") + if(ply:GetPos():Distance(self:GetPos()) < 100) then + ply:TakeDamage(20) + end + self:PlaySequenceAndWait("charge_end") +end + +local checkrun = function(self, ply) return 0 end + +local dorun = function(self, ply) + local navarea = navmesh.GetNavArea(self:GetPos(), 100) + self.loco:SetDesiredSpeed(self.Stats["Speed"] ) + if navarea:IsValid() then + local moveop = {} + moveop.tolerance = 50 + moveop.repath = 2 + moveop.lookahead = 3 + moveop.draw = true + self:StartActivity(ACT_WALK) + self:MoveToPos(ply:GetPos(),moveop) + else + print("Could not find valid navmesh, suicideing to prevent server crash!") + self:BecomeRagdoll(DamageInfo()) + end +end + +NPC.Attacks = { + [1] = { --A mele attack + [checkmele] = domele + }, + + [2] = {--Move to the player + [checkrun] = dorun + + }, + + [3] = {--Charge player + [checkcharge] = docharge + }, + + +} + +--Attack priority is a fucntion that takes a player, and returns an int describing it's prority to attack (higher = more important) NPC will always attack the player with the highest priority +function NPC:AttackPriority(ply) + local plypos = ply:GetPos() + local mypos = self:GetPos() + if not plypos then return 0 end + local dist = plypos:Distance(mypos) + return self.Stats["AwareDist"] - dist +end + +--A function that takes a position and returns true if this is an acceptable place to spawn +function NPC:SpawnLocations(pos) + return true +end + +--The entity that is this npc's current target, if it has one. Nil otherwise +NPC.Target = nil + +--All enemies that this NPC is aware of +NPC.AwareEnemies = {} + +--What to replace the ENT:BehaveAct with +function NPC:Act() +end + +--What to replace ENT:OnStuck with +function NPC:Stuck() + --If we're stuck, jump backwards +end + +function NPC:OnSpawn() + self:SetSkin(3) +end +--These are just here to tell the editors/develoeprs what functions are available.. dont un-comment them out, as this could affect all the items. +/* +function NPC:OnSpawn() +end + +--If we need to do more than just reduce health on dammage +function NPC:OnDammage(ammount) +end + +--If we need to do more than just drop items on death +function NPC:OnDeath() +end + +--A particular spell was cast on this npc by player +function NPC:OnSpell(spell, player) +end + +function NPC:OnFindEnemy(enemy) +end + +--Called when the npc is attacking anything with any attack +function NPC:OnAttack(target) +end +*/ diff --git a/gamemode/npcsystem/npcs/base.lua b/gamemode/npcsystem/npcs/base.lua index 880e4a5..337276f 100644 --- a/gamemode/npcsystem/npcs/base.lua +++ b/gamemode/npcsystem/npcs/base.lua @@ -54,6 +54,11 @@ end function NPC:Behaviour()
end
+--what to replace BehaveUpdate with
+function NPC:BehaveCycle(number seconds_since_last_update)
+end
+
+--Called when the npc is spawned
function NPC:OnSpawn()
end
|
