Post: Learning the GSC language.
01-15-2012, 12:55 PM #1
Correy
I'm the Original
(adsbygoogle = window.adsbygoogle || []).push({});
The functioning of GSC
Anyone feel free to submit a tutorial, just quote me. i'll add it in.

there's not much things to post these days, might aswell create this to update when there's nothing else to do.
i will be putting alot of time into this, so i would appretiate as much as you do.

Sorry for any spelling mistakes.
Thanks to everyone who contributes.


[multipage=Variables - Data Storage]
The variable


The variable is a basically a string which stores data.
here's how you will see it.
    
Variable = "learning variables";


now, the string 'Variable' now equals "learning variables".
if i now was to println this, like 'self iPrintln( Variable );
it will output 'learning variables;.

this is probably the most basic thing in GSC, there's also more to it but that comes into arrays which will be explained later on.
[multipage=Threading - Calling a function]
Threading


Threading is pretty much every function which you will find, without this your code snippet will not act.
also again, this is pretty basic.. but it can be mistaken.

here's a basic snippet.
    
self thread Tutorial();


now, if i was just to put that into my patch it will error.
the game will look for the thread 'Tutorial', which at the minute is not functioned; this error will be 'Unknown function'
therefore i will need to add my function somehwere.

    
Tutorial()
{
self iPrintln( "hi" );
}


now up on threading that, say if i threaded it up on player spawn my output will be a line print of 'hi'.
yes, this is how your god mode ect are called, however you need to coding for them.

you see how i have the 'self', thats really self explanitory.. it will act up on myself, but that can be changed..
    
level.players[ 1 ] Tutorial();


that will function for the level.player (player) which has the entity number of 1.

now you might see '<self> thread Something();'
the 'thread' is only needed if it's inputing data from/ into another thread, so if i was to doo..
    
printText( text )
{
self iPrintln( text );
}


'self thread printText( "hi" );'
which now leads us onto arguements
[multipage=The strTok - Split Statement]
The strTok


The strTok is a split statement, it will split every statement given up on the char which it should be split at.
here's a syntax version of how it should be used.

    
< new string to input > = strTok( < string to input > , < split char > );


- New string to input
this is will set the statement's too, remember.. if there's more than one statement it will need to be set at an array.

- String to input
this is the string/ text which needs to be inputted then split, remember it must contain the split char or it wont be split.

- Split char
this goes for aboth, it's a single char placed in a ".. for every 'split char' in the input string it will split it, then carry on splitting until it will no longer can be splitten.

here's a full example of usage.
    
printlines( texts )
{
output = strTok( texts, "|" );
self iPrintln( output );
}


there i've set the input string to an arguement, it works the same just called differently.
so here's how i would call it.

    
self printlines( "this|is|a|tutorial" );


that will print a new line for this, is, a, tutorial.. so it will look something like..
    
this
is
a
tutorial


strTok is pretty useful and can compress your code much more than over statement.
if your having trouble of don't understand how to use this then message me, i'll help you out with it.

but i hope i explained as best as i can.
[multipage=The 'If' Statement]
The "If" statement- By .Choco
[/center]

