[PHYTON] GM Abfrage

12/03/2015 03:16 Kira Mikami#1
Guten Tag.

Ich verstehe etwas nicht.

Code:
def FaceButton(self):
		if player.GetName == ("[GM]" + " " + (player.GetName)):
		
		global AdminPanelOpen
		AdminPanelOpen = ui.Button()
		AdminPanelOpen.SetText("")
		AdminPanelOpen.SetPosition(wndMgr.GetScreenWidth()-110,wndMgr.GetScreenHeight()-120)
		AdminPanelOpen.SetSize(88, 21)
		AdminPanelOpen.SetEvent(self.LoadMainForm.Show)
		AdminPanelOpen.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
		AdminPanelOpen.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
		AdminPanelOpen.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
		AdminPanelOpen.Show()
		
		global AdminPanelText
		AdminPanelText = ui.TextLine()
		AdminPanelText.SetParent(AdminPanelOpen)
		AdminPanelText.SetVerticalAlignCenter()
		AdminPanelText.SetHorizontalAlignCenter()
		AdminPanelText.SetPosition(43,10)
		AdminPanelText.SetText("Admin Panel")
		AdminPanelText.Show()
		else:
			self.Hide()
Ich bin ein totaler Neuling. Ich möchte eine Abfrage machen, und zwar soll der Button erst dann angezeigt werden, wenn der User ein [GM] vor dem Namen hat. Nicht anders, genau so. Sollte er kein GM sein, soll der Button nicht angezeigt werden.

Ich habe das Gefühl, das ist total falsch. Was kann ich da tun?
12/03/2015 08:04 rollback#2
Ich würde empfehlen mit Regex zu arbeiten:

Code:
import re

if not re.search("^\\[GM\\].+$", player.GetName()):
    return
Allerdings würde ich generell davon abraten, solche Abfragen im Client (besonders im Python-Teil) zu machen.
12/03/2015 13:16 Mi4uric3#3
Quote:
Originally Posted by Kira Mikami View Post
if player.GetName == ("[GM]" + " " + (player.GetName))
Code:
if (irgendwas == "xyz" + irgendwas)
Dein Ernst?
12/03/2015 14:34 Kira Mikami#4
Quote:
Originally Posted by Mi4uric3 View Post
Code:
if (irgendwas == "xyz" + irgendwas)
Dein Ernst?
Ja. Das war mein erster Versuch, und ich wusste auch, das er nicht klappen kann. Zudem kann es AUCH nicht funktionieren, da "player.GetName()" bereits [GM] enthält, und er den Button erst anzeigen würde, hieße ich: [GM][GM]xyz.

Ich sagte euch, ich bin ein Neuling.

Quote:
Originally Posted by Seחsi View Post
Ich würde empfehlen mit Regex zu arbeiten:

Code:
import re

if not re.search("^\\[GM\\].+$", player.GetName()):
    return
Allerdings würde ich generell davon abraten, solche Abfragen im Client (besonders im Python-Teil) zu machen.
Danke dir für den Tipp, aber es dient mehr zu meinem eigenen Zweck, und ich würde es erst zur Demonstration nutzen. Das Admin Panel können die User sowieso nicht verwenden, trotzdem sollen sie es nicht sehen, einfach, weil sie keine Admins sind.

Und wie ich bereits sagte, ich bin ein totaler Neuling. Ich habe keine Ahnung, wie ich mein Admin Panel ohne Probleme geschrieben habe.
Könntest du meinen Code mit deinem verbinden? Und könntest du mir auch erklären, was er genau bedeutet? Ich würde es sehr gerne verstehen.

Ich wäre dir sehr dankbar.
12/03/2015 15:04 .Delta#5
In python an sich gibts die nette Function startswith(), ob die im Mt2 Client sinnvoll ist müssen dir Andere beantworten :p
Sprich ich würde mir das als absolut unerfahrener Python Programmier so vorstellen:
if player.GetName.startswith("[GM]")
12/03/2015 15:28 Kira Mikami#6
Quote:
Originally Posted by .Delta View Post
In python an sich gibts die nette Function startswith(), ob die im Mt2 Client sinnvoll ist müssen dir Andere beantworten :p
Sprich ich würde mir das als absolut unerfahrener Python Programmier so vorstellen:
if player.GetName.startswith("[GM]")
Danke dir, sieht zwar sehr vielversprechend aus, aber funktioniert leider auch nicht. Hier war ich mir relativ sicher, das es klappen könnte. Vielleicht muss man den Befehl anders nutzen.
12/03/2015 15:41 rollback#7
Quote:
Originally Posted by Kira Mikami View Post
Könntest du meinen Code mit deinem verbinden? Und könntest du mir auch erklären, was er genau bedeutet? Ich würde es sehr gerne verstehen.

Ich wäre dir sehr dankbar.
Code:
def FaceButton(self):
	if not re.search("^\\[GM\\].+$", player.GetName()):
		self.Hide()
		return
	
	
	global AdminPanelOpen
	AdminPanelOpen = ui.Button()
	AdminPanelOpen.SetText("")
	AdminPanelOpen.SetPosition(wndMgr.GetScreenWidth()-110,wndMgr.GetScreenHeight()-120)
	AdminPanelOpen.SetSize(88, 21)
	AdminPanelOpen.SetEvent(self.LoadMainForm.Show)
	AdminPanelOpen.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
	AdminPanelOpen.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
	AdminPanelOpen.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
	AdminPanelOpen.Show()
	
	global AdminPanelText
	AdminPanelText = ui.TextLine()
	AdminPanelText.SetParent(AdminPanelOpen)
	AdminPanelText.SetVerticalAlignCenter()
	AdminPanelText.SetHorizontalAlignCenter()
	AdminPanelText.SetPosition(43,10)
	AdminPanelText.SetText("Admin Panel")
	AdminPanelText.Show()
import re nicht vergessen!

Was das ganze macht kannst du hier nachlesen:
[Only registered and activated users can see links. Click Here To Register...]
die Funktionen der einzelnen sind (fast) die selben wie in Java, nur finde ich die Liste in Java simpler aufgebaut, deshalb hier nochmal von Java:
[Only registered and activated users can see links. Click Here To Register...]



Der von mir gezeigte Regex prüft funktioniert wie folgt:

^
Der String muss an dieser Stelle starten, es darf nichts vorher stehen.

