ich weiß nicht, ob interesse besteht, aber ich habe mir ein wenig genauer die Kommunikation zwischen Browser und Server bei Tinyisland angeschaut. Zusammen mit den Threads für SuF habe ich einmal exemplarisch ein Login-Script in Java gebastelt, dass funktioniert und theoretisch ausgebaut werden könnte. Hier der Java-Code (leicht angepasst) für das Einloggen:
Code:
String request = "";
String response = "";
// Nutzerdaten
String sessionID = "00000000000000000000000000000000"
String loginName = "name";
String paswd = "passwort";
String randomNumber = "0.12345467890123456";
int counter = 1;
String server = "s1.tinyisland.de";
try {
request = "http://" + server
+ "/request.php?req=" + sessionID + "%7C" + accountLogin + "%3A"
+ URLEncoder.encode(loginName, "ISO8859_1") + "/"
+ paswd + "/0/de&"
+ "rnd=" + randomNumber + "&"
+ "c=" + counter;
URL url = new URL(request);
response = new Scanner(url.openStream()).useDelimiter("\\Z").next();
if (response.length() > 10 || response.contains("Success")) {
//System.out.println("Login erfolgreich!");
} else {
logger.error("LOGIN: fehlgeschlagen!");
}
} catch (Exception e) {
//logger.error(e);
}
Das Flashspiel kommuniziert über http-requests und deren responses. Es werden Nachrichten nach folgendem Schema verarbeitet:
<<sessionID>> %7C <<action>> %3A <<value>> &rnd= <<randomID>> &c= <<count>>(Leerzeichen wegen Vorschau notwendig)
<<sessionID>> - entspricht der ID der Session
<<action>> - entspricht dem Stichwort der Action (z.B. accountLogin)
<<value>> - entspricht dem Wert der Aktion - wenn diese einen hat
<<randomID>> - entspricht einem Zufallswert zwischen 0 und 1 auf 16 Dezimalstellen hinter dem Komma
<<count>> - entspricht einem Counter; für jede Aktion +1
Wenn man sich http-requests anschaut, findet mal folgende Aktionen:
(Liste erhebt keinen Anspruch auf Vollständigkeit und Richtigkeit)
accountLogin - Loggt den Account ein (value "login/password")
accountLogout - Loggt den Account aus (value leer)
poll - Zyklische Abfrage nach adrifts (value entspricht ? - keine Ahnung; hat was mit den Zügen zu tun - vermute ich)
adriftreject - Zeit für einen addrift ist abgelaufen (value entspricht Position des adirft)
adriftclick - adrift wird ausgewählt (value entspricht Position des adrift)
getMatch - Matchdaten werden angefordert (value entspricht spielID)
giveUp - Match wird aufgegeben (value leer)
swapTiles - Zug auf dem Spielfeld (value entspricht z.B. "1/2")
getMatchResult - Holt das Spielergebnis
itemMove - Verschiebt Items: Verkaufen, Kaufen, Verschieben im Inventar (value entspricht "1/2/3/4/5")
getisland - Lädt Inseldaten (value entspricht Position der Insel)
tryisland - Holt Match gegen einen Inselgegner (value spielId des Inselgegners)
Beispiel: erstes Einloggen

wobei "Bar" einem Passwort-Hash entspricht. Welcher ... k.A. Vielleicht md5.
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Und natürlich noch der öde Teil: das Auswerten der Antwort(response)!
Wie auch bei SuF werden hier eine Unmenge an Werten zurückgegeben. Alle Werte sind nach folgender Form gekapselt:
<<name>>:<<valueArray>>
<<name>> Name des Arrays (z.B. "adrift.adrift")
<<valueArray>> Feldwerte (z.B. "2/1/1401713620/0/101014/17/3020/3020/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/....")
Beispiel:
adrift.adrift:2/1/1401713620/0/101014/17/3020/3020/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/2/3/1401713621/0/201001/20/3075/5125/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/1401713629/
- Es gibt vier adrifts: 0,1,2,3
- Jedes Feld hat die Länge 22 (0 bis 21); ganz am Ende von aDrift befindet sich noch ein Zeitstempel
- Folgende Werte sind mir bekannt: 2->adriftreject-Zeit, 4->Gegnertyp, 5->Level, 6->Gold, 7->Erfahrung
Alle Werte sind mit & verbunden (Trenner): <<name1>>:<<valueArray1>>&<<name2>>:<<valueArray2> >&<<name3>>:<<valueArray3>>&....
Folgende Werte werden zurückgegeben:
(Liste erhebt keinen Anspruch auf Vollständigkeit und Richtigkeit)
sessionid - SessionID die vergeben wurde
timestamp - Zeitstempel
playername.s - Name des Accounts/Spielers
playerdescription.s - Beschreibungstext des Spielers
serverversion.s - Version des Servers
salemode - ?
nextbattletime - Zeitpunkt des nächsten PvP-Events
achdata(<<XXX>>).ach - ?
shiplevels(<<XXX>>) - ?
adrift.adrift - Belagerer die im Spielfeld rumgurcken
playersave.savegame - Alle relevanten Accountdaten und Spieldaten
participant1.s - Name des linken Spielers im Match
participant2.s - Name des rechten Spielers im Match
matchheader.matchheader - Spiel daten
matchturn<<XXXX>>.matchturn - Gespielte Runden; enthält Spielfeld und wer dran ist; <<XXXX>> entspricht Rundenzahl beginnend bei 0001 bis vermutlich 9999
reward.reward - Belohnung nach Inselgegnern und zufälligen items
island.island - Inseldaten
++++++++++++
Feldwerte
(Beispiele; Felder beginnend bei 0)
+++++
playersave.savegame
Was? Wo?
Perlen 36
Gold 42
Level 43
Erfahrung 46
Erfahr.Aurstieg 47
Herzen 338
SpielID 522
+++++
matchturn<<XXXX>>.matchturn
SpielID 0
Leben Ich 6
Leben Gegner 7
Spielrunde 12
Das Spielfeld fängt bei Feld 37 an und ist 64 Werte lang
usw. usw. usw.
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Wenn man das alles vorgesehen hat, wird es lustig:
Spielmechanik:
Es handelt sich um ein klassisches "Einer gegen einen"-Spiel mit einem definierten Ende. Somit kann man den Plus-Minus-Algorithmus verwenden (wäre zumindest eine Möglichkeit)
Ablauf:
Wenn ich am Zug bin:
1. berechne den besten Zug mit dem höchsten Wert. Der höchste Wert berechnet sich aus den gewichteten Zugmöglichkeiten.
2. Welche Folgefelder entstehen und was löst sich dabei noch auf? Addiere dies auf den Wert.
3. Bin ich nocheinmal dran? Dann beginne wieder bei 1. und addiere den Wert.
Das im Groben für die Plus-Variante. Bei Minus versuchst du den möglichst geringsten Wert für deinen Gegner zu errechnen.
Nochwas. Man könnte hier auch noch eine Tiefensuche integrieren, bei der die Gegner abwechselnd ziehen und die möglichen Ausgänge berechnet werden. Das zufällige Nachrücken der Items muss allerdings noch mit einbezogen werden. Auch sollte man die Vodoo-Items nicht vergessen. Diese können das Spielgeschehen erheblich beeinflussen.
Würde mich freuen, wenn sich jemand meldet.
Grüße
Mardorx






