vah
Игрок
Доброго времени суток , юзер . сегодня поведаю о интересностях в моде ModMK (Собственная разработка hilarious). буду вещать по факту и не о дынях и кирпичах , а о тех предметах которые непосредственно предполагают использования мода OpenComputers и Lua в качестве способа в взаимодействия с ним , а так же приложу код для компонентов мода.
И так начнем , первым на очереди будет "Счетчик энергии" , как нам говорит вики , он служит для изменения напряжения EU которое через него проходит (выход через лицевую сторону) , а так же для автоматической обработке показаний , что очень полезно например для владельцев магазинов или градостроителей , благодаря данному блоку появляется возможность тарификации электричества , соответственно оправдывая затраты на производство этой самой энергии , в дальнейшем мы поговорим от том как это можно реализовать , но в данный момент разберем API данного блока и способ его подключения , а так же использования , приступим.
Подключение: Так же как и все остальные блоки из этого мода ,подключается блок непосредственно проводом к ПК или же устанавливается рядом с ним , далее мы не будет заострять на это внимание.
предлагаю набросать небольшой скрипт используя выше описанное API , итак разберем такую ситуацию :вы градостроитель и предоставляете вашим горожанам электроэнергию , но чтобы расходы на энергию не взлетали , вы решили тарифицировать энергию с последующей её оплатой горожанами , благодаря такому решению вы покроете расходы на добычу энергии и заработаете копеечку(или не копеечку) для расширения города , напомню что приобретение статуса предполагает определённую плату за него , что вам понадобится? ну во-первых это компьютер который соответствует вашим параметрам , по факту подойдет любой компьютер который способен включится и исполнять скрипты, а также питание для него . Во-вторых это сам счетчик энергии . В-третьих это красная плата , для того чтобы ограничивать доступ к электро энергии неплательщика.
Следующим будет считыватель карт по истине интересная вещь , она помогает манипулировать валютой , а так же проходить идентификацию и записывать данные на карту , карт существую 2 вида это магнитные карты и смарт-карты . именно с помощью смарт-карт мы будем производить нехитрые манипуляции с деньгами . для чего это может пригодится? да для чего угодно! не хотите платить деньги за установку табличек ChestShop? не беда используйте карты и ваш самописный магазин.
Хотите получать платежи или пожертвования в валюте? считыватель карт то что вам нужно! ничего сверхъестественного мы делать не будем лишь набросаем небольшой платежный скрипт , для полноценного использования его нужно будет подогнать под себя.
На этом всё , спасибо за внимание!
Использованные источники: w.hil.su .
Скриншот счетчика:
И так начнем , первым на очереди будет "Счетчик энергии" , как нам говорит вики , он служит для изменения напряжения EU которое через него проходит (выход через лицевую сторону) , а так же для автоматической обработке показаний , что очень полезно например для владельцев магазинов или градостроителей , благодаря данному блоку появляется возможность тарификации электричества , соответственно оправдывая затраты на производство этой самой энергии , в дальнейшем мы поговорим от том как это можно реализовать , но в данный момент разберем API данного блока и способ его подключения , а так же использования , приступим.
Подключение: Так же как и все остальные блоки из этого мода ,подключается блок непосредственно проводом к ПК или же устанавливается рядом с ним , далее мы не будет заострять на это внимание.
Код:
Название компонента: eu_counter
value(): number - Возвращает количество энергии, прошедшей через счетчик
current(): number - Возвращает ток, текущий через счетчик (в единицах энергии в секунду)
voltage(): number - Возвращает установленное напряжение
voltage(x: number) - Устанавливает новое напряжение
предлагаю набросать небольшой скрипт используя выше описанное API , итак разберем такую ситуацию :вы градостроитель и предоставляете вашим горожанам электроэнергию , но чтобы расходы на энергию не взлетали , вы решили тарифицировать энергию с последующей её оплатой горожанами , благодаря такому решению вы покроете расходы на добычу энергии и заработаете копеечку(или не копеечку) для расширения города , напомню что приобретение статуса предполагает определённую плату за него , что вам понадобится? ну во-первых это компьютер который соответствует вашим параметрам , по факту подойдет любой компьютер который способен включится и исполнять скрипты, а также питание для него . Во-вторых это сам счетчик энергии . В-третьих это красная плата , для того чтобы ограничивать доступ к электро энергии неплательщика.
Код:
----[[ Привязываем API ]]----
local component = require('component')
local sides = require('sides')
local event = require('event')
local gpu = component.gpu
local redstone = component.redstone
----[[ Настройки ]]----
local blocked_amount = 1024 -- число на счетчике при котором будет блокироваться подача энергии
local default_volt = 32 -- напряжение подаваемое на выход допустимые значения: 32,128,512,2048,8096
gpu.setResolution(24,12)
----[[ Подготовка к работе ]]----
component.proxy(component.list('eu_counter')()).voltage(default_volt)
redstone.setOutput(sides.bottom,0)
----[[ Дополнительные функции ]]----
local function screen(str)
gpu.set(1,6,tostring(str))
end
----[[ Главный цикл ]]----
while true do
local e = event.pull(0)
if e ~= nil and e[1] == 'key_up' then -- при нажатии любой клавиши скрипт закрывается , после настройки уберите клавиатуру
break
end
local volt = component.proxy(component.list('eu_counter')()).value()
if volt >= blocked_amount - (default_volt * 4) then
redstone.setOutput(sides.bottom,15)
component.proxy(component.list('eu_counter')()).voltage(0)
screen('Оплатите электроэнергию!')
else
screen(volt)
end
end
Следующим будет считыватель карт по истине интересная вещь , она помогает манипулировать валютой , а так же проходить идентификацию и записывать данные на карту , карт существую 2 вида это магнитные карты и смарт-карты . именно с помощью смарт-карт мы будем производить нехитрые манипуляции с деньгами . для чего это может пригодится? да для чего угодно! не хотите платить деньги за установку табличек ChestShop? не беда используйте карты и ваш самописный магазин.
Хотите получать платежи или пожертвования в валюте? считыватель карт то что вам нужно! ничего сверхъестественного мы делать не будем лишь набросаем небольшой платежный скрипт , для полноценного использования его нужно будет подогнать под себя.
Код:
cancel() - Отменяет все запланированные операции
read() - Запрашивает считывание карты (индикатор становится зеленым). Функция возвращается немедленно, по завершению операции будет вызвано событие.
write(x: binary) - Запрашивает запись карты (индикатор становится оранжевым). Функция возвращается немедленно, максимальный размер данных - 128 байт.
pay(target: string, amount: number) - Запрашивает платеж (индикатор становится розовым). Только для смарт-карт. Деньги списываются с основного баланса пользователя (/money) и начисляются на баланс того, чей ник указан первым аргументом. По результату операции вызывается событие.
auth() - Запрашивает аутентификацию пользователя (индикатор становится голубым). Только для смарт-карт. По клику вызывается событие с ником кликнувшего
Код:
local component = require('component')
local event = require('event')
local card = component.card_reader
local function pay(user,amount,timeout)
local result = {}
card.pay(user,amount) -- запрашиваем подтверждение оплаты
for i=1,3 do -- 3 попытки получить подтверждение
local evnt = {event.pull(math.ceil(tonumber(timeout)/3),'card_event')} -- получаем событие card_event
if evnt ~= nil and evnt[3] == 'payment_result' then -- узнаем результат , прошли ли оплата
result = {status=evnt[4],code=evnt[5],amount=evnt[6],user=evnt[7],target=evnt[9]} -- передаем данные в массив
break -- принудительно прерываем цикл
end
end
if result.code == nil then -- если переменная ничему не равна значит событие не было получено
card.cancel() -- закрываем транзакцию
result.code = 'timeout' -- даем понять что транзакция не прошла из-за таймаута
end
return result -- возвращаем массив с данными
end
local payment = pay('vah',10,120) -- запрашиваем оплату
if payment.code == 'timeout' then -- проверяем статус оплаты и выводим на экран
print('Время транзакции вышло!')
elseif payment.code == 'ok' then
print('Транзакция прошла успешно!')
elseif payment.code == 'rejected' then
print('Транзакция отменена пользователем!')
elseif payment.code == 'not_enough_money' then
print('Недостаточно средств!')
end
На этом всё , спасибо за внимание!
Использованные источники: w.hil.su .
Скриншот счетчика:

Последнее редактирование модератором: