About idea read here: http://www.hawkee.com/phpBB2/viewtopic.php?t=22139
Uncompleted, just for test. Now works only channels ID.
$hfind($+(conference,$cid),#).data - returns personal ID for every channel.
For what? You can use this for your scripts. For store any information and get him by ID.
on *:START: {
if ($hget(server)) hfree $v1 | hmake server | hinc server id 0
if ($hget(network)) hfree $v1 | hmake network | hinc network id 0
if ($hget(channel)) hfree $v1 | hmake channel | hinc channel id 0
}
on *:EXIT: { }
on *:CONNECT: {
var %server = 0, %network = 0
if ($hfind(server,$server).data) var %server = $v1
else {
var %server = $hget(server,id) + 1
hinc -m server id
hadd -m server %server $server
}
if ($network) {
if ($hfind(network,$network).data) var %network = $v1
else {
var %network = $hget(network,id) + 1
hinc -m network id
hadd -m network %network $network
}
}
else {
if ($hfind(network,$server).data) var %network = $v1
else {
var %network = $hget(network,id) + 1
hinc -m network id
hadd -m network %network $server
}
}
}
on *:DISCONNECT: {
if ($hget($+(conference,$cid))) hfree $v1
}
on *:JOIN:*: {
var %# = 0
if (# ischan) {
if ($hfind($+(conference,$cid),#).data) var %# = $v1
else {
var %server = 0, %network = 0
if ($hfind(server,$server).data) {
var %server = $v1
if ($hfind($+(server,%server),$+(network,*),0,w)) var %network = $hfind($+(server,%server),$+(network,*),$v1,w)
}
if ($hfind(network,$network).data) var %network = $v1
elseif ($hfind(network,$server).data) var %network = $v1
if (%network) {
var %i = $hfind($+(network,%network),$+(channel,*),0,w)
while (%i) {
var %id = $mid($hfind($+(network,%network),$+(channel,*),%i,w),8), %i = %i - 1
if ($hget(channel,%id) == #) var %# = %id
}
if (%# = 0) {
var %# = $hget(channel,id) + 1
hinc -m channel id
hadd -m channel %# #
}
hadd -m $+(conference,$cid) %# #
}
}
}
}
Jethro_: I said about MOAR /while loop for load/save ALL hash tables from/to files in START/EXIT for every: network, server, channel, user. Also RAM usage if you load data, but network/server/channel/user no more using :)
Dark|: Uncompleted = this snippet under developing, in my todo list: make networks, servers and users personal IDs. Current working only channels.
I dont like using START/EXIT events for load/save all data, because it (theoretically, if the data is very much) will be a high load.
load/hsave hash tables data must of necessity. For channels, example, after hadd -m $+(conference,$cid) %# # need check the saved data:
if ($lof($+(channels,/,channel,%#,/,data,.,txt))) {
hload $+(channel,%#) $+(channels,/,channel,%#,/,data,.,txt)
}
and load if exists.. also saving.
but no need using common events for load/save ALL data. IMHO :)