try this
Code:
on *:start:{ start-timer }

alias f8 {
  if ($timer(deop_and_part)) .timerdeop_and_part off
  start-timer
}

alias start-timer {
  .timerdeop_and_part 1 60 scon -at1 deop_and_part
}

alias -l deop_and_part {
  if ($me isop #dynasty_help) { mode #dynasty_help -o $me }
  if ($me isop #helpcom) { mode #helpcom -o $me }
  if ($me isop #dyn_staff) { mode #dyn_staff -o $me }
  if ($me isop #dyn_scripting) { mode #dyn_scripting -o $me }
  if ($me isop #xbc_opers) { mode #xbc_opers -o $me }
  if ($me ison #ascii_art) { part #ascii_art }
  if ($me ison #xbc_help) { part #xbc_help }
  if ($me ison #xbc_game) { part #xbc_game }
}


Tested as written and it closed the same channel name on two networks.

When using multiserver coding it is important that vars or identifiers are not called on the same line as a scid or scon command, this is because of the way mIRC evaluates the line twice, just like you had put $eval(%var,2)
Because you are not evaluating a var or identifier carried in from an on text type event (or other external event) having the alias called on the same line as the scon should be fine.

I will leave it to you to deal with the window status if that matters