Quest + GUI aktualisieren

02/02/2016 12:41 IzeBreakzz#1
HeyHo Com,

ich habe jetzt endlich geschafft alles passend einzustellen. Also Mysql, Quest und Datenbank laufen. Beim Login aktualisiert sich das GUI auch, aber während dem Spiel wird es auch wenn ich die Belohnung erhalte, nicht aktualisiert...

Welchen Questbefehl brauche ich denn am Ende der Quest damit er das GUI aktualisiert? Also eben nicht erst nach dem einloggen.

Vielen Dank schon einmal vorab.

Viele Grüße

IzeBreakzz
02/02/2016 12:51 rollback#2
Kommt drauf an wie du das ganze umgesetzt hast. Im Normalfall den gleichen wie auch beim Login.
02/02/2016 14:45 IzeBreakzz#3
Habe ich gesetzt. So sieht es bei mir aus:
PHP Code:
quest testr begin
    state start begin
        when 101.kill begin
            mysql_query
("UPDATE player.player SET TestH = TestH+20 WHERE id ='"..pc.get_player_id().."'")
            
cmdchat("TestH "..TestH.TestH[1])
        
end
    end
end 
02/02/2016 17:35 gerald500#4
du musst im client sagen er soll deine variable auf den wert setzen und danach in def OnUpdate sagen er soll das immer wieder neu reinschreiben

also würd ich die funktion so machen in python(angenommen deine Variable ist in der constinfo)

Code:
def Money(self, money):
	import constInfo
	constInfo.MONEY = 0
	constInfo.MONEY = int(money)


so und in der class deiner gui machste eine DefOnUpdate sollte ca so aussehen:
Code:
def OnUpdate(self):
	import constInfo
	self.Textline.SetText(str(constInfo.MONEY))
und mach doch nicht immer einen neuen thread auf xD
02/02/2016 18:14 DasSchwarzeT#5
Quote:
Originally Posted by gerald500 View Post
du musst im client sagen er soll deine variable auf den wert setzen und danach in def OnUpdate sagen er soll das immer wieder neu reinschreiben

also würd ich die funktion so machen in python(angenommen deine Variable ist in der constinfo)

Code:
def Money(self, money):
	import constInfo
	constInfo.MONEY = 0
	constInfo.MONEY = int(money)

so und in der class deiner gui machste eine DefOnUpdate sollte ca so aussehen:
Code:
def OnUpdate(self):
	import constInfo
	self.Textline.SetText(str(constInfo.MONEY))
und mach doch nicht immer einen neuen thread auf xD
Total sinnlos. Wenn sich der Wert ändert, kann der Text einfach sofort geupdated werden. Sein Problem hier liegt Server- und nicht Clientside.
02/02/2016 18:24 gerald500#6
Quote:
Originally Posted by DasSchwarzeT View Post
Total sinnlos. Wenn sich der Wert ändert, kann der Text einfach sofort geupdated werden. Sein Problem hier liegt Server- und nicht Clientside.
ach so ein blödsinn wenn er den ,wert ändert am server muss er ihn einfach nur neu an den client schicken

und er hat den wert nur beim einloggen neu auslesen lassen und an den client geschickt das muss er einfach bei jeder änderung des wertes machen. genau das wird sein problem sein nix anderes

anstatt hier zu meckern könntest du ihm lieber sagen was er deiner meinung nach machen soll lol
02/02/2016 18:27 rollback#7
Quote:
Originally Posted by gerald500 View Post
du musst im client sagen er soll deine variable auf den wert setzen und danach in def OnUpdate sagen er soll das immer wieder neu reinschreiben

also würd ich die funktion so machen in python(angenommen deine Variable ist in der constinfo)

Code:
def Money(self, money):
	import constInfo
	constInfo.MONEY = 0
	constInfo.MONEY = int(money)


so und in der class deiner gui machste eine DefOnUpdate sollte ca so aussehen:
Code:
def OnUpdate(self):
	import constInfo
	self.Textline.SetText(str(constInfo.MONEY))
