[Python]Shopnamen mit Range einstellbar

12/20/2015 02:28 Creek'#1
Hallo,
Ich habe gesehen, dass viele diese Funktion schon haben und diese für Geld verkaufen und ich finde es ist nicht viel Arbeit und
genau aus diesem Grund habe ich es mal gecodet.

Der Code mag vielleicht nicht der schönste sein, aber er funktioniert :D

Das ganze wird dann so aussehen:
[Only registered and activated users can see links. Click Here To Register...]

Die Einstellungen werden jedesmal in einer externen Datei geladen und beim Clientstart mitgeladen.

Nun zum Tutorial:

in game.py:
Such nach :
Code:
self.__ProcessPreservedServerCommand()
Darunter folgendes einfügen:
Code:
		from uigameoption import OptionDialog
		if os.path.exists("lib/shoprange.lib"):
			try:
				f = open("lib/shoprange.lib","rb")
				self.ShopRange = f.read().strip()
				constInfo.MAX_SHOP_DISTANCE = float(self.ShopRange)
			except :
				pass
		
		
		OptionDialog().ctrlShopNames.SetSliderPos(constInfo.MAX_SHOP_DISTANCE / 10000.0)
		
		self.ShopUpdater = ui.Window()
		self.ShopUpdater.SetParentProxy(self)
		self.ShopUpdater.OnUpdate = self.__OnShopUpdate
		self.ShopUpdater.Show()
Such außerdem in game.py noch nach:
Code:
def OnUpdate(self):
Darüber folgendes einfügen:
Code:
	def __OnShopUpdate(self):
		uiPrivateShopBuilder.UpdateADBoard()
constinfo.py:
Einfach oben folgendes einfügen:
Code:
MAX_SHOP_DISTANCE = 10000.0
uigameoption.py:
Suchen nach:
Code:
			self.showsalesTextButtonList.append(GetObject("salestext_on_button"))
			self.showsalesTextButtonList.append(GetObject("salestext_off_button"))
Diesen beiden Zeilen löschen (da wir die Buttons nicht mehr brauchen) und folgendes einfügen:
Code:
			self.ctrlShopNames = GetObject("sales_name_controller")
			self.ctrlShopNames.SetSliderPos(constInfo.MAX_SHOP_DISTANCE / 1000.0)
			self.ctrlShopNames.SetEvent(ui.__mem_func__(self.__OnChangeShopRange))
			self.ctrlShopNames.Show()
Suchen nach
Code:
def __CheckPvPProtectedLevelPlayer(self):
Darüber folgendes einfügen:
Code:
	def OnUpdate(self):	
		self.ctrlShopNames.SetSliderPos(constInfo.MAX_SHOP_DISTANCE/10000)
		
	def __OnChangeShopRange(self):
		constInfo.MAX_SHOP_DISTANCE = (self.ctrlShopNames.GetSliderPos()*10000)
		f = open("lib/shoprange.lib","w+")
		f.write(str(constInfo.MAX_SHOP_DISTANCE))
		f.close()
Da wir die alten Buttons entfernen wollen nach folgendem suchen:
(wird 3x gefunden und 3x auskommentieren oder löschen)
Code:
self.RefreshShowSalesText()
Folgende Sachen auch entfernen oder auskommentieren (WIRD AUCH MEHRFACH VORHANDEN SEIN):
Code:
self.showsalesTextButtonList
Nun in folgender Datei: uiscript/gameoptiondialog.py
suchen nach und löschen (oder auskommentieren):
Code:
				{
					"name" : "salestext_on_button",
					"type" : "radio_button",

					"x" : LINE_DATA_X,
					"y" : 240,

					"text" : uiScriptLocale.OPTION_SALESTEXT_VIEW_ON,

					"default_image" : ROOT_PATH + "middle_button_01.sub",
					"over_image" : ROOT_PATH + "middle_button_02.sub",
					"down_image" : ROOT_PATH + "middle_button_03.sub",
				},
				{
					"name" : "salestext_off_button",
					"type" : "radio_button",

					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
					"y" : 240,

					"text" : uiScriptLocale.OPTION_SALESTEXT_VIEW_OFF,

					"default_image" : ROOT_PATH + "middle_button_01.sub",
					"over_image" : ROOT_PATH + "middle_button_02.sub",
					"down_image" : ROOT_PATH + "middle_button_03.sub",
				},
und foldendes davor einfügen:
Code:
				{
					"name" : "sales_name_controller",
					"type" : "sliderbar",

					"x" : LINE_DATA_X,
					"y" : 240,
				},
Nun öffnet ihr uiprivateshopbuilder.py
und such nach der Funktion
Code:
def UpdateADBoard():	
	for key in g_privateShopAdvertisementBoardDict.keys():
		g_privateShopAdvertisementBoardDict[key].Show()
Und ersetzt diese mit dieser Funktion:
Code:
def UpdateADBoard():
	for key in g_privateShopAdvertisementBoardDict.keys():
		distance = player.GetCharacterDistance(key)
		if distance <= constInfo.MAX_SHOP_DISTANCE:
			g_privateShopAdvertisementBoardDict[key].Show()
		else:
			g_privateShopAdvertisementBoardDict[key].Hide()

Das sollte nun alles sein oder ich habe etwas vergessen^^
Falls dies der Fall ist schreibt mich bitte mal an.
12/20/2015 04:11 MrTherzon#2
Sieht ganz Okay aus werde es mal die Tage ausprobieren.
12/20/2015 09:05 Cyber36#3
Heißt es also, wenn ich den Balken ganz nach rechts ziehe, dass der Name meines Shops auch aus größerer Entfernung sichtbar ist?
Ist das so das Release? :D
12/20/2015 09:41 xP3NG3Rx#4
'with open(blabla) as fh:' will not work with python 2.2 :)
12/20/2015 09:56 シスイ#5
Quote:
Originally Posted by Cyber36 View Post
Heißt es also, wenn ich den Balken ganz nach rechts ziehe, dass der Name meines Shops auch aus größerer Entfernung sichtbar ist?
Ist das so das Release? :D
Es heißt dass je größer du die Reichweite eingestellt hst, desto mehr Namen von den Shops siehst, da wo du dich gerade befindest.
12/20/2015 12:25 Creek'#6
Quote:
Originally Posted by xP3NG3Rx View Post
'with open(blabla) as fh:' will not work with python 2.2 :)
Ty I changed it.

Quote:
Originally Posted by Exygo View Post
And where is shoprange.lib ?
He create it if doesn't exist.
12/20/2015 22:35 Salep#7
Hab diesen Fehler :o

12/20/2015 22:37 .Colossus.#8
Quote:
Originally Posted by Salep View Post
Hab diesen Fehler :o

import constInfo fehlt.
12/20/2015 22:43 Salep#9
Quote:
Originally Posted by .Colossus. View Post
import constInfo fehlt.
Hab ich auch gedacht und in uiprivateshopbuilder geaddet. Ging jedoch nicht

Syserr error ist weg. Sehe nur keine Shopnamen mehr. Egal wie die Reichweite ist.