Перейти к публикации
Форум - ComputerCraft
Alex

конкурс Программа для выдачи ежедневных бонусов

Рекомендованные сообщения

Хмм... Я думаю, что добиться решения недочетов с переходом дат 30-1, 31-1, 29-1 можно добавив 5 дополнительных проверок в механизме проверки выполнения. Механизм вроде должен выглядеть так:

 

if tonumber(lastlogin)+1==tonumber(getDate()) then

count=totalDays+1

giftDaily(player)

writeAccountData(player, tonumber(getDate()), count)

elseif tonumber(string.sub(tostring(lastlogin))), 7,8)))==30 and tonumber(string.sub(tostring(getDate(), 7, 7))==1 then

--заплатка для случая перехода дат с 30 по 1, где длинна номера месяца больше 10(числа вроде 08 tonumber превращает в 8)

count=totalDays+1

giftDaily(player)

writeAccountData(player, tonumber(getDate()), count).......

Что это?????? Я же написал, как разницу проверять. Скрипт(а точнее комьютер) сам умно вычисляет разницу в астрономических секундах между любыми двумя датами, хоть на столетия вперед и между Днем рождения первого динозавра и полетом Гагарина в космос!!!! То есть компьютер знает календарь:) PHP файл лежит на нашем сайте. Вам нужно только отправить на него http запрос с двумя датами в указаном формате.

 

Я же написал в 25 посте этой темы. Просто используйте готовую функцию. Секунды разделите на 3600 и потом еще на 24 и округлите вниз, или правильнее наверно взять целую часть, чтобы получить количество целых дней отсутствия.

days_no_visit , _ = math.modf (tonumber(differenceDates(date0, date1))/3600/24)

Получите "0", если времени прошло меньше суток, "1" если день и "трошкы" и т.д.

 

Если days_no_visit

 

Рука-лицо, честное слово.:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну а я решил сделать так, результат же будет такой-же - тока привязка идет не к часам с момента последнего входа, а к дате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну что ж... попробую написать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Syabro, если хочешь - можем работать в команде. У меня уже что-то понаписано, осталось добавить выдачу ресов по праздникам и дебажить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Syabro, если хочешь - можем работать в команде. У меня уже что-то понаписано, осталось добавить выдачу ресов по праздникам и дебажить...

Давай :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Syabro, cкайп есть? Или через редкол?

Скайп есть! syabro98

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я благополучно прилетел из Египта....

А че конкурс заморозили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я благополучно прилетел из Египта....

А че конкурс заморозили?

Нет, "заморозились" игроки, видимо:) Идет "важное" обсуждение "важных модов" типа чизелей всяких. Не до конкурсов сейчас.:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А, ок.

Лучше-бы сборку облегчили а не моды сували...

Ты видимо иронии не понял про "мороз". Моды никому не надо, мне по крайней мере точно. Ты пишешь программу или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я в принципе прога то уже есть, но время она проверя5т все теми-же нагромождениями и выдача призов в праздники существует как куча if ... then ... end. В общем прогу я понемногу пилю но проверить нормально AMI всееще не получается и пишу я вслепую в том-же gedit'е...

Пока реализовано:

Основная функция

Выдача по праздникам

Информирование игрока о выйгрыше (пока только на инглише)

 

В общем все еще сыро и нужна критика со стороны.

P.S. Прикрепил сорц чтобы виден был текущий этап развития и для критики окружающих.

gifter.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем все еще сыро и нужна критика со стороны.

P.S. Прикрепил сорц чтобы виден был текущий этап развития и для критики окружающих.

 

Время конкурса подошло к концу. И так дал еще 12 дней. Спасибо всем, кто принял участие.

Так, как работ не много, а точнее одна, рассмотрим ее. Что можно сказать, работа сыровата, и находится на начальной стадии проектирования.

 

Вот как я в своей программке для Локи определял разницу во времени:

function getWorldTime()
    if not http then
        error("Set enable API_http in ComputerCraft.cfg")
    end
    local response = http.get("http://www.timeapi.org/pdt/in+11+hours")  --change args
    if response then
        local time_mess = response.readAll()
        response.close()
        return time_mess
        else
        return "not time"
    end
end

function differenceDates(date0, date1)
    local response = http.post("http://computercraft.ru/scr/days.php?d0="..date0.."&d1="..date1)
    if response then
        difference_of_dates = response.readAll()
        response.close()
    return difference_of_dates
    else return "not calculate time"
    end
end

function deltaTimeLastVisitPlayer(name_user)--2014-07-13T21:39:45-07:00
local current_time = getWorldTime()
if current_time == "not time" then return "error get time" end
    if fs.exists(UsersPath..name_user) then
        array_user = readFromFile(UsersPath..name_user)
        last_visit_user_time = array_user[1]
        if last_visit_user_time == "not time" then return "error get time user" end
    else return "not found file of player"   
    end
    date0 = string.sub(last_visit_user_time, 1,10).."%20"..string.sub(last_visit_user_time, 12,19)
    date1 = string.sub(current_time, 1,10).."%20"..string.sub(current_time, 12,19)
    diff = differenceDates(date0, date1)
    result_diff_time = tonumber(diff)
    if result_diff_time ~=  nil then return result_diff_time
    else return "not calculate time"
    end
end

function sayVisitLongAgo()
    while true do
    sleep(math.random(300, 700)) --600 3600 10 мин - 60 мин
        local array_user = getUserNames()
            if #array_user >= 1 then
            local target_user = array_user[math.random(1,#array_user)]
            result_info_visit = deltaTimeLastVisitPlayer(target_user)
                if result_info_visit == "not found file of player" then
                -- вы ни разу не посещали божество
                commandBlock.setCommand("/say "..target_user.."!"..getMsg("special", "79"))
                commandBlock.runCommand()
                end
                result_info_visit = tonumber(result_info_visit)
                if result_info_visit~=nil then
                hours = math.floor(result_info_visit/3600)
                minutes = math.floor((result_info_visit - hours*3600)/60)
                sec = result_info_visit - hours*3600 - minutes*60
                commandBlock.setCommand("/say "..target_user.."!"..getMsg("special", "80").." ("..hours..")"..getMsg("special", "81")..", ".."("..minutes..")"..getMsg("special", "82")..", ".."("..sec..")"..getMsg("special", "83")..getMsg("special", "84").."!")
                commandBlock.runCommand()
                end
            end
     end
end
Так и даты удобнее хранить, и время получаешь с точностью до секунды между двумя любыми датами.

 

За старания, учитывая возраст, и то, что в одиночку сражался с программой, получаешь статус победителя "Конкурса № 1".

Приз назначу сам, не так как планировалось рандомно при поморщи труб, а именно, комлект нано-костюма, и золотой префикс в чате [Winner]

Получишь костюм на новом сервере Computers & Science II, Аpocalypse.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изображение

 

С AlexCC на пару сделали то, что не смогли игроки... Времени ушло ровно 1 вечер

Лог в файл и на монитор

Выдача призов каждые сутки. После 48 часов отсутствия счетчик сбрасывается до 1

Ну и тд и тд...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Самая крутая штучка, это буфер по обработке потоков данных, на обработку которых требуется разное время. Надо будет с подробными комментариями выложить исходник, как это все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изображение

 

С AlexCC на пару сделали то, что не смогли игроки... Времени ушло ровно 1 вечер

Лог в файл и на монитор

Выдача призов каждые сутки. После 48 часов отсутствия счетчик сбрасывается до 1

Ну и тд и тд...

Был бы рабочий лаунчер и время я б тоже сделал!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×