The If statement is a major part of Call of Duty Scripting. It can be used in many ways. What it does is tell the game that if a certain condition is true, false, or equal to a value, do a certain thing. Here is an example of one:

    ExampleFunction()
{
if(<variable> == <value>Winky Winky
{
self iPrintln("poopy");
}
}


So let's break that down a bit.

    if(<variable> 

Any variable can be here, whether it is attached to yourself or the level.

     == 

"==" translates to "is equal to". There are other arguments that can be placed here:
"!=" - is not equal to
"<" - is less than
">" - is greater than
"<=" - is less than or equal to
">=" - is greater than or equal to

    <value>


Your value goes here. It can be a number, a string, true, or false.

After your if statement is declared, put a set of brackets under it and everything inside those will be executed if the statement is true (these brackets are not always needed, but for the purpose of this tutorial they will be).

Seem a bit confusing? It's not really. The if statement is one of the most commonly used scripts in all patches. One way it is very practically used is to determine who the host of a lobby is. The next script does just that:

    findHost()
{
if(self GetEntityNumber() == 0)
{
self.isHost = true;
}
}


GetEntityNumber() is a built-in function that returns your Client Number. Number 0 is the first to connect, which is always the host. So what this function says if that if your client number is 0, the variable "self.isHost" is attached to you and it is true.
[multipage=Using 'endon', 'waittill' & 'notify']
Using 'endon', 'waittill' & 'notify'- By .Choco


endon, waittill, and notify are very useful tools in CoD scripting. I will be breaking them down and explaining what they do and why it is useful.

Let's start with endon.
Here is a basic god mode script:

    
God()
{
self endon("disconnect");
self endon("death");
self.maxhealth = 90000;
self.health = self.maxhealth;
while( 1 )
{
if(self.health < self.maxhealth)
self.health = self.maxhealth;
wait 0.1;
}
}

Now I'm not going to break down the whole function, but let's look at the beginning of it.

    
self endon("disconnect");

This part tells the game that if you disconnect, terminate the God() thread. So if you lag out or leave, God Mode stops.

    
self endon("death");

This tells the game that if you die, terminate the thread. Simple enough right?

Now how does the game know what "death" and "disconnect" are? This is where notify comes in. In the game engine, if you die it automatically notifies the game with "death". If you disconnect, it notifies it with "disconnect". You can notify the game of something like this:

    
self notify("you_are_a_noob"); //This will notify your player's entity "you_are_a_noob"
level notify("you_are_all_noobs"); //This will notify every player "you_are_all_noobs"

The notify can be very practical for things like toggles. Example of a cg_drawFps toggle:

    
toggleFps()
{
self endon("disconnect"); //if the game ends or you leave stops the function
self endon("death"); //stops the function if you die
i = 0;
for(;Winky Winky
{
self waittill("toggle_fps"); //this will be explained shortly
self setClientDvar("cg_drawFps", i);
i++;
if(i == 4) i = 0;
}
}

To toggle the FPS counter, all you have to do is this:

    
self notify("toggle_fps");

It can be used like that to make your script much simpler.

Now on to waittill.

Go back and look at the Fps toggle script. See this part?
    
self waittill("toggle_fps");

Waittill tells the function to wait for something to be notified before continuing with the function. In the case of the FPS toggle, it tells the function to wait for "toggle_fps" before continuing. Very useful stuff

I hope I made this clear enough to help people out
[multipage=Updates]
15th January; 13:02
    
- thread created!
- variables
- threading
- strTok


15th January; 21:59
    
- the 'If' statement by .Choco
(adsbygoogle = window.adsbygoogle || []).push({});

The following 10 users say thank you to Correy for this useful post:

/RunDos/, Geo, Ghost1990, ImAzazel, JamesSwagger, LBK, Cmd-X, RuszXMC, Uk_ViiPeR, xKtF
01-16-2012, 12:35 AM #38
/RunDos/
Prime Rib
Thank for this Dancing
01-16-2012, 12:42 AM #39
Choco
Respect my authoritah!!
Originally posted by jbglitching View Post
Dude your a douche because you judge before you try it i never ever release a script that does not work i always test before release so you sir are a liar!


You test every script? I have yet to see you release ONE SINGLE SCRIPT that works like it's supposed to, if it even works at all No

The following 2 users say thank you to Choco for this useful post:

Cmd-X, x_DaftVader_x
01-16-2012, 01:06 AM #40
Cmd-X
It's been awhile.
Originally posted by jbglitching View Post
Dude your a douche because you judge before you try it i never ever release a script that does not work i always test before release so you sir are a liar!


What scripts have you released?
01-16-2012, 01:08 AM #41
Choco
Respect my authoritah!!
Here is a little tutorial I wrote for endon, waittill, and notify:

Originally posted by another user
Using "endon", "waittill", and "notify"

endon, waittill, and notify are very useful tools in CoD scripting. I will be breaking them down and explaining what they do and why it is useful.

Let's start with endon.

Here is a basic god mode script:

    God()
{
self endon("disconnect");
self endon("death");
self.maxhealth = 90000;
self.health = self.maxhealth;
while( 1 )
{
if(self.health < self.maxhealth)
self.health = self.maxhealth;
wait 0.1;
}
}


Now I'm not going to break down the whole function, but let's look at the beginning of it.

    self endon("disconnect");


This part tells the game that if you disconnect, terminate the God() thread. So if you lag out or leave, God Mode stops.

    self endon("death");


This tells the game that if you die, terminate the thread. Simple enough right?

Now how does the game know what "death" and "disconnect" are? This is where notify comes in. In the game engine, if you die it automatically notifies the game with "death". If you disconnect, it notifies it with "disconnect". You can notify the game of something like this:

    self notify("you_are_a_noob"); //This will notify your player's entity "you_are_a_noob"
level notify("you_are_all_noobs"); //This will notify every player "you_are_all_noobs"


The notify can be very practical for things like toggles. Example of a cg_drawFps toggle:

    toggleFps()
{
self endon("disconnect"); //if the game ends or you leave stops the function
self endon("death"); //stops the function if you die
i = 0;
for(;Winky Winky
{
self waittill("toggle_fps"); //this will be explained shortly
self setClientDvar("cg_drawFps", i);
i++;
if(i == 4) i = 0;
}
}


To toggle the FPS counter, all you have to do is this:

    self notify("toggle_fps");


It can be used like that to make your script much simpler.

Now on to waittill.

Go back and look at the Fps toggle script. See this part?
    self waittill("toggle_fps");


Waittill tells the function to wait for something to be notified before continuing with the function. In the case of the FPS toggle, it tells the function to wait for "toggle_fps" before continuing. Very useful stuff Smile

I hope I made this clear enough to help people out Winky Winky


Now I'm not the best GSC coder but I think I can help some people out Smile

The following user thanked Choco for this useful post:

Correy
01-16-2012, 01:15 AM #42
Originally posted by reScript
seeing as you can't write a single script without having a syntax error.

To be fair, when he made that "nuke" thing, I only found these errors

A couple of things to try and help...

Looks like bad syntax but I haven't tested it..

Mixing self and player in the same thread isn't very good.

Add some spaces to the Iprintlnbold. It looks ugly with the numbers running up the screen like that

Why do you have 3 RadiusDamages? The first one will kill everyone anyway..

You don't need to set a if(dis<101). You would need your trace to be within 101 units of you for it to work. (that's not very far away from your feet )

level.expbullt ~ You haven't defined that.

level.exp3 = loadfx("dust/dust_wind_fast");~ defined this but not used it..

level.exp2 = loadfx("weather/fog_daytime");~ defined but not used

What is level.mine.origin? Where is it?

Having the wait 2; after the RadiusDamage means that some people would respawn and be alive after the nuke goes off before the game ends..

And, because you have set the timescale to 0.3, the 2 seconds would last for about 6.666 seconds..

You are ending the game and setting "axis" team as the winner, what about if you are on the allies team?

And you need to reset all the dvars or you'll be stuck with the nuke vision when you start the next game..


Apart from that I can't see any problems...
01-16-2012, 02:45 AM #43
Originally posted by reScript
Happy
Don't you think it's ironic how he groans but does not reply?

---------- Post added at 09:13 PM ---------- Previous post was at 09:06 PM ----------


He has released none that work.


Lies briefcase of doom works lol
01-16-2012, 05:37 AM #44
Blackstorm
Veni. Vidi. Vici.
Originally posted by jbglitching View Post
Dude your a douche because you judge before you try it i never ever release a script that does not work i always test before release so you sir are a liar!


Honestly I've been scripting gsc for a year and a half and eventually you just learn what works and what doesn't just by looking at it. I didn't mean to offend you, but the truth hurts. lol

---------- Post added at 10:37 PM ---------- Previous post was at 10:33 PM ----------

Originally posted by infinitycl View Post
i laughed sp hard when i reading ur response thats messed upHappy


Ah I didn't mean it in a mean way :( But it's true lol
01-16-2012, 09:08 AM #45
Correy
I'm the Original
Originally posted by .Choco View Post
Here is a little tutorial I wrote for endon, waittill, and notify:



Now I'm not the best GSC coder but I think I can help some people out Smile


awesome bro, thanks for contributing.. once again Happy!
01-16-2012, 09:16 AM #46
DlBSY993
There's 0nly 1..
Im absolutely shit at coding ... but im hopefully doing computer science at Uni in a year and this year finishing level 3 IT... but i just do what i can to make one F ucking random patch that everyone loves more than vaders :black:

and all you trolls out there stop picking on J&b he's gotta start somewhere.... but seriously before releasing script make sure it works bug free .. and shrink it as much as possible and then release.. because it waste others time. Winky Winky

The following user thanked DlBSY993 for this useful post:

x_DaftVader_x

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo