Python Frage (game.py)

06/11/2015 22:19 NastyTeaBag#1
Heyho,

Bin nochn absoluter Clientmodding (Python) noob und hab ne Frage.
Hab bis jetzt schon geschafft eigene Buttons z. B. im Invi zu erstellen und ihnen z. B. ne Quest zuzuweisen.
Jetzt will ich aber (jetz kommen die mangelnden Python Kenntnisse) z. B. wenn in der uiinventory.py auf nen Button geklickt wird, ne Funktion in der game.py ausgeführt werden soll. (weiß nicht obs technisch so geht, oder anders :/).

Kann mir da jemand nen Tipp geben.
Wie gesagt hab mich bis jetzt allein durch die Scripts gewurschtelt aber gerade komme ich einfach nicht weiter.
Wäre cool wenn da wer helfen könnte :D

lg xFamoZz
06/11/2015 22:30 NotEnoughForYou#2
Funktion callen? Wenn sie static ist direkt, ansonsten über ein entsprechendes object.
06/11/2015 22:39 .Colossus.#3
[Only registered and activated users can see links. Click Here To Register...]

Hier ist es super erklärt.
06/12/2015 10:11 NastyTeaBag#4
Quote:
Originally Posted by .Colossus. View Post
[Only registered and activated users can see links. Click Here To Register...]

Hier ist es super erklärt.
Hast dir anscheinend net alles richtig durchgelesen^^
Das hab ich ja schon. Ich bekomme nur nicht hin ne Funktion aus der game.py aufzurufen. Habs so probiert aber das geht nicht..

PHP Code:
    def ClickLagerButton(self):
        
import game
        game
.meineFunktion() 
Beispiel ums mal an das von dir gepostete Tut anzulehnen.

Und @NotEnoughForYou

Hab davon keine Ahnung ^^ Mit nem kleinen Beispiel wäre mir sehr geholfen :)
06/12/2015 10:37 NotEnoughForYou#5
Import kommt an den Anfang, wie ist denn die Funktion in der game definiert?
06/12/2015 10:43 NastyTeaBag#6
So. Einfach ganz am Ende^^

PHP Code:
def meineFunktion(self):
      
self.teleport.Open() 
#EDIT: Achja. Ist es so wichtig dass der Import am Anfang ist?
06/12/2015 13:05 Nick#7
Quote:
Originally Posted by xFamoZz™ View Post
#EDIT: Achja. Ist es so wichtig dass der Import am Anfang ist?
Überhaupt nicht. Wird dieser am Kopf des Scripts platziert, so besteht eben die Möglichkeit, global, d.h. im kompletten Script auf das jeweilige Modul zuzugreifen. Andernfalls kann lediglich lokal, in derselben Funktion bzw. im selben Anweisungsblock darauf zugegriffen werden.

Code:
def FirstExample(self):
	import net
	net.SendChatPacket("elitePVPers")
	
def SecondExample(self):
	net.SendChatPacket("elitePVPers")
Letzteres würde also eine Fehlermeldung erzeugen. Findet ein Modul des Öfteren Verwendung, so empfiehlt es sich das Ganze zu globalisieren.

lg
06/12/2015 14:42 Zaturix#8
Imports können auch oben stehen das ist egal ob in der Funktion steht oder oben.
06/12/2015 15:12 NastyTeaBag#9
Quote:
Originally Posted by .JayZoN View Post
Überhaupt nicht. Wird dieser am Kopf des Scripts platziert, so besteht eben die Möglichkeit, global, d.h. im kompletten Script auf das jeweilige Modul zuzugreifen. Andernfalls kann lediglich lokal, in derselben Funktion bzw. im selben Anweisungsblock darauf zugegriffen werden.

Code:
def FirstExample(self):
	import net
	net.SendChatPacket("elitePVPers")
	
def SecondExample(self):
	net.SendChatPacket("elitePVPers")
Letzteres würde also eine Fehlermeldung erzeugen. Findet ein Modul des Öfteren Verwendung, so empfiehlt es sich das Ganze zu globalisieren.

lg
Der Meinung war auch. War nur verwundert dass NE4Y das explizit angesprochen hat.

Hab jetzt in der game.py diese Funktion:
Code:
def meineFunktion(self):
		import net
		net.SendChatPacket("elitePVPers")
in meiner uiinventory.py folgende:
Code:
def ClickLagerButton(self):
		import game
		game.meineFunktion()
Jedoch passiert nix.

Wenn ich jetzt aber die SendChatPacket Funktion direkt in die Click Funktion reinpacke, dann funktionierts (er schreibt ingame elitePVPers) (und nein es geht eig um ne andere Funktion brauch hier ja nur das Prinzip^^).

Woran liegts?
06/12/2015 15:49 Nick#10
Quote:
Originally Posted by xFamoZz™ View Post
Der Meinung war auch. War nur verwundert dass NE4Y das explizit angesprochen hat.

Hab jetzt in der game.py diese Funktion:
Code:
def meineFunktion(self):
		import net
		net.SendChatPacket("elitePVPers")
in meiner uiinventory.py folgende:
Code:
def ClickLagerButton(self):
		import game
		game.meineFunktion()
Jedoch passiert nix.

Wenn ich jetzt aber die SendChatPacket Funktion direkt in die Click Funktion reinpacke, dann funktionierts (er schreibt ingame elitePVPers) (und nein es geht eig um ne andere Funktion brauch hier ja nur das Prinzip^^).

Woran liegts?
Du hast die Funktion vermutlich unten angefügt, dementsprechend bezieht sich diese auf die 'GameWindow' Class, die Funktion würde demnach folgendermaßen aufgerufen werden;
Code:
import game
game.GameWindow().meineFunktion()
Das zur Theorie. In der Praxis wird das in der Form allerdings nicht funktionieren. Man könnte die Funktion außerhalb der Klassen platzieren, um sie per
Code:
import game
game.meineFunktion()
aufrufen zu können. Es wäre wissenswert, was du anstellen möchtest. Nenn das Ganze beim Namen, ich bin mir ziemlich sicher, dass dir auf weitaus unkomplizierteren Wegen geholfen werden könnte.

lg
06/12/2015 15:53 NastyTeaBag#11
Möchte die Warpmap die man eig über F6 öffnet, per Click auf nen Button öffnen.
Also in der game.py
Code:
onPressKeyDict[app.DIK_F6]	= lambda : self.teleport.Open()
Müsste halt das self.teleport.Open() irgendwie durch den Click auf den Button ausführen.
06/12/2015 16:39 Poccix#12
Wieso packst du die Funktion nicht direkt in die uiInventory.py ? :S
06/12/2015 20:57 NastyTeaBag#13
Schon versucht bzw. JayZon hats versucht, die Map geht dann zwar auf, aber es passiert nix wenn man drauf rumklickt (man wird nicht geportet).