Scripting hints: Difference between revisions

m
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 18: Line 18:


* '''Optional parameters only work with int and enum''' parameters, you can't do it with strings or floats.
* '''Optional parameters only work with int and enum''' parameters, you can't do it with strings or floats.
:''How about '''S'''trings?''
:''You can make a '''S'''tring parameter optional by setting it to 0 (which is the equivalent of setting it to null). You can also do this with other pointer types, such as Character*. You just have to remember that if you make it optional this way then you shouldn't crash (abort) the game if it's null.''
:'''''AFAIK, you can make a String parameter optional by setting it to 0 (which is the equivalent of setting it to null. You can also do this with other pointer types, such as Character*.'''''


* Basically, to be consistent with Java/C#, the '''protection level always goes first when using protected functions''': [http://www.bigbluecup.com/yabb/index.php?topic=19369.msg226163#msg226163]
* Basically, to be consistent with Java/C#, the '''protection level always goes first when using protected functions''': [http://www.bigbluecup.com/yabb/index.php?topic=19369.msg226163#msg226163]
Line 37: Line 36:
  int gameloops = ((StrLen(text) / game.text_speed) + 1) * GetGameSpeed();
  int gameloops = ((StrLen(text) / game.text_speed) + 1) * GetGameSpeed();


* '''Functions cannot return structs or arrays''' - they can only return primitive types. This includes Strings in AGS v2.71.
* '''Functions cannot return structs or arrays''' - they can only return primitive types. This includes Strings in AGS v2.71. They can also as of v2.7 return any pointer type (pointers are currently only supported for the built-in types such as GUI and Character).


* The character's '''global inventory variables are integers''' and can be used to keep track of how many items the character has.
* The character's '''global inventory variables are integers''' and can be used to keep track of how many items the character has.
===AGS do-while loop===
One of the "missing" loop structures in AGS is the "do-while" structure which in '''other''' languages looks like this:
  int i = 5;
  do {
    blah();
    i++;
  } while (i < 4);
The point being to ensure that the loop is run at least one time, regardless of the condition. This can however be simulated in AGS using the Game.DoOnceOnly function:
  int i = 5;
  DateTime *now = DateTime.Now;
  while ((i < 4) || (Game.DoOnceOnly(String.Format("%d", now.RawTime)))) {
    blah();
    i++;
  }
In both cases (AGS and the pseudo-C-style programming) ''I'' would have a resulting value of 6 and the loop would run exactly one time. This bit of trickery is possible thanks to Game.DoOnceOnly accepting unique ID strings. If you needed to perform more than one do-while within a single second you would have to do something else, perhaps just appending a variable to the end of that, but you should get the idea now. Also just for clarification you could always just create a temporary variable like "bool doOnce = true;" and then set it to false within the loop. This way is just more fun!