Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Browsergames
You last visited: Today at 09:32

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Tinyisland: erste Schritte zum Bot

Discussion on Tinyisland: erste Schritte zum Bot within the Browsergames forum part of the Other Online Games category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2013
Posts: 4
Received Thanks: 0
Tinyisland: erste Schritte zum Bot

Hallo zusammen,

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);
        }
Kurze Zusammenfassung des Kommunikationsprinzips:

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
mardorx is offline  
Old 06/24/2014, 11:51   #2
 
elite*gold: 0
Join Date: Mar 2014
Posts: 216
Received Thanks: 22
how use
krejcomut is offline  
Old 07/10/2014, 21:24   #3
 
elite*gold: 100
Join Date: Mar 2013
Posts: 61
Received Thanks: 6
zu wenig Interesse oder? schade
Endanwender is offline  
Old 07/11/2014, 11:57   #4
 
elite*gold: 0
Join Date: Jan 2014
Posts: 370
Received Thanks: 167
was willst du machen ?
ein bot schreiben ?
Onkelmat is offline  
Old 09/19/2014, 11:11   #5
 
elite*gold: 0
Join Date: Sep 2014
Posts: 1
Received Thanks: 0
Hallo zusammen,

ich habe in einem kleinen, privatem Forum ein paar Daten gefunden, die recht interessant für hier sein könnten:

Code:
public class Ressources {

    public static final String SESSIONID = "00000000000000000000000000000000";
    public static final String RNDNUMBER = "0.1490753546815518";
    public static final int COUNTER = 1;

    // ACTIONEN
    // Login
    public static final String LOGIN = "accountLogin";
    // hat kein zusätzlichen Wert "...|accountLogout:&rnd..."
    public static final String LOGOUT = "accountLogout";
    // zyklisches Laden der Belagerer (pollID= tägliche Züge/matchzug erhöht+1)
    // req=<<requestID>>|poll:<<pollId>>&rnd=<<randomID>>&c=<<counter>>
    public static final String POLL = "poll";
    // Austausch der Belagerer (rejectID = position des verweigerten Schiffes
    // 0 -> links unten, 1 -> rechts unten, 2 -> rechts oben, 3 -> links oben, 4 -> zeit)
    // req=<<requestID>>|adriftreject:<<rejectID>>&rnd=<<randomID>>&c=<<counter>>
    public static final String DRIFT_REJECT = "adriftreject";
    // Anklicken eines Belgarers
    // number: 0=links unten , 1=rechts unten , 2=rechts oben , 3=links oben
    //req=<<requestID>>|adriftclick:<<number>>&rnd=<<randomID>>&c=<<counter>>
    public static final String DRIFT_CLICK = "adriftclick";
    // Kampf anfordern
    //req=<<requestID>>|joinbattle:&rnd=<<randomID>>&c=<<counter>>
    public static final String JOINBATTLE = "joinbattle";
    // Match anfordern
    //req=<<requestID>>|getMatch:<<enemyNumber>>&rnd=<<randomID>>&c=<<counter>>
    public static final String GETMATCH = "getMatch";
    // Match aufgeben
    //req=<<requestID>>|giveUp:&rnd=<<randomID>>&c=<<counter>>
    public static final String GIVEUP = "giveUp";
    // tiles verschieben
    // req=<<sessionID>>|swapTiles:<<von>>/<<nach>>&rnd=<<randomID>>&c=<<counter>>
    public static final String SWAPTILES = "swapTiles";
    // Matchergebnis anfordern
    //req=<<requestID>>|getMatchResult:<<enemyNumber>>&rnd=<<randomID>>&c=<<counter>>
    public static final String GETMATCHRESULT = "getMatchResult";
    /* Kauf und Verkauf von Items aus dem Inventar
     reg=<sessionID>|itemMove:<Z1>/<Z2>/<Z3>/<Z4>/<Z5>&rnd=<randomNumber>&c=<counter>
     Z1: VON: 1=armory, 2=inventory, 3=vodoochick, 4=armormen
     Z2: SLOT: inventory-slot 1-10/ von armory-slot 1-8 / shop 1-6
     Z3: NACH: 1=armory, 2=inventory, 3=vodoochick, 4=armormen
     Z4: SLOT: inventory-slot 1-10/ von armory-slot 1-8; ziehen auf an armormen, voodoochick oder charbild 1
     Z5: scheint immer 0 zu sein*/
    public static final String ITEMMOVE = "itemMove";
    // Insel anfordern
    //req=<<requestID>>|getisland:<<inselNumber>>&rnd=<<randomID>>&c=<<counter>>
    public static final String GETISLAND = "getisland";
    // Inselgegner anfordern
    //req=<<requestID>>|getisland:<<inselNumber>>/<<nummer?->0>>&rnd=<<randomID>>&c=<<counter>>
    public static final String TRYISLAND = "tryisland";
    // Neue Armor anfordern
    //req=<<requestID>>|weaponShopReroll:<<Z>>&rnd=<<randomID>>&c=<<counter>>
    public static final String WEAPONSHOPREROLL = "weaponShopReroll";
    // Neue Voodoo anfordern
    //req=<<requestID>>|voodooShopReroll:<<Z>>&rnd=<<randomID>>&c=<<counter>>
    public static final String VOODOOSHOPREROLL = "voodooShopReroll";
    // Boot kaufen
    //req=<<requestID>>|buyShip:<<Z>>&rnd=<<randomID>>&c=<<counter>>
    // Z entspricht level des nächsten Boots
    public static final String BUYSHIP = "buyShip";
    // Ranking abrufen
    //req=<<requestID>>|getRankingList:<<Acc>>/<<Z>>&rnd=<<randomID>>&c=<<counter>>
    // Acc entspricht den Accountnamen oder dem Listenrang
    // Z der Anzahl der Treffer immer 23
    public static final String GETRANKINGLIST = "getRankingList";

