I'd like to make entities using lua and possibly a gamemode. I've already read the lua guide on the gmod wiki page and all that stuff didn't really help me a lot, i only know a little (i emphasize little) about programing in C++ but i want to know commands that would help me make an entity. it would also be great if you could possibly teach me.
The best way to learn how to code entities is to go and look at other entities. Look at what something does(The Bouncy Ball) and then open the .lua file for it and read the code and try to make sense of it all little by little.
[QUOTE=Dizzymagoo;22156805]The best way to learn how to code entities is to go and look at other entities. Look at what something does(The Bouncy Ball) and then open the .lua file for it and read the code and try to make sense of it all little by little.[/QUOTE]
yeah, I've dissected a few sents, I want to know other kinds of commands and stuff and any tips from developers
I looked into the bouncy ball sent and i added a new color by adding this in the cl_init:
[lua]function ENT:Initialize()
local i = math.random( 0, 4 )
if ( i == 0 ) then
self.Color = Color( 255, 0, 0, 255 )
elseif ( i == 1 ) then
self.Color = Color( 0, 255, 0, 255 )
elseif ( i == 2 ) then
self.Color = Color( 255, 255, 0, 255 )
elseif ( i == 3 ) then
self.Color = Color( 255, 0, 255, 255 ) // I added this new color but I dont know what color it is, lol
else
self.Color = Color( 0, 0, 255, 255 )
end
self.LightColor = Vector( 0, 0, 0 )
end [/lua]
You add
[ lua] and [ /lua]
before and after your code without the space of course.
Good job on the new color as well!
Edit:
Explanation of your color...
There are 4 values for colors. The first is Red, Second is Green, Third is Blue, Fourth is Alpha.
Obviously the first RGB makes up all the colors that it will be. The last one is Alpha. Also known as transparency. So if you want it to be see through you can lower that value. All values are 0-255.
That color that you added is pink.
My bad, I posted the wrong code to you. I forgot this is facepunch. Haha I edited my previous post in reguards to how to make it show up as code on the forums.
I've made my own SENT and I'm trying to make the SENT, which uses the combine helicopter bomb model, to use a custom texture I made for it so far I've gotten this:
[lua]include('shared.lua')
local matCombineBall = Material( "materials/models/Combine_Helicopter" )
function ENT:Draw()
self.Entity:DrawModel()
render.SetMaterial( matCombineBall )
end[/lua]
this is in my cl_init, I took some lines from the bouncy ball and i cant get it to use my texture, the SENT is in proper addon format, using an info.txt and proper file paths, but I have no luck in getting it to work. any tips?
You need to set the material before you draw the entity. Or you could use [b][url=http://wiki.garrysmod.com/?title=Entity.SetMaterial]Entity.SetMaterial [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b].
If you don't have a spawn function and you haven't set ENT.Spawnable in shared.lua to true, it won't show up in your ents tab.
[QUOTE=MakeR;22164720]You need to set the material before you draw the entity. Or you could use [b][url=http://wiki.garrysmod.com/?title=Entity.SetMaterial]Entity.SetMaterial [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b].
If you don't have a spawn function and you haven't set ENT.Spawnable in shared.lua to true, it won't show up in your ents tab.[/QUOTE]
thanks, i put the render.SetMaterial right after the local matCombineBall = Material( "materials/models/Combine_Helicopter" ) hopefully it works, trying it now.
[editline]05:24PM[/editline]
didn't work, maybe putting self.Entity:SetMaterial( "materials/models/Combine_Helicopter" ) in the ENT:Initialize function should do the trick?
I can't find out where to put the entity.SetMaterial. care to enlighten me?
bump
Good Place. [url]http://wiki.garrysmod.com/?title=Lua[/url]
[QUOTE=Moja;22176392]Good Place. [url]http://wiki.garrysmod.com/?title=Lua[/url][/QUOTE]
yeah, I've read some of that and I don't really understand it.
[editline]12:50AM[/editline]
this is getting really annoying, I've tried changing the scripts so many times and all I get is the helicopter bomb having no texture at all (making it invisible.) can anyone help me make it have a material? and tell me where exactly to put it
You need to put self:SetMaterial("material") in your ENT:Initialize function.
it still doesn't work, the helicopter bomb is invisible but you can still see the shadow under it. I've tried spawning it on 2 different maps with the same results. Is there anything I did wrong? I put the material for it in the materials/models/Combine_Helicopter/ folder, It's the same path that the regular helicopter bomb uses. should I make a new file path or what?
[editline]12:18AM[/editline]
right now I have it set to: self:SetMaterial("materials/models/bomb"), I tried "materials/models/bomb/helicopter_bomb_off01" and tried putting .vtf at the end. I have no idea what I am doing wrong and no clue what to do, by the way I put this in my init.lua and it keeps spawning invisible.
[editline]12:30AM[/editline]
here's my the start of my init:
[lua]AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include( 'shared.lua' )
function ENT:SpawnFunction( ply, tr )
if ( !tr.Hit ) then return end
local SpawnPos = tr.HitPos + tr.HitNormal * 16
local ent = ents.Create( "10hpball" )
ent:SetPos( SpawnPos )
ent:Spawn()
ent:Activate()
return ent
end
/*---------------------------------------------------------
Name: Initialize
---------------------------------------------------------*/
function ENT:Initialize()
// Use the helibomb model just for the shadow (because it's about the same size)
self.Entity:SetModel( "models/Combine_Helicopter/helicopter_bomb01.mdl" )
self.Entity:SetMaterial("materials/models/bomb/helicopter_bomb_off01")
self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
self.Entity:SetSolid( SOLID_VPHYSICS )
self.Entity:SetUseType( SIMPLE_USE )
// Wake the physics object up. It's time to have fun!
local phys = self.Entity:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
end
end[/lua]
my shared is all correct and it shows up in my entities tab, here's my cl_init:
[lua]include('shared.lua')
function ENT:Draw()
end[/lua]
[editline]12:55AM[/editline]
ok, I changed the function ENT:Draw() and now it's not invisible anymore, it still uses the default texture, is there anything I can do for that?
The SetMaterial function takes a path relative to the materials folder, you don't need to do "materials/models/etc", instead you should do "models/etc".
YES!!!! SUCCESS!!! It finally worked, thanks MakeR for helping me find out how to set the material, oh and do you know how to make it make a sound when I press use? I'm guessing it would go in the ENT:Use function. Is there anything special I need to do to make it work?
You need to set the use mode to SIMPLE_USE to prevent the use function being called many times at once. [b][url=http://wiki.garrysmod.com/?title=Entity.SetUseType]Entity.SetUseType [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b] - you should set it in ENT.Initialize. Then you just need to use [b][url=http://wiki.garrysmod.com/?title=Entity.EmitSound]Entity.EmitSound [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b] in ENT.Use.
thanks, I also want to know how to make it say something in a little balloon, like with the life support generators.
I think [b][url=http://wiki.garrysmod.com/?title=G.AddWorldTip]G.AddWorldTip [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b] is what you are looking for then.
[QUOTE=MakeR;22211523]I think [b][url=http://wiki.garrysmod.com/?title=G.AddWorldTip]G.AddWorldTip [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b] is what you are looking for then.[/QUOTE]
how do I use this one?
Whenever you want a tooltip to show, you need to call that in the entities draw function. There is an [url=http://wiki.garrysmod.com/?title=Jumping_Bathtub]example on the wiki[/url].
how would I make it appear whenever I look at it? would this work:
[lua]function ENT:Draw()
self.Entity:DrawModel()
if (!tr.HitEntity) then
AddWorldTip( self.Entity:EntIndex(), "Hello World!", 0.5, self.Entity:GetPos(), self.Entity )
end
end[/lua]
You are almost right, you do need to do a trace.
[lua]function ENT:Draw()
self.Entity:DrawModel()
local tr = LocalPlayer():GetEyeTrace()
if ValidEntity(tr.Entity) and tr.Entity == self.Entity then
AddWorldTip(self.Entity:EntIndex(), "Hellow World!", 0.5, self.Entity:GetPos(), self.Entity)
end
end[/lua]
Untested, I have never worked with AddWorldTip before so I'm not sure if it will work.
thanks again MakeR, it worked
Sorry, you need to Log In to post a reply to this thread.