Code: Select all
Sub test()
var id, i, str = ""
if arg.getLastID() then
id = arg.getLastID()
for i = 0 to arg.Count( id )
str = str + arg.Get( id, i ) + " "
next
arg.End( id )
else
str = "Test Message."
endif
uo.print( str )
endsub
sub main()
uo.exec( "exec events" )
event.setTimeout( "test", 1, "Test,Message,1" )
endsub
Sub events()
repeat
event.timeout.check()
wait( 100 )
until false
endsub
Sub event.timeout.ClearAll()
uo.setGlobal( "e:t/o:close", "N/A" )
uo.setGlobal( "e:t/o:queue", "N/A" )
endsub
Sub event.timeout.check()
if uo.getGlobal( "e:t/o:close" ) == "N/A" || uo.timer() < val( uo.getGlobal( "e:t/o:close" ) ) then
return false
endif
var evnt = explode( uo.getGlobal( "e:t/o:queue" ), ",", 0 )
var id = "e:t/o:" + evnt
arg.SetLastID( id )
uo.exec( "exec " + explode( evnt, ":", 1 ) )
repeat
wait( 50 )
until not arg.GetLastID()
event.timeout.delF()
endsub
Sub event.timeout.delF()
var queue = uo.getGlobal( "e:t/o:queue" )
if queue == "" || queue == "N/A" then
return false
endif
queue = right( queue, strlen( queue ) - strlen( explode( queue, ",", 0 ) ) - 1 )
if not strlen( queue ) then
uo.setGlobal( "e:t/o:close", "N/A" )
else
uo.setGlobal( "e:t/o:close", explode( queue, ":", 0 ) )
endif
uo.setGlobal( "e:t/o:queue", queue )
endsub
Sub event.setTimeout( func, timeout, argv )
var q, i, queue_len, point = 0
var run_time = uo.Timer() + timeout
var id = "e:t/o:" + str( run_time ) + ":" + func
var queue = uo.getGlobal( "e:t/o:queue" )
if queue == "N/A" || queue == "" then
queue = str( run_time ) + ":" + func + ","
else
queue_len = symCount( queue, "," )
for i = 0 to queue_len -1
q = explode( queue, ",", i )
if val( explode( q, ":", 0 ) ) < run_time then
point = point + strlen( q ) + 1
else
; break
i = queue_len -1
endif
next
queue = left( queue, point ) + str( run_time ) + ":" + func + "," + right( queue, strlen( queue ) - point )
endif
uo.setGlobal( id, argv )
uo.setGlobal( "e:t/o:queue", queue )
uo.setGlobal( "e:t/o:close", explode( queue, ":", 0 ) )
endsub
Sub arg.Add( id, arg )
var argv = uo.getGlobal( id )
if argv == "N/A" then
argv = ""
endif
uo.setGlobal( id, argv + arg + "," )
endsub
Sub arg.Get( id, num )
return explode( uo.getGlobal( id ), ",", num )
endsub
Sub arg.Count( id )
if id == "N/A" || id == "" then
return 0
endif
return symCount( uo.getGlobal( id ), "," )
endsub
Sub arg.End( id )
if uo.getGlobal( "e:arg:last" ) == id then
uo.setGlobal( "e:arg:last", "N/A" )
endif
uo.setGlobal( id, "N/A" )
endsub
Sub arg.GetLastID()
if uo.getGlobal( "e:arg:last" ) == "N/A" then
return false
else
return uo.getGlobal( "e:arg:last" )
endif
endsub
Sub arg.SetLastID( id )
if uo.getGlobal( id ) == "" || uo.getGlobal( id ) == "N/A" then
uo.setGlobal( "e:arg:last", "N/A" )
else
uo.setGlobal( "e:arg:last", id )
endif
endsub
Sub getEntry( entry, str )
var i
for i=0 to strlen( str ) -strlen( entry )
if MID( str, i, strlen( entry ) ) == entry then
return i
endif
next
return -1
endsub
Sub explode( string, pattern, num )
var i, counter = 0, entry = 0
for i = 0 to strlen( string ) - strlen( pattern )
if MID( string, i, strlen( pattern ) ) == pattern then
if counter == num then
return MID( string, entry, i - entry )
endif
counter = counter + 1
entry = i + strlen( pattern )
endif
next
if counter == num && entry then
return MID( string, entry, strlen( string ) - entry )
endif
return string
endsub
Sub symCount( string, pattern )
var i, counter = 0
for i = 0 to strlen( string ) - strlen( pattern )
if MID( string, i, strlen( pattern ) ) == pattern then
counter = counter + 1
endif
next
return counter
endsub
Собственно сабж... Вытащил у себя из файлика events.sc.. Видать хотел сделать что-то серьёзное.
Насколько я могу вспомнить - планировалось использовать это для забывания чего-либо в больших количествах через некоторое время.....