nachdem ich über das letzte Event hinweg ein paar der hier zu findenden Bots durchprobiert habe, spinnt seit vorgestern der Wunsch in meinem Kopf rum, sowas tolles möchte ich auch können!
Also habe ich mir ein paar Tuts angesehn, da mir AutoIt ja bis dato noch gänzlich unbekannt war und dann einfach mal drauflosgelegt. Ganz nach dem Motto: Learning by Doing. Klappt auch soweit besser als erwartet. Immerhin bin ich schonmal soweit, dass mein kleiner Bot in den nötigen Außenposten reist, auf den HM umschaltet, rausrennt und sich den Weg hin zum Farmort sucht. Hab' die kleinen Teilaufgaben jeweils in seperate Scripts gespeichert und mir nun gedacht, ich sollte mal ganz sauber von vorn anfangen, bevor ich mich dem Farm-Teil widme. Also hab ich mich rangesetzt, und mich um den GUI gekümmert. Der steht auch soweit und besitzt nen Start- und Close-Button. Ich bin stolz auf mich. Doch hier auch schon das erste Problem, über das ich nicht hinwegkomme:
Code:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Close
Exit
Case $Start
EndSwitch
WEnd
Wie man vielleicht erkennen kann, fehlt mir der Befel, der ausgeführt werden soll, wenn der Start-Button beklickt wird. Zuerst hatte ich dort einen Befehl á la "call("Function")" stehen. Doch, wie ich erst später begriff springt der kleine Bot dann an den Punkt, an dem das Unterprogramm beschrieben wird, bearbeitet es und stoppt dann. Das ist nicht so ganz das, was ich mir wünsche. Ist es also irgendwie möglich, das Programm an eine bestimmte Stelle im Programmcode springen zu lassen, sobald ein Hit auf den Start-Button erfolgte?
-----------------
Und weil ich ja schon dabei bin:
In dem Gebiet, durch das der Bot laufen musst, taucht in ca. 1 von 100 Fällen ein einzelner Gegner auf, der mich umnietet. Aus diesem Grund ist es nötig, eine ständige DeathCheck abfrage zu integrieren. Idealerweise fragt das Programm also in geeigneten Abständen die aktuelle Anzahl an Hitpoints ab. Wie ich die Abfrage mit Hilfe von GWCA realisiere, weiß ich, das was Probleme macht, ist das "ständig". Ich könnte natürlich nach jedem Befehl eine Abfrage einbauen aber das wäre schrecklich ineffizient. Ganz abgesehn davon, dass der Charakter ja nur 10 Sekunden lang tot ist und ich diesen Zeitraum mit viel Pech schlicht verpasse. Dann würde der Bot irgendetwas tun, was ich aber mit Sicherheit so nicht möchte ...
----------------
Weils so schön ist:
Vielleicht eine wirklich unwichtige Frage, aber der Koda-Designer besitzt die Funktion, ein Bild in den GUI einzufügen. Vorhin wollte ich diese Funktion benutzen und bekam aber bei der Abfrage der Source den Fehler, dass die Variable, in der das Bild gespeichert wird, nicht deklariert ist. Als ich versuchte, dies von Hand nachzuholen, klappte das nicht. Wie also kann ich diese Bild-Einfüge-Funktion trotzdem nutzen?
Ich hoffe darauf, nette Menschen zu finden, die mir ein wenig helfen. Ganz ohne irgendwelche Diffamierungen, falls es möglich ist. Und bitte, denkt daran, dass ich das, was ihr schreibt auch sehr gern verstehen würde ...
Oh danke, also ist dieses Agent-Dings doch für diese Zwecke da ... Konnte damit ja zuerst rein garnichts anfangen. Was würde ich bloß ohne euch tun.
Und weil ich so gern nerve, direkt noch ein kleines Problemchen:
Es gibt den Befehl: CA_GetGold (No parameters. Returns integer with gold on your character and integer with gold in your storage.). So. Ich nehme mal stark an, mein eigenes Gold ruf ich mit $cbVar[0] ab. Ich nehm außerdem an, dass die Angabe in Goldstücken passiert. 89,750p wären also 89750g. Aber wie erfrag ich nun den Goldstatus meiner Truhe?
So, nun mein problem dabei. Wenn mein kleiner Charakter losläuft, in einen Gegner rennt und durch diese Übermacht stirbt, so tut er wie aufgetragen das, was ich in dem Unterprogramm CheckDeath definiert habe. Er reist also zurück in den Außenposten. Hier wird ihm aufgetragen, erneut rauszulaufen, was er auch tut. Ich schicke ihn darauf zurück in die Funktion, MoveThrough. Soweit, so gut. Doch wenn er jetzt durch böse Zufälle erneut stirbt, so greift CheckDeath nicht mehr, mein Charakter steht am RezzSchrein und bleibt dort, bis er an Altersschwäche stirbt. Warum? Ich habe schon überlegt, den Befehl AdlibUnRegister ("CheckDeath") mit in die Funktion CheckDeath zu packen. Keine Besserung. Auch habe ich folgende Bedingung probiert:
Code:
If $DeathCounter1 = 0 Then
AdlibRegister ("CheckDeath", 1000)
EndIf
und im Unterprogramm CheackDeath:
Code:
$DeathCounter1 = $DeathCounter1 + 1
genutzt. Natürlich habe ich die verwendete Variable weiter oben definiert und ihr den Wert 0 gegeben. Aber wen wundert es: Auch diese Maßnahme löst mein Problem nicht. Ich weiß nicht mehr weiter ...
Heißt im Klartext, ich darf aus einer registerten Funktion nicht verlangen, eine andere Funktion aufzurufen, gell? Ich habs jetzt so gelöst, wie von dir beschrieben und frag also in regelmäßigen Abständen die Variable ab. Das klappt soweit, wenn ich das jetzt schon beurteilen kann. Grad bin ich schon fast erneut verzweifelt, weil ich vergessen hatte, die Variable auch irgendwann zurück auf False zu setzen ...
Aber: Die Dunktion CA_GetDeath, ist die nicht schrecklich ungenau? :S Andauernd hab ichs, dass ich zurück in den Außenposten geschickt werde, ganz ohne Gegnerkontakt. Nun mach ichs mit Hitpointsabfrage und es scheint mir doch, ein wenig besser zu klappen.
Irgendwer hat mir mal gesagt, das schwierige beim Programmieren ist es, seine Worte in Porgrammcode zu füllen. Haha, ich weiß es besser. Das schwierigste ist ganz eindeutig die Fehlersuche und das darauffolgende debugging ...
Ich bin da etwas faul und lasse den Bot einfach über 2 Scripte laufen. Einmal den Bot und der andere ist die Gui + Deathcheck.
Wenn der Character Tot ist, einfach den Process vom Bot beenden, in die Stadt zurück und wieder die exe vom Bot starten.
Zwei Programme laufen zu lassen, wär mir schon wieder zu ineffizient und nervig. Nein, es läuft ja jetzt. Zumindest was den Weg zur Farmstelle angeht. Nur während des Kampfes greift die ganze Geschichte noch nicht und derzeit weiß ich noch nicht ganz, wieso. Das muss aber ein Fehler in meinem Skript sein und vermutlich bin ich grad einfach zu verpeilt, den zu finden. Am Besten mal drüber schlafen ...
Achso, naja ... Die Kommandoliste lesen, das schaff ich bereits. Nur mit dem Begriff obsolete kann ich persönlich jetzt nicht alzu viel anfangen. Liegt im Auge des Betrachters, ob man "überholt" oder "veraltet" Dinge bezeichnet, die nicht funktionieren, nicht gut genug funktionieren oder ob es einfach elegantere Lösungen gibt und diese aber trotzdem seinen Nutzen erfüllt. Wie auch immer, die Idee, den Befehl $CA_GetMyMaxHP zu nutzen, ist auch nicht so ganz das gelbe vom Ei. Hin und wieder ertapp ich meinen Charakter nach wie vor dabei, dass er zurück reist, während er an einem Stein vorbeihuscht. Aber um solche Feinheiten kümmer ich mich dann, wenn ich mal einen Run stabil über die Bühne gebracht hab ... :S
Mal was ganz anderes: Ihr habt teilweise in eurem GUI so hübsche Übersichten, die den momentanen Fortschritt im Script anzeigen. Also praktisch sowas, wie "Char läuft raus", "Char benutzt Skillxyz" etc. Wie ich diese coolen Sätze an den GUI weitergebe, habe ich mir schon abgesehen, mein ich. Aber ich suche verzweifelt die zugehörige Schaltfläche im Koda Designer ... Den Knopf, mit dem ich so ein hübsches Fenster aufziehe, in dem dann später mein Roman erscheint. Wo ist denn der oder wie mache ich das ... ? Lacht mich bitte nicht aus :S
du kannst text in fast allen guicontrols wiedergeben, ich benutze am liebsten das list object, ansonsten kannste editboxen, textboxen, label einfach alles was text wiedergeben kann benutzen^^
Ach so einfach ist das also ... Naja dann kann ich jetzt ja fleißig meinen GUI zuspammen.
So ähnlich, wie ich das hier mache ... :S Wieder ein Problem ...
Code:
#include "GWCAConstants.au3"
$cbType = "int"
CmdCb($CA_FindEmptySlot, 1)
If $cbVar[0] > 34 OR $cbVar[0] = 0 Then
MsgBox(1, "Test", "Test")
EndIf
Exit
Natürlich ist das da völlig aus dem Zusammenhang gerissen, um es besser testen zu können. Und mitlerweile habe ich schon so viel ausprobiert, dass es eigentlich nur noch an der Bemerkung "Parameter = bag index to start searching from." liegen kann. Ich habe da eine 1 angegeben. Nach dem Motto: Such vom ersten Slot aus ... Aber irgendwie scheint das ja nicht richtig zu sein. Ich weiß ja nicht, aber ein wenig mehr Informationen hätte man dieser Befehlsliste irgendwie schon anhängen können ...
Haut mich nicht, weil ich hier eine Frage nach der anderen Stelle ... Vermutlich werde ich wegen des Identens & Verkaufens auch noch ankommen, gleichwohl ich da schöne Beispielscripts auf meinem Desktop liegen habe. Naja, vom abschaun habe ich halt nicht so viel, wenn ich nicht verstehe, was ich tue ... Drum schreib ich lieber, was ich für richtig halte ...
SRO Start Button 06/07/2009 - Silkroad Online - 4 Replies So my friend got problem with start button...(he's too stupid to post own thread lol...)When he runs sro start button won't appear.He tried everything.He went to silkroad official site and then tried and it didn't worked.He tried on ecsro and same problem.Problem may be in his connection?idk.
Don't post run sro and wait few minutes couz he tried it already.
Start Button 05/18/2009 - Silkroad Online - 13 Replies mabye it has allredy been asked.. but i cant see the start button.. i tryed to reinstall with the anti virus closed, the firewall desactivated.. still cant get it right.
someone can help?
Help Start Button 04/14/2009 - Silkroad Online - 3 Replies Everytime i start up SRO the start button doesnt appear and i checkd joymax website for a fix and they said it was a firewall but i dont have a firewall and my client version is v1.180 and i saw somewhere that the client version was 1.184 so im guessin the my so called firewall is blocking it from updating and i need some help
Kein Start Button? 12/05/2008 - SRO Private Server - 6 Replies Ich hab ein Problem und zwar: Wenn ich den Launcher Starte erscheint bei mir kein Start Button. Wisst ihr woran es liegt?
mfg Gammler232
start button 04/14/2008 - Silkroad Online - 4 Replies hi all
from the latest 10 hours, wen i open the game. every time the start button dont appeard.
end sometimes is says, the server is upgradein or somting like this. i dont know waht to do,
plizz somone help mi (wen this hapend before wen i was log in to silkroad site its fix this problem) but now nothing help, even reinstall of the game not fix it. i hev a primium, end i loss this time
im sory if my english is not good.