    // RESPONSE-VARIABLEN bzw. Namen der Rueckgabefelder
    public static final String RESP_SESSIONID = "sessionid";
    public static final String RESP_TIMESTAMP = "timestamp";
    public static final String RESP_PLAYERNAME = "playername.s";
    public static final String RESP_PLAYERDESCR = "playerdescription.s";
    public static final String RESP_SERVERVERSION = "serverversion.s";
    public static final String RESP_SALEMODE = "salemode";
    public static final String RESP_NEXTBATTLETIME = "nextbattletime";
    public static final String RESP_ACHDATA_SPECIAL = "achdata(<<XXX>>).ach";
    public static final String RESP_SHIPLEVELS_SPECIAL = "shiplevels(<<XXX>>)";
    public static final String RESP_ADRIFT = "adrift.adrift";
    public static final String RESP_PLAYERSAVE = "playersave.savegame";
    public static final String RESP_PARTICIPANT1 = "participant1.s";
    public static final String RESP_PARTICIPANT2 = "participant2.s";
    public static final String RESP_MATCHHEADER = "matchheader.matchheader";
    public static final String RESP_MATCHRESULT = "matchresult.matchresult";
    public static final String RESP_MATCHTURN_SPECIAL = "matchturn<<XXX>>.matchturn";
    public static final String RESP_REWARD = "reward.reward";
    public static final String RESP_ISLAND = "island.island";
    public static final String RESP_RANKINGLIST = "rankinglist.rankinglistentry(23)";
    // SONSTIGES
    public static final String SPLITTER_SLASH = "/";
    public static final String SPLITTER_DP = ":";
    public static final String SPLITTER_AND = "&";
    public static final int PLAYERNAME_PLAYERNAME = 0;
    // ADRIFT Aufbau a/b/ a=Art(kind) b=größe oder special
    public static final int DRIFT_ENEMY_RANGE = 22;
    public static final int DRIFT_ENEMY_KIND = 0; // siehe DRIFT_KIND
    public static final int DRIFT_ENEMY_SIZE = 1; // siehe DRIFT_SPECIAL
    public static final int DRIFT_ENEMY_REJECTTIME = 2;
    public static final int DRIFT_ENEMY_TYP = 4;
    public static final int DRIFT_ENEMY_LEVEL = 5;
    public static final int DRIFT_ENEMY_GOLD = 6;
    public static final int DRIFT_ENEMY_EXP = 7;
    public static final int DRIFT_ENEMY_ID = 666;
    // DRIFT TYP -> vermutung Art-Typ-Größe 10-5-001 -> 105001
    public static final int DRIFT_TYP_BERREL = 0;
    public static final int DRIFT_TYP_NA1 = 105001;
    public static final int DRIFT_TYP_NA2 = 101014;
    public static final int DRIFT_TYP_NA3 = 201015;
    public static final int DRIFT_TYP_NA4 = 305004;
    public static final int DRIFT_TYP_NA5 = 205001;
    public static final int DRIFT_TYP_NA6 = 202009;
    public static final int DRIFT_TYP_NA7 = 200005;
    public static final int DRIFT_TYP_NA8 = 201015;
    public static final int DRIFT_TYP_NA9 = 100007;
    public static final int DRIFT_TYP_NA10 = 302010;
    public static final int DRIFT_TYP_NA11 = 300005;
    public static final int DRIFT_TYP_NA12 = 101002;
    public static final int DRIFT_TYP_NA13 = 104005;
    public static final int DRIFT_TYP_SHIP = 201001;
    public static final int DRIFT_TYP_SHARK = 205002;
    public static final int DRIFT_TYP_QUALLE = 305006;
    public static final int DRIFT_TYP_PERLE = 1401839999;
    public static final int DRIFT_TYP_HUMAN = 0;
    // ADRIFT KIND
    public static final int DRIFT_KIND_SPECIAL = 0; // spezial-drift (gold, perle, ...)
    public static final int DRIFT_KIND_WOOD = 1; // stamm-gegner
    public static final int DRIFT_KIND_PIRATES = 2; // pritanen
    public static final int DRIFT_KIND_ONGABONGA = 3; // eingeborene
    public static final int DRIFT_KIND_NA = 4; // monster?
    public static final int DRIFT_KIND_UNDEAD = 5; // untote
    public static final int DRIFT_KIND_MONSTER = 6; // seemonster
    // ADRIFT SPECIAL
    public static final int DRIFT_SPECIAL_ITEM = 2;
    public static final int DRIFT_SPECIAL_GOLD = 3;
    public static final int DRIFT_SPECIAL_BERREL = 4;
    public static final int DRIFT_SPECIAL_PERL = 6;
    // SAVEGAME
    public static final int SAVEGAME_ENEMY_NUMBER = 522;
    // MATCHHEADER
    public static final int MATCHHEADER_ENEMY_ID = 0;
    public static final int MATCHHEADER_OWN_ID = 4;
    public static final int MATCHHEADER_OWNFIELD_START = 5;
    public static final int MATCHHEADER_ENEMYFIELD_START = 83;
    public static final int MATCHHEADER_ITEMFIELD_LENGTH = 14;
    public static final int MATCHHEADER_ITEM_POS_WEAPON = 0;
    public static final int MATCHHEADER_ITEM_POS_RED = 1;
    public static final int MATCHHEADER_ITEM_POS_BLUE = 2;
    public static final int MATCHHEADER_ITEM_POS_GREEN = 3;
    // MATCHTURN
    public static final int MATCH_FIELD_START = 37;
    public static final int MATCH_FIELD_lENGTH = 64;
    public static final int MATCH_FIELD_XxX = 8;
    public static final int MATCH_NEXTMATCHTIME = 7200000; // 2h in Millis
    public static final int MATCH_ENEMY_ID = 0;
    public static final int MATCH_ENEMY_LIVE = 7;
    public static final int MATCH_OWN_LIVE = 6;
    public static final int MATCH_P1_EXP_COLLECTED = 21;
    public static final int MATCH_P1_GOLD_COLLECTED = 22;
    public static final int MATCH_P2_EXP_COLLECTED = 23;
    public static final int MATCH_P2_GOLD_COLLECTED = 24;
    public static final int MATCH_TURN = 12;
    public static final int MATCH_TURN_COUNT = 5; // spielerrunden
    public static final int MATCH_ACTION_COUNT = 1; // anzahl aktionen
    // MATCHRESULT
    public static final int MATCHRESULT_EXP_COLLECTED = 3;
    public static final int MATCHRESULT_GOLD_COLLECTED = 4;
    public static final int MATCHRESULT_GOLD_REWARD = 5;
    public static final int MATCHRESULT_GOLD_BONUS = 6;
    public static final int MATCHRESULT_EXP_REWARD = 8;
    public static final int MATCHRESULT_EXP_BONUS = 9;
    public static final int MATCHRESULT_GLORY_OLD = 13;
    public static final int MATCHRESULT_GLORY_NEW = 14;
    // Spieler (participant)
    public static final int PARTICIPANT_NAME = 0;
    // Account
    public static final int PLAYERNAME_NAME = 0;

