Перейти к содержимому
Alex

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

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

Так же я пока в замешательстве, как отслеживать смену месяца и года. Если сравнивать только дату, то как быть, если человек зашел 30-го, а потом 1-го числа. А в месяце сколько дней? 30 или 31? Как это отслеживать? Надо подумать..

Я тоже думаю как это сделать и это в прогу не включил((

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


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

Вот выкладываю, исправил что нашел... В 1.5.2 функция playerLoginDetect не реагирует на вход. Ну думаю это из-за версии.

в коде поставь вместо N в строчке ami = peripheral.wrap("adventure map interface_N") номер врапмодема, и активуруй его. Блок должен засветиться зелеными лампочками. И в одиночке если ты тестишь, прога может не успевать поймать твой логин.

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


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

Я почти написал и понял как решить проблемы с месяцом, предлагаю на 7-ой день с шансом 1/1000 дать квантовый генератор

 

или 1/10000

 

а я планирую использовать консоль для настройки... дабы не выключать серв

и к стате можно выдавать квантовый генератор только если рандомное число от 1 до 1000 будет равно рандомному числу от 1 до 1000 тоесть if random(1,1000) == random(1,1000) then give end

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


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

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

 

А победитель будет обьявлен по функционалу или по скорости написания?

 

Ну тогда квантовый генератор буднт впервые выигран через 600 лет

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


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

А победитель будет объявлен по функционалу или по скорости написания?

По функционалу, конечно! Работы будут рассмотрены только после конца срока написания. До этого можете их даже не выкладывать.

 

... а вот фикс с 30 по первое число нет.

Что касается определения дат. На нашем сайте был размещен PHP скрипт, который возвращает разницу между двумя датами в секундах!

 

<?php
  $d0=$_GET["d0"];
  $d1=$_GET["d1"];

  $ts1 = strtotime($d0);
  $ts2 = strtotime($d1);

  $seconds_diff = $ts2 - $ts1;

  echo floor($seconds_diff);
?>

 

Вот сама функция получения разницы во времени:

 

local date0 = "2014-07-10%2018:16:00"
local date1 = "2014-07-13%2018:16:00"

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 false
    end
end
2014-07-10%2018:16:00 - это формат даты, %20-это символ пробела, так как в строке http адреса пробелов не бывает. Секунды, я думаю, переведете в дни с округлением. Первую дату берете из файла юзера, вторую с сайта мирового времени.

 

Вот пример http://computercraft.ru/scr/days.php?d0=2014-12-20 20:12:10&d1=2014-12-24 20:12:10

 

строчка http://www.timeapi.org/pdt/in+11+hours вернет 2014-07-13T21:39:45-07:00
Это время МСК

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


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

Я почти написал и понял как решить проблемы с месяцом, предлагаю на 7-ой день с шансом 1/1000 дать квантовый генератор

 

или 1/10000

 

а я планирую использовать консоль для настройки... дабы не выключать серв

и к стате можно выдавать квантовый генератор только если рандомное число от 1 до 1000 будет равно рандомному числу от 1 до 1000 тоесть if random(1,1000) == random(1,1000) then give end

Прога должна выдавать бонус за регулярные посещения. Рандомые же подарки нереальные, подарки опыта и еще миллион всяких действий в зависимости от прокачки характеристик будут возложены на божество по имени Локи:) А вот выдачу призов к знаменательным датам надо реализовать. Позже выложу требования к программе и за каждую реализованную возможность назначу баллы. Победителем будет тот, кто реализует качественно максимум функционала и наберет соответственно больше всех баллов. Так что не брезгуйте ни менюшками, ни обработкой ошибок, ни логированием и прочим. Вот так вот:) Так же готовая и отлаженная программа будет помещена в последствии в зал славы.

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


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

Ну до вылета написать это все не успею скорее всего - а до 2 августа никто ждать наверно не будет и пока я на море плаваю все уже сделают проги и победителя обявят...

 

В общем сдаю позиции(((

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


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

Нельзя прекращать борьбу, тем более в начале пути. А конкурентов не так и много. Что-то один игрок реализует, что-то другой. Приз будет всем. А сроки все таки условны, не известно, когда реально подадут работы, и подадут ли вообще:)

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


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

Ну ладно, постараюсь....

Ток до 2го не закрывайте конкурс плз...

Я в Египте по вечерам в кафешке с WiFi-ем буду скидывать наработки и общаться..

 

Кстате AMI эт из какого мода? Мне над сделать сборку...

 

P.S. Я не играю на сервере (из-за безбожных лагов на моем железе) и приз мне не нужен...

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


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

Хмм... Я думаю, что добиться решения недочетов с переходом дат 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)

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

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

count=totalDays+1

giftDaily(player)

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

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

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

count=totalDays+1

giftDaily(player)

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

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

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

count=totalDays+1

giftDaily(player)

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

elseif tonumber(string.sub(tostring(lastlogin))), 5,5)))==2 and tonumber(string.sub(tostring(lastlogin))), 6,7)))==29 and tonumber(string.sub(tostring(getDate(), 6, 6))==1 then

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

count=totalDays+1

giftDaily(player)

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

else

sayChat("[Gifter] " .. player .. "'s account reset: he not joined game yesterday!")

makeAccount(player)

end

 

Осталось тока пофиксить что я не нашел, добавить логирование, сообщения с помощью, которые бы писались после чьего-то захода, отправка инфы(скока дней осталось, скоко дней заходил итд) в ЛС игроку ну и конечно вывод лога на экран.

 

P.S. Выкладываю сорц для теста ибо у самого нет возможности тестить. Напишите если че не так - постараюсь исправить.

Gifter.txt

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


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

Хмм... Я думаю, что добиться решения недочетов с переходом дат 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

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


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

×
×
  • Создать...