aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2016-03-28 22:02:52 -0400
committerAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2016-03-28 22:02:52 -0400
commitc6d81a837ba5bb46246ca6703f539e69a18b8216 (patch)
tree510bb8d0b15165dbf1737f9a860d19d7750734f2
parentfe897eaf8d8be4cfdc4e2c4e90ed5c775de0c291 (diff)
downloadwintersurvival2-c6d81a837ba5bb46246ca6703f539e69a18b8216.tar.gz
wintersurvival2-c6d81a837ba5bb46246ca6703f539e69a18b8216.tar.bz2
wintersurvival2-c6d81a837ba5bb46246ca6703f539e69a18b8216.zip
More debugging to find what's glitching ai's
-rw-r--r--entities/entities/ws_rune/cl_init.lua5
-rw-r--r--entities/entities/ws_rune/init.lua60
-rw-r--r--entities/entities/ws_rune/shared.lua5
-rw-r--r--gamemode/npcsystem/bosses/base.lua83
-rw-r--r--gamemode/npcsystem/bosses/ent.lua0
-rw-r--r--gamemode/npcsystem/bosses/treeling.lua0
-rw-r--r--gamemode/npcsystem/npcs/antlion1.lua4
-rw-r--r--gamemode/npcsystem/npcs/antlion2.lua4
-rw-r--r--gamemode/npcsystem/npcs/zombie.lua4
-rw-r--r--gamemode/npcsystem/spawnbosses.lua42
10 files changed, 201 insertions, 6 deletions
diff --git a/entities/entities/ws_rune/cl_init.lua b/entities/entities/ws_rune/cl_init.lua
new file mode 100644
index 0000000..6bc006e
--- /dev/null
+++ b/entities/entities/ws_rune/cl_init.lua
@@ -0,0 +1,5 @@
+include('shared.lua')
+
+function ENT:Draw()
+ self.Entity:DrawModel()
+end
diff --git a/entities/entities/ws_rune/init.lua b/entities/entities/ws_rune/init.lua
new file mode 100644
index 0000000..17aa936
--- /dev/null
+++ b/entities/entities/ws_rune/init.lua
@@ -0,0 +1,60 @@
+AddCSLuaFile("cl_init.lua")
+AddCSLuaFile("shared.lua")
+
+include('shared.lua')
+
+function ENT:Initialize()
+ self:SetModel("models/props_c17/oildrum001.mdl")
+ self:PhysicsInit(SOLID_VPHYSICS)
+ self:SetMoveType(MOVETYPE_NONE)
+ self:SetSolid(SOLID_VPHYSICS)
+ self:SetUseType(SIMPLE_USE)
+
+ local phys = self:GetPhysicsObject()
+ phys:EnableMotion(false)
+ phys:Sleep()
+
+ self:SetHealth(30)
+
+ self.StoredItems = {}
+end
+
+function ENT:AddItem(item,quantity)
+ for k,v in pairs(self.StoredItems) do
+ if (v.Name == item) then
+ v.Quantity = v.Quantity + quantity
+ return
+ end
+ end
+
+ table.insert(self.StoredItems,{Name = item, Quantity = quantity})
+end
+
+function ENT:TakeItem(pl,item,quantity)
+ for k,v in pairs(self.StoredItems) do
+ if (v.Name == item) then
+ quantity = math.min(quantity,v.Quantity)
+ v.Quantity = v.Quantity - quantity
+
+ pl:AddItem(item,quantity)
+
+ if (v.Quantity <= 0) then table.remove(self.StoredItems,k) end
+ break
+ end
+ end
+end
+
+function ENT:GetItems()
+ return self.StoredItems
+end
+
+function ENT:Use(pl)
+ if (pl:IsPigeon()) then return end
+ OpenLootventory(pl,self.StoredItems,self)
+end
+
+function ENT:OnTakeDamage(dmg)
+ self:SetHealth(self:Health()-dmg)
+
+ if (self:Health() <= 0) then self:Remove() end
+end
diff --git a/entities/entities/ws_rune/shared.lua b/entities/entities/ws_rune/shared.lua
new file mode 100644
index 0000000..bc8a71d
--- /dev/null
+++ b/entities/entities/ws_rune/shared.lua
@@ -0,0 +1,5 @@
+ENT.Type = "anim"
+ENT.Base = "base_anim"
+
+function ENT:OnRemove()
+end
diff --git a/gamemode/npcsystem/bosses/base.lua b/gamemode/npcsystem/bosses/base.lua
new file mode 100644
index 0000000..27f68d6
--- /dev/null
+++ b/gamemode/npcsystem/bosses/base.lua
@@ -0,0 +1,83 @@
+NPC.Name = "Winter Survival 2 Base NPC"
+NPC.Desc = "Why the hell did I write this? No one will read it anyways!!"
+NPC.Class = "Other" --Ambient, Agressive, Boss
+NPC.Model = "models/props_combine/breenlight.mdl"
+NPC.Icon = Material("wintersurvival2/hud/ws1_icons/icon_rock")
+
+NPC.Social = "Pack" --Solo, Pack
+
+NPC.Stats = {
+ ["Vitality"] = 1,
+ ["Speed"] = 1,
+ ["AwareDist"] = 1,
+ ["Accel"] = 1,
+ ["Decel"] = 1,
+ ["Step"] = 1, --Step height
+ ["Hull"] = HULL_HUMAN
+}
+
+--Some npc's like birds have diffent names for their idle sequence
+NPC.IdleSequences = {
+ [0] = "Idle",
+}
+
+--Drops should be formated as [index]={["item name"], percent_drop} where percent_drop is a number from 0 to 100
+NPC.Drops = nil
+
+--Attacks should be formated as [i]={function attackpriority() = function doattack()}
+NPC.Attacks = nil
+
+--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 dist = ply:GetPos():Distance(self:GetPos())
+ 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
+NPC.Target = nil
+
+--All enemies that this NPC is aware of
+NPC.AwareEnemies = nil
+
+--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.
+/*
+--What to replace the ENT:BehaveAct with
+function NPC:Act()
+end
+
+--What to replace RunBehaviour with
+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
+
+--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/bosses/ent.lua b/gamemode/npcsystem/bosses/ent.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gamemode/npcsystem/bosses/ent.lua
diff --git a/gamemode/npcsystem/bosses/treeling.lua b/gamemode/npcsystem/bosses/treeling.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gamemode/npcsystem/bosses/treeling.lua
diff --git a/gamemode/npcsystem/npcs/antlion1.lua b/gamemode/npcsystem/npcs/antlion1.lua
index 3e90e19..259f108 100644
--- a/gamemode/npcsystem/npcs/antlion1.lua
+++ b/gamemode/npcsystem/npcs/antlion1.lua
@@ -36,10 +36,10 @@ NPC.IdleSequences = {
--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 not self then
+ if self == nil then
print("In antlion1, checkmele called with null self")
end
- if not ply then
+ if ply == nil then
print("In antlion1, checkmele called with null ply")
end
if(ply:GetPos():Distance(self:GetPos()) < 100) then return 20 end
diff --git a/gamemode/npcsystem/npcs/antlion2.lua b/gamemode/npcsystem/npcs/antlion2.lua
index 28154cc..6c16c72 100644
--- a/gamemode/npcsystem/npcs/antlion2.lua
+++ b/gamemode/npcsystem/npcs/antlion2.lua
@@ -36,10 +36,10 @@ NPC.IdleSequences = {
--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 not self then
+ if self == nil then
print("In antlion2, checkmele called with null self")
end
- if not ply then
+ if ply == nil then
print("In antlion2, checkmele called with null ply")
end
if(ply:GetPos():Distance(self:GetPos()) < 100) then return 20 end
diff --git a/gamemode/npcsystem/npcs/zombie.lua b/gamemode/npcsystem/npcs/zombie.lua
index e62b833..1075e9d 100644
--- a/gamemode/npcsystem/npcs/zombie.lua
+++ b/gamemode/npcsystem/npcs/zombie.lua
@@ -37,10 +37,10 @@ NPC.IdleSequences = {
--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 not self then
+ if self == nil then
print("In zombie, checkmele called with null self")
end
- if not ply then
+ if ply == nil then
print("In zombie, checkmele called with null ply")
end
if(ply:GetPos():Distance(self:GetPos()) < 100) then return 20 end
diff --git a/gamemode/npcsystem/spawnbosses.lua b/gamemode/npcsystem/spawnbosses.lua
new file mode 100644
index 0000000..bcd29ac
--- /dev/null
+++ b/gamemode/npcsystem/spawnbosses.lua
@@ -0,0 +1,42 @@
+--Spawn bosses I guess?
+local Folder = GM.Folder:gsub("gamemodes/","").."/gamemode/npcsystem/bosses"
+local insert = table.insert
+
+function GM:LoadNPCS()
+ print("NPC's loaded")
+ local Items = file.Find(Folder.."/*.lua","LUA")
+ local BaseItem = {}
+
+ GAMEMODE.Npcs = {}
+
+ NPC = {}
+
+ AddCSLuaFile(Folder.."/base.lua")
+ include(Folder.."/base.lua")
+
+ BaseItem = table.Copy(NPC)
+
+ for k,v in pairs(Items) do
+ if (v != "base.lua") then
+ AddCSLuaFile(Folder.."/"..v)
+ include(Folder.."/"..v)
+
+ insert(GAMEMODE.Npcs,NPC)
+
+ NPC = table.Copy(BaseItem)
+
+ end
+ end
+end
+
+hook.Add("Initialize","Loadnpcs",function()
+ GAMEMODE:LoadNPCS()
+end)
+
+function GetNpcByName(name)
+ for k,v in pairs( GAMEMODE.Npcs ) do
+ if (v.Name == name) then return v end
+ end
+
+ return nil
+end