Functie python - apasare tasta F5

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Închis
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

*Problemă/Întrebare:
Tipologie server:
*Resursă folosită: sursa/daily-reward-system-t81337.html
*ServerFiles utilizat:
*Syserr:
Poză:
*Detalii suplimentare:

Salut,
am bagat un system de daily gift si l-am setat sa se deschida de pe tasta F5.

Dar, acum vreau sa-i fac un buton special de pe care sa se deschida (cel din poza de la minimap) si nu reusesc sa-l bag direct cu uidailygift.DailyGift.Show() pentru ca systemu asta are ceva functii prin game.py si daca l bag asa nu se actualizeaza (nu apare timpul ramas,rewardul,zilele -- aparedoar fereastra)
Imagine
Systemul are functia asta in game care deschide fereastra:

Cod: Selectaţi tot

self.daily_reward.SetEvent(lambda : self.ManagerGiftSystem("Show|"))
si eu vreau sa fac in uiminimap butonul. Nu imi dau seama cum sa leg butonul de functia aia lambda ca sa se actualizeze si continutul ferestrei.

Si m-am gandit sa fac o functie care face clientul sa apese tasta F5.

Adica, apesi pe buton si functia din def-ul butonului sa apese butonul F5. Sper ca intelegeti ce vreau :)) Ii ca si cum as apasa pe buton dar de fapt apas F5.

Cod: Selectaţi tot

def ClickDaily(self):
	functie care apasa butonul F5 aici
Daca stie cineva cum se face functia asta, sau daca stie cineva cum pot baga sistemu asta pe buton, raman dator.
Avatar utilizator
ZeNu
Utilizator neserios / Untrustworthy user !

Utilizator neserios / Untrustworthy user !
Mesaje: 625
Membru din: 03 Aug 2017, 21:43
Regat: Shinsoo
Aprecieri: 122  
Mulţumiri: 496  
 Contact:
Medalii

In mod normal nu trebuia facut asa. O varianta lejera la ce vrei tu este in felul urmator:

1. Creezi o comanda, o adaugi in functia ta de deschidere din uiMiniMap
net.SendChatPacket("/command ...")
iar apoi din server cu ajutorul
CHAT_TYPE_COMMAND
trimiti in
serverCommandList
din
game.py
comanda de afisare fereastra
"my_command"	: self.myCommand,
. Si intr-un final in
def myCommand(self):
adaugi ce doresti tu.
Pentru acest mesaj, ZeNu for the post:
[HF]White
Imagine
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

ZeNu scrie: ↑25 Aug 2021, 16:18 In mod normal nu trebuia facut asa. O varianta lejera la ce vrei tu este in felul urmator:

1. Creezi o comanda, o adaugi in functia ta de deschidere din uiMiniMap
net.SendChatPacket("/command ...")
iar apoi din server cu ajutorul
CHAT_TYPE_COMMAND
trimiti in
serverCommandList
din
game.py
comanda de afisare fereastra
"my_command"	: self.myCommand,
. Si intr-un final in
def myCommand(self):
adaugi ce doresti tu.
in uiminimap.py la functia butonului am una cu SetEvent, dar asta face ca butonul sa actioneze def-ul ClickDaily

pot cumva sa il modific sa actioneze lambda : self.ManagerGiftSystem("Show|") din game.py?

Cod: Selectaţi tot

self.Daily.SetEvent(ui.__mem_func__(self.ClickDaily))
Avatar utilizator
ZeNu
Utilizator neserios / Untrustworthy user !

Utilizator neserios / Untrustworthy user !
Mesaje: 625
Membru din: 03 Aug 2017, 21:43
Regat: Shinsoo
Aprecieri: 122  
Mulţumiri: 496  
 Contact:
Medalii

Ti-am explicat deja cum trebuie. Lasa un mesaj pe Discord ...
Imagine
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

ZeNu scrie: ↑25 Aug 2021, 16:24 Ti-am explicat deja cum trebuie. Lasa un mesaj pe Discord ...
ti-am dat cerere
Avatar utilizator
Grimmjock
Nivel 3

Nivel 3
Mesaje: 428
Membru din: 26 Mai 2018, 14:45
Aprecieri: 73  
Mulţumiri: 232  
Medalii

Cel mai ușor mod de a face asta e prin a face setevent-ul unei funcții care va acționa în altă clasă de ex la tine, în game.py faci
self.interface.wndMiniMap.SetFuncEvent(ui.__mem_func__(self.OpenMyFunc))

în uiminimap la clasa MiniMap adaugi

def SetFuncEvent(self, event):
self.eventFunc = event

def OpenMyFuncFromSomeWhere(self):
if self.eventFunc:
self.eventFunc()

Ăsta e un exemplu banal, poți să ei exemplu SetWhisperEvent, și să nu uiți să adaugi în def destroy/init (uiminimap) self.eventFunc = None

Un mic sfat, evită să folosesti lambda pentru că o să ai scăpări de memorie, respectiv ștergerea unei clase nu se mai poate face și ajungi la renumita problemă "fereastră neagră după teleportare"
Pentru acest mesaj, Grimmjock for the post:
[HF]White
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

Multumesc ZeNu pentru ajutor! Subiect marcat ca rezolvat :star_struck:
Închis
Răspunsuri
3
Vizualizări
444
Răspunsuri
3
Vizualizări
422

Înapoi la “Probleme rezolvate”

  • Informaţie