.:`=-~rANdOm~`-=:. Game Servers

Technology (Read Only) => Programming => Topic started by: StartedBullet on September 05, 2010, 07:01:32 PM

Title: Multiple Scripting Problems
Post by: StartedBullet on September 05, 2010, 07:01:32 PM
Hello, I'm having trouble running console commands for my gamemode, here is what im talking about:


gamemodes\laststand\gamemode\init.lua:25: '=' expected near 'player'-init
--player:concommand( "PlayerInitialGear" )
_______________



gamemodes\laststand\gamemode\cl_init.lua:21: 'then' expected near 'player'
-cl_init
--player:ConCommand( "sb_team1" )
________________

Any ideas on what I am doing wrong?/ Do you know any other ways i can run a console command?



Thats solved. But heres another problem: It considers 'ready' invalid somehow and won't paint my vgui-function HumanBuy( ply )
 
 

 

ready = vgui.Create( "BFrame" )
ready:SetPos( ScrW() / 2, ScrH() / 2 ) //Set the position. Half the screen height and half the screen width. This will result in being bottom right of the middle of the screen.
ready:SetSize( 175, 175 ) //The size, in pixels of the Frame
ready:SetTitle( "Select Items/Upgrades" )
ready:SetVisible( true )
ready:SetDraggable( true )
ready:ShowCloseButton( true )
ready:MakePopup()


ready1 = vgui.Create( "BButtonSMG1", Ready ) // Define ready1 as a "DButton" with its parent the Ready frame we just created above.
ready1:SetPos( 20, 160 ) //Set position, relative to the frame (If you didn't parent it, it would be relative to the screen
ready1:SetSize( 140, 40 ) // How big it should be, again in pixels
ready1:SetText( "Buy SMG1-5" )
ready1.DoClick = function() //ready1.doclick = function, we just defined it as a function

ply:Give( "weapon_SMG1" )
 Player:GiveAmmo(25,"smg1")
 ply:SetNWInt("killcounter", ply:GetNWInt("killcounter") - 5)
 
end
 


ready2 = vgui.Create( "BButtonSMG1Ammo", Ready ) // Define ready1 as a "DButton" with its parent the Ready frame we just created above.
ready2:SetPos( 170, 160 ) //Set position, relative to the frame (If you didn't parent it, it would be relative to the screen
ready2:SetSize( 140, 40 ) // How big it should be, again in pixels
ready2:SetText( "Buy SMG1 Ammo-2" )
ready2.DoClick = function() //ready1.doclick = function, we just defined it as a function

Player:GiveAmmo(15,"smg1")
 ply:SetNWInt("killcounter", ply:GetNWInt("killcounter") - 2)
 

 end
 

ready3 = vgui.Create( "BButtonShotgun", Ready ) // Define ready1 as a "DButton" with its parent the Ready frame we just created above.
ready3:SetPos( 20, 120 ) //Set position, relative to the frame (If you didn't parent it, it would be relative to the screen
ready3:SetSize( 140, 40 ) // How big it should be, again in pixels
ready3:SetText( "Buy Shotgun-10" )
ready3.DoClick = function() //ready1.doclick = function, we just defined it as a function

ply:Give( "weapon_Shotgun" )
 Player:GiveAmmo(10,"buckshot")
 ply:SetNWInt("killcounter", ply:GetNWInt("killcounter") - 10)
 
 end
 
 

ready4 = vgui.Create( "BButtonShotgunAmmo", Ready ) // Define ready1 as a "DButton" with its parent the Ready frame we just created above.
ready4:SetPos( 170, 120 ) //Set position, relative to the frame (If you didn't parent it, it would be relative to the screen
ready4:SetSize( 140, 40 ) // How big it should be, again in pixels
ready4:SetText( "Buy Shotgun Ammo-4" )
ready4.DoClick = function() //ready1.doclick = function, we just defined it as a function
 
Player:GiveAmmo(8,"buckshot")
 ply:SetNWInt("killcounter", ply:GetNWInt("killcounter") - 4)
 
 

 
end
end

Then theres my last post aswell. But im extremely close to finishing my gamemode (first).
Title: Re: Gamemode LUA scripting problem/player:ConCommand
Post by: Tomcat on September 05, 2010, 07:42:27 PM
you need to do LocalPlayer:ConCommand()
Title: Re: Gamemode LUA scripting problem/player:ConCommand
Post by: Кrаsher on September 05, 2010, 08:02:41 PM
you need to do LocalPlayer:ConCommand()
that is deprecated bro

since I know what tut you are getting this from...

put that in GM:PlayerInitialSpawn( ply )
as RunConsoleCommand("sb_team1")
Title: Re: Gamemode LUA scripting problem/player:ConCommand
Post by: Rbn on September 05, 2010, 08:52:37 PM
Hello, I'm having trouble running console commands for my gamemode, here is what im talking about:


gamemodes\laststand\gamemode\init.lua:25: '=' expected near 'player'-init
--player:concommand( "PlayerInitialGear" )
_______________



gamemodes\laststand\gamemode\cl_init.lua:21: 'then' expected near 'player'
-cl_init
--player:ConCommand( "sb_team1" )
________________

Any ideas on what I am doing wrong?/ Do you know any other ways i can run a console command?

Let's see...

- If your working on a clientside script to set player on a custom team, need to be triggered somehow like a button or something, you can do other things but
  i do not really recommend it on client :/, unless you want to make the player select team.

- Кrашер GM:PlayerInitialSpawn( ply ) is serverside only so RunConsoleCommand Will affect console not the player.

Code: [Select]
function GM:PlayerInitialSpawn( ply )

   ply:ConCommand("sb_team1") -- notice that server will trigger it only on the 1stly spawn.

end

naturally sb_team1 command will be like.

