diff options
| -rw-r--r-- | entities/entities/ws_rune/cl_init.lua | 5 | ||||
| -rw-r--r-- | entities/entities/ws_rune/init.lua | 60 | ||||
| -rw-r--r-- | entities/entities/ws_rune/shared.lua | 5 | ||||
| -rw-r--r-- | gamemode/npcsystem/bosses/base.lua | 83 | ||||
| -rw-r--r-- | gamemode/npcsystem/bosses/ent.lua | 0 | ||||
| -rw-r--r-- | gamemode/npcsystem/bosses/treeling.lua | 0 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/antlion1.lua | 4 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/antlion2.lua | 4 | ||||
| -rw-r--r-- | gamemode/npcsystem/npcs/zombie.lua | 4 | ||||
| -rw-r--r-- | gamemode/npcsystem/spawnbosses.lua | 42 |
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 |
