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

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

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

https://www.youtube.com/watch?v=kkH49U7PDRQ

 

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

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

  • ПК
  • командный блок
  • 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 баллов
  • резерв
  • резерв

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

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


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

На OpenComputers или на Computercraft?

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


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

На OpenComputers или на Computercraft?

OpenComputers не полностью корректно поддерживает все функции аддонов КК.

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

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


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

Я уже придумал как это можно организовать! :-)

 

Но это нужно делать на OC

 

Нет, всеже лучше CC.

 

Ты главное ф-цию дай для получения мирового времени и блок для тестов!

 

Я вот только чет не понял... тебе чем ф-ция random(1,4) не нравится?

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


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

OpenComputers не полностью корректно поддерживает все функции аддонов КК.

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

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

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


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

Я напишу на кк

 

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

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


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

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

Во-во

 

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

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


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

Во-во

 

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

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

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


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

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

+ думаю будет лучше если у AlexCC будет не biolock а PIM

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


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

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

 

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

строчка 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

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


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

Окай, в египте по вечерам думать буду(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 существует, дайте ее код, а если есть в апи компкрафта - пинок в описание апи где я не заметил.

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


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

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

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


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

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

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


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

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

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

 

например string.sub("Hello world", 1, 4) -> "Hell"

Потом переведите строковою переменную в число функцией tonumber(e)

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


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

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

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

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


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

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

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

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

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


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

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

Алекс, напиши таблицу типа: 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" или что еще напишеш... дальше я сам

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


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

Алекс, напиши таблицу типа: 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

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

 

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

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


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

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

Gifter.txt

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


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

Так же я пока в замешательстве, как отслеживать смену месяца и года. Если сравнивать только дату, то как быть, если человек зашел 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

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


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

×