Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------переменные--------------
- local event = require('event')
- local r = require('robot')
- local com = require('component')
- local computer = require('computer')
- local fs = require("filesystem")
- chat = require("component").chat
- radar = require("component").radar
- incontrol=require("component").inventory_controller
- generator = require("component").generator
- tractor = require("component").tractor_beam
- time1=0; timer=0; Admin=false;
- Pam_name={}; Pam_time={}; Pam_data={};
- -----------процедуры----------------
- function ReadStr(a)-- обработка 1 строки знаки препинания и т.д (для справок)
- i=1; vr='';
- repeat
- if string.sub(a,i,i)=='.' then return vr;
- elseif string.sub(a,i,i)=='@' then vr=vr..tostring(name);
- elseif string.sub(a,i,i)=='*' then vr=vr..'@';
- elseif string.sub(a,i,i)=='^' then vr=vr..'.';
- else
- vr=vr..string.sub(a,i,i)
- end
- i=i+1;
- until string.sub(a,i,i)=='#'
- end
- function Open_File(File_Name)--Открывает файлы справки и строчит их в чат
- f=io.open(File_Name,'r')
- str=f:read()
- while string.sub(str,1,1)~='#' do
- ReadStr(str)
- str=f:read()
- chat.say(vr)
- end
- f:close()
- end
- function Mail(vr1)--если обращение типа "Справка пошли бухать" пишет сообщения в файл (а мне потом все это читать)
- f=io.open('Mail.txt','a')
- vr=''; vr=vr1; vr1='';
- for i=2,#sms_m do
- vr=vr..' '..tostring(sms_m[i])
- end
- f:write(Date..' '..name..'->'..vr..' \n')
- f:flush()
- f:close()
- end
- function Vnos_v_pam()--сканирование файла с никами игроков и внос их в память (3 шт. крайне не выгодно, но иначе мертвых душ много будет)
- f=io.open('Players.txt','r')--Asior 10 07.01.2016 #
- a1=f:read()
- while string.sub(a1,1,1)~='#' do
- s=0; i=1; vr='';
- repeat
- if string.sub(a1,i,i)==' ' then
- s=s+1
- if s==1 then Pam_name[#Pam_name+1]=vr vr=''
- elseif s==2 then Pam_time[#Pam_time+1]=tonumber(vr) vr=''
- elseif s==3 then Pam_data[#Pam_data+1]=vr vr='' s=0
- end
- else
- vr=vr..string.sub(a1,i,i)
- end
- i=i+1;
- until string.sub(a1,i,i)=='*'
- a1=f:read()
- end
- f:close()
- end
- function File_Rec()--Тута хранятся все игроки, перезапись при появлении новичка или при рестарте
- f=io.open('Players.txt','w')
- --print(#Pam_name)
- for i=1,#Pam_name do
- vr=''
- vr=tostring(Pam_name[i])..' '..tostring(Pam_time[i])..' '..tostring(Pam_data[i])
- f:write(vr..' *\n')
- end
- f:write('#\n')
- f:flush()
- f:close()
- vr=''
- end
- function Hell_Rand(n)--рандомные фразы считывает из файла
- f=io.open('HelpSL.txt','r')
- for i=1,n-1 do
- a=f:read()
- end
- a=f:read()
- ReadStr(a)
- chat.say(vr)
- f:close()
- end
- function Upravlenie()--онлайн управление wifi для перегона роба, 2-выкинуть все,0-вернуться к программе
- port=95; slotov=32;
- com.modem.open(port)
- while true do
- _, _, _, _, _, sms = event.pull("modem_message")
- if sms == 'w' then r.forward()
- elseif sms == 's' then r.back()
- elseif sms == 'a' then r.turnLeft()
- elseif sms == 'd' then r.turnRight()
- elseif sms == 'e' then r.up()
- elseif sms == 'q' then r.down()
- elseif sms == '2' then
- for i=1,slotov,1 do
- r.select(i)
- r.drop(64)
- if i==slotov then
- r.select(1)
- end
- end
- elseif sms == '0' then break
- end
- end
- end
- function Status()--выводит статус системы в чат
- chat.say('Статус системы: online')
- chat.say('Время последнего запуска системы: '..tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod)))
- chat.say('Перезагрузка через: '..tostring(120-timer)..','..tostring(time1)..' минут')
- chat.say('Зарегистрировано пользователей: '..#Pam_name)
- chat.say('Емкость батареи: '..computer.energy()..'/'..computer.maxEnergy())
- chat.say('Остаток памяти: '..tostring(computer.freeMemory()/1024)..' Kb')
- chat.say('Информация по предметам: ') Inventoru_scan()
- for i=1,#ignore do
- chat.say('Слот №'..i..' '..tostring(ignore[i]))
- end
- ignore={}
- end
- function Inventoru_scan()--сканирует инвентарь сначала на мусор, потом сортирует, потом записывает в таблицу
- ignore={'minecraft:dirt','minecraft:cobblestone','minecraft:gravel','minecraft:stone','minecraft:sand','minecraft:stonebrick','minecraft:brick_block','minecraft:glass','minecraft:netherrack','minecraft:soul_sand','minecraft:nether_brick','minecraft:end_stone'}
- for i=1,32 do
- r.select(i)
- if incontrol.getStackInInternalSlot()~=nil then
- for i1=1,#ignore do
- if incontrol.getStackInInternalSlot().name==ignore[i1] then
- r.drop(64)
- chat.say('Интересно, и зачем мне '..ignore[i1])
- break
- end
- end
- end
- end
- for i=1,32 do
- r.select(i)
- if r.count()==0 then
- for i1=i+1,32 do
- if r.count(i1)~=0 then
- r.select(i1)
- r.transferTo(i)
- break;
- end
- end
- end
- end
- ignore={}
- for i=1,32 do
- if incontrol.getStackInInternalSlot(i)~=nil then
- ignore[#ignore+1]=tostring(incontrol.getStackInInternalSlot(i).name..' в количестве '..incontrol.getStackInInternalSlot(i).size)
- end
- end
- r.select(1)
- end
- function Zapravka()--пихает в топку все подряд, авось что-нибудь да сгорит
- for i=1,32 do
- if r.count(i)~=0 then
- r.select(i)
- if generator.insert(64)==true then
- break;
- end
- end
- end
- r.select(1)
- end
- function zap(i)
- Pam_name[#Pam_name+1]=scan[i].name
- name=scan[i].name
- Pam_time[#Pam_time+1]=1
- Pam_data[#Pam_data+1]=Date
- Open_File('Help0.txt')--не забыть раскоментировать!!!
- File_Rec()
- Mail(' добавлен в список')
- end
- --------основной код---------------
- chat.say('Helper start...')
- Vnos_v_pam()
- Hell_Rand(1)
- stroki=tonumber(vr)
- chat.setDistance(15)
- chat.setName('Helper')
- Inventoru_scan()
- Zapravka()
- ignore={}
- lastmod = tonumber(string.sub(fs.lastModified('Players.txt'), 1, -4))
- Date = os.date('%d', lastmod)..':'..os.date('%m', lastmod)..':'..os.date('%Y', lastmod)
- sms_m={}
- sms_m[1]='1'
- sms_m[2]=tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod)..' start system')
- name='Consol info'
- Mail('')
- chat.say('Статус системы: online')
- print('Салют админам! Задаешься вопросом, что это за фигню тут поставили? Ответ прост, эта прога должна помочь новичкам быстро освоиться в игре и не задавать кучу вопросов. Просьба, если вылетит программа, сделай скрин ошибки, сообщи автору, и перезагрузи робота. Ах да, автора зовут Asior.')
- while timer~=120 do
- name=''; sms=''; vr=''; i=0; ii=0; Proverka=0;
- sms_m={}
- _,_,name,sms=event.pull(5,'chat_message')
- if sms~=nil then
- sms=string.upper(sms)..'.'
- while i~=string.len(sms) and string.sub(sms,i,i)~='.' do
- i=i+1;
- if string.sub(sms,i,i)==' ' then sms_m[#sms_m+1]=vr; vr=''
- elseif string.sub(sms,i,i)=='.' then sms_m[#sms_m+1]=vr; vr=''
- else
- vr=vr..string.sub(sms,i,i)
- end
- end
- if sms_m[1]=='СПРАВКА' or sms_m[1]=='Справка' or sms_m[1]=='справка' or sms_m[1]=='HELPER' or sms_m[1]=='HELP' then
- if sms_m[2]==nil then
- Open_File('Menu.txt')
- else
- if sms_m[2]=='новичкам' then Open_File('Help1.txt')
- elseif sms_m[2]=='деньги' then Open_File('Help2.txt')
- elseif sms_m[2]=='профессии' then Open_File('Help3.txt')
- elseif sms_m[2]=='НПС' or sms_m[2]=='нпс' then Open_File('Help4.txt')
- -------------дополнительные опции------------------------
- elseif sms_m[2]=='привет' then chat.say(name..', и тебе привет. Как оно, нормально?')
- elseif sms_m[2]=='ага' or sms_m[2]=='да' or sms_m[2]=='нет' or sms_m[2]=='нормально' or sms_m[2]=='хорошо' then chat.say(name..', и чего ты этим хочешь сказать? Развернутей ответ, развернутей')
- elseif sms_m[2]=='топливо' then sms_m[2]='кинул топливо'
- Mail('')
- if tractor.suck()==false then
- chat.say('Фокусировка луча совсем плохая, ближе кидай')
- else
- chat.say('Вот спасибо! Посмотрим чего там мне дали, надеюсь не булыжник')
- Inventoru_scan()
- ignore={}
- Zapravka()
- end
- ---------------------Админ опции----------------------------
- elseif sms_m[2]=='стоп' and name=='Asior' then chat.say('Слушаюсь!') File_Rec() os.exit()
- elseif sms_m[2]=='обновление' and name=='Asior' then chat.say('Загружаю обновление из интернета.')
- File_Rec()
- Mail(' ОБНОВЛЕНИЕ!!!')
- pcall(loadfile('../loader.lua'))-- Записать лаунчер
- elseif sms_m[2]=='синхронизация' and name=='Asior' then chat.say('Уверен? Тут чет много передавать')
- chat.say('Ну лови, файл Mail, порт 40, запуск через 15 секунд')
- os.sleep(15)
- pcall(loadfile('../blu.lua -send Mail.txt 40'))
- f=io.open('Mail.txt','w') f:close()
- chat.say('Файл передан, отправка второго файла Players, запуск через 20 секунд')
- os.sleep(20)
- pcall(loadfile('../blu.lua -send Players.txt 40'))
- elseif sms_m[2]=='ремонт' and name=='Asior' then chat.say('Ура! Наконец-то ТО!')
- Upravlenie()
- elseif sms_m[2]=='статус' and name=='Asior' then Status()
- else
- Mail('')
- end
- end
- end
- end
- scan=radar.getPlayers(10)
- if scan~=nil then
- for i=1,scan.n do
- vr=0; pr=false;
- for i1=1,#Pam_name do
- if scan[i].name==Pam_name[i1] then--если имя в памяти
- Pr=true
- if Pam_time[i1]==0 then--если время приветствия истекло
- name=scan[i].name
- Hell_Rand(math.random(stroki))--рандомно вызвать приветствие
- Pam_time[i1]=10
- break;
- else
- break;
- end
- else
- vr=vr+1
- end
- if (vr==#Pam_name) and (pr==false) then
- zap(i)
- end
- end
- end
- end
- time1=time1+5
- if time1==60 then
- timer=timer+1
- time1=0;
- if (timer==15) or (timer==30) or (timer==60) or (timer==90) then
- Zapravka()
- chat.setName('Helper')
- end
- for i=1,#Pam_time do--для счетчика между приветствиями
- if Pam_time[i]>0 then
- Pam_time[i]=Pam_time[i]-1
- end
- end
- end
- end
- chat.say('Перезагрузка, я быстренько, не скучаем')
- File_Rec()
- lastmod = tonumber(string.sub(fs.lastModified('Players.txt'), 1, -4))
- Date = tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod))
- sms_m[1]='1'
- sms_m[2]=' standart reboot'
- name='Consol info'
- Mail('')
- computer.shutdown(true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement