Вопрос про окошко Text и как туда добавить текущее время

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
shaman52
Posts: 9
Joined: 2004-09-12 23:20:49

Вопрос про окошко Text и как туда добавить текущее время

Post by shaman52 »

В скрипте на ламбер (Lumberjacking / Рубка деревьев v7.3 Full) имеется такая функция, выводится в окошке текст когда человек выложил логи и указывается время. Как написать текст понятно, а вот как вывести текущее время, что-то не разобрался, помогите? Как это сделать? Напишите скрипт (для примера) который выводит время?
Заранее спасибо!
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

AlexeyVorotnikov
Junior Expert
Posts: 138
Joined: 2004-09-18 15:12:06

Re: Вопрос про окошко Text и как туда добавить текущее время

Post by AlexeyVorotnikov »

shaman52 wrote:В скрипте на ламбер (Lumberjacking / Рубка деревьев v7.3 Full) имеется такая функция, выводится в окошке текст когда человек выложил логи и указывается время. Как написать текст понятно, а вот как вывести текущее время, что-то не разобрался, помогите? Как это сделать? Напишите скрипт (для примера) который выводит время?
Заранее спасибо!

А вот как в скрипте написано, так и выводить.
shaman52
Posts: 9
Joined: 2004-09-12 23:20:49

Post by shaman52 »

Синтакс: number uo.Time()
Возвращает число вида HHMMSS, где SS - секунда, MM - минута, YY - час.

Как это понимать? что такое number?
Ну напишите скрипт, вставив который можно вывести то что нужно?

если вставить это:
var Time,Space
Time=Time()
Space=' '
uo.TextOpen()
uo.TextPrint("Выкладываем логи - " +Space +Time)
то выдаёт ошибку.
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

shaman52 wrote:что такое number?


Это 8-и байтное с плавающей точкой в диапазоне 5.0 x 10^–324 .. 1.7 x 10^308 :)
shaman52
Posts: 9
Joined: 2004-09-12 23:20:49

Post by shaman52 »

Мне это ничего не говорит.
Ну пожалуйста, напишите скрипт на выведение времени в окно text?
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

shaman52 wrote:Синтакс: number uo.Time()
Возвращает число вида HHMMSS, где SS - секунда, MM - минута, YY - час.

Как это понимать? что такое number?


В данном случае (и в аналогичных) показывает, что описываемая функция (UO.Time) вернет число. То есть если в скрипте написать:

Code: Select all

VAR i
i = UO.Time()


То i - это число.
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Специально для тебя отвлекся от зафлуживания форумов и написал пример.

Code: Select all

sub main()
 
  ; Открытие текстового окна
  UO.TextOpen()
 
  ; Зачистка текстового окна
  UO.TextClear()
 
  ; Вывод текста в текстовое окно
  UO.TextPrint("Пример работы с временем")
 
  ; Вызов функции определения времени и вывод результата ее работы в текстовое окно
  UO.TextPrint(SAFECALL PrintTime())
 
end sub

sub PrintTime() 

  ; Определение текущего времени
  Var CurrentTime = UO.Time()
 
  ; Определение часов
  Var Hr  = Mid(STR(CurrentTime),0,2)
 
  ; Определение минут
  Var MIN = Mid(STR(CurrentTime),2,2)
 
  ; Определение секунд
  Var SEC = Mid(STR(CurrentTime),4,2)
 
  ; Возврат результата в общепринятом формате времени
  Return (HR+':'+MIN+':'+SEC)
 
end sub   
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

AGRS wrote:

Code: Select all

  ; Определение часов
  Var Hr  = Mid(STR(CurrentTime),0,2)
 
  ; Определение минут
  Var MIN = Mid(STR(CurrentTime),2,2)
 
  ; Определение секунд
  Var SEC = Mid(STR(CurrentTime),4,2)
 
  ; Возврат результата в общепринятом формате времени
  Return (HR+':'+MIN+':'+SEC)


Запусти этот скриптец после полуночи и ты получишь совсем неожиданный результат :) Я в свое время развлекался. При нуле часов час - одна цифра, минуты до 10 - одна цифра. То есть 0 часов 5 минут 10 секунд - это '0510'... :)
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Edred wrote:Запусти этот скриптец после полуночи и ты получишь совсем неожиданный результат :) Я в свое время развлекался. При нуле часов час - одна цифра, минуты до 10 - одна цифра. То есть 0 часов 5 минут 10 секунд - это '0510'... :)


Критика принята. Ща пофиксим. %)
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Вот, выдрал из своего мининга:

Code: Select all

