From WikiChip
Editing mirc/variables

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.

Latest revision Your text
Line 1: Line 1:
{{mirc title|Variables}}
+
{{Template:mIRC Guide}}
 +
 
 
'''mIRC variables''' are items which can hold data temporarily, or permanently, for use at a later time.. You can create, edit, or delete them at any time. All mIRC variables must be prefixed with a % sigil (example %var or %cookies). Variables are untyped – therefore capable of storing letters, numbers, or strings at any given point.
 
'''mIRC variables''' are items which can hold data temporarily, or permanently, for use at a later time.. You can create, edit, or delete them at any time. All mIRC variables must be prefixed with a % sigil (example %var or %cookies). Variables are untyped – therefore capable of storing letters, numbers, or strings at any given point.
  
Line 8: Line 9:
 
=== Local Variables ===
 
=== Local Variables ===
  
'''Local Variables''' are given local scope. They are created for the duration of the routine that created them and they can only be accessed from within that routine  Once the routine is finished, the variable is deleted. A routine represents an alias, an event, a menu, or when you execute code with two /slash from the editbox.
+
'''Local Variables''' are given local scope. They are created for the duration of the script that made them and they can only be accessed from within the code line, or block in which they were created in. Once the script has finished, the variable is deleted.  
 
 
'''Note''': Local variables can be seen from the execution of /scon or /scid: //var %a ok | scon -r echo -a $ + %a ($1- can't be seen the same way)
 
  
 
Syntax:
 
Syntax:
Line 20: Line 19:
 
var %a = value, %b = second value, %c = and so on and so forth</syntaxhighlight>
 
var %a = value, %b = second value, %c = and so on and so forth</syntaxhighlight>
  
'''Note''': Since mIRC 6.21, you can avoid using the = sign when using the /var command.
+
'''Note''': Since mIRC 6.21, you can avoid using the = sign when using the /var commmand.
  
 
Local variables are good for temporary things like string manipulations and math expressions. Most of your code will use local variables.  
 
Local variables are good for temporary things like string manipulations and math expressions. Most of your code will use local variables.  
Line 62: Line 61:
 
'''Practical use:''' a global variable is good for storing variables that you will need to use in the future from another script or at different time. (Login System, Away System, Sockets, Etc...)
 
'''Practical use:''' a global variable is good for storing variables that you will need to use in the future from another script or at different time. (Login System, Away System, Sockets, Etc...)
  
== Semi global ==
+
== The equel sign '=' ==
 
 
You can use set -u0 to create a variable that can be seen by any routine (global) but is destroyed when the scripting engine exits (when all routines are done), like binary variables.
 
  
== The equal sign '=' ==
+
Although it's not require since 6.21, the equel sign can be used to assign a value to a variable without actually using a command:
 
 
Although it's not required in /var since 6.21, the equal sign can be used to assign a value to a variable without actually using a command:
 
 
<syntaxhighlight lang="mirc">%var = value</syntaxhighlight>
 
<syntaxhighlight lang="mirc">%var = value</syntaxhighlight>
 
If %var is local, this will change the local variable.
 
If %var is local, this will change the local variable.
Line 86: Line 81:
 
unset %var1 %var2 %var3</syntaxhighlight>
 
unset %var1 %var2 %var3</syntaxhighlight>
  
The /unset command supports {{mirc|wildcard}} characters for each of the variable, to be able to unset multiple variables. For example:  
+
The /unset command supports wildcard characters to be able to unset multiple variables. For example:  
  
 
<syntaxhighlight lang="mirc">alias unsetWildExample {
 
<syntaxhighlight lang="mirc">alias unsetWildExample {
 
   set %exampleHello hello there
 
   set %exampleHello hello there
   set %exampleHey another var
+
   set %exampleTest another var
 
   set %exampleVar yet another var
 
   set %exampleVar yet another var
 
   
 
   
  /*
 
  Illustrating that each variable can be a wildcard
 
  unset -s %exampleH* %exampleVar
 
 
  */
 
 
 
   ;unset all of them
 
   ;unset all of them
 
   unset %example*
 
   unset %example*
 
}</syntaxhighlight>
 
}</syntaxhighlight>
 
  
 
