[Code] Yangspeicher kaufen

05/26/2014 15:12 Krittiker#1
Hallo ihr Elitepvper ;)

Habe als ich für mich einen kleinen Python Bot geschrieben habe eine kleine Funktion gebastelt um Yangspeicher zu kaufen.

Zur Erklärung: Auf vielen P-Servern droppt man so viel Yang, dass man nicht alles im Invi tragen kann.
Dementsprechend haben viele Server ein Item mit einer Quest belegt, auf das man klicken kann und sich dort einen Yangspeicher/Tresor oder wie auch immer das heißt kaufen kann.

Ich habe die QuestHook Funktion von DaRealFreak mit verwendet, somit gehen Credits an ihn obwohl er nicht mehr Aktiv ist.

Ihr müsst nur die Item-Vnum im Code anpassen, dann sollte das ganze lauffähig sein.
Den Wert des Yangspeichers müsst ihr ebenfalls anpassen, bei mir steht er auf 500kk.

Hier der Python Code:

Code:
class YangBuy(ui.ScriptWindow):
	State = "Anschalten"
			
	def __init__(self):
		ui.ScriptWindow.__init__(self)
		
		self.OldRecv = game.GameWindow.OpenQuestWindow
		
		
		self.YangBuyButton = ui.Button()
		self.YangBuyButton.SetPosition(2, 405)
		self.YangBuyButton.SetSize(88,21)
		self.YangBuyButton.SetUpVisual("d:/ymir work/ui/public/large_Button_01.sub")
		self.YangBuyButton.SetOverVisual("d:/ymir work/ui/public/large_Button_02.sub")
		self.YangBuyButton.SetDownVisual("d:/ymir work/ui/public/large_Button_03.sub")
		self.YangBuyButton.SetText("Speicher")
		self.YangBuyButton.SetEvent(self.Configuration)
		self.YangBuyButton.Show()
		
	def __del__(self):
		ui.ScriptWindow.__del__(self)
		self.StateButton.Hide()

	def InstallQuestWindowHook(self):
		game.GameWindow.OpenQuestWindow = self.HookedQuestWindow
		chat.AppendChat(1, "Quest Window wurde erfolgreich gehooked.")		
		
	def UnHookQuestWindow(self):
		game.GameWindow.OpenQuestWindow = self.OldRecv
		chat.AppendChat(1, "Quest Window Hook wurde entfernt.")
		
	def HookedQuestWindow(self, skin, idx):
		pass		


	def Configuration(self):
		if str(self.State) == "Ausschalten":
			self.State = "Anschalten"
			chat.AppendChat(chat.CHAT_TYPE_INFO, "[+] YangSpeicher Kauf -> AUS [+]")		
			self.YangBuyButton.SetText("Speicher kauf Anschalten")
			self.UnHookQuestWindow()
			self.DisableTresor()
		else:
			self.State = "Ausschalten"
			chat.AppendChat(chat.CHAT_TYPE_INFO, "[+] YangSpeicher Kauf -> AN [+]")
			self.YangBuyButton.SetText("Tresore Ausschalten")
			self.InstallQuestWindowHook()
			self.BuyTresor()
		
	def BuyTresor(self):
		if str(self.State) == "Ausschalten":
			if player.GetMoney() > 500000000: 
				for i in xrange(player.INVENTORY_PAGE_SIZE*3):
					Tresor = player.GetItemIndex(i)
					if Tresor == 70044:
						net.SendItemUsePacket(i)
						event.SelectAnswer(1, 0)
						break
		self.delayTresor = WaitingDialog()
		self.delayTresor.Open(1)
		self.delayTresor.SAFE_SetTimeOverEvent(self.BuyTresor)
		
		
	def DisableTresor(self):
		pass
	

	def SAFE_SetTimeOverEvent(self, event):
		self.eventTimeOver = ui.__mem_func__(event)

	def SAFE_SetExitEvent(self, event):
		self.eventExit = ui.__mem_func__(event)
Hoffe jemand hat dafür verwendung.
05/26/2014 15:45 soldtodie#2
Welche Server wären das?
05/26/2014 19:28 AKBeatz#3
Quote:
Originally Posted by soldtodie View Post
Welche Server wären das?

Pandora2 hat eine Bank.. wo man das Yang einlagern kann bis zum unendliche :P

Guck dir ein paar Server an , jeder Server hat verschiedene Methoden ihr Yang zu speichern.
05/26/2014 19:58 Krittiker#4
Ich bin zur Zeit nicht sehr aktiv am spielen, auf Aphira2 gibts so ein Item, auf Lavanda2 gabs/gibts so ein item (lange nicht mehr da gespielt)
ach gottchen, ich hab diverse Server gesehen wo das so funktioniert hat.