Sub ConvertTime( tim )
   VAR sek, nosek, chas, min, newtim
   ; 1. Шесть знаков: 193121 = 19.31.21
   ; 2. Четыре знака: 1009 = 00.10.09
   ; 3. Пять знаков: 10850 = 01.08.50
   If len( tim ) == 6 Then
      sek = right( tim, 2 )
      nosek = left( tim, len( tim ) - 2 )
      chas = left( nosek, len( nosek ) - 2 )
      min = right( nosek, len( nosek ) - 2 )
      newtim = chas + '.' + min + '.' + sek
      return newtim
   Endif
   If len( tim ) == 5 Then
      sek = right( tim, 2 )
      nosek = left( tim, 3 )
      chas = '0' + left( nosek, 1 )
      min = right( nosek, 2 )
      newtim = chas + '.' + min + '.' + sek
      return newtim
   Endif
   If len( tim ) == 4 Then
      sek = right( tim, 2 )
      chas = '00'
      min = left( tim, 2 )
      newtim = chas + '.' + min + '.' + sek
      return newtim
   Endif
   return tim
endsub


Наврал в предыдущем посте. 0 часов вообще не показывается. И вообще, в комментариях в скрипте приведены варианты времени.
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Edred wrote:Вот, выдрал из своего мининга:


Тоже не катит. Нужен полный перебор. Есть даже варинт 3 (3 секунды после полуночи :lol:)

Вот так работает:

Code: Select all

sub main()
 
  ; Открытие текстового окна
  UO.TextOpen()
 
  ; Зачистка текстового окна
  UO.TextClear()
 
  ; Вывод текста в текстовое окно
  UO.TextPrint("Пример работы с временем")
 
  ; Вызов функции определения времени и вывод результата ее работы в текстовое окно
  UO.TextPrint(SAFECALL PrintTime())
 
end sub

sub PrintTime() 
  Var HR  = ''
  Var MIN = ''
  Var SEC = ''
 
  ; Определение текущего времени
  Var CurrentTime = UO.Time()
 
  If CurrentTime>99999 Then
    ; Определение часов
    HR  = Mid(STR(CurrentTime),0,2)
    ; Определение минут
    MIN = Mid(STR(CurrentTime),2,2) 
    ; Определение секунд
    SEC = Mid(STR(CurrentTime),4,2)
  Else
    If CurrentTime > 9999 Then
      ; Определение часов
      HR  = '0'+Mid(STR(CurrentTime),0,1)
      ; Определение минут
      MIN = Mid(STR(CurrentTime),1,2) 
      ; Определение секунд
      SEC = Mid(STR(CurrentTime),3,2)
    Else
      If CurrentTime > 999 Then
        ; Определение часов
        HR  = '00'
        ; Определение минут
        MIN = Mid(STR(CurrentTime),0,2) 
        ; Определение секунд
        SEC = Mid(STR(CurrentTime),2,2)
      Else
        If CurrentTime > 99 Then
          ; Определение часов
          HR  = '00'
          ; Определение минут
          MIN = '0'+Mid(STR(CurrentTime),0,1) 
          ; Определение секунд
          SEC = Mid(STR(CurrentTime),1,2)
        Else
          If CurrentTime > 9  Then
            ; Определение часов
            HR  = '00'
            ; Определение минут
            MIN = '00' 
            ; Определение секунд
            SEC = STR(CurrentTime)
          Else
            ; Определение часов
            HR  = '00'
            ; Определение минут
            MIN = '00' 
            ; Определение секунд
            SEC = '0'+STR(CurrentTime)         
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf

  ; Возврат результата в общепринятом формате времени
  UO.TextPrint(STR(CurrentTime ))
  Return (HR+':'+MIN+':'+SEC)
 
end sub   
shaman52
Posts: 9
Joined: 2004-09-12 23:20:49

Post by shaman52 »

А теперь скажите почему этот скрипт не работает? Что я не так делаю?
И покажите как надо?
Да, и всё же в скрипте на ламбер это как то проще реалезовано.

sub main()
#BETEP™#
var mx, my, mz, i, j, jor, ser, noto
Uo.exec("set norbcheck 1"); для рекола
uo.exec("set norbcalc 1"); тоже

uo.print('!!Viberi Lopatu!! ')
uo.exec('addobject Shovel')
while uo.targeting()
wait(100)
wend

uo.print('!!Viberi Runebook!! ')
uo.exec('addobject Runebook')
while uo.targeting()
wait(100)
wend

na4alo:
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()
for i = mx-4 to mx+4
for j = my -4 to my+4
while not UO.Hidden()
UO.Warmode("0")
uo.print("Hiding...")
UO.UseSkill("Hiding")
wait(4000)
wend
UO.Print("Kopaem v koordinatah: "+str(mx-i)+" "+str(my-j))
while not UO.InJournal("no ore here") and not UO.InJournal("location") and not UO.InJournal("Copper Ore") and not UO.InJournal("Dull Copper Ore") and not UO.InJournal("Old Copper Ore") and not UO.InJournal("Rusty Ore") and not UO.InJournal("Iron Ore") and not UO.InJournal("far away") and not UO.InJournal("in rock")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Useobject("Shovel")
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock")
wait (500)
if uo.injournal("heavy") or uo.dead() then
pwav()
Pause()
endif
for jor = 0 to 9
ser = uo.journalserial(jor)
noto = uo.getnotoriety(ser)
if noto <> 1 and noto <> 0 and not uo.injournal("elemental") then
if uo.waiting() then
uo.canceltarget()
endif
Save()
pwavw()
realtime()
uo.TextOpen()
uo.TextPrint("Вроде ушли, ждем пока уйдёт ПК "+HR+":"+MIN+":"+SEC)
wait(180000) ; время в секундах при ожидании пока уйдет ПК
loot()
wait(3000)
goto reccal
endif
next
wend
if uo.weight > 250 then ; Максимальный вес при котором домой с рудой
goto end
endif
wend
UO.DeleteJournal()
next
next
goto na4alo
end:
if uo.waiting() then
uo.canceltarget()
endif
uo.exec("recall Runebook 21") ; домой ( в рунбуке слот 1 )
wait(15000)
loot()
wait(3000)
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
uo.exec("recall Runebook 94") ; в шахту ( в рунбуке слот 8 )
mx = UO.GetX("self")
my = UO.GetY("self")
wait(15000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal
endif
goto na4alo
end sub

sub loot() ; перекладка руды в сундук
realtime()
uo.TextOpen()
uo.TextPrint("Выкладываем оры в сундук "+HR+":"+MIN+":"+SEC)
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit
VAR UnloadCont='0x401f219d' ; АЙДИ сундука для руды
DIM Ore[5]
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 3
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
end sub

sub Save() ; Реколл от ПК при их появлении (в паке рунка в безопасное место и реги)
realtime()
uo.TextOpen()
uo.TextPrint("Нас атаковали, смываемся "+HR+":"+MIN+":"+SEC)
var mx, my
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
mx = UO.GetX("self")
my = UO.GetY("self")
UO.DeleteJournal()
UO.FindType('0x1F14',-1,'my')
wait(200)
UO.Cast('Recall','finditem')
wait(4000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal
endif
end sub

sub pwav() ; звук при выкапывании ЭЛЕМЕНТАЛА
uo.playwav("C:\Games\UO\inject\alarm.wav")
endsub

sub pwavw(); звук при появлении ПК
uo.playwav("C:\Games\UO\inject\alarm.wav")
endsub

sub Pause() ; Пауза скрипта если выкопали Элема (продолжить сказав GO )
UO.DeleteJournal()
REPEAT
WAIT(3000)
UO.Print("!!!Skript na pauze, napishi GO!!!!")
UNTIL UO.InJournal('GO')
UO.Print("!!!Skript prodoljen!!!!")
endif
end sub

sub realtime()
Var HR = ''
Var MIN = ''
Var SEC = ''

; Определение текущего времени
Var CurrentTime = UO.Time()

If CurrentTime>99999 Then
; Определение часов
HR = Mid(STR(CurrentTime),0,2)
; Определение минут
MIN = Mid(STR(CurrentTime),2,2)
; Определение секунд
SEC = Mid(STR(CurrentTime),4,2)
Else
If CurrentTime > 9999 Then
; Определение часов
HR = '0'+Mid(STR(CurrentTime),0,1)
; Определение минут
MIN = Mid(STR(CurrentTime),1,2)
; Определение секунд
SEC = Mid(STR(CurrentTime),3,2)
Else
If CurrentTime > 999 Then
; Определение часов
HR = '00'
; Определение минут
MIN = Mid(STR(CurrentTime),0,2)
; Определение секунд
SEC = Mid(STR(CurrentTime),2,2)
Else
If CurrentTime > 99 Then
; Определение часов
HR = '00'
; Определение минут
MIN = '0'+Mid(STR(CurrentTime),0,1)
; Определение секунд
SEC = Mid(STR(CurrentTime),1,2)
Else
If CurrentTime > 9 Then
; Определение часов
HR = '00'
; Определение минут
MIN = '00'
; Определение секунд
SEC = STR(CurrentTime)
Else
; Определение часов
HR = '00'
; Определение минут
MIN = '00'
; Определение секунд
SEC = '0'+STR(CurrentTime)
EndIf
EndIf
EndIf
EndIf
EndIf

end sub
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

shaman52 wrote:Да, и всё же в скрипте на ламбер это как то проще реалезовано.


Мда? Проще? Сравни, вот оно, выдранное из запощенного тобой скрипта (и пости скрипты кодом, если хочешь чтобы тебе кто-то чего-то отвечал):

Code: Select all

sub realtime()
 Var HR  = ''
  Var MIN = ''
  Var SEC = ''
 
  ; Определение текущего времени
  Var CurrentTime = UO.Time()
 
  If CurrentTime>99999 Then
    ; Определение часов
    HR  = Mid(STR(CurrentTime),0,2)
    ; Определение минут
    MIN = Mid(STR(CurrentTime),2,2) 
    ; Определение секунд
    SEC = Mid(STR(CurrentTime),4,2)
  Else
    If CurrentTime > 9999 Then
      ; Определение часов
      HR  = '0'+Mid(STR(CurrentTime),0,1)
      ; Определение минут
      MIN = Mid(STR(CurrentTime),1,2) 
      ; Определение секунд
      SEC = Mid(STR(CurrentTime),3,2)
    Else
      If CurrentTime > 999 Then
        ; Определение часов
        HR  = '00'
        ; Определение минут
        MIN = Mid(STR(CurrentTime),0,2) 
        ; Определение секунд
        SEC = Mid(STR(CurrentTime),2,2)
      Else
        If CurrentTime > 99 Then
          ; Определение часов
          HR  = '00'
          ; Определение минут
          MIN = '0'+Mid(STR(CurrentTime),0,1) 
          ; Определение секунд
          SEC = Mid(STR(CurrentTime),1,2)
        Else
          If CurrentTime > 9  Then
            ; Определение часов
            HR  = '00'
            ; Определение минут
            MIN = '00' 
            ; Определение секунд
            SEC = STR(CurrentTime)
          Else
            ; Определение часов
            HR  = '00'
            ; Определение минут
            MIN = '00' 
            ; Определение секунд
            SEC = '0'+STR(CurrentTime)         
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf

end sub
shaman52
Posts: 9
Joined: 2004-09-12 23:20:49

Post by shaman52 »

Для начала спрошу как постить кодом?
Ну и пока в обычнов виде шлю:

sub Time()
var hh,mm,ss,hms,t=str(uo.Time())
if len(t)<=2 then
hh="0"
mm="0"
ss=t
endif
if len(t)==3 then
hh="0"
mm=left(t,len(t)-2)
ss=right(t,len(t)-1)
endif
if len(t)==4 then
hh="0"
mm=left(t,len(t)-2)
ss=right(t,len(t)-2)
endif
if len(t)==5 then
hh=left(t,len(t)-4)
hms=left(t,len(t)-2)
mm=right(hms,len(hms)-1)
ss=right(t,len(t)-3)
endif
if len(t)==6 then
hh=left(t,len(t)-4)
hms=left(t,len(t)-2)
mm=right(hms,len(hms)-2)
ss=right(t,len(t)-4)
endif
return hh+":"+mm+":"+ss
end sub

Вот он, который из ламбера, так что он вроде поменьше, но я понял что и как только после того, как вы тут отпостились, ОГРОМНОЕ ВАМ СПАСИБО!!!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Когда ты пишешь пост, у тебя слева есть кнопочка bbcode. Нажми ее и все внимательно прочитай.
AlexeyVorotnikov
Junior Expert
Posts: 138
Joined: 2004-09-18 15:12:06

Post by AlexeyVorotnikov »

А вот как ЭТО делаю я :)

Code: Select all

sub GetTime()
  var curTime
  var hour
  var minute
  var second
  var timeStr = ""

  curTime = UO.Time()
  hour = INT(curTime/10000)
  minute = INT(curTime/100) - hour * 100
  second = curTime - hour * 10000 - minute * 100

  timeStr = str(hour) + ":"

  if minute < 10 then
    timeStr = timeStr + "0" + str(minute) + ":"
  else
    timeStr = timeStr + str(minute) + ":"
  endif

  if second < 10 then
    timeStr = timeStr + "0" + str(second)
  else
    timeStr = timeStr + str(second)
  endif

  return timeStr
end sub
Post Reply