• Print

Author Topic: New admin mods, future of ULX  (Read 256 times)

0 Members and 1 Guest are viewing this topic.

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #15 on: August 12, 2014, 09:39:52 pm »
http://facepunch.com/showthread.php?t=1416157&p=45671862&viewfull=1#post45671862

Well, this certainly was a nice post to read on Facepunch :)
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #16 on: August 22, 2014, 10:39:17 pm »
Heads up- there have been reports that the latest round of source engine updates have changed how the STEAMID is formatted: https://forums.alliedmods.net/showthread.php?t=246705

It's not likely to be introduced to Gmod for a while, but you can see what they're saying about it here: http://facepunch.com/showthread.php?t=1374457&page=80 (halfway down the page)
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #17 on: May 11, 2015, 10:36:08 am »
I do like to keep bumping this thread whenever I find something new :P

Here's a new admin mod I came across on Facepunch. We may want to keep an eye on it- it looks to be taking a lot of inspiration from ULX:
http://facepunch.com/showthread.php?t=1463260&p=47694817&viewfull=1#post47694817
https://github.com/DaaOtt/maestro

(also, annoying discussion about hooks after those posts.. argh)
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Megiddo

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 6214
  • Karma: 394
  • Project Lead
Re: New admin mods, future of ULX
« Reply #18 on: May 11, 2015, 04:16:22 pm »
Interesting. He seems to be saying, "I want my mod to be like ULX, plus a little extra".
Experiencing God's grace one day at a time.

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #19 on: May 18, 2015, 10:15:43 am »
This person is working on an Android app to do remote administration: (Evolve)
http://facepunch.com/showthread.php?t=1463260&p=47743886&viewfull=1#post47743886

Reception seems to be positive, even though it's not finished.. Makes me wonder if we should make something like this with ULX4? I have much experience in iOS development, but Android isn't terribly difficult as well.
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Megiddo

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 6214
  • Karma: 394
  • Project Lead
Re: New admin mods, future of ULX
« Reply #20 on: May 18, 2015, 05:01:02 pm »
I've been thinking of such a thing for a long time. Definitely a lot more feasible with our ideas for ULX4 rather than current ULX (need a Source module). I'd like to use something like Xamarin (though that's too pricy with the normal license) to ease multi platform development, but perhaps since we should be doing all the heavy lifting on the web backend it'd just be UI and API coding, which shouldn't be too bad.
Experiencing God's grace one day at a time.

Offline JamminR

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 8096
  • Karma: 390
  • Sertafide Ulysses Jenius
    • Team Ulysses [ULib/ULX, other fine releases]
Re: New admin mods, future of ULX
« Reply #21 on: May 19, 2015, 08:05:26 pm »
*drool*
I love you fellow dev idea geeks.
*manly '3 quick pat on back and step away' hug*
"Though a program be but three lines long, someday it will have to be maintained." -- The Tao of Programming

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #22 on: July 31, 2015, 12:41:16 pm »
Oh boy, another "Best admin mod?" thread! http://facepunch.com/showthread.php?t=1477787&p=48294110

.. Not really much going on in that thread, but it pointed me to this: https://github.com/nedhyett/Vermilion

Haven't looked too much at it yet, since it's not released yet, but they're doing some excessive overriding of the Hook library:
https://github.com/nedhyett/Vermilion/blob/master/vermilion2/lua/vermilion2/core/hooks.lua

That can't end well for them.
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #23 on: August 23, 2015, 09:38:39 pm »
For those of you who haven't seen it yet, here is Maestro: http://facepunch.com/showthread.php?t=1481504

The main thing to note is how it claims to be "ULX, but better". In fact, there's nothing in the main post that doesn't refer to ULX, save it be the screenshots.

I did come across this- apparently their targeting system is definitely "inspired" by ours:
https://github.com/DaaOtt/maestro/blob/master/lua/maestro/plugins/sh_tutorial.lua#L83



In other news, someone released this on Facepunch:
http://facepunch.com/showthread.php?t=1482220

Adds a MySQL driver to ULib, and mainly just looks like it overrides the writing functions. Looks pretty simple and straightforward though, definitely less hackish than other implementations I've seen. Megiddo, perhaps this be of some use with our issue of groups.txt/bans.txt files getting too large?
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline JamminR

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 8096
  • Karma: 390
  • Sertafide Ulysses Jenius
    • Team Ulysses [ULib/ULX, other fine releases]
Re: New admin mods, future of ULX
« Reply #24 on: August 24, 2015, 07:08:43 pm »
I didn't look at your Maestro link; however, if it's the same one I think it is, I almost got banned from Facepunch 2-3 years ago because I kept arguing many of it's claims of being 'first' in many comparisons to ULX specifically.
Then again, it may not be. After awhile, comparing/using ULX as a target to be better than just tells me how awesome ULX is and the one to beat.
Sometimes a target on our backs isn't always a bad thing.
"Though a program be but three lines long, someday it will have to be maintained." -- The Tao of Programming

Offline MrPresident

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 2727
  • Karma: 430
    • |G4P| Gman4President
Re: New admin mods, future of ULX
« Reply #25 on: August 24, 2015, 10:34:11 pm »
The way I see it, the fact that they feel the need to compare their work to ULX says everything about ULX.

ULX is the standard. The fact that all these upcoming admin mods use that as a baseline for why theirs is better or whatever just reinforces that.

Offline MrPresident

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 2727
  • Karma: 430
    • |G4P| Gman4President
Re: New admin mods, future of ULX
« Reply #26 on: August 26, 2015, 03:35:04 am »
Took a look through Maestro. Kind of interesting the way he is doing his GUI. He's drawing HTML panels with lua and dynamically loading CSS/HTML(Bootstrap). Looks kind of neat, but I wonder what kinds of issues this might pose?

Code: [Select]
if SERVER then
util.AddNetworkString("maestro_menu")
end
maestro.command("menu", {}, function(caller)
if not caller then return true, "You can't open the menu from the server console!" end
net.Start("maestro_menu")
net.Send(caller)
end, [[
Opens a menu for running commands.]])

if not CLIENT then return end
local function populatecommands()
local ret = ""
local cmds = {}
for cmd in pairs(maestro.commands) do
cmds[#cmds   1] = cmd
end
table.sort(cmds)
for i = 1, #cmds do
local cmd = cmds[i]
if maestro.rankget(maestro.userrank(LocalPlayer())).perms[cmd] then
ret = ret .. [[
<li><a onclick="resetPills(); this.parentNode.className = 'active'; console.log('RUNLUA: maestromenuupdate(']] .. cmd .. [[')');">]]..cmd..'</a></li>n'
else
ret = ret .. [[
<li class="disabled"><a>]]..cmd..'</a></li>n'
end
end
return ret
end
local function escape(str)
str = str:gsub("<", "&lt;")
str = str:gsub(">", "&gt;")
return str:gsub("(['"])", "\%1")
end
local curcmd = ""
function maestromenuupdate(cmd)
curcmd = cmd
maestro_menu:Call([[
document.getElementById("commandname").innerHTML = "]] .. cmd .. [[";]])
maestro_menu:Call([[
document.getElementById("commandhelp").innerHTML = "]] .. (maestro.commands[cmd].help or ""):gsub("n", "<br>") .. [[";]])
local function args(t)
local ret = ""
for i = 1, #t do
ret = ret .. " &lt;" .. t[i] .. "&gt;"
end
return ret
end
maestro_menu:Call([[
document.getElementById("commandsyntax").innerHTML = "ms ]] .. cmd .. args(maestro.commands[cmd].args) .. [[";]])
maestro_menu:Call([[
document.getElementById("commandform").innerHTML = "";]])
for i = 1, #maestro.commands[cmd].args do
local arg = maestro.commands[cmd].args[i]
local type, desc = arg:match("^%w "), arg:match(":(%w )")
local code = [[
<input type="text" class="form-control form-control-inline" placeholder="]] .. type .. (desc and ":" .. desc or "") .. [[" id="cmdarg_]] .. i .. [["></input>]]
if type == "player" then
local function plys()
local ret = ""
for k, ply in pairs(player.GetAll()) do
ret = ret .. [[<li><a href="#" onclick="this.parentNode.parentNode.parentNode.children[0].innerHTML = ']] .. escape(ply:Nick()) .. [[ '   caret(); this.parentNode.parentNode.parentNode.children[0].value = '$]] .. ply:EntIndex() .. [['; return false;">]] .. escape(ply:Nick()) .. [[</a></li>]]
end
return ret
end
code = [[
<div class="btn-group">
<button class="btn btn-default btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false" id="cmdarg_]] .. i .. [[">
Select Player <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">]] .. plys() .. [[</ul>
</div>]]
end
maestro_menu:Call([[ $("#commandform").append(']] .. code .. [[');]])
end
maestro_menu:Call([[
$("#commandform").append('<button type="submit" class="btn btn-default form-control-inline" onclick="runCommand(]] .. #maestro.commands[cmd].args .. [[);">
Submit
</button>');]])
end
local submitargs = {}
function maestromenustart()
submitargs = {}
end
function maestromenuadd(a)
if a == "MAESTRO_NOVALUE" then
a = nil
end
submitargs[#submitargs   1] = a
end
function maestromenuend()
RunConsoleCommand("ms", curcmd, unpack(submitargs))
end

net.Receive("maestro_menu", function()
if maestro_menu then maestro_menu:Remove() end
maestro_menu = vgui.Create("DHTML")
maestro_menu:SetSize(1024, 576)
maestro_menu:Center()
maestro_menu:MakePopup()
maestro_menu:SetAllowLua(true)
maestro_menu:SetScrollbars(false)
maestro_menu:SetVerticalScrollbarEnabled(false)
maestro_menu:SetHTML([[
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bootstrap 3</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
<!--script src="js/less-1.3.3.min.js"></script-->
<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
<link rel="stylesheet" href=" https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src=" https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src=" https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script>
function resetPills() {
var a = document.getElementById("commandpills").children;
for (var i = 0; i < a.length; i  ) {
if (a[i].classList.contains("active")) {
a[i].classList.remove("active");
}
}
}
function toTop() {
$("html, body").animate({
scrollTop: 0
}, 600);
}
function caret() {
return '<span class="caret"></span>'
}
function runCommand(num) {
console.log("RUNLUA: maestromenustart()");
for (i = 1; i <= num; i  ) {
var argval = document.getElementById("cmdarg_"   i).arg_value
var val = document.getElementById("cmdarg_"   i).value
if (argval) {
console.log("RUNLUA: maestromenuadd('"   argval   "')");
} else if (val) {
console.log("RUNLUA: maestromenuadd('"   val   "')");
} else {
console.log("RUNLUA: maestromenuadd('MAESTRO_NOVALUE')");
}
}
console.log("RUNLUA: maestromenuend()");
}
</script>
<style>
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor:default;
}
.form-control-inline {
min-width: 0;
width: auto;
display: inline;
}
.affix {
width: 809px;
}
.ghost {
opacity: .5;
background: #C8EBFB;
}
::-webkit-scrollbar {
-webkit-appearance: none;
width: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 4px;
background-color: rgba(0,0,0,.5);
-webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
background-clip: padding-box;
}
</style>
</head>
<body>
<div class="container">
<div class="row clearfix noselect">
<div class="col-md-12 column">
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div align="right">
<button type="button" class="close" aria-label="Close" align="right" onclick="console.log('RUNLUA: maestro_menu:Remove()');">
<span aria-hidden="true">&times;&nbsp;</span>
</button>
</div>
<div class="navbar-header">
<a class="navbar-brand">Maestro</a>
</div>
</nav>
<h3>
h3. Lorem ipsum dolor sit amet.
</h3>
</div>
</div>
<div class="row clearfix">
<div class="col-xs-2 column noselect">
<ul class="nav nav-pills nav-stacked" id="commandpills">
]] .. populatecommands() .. [[
</ul>
</div>
<div class="col-xs-10 column">
<div data-spy="affix" id="affix">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title" id="commandname">&nbsp;</h3>
</div>
<div class="panel-body">
<div class="highlight">
<pre><code class="language-html" data-lang="html" id="commandsyntax"> </code></pre>
</div>
<dl>
<span id="commandhelp">
</span>
</dl>
<div class="well noselect">
<div class="controls" id="commandform">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
]])
end)

Offline JamminR

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 8096
  • Karma: 390
  • Sertafide Ulysses Jenius
    • Team Ulysses [ULib/ULX, other fine releases]
Re: New admin mods, future of ULX
« Reply #27 on: August 26, 2015, 06:53:47 pm »
Actually, that's an awesome idea.
Even someone with very little GLua gui experience could do some neat stuff (like ME!)

Agreed MrP - potential issues abound probably.
We've seen issues with Gmod, and even Source's way, of handling some HTML features though.
But I still like the idea behind it, external theme configs(CSS), etc.

Gmod's main panel menu's haven't gone to using html, have they?
"Though a program be but three lines long, someday it will have to be maintained." -- The Tao of Programming

Offline Stickly Man!

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 1270
  • Karma: 164
  • What even IS software anymore?
    • XGUI
Re: New admin mods, future of ULX
« Reply #28 on: August 28, 2015, 09:56:08 am »
Yes, I believe Megiddo had the idea of using web panels for our ULX4 GUI, but.. Right now the version of awesomium is very out of date, making some recent HTML5/CSS3 features hard to use- or somewhat broken.

Bootstrap has a nice UI, but.. I see it overused a little too much. :P
Join our Team Ulysses community discord! https://discord.gg/gR4Uye6

Offline Megiddo

  • Ulysses Team Member
  • Hero Member
  • *****
  • Posts: 6214
  • Karma: 394
  • Project Lead
Re: New admin mods, future of ULX
« Reply #29 on: September 21, 2015, 10:11:30 am »
My desire to use web elements for XGUI was because it was a more common baseline for experience, and it would allow us to easily port it to other things (general web panels outside of the game, iPhone client, etc).
Experiencing God's grace one day at a time.

  • Print