Hatte es ja schon eine Weile versprochen, jedoch immer aufgeschoben, naja jetzt hab ich mich mal rangesetzt und das Tutorial dazu geschrieben^^ Das Grüne ist btw die Erklärung, damit ihr das alles auch versteht, was ich da schreibe^^
root.epk: constinfo.py
Haut dort einfach das hier noch rein:
Code:
DONATE_GUILD = 0
Weiter geht es mit der uiguild.py
Zuerstmal ein wichtiger import:
Fügt ganz oben hinzu:
Code:
import chat
Dort müsst ihr in folgenden functions das hier ergänzen:
in
Code:
def __Initialize(self):
Code:
self.spendebotDialog = None
Erstmals definieren, dass es am Anfang nicht direkt auftaucht^^
Wär ja auch net so praktisch, wenn sich jedes Mal der spendebotDialog öffnet wenn man das Gildenfenster öffnet
in
Code:
def Close(self):
Code:
self.spendebotDialog.Close()
Diese Func ist 2x vorhanden, bei beiden den Vorgang durchführen
Joa, die Function Close bedeutet auf deutsch, dass es geschlossen wird, da soll auch unser Dialog geschlossen werden^^
Einfach um mühsames Zuklicken zu vermeiden xD
in
Code:
def Destroy(self):
das hier einfügen:
Code:
if self.spendebotDialog:
self.spendebotDialog.Destroy()
self.spendebotDialog = None
Diese Func ist ebenfalls 2x vorhanden, wieder bei beiden den Vorgang wiederholen
So ziemlich diesselbe Wirkung wie schon bei def Close(self):, schließt den spendebotDialog, wenn das Gildenfenster geschlossen wird
Da ich für den Spendebot keine Extra Gui machen wollte, habe ich eine bereits vorhandene Gui aufgerufen(in diesem Fall uiPickMoney, welches auch in den imports zu finden ist)
So als Standart noch das Aufrufen von Dateien(fehlt ja bei Cranks Tutorial):
Hier wird der Dateiname ohne die Endung aufgerufen und wird ganz oben bei den Imports hinzugefügt.
Es geht auch innerhalb einer Function und ist somit local beschränkt, aber den Sinn dahinter versteh ich nicht so ganz,
da so etwas ja nicht stört, dass eine Extra Möglichkeit besteht xD
Sonst einfach innerhalb der Function ganz oben aufrufen lassen, hat denselben Effekt(eben local)
Am einfachsten ist es jetzt, wenn man dem ganzen noch einen richtigen "Namen" zuweist, als Beispiel hier mal:
Code:
self.BoniListe = uiBoniListe.OptionDialog()
Damit weißt ihr dem Import jetzt noch einen schöneren Namen zu, dient einfach zur Übersicht und erspart Klammern
Jetzt habt ihr die Dateien alle richtig hinzugefügt und könnt sie z.B. mittels solcher Befehle aufrufen:
Code:
self.BoniListe.Show()
Falls ihr die Gui im Vorderund haben wollt lohnt sich auch noch dieser Befehl:
Code:
self.BoniListe.SetTop()
Damit wird die Gui einfach in den Vordergrund gerückt^^
Btw hat mein Beispiel die Boniliste nichts direkt mit diesem Thema zu tun, ich habe sie lediglich aus meinem Boniswitcher übernommen,
da ich nicht wirklich Lust hatte extra Namen dafür zu erfinden xD
Das Endprodukt meiner GUI war mein Boniswitcher in phyton, der nach Padmaks C++ Boniswitcher soweit ich weiß der einzigste ist(Renozerus und Kamer1337 haben ebenfalls einen, die aber nicht gleich funktionieren)
Vielen Dank für die Hilfe natürlich ebenfalls noch an diese beiden^^
Das ganze sieht schlussendlich so aus(*angeb*):
Hier wird die Config(unsere übernommene Gui) geöffnet und das Textfeld von uiPickMoney(welcher das aktuelle Yang anzeigt bisher) leert
Code:
def __OnClickSpendeBotButton(self):
if constInfo.DONATE_GUILD == 0 and guild.GetGuildLevel() < 20:
constInfo.DONATE_GUILD = 1
chat.AppendChat(chat.CHAT_TYPE_INFO, "Automatische EXP Spende eingeschaltet!")
chat.AppendChat(chat.CHAT_TYPE_INFO, "Falls die Spendenachricht stören, deaktiviere die Chatzeile in den Spieloptionen!")
#global viewChatMode
#viewChatMode = 0
#systemSetting.SetViewChatFlag(viewChatMode)
#self.RefreshViewChat()
return
if constInfo.DONATE_GUILD == 0 and guild.GetGuildLevel() == 20:
chat.AppendChat(chat.CHAT_TYPE_INFO, "Die Gilde hat bereits das maximale Level erreicht!")
return
if constInfo.DONATE_GUILD == 1 and guild.GetGuildLevel() < 20:
chat.AppendChat(chat.CHAT_TYPE_INFO, "Automatische EXP Spende ist bereits angeschaltet!")
return
Was hier stattfindet könnt ihr euch denke ich dank den Texten erdenken^^
Das deaktivierte(das mit dem # davor) versteckt die Chatnachrichten(Einstellung in Spieloptionen)
Hatte ich genutzt als ich das noch mit einer festen Variablen definiert hatte, da die Nachrichten zu häufig kamen und gestört haben
Code:
def botconfig(self, exp):
fail0r = self.spendebotDialog.pickValueEditLine.GetText()
f = open("lib/expspendebot.cfg", "w")
f.write (fail0r)
f.close()
chat.AppendChat(chat.CHAT_TYPE_INFO, "<Konfiguration> Automatisch Erfahrung Spenden ab "+fail0r+"%.")
Hier wird der eingetragene Prozentwert in der Datei expspendebot.cfg, welche bei mir im lib Ordner liegt eingetragen^^
Die Chatnachricht gibt an, welcher Wert eingetragen wurde.
Das ganze muss natürlich auch wieder aufgerufen werden, deswegen braucht ihr hierzu die game.py:
Dort sucht ihr nach der Func
Code:
def OnUpdate(self):
und jetzt das Kernstück des Bots(selbe Func, einfach unter den Variablen einfügen):
Code:
if constInfo.DONATE_GUILD and (float(exp) / (float(nextEXP)) * 100) >= abdannspendendeexp:
net.SendGuildOfferPacket(exp)
Hier findet die Prozentberechnung statt(bereits erhaltene Exp geteilt durch die noch nötigen Exp in Prozent).
Falls diese größer ist, als der eingetragene Wert, spendet es alle Exp, die man hat^^
Dazu wird hier noch die Datei, die ausgelesen wird erstellt, falls noch nicht vorhanden mit diesem Abschnitt hier:
Das muss über die bereits eingetragene Rechnung eingetragen werden, sonst wollt ihr zuerst spenden und dann den Wert auslesen(Logik nicht vorhanden xD)
Zum Schluss noch die letzten Schritte in der root.epk, die dazu dienen um Exp Verluste zu verhindern, falls jemand vergisst, dass der Exp Spendebot noch an ist und z.B. auf den Maincharakter wechselt.
Das findet ihr in der intrologin.py:
Code:
def __OpenLoginBoard(self):
und fügt einfach
Code:
constInfo.DONATE_GUILD = 0
direkt unten dran
Dies dient lediglich dazu, dass falls jemand Kicks bekommt und dann wieder einloggt(egal welcher Char) und die Exp gespendet werden. Sowas ist ärgerlich und sollte vermieden werden
Dasselbe gilt auch für die uisystem.py
Dort fügen wir dasselbe nochmals unter der
Code:
def __ClickChangeCharacterButton(self):
ein.
Zur Sicherheit genau dasselbe nochmal unter dem hier:
Code:
def __ClickLogOutButton(self):
Was die Buttons bewirken und warum wir das dort brauchen sollte selbsterklärend sein
uiscript.epk:
Die benötigte Datei dafür ist die guildwindow_guildinfopage_eu.py.py:
Dort fügt ihr einfach das hier ein:
Das müsst ihr irgendwo da einfügen, wo es reinpasst von den Umsprüngen her oder wie mans nennt(die tab Sprünge)
Joa das wars auch schon wieder von mir, das Script ist inzwischen doch recht alt, deswegen mach ich es einfach mal public(war ja eh für den 1.000 Post geplant gewesen xD)
Es ist vor allem auf Oldschool Servern, wo man auch richtig farmen muss, sehr gut zu gebrauchen, man will ja nicht jedes Mal das Gildenfenster aufmachen, Exp Anzahl eingeben und dann auf Spenden drücken.
Vollautomatisch macht das schon mehr Sinn :P
Falls alles geklappt hat sieht euer Gildenfenster nun so aus:
Credits: : hat meinen Fehler gefunden, wo ich ein integrer vergessen habe^^ : Kp nochmal bei was, dazu ist das Script zu lange her, hat auf jeden Fall geholfen(glaub beim Auslesen irgendwas)
Im Anhang sind die Scripts für den aktuellen Metin2 De Clienten.
Der Rest muss wohl das Tutorial machen und was lernen
Wer Ideen für ein paar Clientmods hat, einfach mal PN schreiben, vielleicht werde ich ein paar Ideen auch umsetzen und dann auch, wenn es Metin nicht weiter zerstört pub machn^^
Naja ich finds schade das du es pub machst.
Hast ziemlich lange dran gesessen.
P.S.:
Ich hab auch mit geholfen gehabt ...
€:
Das stimmt nicht so ganz!
Da hat wohl jemand was editiert
Wollte halt net unbedingt bei so etwas erwähnt werden xD
Stimmt da hattest du noch beim auslesen geholfen(btw meine Überprüfung ob die Datei vorhanden ist hat auch geklappt, hatte es aber nur in das 1.Open geklatscht, muss in das 2. rein.
Naja onUpdate klappt auch so gut^^
Und hatte ja gesagt, dass ich es bei meinem 1.000 Post ma pubben werde^^
Gibt noch paar feinere Wege, aber nja zu faul das noch hinzuschreiben xD
Quote:
Originally Posted by .яρу
sehr nice wieder mal aber der switchbot ist noch nicer also der ist hammer
Joa am Switchbot saß ich relativ lange, 4-5 Tage hatte ich dafür gebraucht.
Aber dadurch dass man den nur OpenSource pub machen könnte werde ich ihn nicht public machen, da man damit zuviel Unsinn bauen könnte.
Client erkennt innerhalb von etwa 225 ms alle Bonis aller Eq Teile, deswegen kann man auf allen Slotplätzen im Inventar ansich gleichzeitig switchen lassen, dazu ist er recht schnell und joa, für diese Community eigentlich nicht so wirklich geeignet, wenn ich mir mal teilweise das Niveau der Sektion anschaue^^
yeps just change some cordenates on your have you the yang options working 100%?
the yang options are working clientside^^
serverside you have to change the locale to japan, because like i said:
Quote:
Originally Posted by RealFreak
yeah the yang options are normally only for mt2 japan
Metin2 germany also had them 2007 in their game core but yeah these times are over-.-
If you change them your change_name.quest won't work anymore^^
And only the guild leader can manage the yang, so you have to decide^^
the yang options are working clientside^^
serverside you have to change the locale to japan, because like i said:
Metin2 germany also had them 2007 in their game core but yeah these times are over-.-
If you change them your change_name.quest won't work anymore^^
And only the guild leader can manage the yang, so you have to decide^^
kind regards RealFreak
in the day i have explain on epvp the change_name.quest with the source .Flame dont work on european locale people have make the dif with that option be avaliable for the european locale with the yang options can be also that we speack and some expert on mod the game core can do the dif for enable that options for the yang :P on european locale
Signature Tutorial [Advanced] 09/28/2010 - Grand Chase - 23 Replies Hey guys I made a new tutorial..
http://img842.imageshack.us/img842/8991/signature tutorial.png
[AutoEXP] Spendebot 09/23/2010 - Metin2 Private Server - 2 Replies Leute?
Da zurzeit sich sehr viele sich mit Packets auskennen, kann da nicht jemand so einen Bot basteln? (Meine jetz nich so einen Autoit, mit dem geklicke...)
[HowTo]Eigenen EXP-Spendebot "bauen" 05/28/2010 - Metin2 Guides & Templates - 13 Replies Vorwort:
Hallo Elite.
Es wird oft nachgefragt , wo wer wann wie ein neuer EXP-Spendebot kommt ?
Da dachte ich mir Release ich mal meine Guide wie man sich ihn Selber bauen kann.
Was wird Benötigt:
Ghost Mouse
Combat Arms MHS Adresses advanced tutorial! 02/12/2010 - Combat Arms - 8 Replies einfach ca starten
dann die Firefox.exe öffnen
dann Bei process Open
Engine.exe und fertig
dann load cheat table
dann auf psp1s0.lssave
falls ihr beim öffnen von engine.exe nen bug kriegt
kann ich nichts machen
Firefox.exe als Administator starten
bei dieser cheattable hab ich die Complexe mal vorher eingetragen falls viele damit ned klarkommen