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


Фотография

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

конкурс программирование

  • Закрытая тема Тема закрыта
Сообщений в теме: 47

#1 Оффлайн   Alex

Alex

    Орден К.А.

  • Администраторы
  • 3 260 сообщений

Отправлено 10 Июль 2014 - 21:13

 

Описание и условия конкурса:
Программа должна отслеживать регулярность посещений игроками сервера игры, игроки за регулярное посещение (каждый день игрок хотя бы раз зашел на сервер) получают приз, который с каждым днем немного увеличиваеться, а на седьмой день регулярных посещений получает уже весомый хороший приз (случайный из таблицы)

Установка рекомендуемая (админ. комплектация)

  • ПК
  • командный блок
  • glasses bridge
  • adventure map interface

Конкурсные требования к программе:

  • выполнение основной функции - 70 баллов
  • меню - 25 баллов
  • лог (в файл) - 20 баллов
  • чистка старых логов - 15 баллов
  • принтинг событий на внешний экран (англ. яз, со скроллингом вверх) - 25 баллов
  • доступ к меню и работе с таблицами на ПК не прерывая работы программы - 10 баллов
  • чистка ненужных файлов пользователей (которых давно нет в игре и прочее) - 15 баллов
  • принтинг событий в чат (русск. яз, сообщения для чата хранить в тхт файлах UTF-8 и подгружать нужную строчку) - 25 баллов
  • подарки к календарным праздникам - 40 баллов
  • удобная структура таблиц айтемов (а лучше в файле хранить списки ИД, и их русское название), чтобы игрок при получении приза видел что-то типа: Привет, Vika18! Вы зашли сегодня (5) день подряд. Вы получаете (15) алмазов. Проверьте инвентарь. И т.п. - 20 баллов
  • принт основных событий на очки админу (логин и выдача призов) - 30 баллов
  • удаленный останов программы через очки - 10 баллов
  • автостарт программ, при старте проверка файлов, устройств и чистка старых логов или огромного размера(>2Mb) файлов. Рекомендую логи писать в отдельную папочку, имена файла лога привязывать ко времени майна. При старте создавать новый логфайл. Но админ должен почитать лог как минимум за 2-3 дня последних. Остальное можно чистить. Надо прикинуть, сколько места под СС ПК выделено, по моему 2 или 4 Mb HDD - 20 баллов
  • игроки в отдельной папке, где файлы имеют имя игрока. Файл хранит последнюю дату посещения, количество текущих каждодневных посещений подряд и возможно еще какую-то инфу. (эти файлы тоже надо чистить, то есть удалять ненужные) - 20 баллов
  • возможно отслеживание лидера по самой длинной серии посещений подряд (по желанию) - 60 баллов
  • резерв
  • резерв

    Победителя определим по количеству набранных баллов. Выполнение первого пункта обязательно!


#2 Оффлайн   fenixrus

fenixrus

    Интересующийся

  • Пользователи
  • Pip
  • 27 сообщений

Отправлено 11 Июль 2014 - 10:00

На OpenComputers или на Computercraft?

#3 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 11 Июль 2014 - 14:03

На OpenComputers или на Computercraft?

OpenComputers не полностью корректно поддерживает все функции аддонов КК.
На мой взгляд, OpenComputers целесообразно использовать для каких-то графических, серверных и др. трудоемких приложений. Хотя графика там пока криво работает по отзывам одного из игроков. При программировании мобильных ПК приоритет остается за роботами из OpenComputers, а не не черепашками из КК, хотя тоже смотря для каких целей . Критической разницы в принципе нет совсем.


#4 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 11 Июль 2014 - 19:41

Я уже придумал как это можно организовать! :-) Но это нужно делать на OC Нет, всеже лучше CC. Ты главное ф-цию дай для получения мирового времени и блок для тестов! Я вот только чет не понял... тебе чем ф-ция random(1,4) не нравится?

#5 Оффлайн   fenixrus

fenixrus

    Интересующийся

  • Пользователи
  • Pip
  • 27 сообщений

Отправлено 11 Июль 2014 - 19:56

OpenComputers не полностью корректно поддерживает все функции аддонов КК.
На мой взгляд, OpenComputers целесообразно использовать для каких-то графических, серверных и др. трудоемких приложений. Хотя графика там пока криво работает по отзывам одного из игроков. При программировании мобильных ПК приоритет остается за роботами из OpenComputers, а не не черепашками из КК, хотя тоже смотря для каких целей . Критической разницы в принципе нет совсем.

я поставил вопрос с подвохом: опенкомп почему-то абсолютно не хочет работать с AMI он не получает ни объект мира, ни объект игрока он может только список игроков вывести, мною проверено у тебя в комнате!

#6 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 11 Июль 2014 - 20:16

Я напишу на кк Уже и алгоритм готов, только на комп написать...

#7 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 11 Июль 2014 - 23:38

я поставил вопрос с подвохом: опенкомп почему-то абсолютно не хочет работать с AMI он не получает ни объект мира, ни объект игрока он может только список игроков вывести, мною проверено у тебя в комнате!

Во-во

Ну и не надо брать бензопилу, чтобы почистить яблоко. Делайте на КК. Этот мод более распространен пока и корректно работает со своими аддонами.


#8 Оффлайн   fenixrus

fenixrus

    Интересующийся

  • Пользователи
  • Pip
  • 27 сообщений

Отправлено 12 Июль 2014 - 08:15

Во-во

Ну и не надо брать бензопилу, чтобы почистить яблоко. Делайте на КК. Этот мод более распространен пока и корректно работает со своими аддонами.

можно и симбиоз попробовать, так сказать бензопилой держать ножик для чистки яблок

#9 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 12 Июль 2014 - 12:26

Требую доступ к дому AlexCC для тестов и написания программы! + думаю будет лучше если у AlexCC будет не biolock а PIM

#10 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 12 Июль 2014 - 13:28

Воу-воу парни! Вы там поменьше шастайте. А то еще натворите неописуемых бед. Там куча опасных блоков. Феникс в гости приходил просто. Это админ. блоки и последствия могут быть катастрофическими:)

Протестируйте в одиночке или вызовом псевдо-функции пустой, где просто принтится команда для ком. блока на экран.
строчка http://www.timeapi.org/pdt/in+11+hours вернет время МСК

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


ami = peripheral.wrap("adventure map interface_N")


function getWorldTime()
    if not http then
        print("Pastebin requires http API!!!")
        print("Set enable API_http in ComputerCraft.cfg")
        error()
    end
    local response = http.get("http://www.timeapi.org/utc/now")  --change args
   
    if response then
        local time_mess = response.readAll()
        response.close()
        return time_mess
        else
        return false
    end
end

function playerLoginDetect()
    while true do
            local e, user_name = os.pullEvent("player_login")
            ....
    end
end

function sayChat(msg)
    commandBlock.setCommand("/say "..msg)
    commandBlock.runCommand()
end

function giveItem(name_player,  [id], count) 
    commandBlock.setCommand(.....)
    commandBlock.runCommand()
end


#11 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 12 Июль 2014 - 22:31