You can also unset all of the variables using the '''/unsetall''' command.
 
You can also unset all of the variables using the '''/unsetall''' command.
Line 115: Line 103:
 
   ; make sure our variable doesn't exist
 
   ; make sure our variable doesn't exist
 
   unset %example1
 
   unset %example1
   if (%example1 == $null) {
+
   if (%example == $null) {
 
     echo -a % $+ example1 is null!
 
     echo -a % $+ example1 is null!
 
   }
 
   }
Line 131: Line 119:
  
 
== Math Operations ==
 
== Math Operations ==
You can do one math operation with variable when setting a value.
 
 
The operators supported are: '+' '-' '/' '*' '%' '^' where % is the modulus and ^ is power.
 
 
You must use a space around all 3 parameters and you must provide correct values, numbers can be float.
 
 
If you don't respect the format, it will set the value as plain text, use -n or -p to override this behavior when dynamic content.
 
  
It also supports '&' as the logical-AND operator, but it's supported differently than how $and() handles inputs. Here, the output is valid only if the inputs are valid within the signed 32-bit range. If 1 input is valid and the other is >= 2^31, the result is zero. If 1 input is valid and the other is < -2^31, the result is always -2^31. Unlike how $and casts negative results into an integer in the range 2^31 <= n < 2^32, var can output negative numbers.
+
The standard assignment operator (=) can also be used to do basic two-operand math operations.  
  
 
For Example:
 
For Example:
Line 154: Line 135:
 
}</syntaxhighlight>
 
}</syntaxhighlight>
  
== Others Commands ==
 
 
mIRC has two additional commands that can be used to easily increase and decrease the value of a numerical variable.
 
mIRC has two additional commands that can be used to easily increase and decrease the value of a numerical variable.
  
Line 187: Line 167:
 
In many occasions you may need to save individualized data (data for a particular user or channel for example). Dynamic variables allow you to do just that. A dynamic variable's name usually consists of a static part (a part that doesn't change) and a dynamic part (the part that changes).
 
In many occasions you may need to save individualized data (data for a particular user or channel for example). Dynamic variables allow you to do just that. A dynamic variable's name usually consists of a static part (a part that doesn't change) and a dynamic part (the part that changes).
  
=== Setting Values ===
+
=== Saving Values ===
  
The basic syntax to set a dynamic variable is:
+
The basic syntax to save a dynamic variable is:
  
 
<syntaxhighlight lang="mirc">set %<static_part> $+ <dynamic_part>
 
<syntaxhighlight lang="mirc">set %<static_part> $+ <dynamic_part>
Line 196: Line 176:
  
 
Although you can omit the static part out, its strongly discouraged because variables should have a meaningful name that explains their purpose.
 
Although you can omit the static part out, its strongly discouraged because variables should have a meaningful name that explains their purpose.
 
'''Note''': You may have seen script using evaluation brackets to set a value to a dynamic variable, they are not required.
 
  
 
Let's take a look at an example:
 
Let's take a look at an example:
Line 215: Line 193:
 
# mIRC evaluates the identifier $nick to "John" and $2 to blue<br /><syntaxhighlight lang="mirc">set %color. $+ John blue</syntaxhighlight>
 
# mIRC evaluates the identifier $nick to "John" and $2 to blue<br /><syntaxhighlight lang="mirc">set %color. $+ John blue</syntaxhighlight>
 
# mIRC will then append "John" to "%color." Before executing the /set command, thus the final variable looks like this:<br /><syntaxhighlight lang="mirc">%color.John blue</syntaxhighlight>
 
# mIRC will then append "John" to "%color." Before executing the /set command, thus the final variable looks like this:<br /><syntaxhighlight lang="mirc">%color.John blue</syntaxhighlight>
 +
  
 
=== Retrieving Values ===
 
=== Retrieving Values ===
  
 
'''Static Variables'''
 
'''Static Variables'''
 
 
Retrieving values from static variables is pretty straightforward. Let's assume you have a variable called ''%myvar'' and it's value is '''abc''', you can get this value simply by referring to the variable outright:
 
