Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server
You last visited: Today at 12:32

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

Advertisement



[Python-Frage]Chatfenster mit Namen aus Liste öffnen

Discussion on [Python-Frage]Chatfenster mit Namen aus Liste öffnen within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
[Python-Frage]Chatfenster mit Namen aus Liste öffnen

Moin,

ich hab mir mit dem Gui Editor von KaMeR1337 ein Gui mit einer Liste erstellt,
die Liste wird nun mit "später" festgelegten Namen gefüllt, zurzeit nutze ich noch Testnamen. Ich versuche es nun, wie bei der Freundesliste hinzubekommen, sodass bei einem Doppelklick der Name des ausgewählten Listitems ausgelesen und dann ein Chatfenster mit dem Namen geöffnet wird.. Ich hab in der uimessenger.py schon nach Stichworten gesucht, um auf die richtige Stelle zu kommen, allerdings ohne Erfolg

Frage also, wie griege ich ein Chatfenster mit einem Namen der vorher aus einer Liste ausgelesen wurde auf?

Pythoncode:
Code:
# Gui generated with Gui Editor by KaMeR1337 ; www.metin2mod.tk
import ui
import dbg
import app
import net
import event
import messenger
import constInfo
import interfaceModule

class Dialog1(ui.Window):
	def __init__(self):
		ui.Window.__init__(self)
		self.BuildWindow()
		self.interface = interfaceModule.Interface()

	def __del__(self):
		ui.Window.__del__(self)

	def BuildWindow(self):
		self.Board = ui.BoardWithTitleBar()
		self.Board.SetSize(100, 100)
		self.Board.SetCenterPosition()
		self.Board.AddFlag('movable')
		self.Board.AddFlag('float')
		self.Board.SetTitleName('Info')
		self.Board.SetCloseEvent(self.Close)
		self.Board.Show()
		self.comp = Component()
		self.list_1, self.ListBox1 = self.comp.ListBoxEx(self.Board, 15, 31, 65, 60)
		Option = ["Buff", "Farmer1", "Farmer2"]
		for opt in Option:
			self.ListBox1.AppendItem(Item(opt))

	def OpenWindow(self):
		if self.Board.IsShow():
			self.Board.Hide()
		else:
			self.Board.Show()

	def Close(self):
		self.Board.Hide()

