Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server > Metin2 PServer Guides & Strategies
You last visited: Today at 05:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Comeback-Release] Patchbares Adminpanel als Quest

Discussion on [Comeback-Release] Patchbares Adminpanel als Quest within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,912
[Comeback-Release] Patchbares Adminpanel als Quest

Hallo zusammen,

da ich nun wieder zurück bin, möchte ich gerne mal gleich als Erstes etwas mit euch teilen Es handelt sicher hierbei um ein Adminpanel, welches sich automatisch (oder nach Wunsch nur manuell) patchen lässt. Dabei greift es auf einen Patchserver zu, der extra dafür eingerichtet wurde.

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
In den ersten paar Zeilen befinden sich Informationen wie ADMINNAME, welche Ihr natürlich ersetzen solltet! Viel Spaß =)

Liebe Grüße,
.Alessa
.Alessa is offline  
Thanks
18 Users
Old 07/09/2012, 15:43   #2
 
elite*gold: 32
Join Date: Dec 2010
Posts: 1,294
Received Thanks: 862
Ich weiß nicht obs bei dir anders ist aber bei mir gibt os.execute keinen Wert zurück. Sonst wären die MySQL SELECT funktionen ja einfach gewesen.
Quote:
if os.execute("cd "..path.." && ls | grep "..filename) == filename then
#edit, und ich kann nirgendwo die cpu_load() funktion sehen die du irgendwo aufrufst^^
√π. is offline  
Old 07/09/2012, 15:48   #3
 
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,912
Ich weiß nicht, ob sie was zurückgeben, ich hab's einfach mal so angenommen. Da bin ich ganz ehrlich Falls die Quest so nicht funktionieren sollte, kann ich ja Bugfixes nachhauen. Mir ist ja in erster Linie wichtig, dass das Patchsystem so hinhaut.
Auf jeden Fall Danke für den Hinweis, ich werde es dann auf jeden Fall berücksichtigen.
.Alessa is offline  
Old 07/09/2012, 19:13   #4

 
.MaisKolben™'s Avatar
 
elite*gold: 24
Join Date: May 2009
Posts: 1,165
Received Thanks: 1,222
Also wenn es funktioniert, dann besten und größten Dank von mir.
Ist genau das, was ich seit ewigkeiten suche bzw. brauche .
Danke!.

MfG
.MaisKolben™ is offline  
Old 07/09/2012, 19:29   #5
 
.αpeх''s Avatar
 
elite*gold: 244
Join Date: Jun 2010
Posts: 602
Received Thanks: 471
Sehr sehr nice.

Danke für's sharen
.αpeх' is offline  
Old 07/09/2012, 19:43   #6
 
:Speedi's Avatar
 
elite*gold: 0
Join Date: Aug 2009
Posts: 1,468
Received Thanks: 710
Hab dir mal einen Hinweis geschrieben

Lg. Speedi
:Speedi is offline  
Thanks
1 User
Old 07/09/2012, 19:47   #7
 
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,912
Danke dafür, Hinweis ist angekommen und umgesetzt
.Alessa is offline  
Old 07/09/2012, 19:53   #8
 
elite*gold: 0
Join Date: Oct 2009
Posts: 382
Received Thanks: 161
That's Nice ! Thank you
vpser is offline  
Old 07/09/2012, 19:55   #9


 
Special's Avatar
 
elite*gold: 31
Join Date: Dec 2010
Posts: 3,140
Received Thanks: 2,382
Ok, dass passt perfekt. Alles kommt zur richtigen Zeit. Gute Arbeit, werde ich aufjedenfall verwenden.
Special is offline  
Old 07/09/2012, 22:05   #10
 
elite*gold: 315
Join Date: Dec 2011
Posts: 2,905
Received Thanks: 1,066
Wider was Geiles von dir Heute :*
Danke,Danke :P
Teh Plex is offline  
Old 07/09/2012, 22:08   #11

 
•kяyteя•'s Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 2,876
Received Thanks: 982
So langsam kommt hier wieder Schwung in die Sektion
Einfach nur hammer, danke dafür...
•kяyteя• is offline  
Old 07/09/2012, 23:51   #12
 
elite*gold: 0
Join Date: Jan 2011
Posts: 2,903
Received Thanks: 1,262
Niice gefällt mir
weiter so
£αšεℜ™ is offline  
Reply


Similar Threads Similar Threads
[RELEASE]Adminpanel
03/18/2012 - Metin2 PServer Guides & Strategies - 10 Replies
Hi Community ;D Ich Release hier mal ein Admin Panel, kurz vorweg möchte ich nicht sagen das es von mir ist sondern es ist aus einem Italienischen Forum ... Natürlich war das Panel auch auf Italienisch :facepalm: Darum habe ich es heruntergeladen und für euch übersetzt und unnötige Funktionen gelöscht die nicht funktionierten. Wie ihr das ganze anpasst müsst ihr ja wohl wissen ;) Für dummys ... passt die configs an ..



All times are GMT +1. The time now is 05:31.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.