Retrieving values from static variables is pretty straightforward. Let's assume you have a variable called ''%myvar'' and it's value is '''abc''', you can get this value simply by referring to the variable outright:
  
Line 232: Line 210:
  
 
'''Dynamic Variables'''
 
'''Dynamic Variables'''
 
+
Retrieving a value from a dynamic variable is a little bit more complicated. The basic syntax is as follows:
Retrieving a value from a dynamic variable is a little bit more complicated. There are two ways.
 
 
 
1. Using Bracket evaluation [ ]
 
  
 
<syntaxhighlight lang="mirc">%<static> [ $+ [ <dynamic> ] ]</syntaxhighlight>
 
<syntaxhighlight lang="mirc">%<static> [ $+ [ <dynamic> ] ]</syntaxhighlight>
  
This is the [[Evaluation_Brackets - mIRC|evaluation brackets]] method. They allow us to force mIRC to evaluate part of a statement before anything else. Take a look at the rest of the myColor script:
+
The '''evaluation brackets''', both '''[''' and ''']''', are an essential part of retrieving the value from a dynamic variable. They allow us to force mIRC to evaluate part of a statement before anything else. Take a look at the rest of the myColor script:
  
 
<syntaxhighlight lang="mirc">on *:text:!favColor *:#:{
 
<syntaxhighlight lang="mirc">on *:text:!favColor *:#:{
Line 247: Line 222:
 
   }
 
   }
 
   else {
 
   else {
     notice $nick $2 doesn't have a favorite color set yet.
+
     notice $nick $2 does't have a favorite color set yet.
 
   }
 
   }
 
}</syntaxhighlight>
 
}</syntaxhighlight>
Line 285: Line 260:
 
What this does is create a bunch of static variables, each with ascending-ordered numerical digits. You will notice we used the evaluation brackets around the variable counter, ''%x''. This allows mIRC to evaluate the variable, and attach it to the static portion of ''%array.''. Basically, during run-time, whatever the ''%x'' variable's value is will be automatically appended to ''%array.''.
 
What this does is create a bunch of static variables, each with ascending-ordered numerical digits. You will notice we used the evaluation brackets around the variable counter, ''%x''. This allows mIRC to evaluate the variable, and attach it to the static portion of ''%array.''. Basically, during run-time, whatever the ''%x'' variable's value is will be automatically appended to ''%array.''.
  
 
 
'''Note''': If you have multiple dynamic variable to add together, you need to add another pair of $+ [ ... ] for each element or use [ [ $var(%var,1) ] ] :
 
 
  %static [ $+ [ %dynamic1 $+ [ %dynamic2 ] ] ]
 
  %static [ $+ [ %dynamic1 $+ [ %dynamic2 $+ [ %dynamic3 ] ] ] ]
 
  [ [ $var(static. $+ %dynamic1 $+ %dynamic2,1) ] ]
 
  etc..
 
 
 
 
2. Using $eval
 
 
You can also get the value of a dynamic variable by using {{mIRC|$eval}}.
 
 
$eval allows you to force an expression to evaluate more than once, a bit like the brackets [ ], but brackets are meant to alter the order of evaluation of a line, which itself can have its own drawbacks.
 
 
<syntaxhighlight lang="mirc">$eval($+(%,<static>,<dynamic>),2)</syntaxhighlight>From our earlier example:
 
<syntaxhighlight lang="mirc">var %color = %color. [ $+ [ $2 ] ]</syntaxhighlight>
 
is the same as
 
