Ich geb den Hunden noch essen und dann setz ich mich dran :D
Ich denke mal, auch für Dich, macht es Sinn, wenn man sich erstmal auf die allgemeine Funktionalität konzentriert.Quote:
Huhu, ich hoffe, das die Hunde sich auf das Essen gefreut haben uns satt sind.
Weisst du, wann man mit dem Bot auch in Ausländischen Universen botten kann? :)
Darauf warteee ich (Bzw ich warte auf die Spiosoinden farm funktion :) )
JA Pizza wäre gut :) Ne also da müsste mir erst jemand erklären wie das mit dem Donaten geht.Quote:
Ich denke mal, auch für Dich, macht es Sinn, wenn man sich erstmal auf die allgemeine Funktionalität konzentriert.
Imho kann man den Bot so noch nicht einsetzen. Keine Ahnung warum es zu den Logouts, etc. kommt aber mit etwas Pech sind die Gründe dafür von GF nachvollziehbar und es könnte zu Bans kommen.
Ich würde @[Only registered and activated users can see links. Click Here To Register...] gerne mehr unterstützen aber leider kann ich keine Manpower in die Entwicklung stecken, dafür fehlt mir das Know-how. Wenn aber Tester benötigt werden bzw. konzeptioneller Input, dann gerne weiterhin Bescheid geben, dafür bin ich gerne da. BTW. ne Donation Link könntest Du dir mal zulegen, dann kann man Dir zumindest mal mit ner Pizza den Abend versüßen oder so.
eigentlich sollte er mit Spionagesonden farmen können ^^ da ist ein extra Häkchen dafür da. ^^Quote:
Huhu, ich hoffe, das die Hunde sich auf das Essen gefreut haben uns satt sind.
Weisst du, wann man mit dem Bot auch in Ausländischen Universen botten kann? :)
Darauf warteee ich (Bzw ich warte auf die Spiosoinden farm funktion :) )
Quote:
JA Pizza wäre gut :) Ne also da müsste mir erst jemand erklären wie das mit dem Donaten geht.
Zum Bot:
Ich schreibe grade an der neuen Baulistenfunktion, werde die alte garnicht erst nach Fehler durchsuchen.
Was ich bis jetzt gemacht habe:
- Monde haben jetzt auch Baulisten
- Gebäude und andere baubare Sachen werden als Objekte angelegt und nicht mehr aufwändig aus Listen zusammengesetzt. (vorher hatte ich Kostenlisten, Produktionslisten etc. jetzt bekommt jede Mine etc. einen eigenen wert den man auch direkt abrufen kann. Ist nur zum Programmieren übersichtlicher und verkürzt den Code in den Funktionen ungemein.
- die Funktion die den baubefehl gibt neu geschrieben. Es wird jetzt beim manuellen browsen sofort geprüft ob auf dem Planeten und auf der Seite z.b Versorgung" direkt etwas gebaut werden kann. Zudem wird dann auch wenn der Bot selbst browsed geprüft ob was gebaut werden kann und wenn ja wird das sofort umgesetzt. Zudem dürften jetzt weniger Fehler mit falschen Ressourcen etc. auftauchen, weil einfach geprüft wird ob man die Mine o.ä anklicken kann.
für die Zukunft geplant:
Flotten und Def bauen ( dann funktionieren auch die + buttons in den Tabellen xD)
sauber programmierte Baulistenfunktion mit optimierter Perfomance und Fehlerhandling.
eigentlich sollte er mit Spionagesonden farmen können ^^ da ist ein extra Häkchen dafür da. ^^
|
|
Danke für den Link.Quote:
[Only registered and activated users can see links. Click Here To Register...]
Ist nicht weiter schwer ne Donate Link zu generieren.
Deine Pläne hören sich super an, alles was Performance bringt und den Code einfacher macht wird ja auf lange Sicht helfen.
Magst Du noch mal was zu den Fragen sagen, die ich vor einiger Zeit gestellt habe:
- Simuliert dein Bot klicks? Oder wie werden die Aktionen aufgerufen? Soweit ich weiß prüft GF ob jeder Schritt einer Aktion durchgeführt wird und wie schnell. D.h. wenn eine Flotte verschickt werden soll, dann braucht es den klich auf "Flotte", dann das Eintragen der Schiffe, dann auf weiter, etc.
- Hast du ein Randomize in deinen Timern? Ich trage ein "Intervall für Planeten aktuallisieren: 10 Minuten. Sind es dann immer exakt 10 Minuten oder wird das in einem Intervall random angesprochen? Also zwischen 8 und 12 Minuten und in dem Intervall zufällig?
Schwer zu sagen, ich habe geschäftlich noch einen ziemlich großen Auftrag den ich auch abarbeiten muss, aber Nachts kontrolliert meine Frau mich nicht ob ich arbeite oder den Bot schreibe xD Ich denke kommenden Freitag hab ich was brauchbares.Quote:
Das klingt doch schonmal super was denkste wie lange du in etwa brauchst ?
Das ist einer der Gründe, von denen ich zu 100% weiß, dass andere Scripts aufgeflogen sind. Mustererkennung der Aktivitäten. Wurde afaik so gelöst, wie ich es beschrieben habe: Zufälliger [randomnnumber] Zeitpunkt in einem Intervall. Das könnte einstellbar sein oder aber prozentual abhängig vom Ausgangswert. Da sind min. und max Grenzen vorstellbar, damit das Intervall nicht zu groß wird. Das würde ich Dir überlassen, da das ja auch vom Aufwand das Ganze zu realisieren abhängt.Quote:
Danke für den Link.
Zu deinen Fragen:
[...]
Das mit den Timern, dass die nicht 100% nach 10 Minuten etc. aktiviert werden ist ne gute Idee. Werde ich einbauen, ein Spread den man einstellen kann.
Ja zum Glück sind wir über das Thema hinaus mit dem gesperrt werden :)Quote:
Das ist einer der Gründe, von denen ich zu 100% weiß, dass andere Scripts aufgeflogen sind. Mustererkennung der Aktivitäten. Wurde afaik so gelöst, wie ich es beschrieben habe: Zufälliger [randomnnumber] Zeitpunkt in einem Intervall. Das könnte einstellbar sein oder aber prozentual abhängig vom Ausgangswert. Da sind min. und max Grenzen vorstellbar, damit das Intervall nicht zu groß wird. Das würde ich Dir überlassen, da das ja auch vom Aufwand das Ganze zu realisieren abhängt.
Was mir noch eingefallen ist, denke das sollte auch relativ leicht machbar sein, vor allem, da du ja die Bauliste neu schreibst: Eine globale Bauliste und eine dedizierte Bauliste. Ist bspw. für Miner sehr interessant, wenn man einfach festlegen kann: Metall 35, Kristall 32, Deut 32, Robo 10, Nani 5 und das ganze natürlich mit einer Reihenfolge. Solange die Planeten keine Einträge in der spezifischen (dedizierten) Bauliste des Planeten haben, wird die globale Bauliste abgearbeitet.
Ach so und denk dran deinen Link hier in der Startpost einzubinden oder so :)
Also Flaschenhals würde ich jetzt nicht sagen, in bezug auf die Performance ist der integriete Browser in Ordnung. Was mich an den Browser stört, dass er wenig Spielereien zulässt und auch schon vom .Net Framework nicht ganz Fehlerfrei ist. Funktionell kann man programmiertechnisch auch nicht viel mit dem Browser anfangen, aber er funktioniert soweit ^^Quote:
Cool danke! Hört sich nach Fortschritt an!
So halb offtopic @[Only registered and activated users can see links. Click Here To Register...] Du programmierst das Ding ja in c# - hast selbst schon gesagt, dass bspw. der integrierte Browser ein Flaschenhals ist.
Wenn du es dir aussuchen könntest, in welcher Sprache meinst du wäre es am einfachsten/besten einen Bot für ogame zu schreiben?
Unter Beachtung der gewünschten Funktionen und des Programmieraufwands? Also Baulisten, Fleet saven bei Angriff, Farmfunktion, SMS / Email Benachrichtigung bei Angriff, etc.? Das ganze Projekt hier macht mich neugierig, ich weiß dass der ogame automizer in java geschrieben war, oder?
Alles klar :) Ich habe momentan eh keine Zeit mich damit ausgiebig zu beschäftigen aber interessieren tut mich das ganze schon. Ein Programm nur zu nutzen finde ich eher langweilig, etwas Verständnis ist schon angenehm.Quote:
Also Flaschenhals würde ich jetzt nicht sagen, in bezug auf die Performance ist der integriete Browser in Ordnung. Was mich an den Browser stört, dass er wenig Spielereien zulässt und auch schon vom .Net Framework nicht ganz Fehlerfrei ist. Funktionell kann man programmiertechnisch auch nicht viel mit dem Browser anfangen, aber er funktioniert soweit ^^
Ja Bots programmieren, also ich würde wieder auf C# zurück greifen, aber nur weil ich da einfach die Erfahrung drin habe und das OO Programmieren logisch und praktisch ist. Klar gibt es ein paar Sachen wo ich gerne hätte dass C# so Richtlinienfrei wie Java ist ^^ aber so bleibt auch der Code von der Qualität her besser denke ich.
Ich habe seit ich angefangen habe den Bot zu schreiben bestimmt 4-5 Leute gesehen die einen Bot schreiben wollten, aber schon am Login von Ogame gescheitert sind :)
Bestimmte Sachen sehen sehr einfach aus, aber man muss jeden einzelnen Button und jedes einzelne Textfeld und alles was man so sieht programmieren. Die Rohstoffproduktion war schon ein Krampf zu formulieren weil ja da noch die Forschung mit reinspielt.
Also ich denke wenn du einen Bot machen wollen würdest, schreib in der Sprache die du am besten kannst. Schreib alles so übersichtlich wie möglich. Schreibe Funktionen direkt komplett und denk dir nicht dass du später noch das ein oder andere hinzufügen wirst ^^ Viel Glück ^^
Das nervigste und was wirklich Expertenwissen braucht ist das Extrahieren der Daten aus dem dynamischen HTML-Code :)
Versuch Mal die Flottenzusammensetzung, Ziel, Start und Flugzeit einer Flotte mit einem Programm zu erfassen.
Ich denke das Problem mit den Slots ist zu vernachlässigen. Computertechnik ist relativ günstig, so dass in den seltensten Fällen Slots Mangelware sein werden. Bei exzessiver Nutzung von Expeditionen könnte es mal zu Beginn einer Runde passieren, wobei ich selbst da nie wirklich Probleme hatte. Zu späteren Zeitpunkten werden die Ressourcen meist eh vorher gesammelt, da man nicht genug einfach so rumliegen hat, sondern auf Forschungen oder Gebäude spart, d.h. die benötigten Ressourcen kommen von einem oder wenigen Planeten.Quote:
Aktueller Zwischenstand:
Bauaufträge werden direkt beim browsen umgesetzt.
Derzeit schreibe ich den komplizierten Teil und zwar den Ablauf der Ressourcenbeschaffung für Baulistenaufträge. Wirklich sehr viel Denksport ^^
Beispiel:
Es gibt einen Auftrag auf einem Planet X. Auf Planet X sind aber nicht genug Ress, dafür aber auf allen anderen zusammen schon. Schicke ich jetzt Ress von den Planeten die am nächsten sind, aber nicht genug schicken können, oder schicke ich Ress von den Planeten die weiter weg sind, aber dafür weniger Slots belegen ? ^^
Vorschläge ? noch arbeite ich dran ^^
Genau diese Gedanken hatte ich heute Nacht auch. Ich muss mir dazu noch ein paar Gedanken machen. Ich kann alle Flugzeiten und auch den Deutverbrauch ausrechnen. Man muss jetzt nur das logische menschliche Verhalten in Worte fassen ^^ wie würde man es machen... ?Quote:
Alles klar :) Ich habe momentan eh keine Zeit mich damit ausgiebig zu beschäftigen aber interessieren tut mich das ganze schon. Ein Programm nur zu nutzen finde ich eher langweilig, etwas Verständnis ist schon angenehm.
Ich denke das Problem mit den Slots ist zu vernachlässigen. Computertechnik ist relativ günstig, so dass in den seltensten Fällen Slots Mangelware sein werden. Bei exzessiver Nutzung von Expeditionen könnte es mal zu Beginn einer Runde passieren, wobei ich selbst da nie wirklich Probleme hatte. Zu späteren Zeitpunkten werden die Ressourcen meist eh vorher gesammelt, da man nicht genug einfach so rumliegen hat, sondern auf Forschungen oder Gebäude spart, d.h. die benötigten Ressourcen kommen von einem oder wenigen Planeten.
Was eher wichtig ist und da hattest du schon den richtigen Gedanken, ist die Zeit für das Zusammenziehen. Wobei ich denke, auch das sollte vernachlässigt werden, denn das wäre sehr komplex. Bei einem Fleet Account sind die Planeten sehr weit verteilt, d.h. wenn man einfach so Ressourcen zusammenzieht, ohne die Flugzeiten der einzelnen Flotten zu beachten, kann es passieren, dass Flotte x1 in 60 Minuten am Ziel ist und Flotte x2 in 120 Minunten. Das kann man bis xn weiterspielen. Das würde bedeuten, dass je nach Intervall, ein Haufen Ressourcen auf einem Planeten liegen und nicht verbaut werden können. Bei Miner Accounts meistens nicht so schlimm, weil die versuchen ihre Planeten relativ dicht beisammen zu halten.
Wie das zu lösen ist bin ich mir nicht sicher. Kannst du zu Beginn die Flugzeiten zwischen allen Planeten des Accounts (würde ja für KT / GT reichen) errechnen? Dann mit einem Sortieralgorithmus in Abhängigkeit von der Flugzeit sortieren (kurz - lang), danach in Abhängigkeit der lagernden Ressourcen sortieren (viel - wenig) und abarbeiten, bis genug Ressourcen zum Zielplaneten unterwegs sind. Denke ich zu kompliziert?
// diese Funktion schickt die nötigen Ressourcen und gibt zurück was fehlt ? Nein sie gibt ein bool zurück ob alles geschickt wurde
public static bool deliverRess(Kosten nötigeRess, PlanetenDaten ZielPlanet)
{
// hier erstmal die Ressourcen die auf dem Planeten sind von den nötigen abziehen
nötigeRess.Metall -= (int)ZielPlanet.Metallvorhanden;
nötigeRess.Kristall -= (int)ZielPlanet.Kristallvorhanden;
nötigeRess.Deut -= (int)ZielPlanet.Deutvorhanden;
// hier dann prüfen wie viel Ress auf dem Weg zum Zieplanet sind
nötigeRess = RessAufDemFlugAbziehen(ZielPlanet, nötigeRess);
// hier dann prüfen ob schon genug auf dem Weg ist
if (nötigeRess.Metall <= 0 && nötigeRess.Kristall <= 0 & nötigeRess.Deut <= 0)
{
ZielPlanet.goingToBuild = true;
return true;
}
// ab hier müssen noch Ress geschickt werden
// schauen welcher am nächsten ist
PlanetenDaten nächsterPlanet = schnellstmöglicherPlanet(ZielPlanet, nötigeRess);
// hier prüfen ob es keinen Planeten gibt der schicken kann
if (nächsterPlanet == null)
{
basis_Funktionen.writeLog("kein Planet da der etwas schicken könnte.");
return false;
}
else basis_Funktionen.writeLog("Der nächste Planet ist " + nächsterPlanet.name);
// Flugzeit berechnen, ausrechnen ob schicken sich rentiert.
// irgendwie noch berechnen von welchem Planet am besten wäre, weil der schnellste ist nicht der logischste wenn der nur 10 Met schicken kann
// Schicken oder warten ?
// wenn schicken dann schicken
// Rohstoffe die geschickt wurden von den nötigen Ress abziehen
// wenn nötige Ress > 0 dann rekursiv diese Funktion nochmal aufrufen
// wenn nötige Ress bereit gestellt wurden, dann bei allen Planeten hassent auf false setzen.
return true;
}
Ich habe heute Abend wahrscheinlich Zeit mir ein wenig Gedanken darüber zu machen. Lohnt sich das noch oder bist du eh schon deutlich weiter? Da ich eigentlich für Quant. Finance lernen muss, würde ich ungern meine Pause "verschwenden" :)Quote:
Genau diese Gedanken hatte ich heute Nacht auch. Ich muss mir dazu noch ein paar Gedanken machen. Ich kann alle Flugzeiten und auch den Deutverbrauch ausrechnen. Man muss jetzt nur das logische menschliche Verhalten in Worte fassen ^^ wie würde man es machen... ?
Hier ein Einblick zum aktuellen Stand. Im Anhang ist die Funktion die dafür sorgt, dass die Ressourcen zu den Planeten geschickt werden auf denen etwas gebaut werden soll, aber nicht genügen Ress auf dem Planeten sind. Jede Zeile ist mit meinem original Kommentar kommentiert ^^ Ich denke die Variabeln sind verständlich benannt. Ein bool ist "ja" oder "nein" bzw. "wahr" oder "falsch". Manche Kommentare sind noch vom Anfang als ich mir die Grundfunktion überlegt habe. Am Ende seht ihr die fehlenden Teile ^^
Code:// diese Funktion schickt die nötigen Ressourcen und gibt zurück was fehlt ? Nein sie gibt ein bool zurück ob alles geschickt wurde public static bool deliverRess(Kosten nötigeRess, PlanetenDaten ZielPlanet) { // hier erstmal die Ressourcen die auf dem Planeten sind von den nötigen abziehen nötigeRess.Metall -= (int)ZielPlanet.Metallvorhanden; nötigeRess.Kristall -= (int)ZielPlanet.Kristallvorhanden; nötigeRess.Deut -= (int)ZielPlanet.Deutvorhanden; // hier dann prüfen wie viel Ress auf dem Weg zum Zieplanet sind nötigeRess = RessAufDemFlugAbziehen(ZielPlanet, nötigeRess); // hier dann prüfen ob schon genug auf dem Weg ist if (nötigeRess.Metall <= 0 && nötigeRess.Kristall <= 0 & nötigeRess.Deut <= 0) { ZielPlanet.goingToBuild = true; return true; } // ab hier müssen noch Ress geschickt werden // schauen welcher am nächsten ist PlanetenDaten nächsterPlanet = schnellstmöglicherPlanet(ZielPlanet, nötigeRess); // hier prüfen ob es keinen Planeten gibt der schicken kann if (nächsterPlanet == null) { basis_Funktionen.writeLog("kein Planet da der etwas schicken könnte."); return false; } else basis_Funktionen.writeLog("Der nächste Planet ist " + nächsterPlanet.name); // Flugzeit berechnen, ausrechnen ob schicken sich rentiert. // irgendwie noch berechnen von welchem Planet am besten wäre, weil der schnellste ist nicht der logischste wenn der nur 10 Met schicken kann // Schicken oder warten ? // wenn schicken dann schicken // Rohstoffe die geschickt wurden von den nötigen Ress abziehen // wenn nötige Ress > 0 dann rekursiv diese Funktion nochmal aufrufen // wenn nötige Ress bereit gestellt wurden, dann bei allen Planeten hassent auf false setzen. return true; }