Here is a scripted solution. It may not be perfect, but it should do most of what you wanted.

Code:
on *:CONNECT:.msg $me $+(MLT-,$str(º,512))
on me:^*:NICK:.msg $newnick $+(MLT-,$str(º,512))
on me:^*:TEXT:MLT-º*:?:{ set $+(%,MCL.,$cid) $len($gettok($rawmsg,3-,32)) | haltdef }
on *:DISCONNECT:unset $+(%,MCL.,$cid)
alias maxchars return $iif($($+(%,MCL.,$cid),2),$ifmatch,512)

on *:INPUT:#:{
  if (($inpaste) && (!$input(Warning: Do you want to display this line?,y))) halt
  if ((/* iswm $1) && (!$ctrlenter)) return
  var %mcllines = $ceil($calc($len($1-) / $maxchars))
  var %mcllen = $floor($calc(($len($1-) + $len($str($target $+ ..,%mcllines))) / %mcllines)))
  var %mclpre = $calc(%mcllen - $len($target $+ $chr(32)))
  while ($left($1,%mclpre)) {
    msg $target $v1
    tokenize 32 $right($1,$+(-,%mclpre))
  }
  halt
}


-genius_at_work