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 8: | Line 8: | ||
=== Local Variables === | === Local Variables === | ||
− | '''Local Variables''' are given local scope. They are created for the duration of the | + | '''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. |
− | |||
− | |||
Syntax: | Syntax: | ||
Line 61: | Line 59: | ||
'''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...) | ||
− | |||
− | |||
− | |||
− | |||
== The equal sign '=' == | == The equal sign '=' == | ||
Line 86: | Line 80: | ||
unset %var1 %var2 %var3</syntaxhighlight> | unset %var1 %var2 %var3</syntaxhighlight> | ||
− | The /unset command supports | + | The /unset command supports wildcard characters for each of the variable, to be able to unset multiple variables. For example: |
<syntaxhighlight lang="mirc">alias unsetWildExample { | <syntaxhighlight lang="mirc">alias unsetWildExample { | ||
Line 133: | Line 127: | ||
You can do one math operation with variable when setting a value. | You can do one math operation with variable when setting a value. | ||
− | The operators supported are: '+' '-' '/' '*' '%' '^' where % | + | The operators supported are: '+' '-' '/' '*' '%' '^' where % id the modulus and ^ is power. |
− | You must use a space around all | + | You must use a space around all 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 | + | If you don't respect the format, it will set the value as plain text, use -n to override this behavior when dynamic content. |
− | |||
− | |||
For Example: | For Example: | ||
Line 233: | Line 225: | ||
'''Dynamic Variables''' | '''Dynamic Variables''' | ||
− | Retrieving a value from a dynamic variable is a little bit more complicated. There are two ways | + | Retrieving a value from a dynamic variable is a little bit more complicated. There are two ways: |
− | |||
− | |||
<syntaxhighlight lang="mirc">%<static> [ $+ [ <dynamic> ] ]</syntaxhighlight> | <syntaxhighlight lang="mirc">%<static> [ $+ [ <dynamic> ] ]</syntaxhighlight> | ||
Line 285: | Line 275: | ||
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.''. | ||
− | + | You can also get the value of a dynamic variable by using [[$eval - Identifier|$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. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | You can also get the value of a dynamic variable by using | ||
− | |||
− | $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">$eval($+(%,<static>,<dynamic>),2)</syntaxhighlight>From our earlier example: | ||
<syntaxhighlight lang="mirc">var %color = %color. [ $+ [ $2 ] ]</syntaxhighlight> | <syntaxhighlight lang="mirc">var %color = %color. [ $+ [ $2 ] ]</syntaxhighlight> | ||
is the same as | 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. | <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. | ||
− | |||
− | |||
'''Note''': $eval is often used in the simple form $() | '''Note''': $eval is often used in the simple form $() | ||
Line 315: | Line 287: | ||
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. | 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. % | + | Indeed if //echo %var would display its content, it's because %var is evaluated and then passed as the parameter to the /echo command. //var %var is obviously not doing that otherwise the content of the variable or $null would be passed to it. So mIRC, on purpose doesn't evaluate the variable name, but it will fail to do so in some case, when the arguments are dynamically passed for example: |
− | + | <syntaxhighlight lang="mirc">//set -u $+ %var %setting</syntaxhighlight>which should set %setting but won't, because it gets evaluated, you need to use % $+ setting here, /inc & /dec are most likely affected the same way. | |
− | |||
− | |||
− | |||
− | <syntaxhighlight lang="mirc">// | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /unset also suffers from an evaluation problem, due to its ability to unset more than one variable on the same line, there is an issue when trying to unset a variable dynamically from a variable: | |
− | + | <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 //var -s %a $+ %b, 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. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <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 / | ||
To workaround this problem, you must use evaluation brackets to force the evaluation: | 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> | <syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ [ %b ]</syntaxhighlight> | ||
− | + | 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) | |
− | |||
− | |||
− | |||
− | |||
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|variables]] |