Set
Revision as of 16:49, 31 August 2008 by imported>Qazaaq (update tag)
Needs to be Updated
This article has been marked by editors as one needing attention. Please see the Talk page for details. If you can update the article, please do so.
Sets a local or global variable to a specified value. This value can be a number or an expression.
Arithmetic Operators:
Operator | Description |
---|---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Division |
% | Modulus (do integer division and return remainder) |
Notes
- Improper syntax can cause scripts to stall myseriously, such as in the example below (the problem being the extra '134' at the end).
set MyRefVar to SomeOtherRef 134
- The modulos operator "%" is evaluated after multiplication/division but before addition/subtraction
4 * 3 % 2 = 0 4 * (3%2) = 4 1 + 2 % 3 = 3 (1+2) % 3 = 0
- A minus right in front of a number or variable acts as "negative"-sign. When you want to do a subtraction, you need at least one space before and behind the minus. This is the only place where you really need a space between arithmetic operators. (For instance: "a-b" will not compile; it needs to be "a - b")
- When using only numbers in a division, you need to use at least one decimal point to tell the game that you want to use floating point division, without a decimal point the remainder is truncated at the end of the division:
float a set a to 9/5 ; will set "a" to 1.000 set a to 9.0/5 ; will set "a" to 1.800
- When you want to store the correctly rounded result of a division in an integer-variable, you need to make sure, that the calculation uses floating poing (so that the decimal-fraction isn't truncated) and add 0.5:
short a set a to 9/5 ; will set "a" to 1 set a to 9/5 + 0.5 ; will set "a" to 1 set a to 9.0/5 ; will set "a" to 1 set a to 9.0/5 + 0.5 ; will set "a" to 2 set a to 7.0/5 + 0.5 ; will set "a" to 1
short a set a to 9 set a to a/5.0 + 0.5 ; will set "a" to 2
short a float b set b to 9 set a to b/5 + 0.5 ; will set "a" to 2
- You can also use a comparsion as the "value". The variable will then be set either to 1 or 0 depending on whether the condition is true or not.
set goodluck to player.Getav luck > 60
Does the same as
if player.Getav luck > 60 set goodluck to 1 else set goodluck to 0 endif
You can use arithmetic operations on a comparsion value, but when you do so you need to put the comparsion in parentheses:
set luckbonus to 50*(player.Getav luck > 60)
Does the same as
if player.Getav luck > 60 set luckbonus to 50 else set luckbonus to 0 endif
Other Examples:
set a to 2 set b to a*a set c to (b - a)*b - a set d to ((3* -b+a) - c)/ -2 message "a=%.0f, b=%.0f, c=%.0f, d=%.0f" a b c d ; ("a=2, b=4, c=6, d=8") set stage to getstage quest1 + 10 set weapondrawn to player.isweaponout
Bug
The set function has a bug that will cause the CS to crash if the size of its compiled line is greater than 73 bytes. It's rare to have a Set line that long, so most people won't run into the bug. The main place where it appears is when using TSFC or Pluggy to create long strings.