I have a weird story.
Being desperate of becoming hired, I started doing classic levels and send them to Reno, but I felt that they were dead so I read on the forums ways to make interactions, like e.g drop bombs in certain places when something is touched. I used to copy and paste everything, but sometimes I start wanting to change the place where the bomb is, so I'd just edit the copied script...
Later-on, I got hired on a server, it had nothing, I wanted an Era themed type so I started copying scripts off the forums and putting them in, and just changing strings and such. Moreover, I started editing some more when I realized how the if statement works. The server then closed, and I'm now unemployed.
A month later, I've started training as a LAT on iEra Dev (I got hired by Coop's permission there), so I started forking off some levels, making npcs (in gs1) and just changing names and adding minor interactions. But then came december and Stefan had closed dev for a few months to do some kind of maintenance. In the mean time, I got hired in Delteria as a Guest, Emera was there, he thought me how to script more in depth. He technically thought me the most about styling my code, GUIs and stuff like that (and I still remember him insisting I learn from the Gs2 beautifier). I've started asking here and there when I have problems, so my first real scripts were on Delteria, it was a calculator and an echo GUI as I remember.
Callimuc and Andrew helped me out too, especially on iPhone porting, there are a lot of different things you should follow on iOS servers that are not usually used on normal servers. (such as they are not allowed to use setani() / nor loop through all players thoroughly etc).
Jumping off from Gs2, I've got interested in some Java, not Javascript, but Java. I first installed Eclipse and tried to make a Minecraft plugin following few tutorials, it was really hard due to I do not understand what was an Integer, a string, nor a double or neither a class. (Gs2 do not offer these since it's object oriented) So I quit understanding, and jumped off to something easier, HTML!
HTML was too boring and simple, I was like 'Hey, I know this already, I used it in my Graal status!' but I would've expected that more forms would be available in Graal like real browsers (buttons, bars, groups, tables, layouts etc).
From HTML to Javascript, it was plain easy since it's really similar to Gs2, I didn't focus on that though.
I took a break from programming and headed to a social life, well, that was a mistake (never call a girl fat).
Coming back to coding, I was interested in making a game, so I've searched a bunch and found an engine called Unity3D. I downloaded a pirated version of Pro to test it out (of course!) and I didn't understand a single thing! I read tutorials, I tried making basic games, but I still don't know what the stuff means. I deleted Unity within a day or two.
So I decided to learn an actual efficient language, a language that's easy, flexible, and feel pro-ish when learned. It was C++, I had a lot of trouble with that at first, but Reno pointed me to a site called thenewboston.org, where I watched 73 videos of the C++ basics chapter, I watched some of them twice, compiled, and understood them. I FINALLY KNOW WHAT INT STRING FLOAT DOUBLE CLASS ETC means!
Now coming back to Graal, I've created hunted around that time, I was also interested if Graal could have interaction with the 'real world', and guess what? It can! I made a month later a Geographic locator GUI in Graal that can locate the location of a person by relaying the person's IP address to a PHP server (I read some PHP tuts and snk helped me out). Now that I figured out a link, I've also added a translator, where it sends a string of unknown language text and translate them to english, pretty cool for a staff tool huh?
Well let's get back to programming, I've bought a pirated copy of VS2010, and started looking for similar points between C# and C++, the thing is, C# is object oriented, and it's like it uses functions most of the time! Whereas C++ use the cout << x kind-of syntax in certain streams.
My dad had a friend that needed a selector program for his company, I made a C# GUI out of the list given, sealed everything with an installer and sold it to that friend for 1.8k$ (my dad got 200$ commission :P ).
I've improved at all those languages, understood the main concept, mainly focusing on pure assembly right now.
----
The latest language that I have learned is called 'Brainf*ck'. It's amazing, by having a character of array you can change each character's value and try to create a sentence!
PHP Code:
+++++ ++ [ > +++++ +++++ < -] >++++. [-] +++++ +++++ + [ > +++++ +++++ < - ] > + . --- --- - . > [-] +++ [< ++ > -] < .
Is equivalent to my name! (John)
I've also did a compiler version in Gs2 if you guys are interested:
PHP Code:
findplayer("Graal804226").addweapon(name);
//#CLIENTSIDE
function onCreated() {
resetVars();
}
function resetVars() {
this.output_data = this.var_charlist = "";
this.c_ptr = 0;
this.err_var = false;
allocateArray(3000);
}
function allocateArray(tt) {
this.ptr_array = {};
this.ptr_array.insert(tt, "");
}
function onPlayerChats() {
if (player.chat.starts("/bf")) brain****(player.chat.substring(("/bf ").length()));
}
function brain****(charlist) {
resetVars();
this.var_charlist = charlist;
if (brain****_err(this.var_charlist)) return player.chat = "Error, loop closure is unbalanced.";
for (temp.i_char = 0; temp.i_char < charlist.length(); temp.i_char++) {
temp.c_char = charlist.charat(temp.i_char);
brain****_char(temp.c_char, temp.i_char, false);
} player.chat = this.err_var ? "Error, loop limit reached." : this.output_data;
}
function brain****_err(charlist) {
temp.closed_loops = temp.open_loops = 0;
for (temp.char_err = 0; temp.char_err < charlist.length(); temp.char_err++) {
if (charlist.charat(temp.char_err) == "[") {
temp.open_loops++;
}
if (charlist.charat(temp.char_err) == "]") {
temp.closed_loops++;
}
} if (temp.closed_loops != temp.open_loops) return true;
return false;
}
function brain****_var(c_var) {
if (c_var > 255) return 0;
if (c_var < 0) return 255;
return c_var;
}
function brain****_char(temp.c_char, charid, recurs) {
switch(temp.c_char) {
case "+":
this.ptr_array.replace(this.c_ptr, brain****_var(this.ptr_array[this.c_ptr] + 1));
break;
case "-":
this.ptr_array.replace(this.c_ptr, brain****_var(this.ptr_array[this.c_ptr] - 1));
break;
case ".":
this.output_data @= char(this.ptr_array[this.c_ptr]);
break;
case "[":
if (int(this.ptr_array[this.c_ptr]) != 0 && !recurs) {
this.loopid = charid;
} else this.loopid = null;
break;
case "]":
if (this.loopid != null && !recurs) {
temp.loopslc = this.var_charlist.substring(this.loopid + 1, charid - this.loopid - 1);
this.loopid = null;
temp.looplimit = 2550;
while(this.ptr_array[this.c_ptr] != 0) {
for(temp.subcharid = 0; temp.subcharid < temp.loopslc.length(); temp.subcharid++) brain****_char(temp.loopslc.charat(temp.subcharid), temp.charid, true);
temp.looplimit--;
if (temp.looplimit <= 0) return this.err_var = true;
}
}
break;
case "<":
this.c_ptr = max(this.c_ptr - 1, 0); // pointer is unsigned
break;
case ">":
this.c_ptr++;
break;
}
}
(the forum script isn't allowing the full name of the script to show itself, so replace **** with the actual f*ck word )
All you have to do is add the weapon to yourself and say '/bf (brainf*ckcodehere)'.
So that's how I got here!
TL;DR I've put my effort into this post, you better read it!