Code: [Select]
concommand.Add("sb_team1", function( p,c,a ) p:SetTeam("TEAM_NAME" [[ or #index of team ]]) end )
But if you want to work over performance and efficiency, DEPENDING ON WHAT YOU ARE DOING.

I recommend using like this.

Code: [Select]
function GM:PlayerInitialSpawn( ply )

   ply:SetTeam( "TEAM_NAME" [[ or #index of team ]] ) -- This will make that server set player on the specified team and do not need to trigger command on client.

end

On wiki when they put "player",  this mean that you need the Player Entity, not to put it as they write, like first Entities on a 16 / 16 server are related to player entity slots so will be like

Entity(1):Nick() -- Return Nick of the player that Have in the Entity index #1.

Entity(1) = Whole Class Entity of a player, Nick() method to obtain the name or nick.

Check an example or trying to do an example lol.

Code: [Select]
function SetPlayerOnTeam( playerobtained )

   playerobtained:SetTeam(1)

end

SetPlayerOnTeam( Entity(1) ) -- i sent the player's entity as an argument, then the function make the rest of the work.

ClientSide = RunConsoleCommand( STRING )

ServerSide = PLAYER:ConCommand( STRING )

PLAYER = Entity of the player as explained before.

Hope that will be helpful for you.
Title: Re: Gamemode LUA scripting problem/player:ConCommand
Post by: StartedBullet on September 06, 2010, 12:44:40 AM
Thank you this seems to have solved it, but I have seem to have another (hopefully last bug):

gamemodes\laststand\gamemode\init.lua:126: bad argument #1 to 'random' (interval is empty)

Heres the code snippet:

   function GMZombieSpawn( tr )
   
   
   
   
   local spawns = ents.FindByClass( "Zombie_Spawn_Point" )
     local RandomSpawn = math.random(#spawns)   <---- 126
 

 local ent = ents.Create( "npc_zombie" )
ent:SetPos( tr.HitPos )
ent:Spawn( RandomSpawn )
ent:Activate()

 

 
 end



Any ideas? Also, what would be a good way to put a cap on how many zombies spawn?
Title: Re: Multiple Scripting Problems
Post by: mdew355 on September 06, 2010, 01:21:04 AM
I think you can only use math.random with numbers like math.random(0, 10)
I don't know zombie survival's LUA that well (if that's whats this for) but I don't know where you got #spawns from 0.o
Title: Re: Multiple Scripting Problems
Post by: StartedBullet on September 06, 2010, 09:06:56 AM
This is for a single-player LFD last stand mode. Ive seen multiple examples of random spawning through this method on the wki. If not this, how will I randomly spawn zombies.
_______
function GM:PlayerSelectSpawn( pl )
 
    local spawns = ents.FindByClass( "info_player_start" )
    local random_entry = math.random(#spawns)
 
    return spawns[random_entry]
 
end
_________
Thats the wiki script.
Title: Re: Multiple Scripting Problems
Post by: Кrаsher on September 06, 2010, 10:46:06 AM
I really don't think it is needed to run that on GMod lua, as info_player_start is the main set of spawn points and will automatically be selected. (Randomly)
Title: Re: Multiple Scripting Problems
Post by: StartedBullet on September 06, 2010, 11:02:06 AM
No, Im trying to use it to randomly spawn npcs.
Title: Re: Multiple Scripting Problems
Post by: Tomcat on September 06, 2010, 11:51:05 AM
No, Im trying to use it to randomly spawn npcs.


find all of the npc spawns then




put them into a table lol
Title: Re: Multiple Scripting Problems
Post by: StartedBullet on September 06, 2010, 11:53:29 AM
0.o  :idk: Well can you give me an example? Im still kinda new to programming.
Title: Re: Multiple Scripting Problems
Post by: Кrаsher on September 06, 2010, 11:58:55 AM
to make ein table

SpawnTable={}

To use ein table

SpawnTable[1]="rite hear"
Title: Re: Multiple Scripting Problems
Post by: Tomcat on September 06, 2010, 02:27:12 PM
to make ein table

SpawnTable={}

To use ein table

SpawnTable[1]="rite hear"




nonoonono


Code: [Select]
ents.FindByClass("pingaz")
Title: Re: Multiple Scripting Problems
Post by: Rbn on September 06, 2010, 05:43:03 PM
I think you can only use math.random with numbers like math.random(0, 10)
I don't know zombie survival's LUA that well (if that's whats this for) but I don't know where you got #spawns from 0.o

Actually a # will retrieve the quantity of registers than a table has.

Example:

Code: [Select]
Player: World Spawned: models/weapons/v_toolgun.mdlPlayer: World Spawned: models/weapons/v_superphyscannon.mdl
Player: World Spawned: maps/gm_construct.bsp
] net_graph 1
] net_graph 0
] lua_run spawns = ents.FindByClass( "info_player_start" )
> spawns = ents.FindByClass( "info_player_start" )...
] lua_run print(#spawns)
> print(#spawns)...
18
] lua_run PrintTable(spawns)
> PrintTable(spawns)...
1 = Entity [18][info_player_start]
2 = Entity [19][info_player_start]
3 = Entity [20][info_player_start]
4 = Entity [21][info_player_start]
5 = Entity [22][info_player_start]
6 = Entity [23][info_player_start]
7 = Entity [24][info_player_start]
8 = Entity [25][info_player_start]
9 = Entity [26][info_player_start]
10 = Entity [27][info_player_start]
11 = Entity [28][info_player_start]
12 = Entity [29][info_player_start]
13 = Entity [30][info_player_start]
14 = Entity [31][info_player_start]
15 = Entity [32][info_player_start]
16 = Entity [33][info_player_start]
17 = Entity [34][info_player_start]
18 = Entity [35][info_player_start]

This is for a single-player LFD last stand mode. Ive seen multiple examples of random spawning through this method on the wki. If not this, how will I randomly spawn zombies.
_______
function GM:PlayerSelectSpawn( pl )
 
    local spawns = ents.FindByClass( "info_player_start" )
    local random_entry = math.random(#spawns)
 
    return spawns[random_entry]
 
end
_________
Thats the wiki script.

Try something like this

spawns should be loaded before the function or will make a table every time you call it, memory vs processor. :/

local spawns = ents.FindByClass( "info_player_start" ) --This is what actually a map uses to spawn a (Default player). You can use with Zombie_Spawn_Point too but idk what map u using.

Code: [Select]
function RandomSpot( player )

if player:IsValid() then
player:Spawn()
player:SetPos( spawns[math.random( #spawns )]:GetPos() )  -- Every product in the table is an Entity so we can retrieve using the methos GetPos()
else
return
end

end

I'll help ya later with derma, I HATE DERMA :/ k laterz.
Title: Re: Multiple Scripting Problems
Post by: mdew355 on January 12, 2011, 10:03:35 PM
I know this is a really old post, but with the derma you use a line like this:

local ready = vgui.Create("DFrame"); //It's DFrame, not BFrame.