Wenn ihr keine Verwendung dafür habt, dann halt nicht. Ich wollte es einfach nur mal zeigen weil es mir nützlich erschien.
05/27/2014 00:12 Mi4uric3#5
Kleine Anmerkung, um das ständige Wiederholen der Wörter "An-" und "Ausschalten", welches nämich fehleranfällig ist, da man sich da mal vertippen kann und das der Python-Interpreter aber nicht als "falsch" bemängelt, würde ich dir empfehlen, oben in den Code 2 Konstanten reinzumachen, und im Code die Konstanten zu verwenden, anstatt der String-Literale :) Ist auch sauberer vom Coder her :)

Zudem würde ich auch eigentlich keine Strings dafür nehmen sondern Zahlen (Siehe ENUMs in C/C++)

Ich bin kein Python-Experte, aber Google hätte mir dann etwa folgendes vorgeschlagen:

Code:
from enum import Enum
class Status(Enum):
	on = 1
	off = 2

...

if (self.State == Status.on)
	dostuff()
Wenn die in Metin2 verwendete Python-Version das nicht kann, dann halt einfach Konstanten verwenden:

Code:
STATE_ON = 1
STATE_OFF = 2

...

if (self.State == STATE_ON)
	dostuff()
05/27/2014 05:33 tvstreaming#6
danke für das script und deine arbeit! :)
05/28/2014 10:22 Krittiker#7
Danke dir Mi4auric3 für den Tip, ich weiss ja, dass der Code an sich totaler Müll ist aber es ist nun mal funktionierender Müll (bei mir zumindest ^^ )

Und schön, dass es mindestens einer gebrauchen konnte ;)
05/29/2014 06:18 xXExECuTeXx#8
Funktioniert! Dankööö

Windows 8.1 Enterprise 64x
06/05/2014 21:02 alexutu2013#9
Hi someone can make a .py file from this code ??? I''ve tried but I''ve received an error .....""ui is not defined" ....please help .....( sorry my english sucks )
06/05/2014 21:21 noahrmal#10
Krittiker forget to post the imports, write down in the first line:

Code:
import ui,game,chat,player,event,net
you also have to add at the end:

Code:
class WaitingDialog(ui.ScriptWindow):

	def __init__(self):
		ui.ScriptWindow.__init__(self)
		self.eventTimeOver = lambda *arg: None
		self.eventExit = lambda *arg: None

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

	def Open(self, waitTime):
		curTime = time.clock()
		self.endTime = curTime + waitTime
		self.Show()		

	def Close(self):
		self.Hide()

	def SAFE_SetTimeOverEvent(self, event):
		self.eventTimeOver = ui.__mem_func__(event)

	def SAFE_SetExitEvent(self, event):
		self.eventExit = ui.__mem_func__(event)
		
	def OnUpdate(self):
		lastTime = max(0, self.endTime - time.clock())
		if 0 == lastTime:
			self.Close()
			self.eventTimeOver()
		else:
			return
		
	def OnPressExitKey(self):
		self.Close()
		return TRUE

x=YangBuy()
x.Show()
06/05/2014 21:39 alexutu2013#11
:( [Only registered and activated users can see links. Click Here To Register...]
06/06/2014 15:01 noahrmal#12
Quote:
Originally Posted by alexutu2013 View Post
:( [Only registered and activated users can see links. Click Here To Register...]
Please upload your python file, I can repair it ;)
06/06/2014 15:54 [uLow]Beni#13
Quote:
Originally Posted by Mi4uric3 View Post
Kleine Anmerkung, um das ständige Wiederholen der Wörter "An-" und "Ausschalten", welches nämich fehleranfällig ist, da man sich da mal vertippen kann und das der Python-Interpreter aber nicht als "falsch" bemängelt, würde ich dir empfehlen, oben in den Code 2 Konstanten reinzumachen, und im Code die Konstanten zu verwenden, anstatt der String-Literale :) Ist auch sauberer vom Coder her :)

Zudem würde ich auch eigentlich keine Strings dafür nehmen sondern Zahlen (Siehe ENUMs in C/C++)

Ich bin kein Python-Experte, aber Google hätte mir dann etwa folgendes vorgeschlagen:

Code:
from enum import Enum
class Status(Enum):
	on = 1
	off = 2

...

if (self.State == Status.on)
	dostuff()
Wenn die in Metin2 verwendete Python-Version das nicht kann, dann halt einfach Konstanten verwenden:

Code:
STATE_ON = 1
STATE_OFF = 2

...

if (self.State == STATE_ON)
	dostuff()
Jap first one working, python compliert den code 1:1 also es gibt kein metaprogramming und sommit muss es jedes mal nachschauen was unter Status.on steht.

Zweites ist bei vielen Schleifen eindeutig schneller aber ich finde es nicht so übersichtlich.

Python hat aber auch True und False
06/06/2014 20:33 alexutu2013#14
Quote:
Originally Posted by 123klo View Post
Please upload your python file, I can repair it ;)
[Only registered and activated users can see links. Click Here To Register...]
06/06/2014 23:51 noahrmal#15
Try again:
[Only registered and activated users can see links. Click Here To Register...]