Эксперементальный скриптинг..

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Эксперементальный скриптинг..

Post by Destruction »

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.. Видать хотел сделать что-то серьёзное.

Насколько я могу вспомнить - планировалось использовать это для забывания чего-либо в больших количествах через некоторое время.....
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Post Reply