--ProfiledDescription 1.0 -- --by Mutor -- --Based on Description Tag by ¨˜”°º•Hawk•º°”˜¨ 05-07-2004 --Great Idea Hawk ...thx -- --User Profiles saved to table at connect and to file at restart --Users string is broadcast to all after brief delay --Refresh of user list return only to user requestinf list --Dropped timer, exists only to delay MyINFO --A work in progress, but a decent start --Post your comments -- --User Settings------------------------------------------------------------------------------------- -- UnRegTagInDescription = "UnReg" --Sets the tag to be shown in Unreg's descriptions Users = "UserProfiles.txt" --Set Filename for saving user profiles -- --End User Settings---------------------------------------------------------------------------------- UserTab = {} function Main() SetTimer(1000) -- 1 second should be enough, hope its not too long for a busy hub, adjust if needed frmHub:EnableFullData(1) LoadFromFile(Users) end function NewUserConnected(user, data) profname = "" pName = "" if user.iProfile == -1 then profname = "[ "..UnRegTagInDescription.." ] :" pName = UnRegTagInDescription else if GetItemByName(user.sName)~=nil then profname = "[ "..GetProfileName(user.iProfile).." ] :" pName = GetProfileName(user.iProfile) end end if UserTab[user.sName]== nil or UserTab[user.sName]~= pName then UserTab[user.sName] = pName end if user.sMyInfoString ~= nil then s,e,name,desc,speed,email,share = strfind(user.sMyInfoString, "$MyINFO $ALL (%S+)%s+([^$]*)$ $([^$]*)$([^$]*)$([^$]+)") if not desc then desc="Please provide description" end StartTimer() end end function OnTimer() SendToAll( "$MyINFO $ALL "..name.." "..profname.." "..desc.."$ $"..speed.."$"..email.."$"..share.."$") profname = "" pName ="" StopTimer() end OpConnected = NewUserConnected function DataArrival(user,data) if strsub(data, 1, 12) == "$GetNickList" then end local usr,profile for usr,profile in UserTab do local profname = "[ "..profile.." ] :" if (GetItemByName(usr) ~= nil) then local userToShow = GetItemByName(usr) if (userToShow.sMyInfoString ~= nil) then local s,e,name,desc,speed,email,share = strfind(userToShow.sMyInfoString, "$MyINFO $ALL (%S+)%s+([^$]*)$ $([^$]*)$([^$]*)$([^$]+)") user:SendData( "$MyINFO $ALL "..name.." "..profname.." "..desc.."$ $"..speed.."$"..email.."$"..share.."$") end end end end function OnExit() SaveToFile(Users , UserTab , "UserTab") end function Serialize(tTable, sTableName, sTab) assert(tTable, "tTable equals nil"); assert(sTableName, "sTableName equals nil"); assert(type(tTable) == "table", "tTable must be a table!"); assert(type(sTableName) == "string", "sTableName must be a string!"); sTab = sTab or ""; sTmp = "" sTmp = sTmp..sTab..sTableName.." = {\n" for key, value in tTable do local sKey = (type(key) == "string") and format("[%q]",key) or format("[%d]",key); if(type(value) == "table") then sTmp = sTmp..Serialize(value, sKey, sTab.."\t"); -- The Bug was here else local sValue = (type(value) == "string") and format("%q",value) or tostring(value); sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue end sTmp = sTmp..",\n" end sTmp = sTmp..sTab.."}\r\n" return sTmp end function SaveToFile(file , table , tablename) writeto(file) write(Serialize(table, tablename)) writeto() end function LoadFromFile(file) if (readfrom(file) ~= nil) then readfrom(file) dostring(read("*all")) readfrom() end end