Окай, в египте по вечерам думать буду(18ого лечу)... Вопрос у меня пока лишь как из текста на выводе получить понятнуюю информацию(дата ДДММГГГГ и время в виде 1415 где 14 это часы а 15 это минуты). Ответьте плз. Ну или как выловить из стринга текст с одного до другого символа. Вот кусок кода с переводом времени на понятный язык где я "ниасилил": worldTime=getWorldTime() function cfs(string, first, last) -- функция, возвращающая текст из стринга с одного смвола до другого .... -- тут я незнаю че писать(( end date=toNumber(cfs(worldTime,1,4) .. cfs(worldTime, 5,6) .. cfs(worldTime, 8, 9)) time=toNumber(cfs(worldTime, 12, 13) .. cfs(worldTime, 15, 16)) P. S. Если функция cfs существует, дайте ее код, а если есть в апи компкрафта - пинок в описание апи где я не заметил.

#12 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 13 Июль 2014 - 01:20

Хм... а мне нужно получит только дату в формате ГГГГММДД

#13 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 13 Июль 2014 - 01:35

А... я уже все сам сделала, и Alex я не просил впускать всех туда, а только программера т.е. меня :)Like

#14 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 13 Июль 2014 - 02:25

Вопрос у меня пока лишь как из текста на выводе получить понятнуюю информацию(дата ДДММГГГГ и время в виде 1415 где 14 это часы а 15 это минуты). Ответьте плз.Ну или как выловить из стринга текст с одного до другого символа.

Вот здесь Zer0Galaxy целую энциклопедию для юного сурка написал. Для кого такой титанический труд проведен? На крайний случай юзайте функцию string.sub(s, i, j), где s-строка, i и j индексы символов.

например string.sub("Hello world", 1, 4) -> "Hell"
Потом переведите строковою переменную в число функцией tonumber(e)


#15 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 13 Июль 2014 - 08:23

AlexCC, спс - я прост чтот уже подзабыл так как изучал компкрафт полтора года назад. Сябро, в таком случае у тя прога выдаст призы если изменится дата, так в 11 зашел, получил, в час ночи зашел - еще получил.

#16 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 13 Июль 2014 - 12:19

AlexCC, спс - я прост чтот уже подзабыл так как изучал компкрафт полтора года назад.
Сябро, в таком случае у тя прога выдаст призы если изменится дата, так в 11 зашел, получил, в час ночи зашел - еще получил.

Вообще-то в онлайн играх так и есть! Ведь потом ему ждать еще до следующих 00:00

#17 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 13 Июль 2014 - 12:28

постараюсь сделать все в точности как в играх! только призы могут для каждого дня рандомные быть... конченоже полностью настраиваемая программа! Алекс, напиши таблицу типа: priz={ {id1_1, id1_2, id1_3}, {id2_1, id2_2, id2_3}, {id3_1, id3_2, id3_3} } Где id1...idn это предмет рандомно выбранный для каждого дня. Например: priz{ {"stone","wood",7}, {"tnt","..."}, {...} } для приза за первый день будет рандомно выбран один из "stone", "wood" или 7 для второго соответственно "tnt" или что еще напишеш... дальше я сам

#18 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 13 Июль 2014 - 14:45

У меня почти готова, ща тестить буду...

#19 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 13 Июль 2014 - 15:07

Алекс, напиши таблицу типа: priz={ {id1_1, id1_2, id1_3}, {id2_1, id2_2, id2_3}, {id3_1, id3_2, id3_3} }

таблицу пока сам накидай, камешки, песочек и прочее. Потом создадим табличку айдишек, когда все заработает.

local id = priz[math.random(1,#priz)][math.random(1,3)] - по идее это должно работать. Хотя таблицу можно и одномерную сделать. А для весомых призов хороших другую таблицу. Главное, чтобы программка была понятной, удобной и гибкой. Ну и самое главное - выполняла весь замысел.
local command_give = "/give "..nick.." "..id.." "..current_day_visit - выдача в в первый день одного предмета, во второй день два и т.д. Это если current_day_visit < 7. А на седьмой приз весомый должен быть. Например стак.
Я думаю, это будет работать. Поправьте, если что не так. Так же я пока в замешательстве, как отслеживать смену месяца и года. Если сравнивать только дату, то как быть, если человек зашел 30-го, а потом 1-го числа. А в месяце сколько дней? 30 или 31? Как это отслеживать? Надо подумать.

Так же желательно создать табличку праздников: Новый год, дата создания майнкрафт, дата создания проекта нашего, День рождения Маркуса Перссона, День шахтера и т.д.:) и выдавать в эти дни независимые призыLike Работы непочатый край и программка у нас должна получиться занятной. Текстовые сообщения нужно хранить в текстовых файлах UTF-8, тогда возможен принтинг русского текста в чат через командный блок. Но это я сделаю через фтп в корень компа. Если будет работать команда, призы выдам всей команде, не переживайте. Каждый бросит яблочко в трубу и получит приз. Так что за работу, друзья! Программа должна быть выполнена в срок.


#20 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 13 Июль 2014 - 15:08

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

Прикрепленные файлы

  • Прикрепленный файл  Gifter.txt   3,08К   155 Количество загрузок:


#21 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 13 Июль 2014 - 15:12

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


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

#22 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 13 Июль 2014 - 15:30

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

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


#23 Оффлайн   Syabro

Syabro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 286 сообщений

Отправлено 13 Июль 2014 - 16:56

Я почти написал и понял как решить проблемы с месяцом, предлагаю на 7-ой день с шансом 1/1000 дать квантовый генератор или 1/10000 а я планирую использовать консоль для настройки... дабы не выключать серв и к стате можно выдавать квантовый генератор только если рандомное число от 1 до 1000 будет равно рандомному числу от 1 до 1000 тоесть if random(1,1000) == random(1,1000) then give end

#24 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 13 Июль 2014 - 17:02

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

#25 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 13 Июль 2014 - 19:30

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

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

... а вот фикс с 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...p?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
Это время МСК


#26 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 14 Июль 2014 - 00:50

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

или 1/10000

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


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


#27 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 14 Июль 2014 - 10:35

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

#28 Оффлайн   Alex

Alex

    Орден К.А.

  • Автор темы
  • Администраторы
  • 3 260 сообщений

Отправлено 14 Июль 2014 - 11:16

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


#29 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 14 Июль 2014 - 14:10

Ну ладно, постараюсь.... Ток до 2го не закрывайте конкурс плз... Я в Египте по вечерам в кафешке с WiFi-ем буду скидывать наработки и общаться.. Кстате AMI эт из какого мода? Мне над сделать сборку... P.S. Я не играю на сервере (из-за безбожных лагов на моем железе) и приз мне не нужен...

#30 Оффлайн   MelnikovSM

MelnikovSM

    Интересующийся

  • Пользователи
  • Pip
  • 26 сообщений

Отправлено 14 Июль 2014 - 14:44

Хмм... Я думаю, что добиться решения недочетов с переходом дат 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   5,63К   221 Количество загрузок:






Темы с аналогичным тегами конкурс, программирование

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Яндекс.Метрика