Here's an example using your script of how it could look.


PART SECTION:
Note that since both PART sections have the same basic format, I'll only show one and you can just make the other look the same.

Note that I usually do halt errors using RETURN instead of sticking them into the IF/ELSEIF/ELSE format simply to show that they are errors and the actual script shouldn't be run if there are errors. That's more of a judgement call. Note that I completely removed the last IF in the Part section because you aren't doing anything else after it and the stuff before it is just error messages that are halting.

Code:
;Part
on syscon:text:!part*:?:{
  if ($2 == $null) { notice $nick Specify channel. | return }
  if ($2 !ischan ) { notice $nick I'm already off $2 $+ . | return }
  part $2
  notice $nick Parted $2 $+ .
  write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $1 $2 via msg
}


If you did IF/ELSEIF/ELSE, it would look like this (just for an example if you prefer this method to using RETURN on errors). Note that I separated the last IF into multiple lines just so it was easier to see what was going on. If you really feel the need to use pipes (|), you can do so. But you did mention making scripts that are easier to understand and less complicated and using pipes too often has the opposite effect. I personally only use them for error messages (before RETURN). But that's just my personal preference. It's up to you how you use them.
Code:
;Part
on syscon:text:!part*:?:{
  if ($2 == $null) { notice $nick Specify channel. }
  elseif ($2 !ischan ) { notice $nick I'm already off $2 $+ . }
  else {
    part $2
    notice $nick Parted $2 $+ .
    write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $1 $2 via msg
  }
}


JOIN SECTION:
As with the Part section, your 2 Join scripts are basically the same, so I'm showing just the first one and you can use the same method in the second one. If you do have trouble with the second Part/Join, just ask.

Note that your GOTO doesn't do anything the way you have it, so I removed it. Also, you should avoid using GOTO as much as possible. In almost all cases, using GOTO isn't the best solution. There are some situations where it is the right solution, but they are few.

Again, I'd personally use RETURN for the errors, but since I'm showing the IF/ELSEIF/ELSE to you, I won't show the RETURN anymore. You can see how I use it in the Part section above and it would be the same idea here. Like I mentioned, RETURN is similar to HALT, but is the better choice if you have to halt a script for things like errors.

The last IF is an ELSE instead of an ELSEIF because you don't need to check anything. You already know from earlier that there IS a $2, so there's no need to check again. Also, note that in both this and the other examples, I changed the $$2 (etc) to $2 (etc). You don't need to use $$ unless you want something to not work if the value is $null. Because you're already checking if there is a value there, having $$ is redundant. Also, you'll see that I removed all forms of halting from the end of the scripts. This is because the script will halt when it's at the end anyhow. So this is also redundant.

Code:
;Join
on syscon:text:!join*:?:{
  if ($2 == $null) { notice $nick Specify channel. }
  elseif ($2 ischan) { notice $nick I'm already on $2 $+ . }
  elseif ($3 != $null) {
    join $2 $3
    notice $nick Join attempt on $2 with key $3 complete.
    write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $1 $2 with key $3 via msg
  }
  else {
    join $2
    notice $nick Join attempt on $2 complete.
    write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $1 $2 via msg
  }
}


URANME SECTION:
First of all, you wanted "ison" not "ischan" and you missed the $ in $me in the second IF. Now, because this is a simple THIS or THAT without anything else, you can just do IF/ELSE as shown.

Code:
; #uranme part
on uranmepart:text:!leave_uranme:*:{
  if ($me ison #uranme) { 
    part #uranme
    notice $nick Parted #uranme
  }
  else { notice $nick I'm not on #uranme. }
}


The last thing I'll note again is that you don't need to use /'s in a script. You may want to use .'s before your notices, though. That will "silence" them so that you don't see them in your bot. That's up to you, though. You may want to see them to have an idea of how often commands were used. To use .'s, just put it in front of the command, such as:

.notice $nick I'm not in $chan

Another thing that you can do, but I would probably recommend not doing it until you really feel comfortable scripting, is to connect $N's with other non-numerical text. $N is $1, $2, $3, etc. With $N's, you don't need to use $+ if you want to connect it to something that does not include a number, such as a period. You can do:

.notice $nick I'm not in $1.

... and it will work fine. I said I recommend not using this until you are more comfortable because I believe that $N is the only identifier that *can* be connected in this way and you may run into problems by connecting other identifiers without thinking about it if you get in the habit of doing this with $N's. It's up to you, though.


Invision Support
#Invision on irc.irchighway.net