Перейти к содержимому
whiskas

Программа для отзывов о варпах

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

-- Большая часть кода сделана игроком N1nt3nd0 и была заимствована мной

Программа предназначена для варпов что б игроки оставляли свои отзыви та предложения.

Некоторые из отзывов показуються на главном меню.

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

В программе стоит счечик что офает залогинивнего человека с програмки если он просто зашел в прогу и ушел .

 

 

 

https://pastebin.com/zSz79XVh

 

 

Скрины 

 

Выгляд самой программы 

v1.pngi.gif

 

После того как залогинился игрок что администрует эт прогу (у него дополнительная кнопка)

Как видно верху идет щет и игрока офакт с проги через 30 сек если он нечего не жал

v2.pngi.gif

 

Админ панель 

Тут можна удалять коментарии а также видить ник того кто написал

v3.pngi.gif

 

Панелька простого игрока когда залогинился

v4.pngi.gif
Изменено пользователем whiskas

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


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

Выглядит вроде прикольно. Но что за варпы - непонятно.

 

P.S. Грамматика хромает на обе ноги =)

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


Ссылка на сообщение
Поделиться на других сайтах
Но что за варпы - непонятно.

 

ну тут все просто. Отзывы - это тренд. В чем смысл: на сервере пишешь /warp , далее летишь сквозь гиперпространство, прилетаешь, видишь, упс, а там комп стоит, который просит оставить отзыв, и можно написать свой отзыв, свои ощущения от варпа, переживания, как все прошло и т.д.

 

Сейчас писать где-то комменты, ставить лойсы, дизы, оставлять отзывы - это просто необходимо. Без этого сейчас в современном мире никак. Купил трусы в интернет магазине - оставь отзыв, сделай видеогайд, распаковку  :)

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


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

Несколько замечаний или даже предложений:

У тебя координаты и размеры каждой кнопки фактически прописаны в виде констант дважды. Первый раз - для прорисовки (функции 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-библиотеку. Их у нас на форуме есть несколько.

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


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

Ну если уж пошло дело об авторах.. То с печатью цветом помогал я. Гы-гы. :)

Пруфац:

 

b816121a9adeb9209a888cac7eb99880.jpg

 

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


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

Коли так, объясни мне великий смысл массива функций:

	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
							 }

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

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


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

Коли так, объясни мне великий смысл массива функций:

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							 }
Почему в таблице нельзя было сохранить только значения цветов, а по мере надобности вынимать их, для меня осталось загадкой.
Это делалось для того что бы на каждую букву можно было сделать другие действия, помимо изменения цвета. Я, например, потом добавлял псевдо-подчёркивание. Да, в данном варианте это смысла не имеет.

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


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

А, тогда понятно. Но, всё же функция printFormatText сделана малость костыльно. Я бы советовал использовать gmatch, а не перебирать строку посимвольно.

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


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

Функция:

        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()
крашит программу, ибо идёт удаление отзыва, которого - нет. Поможет кто?

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


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

@@Miroshka, участок кода, начинающийся с elseif, не может быть функцией. И что значит запись 222()?

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


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

@@Miroshka, участок кода, начинающийся с elseif, не может быть функцией. И что значит запись 222()?

222() - заменил название.

Затупил я. То, что выше скинул - это не целая функция. Она состоит в похожем коде:

 

 

  1.             elseif login==2 then
  2.                 if w>=35 and w<=50 and h>=24 and h<=27 then
  3.                     exit()
  4.                 elseif w>=24 and w<=34 and h>=17 and h<=20 then
  5.                     if n>1 then
  6.                         n=n-1
  7.                         drawMenu3()
  8.                     end
  9.                 elseif w>=51 and w<=61 and h>=17 and h<=20 then
  10.                     if n<#commen then
  11.                         n=n+1
  12.                         drawMenu3()
  13.                     end
  14.                 elseif w>=35 and w<=50 and h>=17 and h<=20 then
  15.                     positions[commen[n]]=nil
  16.                     conf_S()
  17.                     n=n-1
  18.                     drawMenu3()
  19.                 end

 

 

Взял с пастебина самой темы.

Крашит программу, ибо идёт удаление отзыва, которого - нет.

Изменено пользователем Miroshka

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


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

Возможно ли ник, брать с файла, а не вписывать его в код?

    local owner = 'Durex77' -- игрок, админящий программу

Те вайл в cd / лежит, название white.cfg или просто white и в этот файл нужно вписать ник, который уже "будет админить прогу" ?

Пере пробывал менять positions, conf_R и.т.д. 

raw ссылка не робит (Вставлял рав ссылку пастебина чисто с ником в "" для ника. Бред, но решил пробывать)

просто делал путь на файл через /white - не робит, те считает это за ник, а не за путь.

 

Есть идеи? Мб что то пропустил.

Изменено пользователем Miroshka

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


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

Прикрути эти функции куда нада:

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
Изменено пользователем Zabqer

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


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

 

    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)

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


Ссылка на сообщение
Поделиться на других сайтах
Если рекурсивное создание каталогов не требуется, то зачем нужны лишние действия по разбору пути к файлу на части и последующей их сборке?Есть же filesystem.path(path)

Есть, но я про него забыл)

Я там ещё ошибся, поставил точку в начале

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


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

Как заставить функцию printLogTimer работать на все окна? Те если игрок перешел с 1-го окна на 2-е, то таймер не обнулиться!

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...