whiskas 144 Опубликовано: 23 октября, 2017 (изменено) -- Большая часть кода сделана игроком N1nt3nd0 и была заимствована мной Программа предназначена для варпов что б игроки оставляли свои отзыви та предложения. Некоторые из отзывов показуються на главном меню. Администрующий игрок может удалять отзывы если какието плохие люди писали маты или чтот такое. В программе стоит счечик что офает залогинивнего человека с програмки если он просто зашел в прогу и ушел . https://pastebin.com/zSz79XVh Скрины Выгляд самой программы После того как залогинился игрок что администрует эт прогу (у него дополнительная кнопка) Как видно верху идет щет и игрока офакт с проги через 30 сек если он нечего не жал Админ панель Тут можна удалять коментарии а также видить ник того кто написал Панелька простого игрока когда залогинился Изменено 23 октября, 2017 пользователем whiskas 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 23 октября, 2017 Выглядит вроде прикольно. Но что за варпы - непонятно. P.S. Грамматика хромает на обе ноги =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 23 октября, 2017 Но что за варпы - непонятно. ну тут все просто. Отзывы - это тренд. В чем смысл: на сервере пишешь /warp , далее летишь сквозь гиперпространство, прилетаешь, видишь, упс, а там комп стоит, который просит оставить отзыв, и можно написать свой отзыв, свои ощущения от варпа, переживания, как все прошло и т.д. Сейчас писать где-то комменты, ставить лойсы, дизы, оставлять отзывы - это просто необходимо. Без этого сейчас в современном мире никак. Купил трусы в интернет магазине - оставь отзыв, сделай видеогайд, распаковку 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 24 октября, 2017 Несколько замечаний или даже предложений: У тебя координаты и размеры каждой кнопки фактически прописаны в виде констант дважды. Первый раз - для прорисовки (функции drawMenu), второй раз - для обработки события touch. А что это значит? Это значит, что если ты или кто нибудь другой захочет добавить или переместить кнопку, ему это придется сделать в двух местах программы, что существенно увеличивает вероятность ошибки. Я бы на твоем месте все кнопки хранил в одной таблице. Как то так button={ Add ={x=27,y=24,width=15,height=3,col=color.general,txt="Добавить",align=3}, Cansel={x=47,y=24,width=15,height=3,col=color.general,txt="Отменить",align=3}, -- и так далее } тогда вызов функции прорисовки кнопки можно будет оформить так function drawBox(but) color(but.col) g.fill(but.x,but.y,1,but.height,'│') g.fill(but.x+but.width-1,but.y,1,but.height,'│') g.set(but.x,but.y,'┌'..rep('─',but.width-2)..'┐') g.set(but.x,but.y+but.height-1,'└'..rep('─',but.width-2)..'┘') if but.txt then g.set(but.x+but.align,but.y+1,but.txt) end end drawBox(button.Add) drawBow(button.Cansel) А для проверки нажатия кнопки можно сделать еще одну функцию, скажем: function ifTouch(but, proc) где but - кнопка, а proc - функция, выполняемая при нажатии кнопки. Таким образом программа не будет пестреть числовыми константами и будет намного лучше читаться. А вообще, если пишешь приложения с графическим интерфейсом, рассмотри какую либо GUI-библиотеку. Их у нас на форуме есть несколько. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zabqer 6 Опубликовано: 25 октября, 2017 Ну если уж пошло дело об авторах.. То с печатью цветом помогал я. Гы-гы. Пруфац: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 25 октября, 2017 Коли так, объясни мне великий смысл массива функций: local colorsTable = { ['&0'] = function() color(0x000000) end, ['&1'] = function() color(0x0000AA) end, ['&2'] = function() color(0x00AA00) end, ['&3'] = function() color(0x00AAAA) end, ['&4'] = function() color(0xAA0000) end, ['&5'] = function() color(0xAA00AA) end, ['&6'] = function() color(0xFFAA00) end, ['&7'] = function() color(0xAAAAAA) end, ['&8'] = function() color(0x555555) end, ['&9'] = function() color(0x5555FF) end, ['&a'] = function() color(0x55FF55) end, ['&b'] = function() color(0x55FFFF) end, ['&c'] = function() color(0xFF5555) end, ['&d'] = function() color(0xFF55FF) end, ['&e'] = function() color(0xFFFF55) end, ['&f'] = function() color(0xFFFFFF) end, ['&r'] = function() color(0xFFFFFF) end } Почему в таблице нельзя было сохранить только значения цветов, а по мере надобности вынимать их, для меня осталось загадкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zabqer 6 Опубликовано: 25 октября, 2017 Коли так, объясни мне великий смысл массива функций: local colorsTable = { ['&0'] = function() color(0x000000) end, ['&1'] = function() color(0x0000AA) end, ['&2'] = function() color(0x00AA00) end, ['&3'] = function() color(0x00AAAA) end, ['&4'] = function() color(0xAA0000) end, ['&5'] = function() color(0xAA00AA) end, ['&6'] = function() color(0xFFAA00) end, ['&7'] = function() color(0xAAAAAA) end, ['&8'] = function() color(0x555555) end, ['&9'] = function() color(0x5555FF) end, ['&a'] = function() color(0x55FF55) end, ['&b'] = function() color(0x55FFFF) end, ['&c'] = function() color(0xFF5555) end, ['&d'] = function() color(0xFF55FF) end, ['&e'] = function() color(0xFFFF55) end, ['&f'] = function() color(0xFFFFFF) end, ['&r'] = function() color(0xFFFFFF) end }Почему в таблице нельзя было сохранить только значения цветов, а по мере надобности вынимать их, для меня осталось загадкой.Это делалось для того что бы на каждую букву можно было сделать другие действия, помимо изменения цвета. Я, например, потом добавлял псевдо-подчёркивание. Да, в данном варианте это смысла не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 25 октября, 2017 А, тогда понятно. Но, всё же функция printFormatText сделана малость костыльно. Я бы советовал использовать gmatch, а не перебирать строку посимвольно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Miroshka 5 Опубликовано: 10 ноября, 2017 Функция: elseif w>=65 and w<=80 and h>=27 and h<=40 and nick==123 then positions[commen[n]]=nil 333() n=n-1 222() крашит программу, ибо идёт удаление отзыва, которого - нет. Поможет кто? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 10 ноября, 2017 @@Miroshka, участок кода, начинающийся с elseif, не может быть функцией. И что значит запись 222()? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Miroshka 5 Опубликовано: 12 ноября, 2017 (изменено) @@Miroshka, участок кода, начинающийся с elseif, не может быть функцией. И что значит запись 222()? 222() - заменил название. Затупил я. То, что выше скинул - это не целая функция. Она состоит в похожем коде: elseif login==2 then if w>=35 and w<=50 and h>=24 and h<=27 then exit() elseif w>=24 and w<=34 and h>=17 and h<=20 then if n>1 then n=n-1 drawMenu3() end elseif w>=51 and w<=61 and h>=17 and h<=20 then if n<#commen then n=n+1 drawMenu3() end elseif w>=35 and w<=50 and h>=17 and h<=20 then positions[commen[n]]=nil conf_S() n=n-1 drawMenu3() end Взял с пастебина самой темы. Крашит программу, ибо идёт удаление отзыва, которого - нет. Изменено 12 ноября, 2017 пользователем Miroshka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Miroshka 5 Опубликовано: 12 ноября, 2017 (изменено) Возможно ли ник, брать с файла, а не вписывать его в код? local owner = 'Durex77' -- игрок, админящий программу Те вайл в cd / лежит, название white.cfg или просто white и в этот файл нужно вписать ник, который уже "будет админить прогу" ? Пере пробывал менять positions, conf_R и.т.д. raw ссылка не робит (Вставлял рав ссылку пастебина чисто с ником в "" для ника. Бред, но решил пробывать) просто делал путь на файл через /white - не робит, те считает это за ник, а не за путь. Есть идеи? Мб что то пропустил. Изменено 12 ноября, 2017 пользователем Miroshka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zabqer 6 Опубликовано: 13 ноября, 2017 (изменено) Прикрути эти функции куда нада: local fs = require("filesystem") local cfg = "./etc/warp_list/owner.cfg" local function setProgOwner(owner) local cdir = fs.segments(cfg) table.remove(cdir) cdir = table.concat(cdir, "/") if not fs.exists(cdir) then fs.makeDirectory(cdir)--Тут можно добавить рекурсивное создание коталогов до нужного. Но мне кажется это ужн перебор) end local file, res = io.open(cfg, "w") if not file then error("Couldn't set owner name; " .. res) end file:write(owner) file:close() end local function getProgOwner() local file, res = io.open(cfg, "r") if not file then error("Couldn't get owner name; " .. res) end local nick = file:read("*l") file:close() return nick end Изменено 13 ноября, 2017 пользователем Zabqer Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 17 ноября, 2017 local cdir = fs.segments(cfg) table.remove(cdir) cdir = table.concat(cdir, "/") if not fs.exists(cdir) then fs.makeDirectory(cdir)--Тут можно добавить рекурсивное создание коталогов до нужного. Но мне кажется это ужн перебор) end Если рекурсивное создание каталогов не требуется, то зачем нужны лишние действия по разбору пути к файлу на части и последующей их сборке?Есть же filesystem.path(path) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zabqer 6 Опубликовано: 17 ноября, 2017 Если рекурсивное создание каталогов не требуется, то зачем нужны лишние действия по разбору пути к файлу на части и последующей их сборке?Есть же filesystem.path(path) Есть, но я про него забыл) Я там ещё ошибся, поставил точку в начале Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Miroshka 5 Опубликовано: 29 ноября, 2017 Как заставить функцию printLogTimer работать на все окна? Те если игрок перешел с 1-го окна на 2-е, то таймер не обнулиться! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах