mIRC Home    About    Download    Register    News    Help

Print Thread
Joined: Aug 2004
Posts: 7,168
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,168
Looking for a better way to do this, if one exists.
Code:
  if $did(3).state || $did(4).state || $did(5).state || $did(6).state || $did(7).state || $did(8).state || $did(9).state || $did(10).state {
    if !$didwm($dname,2,$did(2,0)) {
      did -a $dname 2 $did(2,0)
    }


Joined: Jul 2006
Posts: 4,020
W
Hoopy frood
Offline
Hoopy frood
W
Joined: Jul 2006
Posts: 4,020
Not really better but shorter and maybe faster even if I'm sure you don't care about speed... :

Code:
if (0 isin $regsubex(xxxxxxxx,/x/g,$iif($did($calc(2 + \n)).state,0,1))) {
 if !$didwm($dname,2,$did(2,0)) {
   did -a $dname 2 $did(2,0)
  }
}
Not tested of course, but should work smile

Last edited by Wims; 11/03/09 12:37 AM.

#mircscripting @ irc.swiftirc.net == the best mIRC help channel
Joined: Aug 2004
Posts: 7,168
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,168
I appreciate the suggestion, but am having a hard time understanding the code. Would you be kind enough to explain it?

Joined: Jul 2006
Posts: 4,020
W
Hoopy frood
Offline
Hoopy frood
W
Joined: Jul 2006
Posts: 4,020
Sorry wink

$regsubex is used to make a "while" with 8 iteration (input string is 8 'x', and we're matching all of them using /g).
When replacing each 'x', just check for $did($calc(\n + 2)).state (\n represent the match number) in order to have number from 3 to 10, if state is 1, replace with 0, else with 1.
Then use isin to check if there is a 0 in the result of $regsubex, if so, it mean that at least one your condition is true.
Hope this help

Edit : in fact the //g parameter was missing.

Edit2 : $regsubex is generally faster than a while, but here, it will test all your $did().state even if previous are 1, whereas an if statement won't do this, so really, I don't know if this code is better.

Last edited by Wims; 11/03/09 12:42 AM.

#mircscripting @ irc.swiftirc.net == the best mIRC help channel
Joined: Oct 2005
Posts: 1,671
G
Hoopy frood
Offline
Hoopy frood
G
Joined: Oct 2005
Posts: 1,671
I don't think there is a 'better' way to accomplish what you are doing there. There are ways that aren't as wide, or can be altered more easily (or dynamically).

Code:

[code]

var %a = 3 4 6 8 10 42
;
var %x = 0, %i = 0, %ii = $numtok(%a,32)
while (%a < %aa) {
  inc %a
  if ($did($gettok(%a,%i,32)).state == 1) {
    %x = 1
    break
  }
}

if ((!$didwm($dname,2,$did(2,0))) && (%x)) {
  did -a $dname 2 $did(2,0)
}


(untested)
You can change the contents of %a in another part of your script so that different conditions (checkboxes) can affect the results of the script dynamically.

-genius_at_work

Joined: Dec 2002
Posts: 2,884
S
Hoopy frood
Offline
Hoopy frood
S
Joined: Dec 2002
Posts: 2,884
You mixed up the names of your variables there - you should be checking and incrementing %i and %ii.

RusselB: As far as making it better there really isn't any good way in mIRC scripting. Either use the static method you've currently got or use a loop like genius_at_work's to make it simpler to alter later. Wims' is smaller and may be faster but it's highly unreadable and speed is irrelevant in that code in any case.

Joined: Aug 2004
Posts: 7,168
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,168
Thanks for the replies and alternative suggestions. All things considered, I think I'll stick with what I already have.

Joined: Sep 2005
Posts: 2,630
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Sep 2005
Posts: 2,630
Just for fun, you could shave a few more bytes off:

Code:
if ($regsubex(........,/./g,$xor($did($calc(2+ \n)).state,0))) && (!$didwm($dname,2,$did(2,0))) did -a $dname 2 $did(2,0)

Joined: Jul 2006
Posts: 4,020
W
Hoopy frood
Offline
Hoopy frood
W
Joined: Jul 2006
Posts: 4,020
He he, it wasn't the purpose wink


#mircscripting @ irc.swiftirc.net == the best mIRC help channel
Joined: Feb 2006
Posts: 523
J
Fjord artisan
Offline
Fjord artisan
J
Joined: Feb 2006
Posts: 523
you don't need $xor() there, xor-ing with 0 doesn't change a number :P


"The only excuse for making a useless script is that one admires it intensely" - Oscar Wilde
Joined: Sep 2005
Posts: 2,630
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Sep 2005
Posts: 2,630
You are right!

I got confused with shortening the $iif($did().state,0,1) backwards approach that wims used :P

Joined: Jul 2006
Posts: 4,020
W
Hoopy frood
Offline
Hoopy frood
W
Joined: Jul 2006
Posts: 4,020
Lol, indeed, the $iif isn't needed.


#mircscripting @ irc.swiftirc.net == the best mIRC help channel

Link Copied to Clipboard