    // ACCOUTN DETAILS
    public static final int ACC_PERLS = 36;
    public static final int ACC_HEARTS = 338; //?
    public static final int ACC_GOLD = 42;
    public static final int ACC_LEVEL = 43;
    public static final int ACC_GLORY = 44;
    public static final int ACC_RANK = 45;
    public static final int ACC_EXP = 46;
    public static final int ACC_EXP_UP = 47;
    // CONFIG
    public static final String CONF_LOGIN = "login";
    public static final String CONF_SERVER = "server";
    public static final String CONF_PWD = "password";
    public static final String CONF_EXPGOLDLEVEL = "exp_gold_level";
    public static final String CONF_EXP_FAKTOR = "exp_faktor";
    public static final String CONF_ENEMY_LEVEL = "enemy_level";
    public static final String CONF_REAL_ENEMY = "real_enemy";
    public static final String CONF_RANDOM = "random";
    public static final String CONF_PERCENTTOFAIL = "percent_to_fail";
    public static final String CONF_FORCE_ISLANDS = "force_islands";
    public static final String CONF_FIGHT_FROM = "fight_from";
    public static final String CONF_FIGHT_TO = "fight_to";
    public static final String CONF_BUY_ARMOR = "buy_armor";
    public static final String CONF_BUY_VOODOO = "buy_voodoo";
    public static final String CONF_BUY_VOODOO_KIND = "buy_voodoo_kind";
    public static final String CONF_BUY_SHIP = "buy_ship";
    public static final String CONF_OBSERVE = "observe";
    public static final Integer[] CONF_BUY_VOODOO_KIND_AGRESSIV_RED = {2, 3, 4, 5, 12, 13, 14};
    public static final Integer[] CONF_BUY_VOODOO_KIND_AGRESSIV_BLUE = {3, 4};
    public static final Integer[] CONF_BUY_VOODOO_KIND_AGRESSIV_GREEN = {3, 8, 9, 11, 12};
    public static final Integer[] CONF_BUY_VOODOO_KIND_PASSIV_RED = {2, 4, 5, 8, 12, 13, 14};
    public static final Integer[] CONF_BUY_VOODOO_KIND_PASSIV_BLUE = {3, 4, 5, 10};
    public static final Integer[] CONF_BUY_VOODOO_KIND_PASSIV_GREEN = {3, 8, 9, 11, 12, 14};