\\
Escape für [, weil [ eine eigene Funktion als Regex-Zeichen hat, wir diese aber hier nicht nutzen möchten sondern das Zeichen im String vorhanden sein soll

[GM]
ein festgelegter Text, der in dem String so vorkommen soll. Das ] wird wieder escaped.

.
Beliebiges Zeichen

+
1 - * Vorkommnisse des zuvor angegebenen Ausdrucks.

$
Ende des Strings, auf den bis hierhin genannten Regex darf im String kein Zeichen folgen.

In Textform:
Der String muss mit [GM] anfangen, gefolgt von mindestens einem oder mehr weiteren beliebigen Zeichen. Danach darf nichts mehr kommen.
12/03/2015 20:55 Kira Mikami#8
Quote:
Originally Posted by Seחsi View Post
Code:
def FaceButton(self):
	if not re.search("^\\[GM\\].+$", player.GetName()):
		self.Hide()
		return
	
	
	global AdminPanelOpen
	AdminPanelOpen = ui.Button()
	AdminPanelOpen.SetText("")
	AdminPanelOpen.SetPosition(wndMgr.GetScreenWidth()-110,wndMgr.GetScreenHeight()-120)
	AdminPanelOpen.SetSize(88, 21)
	AdminPanelOpen.SetEvent(self.LoadMainForm.Show)
	AdminPanelOpen.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
	AdminPanelOpen.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
	AdminPanelOpen.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
	AdminPanelOpen.Show()
	
	global AdminPanelText
	AdminPanelText = ui.TextLine()
	AdminPanelText.SetParent(AdminPanelOpen)
	AdminPanelText.SetVerticalAlignCenter()
	AdminPanelText.SetHorizontalAlignCenter()
	AdminPanelText.SetPosition(43,10)
	AdminPanelText.SetText("Admin Panel")
	AdminPanelText.Show()
import re nicht vergessen!

Was das ganze macht kannst du hier nachlesen:
[Only registered and activated users can see links. Click Here To Register...]
die Funktionen der einzelnen sind (fast) die selben wie in Java, nur finde ich die Liste in Java simpler aufgebaut, deshalb hier nochmal von Java:
[Only registered and activated users can see links. Click Here To Register...]



Der von mir gezeigte Regex prüft funktioniert wie folgt:

^
Der String muss an dieser Stelle starten, es darf nichts vorher stehen.

\\
Escape für [, weil [ eine eigene Funktion als Regex-Zeichen hat, wir diese aber hier nicht nutzen möchten sondern das Zeichen im String vorhanden sein soll

[GM]
ein festgelegter Text, der in dem String so vorkommen soll. Das ] wird wieder escaped.

.
Beliebiges Zeichen

+
1 - * Vorkommnisse des zuvor angegebenen Ausdrucks.

$
Ende des Strings, auf den bis hierhin genannten Regex darf im String kein Zeichen folgen.

In Textform:
Der String muss mit [GM] anfangen, gefolgt von mindestens einem oder mehr weiteren beliebigen Zeichen. Danach darf nichts mehr kommen.

Ich habe es getestet, und leider klappt es nicht. Du, können wir uns darüber in Skype unterhalten? Du scheinst mir, einiges zu verstehen, und ich lerne wirklich schnell. Magst du mir da ein wenig weiterhelfen? Ich möchte das Admin Panel nämlich langsam abschließen, brauche aber diese Abfrage, sonst kann ich es nicht vollkommen testen.
12/03/2015 22:20 xCPx#9
oder die uralte variante:

if (player.GetName()[:3] == "[GM]"):
12/04/2015 03:25 Kira Mikami#10
Quote:
Originally Posted by xCPx View Post
oder die uralte variante:

if (player.GetName()[:3] == "[GM]"):
Wenn ich das benutze, sagt mir die sysrr das:
Code:
global AdminPanelOpen
einen Fehler verursacht.
12/04/2015 14:59 DasSchwarzeT#11
Quote:
Originally Posted by Kira Mikami View Post
Wenn ich das benutze, sagt mir die sysrr das:
Code:
global AdminPanelOpen
einen Fehler verursacht.
Generell hier mit globals zu arbeiten ist ziemlich unnütz und unschön..
Sonst wurden hier ja bereits zahlreiche Lösungswege vorgeschlagen. Wenn etwas nicht funktioniert liegt es an dir..
12/04/2015 17:44 xGr33n#12
Quote:
Originally Posted by xCPx View Post
oder die uralte variante:

if (player.GetName()[:3] == "[GM]"):
oder auch

Ist kein GM:
PHP Code:
if player.GetName().find("[GM]") == -1
ist GM:

PHP Code:
if player.GetName().find("[GM]") != -1
12/04/2015 23:51 Kira Mikami#13
Quote:
Originally Posted by byte xGr33n View Post
oder auch

Ist kein GM:
PHP Code:
if player.GetName().find("[GM]") == -1
ist GM:

PHP Code:
if player.GetName().find("[GM]") != -1

Ich habe das Gefühl, der Fehler liegt an mir. Es klappt immer noch nicht.

Sysrr:
Code:
1204 23:49:16394 :: Traceback (most recent call last):

1204 23:49:16394 ::   File "networkModule.py", line 230, in SetGamePhase

1204 23:49:16394 ::   File "system.py", line 130, in __pack_import

1204 23:49:16395 ::   File "system.py", line 110, in _process_result

1204 23:49:16395 ::   File "game.py", line 2, in ?

1204 23:49:16395 ::   File "system.py", line 130, in __pack_import

1204 23:49:16395 ::   File "
1204 23:49:16395 :: <string>
1204 23:49:16395 :: ", line 
1204 23:49:16395 :: 362
1204 23:49:16395 :: 

1204 23:49:16395 ::     
1204 23:49:16395 :: if player.GetName().find("[GM]") != -1:

1204 23:49:16395 ::     
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 :: ^

1204 23:49:16395 :: IndentationError
1204 23:49:16395 :: : 
1204 23:49:16395 :: unindent does not match any outer indentation level
1204 23:49:16395 ::
12/05/2015 13:24 xGr33n#14
Quote:
Originally Posted by Kira Mikami View Post
Ich habe das Gefühl, der Fehler liegt an mir. Es klappt immer noch nicht.

Sysrr:
Code:
1204 23:49:16394 :: Traceback (most recent call last):

1204 23:49:16394 ::   File "networkModule.py", line 230, in SetGamePhase

1204 23:49:16394 ::   File "system.py", line 130, in __pack_import

1204 23:49:16395 ::   File "system.py", line 110, in _process_result

1204 23:49:16395 ::   File "game.py", line 2, in ?

1204 23:49:16395 ::   File "system.py", line 130, in __pack_import

1204 23:49:16395 ::   File "
1204 23:49:16395 :: <string>
1204 23:49:16395 :: ", line 
1204 23:49:16395 :: 362
1204 23:49:16395 :: 

1204 23:49:16395 ::     
1204 23:49:16395 :: if player.GetName().find("[GM]") != -1:

1204 23:49:16395 ::     
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 ::  
1204 23:49:16395 :: ^

1204 23:49:16395 :: IndentationError
1204 23:49:16395 :: : 
1204 23:49:16395 :: unindent does not match any outer indentation level
1204 23:49:16395 ::
Deine Einrückung ist falsch.
12/05/2015 16:11 Kira Mikami#15
Du meinst, die Spalte, wo der Text steht?

Ich habe in den letzten Tagen verdammt viel gelernt, aber genau das verstehe ich immer noch nicht..