class Component:
	def Button(self, parent, buttonName, tooltipText, x, y, func, UpVisual, OverVisual, DownVisual):
		button = ui.Button()
		if parent != None:
			button.SetParent(parent)
		button.SetPosition(x, y)
		button.SetUpVisual(UpVisual)
		button.SetOverVisual(OverVisual)
		button.SetDownVisual(DownVisual)
		button.SetText(buttonName)
		button.SetToolTipText(tooltipText)
		button.Show()
		button.SetEvent(func)
		return button

	def ToggleButton(self, parent, buttonName, tooltipText, x, y, funcUp, funcDown, UpVisual, OverVisual, DownVisual):
		button = ui.ToggleButton()
		if parent != None:
			button.SetParent(parent)
		button.SetPosition(x, y)
		button.SetUpVisual(UpVisual)
		button.SetOverVisual(OverVisual)
		button.SetDownVisual(DownVisual)
		button.SetText(buttonName)
		button.SetToolTipText(tooltipText)
		button.Show()
		button.SetToggleUpEvent(funcUp)
		button.SetToggleDownEvent(funcDown)
		return button

	def EditLine(self, parent, editlineText, x, y, width, heigh, max):
		SlotBar = ui.SlotBar()
		if parent != None:
			SlotBar.SetParent(parent)
		SlotBar.SetSize(width, heigh)
		SlotBar.SetPosition(x, y)
		SlotBar.Show()
		Value = ui.EditLine()
		Value.SetParent(SlotBar)
		Value.SetSize(width, heigh)
		Value.SetPosition(1, 1)
		Value.SetMax(max)
		Value.SetLimitWidth(width)
		Value.SetMultiLine()
		Value.SetText(editlineText)
		Value.Show()
		return SlotBar, Value

	def TextLine(self, parent, textlineText, x, y, color):
		textline = ui.TextLine()
		if parent != None:
			textline.SetParent(parent)
		textline.SetPosition(x, y)
		if color != None:
			textline.SetFontColor(color[0], color[1], color[2])
		textline.SetText(textlineText)
		textline.Show()
		return textline

	def RGB(self, r, g, b):
		return (r*255, g*255, b*255)

	def SliderBar(self, parent, sliderPos, func, x, y):
		Slider = ui.SliderBar()
		if parent != None:
			Slider.SetParent(parent)
		Slider.SetPosition(x, y)
		Slider.SetSliderPos(sliderPos / 100)
		Slider.Show()
		Slider.SetEvent(func)
		return Slider

	def ExpandedImage(self, parent, x, y, img):
		image = ui.ExpandedImageBox()
		if parent != None:
			image.SetParent(parent)
		image.SetPosition(x, y)
		image.LoadImage(img)
		image.Show()
		return image

	def ComboBox(self, parent, text, x, y, width):
		combo = ui.ComboBox()
		if parent != None:
			combo.SetParent(parent)
		combo.SetPosition(x, y)
		combo.SetSize(width, 15)
		combo.SetCurrentItem(text)
		combo.Show()
		return combo

	def ThinBoard(self, parent, moveable, x, y, width, heigh, center):
		thin = ui.ThinBoard()
		if parent != None:
			thin.SetParent(parent)
		if moveable == TRUE:
			thin.AddFlag('movable')
			thin.AddFlag('float')
		thin.SetSize(width, heigh)
		thin.SetPosition(x, y)
		if center == TRUE:
			thin.SetCenterPosition()
		thin.Show()
		return thin

	def Gauge(self, parent, width, color, x, y):
		gauge = ui.Gauge()
		if parent != None:
			gauge.SetParent(parent)
		gauge.SetPosition(x, y)
		gauge.MakeGauge(width, color)
		gauge.Show()
		return gauge

	def ListBoxEx(self, parent, x, y, width, heigh):
		bar = ui.Bar()
		if parent != None:
			bar.SetParent(parent)
		bar.SetPosition(x, y)
		bar.SetSize(width, heigh)
		bar.SetColor(0x77000000)
		bar.Show()
		ListBox=ui.ListBoxEx()
		ListBox.SetParent(bar)
		ListBox.SetPosition(0, 0)
		ListBox.SetSize(width, heigh)
		ListBox.Show()
		scroll = ui.ScrollBar()
		scroll.SetParent(ListBox)
		scroll.SetPosition(width-15, 0)
		scroll.SetScrollBarSize(heigh)
		scroll.Show()
		ListBox.SetScrollBar(scroll)
		return bar, ListBox

class Item(ui.ListBoxEx.Item):
	def __init__(self, text):
		ui.ListBoxEx.Item.__init__(self)
		self.canLoad=0
		self.text=text
		self.textLine=self.__CreateTextLine(text[:50])
	def __del__(self):
		ui.ListBoxEx.Item.__del__(self)
	def GetText(self):
		return self.text
	def SetSize(self, width, height):
		ui.ListBoxEx.Item.SetSize(self, 2*20-4, height)
	def __CreateTextLine(self, text):
		textLine=ui.TextLine()
		textLine.SetParent(self)
		textLine.SetPosition(0, 0)
		textLine.SetText(text)
		textLine.Show()
		return textLine

Dialog1().Show()
.yorliK is offline  
Thanks
1 User
Old 09/28/2014, 16:50   #2
 
Jоe's Avatar
 
elite*gold: 0
Join Date: Aug 2012
Posts: 749
Received Thanks: 188
Code:
#uimessenger.py
class MessengerItem(ui.Window):
	def __init__(self, getParentEvent):
		ui.Window.__init__(self)

		self.SetParent(getParentEvent())
		...
		self.getParentEvent = getParentEvent	
	def GetName(self):
		return self.name
	def OnWhisper(self):
		pass	
