Show me that script acting slow and I'll change my mind.
It won't act slow but it does have a slight bug. Your on PART event needs some braces:
ON ^*:PART:%hide.channels:if (!$hget(hidejoins,$+($cid,.,$nick)))
{ haltdef | hdel hidejoins $+($cid,.,$nick)
}Otherwise it will try to /hdel an item that doesn't exist when the person leaving is not in the hashtable.
Here is the script I was using as of the last effort:
on ^1:PART:#:{
if (%HaltDef: [ $+ [ $chan ] ]) { // If we are hiding events on this channel
var %%%evaluate = $+($chr(37), $chr(37), NoHaltDef:, $chan, :, $nick)
if ($eval(%%%evaluate, 2)) unset %%NoHaltDef: $+ $chan $+ : $+ $nick
else haltdef
}
}
on ^1:QUIT:{
var %%%comchan.scan = 1
var %%%comchan.max = $comchan($nick, 0)
while (%%%comchan.scan <= %%%comchan.max) {
var %%%comchan.chan = $comchan($nick, %%%comchan.scan)
if (%HaltDef: [ $+ [ %%%comchan.chan ] ]) { // Once again, if we are hiding events on this channel.
var %%%evaluate = $+($chr(37), $chr(37), NoHaltDef:, %%%comchan.chan, :, $nick)
if ($eval(%%%evaluate, 2)) unset %%NoHaltDef: $+ %%%comchan.chan $+ : $+ $nick
else haltdef
}
var %%%comchan.scan = $calc(%%%comchan.scan + 1)
}
}
Variables are horrible inefficient when compared to hashtables. Try using drum or argv0's scripts and you will see speed improvements.