# Set

Jump to navigation
Jump to search

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[edit | edit source]

- 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 point (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" to2set a to 7.0/5 + 0.5 ; will set "a" to1

short a set a to 9 set a to a/5.0 + 0.5 ; will set "a" to2

short a float b set b to 9 set a to b/5 + 0.5 ; will set "a" to2

- You can also use a comparison 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 comparison value, but when you do so you need to put the comparison 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[edit | edit source]

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.