class MessengerMemberItem(MessengerItem):
	def IsOnline(self):
		if self.STATE_ONLINE == self.state:
			return TRUE

		return FALSE
	def OnWhisper(self):
		if self.IsOnline():
			self.getParentEvent().whisperButtonEvent(self.GetName()
class MessengerWindow(ui.ScriptWindow):
	def __init__(self):
		...
		self.selectedItem = None
		self.whisperButtonEvent = lambda *arg: None
	def SetWhisperButtonEvent(self, event):
		self.whisperButtonEvent=event
	def OnPressWhisperButton(self):
		if self.selectedItem:
			self.selectedItem.OnWhisper()
Ich weiß nicht wo das Problem liegt. - Es ist eine reine Python Verständnissache.
Jоe is offline  
Thanks
1 User
Old 09/28/2014, 19:23   #3

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Danke erstmal für die Antwort, aber wo ist da jetzt die Funktion? ich sehe da keine, welche bei Doppelklick auf den Namen das Chatfenster öffnet. Das ist ja grade das Problem..
.yorliK is offline  
Old 09/28/2014, 19:34   #4
 
Jоe's Avatar
 
elite*gold: 0
Join Date: Aug 2012
Posts: 749
Received Thanks: 188
Habs nicht ganz gelesen, dennoch dasselbe Prinzip.
Code:
def OnMouseLeftButtonDoubleClick(self):
		self.getParentEvent().OnDoubleClickItem(self)	def OnDoubleClickItem(self, item):

		if not self.selectedItem:
			return

		if self.selectedItem.IsOnline():
			self.OnPressWhisperButton()
Es ist daher nicht unbedingt "eine" Funktion, da es ein System(mit mehreren Klassen, die wiederum Methoden besitzen) ist und viele Faktoren entscheidend sind.
Jоe is offline  
Thanks
1 User
Old 09/28/2014, 20:20   #5

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Das heißt also, ich muss ziemlich viel machen, nur um das Chatfenster mit nem Namen zu öffnen? Es geht mir nicht darum ob der Spieler online ist, es soll einfach ein Chatfenster mit den Name geöffnet werden..
Man kann es ja per Shift+Enter holen, leider finde ich die Funktion im Client dafür nicht, habe mir in der game.py alle onPressKeyDict's angeschaut..
.yorliK is offline  
Old 09/28/2014, 20:35   #6
 
Jоe's Avatar
 
elite*gold: 0
Join Date: Aug 2012
Posts: 749
Received Thanks: 188
Quote:
Originally Posted by Kilroy. View Post
Das heißt also, ich muss ziemlich viel machen, nur um das Chatfenster mit nem Namen zu öffnen? Es geht mir nicht darum ob der Spieler online ist, es soll einfach ein Chatfenster mit den Name geöffnet werden..
Man kann es ja per Shift+Enter holen, leider finde ich die Funktion im Client dafür nicht, habe mir in der game.py alle onPressKeyDict's angeschaut..
Oh jee...
Du könntest natürlich auch auf die Datei "uimessenger.py" verweisen und bestehende Klassen/Methoden verwenden. Aber wenn dir das schon schwer fällt, würde ich mir erst mal Python genauer anschauen, bevor ich da was rum ändere.
Jоe is offline  
Old 10/01/2014, 01:43   #7
 
.He3o Copy™'s Avatar
 
elite*gold: 1
Join Date: Apr 2013
Posts: 273
Received Thanks: 236
Nunja ich hab jetzt oft gelesen das du den Leuten viel bei Quests geholfen hast da hab ich mir gedacht, der Kerl hat es verdient das man ihm auch etwas hilft.
Ich weiß nicht genau wie du dir das vorgestellt hast.
Möchtest du direkt eine Nachricht an den Spieler senden oder einfach nur ein Whisperchat öffnen mit einem bestimmten namen? Ich mach dir einfach mal ein Beispiel mit der Lösung 2.

PHP Code:
def OpenWhisperChat(selfparameter):
    
import chat
    chat
.CreateWhisper(parameter)
    
chat.SetWhisperBoxSize(parameterself.GetWidth() - 60self.GetHeight() - 90
als Funktion zur Chatöffnung, müsste in der Theorie gehen ist leider untested.

In die BuildWindow Funktion noch das hier hinzufügen:
PHP Code:
self.ListBox1.SetSelectEvent(self.OnDoubleClickItem
noch eine neue Funktion:
PHP Code:
def OnDoubleClickItem(selfitem1):
    
self.OpenWhisperChat(item1.getText()) 
Das Ganze geht natürlich viel kürzer aber ich wollte es mal etwas übersichtlicher machen


Viel Spaß damit

Copy


PS: Falls etwas nicht klappen sollte poste einfach die Fehler
.He3o Copy™ is offline  
Thanks
1 User
Old 10/01/2014, 16:32   #8

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Vielen Dank! Echt klasse, das du mir hilfst!

Fehler bekomme ich keine, allerdings wird kein "Whisperchat" geöffnet. Ich hab mal, um zu schauen, ob der Name denn richtig ausgelesen wird (vielleicht öffnet sich deswegen kein Chatfenster), den Namen im Chat zeigen lassen.
PHP Code:
chat.AppendChat(chat.CHAT_TYPE_INFOitem1.GetText()) 
So habe ich herausgefunden, dass der Name richtig ausgelesen wird, außerdem habe ich herausgefunden, das die Funktion OnDoubleClickItem schon bei einem einmaligen Klick ausgeführt wird. Nur der "Whisperchat" öffnet sich nicht.
.yorliK is offline  
Old 10/01/2014, 16:50   #9
 
.He3o Copy™'s Avatar
 
elite*gold: 1
Join Date: Apr 2013
Posts: 273
Received Thanks: 236
Quote:
Originally Posted by Kilroy. View Post
Vielen Dank! Echt klasse, das du mir hilfst!

Fehler bekomme ich keine, allerdings wird kein "Whisperchat" geöffnet. Ich hab mal, um zu schauen, ob der Name denn richtig ausgelesen wird (vielleicht öffnet sich deswegen kein Chatfenster), den Namen im Chat zeigen lassen.
PHP Code:
chat.AppendChat(chat.CHAT_TYPE_INFOitem1.GetText()) 
So habe ich herausgefunden, dass der Name richtig ausgelesen wird, außerdem habe ich herausgefunden, das die Funktion OnDoubleClickItem schon bei einem einmaligen Klick ausgeführt wird. Nur der "Whisperchat" öffnet sich nicht.
OnDoubleClickItem ist ein beliebiger Name da müsstest du noch eine Abfrage rein hauen wenn es nur alle 2 mal ausgeführt werden soll. Naja dann muss es wohl umständlicher sein...
Leider hab ich gerade kein Server zum testen da...

Probiere einfach mal
PHP Code:
self.interface = interfaceModule.Interface()
self.interface.RecvWhisper(parameter
.He3o Copy™ is offline  
Thanks
1 User
Old 10/01/2014, 17:18   #10

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Quote:
Originally Posted by .He3o Copy™ View Post
OnDoubleClickItem ist ein beliebiger Name da müsstest du noch eine Abfrage rein hauen wenn es nur alle 2 mal ausgeführt werden soll. Naja dann muss es wohl umständlicher sein...
Leider hab ich gerade kein Server zum testen da...

Probiere einfach mal
PHP Code:
self.interface = interfaceModule.Interface()
self.interface.RecvWhisper(parameter
Mh okay, ich dachte OnDoubleClickItem wird wie OnUpdate erkannt

RecvWhisper habe ich, nachdem ich das Gui entworfen hatte, gleich als erstes ausprobiert, da kam aber der gleiche Fehler wie jetzt.

Code:
1001 17:18:14544 ::   File "interfaceModule.py", line 1281, in RecvWhisper

1001 17:18:14544 :: AttributeError
1001 17:18:14544 :: : 
1001 17:18:14544 :: 'Interface' object has no attribute 'whisperDialogDict'
1001 17:18:14544 ::
.yorliK is offline  
Old 10/01/2014, 17:27   #11
 
.He3o Copy™'s Avatar
 
elite*gold: 1
Join Date: Apr 2013
Posts: 273
Received Thanks: 236
Quote:
Originally Posted by Kilroy. View Post
Mh okay, ich dachte OnDoubleClickItem wird wie OnUpdate erkannt

RecvWhisper habe ich, nachdem ich das Gui entworfen hatte, gleich als erstes ausprobiert, da kam aber der gleiche Fehler wie jetzt.

Code:
1001 17:18:14544 ::   File "interfaceModule.py", line 1281, in RecvWhisper

1001 17:18:14544 :: AttributeError
1001 17:18:14544 :: : 
1001 17:18:14544 :: 'Interface' object has no attribute 'whisperDialogDict'
1001 17:18:14544 ::
schick mal dein interfacemodul
.He3o Copy™ is offline  
Thanks
1 User
Old 10/01/2014, 17:35   #12

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Ist im Anhang, ich hab mir die aber auch schon angeschaut und da ist "whisperDialogDict" vorhanden.. daher verstehe ich den Fehler nicht
Attached Files
File Type: rar interfacemodule.rar (8.8 KB, 2 views)
.yorliK is offline  
Old 10/01/2014, 17:54   #13
 
.He3o Copy™'s Avatar
 
elite*gold: 1
Join Date: Apr 2013
Posts: 273
Received Thanks: 236
Ok sollte soweit passen aber ich Freunde mich mit der aufwendigen Methode nicht so ganz an ich teste das iwie heute nochmal...
.He3o Copy™ is offline  
Thanks
1 User
Old 10/01/2014, 17:59   #14

 
.yorliK's Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
Quote:
Originally Posted by .He3o Copy™ View Post
Ok sollte soweit passen aber ich Freunde mich mit der aufwendigen Methode nicht so ganz an ich teste das iwie heute nochmal...

Du kannst auch bei mir per TeamViewer testen, wenn du möchtest. Ich hab damit kein Problem, gibt nichts zu verheimlichen
.yorliK is offline  
Reply

Tags
chatfenster, liste, python


Similar Threads Similar Threads
Python Dateien öffnen
05/12/2013 - Metin2 Private Server - 3 Replies
Wie öffne ich den bei verschlüsselten Clienten Python Dateien? Ich würde es gerne auf dem Server "Seyonin" machen/probieren. Wäre gut wenn ihr mir helfen könntet :-) Falls ihr auf dem Server spielt würde ich euch auch belohnen :') Dankeschön
Python Dateien öffnen
03/20/2013 - Metin2 Private Server - 2 Replies
ist es möglich Python Dateien zu öffnen auf Servern wie Shiro2? Also wenn man z.B. bei Shiro2 Python Loader öffnen will schließt sich der client, ist es möglich diese zu umgehen?
Client schließt sich beim Chatfenster öffnen
10/10/2012 - Metin2 Private Server - 1 Replies
Hey Leute , wie oben genannt schließt sich der client einfach , wenn ich jemanden anschreiben möchte.(Beim öffnen des Fensters) bitte um Hilfe.
Per Python Firefox öffnen?
10/10/2011 - Metin2 Private Server - 2 Replies
Halli Hallo Ich hab da mal ne frage. und zwar wie kann ich per button klick,firefox browser von meinem pc öffnen? Also brauche nur die funktion,wäre nett wenn mir schnellstmöglich geholfen werden könnte.
Frage Score Liste öffnen?
12/21/2009 - CrossFire - 14 Replies
Hy also wie öffnet man die Score liste da wo die Kill / death steht? mitTAB geht es nict?



All times are GMT +1. The time now is 12:34.


Powered by vBulletin®
Copyright ©2000 - 2026, 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 ©2026 elitepvpers All Rights Reserved.