    // ITEMS
    public static final int ITEM_ARRAY_START = 51;
    public static final int ITEM_ARRAY_ITEM_LENGTH = 14;
    // ITEM FELDWERTPOSITIONEN UND WERTE
    // ITEM ARRAY
    public static final int ITEM_TYP = 0; // ok
    public static final int ITEM_KIND = 1; // ok
    public static final int ITEM_GOLD = 4; // ok
    public static final int ITEM_LEVEL = 5; // ok
    public static final int ITEM_LIVE = 10; // old 11
    public static final int ITEM_WEAPON_DEMAGE = 10; // old 12
    public static final int ITEM_MAGIC = 13;
    public static final int ITEM_ROUNDS = 12;
    /*public static final int ITEM_ARMOR_MAGIC_RED = 11;
    public static final int ITEM_ARMOR_MAGIC_BLUE = 12;
    public static final int ITEM_ARMOR_MAGIC_GREEN = 13;*/
    // ITEM
    // ITEM TYP
    public static final int ITEM_TYP_VOODOO_RED = 1;
    public static final int ITEM_TYP_VOODOO_BLUE = 2;
    public static final int ITEM_TYP_VOODOO_GREEN = 3;
    public static final int ITEM_TYP_VOODOO_HART = 10; // herztrank
    public static final int ITEM_TYP_ARMOR_WEAPON1 = 4; // Beile, Schwerter und Messer
    public static final int ITEM_TYP_ARMOR_WEAPON2 = 5; // gewehre und Pistolen
    public static final int ITEM_TYP_ARMOR_HEAD = 6;
    public static final int ITEM_TYP_ARMOR_BREAST = 7;
    public static final int ITEM_TYP_ARMOR_LEGS = 8;
    public static final int ITEM_TYP_ARMOR_FOOD = 9;
    // ITEM KIND
    public static final int ITEM_KIND_VRED_STARKTOBAKPFEIFE = 2; // pfeife; Feuerball
    public static final int ITEM_KIND_VRED_BETAEBTEFLEDERMAUS = 3; // vulkan; schaden pro roten item
    public static final int ITEM_KIND_VRED_UNGERUPFTES = 4; // vulkan; schaden pro roten item
    public static final int ITEM_KIND_VRED_DIEBISCHESAEFFCHEN = 5;  // affe; schaden pro roten item
    public static final int ITEM_KIND_VRED_NICHTLANGE_FACKEL = 8;  // fackel; 3 R Verbrennen
    public static final int ITEM_KIND_VRED_FRUEHSTUECK = 12;  // schale; Feuerball
    public static final int ITEM_KIND_VRED_ROTAUGENAMULETT = 13;  // amulett; Feuerball
    public static final int ITEM_KIND_VRED_ENTWEIHTE_GEBEINE = 14;  // knochen; 3 R Verbrennen 
    public static final int ITEM_KIND_VBLUE_BOESEKATZE = 3; // zerquetschherz; leben übertragen
    public static final int ITEM_KIND_VBLUE_KOLORITSITTICH = 4; // zerquetschherz; leben übertragen
    public static final int ITEM_KIND_VBLUE_ROLFDIERATTE = 5; // zerquetschherz; leben übertragen
    public static final int ITEM_KIND_VBLUE_FREEZ = 10;     // blizzard; 2 R kein vodoo
    public static final int ITEM_KIND_VGREEN_SONNENSCHLAEFERAMULETT = 2;  // amulett; 3 R heilung
    public static final int ITEM_KIND_VGREEN_UKULAIKA = 3;  // guitarre; heilung pro grünem item
    public static final int ITEM_KIND_VGREEN_RINGNATTER = 9;// Brunnen; heilung pro grünem item
    public static final int ITEM_KIND_VGREEN_ROTESHERZ = 14;// herz symbol; nur heilung
    public static final int ITEM_KIND_VGREEN_ASCHEDERVERDAMMTEN = 11;// herz symbol; nur heilung
    public static final int ITEM_KIND_WEAPON_KLINGENBART = 11;
    public static final int ITEM_KIND_WEAPON_ALLROHRFEUERER = 14; // typ 5 | kind 14
    public static final int ITEM_KIND_WEAPON_STREITAXT = 29; //  typ 4 | kind 29 | 
    public static final int ITEM_KIND_WEAPON_KAPITÄNSPISTOLE = 15;
    public static final int ITEM_KIND_WEAPON_KLABAUTERSENSE = 30;
    public static final int ITEM_KIND_AHEAD_BASKEN = 9;
    public static final int ITEM_KIND_AHEAD_BEKNACKTER_HUT = 19;
    public static final int ITEM_KIND_AHEAD_PIEPMATZMASKE = 18; // 6 | kind 18
    public static final int ITEM_KIND_ABREAST_SEEFAHRER = 9;
    public static final int ITEM_KIND_ABREAST_WELTUMSEGLER_ENSEMBLE = 18; // typ 7 | kind 18
    public static final int ITEM_KIND_ABREAST_IRONISCHE = 19;
    public static final int ITEM_KIND_ABREAST_PROTZIGE = 20;
    public static final int ITEM_KIND_ALEG_DECKSCHRUBBER = 8;
    public static final int ITEM_KIND_ALEG_GEWAGTER = 18;
    public static final int ITEM_KIND_ALEG_VOODOO = 19;
    public static final int ITEM_KIND_ALEG_MAGISCHER_LENDENSCHURZ = 19; // typ 8 | kind 19
    public static final int ITEM_KIND_AFOOD_VERGOLDETE_STIEFEL = 1; // typ 9 | kind 1 |
    public static final int ITEM_KIND_AFOOD_AUFSTACHLER = 9;
    public static final int ITEM_KIND_AFOOD_PIRATENSTIEFEL = 18;
    public static final int ITEM_KIND_AFOOD_HAUSPANTOFFELN = 19;
    public static final int ITEM_KIND_AFOOD_TIEFSEETRETER = 20;// typ 9 | kind 20 
    // ITEM FELDPOSITIONEN
    // VOODOO
    public static final int ITEM_POS_VOODOO_RED = 0; // -> Armory 1
    public static final int ITEM_POS_VOODOO_BLUE = 1; // -> Armory 2
    public static final int ITEM_POS_VOODOO_GREEN = 2; // -> Armory 3
    // ARMORY
    public static final int ITEM_POS_ARMORY_WEAPON = 3; // -> Armory 4
    public static final int ITEM_POS_ARMORY_HEAD = 4; // -> Armory 5
    public static final int ITEM_POS_ARMORY_BREAST = 5; // -> Armory 6
    public static final int ITEM_POS_ARMORY_LEG = 6; // -> Armory 7
    public static final int ITEM_POS_ARMORY_SHOES = 7; // -> Armory 8
    // INVENTORY
    public static final int ITEM_POS_INVENTORY_1 = 8;
    public static final int ITEM_POS_INVENTORY_2 = 9;
    public static final int ITEM_POS_INVENTORY_3 = 10;
    public static final int ITEM_POS_INVENTORY_4 = 11;
    public static final int ITEM_POS_INVENTORY_5 = 12;
    public static final int ITEM_POS_INVENTORY_6 = 13;
    public static final int ITEM_POS_INVENTORY_7 = 14;
    public static final int ITEM_POS_INVENTORY_8 = 15;
    public static final int ITEM_POS_INVENTORY_9 = 16;
    public static final int ITEM_POS_INVENTORY_10 = 17;
    // SHOP
    public static final int SHOP_VOODOO_ARRAY_BEGIN = 353;
    public static final int SHOP_VOODOO_ITEM_LENGTH = 14;
    public static final int SHOP_WEAPON_ARRAY_BEGIN = 438;
    public static final int SHOP_WEAPON_ITEM_LENGTH = 14;
    // ERRROR
    public static final String ERROR_TURN = "not your turn";
    public static final String ERROR_SESSION = "sessionid invalid";
    public static final String ERROR_MATCH_NOTFOUND = "match not found";
    public static final String ERROR_MATCH_ALREADY = "already in a match";
    public static final String ERROR_MATCH_MOVE = "invalid move";
    public static final String ERROR_ADRIFT_EXPIRED = "already expired";
    public static final String ERROR_ADRIFT_WRONGCLICK = "invalid slot";
    public static final String ERROR_BACKPACK = "backpack out of space";
    public static final String ERROR_WRONG_REQUEST = "wrong request";
    public static final String ERROR = "Error";
    // ISLAND
    public static final int ISLAND_ARRAY_START = 340;
    public static final int ISLAND_ARRAY_SIZE = 9;
    public static final int ISLAND_NUMBER = 0;
    public static final int ISLAND_ENEMY_TYP = 1;
    public static final int ISLAND_ENEMY_LEVEL = 2;
    public static final int ISLAND_ENEMY_NUMBER_DONE = 3;
    public static final int ISLAND_ENEMY_NUMBER_ALL = 4;
    // BOOT
    public static final int SHIP_NEXT_LEVEL = 336;
    public static final int SHIP_COST = 337;
}


Hierzu gab es noch ein paar funktionen. Bin nicht so der hacker. Also hier mal ein paar Auschnitte, die aussehen wie im oberen posting:

Code:
    /**
     * Gibt die response als Map <key, value> aus
     *
     * @param response
     * @return Map<String, String>
     */
    public static Map<String, String> getResponse(String response) {

        Map<String, String> responseMap = new HashMap<String, String>();

        String[] responseAr = response.split(Ressources.SPLITTER_AND);

        for (String entry : responseAr) {
            String[] entryAr = entry.split(Ressources.SPLITTER_DP);
            if (entryAr.length == 2) {
                responseMap.put(entryAr[0], entryAr[1]);
            }
        }

        return responseMap;
    }
Code:
public static String sendGetRequest(String request) throws Exception {
        URL url = new URL(request);

        String response = new Scanner(url.openStream()).useDelimiter("\\Z").next();

        return response;
    }
Code:
    public static String sendRequest(Account acc, String action, String number) {
        String request = "";
        String response = "";

        try {
            // req=<<requestID>>|poll:<<pollId>>&rnd=<<randomID>>&c=<<counter>>
            request = "http://" + acc.getConfig("server")
                    + "/request.php?req=" + acc.getSessionID() + "%7C"
                    + action + "%3A" + number + "&"
                    + "rnd=" + Utils.getRndNumberAsString() + "&"
                    + "c=" + acc.getcCount();
            // make + to %20
            request = request.replace("+", "%20");
            String login = acc.getResponseItemValue(Ressources.RESP_PLAYERNAME, 0);
            while (login.length() < 20) {
                login = login.concat(" ");
            }
            //System.out.println(login + " request: " + request);

            response = HttpHelper.sendGetRequest(request);

            // debugausgaben
            logger.debug(request);
            logger.debug(response);

            if (response.length() > 10 || response.contains("Success")) {
            //.... auswertung ....
            }
Das ist ein Bot. Oder der Anfang davon.

Dazu gab es eine Datei, in der die entsprechenden Modi (Gold/erfahrung/Level) gewählt werden können. Es kann auch nur gegen echte Menschen gekämpft werden. Gibt mehr Rum und gold.

Der Entwicklers wolte Versuchen, ob es geht. Und es geht wohl


Grüße

Anna
nymous.anna is offline  
Old 09/22/2014, 10:11   #6
 
elite*gold: 0
Join Date: Jun 2013
Posts: 4
Received Thanks: 0
Hallo anna,

da hat sich aber jemand Mühe gemacht! Die ganzen Daten herauszufinden ist mit Sicherheit sehr viel Aufwand. Darauf hätte ich keine Lust.

Ich habe TI aufgehört zu spielen, da es mir persönlich keinen Spaß mehr bereitet. Zudem hatte ich schon die Vermutung das Bots unterwegs sind. Denn manchmal war die Übersicht der Gegner schon erschreckend gut ... Zugegeben, manchmal hatte ich auch Glück und es gab einen one hit :-)
Aber ich schätze, TI kommt auch ohne mich aus. Und wenn ich das richtig mitbekommen habe, dann gibt es jetzt auch einen neuen Server ...

Grüße

Mardorx
mardorx is offline  
Reply


Similar Threads Similar Threads
Erste Schritte in MOP
09/26/2012 - World of Warcraft - 17 Replies
Halli Hallo in wenigen tagen ist es soweit ... Mists of the Panda Kommt endlich ich persönlich freue mich sehr darauf.... Pandas <3 das klingt doch super ich freue mich schon jetzt habe ich nur ein paar fragen! Was werdet ihr die ihr 0:00 Startet zuerst machen mit euren 85ern Die LVL 1 Mönch Starter sind jetzt mal ein bisschen außen vor. Sry Werdet ihr gleich anfangen zu questen oder ini oder Farmt ihr euch am Anfang gleich eine goldene Nase?
[FAQ] Erste Schritte bei Problemen
10/10/2011 - Hardware Discussions / Questions - 5 Replies
Hallo liebes epvp Forum :) PC-Probleme kommen unweigerlich vor. Um dir, dem Hilfesuchenden und uns, den Helfenden eine schnelle Hilfe zu ermöglichen haben Lordac und ich diese kleine FAQ zusammengestellt. Diese soll dir neben der Möglichkeit zur Selbsthilfe auch helfen die nötigen Informationen für einen Thread zu finden. Inhaltsverzeichnis 1. Selbsthilfe 1.1 Temperaturen 1.2 Hardware
[C#] Erste Schritte
09/30/2011 - Coding Tutorials - 8 Replies
Vorwort: Von nun an habt ihr die Möglichkeit euren Wissenshorizont zu erweitern. Ich werde , auf Wunsch einiger User, euch C# ein wenig näher bringen, sodass ihr zumindest ein solides Grundwissen aufbauen könnt. Die nachfolgenden TuT's bauen aufeinander auf und sind deshalb am besten nacheinander zu lesen. Fortgeschrittene Programmierer können jedoch weiter vorran stoßen und sich bereits mit schwereren Themen befassen. So aber nun genug geredet. Es kann losgehen...
Help for Pirox [erste Schritte]
06/04/2011 - WoW Bots - 3 Replies
Liebe Elitepvpers Cummunity Ich suche wen der mir bei meinen ersten Schritten mit Pirox pvp tool helfen kann. Grundsätzlich geht es um die einstellung des Bots, das ganze wäre super wenn es über eine Sprachsoftware zb. Skype, Ts3, ventrilo ... laufen würde. Sollte ein Entgelt für eure Dienste fällig werden bitte ich euch euer Angebot per PN an mich zu schicken. mfg stormy /over and out
Erste Schritte beim Grafikdesign
11/02/2009 - Artist Tutorials - 7 Replies
Guten Abend liebe Community. Es wird mal wieder Zeit für ein Tutorial :) Und da dachte ich mir da es viele Neulinge unter uns gibt die sich bestimmt die Frage gestellt haben wie man überhaupt anfangen soll oder mit was, schreibe ich ein Tutorial mal darüber. Erste Schritte beim GFX'en Das Programm: Am Anfang direkt gesagt: Erwartet bitte nicht das es einfach ist mit einem Grafikprogramm umzugehen. Dazu braucht es schon erstmal ein wenig Erfahrung und Geduld. Also muss ich euch...



All times are GMT +1. The time now is 09:36.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.