MyDC.ru _ Помощь по скриптам для PtokaX _ скрипт рекордов АПИ1
Автор: степашка 26.4.2009, 20:53
здравствуйте. есть скрипт рекордов. работает безупречно. есть только одно нарекание. отображает рекорды по-идиотски: ------------------------------------------------------------------- Рекорд Значение Дата - Время ------------------------------------------------------------------- Шара 287 ТБ 04/26/09 18:13:24 Юзеры 2298 чел. 04/26/09 18:13:24 Макс. шара ((I)))Berserk (14.0 ТБ) ------------------------------------------------------------------- т.е. дата отображается как месяц - число - год. возможно ли сделать чтоб отображалось так?: Шара 287 ТБ 26 апреля 2009; 18:13:24 Юзеры 2298 чел. 26 апреля 2009; 18:13:24 Я читал про захваты и прочее, но не понял ничего ))) там сложно слишком для меня. Спасибо кто поможет
Можно вот в таком стандартном формате : 24 Jan 2009 22:31 Без секунд :
Код
os.date("%d %b %Y %H:%M")
С секундами :
Код
os.date("%d %b %Y %H:%M:%S")
Код
os.date()
меняем на форматированную дату, там всего два раза, если не ошибаюсь, в скрипте встречается.
Автор: степашка 27.4.2009, 8:14
спасибо щас попробую )) \\\ спасибо всё работает. прилагаю если кому понадобится ) \\\ а на русском месяцы реально сделать? пытался прикрутить из ТаймДата-бота (прилагаю), но постоянные ошибки или вообще ничего не показывает
Самым примитивным решением, видимо, будет аргументировать полученную строку даты в функцию замены импортных названий месяцев на русские названия. Например, так : вместо
Код
os.date("%d %b %Y %H:%M")
пишем
Код
GsubMonth(os.date("%d %b %Y %H:%M"))
и добавляем функцию :
Код
function GsubMonth(s) s=s:gsub("Jan","Января"); s=s:gsub("Mar","Марта"); s=s:gsub("May","Мая") s=s:gsub("Jun","Июня"); s=s:gsub("Jul","Июля"); s=s:gsub("Aug","Августа") s=s:gsub("Feb","Февраля"); s=s:gsub("Sep","Сентября"); s=s:gsub("Dec","Декабря") s=s:gsub("Oct","Октября"); s=s:gsub("Nov","Ноября"); s=s:gsub("Apr","Апреля") return s end
Автор: Setuper 4.5.2009, 13:40
В данном случае это не оптимальное решение, так как метод gsub будет при каждом вызове функции выполняться всегда 12 раз. Кроме этого, использование такого количества локальных строк будет влиять на скачки в памяти при каждом использовании данной функции.
Лучше сделать локальную таблицу с месяцами:
Код
local sM, tMonth = "%b", { Jan = "Января", Feb = "Февраля", Mar = "Марта", Apr = "Апреля", May = "Мая", Jun = "Июня", Jul = "Июля", Aug = "Августа", Sep = "Сентября", Oct = "Октября", Nov = "Ноября", Dec = "Декабря" }
function GetMonth() return tMonth[os.date(sM)] end
Тогда использование будет таким:
Код
os.date("%d %%s %Y %H:%M"):format(GetMonth())
Автор: district 4.5.2009, 15:00
Setuper А где можно почитать об использовании format ?
Автор: Setuper 4.5.2009, 15:28
В данном случае метод формат используется в качестве оптимизации и сокращения выделяемой памяти. Можно было написать так:
Код
os.date("%d "..GetMonth().." %Y %H:%M")
но если мы так напишем, то 1 байт выделится под строку "%d ", и 1 байт выделится под строку " %Y %H:%M", после этого они конкатенацией соединятся. В итоге получаем выделение памяти под строки в размере 2 байт - это мусор, который надо будет позже убирать.
В случае если же мы напишем так:
Код
os.date("%d %%s %Y %H:%M"):format(GetMonth())
то выделится всего 1 байт под строку "%d %%s %Y %H:%M", после чего в этой строке произойдёт замена %s на значение нашей функции GetMonth. В итоге получаем выделение памяти под строки в размере 1 байта.
В общем метод format, в данном случае, используется для форматирования строки, в частности для замены %s на то, что мы хотим, с целью сокращения выделения памяти под мусор.
И ещё... Так как перед форматированием строки мы используем функцию os.date, которая также работает с переменными содержащими знак процента, то если написать не %%s, а %s, то функция os.date преобразует этот %s в своё выражение, для того, чтобы этого не произошло нам нужно, чтобы на выходе после функции os.date знак процента сохранился, то есть нам надо экранировать знак процента, что я и делаю тут.
Почитать про format можно тут: http://mydc.ru/r/?http://www.lua.ru/doc/5.4.html
Автор: степашка 4.5.2009, 18:55
весьма благодарен за ваше участие ))) однако пытался вставить то что вы тут написали, результат ноль. можно сюда скрипт полностью? это только вам легко понять сии премудрости (((
Автор: skonda 8.5.2009, 22:13
Цитата(степашка @ 4.5.2009, 19:55)
весьма благодарен за ваше участие ))) однако пытался вставить то что вы тут написали, результат ноль. можно сюда скрипт полностью? это только вам легко понять сии премудрости (((
присоединяюсь к просьбе. у кого после всех этих преобразований есть рабочий скрипт под API1 просьба выложить
Автор: district 9.5.2009, 3:41
Ну что же вы так, ребята? Задачка то простая совсем - готовое решение в скрипт вписать. Каждый одминчег должен стать Всадником Птокапокалипсиса, и Lua Reference Manual - Библия Его, и NotePad ++ - копье Его Приписал решение Setuper'a в выложенный скрипт, пользуйтесь... Попутно вот, смотрите. При показе в гл. чате рекорды форматируются. В зависимости от конкретных текщих значений может потребоваться добавление-удаление символов табуляции ( \t) в строках
и соответственно добавление - удаление количества символов дефиса в разделителях (border)
Код
local msg, border = "", string.rep ("-", 80)
При проверке получилось криво, поэтому немного подровнял, см. картинку. Но то что на картинке - это применительно к показу исключительно конкретных, текущих значений. Поэтому надо осваивать такие мелочи, и не теряться ;)
спасибо за скрипт. кстати в скрипте есть ошибка, как ее исправить?
в файле record данные Record = { ["Share"] = 36838321281645, ["maxSharer"] = "Strannik", ["tShare"] = "09 Марта 2009 20:20", ["maxShare"] = 1554544152800, ["Users"] = 273, ["tUsers"] = "09 Марта 2009 20:57", } А отображается :
-------------------------------------------------------------------------------- Рекорд Значение Дата - Время -------------------------------------------------------------------------------- Шара 33.5 ТБ 09 Марта 2009 20:20 Юзеры 273 чел. 09 Марта 2009 20:20 Макс. шара Strannik (1.4 ТБ) --------------------------------------------------------------------------------
То есть время пика шары и пика юзеров всегда совпадает, хотя на самом деле это не так.
Точно, был такой косячок. В отчет для даты рекорда шары и даты рекорда юзеров выводилась одна и та же дата - дата рекорда по шаре. Давно этим скриптом уже не пользуюсь, исправил да и забыл что такая ошибка была... Переприкреплю, на всякий случай ;)
пробовал, искал, но не нашел где править, т к не разбираюсь в скриптах.
Автор: Wariner 11.5.2009, 18:01
написали же тебе 48 строка!!! Если вдруг ты ищешь поиском, то не копируй всю строку, ибо здесь приведён уже окончательный вариант(на то что надо исправить)!
Автор: skonda 11.5.2009, 19:05
Цитата(Wariner @ 11.5.2009, 19:01)
написали же тебе 48 строка!!! Если вдруг ты ищешь поиском, то не копируй всю строку, ибо здесь приведён уже окончательный вариант(на то что надо исправить)!
скрипт давно исправлен и работает, то что я ответил с цитированием означает то что я ответил цитатой, а не то, что я не понял как править, так что твой ор неуместен.
Автор: Wariner 11.5.2009, 19:21
тут не все экстрасенсы! если вопрос снят надо было так и сказать!
PS: остроту ума проявляй в программинге а не в сообщениях!