• Lua Entities and Hammer
    2 replies, posted
Now, I know if you create an entity for Garrysmod you can put it into a map by just adding an entity with its name, and I know how to make FGD files and use them and whatnot. But my real question is communication between them. To explain this I think its best to do an example. So, I make an entity called "material_barrel" and this barrel has different types that are calculated when it's spawned. It spawns a different kind of barrel depending on what weapon your holding. Now, I want to make a map that has these barrels, but you can choose what material it will be. This is what the FGD would be: [...] = material_barrel: "Its just an example, people" [ barrel_types(choices) : "Type" : 0 = [ 0 : "Oil" 2 : "Gas" 3 : "Crack" ] ] So, I spawn an entity, and pick "Crack" (what did you think I'd pick?). Now, I what I expect to happen is to have the barrel spawn as "Crack" when themap loads. How do I make the Lua script get what is set in the map?
you need to use the ENT:KeyValue( key, value) on the entity, this gets called before the initialize and it receives the values from the map. I am working on a trigger_teleport entity and had to use this to get the trigger info. here's the wiki [url]http://wiki.garrysmod.com/?title=ENT.KeyValue[/url] example: [lua] function ENT:KeyValue( key, value ) -- Find out what's being passed print(tostring(self) .. " with -- Key : " .. key .. " Value : " .. value) if key == "ScriptName" then self.ScriptName = value elseif key == "model" then self.model = value elseif key == "targetname" then self.targetname = value elseif key == "target" then self.target = value elseif key == "StartDisabled" then self.StartDisabled = value elseif key == "spawnflags" then self.spawnflags = value elseif key == "origin" then self.origin = value elseif key == "landmark" then self.landmark = value elseif key == "classname" then self.classname = value elseif key == "hammerid" then self.hammerid = value elseif key == "OnStartTouch" then self.OnStartTouch = value elseif key == "OnEndTouch" then self.OnEndTouch = value else print("!!Unknown Key Value!!") print("Key : " .. key .. " -- Value : " .. value) end --[[ Keys and Values for a trigger_teleport Entity [14][sent_brush] with -- Key : ScriptName Value : trigger_teleport Entity [14][trigger_teleport] with -- Key : model Value : *2 Entity [14][trigger_teleport] with -- Key : targetname Value : Teleport_Top Entity [14][trigger_teleport] with -- Key : target Value : TeleDest_Bottom Entity [14][trigger_teleport] with -- Key : StartDisabled Value : 0 Entity [14][trigger_teleport] with -- Key : spawnflags Value : 15 Entity [14][trigger_teleport] with -- Key : origin Value : 0 0.01 14946.5 Entity [14][trigger_teleport] with -- Key : landmark Value : TeleDest_Top Entity [14][trigger_teleport] with -- Key : classname Value : trigger_teleport Entity [14][trigger_teleport] with -- Key : hammerid Value : 4934 Entity [14][trigger_teleport] with -- Key : OnStartTouch Value : Teleport_Bottom,Disable,,0,-1 Entity [14][trigger_teleport] with -- Key : OnEndTouch Value : Teleport_Bottom,Enable,,0.01,-1 --]] end [/lua]
[lua]function ENT:KeyValue( key, value ) self.KeyValues = self.KeyValues or {}; self.KeyValues[key] = value; end[/lua] Sorry, it just saddens me to see people doing ridiculous amounts of work which using tables could simplify to a few lines.
Sorry, you need to Log In to post a reply to this thread.