Advertisement
Asioron

Helper

Jan 11th, 2016
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.56 KB | None | 0 0
  1. ----------переменные--------------
  2. local event = require('event')
  3. local r = require('robot')
  4. local com = require('component')
  5. local computer = require('computer')
  6. local fs = require("filesystem")
  7. chat = require("component").chat
  8. radar = require("component").radar
  9. incontrol=require("component").inventory_controller
  10. generator = require("component").generator
  11. tractor = require("component").tractor_beam
  12. time1=0; timer=0; Admin=false;
  13. Pam_name={}; Pam_time={}; Pam_data={};
  14. -----------процедуры----------------
  15. function ReadStr(a)-- обработка 1 строки знаки препинания и т.д (для справок)
  16.   i=1; vr='';
  17.   repeat
  18.     if string.sub(a,i,i)=='.' then return vr;
  19.     elseif string.sub(a,i,i)=='@' then vr=vr..tostring(name);
  20.     elseif string.sub(a,i,i)=='*' then vr=vr..'@';
  21.     elseif string.sub(a,i,i)=='^' then vr=vr..'.'; 
  22.     else
  23.       vr=vr..string.sub(a,i,i)
  24.     end
  25.     i=i+1;  
  26.   until string.sub(a,i,i)=='#'
  27. end
  28.  
  29. function Open_File(File_Name)--Открывает файлы справки и строчит их в чат
  30.   f=io.open(File_Name,'r')
  31.   str=f:read()
  32.   while string.sub(str,1,1)~='#' do
  33.     ReadStr(str)
  34.     str=f:read()
  35.     chat.say(vr)
  36.   end
  37.   f:close()
  38. end
  39.  
  40. function Mail(vr1)--если обращение типа "Справка пошли бухать" пишет сообщения в файл (а мне потом все это читать)
  41.   f=io.open('Mail.txt','a')
  42.   vr=''; vr=vr1; vr1='';
  43.   for i=2,#sms_m do
  44.     vr=vr..' '..tostring(sms_m[i])
  45.   end
  46.   f:write(Date..' '..name..'->'..vr..' \n')
  47.   f:flush()
  48.   f:close()
  49. end
  50.  
  51. function Vnos_v_pam()--сканирование файла с никами игроков и внос их в память (3 шт. крайне не выгодно, но иначе мертвых душ много будет)
  52.   f=io.open('Players.txt','r')--Asior 10 07.01.2016 #
  53.   a1=f:read()
  54.   while string.sub(a1,1,1)~='#' do
  55.     s=0; i=1; vr='';
  56.     repeat
  57.       if string.sub(a1,i,i)==' ' then
  58.         s=s+1
  59.         if s==1 then Pam_name[#Pam_name+1]=vr vr=''
  60.         elseif s==2 then Pam_time[#Pam_time+1]=tonumber(vr) vr=''
  61.         elseif s==3 then Pam_data[#Pam_data+1]=vr vr='' s=0
  62.         end
  63.       else
  64.         vr=vr..string.sub(a1,i,i)
  65.       end
  66.       i=i+1;  
  67.     until string.sub(a1,i,i)=='*'
  68.     a1=f:read()
  69.   end
  70.   f:close()
  71. end
  72.  
  73. function File_Rec()--Тута хранятся все игроки, перезапись при появлении новичка или при рестарте
  74.   f=io.open('Players.txt','w')
  75.   --print(#Pam_name)
  76.   for i=1,#Pam_name do
  77.     vr=''
  78.     vr=tostring(Pam_name[i])..' '..tostring(Pam_time[i])..' '..tostring(Pam_data[i])
  79.     f:write(vr..' *\n')
  80.   end
  81.   f:write('#\n')
  82.   f:flush()
  83.   f:close()
  84.   vr=''
  85. end
  86.  
  87. function Hell_Rand(n)--рандомные фразы считывает из файла
  88.   f=io.open('HelpSL.txt','r')
  89.   for i=1,n-1 do
  90.     a=f:read()
  91.   end
  92.   a=f:read()
  93.   ReadStr(a)
  94.   chat.say(vr)
  95.   f:close()
  96. end
  97.  
  98. function Upravlenie()--онлайн управление wifi для перегона роба, 2-выкинуть все,0-вернуться к программе
  99.   port=95; slotov=32;
  100.   com.modem.open(port)
  101.   while true do
  102.     _, _, _, _, _, sms = event.pull("modem_message")
  103.     if sms == 'w' then r.forward()
  104.     elseif sms == 's' then r.back()
  105.     elseif sms == 'a' then r.turnLeft()
  106.     elseif sms == 'd' then r.turnRight()
  107.     elseif sms == 'e' then r.up()
  108.     elseif sms == 'q' then r.down()
  109.     elseif sms == '2' then
  110.       for i=1,slotov,1 do
  111.         r.select(i)
  112.         r.drop(64)
  113.         if i==slotov then
  114.           r.select(1)
  115.         end
  116.       end
  117.     elseif sms == '0' then break
  118.     end
  119.   end
  120. end
  121.  
  122. function Status()--выводит статус системы в чат
  123.   chat.say('Статус системы: online')
  124.   chat.say('Время последнего запуска системы: '..tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod)))
  125.   chat.say('Перезагрузка через: '..tostring(120-timer)..','..tostring(time1)..' минут')
  126.   chat.say('Зарегистрировано пользователей: '..#Pam_name)
  127.   chat.say('Емкость батареи: '..computer.energy()..'/'..computer.maxEnergy())
  128.   chat.say('Остаток памяти: '..tostring(computer.freeMemory()/1024)..' Kb')
  129.   chat.say('Информация по предметам: ') Inventoru_scan()
  130.   for i=1,#ignore do
  131.     chat.say('Слот №'..i..' '..tostring(ignore[i]))
  132.   end
  133.   ignore={}
  134. end
  135.  
  136. function Inventoru_scan()--сканирует инвентарь сначала на мусор, потом сортирует, потом записывает в таблицу
  137.   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'}
  138.   for i=1,32 do
  139.     r.select(i)
  140.     if incontrol.getStackInInternalSlot()~=nil then
  141.       for i1=1,#ignore do
  142.         if incontrol.getStackInInternalSlot().name==ignore[i1] then
  143.           r.drop(64)
  144.           chat.say('Интересно, и зачем мне '..ignore[i1])
  145.           break
  146.         end
  147.       end
  148.     end
  149.   end
  150.   for i=1,32 do
  151.     r.select(i)
  152.     if r.count()==0 then
  153.       for i1=i+1,32 do
  154.         if r.count(i1)~=0 then
  155.           r.select(i1)
  156.           r.transferTo(i)
  157.           break;
  158.         end
  159.       end
  160.     end
  161.   end
  162.   ignore={}
  163.   for i=1,32 do
  164.     if incontrol.getStackInInternalSlot(i)~=nil then
  165.       ignore[#ignore+1]=tostring(incontrol.getStackInInternalSlot(i).name..' в количестве '..incontrol.getStackInInternalSlot(i).size)
  166.     end
  167.   end
  168.   r.select(1)
  169. end
  170.  
  171. function Zapravka()--пихает в топку все подряд, авось что-нибудь да сгорит
  172.   for i=1,32 do
  173.     if r.count(i)~=0 then
  174.       r.select(i)
  175.       if generator.insert(64)==true then
  176.         break;
  177.       end
  178.     end
  179.   end
  180.   r.select(1)
  181. end
  182.  
  183. function zap(i)
  184.         Pam_name[#Pam_name+1]=scan[i].name
  185.         name=scan[i].name
  186.         Pam_time[#Pam_time+1]=1
  187.         Pam_data[#Pam_data+1]=Date
  188.         Open_File('Help0.txt')--не забыть раскоментировать!!!
  189.         File_Rec()
  190.         Mail(' добавлен в список')
  191. end
  192. --------основной код---------------
  193. chat.say('Helper start...')
  194. Vnos_v_pam()
  195. Hell_Rand(1)
  196. stroki=tonumber(vr)
  197. chat.setDistance(15)
  198. chat.setName('Helper')
  199. Inventoru_scan()
  200. Zapravka()
  201. ignore={}
  202. lastmod = tonumber(string.sub(fs.lastModified('Players.txt'), 1, -4))
  203. Date = os.date('%d', lastmod)..':'..os.date('%m', lastmod)..':'..os.date('%Y', lastmod)
  204. sms_m={}
  205. sms_m[1]='1'
  206. sms_m[2]=tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod)..' start system')
  207. name='Consol info'
  208. Mail('')
  209. chat.say('Статус системы: online')
  210. print('Салют админам! Задаешься вопросом, что это за фигню тут поставили? Ответ прост, эта прога должна помочь новичкам быстро освоиться в игре и не задавать кучу вопросов. Просьба, если вылетит программа, сделай скрин ошибки, сообщи автору, и перезагрузи робота. Ах да, автора зовут Asior.')
  211. while timer~=120 do
  212.   name=''; sms=''; vr=''; i=0; ii=0; Proverka=0;
  213.   sms_m={}
  214.   _,_,name,sms=event.pull(5,'chat_message')
  215.   if sms~=nil then
  216.     sms=string.upper(sms)..'.'
  217.         while i~=string.len(sms) and string.sub(sms,i,i)~='.' do
  218.             i=i+1;
  219.             if string.sub(sms,i,i)==' ' then sms_m[#sms_m+1]=vr; vr=''
  220.             elseif string.sub(sms,i,i)=='.' then sms_m[#sms_m+1]=vr; vr=''
  221.             else
  222.                 vr=vr..string.sub(sms,i,i)
  223.             end
  224.         end
  225.     if sms_m[1]=='СПРАВКА' or sms_m[1]=='Справка' or sms_m[1]=='справка' or sms_m[1]=='HELPER' or sms_m[1]=='HELP'  then
  226.       if sms_m[2]==nil then
  227.         Open_File('Menu.txt')
  228.       else
  229.             if sms_m[2]=='новичкам' then Open_File('Help1.txt')
  230.         elseif sms_m[2]=='деньги' then Open_File('Help2.txt')
  231.             elseif sms_m[2]=='профессии' then Open_File('Help3.txt')
  232.             elseif sms_m[2]=='НПС' or sms_m[2]=='нпс' then Open_File('Help4.txt')
  233.         -------------дополнительные опции------------------------
  234.             elseif sms_m[2]=='привет' then chat.say(name..', и тебе привет. Как оно, нормально?')
  235.             elseif sms_m[2]=='ага' or sms_m[2]=='да' or sms_m[2]=='нет' or sms_m[2]=='нормально' or sms_m[2]=='хорошо' then chat.say(name..', и чего ты этим хочешь сказать? Развернутей ответ, развернутей')
  236.             elseif sms_m[2]=='топливо' then sms_m[2]='кинул топливо'
  237.                 Mail('')
  238.                 if tractor.suck()==false then
  239.                     chat.say('Фокусировка луча совсем плохая, ближе кидай')
  240.                 else
  241.                     chat.say('Вот спасибо! Посмотрим чего там мне дали, надеюсь не булыжник')
  242.                     Inventoru_scan()
  243.                     ignore={}
  244.                     Zapravka()
  245.                 end
  246.         ---------------------Админ опции----------------------------
  247.             elseif sms_m[2]=='стоп' and name=='Asior' then chat.say('Слушаюсь!') File_Rec() os.exit()
  248.             elseif sms_m[2]=='обновление' and name=='Asior' then chat.say('Загружаю обновление из интернета.')
  249.                 File_Rec()
  250.                 Mail(' ОБНОВЛЕНИЕ!!!')
  251.                 pcall(loadfile('../loader.lua'))-- Записать лаунчер
  252.             elseif sms_m[2]=='синхронизация' and name=='Asior' then chat.say('Уверен? Тут чет много передавать')
  253.                 chat.say('Ну лови, файл Mail, порт 40, запуск через 15 секунд')
  254.                 os.sleep(15)
  255.                 pcall(loadfile('../blu.lua -send Mail.txt 40'))
  256.                 f=io.open('Mail.txt','w') f:close()
  257.                 chat.say('Файл передан, отправка второго файла Players, запуск через 20 секунд')
  258.                 os.sleep(20)
  259.                 pcall(loadfile('../blu.lua -send Players.txt 40'))
  260.             elseif sms_m[2]=='ремонт' and name=='Asior' then chat.say('Ура! Наконец-то ТО!')
  261.                 Upravlenie()
  262.             elseif sms_m[2]=='статус' and name=='Asior' then Status()
  263.             else
  264.                 Mail('')
  265.             end
  266.       end
  267.     end
  268.   end
  269.   scan=radar.getPlayers(10)
  270.   if scan~=nil then
  271.     for i=1,scan.n do
  272.           vr=0; pr=false;
  273.           for i1=1,#Pam_name do
  274.               if scan[i].name==Pam_name[i1] then--если имя в памяти
  275.                   Pr=true
  276.                     if Pam_time[i1]==0 then--если время приветствия истекло
  277.                   name=scan[i].name
  278.                         Hell_Rand(math.random(stroki))--рандомно вызвать приветствие
  279.                         Pam_time[i1]=10
  280.                         break;
  281.                     else
  282.                       break;
  283.                     end
  284.               else
  285.                   vr=vr+1
  286.                 end
  287.                 if (vr==#Pam_name) and (pr==false) then
  288.                   zap(i)
  289.                 end
  290.             end
  291.         end
  292.     end
  293.   time1=time1+5
  294.   if time1==60 then
  295.     timer=timer+1
  296.       time1=0;
  297.     if (timer==15) or (timer==30) or (timer==60) or (timer==90) then
  298.       Zapravka()
  299.         chat.setName('Helper')
  300.     end
  301.     for i=1,#Pam_time do--для счетчика между приветствиями
  302.       if Pam_time[i]>0 then
  303.         Pam_time[i]=Pam_time[i]-1
  304.       end
  305.     end
  306.   end
  307. end
  308.  
  309. chat.say('Перезагрузка, я быстренько, не скучаем')
  310. File_Rec()
  311. lastmod = tonumber(string.sub(fs.lastModified('Players.txt'), 1, -4))
  312. Date = tostring(os.date('%H', lastmod)..':'..os.date('%M', lastmod))
  313. sms_m[1]='1'
  314. sms_m[2]=' standart reboot'
  315. name='Consol info'
  316. Mail('')
  317. computer.shutdown(true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement