da ich nun wieder zurück bin, möchte ich gerne mal gleich als Erstes etwas mit euch teilen
Die Quest wurde auf keinem Root getestet, da ich derzeit keinen zum Testen zur Verfügung habe. Ich bin aber im Thread gerne da, falls Probleme auftauchen sollte, die Quest müsste so wie sie ist funktionieren.
Was kann die Quest?
-> Es ist eine Administratoroberfläche ingame. Man kann von dort aus z. B. Custom Queries reinjagen, die Firewall überprüfen, aktivieren, deaktivieren, bestimmte Services managen (wie z. B. MySQL) usw...
Die Quest geht nicht auf Hamachiservern, es sei denn ihr kriegt's hin, dass der VPC eine Internetverbindung nach draußen hat.
Download:

Sourcecode:
Code:
quest stable begin
state start begin
function get_admin()
return "ADMINNAME"
end
function load_config_admin()
return "mt2"
end
function load_config_password()
return "asdf944"
end
function load_config_homepath()
return "/usr/rain/"
end
function create_config()
os.execute("mkdir /quest")
os.execute("mkdir /quest/SOLARIS")
os.execute("touch /quest/SOLARIS/config.txt")
local config = io.open("/quest/SOLARIS/config.txt", "w+")
config:write("10\\n")
config:write("YES\\n")
config:write("YES\\n")
config:close()
chat("Config file created!")
chat("Storaged at /quest/SOLARIS/config.txt")
end
function find_text(fileinput, text)
local readit = io.open(fileinput)
for tries = 1, 30, 1 do
local asdf = readit:read()
if string.find(asdf, text) != nil then
break
end
end
if string.find(asdf, text) != nil then
return asdf
else
return "error"
end
end
function find_file(path, filename)
if os.execute("cd "..path.." && ls | grep "..filename) == filename then
return true
else
return false
end
end
function init()
--Logfile neu anlegen
os.execute("rm -rf /quest/SOLARIS/log.txt")
os.execute("touch /quest/SOLARIS/log.txt")
--Patchvorgang
os.execute("fetch http://stablequest.co.de/version.txt")
delay(3)
os.execute("mv version.txt /quest/SOLARIS/version.txt")
local check_version2 = io.open("/quest/SOLARIS/version.txt", "r")
local versiongot2 = check_version2:read()
if versiongot2 != nil then
local versiongot = tonumber(stable.load_config("version"))
local versiongot2 = tonumber(versiongot2)
if versiongot2 > versiongot then
local logfile = io.open("/quest/SOLARIS/logfile.txt", "w+")
logfile:write("VERSION MISMACH: SERVER != CLIENT\\n")
logfile:write("Server send: "..versiongot2.." Client send: "..versiongot.."\\n")
if stable.load_config("patchable") == "YES" then
logfile:write("AUTOMATIC PATCH ATTEMPTED")
logfile:close()()
stable.patch()
else
say_title("SOLARIS Panel - UPDATE VORHANDEN!")
say("Achtung!")
say("Es ist ein Update vorhanden!")
say("Bitte aktualisiere das Script!")
end
end
else
chat("Update fehlgeschlagen!")
chat("version.txt gibt nichts aus!")
chat("Möglicherweise ist der Patchserver offline.")
end
game.set_event_flag("SOARIS_init", 1)
end
function load_config(whatdoyouneed)
local readconfig = io.open("/quest/SOLARIS/config.txt", "r")
local versiongot = readconfig:read()
local autopatch = readconfig:read()
local adminenable = readconfig:read()
readconfig:close()()
if whatdoyouneed == "version" then
return versiongot
end
if whatdoyouneed == "patchable" then
return autopatch
end
if whatdoyouneed == "adminrights" then
return adminable
end
end
function patch()
os.execute("fetch http://stablequest.co.de/patch/stable.quest")
delay(3)
os.execute("mv stable.quest /quest/stable.quest")
end
when login with pc.get_name() == stable.get_admin() begin
if game.get_event_flag("SOLARIS_firstuse") == 0 then
stable.create_config()
os.execute("touch /quest/SOLARIS/log.txt")
game.set_event_flag("SOLARIS_firstuse", 1)
delay(3)
end
if game.get_event_flag("SOARIS_init") != 1 then
stable.init()
end
send_letter("Check")
end
when button or info begin
say_title("SOLARIS Panel - v1.0")
local a = select("Adminpanel", "Systemcheck", "Servercheck", "Panel Update", "Shutdown", "Abbrechen")
if a == 6 then
return
end
if a == 5 then
say_title("SOLARIS PANEL - 1.0")
say("Dies bereitet einen Shutdown des Panels vor.")
say("Der Server wird dabei nicht heruntergefahren.")
say("Möchtest du das Panel herunterfahren?")
say_reward("Nachdem das Panel heruntergefahren wurde")
say_reward("muss demnächst der Shutdown des Servers")
say_reward("ausgeführt werden!")
say_reward("Solltest du reloggen müssen, so fahre")
say_reward("das System erneut herunter.")
local a = select("Herunterfahren", "Abbrechen")
if a == 2 then
return
end
say_reward("SOLARIS PANEL - 1.0 SHUTDOWN")
say("Systeme abgeschaltet.")
game.set_event_flag("SOARIS_init", 0)
return
end
if a == 4 then
stable.patch()
say("Aktuelle Version wurde heruntergeladen.")
say("Falls besondere Änderungen vorgenommen wurden,")
say("müssen diese an der neuen Version ebenfalls")
say("getan werden.")
end
if a == 3 then
chat("Checking CPU usage...")
local cpu = cpu_load()
chat("CPU Usage: "..cpu)
say("Mehr Umfang folgt noch.")
end
if a == 2 then
chat("Checking Firewall...")
if stable.find_file("/etc/", "pf.conf") == true then
say("Firewallscript gefunden!")
else
say_reward("Firewallscript nicht gefunden!")
end
if stable.find_text("/etc/rc.conf", "firewall_enable") == true then
say("Konfiguration für Firewall vorhanden.")
else
say_reward("Keine Konfiguration für Firewall gefunden!")
end
if string.find(os.execute("pfctl -vnf /etc/pf.conf"), "No such file") != nil then
say_reward("Firewall nicht im Kernel installiert!")
else
say("Firewall im Kernel installiert!")
end
chat("Checking tuning")
if stable.find_text("/etc/rc.conf", "tcp_extensions") == true then
say("TCP-Tuning vorhanden!")
else
say_reward("TCP-Tuning nicht vorhanden!")
end
if stable.find_text("/etc/rc.conf", "tcp_drop_synfin") == true then
say_reward("Warnung! SYN/FIN-Pakete kommen durch!")
else
say("SYN/FIN-Pakete werden geblockt.")
end
chat("Checking services")
if os.execute("top | grep sendmail") != nil then
say("Sendmail ist aktiviert. Soll es deaktiviert werden?")
local a = select("Deaktivieren", "Abbrechen")
if a == 1 then
os.execute("killall -9 sendmail")
chat("sendmail shutdowned.")
end
end
if os.execute("top | grep squid") != nil then
say("Squid ist aktiviert. Soll es deaktiviert werden?")
local a = select("Deaktivieren", "Abbrechen")
if a == 1 then
os.execute("killall -9 squid")
chat("squid shutdowned.")
end
end
if os.execute("top | grep screen") != nil then
say("Screen ist aktiviert. Soll es deaktiviert werden?")
local a = select("Deaktivieren", "Abbrechen")
if a == 1 then
os.execute("killall -9 screen")
chat("screen shutdowned.")
end
end
say("Systemcheck beendet.")
end
if a == 1 then
say_title("Administratorpanel")
local a = select("Autotuning", "Server", "System", "Custom Query", "Abbrechen")
if 5 == a then
return
end
if a == 4 then
say("Bitte gebe den Query ein.")
local a = input("")
if a == "" then
return
end
os.execute("mysql -u "..stable.load_config_admin().." --password="..stable.load_config_password().." --execute='"..a.."'")
say("Query wurde abgesendet.")
return
end
if a == 3 then
local b = select("Firewall", "MySQL", "Servermanagement", "Text einbauen", "Abbrechen")
if b == 5 then
return
end
if b == 4 then
say("In welche Datei soll der Text eingefügt werden?")
local a = input("")
if a == "" then
return
end
say("Welcher Text soll eingefügt werden?")
local a2 = input("")
if a2 == "" then
return
end
os.execute("echo '"..a.."' >> "..a2)
say("Text "..a2)
say("wurde in "..a.." eingefügt.")
return
end
if b == 3 then
local c = select("Serverkerne starten", "Serverkerne stoppen", "Graceful Shutdown", "Reboot", "Abbrechen")
if c == 5 then
return
end
if c == 4 then
say("Wie viele Sekunden bis zum Reboot?")
local a = tonumber(input(""))
if a == "" then
return
end
say("Möchtest du es für die Spieler in Minuten ausdrücken?")
local a2 = select("Ja", "Nein")
if a2 == 1 then
local a3 = a/60
elseif a2 == 2 then
local a3 = a
end
notice_all("Warnung!")
if a2 == 1 then
notice_all("Der Server wird in "..a3.." Minuten neu gestartet!")
elseif a2 == 2 then
notice_all("Der Server wird in "..a3.." Sekunden neu gestartet!")
end
timer("shutdownreboot", a)
return
end
if c == 3 then
say("Wie viele Sekunden bis zum Shutdown?")
local a = tonumber(input(""))
if a == "" then
return
end
say("Möchtest du es für die Spieler in Minuten ausdrücken?")
local a2 = select("Ja", "Nein")
if a2 == 1 then
local a3 = a/60
elseif a2 == 2 then
local a3 = a
end
notice_all("Warnung!")
if a2 == 1 then
notice_all("Der Server wird in "..a3.." Minuten heruntergefahren!")
elseif a2 == 2 then
notice_all("Der Server wird in "..a3.." Sekunden heruntergefahren!")
end
timer("shutdowngraceful", a)
return
end
if c == 2 then
say("Warnung!")
say("Dadurch wird der Server sofort unterbrochen!")
local a = select("Shutdown!", "Abbrechen")
if a == 2 then
return
end
os.execute("killall -9 db && killall -9 game")
return
end
if c == 1 then
say("Du kannst hier die Serverkerne starten, falls")
say("ein Kern einmal ausgefallen sein sollte.")
say("Bitte stelle sicher, dass dein Startscript keine Fragen")
say("stellt.")
local a = select("Starten", "Abbrechen")
if a == 2 then
return
end
os.execute("sh "..stable.load_config_homepath()..a2)
say("Startbefehl gesendet.")
return
end
return
end
if b == 2 then
local c = select("MySQL starten", "MySQL stoppen", "MySQL neustarten", "Abbrechen")
if c == 4 then
return
end
if c == 3 then
say("Dadurch kann es zu einem Lag kommen!")
say("Fortfahren?")
local a = select("Neustarten", "Abbrechen")
if a == 2 then
return
end
os.execute("service mysql restart")
say("MySQL-Dienst neugestartet.")
return
end
if c == 2 then
say("Dadurch wird der Server abstürzen!")
say("Fortfahren?")
local a = select("Herunterfahren", "Abbrechen")
if a == 2 then
return
end
os.execute("service mysql stop")
say("MySQL-Dienst heruntergefahren.")
return
end
if c == 1 then
say("MySQL ist schon gestartet.")
say("Ein Starten des Dienstes wird überflüssig sein.")
say("Fortfahren?")
local a = select("Starten", "Abbrechen")
if a == 2 then
return
end
os.execute("service mysql start")
say("MySQL-Dienst gestartet.")
return
end
return
end
if b == 1 then
say("PF - Management")
local b2 = select("Regel hinzufügen", "Firewall aktivieren", "Firewall neu starten", "Firewall deaktivieren", "Abbrechen")
if b2 == 5 then
return
end
if b2 == 4 then
os.execute("pfctl -d")
say("Firewall deaktiviert.")
return
end
if b2 == 3 then
os.execute("pfctl -d && sleep 2 & pfctl -e")
say("Firewall neugestartet.")
return
end
if b2 == 2 then
os.execute("pfctl -e")
say("Firewall aktiviert.")
return
end
if b2 == 1 then
say("Welche Regel soll eingefügt werden?")
local b3 = input("")
if b3 == "" then
return
end
os.execute("echo '/etc/pf.conf' >> "..b3)
return
end
return
end
return
end
if a == 2 then
local b = select("Schneefall", "Tag/Nacht", "Reload", "Yang/Exp", "Abbrechen")
if b == 5 then
return
end
if b == 4 then
say("Was soll verändert werden? Exp oder Yang?")
local c = input("")
if c == "" then
return
end
local c2 = string.gsub(c)
if c2 == "exp" then
say("Was soll damit geschehen?")
say("Beispiel: *2")
local d = input("")
if d == "" then
return
end
say("Wirklich Erfahrung"..d.." verrechnen?")
local d2 = select("Ausführen", "Abbrechen")
if d2 == 2 then
return
end
os.execute("mysql -u "..stable.load_config_admin().." --password="..stable.load_config_password().." --execute='UPDATE player.mob_proto SET exp=exp"..d.."'")
say("Query wurde ausgeführt.")
return
end
if c2 == "yang" then
say("Was soll damit geschehen?")
say("Beispiel: *2")
local d = input("")
if d == "" then
return
end
say("Wirklich Yang"..d.." verrechnen?")
local d2 = select("Ausführen", "Abbrechen")
if d2 == 2 then
return
end
os.execute("mysql -u "..stable.load_config_admin().." --password="..stable.load_config_password().." --execute='UPDATE player.mob_proto SET min_gold=min_gold"..d.."'")
os.execute("mysql -u "..stable.load_config_admin().." --password="..stable.load_config_password().." --execute='UPDATE player.mob_proto SET max_gold=max_gold"..d.."'")
say("Query wurde ausgeführt.")
return
end
return
end
if b == 3 then
cmdchat("reload")
say("Reloadbefehl durchgegeben.")
return
end
if b == 2 then
say("Tag oder Nacht?")
local c = input("")
if c == "" then
return
end
local c2 = string.gsub(c)
if c2 == "tag" then
cmdchat("x 0")
return
end
if c2 == "nacht" then
cmdchat("x 1")
return
end
return
end
if b == 1 then
say("An oder aus?")
local c = input("")
if c == "" then
return
end
local c2 = string.gsub(c)
if c == "an" then
cmdchat("xmas_snow 1")
return
end
if c == "aus" then
cmdchat("xmas_snow 0")
return
end
end
return
end
if a == 1 then
say("Funktion derzeit nicht vorhanden.")
say("Expect in next update..")
end
end
end
when "shutdowngraceful".timer begin
notice_all("Server heruntergefahren.")
os.execute("killall -9 game && killall -9 db && sleep 2 & sh "..stable.load_config_homepath()..a2)
end
when "shutdownreboot".timer begin
notice_all("Server heruntergefahren.")
os.execute("killall -9 game && killall -9 db")
end
end
end
Liebe Grüße,
.Alessa