<syntaxhighlight lang="mirc">var %color = $eval($+(%,color.,$2),2)</syntaxhighlight>$+(%,color.,$2) will produce the plain text "%color.John", and that is then evaluated a second time (the 2 in $eval(,2)) to produce the value of the variable just like usual. Note that with the brackets method, you also get a double evaluation, but they happen at a different levels.
 
 
This method is easier to read/handle than the bracket, you can simply get the plain text variable you want with $+(), and then you evaluate that twice to get the content of the variable, this method is recommended, but note that it's a bit slower than the bracket.
 
 
'''Note''': $eval is often used in the simple form $()
 
 
== Special behaviors & quirks ==
 
 
Variables routines are a bit special because usually, the first argument given to a variables related command is a variable name, yet mIRC doesn't evaluate it.
 
 
Indeed if //echo %var would display its content, it's because %var is evaluated and then passed as the parameter to the /echo command. %Variable related commands are obviously not doing that otherwise the content of the variable or $null would be passed to the command. So mIRC, on purpose doesn't evaluate the variable name.
 
 
=== Quirks in /var ===
 
 
If most commands cannot preserve spaces, /var can preserve spaces in all situations except if you provide a single trailing space:
 
<syntaxhighlight lang="mirc">//var -s %a $+($chr(32),a,$chr(32),$chr(32),b,$chr(32),$chr(32)),%b $+($chr(32),a,$chr(32),$chr(32),b,$chr(32)) | echo -a $len(%a) $len(%b)</syntaxhighlight>which is displaying 7 5 instead of 7 6 (there is one less space at the end, which is lost because it's a single trailing space), you can use the new -p switch to fix this.
 
 
/var is calling /set for every assignment, but every assignment in /var must start with a %
 
 
  //var -s %a,$+(%,b) 1
 
This will set the variable '%a,$+(%,b)' to the value 1, mIRC will consider your second assigment invalid and therefore it's just part of the current variable name.
 
 
  //var -s $+(%,b) 1,%a 2
 
Here the first assignment is ignored and %a is set to 2 properly, it it still possible to construct dynamic variable name by making the % the first character:
 
 
  //var -s % $+ b 1
 
 
And just like /set, /var will combine $+ with the variable name:
 
 
  //var -s %a $+ b value
 
Does set %ab, evaluation brackets are not required to properly set the variable %ab
 
 
/var is also strict on switches, you cannot pass switches dynamically:
 
 
  //var %var s | var -g $+ %var % $+ setting 1 | echo -ag > %var -- %setting
 
or
 
  //var %var s | var -g $+ %var %setting 1 | echo -ag > %var -- %setting
 
 
is not doing the trick
 
 
=== Quirks in /set /inc and /dec ===
 
 
/set /inc and /dec is less strict than /var, the assignment does not have to start with a %:
 
 
  //set -ls $+(%,a) 1
 
 
works correctly, however /set also allow dynamic switches, this leads to a new quirk for /set:
 
 
<syntaxhighlight lang="mirc">//var %var 1 | set -u $+ %var %setting</syntaxhighlight>should set %setting but won't, you can use % $+ setting to workaround this issue.
 
 
=== Quirks in /unset ===
 
 
/unset can unset a variable not starting with a variable name:
 
 
  //var %ab 1,%i 1 | unset -s $var(%ab*,%i) | echo -ag nope | unset -s $var(%ab*,$(%i))
 
 
/unset suffers from an evaluation problem, a common problem is using the same logic as /set, for example:
 
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ %b</syntaxhighlight>You might expect this to evaluate %b and stick its content to plain text "%a", just like in /set etc but it won't, mIRC won't evaluate %b at all, thinking it's a seperate variable name you want to unset as well, unsetting the wrong %a%b instead of %ab.
 
 
To workaround this problem, you must use evaluation brackets to force the evaluation:
 
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ [ %b ]</syntaxhighlight>
 
 
Another issue also occurs with variable inside identifier:
 
 
  //var %ab 1 | unset -s $+(%a,b)
 
 
This will correctly unset the variable %ab, %a is not evaluated inside $+(), you can use $() on the variable to force evaluation.
 
 
== Conclusion ==
 
 
Variables are a great resource to have at your fingertips within mIRC! As you've seen, they are very powerful, and yet don't require too much of a headache to understand :)
 
Variables are a great resource to have at your fingertips within mIRC! As you've seen, they are very powerful, and yet don't require too much of a headache to understand :)
  
[[Category:mIRC|variables]]
+
[[Category:mIRC]]

Please note that all contributions to WikiChip may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see WikiChip:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)