und mach doch nicht immer einen neuen thread auf xD
Das ist aber eine seeeehr unsaubere Herangehensweise
02/02/2016 18:34 gerald500#8
Quote:
Originally Posted by Seחsi View Post
Das ist aber eine seeeehr unsaubere Herangehensweise
und wie würdest du des denn machen wenn es so unsauber ist ?

gut er muss es nicht unbedingt über def OnUpdate lösen er kanns auch einfach in der class eine funktion machen die die textline neu schreibt

würde es aber trotzdem in eine variable packen falls man den wert noch wo anders benötigt
02/02/2016 18:56 rollback#9
Quote:
Originally Posted by gerald500 View Post
und wie würdest du des denn machen wenn es so unsauber ist ?

gut er muss es nicht unbedingt über def OnUpdate lösen er kanns auch einfach in der class eine funktion machen die die textline neu schreibt

würde es aber trotzdem in eine variable packen falls man den wert noch wo anders benötigt
Etwa so:

Code:
import ui


class NewCurrency:
	__INSTANCE = NewCurrency()
	
	__amount = None
	__amountChangeListeners = None
	
	def __init__(self):
		self.__amountChangeListeners = []
		self.SetAmount(0)
	
	@staticmethod
	def GetInstance():
		return NewCurrency.__INSTANCE
	
	def __del__(self):
		self.__amount = None
		self.__amountChangeListeners = None
	
	def SetAmount(self, amount):
		self.__amount = amount
		
		for func in self.__amountChangeListeners:
			func(amount)
	
	def GetAmount(self):
		return self.__amount
	
	def AddOnAmountChanged(self, func):
		if not func:
			return
		
		self.__amountChangeListeners.append(func)


class YourGUIClass(ui.Irgendwas):
	__yourTextLine = None
	
	def __init__(self):
		self.__yourTextLine = ui.Textline()
		NewCurrency.GetInstance().AddOnAmountChanged(self.__SetAmount)
	
	def __del__(self):
		self.__yourTextLine = None
	
	def __SetAmount(self, amount):
		self.__yourTextLine.SetText(str(amount))
Dann in der game.py beim empfangen der cmdchats in etwa sowas:
Code:
from NewCurrency import NewCurrency
NewCurrency.GetInstance().SetAmount(<<amount>>)
02/02/2016 19:04 gerald500#10
Quote:
Originally Posted by Seחsi View Post
Etwa so:

Code:
import ui


class NewCurrency:
	__INSTANCE = NewCurrency()
	
	__amount = None
	__amountChangeListeners = None
	
	def __init__(self):
		self.__amountChangeListeners = []
		self.SetAmount(0)
	
	@staticmethod
	def GetInstance():
		return NewCurrency.__INSTANCE
	
	def __del__(self):
		self.__amount = None
		self.__amountChangeListeners = None
	
	def SetAmount(self, amount):
		self.__amount = amount
		
		for func in self.__amountChangeListeners:
			func(amount)
	
	def GetAmount(self):
		return self.__amount
	
	def AddOnAmountChanged(self, func):
		if not func:
			return
		
		self.__amountChangeListeners.append(func)


class YourGUIClass(ui.Irgendwas):
	__yourTextLine = None
	
	def __init__(self):
		self.__yourTextLine = ui.Textline()
		NewCurrency.GetInstance().AddOnAmountChanged(self.__SetAmount)
	
	def __del__(self):
		self.__yourTextLine = None
	
	def __SetAmount(self, amount):
		self.__yourTextLine.SetText(str(amount))
Dann in der game.py beim empfangen der cmdchats in etwa sowas:
Code:
from NewCurrency import NewCurrency
NewCurrency.GetInstance().SetAmount(<<amount>>)
und du meinst das er damit noch klar kommt ?
02/02/2016 19:04 IzeBreakzz#11
Vielen Dank schon mal für die vielen Antworten :) Bloß ist hier jetzt die Frage.. Wie bzw. wo liest er bei dem python Befehl denn die Werte aus? Also die die ich ändern muss.

Python ist nicht nur neu für mich, es ist ein bisschen wie alt-ägyptisch, man versucht zwar was raus zu lesen, im Endeffekt klappt es aber trotzdem nicht ^^
02/02/2016 19:10 gerald500#12
add mich einfach in skype ich mach dir das kurz:gerald5867