Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

IE.au3 + Margonem


Rekomendowane odpowiedzi

Opublikowano

Witam, 

znowu próbuję dokończyć mój dawny projekt dla znajomego, który poprosił mnie o bota do Margonem. Aktualnie zatrzymałem się nad problemem w pewnym sensie chodzenia.

$html = _IEBodyReadHTML ($oIE)
				$NPC = _StringBetween ($html,'<div class="npc"', '/b><span style=')
				If @ Then
					MsgBox (16, "Margonem Bot","Nie ma tu zadnych NPC!")
					Else
_zapiszlog ("Wczytano NPC na tej mapie")

$npcid = _StringBetween ($NPC[0],'id="','"')
$nazwapotwora = _StringBetween ($NPC[0],"tip='<b>","<")
$test = _IEGetObjById ($oIE, $npcid[0])
$a = _IEAction ($test,"click")
MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$a' & @CRLF & @CRLF & 'Return:' & @CRLF & $a) ;### Debug MSGBOX
_IEAction ($test,"click")
_zapiszlog ("Atakuję potwora o ID: "&$npcid[0] & " nazwa: "& $nazwapotwora[0])
EndIf

Aplikacja bezproblemowo wczytuje sobie NPC na mapie oraz atakuje tylko te w których jest pobliżu... I właśnie o to chodzi, że postać nie chce się przemieszczać do potworów, mimo żeby się do nich przejść wystarczy zwykłe kliknięcie w nie. Według skryptu funkcja _IEAction ($test,"click") zostaje wykonana jednak nie następuje przemieszczenie postaci.

 

Wiem że lepiej oraz pewnie łatwiej wykonałbym to na WinHttp jednak wolę zrobić to pod IE.

Chodzenie myszką mam odblokowane :D

Aktualnie nie mam pomysłu jak ten problem rozwiązać. Proszę o sugestie

 

Jak podać jakieś inne informacje to proszę napisać

 

Przykład potwora w HTML

<div class="npc" id="npc12898" style='left: 455px; top: 206px; width: 18px; height: 18px; z-index: 16; background-image: url("http://perkun.margonem.pl/obrazki/npc/zwi/pajak2.gif");' tip='<b>Nocny pająk</b><span style="color:#888">4 lvl</span>' ctip="t_npc"></div>

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Potwora to ty sobie możesz mieć i klikać w programie dziesiątki razy a i tak nie będzie szedł do niego bo dla programu nie wiadomo gdzie on się znajduje na mapie.  Znajdź to co jest odpowiedzialne za położenie i odczytaj koordynaty , może dopiero zacznie działać.

 

p.s. Dla przeglądarki pewnie to wygląda że klikasz gdziekolwiek w jej oknie. 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

@Ktosiu

Właśnie przed chwilą tak pomyślałem ale to niezbyt się zgadza z racji tego, że atakuje on zawsze i wszystko co znajduje się w jego pobliżu (w otoczeniu 1 kratki).

A z koordynatów to jest tylko pozycja obrazka

style='left: 455px; top: 206px; width: 18px; height: 18px

A nie chcę uzyskać tego, że myszka będzie się blokować.

 

Ehh, chyba jednak wezmę tego WinHttp pod lupę i spróbuję 

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Wydaje mi się że za pomocą winhttp nie osiągniesz również tego co chcesz , ponieważ działa to zupełnie inaczej, nie widać na żywo co się dzieje w przeglądarce tylko uzyskujesz jakby zrzut do pliku w postaci czystego html-a  wykonanych czynności. Bardziej nadaje się do tego udf NomadMemory.au3 gdzie można operować na obiektach w pamięci ram.

Opublikowano

W winhttp osiągnie dokładnie to co chce, gra ma chyba obsługę java skrypt i dlatego taki problem ze sterowaniem przy użyciu zwykłego udf

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

a, w jaki sposób ? bo winhttp to usługa systemowa a nie przeglądarkowa, no chyba że będzie wysyłał pakiety na ślepo . Bynajmniej ja nie widziałem aby winhttp zmieniało w czasie rzeczywistym coś w przeglądarce, wysyła po prostu pakiety

bezpośrednio do serwera bez udziału przeglądarki, a potem je odbiera można wtedy zapisać je do pliku html i lokalnie wyświetlić w postaci strony internetowej. Jeżeli uważasz że jest inaczej , to podaj jakiś przykład.

Opublikowano

Mało mnie to obchodzi w co wierzysz, jak widać podstaw nie znasz kompletnie tak samo pojęcia co to jest winhttp i traktujesz ją jako usługę systemową.

 

Winhttp bez problemu działa udając dowolną przeglądarkę nawet nie wymaga jej załączenia czy jakiegokolwiek działania.  Wystarczy że potrafi przetworzyć dane wysyłane na serwer i z serwera tak samo jak przeglądarka tylko w odróżnieniu od niej nie musi wyświetlić wyniku działania czyli nie potrzebuje interfejsu graficznego. 

 

Po co mam dawać przykłady, od tego jest cały temat w dziale gotowe skrypty , też jak widać nawet się z nim nie zapoznałeś. 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

no tak do gry przeglądarkowej nie potrzeba interfejsu graficznego, gratuluję logicznego myślenia. Gdzie zaglądałem, a gdzie nie to nie twój biznes , za pomocą winhttp stworzyłem wiele projektów i nadal myślę że do sterowania grą w przeglądarce  w czasie rzeczywistym absolutnie się nie nadaje. To też ci się udało, niby czym jest winhttp jak nie usługą systemową ? Oj chyba musisz bardziej dogłębnie przestudjować ten temat bo z tego co widzę to w większości tematów o autoit potrafisz tylko podkrzykiwać na innych , a sam nic pożytecznego nie wnosisz.

Ogarnij się i poczytaj o winhttp :)

Opublikowano

Jak nie nadaje skoro ludzie piszą masę botów z obsługą winhttp i bez problemu współpracuje z interfejsem dowolnej przeglądarki. Obudź się człowieku, piszesz podobno boty a najprostszej rzeczy nie wiesz? 

 

Dziwisz sie jak do tego  doszli, w bardzo prosty sposób wyświetlają wynik w przeglądarce w jakiej tylko im pasuje.

 

Interfejsu nie ma potrzeby ładować jeśli ktoś zautomatyzował sobie grę, np wysyłanie wojsk, zbieranie itp. W dowolnym momencie można sobie wyświetli interfejs gry po wykonaniu automatu czy nawet na żywo przeglądać jak bot steruje grą.  

Winhttp jest szybszy bez interfejsu więc wiele zadań jakie należy wykonać w przeglądarce wykonuje się nawet kilkukrotnie szybciej.  

 

Masz zapoznaj się z podstawami i tutorialem na forum 

 

http://www.mpcforum.pl/topic/791862-tut-winhttpau3-czyli-piszemy-bota-do-gieraplikacji-przegladarkowych/#entry5804044

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

z podstawami nie muszę się zapoznawać, bo je znam ale sam chyba do końca nie przerobiłeś teko tutka bo jeżeli jest inaczej to pokaż mi proszę choć jedną linijkę która mówi o obsłudze przeglądarki w taki sposób jak byś przeglądał strony za pomocą myszki i klawiatury bo jeżeli jest to zwrócę honor.

 

W dowolnym momencie można sobie wyświetli interfejs gry po wykonaniu automatu

no czyli jednak przyznajesz że po wykonaniu, z dalszą częścią zdania się nie zgadzam. To że ta metoda komunikacji z serwerem jest o wiele szybsza to ja wiem nie musisz mi tego opisywać.Chodzi o to że ja pytanie  @JDaniel1 rozumiem tak "Jaki jest sposób aby kliknąć w dany obiekt z jednoczesną wizualizacją tego co się dzieje na ekranie z zachowaniem ruchu". Niestety winhttp wyświetli ci co najwyżej statyczny obraz tego co już zrobił.

 
post_offline.png
Opublikowano

@bluefine

Jakie jest zastosowanie tej funkcji? 

W Internecie znalazłem jakiś skrypt z tą funkcją prawdopodobnie do Margonem

//1 krok w prawo

g.chat.parsers.push(function(ch){ 

if (ch.t == '!1 krok w prawo!' && ch.n == 'Darrefull' && (unix_time() - parseInt(ch.ts)) < 2) { 

if (hero) {             var x = hero.x + 1;             var y = hero.y;             

g.stop = false;

                         hero.searchPath(x, y);         }

} 

})

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

 

 

$('#tutorial').hide();
MBob = {};
MBob.bestxy = 9999;
MBob.run = 0;
MBob.id = 0;
MBob.blok = "";
MBob.xxxx = 0;
MBob.blokuj = 1;
MBob.checker = 0;
MBob.checker2 = 0;
MBob.interv1 = "";
MBob.interv2 = "";
MBob.interv3 = "";
mAlert = function(a, c, d,  {};
g.lock.add = function(i) {};
$('<div id="MBob_config">').css({
    position: "absolute",
    left: -208,
    top: -7,
    width: 199,
    height: 549,
    border: "1px gold solid",
    color: "white",
    "background-color": "black",
    "font-size": "13px",
}).appendTo("#centerbox2");
MBob_config.innerHTML = '<center><input id="MBob_nazpotwor" placeholder="Nazwy potworów">';
MBob_config.innerHTML = MBob_config.innerHTML + '<br/><br/><center><input id="MBob_healerhp" placeholder="%HP<Healer" type="number">';
MBob_config.innerHTML = MBob_config.innerHTML + '<br/><input id="dropneut" type="checkbox" value="drop">Wyrzucaj neutralne';
MBob_config.innerHTML = MBob_config.innerHTML + '<center><input id="MBob_maxdrop" placeholder="Max wartość przedmiotu" type="number">';
MBob_config.innerHTML = MBob_config.innerHTML + '<br/><br/><center><button onclick="MBob.start1()">Start</button>';
MBob_config.innerHTML = MBob_config.innerHTML + '<br/><center><button onclick="MBob.stop1()">Stop</button>';

MBob.drop = function() {
    if (dropneut.checked == true && (g.bags[0][0] - g.bags[0][1] <= 2)) {
        for (var i in g.item) {
            if (g.item[i].cl == 15 && g.item[i].pr <= MBob_maxdrop.value) {
                _g('moveitem&st=-2&id=' + i);
                $('#dropmenu').fadeOut();
                break;
            }
        }
    }
};

MBob.heal = function() {
    for (var i in g.item) {
        if (g.item[i].cl == 16 && hero.hp <= hero.maxhp * Number(MBob_healerhp.value) / 100 && MBob_healerhp.value != "") {
            $("#item" + i).dblclick();
        }
    }
};

MBob.rel = function() {
    var sukces = false;
    for (var i in g.item) {
        itemek = $("#item" + i);
        if (g.item[i].cl == 21 && itemek.css("top") == "183px" && itemek.css("left") == "92px") {
            var stat = g.item[i].stat;
            var name = g.item[i].name;
            var id = g.item[i].id;
            sukces = true;
            break;
        }
    }
    if (sukces) {
        var nrilosc = stat.indexOf("ammo");
        var ilosc = 51;
        if (nrilosc != -1) {
            ilosc = stat.slice(nrilosc + 5, nrilosc + 9);
            ilosc = parseInt(ilosc);
        }
        if (ilosc < 50) {
            for (var i in g.item) {
                if (name == g.item[i].name && id != g.item[i].id) {
                    _g("moveitem&st=1&id=" + g.item[i].id);
                    break;
                }
            }
        }
    }
};

hero.MBobgo = function(y, w) {
    var x = [],
        t = (hero.opt & 128) ? 8 : 20;
    var l = Math.max(0, Math.min(y, this.x) - t),
        h = Math.min(map.x - 1, Math.max(y, this.x) + t);
    var v = Math.max(0, Math.min(w, this.y) - t),
        u = Math.min(map.y - 1, Math.max(w, this.y) + t);
    for (var q = l - 1; q <= h + 1; q++) {
        x[q] = [];
        for (var p = v - 1; p <= u + 1; p++) {
            x[q][p] = (q >= l && q <= h && p >= v && p <= u && !isset(g.npccol[q + p * 256]) && (!map.col || map.col.charAt(q + p * map.x) == "0")) ? -1 : -2
        }
    }
    x[this.x][this.y] = 0;
    b = -1;
    road = [];
    var s = {
        x: -1,
        y: -1,
        dist: 599
    };
    for (var r = 1; r < h - l + u - v + 3; r++) {
        for (var q = l; q <= h; q++) {
            for (var p = v; p <= u; p++) {
                if (x[q][p] == -1 && ((x[q][p - 1] == r - 1) || (x[q][p + 1] == r - 1) || (x[q - 1][p] == r - 1) || (x[q + 1][p] == r - 1))) {
                    x[q][p] = r
                }
                if (x[y][w] > 0) {
                    q = h + 1;
                    break
                }
                s.dist2 = Math.abs(y - q) + Math.abs(w - p);
                if ((x[q][p] == r) && (s.dist2 < s.dist)) {
                    s.x = q;
                    s.y = p;
                    s.dist = s.dist2
                }
            }
        }
    }
    s.hdist = Math.abs(y - hero.x) + Math.abs(w - hero.y);
    if (x[y][w] > 0 || s.dist < s.hdist) {
        if (x[y][w] < 0) {
            if (y > s.x) {
                b = 2
            } else {
                if (y < s.x) {
                    b = 1
                } else {
                    if (w > s.y) {
                        b = 0
                    } else {
                        if (w < s.y) {
                            b = 3
                        }
                    }
                }
            }
            y = s.x;
            w = s.y;
        }
        road[0] = {
            x: y,
            y: w
        };
        for (var o = x[y][w] - 1, n = y, m = w; o > 0; o--) {
            if (x[n][m - 1] == o) {
                m--
            } else {
                if (x[n][m + 1] == o) {
                    m++
                } else {
                    if (x[n - 1][m] == o) {
                        n--
                    } else {
                        if (x[n + 1][m] == o) {
                            n++
                        } else {
                            o = 0
                        }
                    }
                }
            }
            if (o) {
                road[x[y][w] - o] = {
                    x: n,
                    y: m
                }
            }
        }
    }
    if (road.length > 1 && g.playerCatcher.follow == null) {
        $("#target").stop().css({
            left: y * 32,
            top: w * 32,
            display: "block",
            opacity: 1
        }).fadeOut(1000)
    }
};

var tmpBattleMsg = battleMsg;
battleMsg = function(c, t) {
    MBob.run = 0;
    var ret = tmpBattleMsg(c, t);
    if (c.search(/winner=/) >= 0) {
        _g("fight&a=quit");
        $('#loots_button').click();
        MBob.drop();
        MBob.rel();
        MBob.heal();
        MBob.run = 0;
    }
    return ret;
};


MBob.func1 = function() {
    if (MBob.run == 0) {
        hero.nextx = '';
        hero.nexty = '';
        MBob.bestxy = 9999;
        for (var i in g.npc) {
            if (MBob_nazpotwor.value.search(g.npc[i].nick) != -1 && MBob.blok.search(i) == -1 && (g.npc[i].type == 2 || g.npc[i].type == 3)) {
                x1 = Math.pow(Math.abs(hero.x - g.npc[i].x), 2);
                y1 = Math.pow(Math.abs(hero.y - g.npc[i].y), 2);
                MBob.bestxy1 = Math.sqrt(x1) + Math.sqrt(y1);
                if (MBob.bestxy1 < MBob.bestxy) {
                    MBob.bestxy = MBob.bestxy1;
                    hero.nextx = g.npc[i].x;
                    hero.nexty = g.npc[i].y;
                    MBob.id = i;
                    MBob.run = 1;
                    MBob.blokuj = 0;
                };
            };
        };
        if (hero.nextx != '' && hero.nexty != '') {
            g.stop = false;
            hero.MBobgo(hero.nextx, hero.nexty);
        }
    }
};

MBob.func2 = function() {
    if (road.length == 0 && MBob.blokuj == 0) {
            if ((Math.abs(hero.rx - g.npc[MBob.id].x) <= 1 && Math.abs(hero.ry - g.npc[MBob.id].y) <= 1) && (g.npc[MBob.id].type == 2 || g.npc[MBob.id].type == 3)) {
                MBob.blokuj = 1;
                _g("fight&a=attack&ff=1&id=-" + MBob.id);
            } else {
		if (MBob.checker2 == 2){
                MBob.blokuj = 1;
                MBob.blok = MBob.blok + "|" + MBob.id;
                MBob.run = 0;
		MBob.checker2 = 0;
		} else if(MBob.checker2 != 2){
		MBob.checker2++;
		}
            }
    }
};

MBob.func3 = function() {
    if (road.length == 0) {
        if (MBob.checker < 60) {
            MBob.checker++;
        } else if (MBob.checker >= 60) {
            MBob.run = 0;
            MBob.checker = 0;
        }
    } else {
        MBob.checker = 0;
    }
};

MBob.start1 = function() {
	MBob.interv1 = setInterval(MBob.func1, 400);
	MBob.interv2 = setInterval(MBob.func2, 300);
	MBob.interv3 = setInterval(MBob.func3, 50);
};

MBob.stop1 = function() {
clearInterval(MBob.interv1);
clearInterval(MBob.interv2);
clearInterval(MBob.interv3);
MBob.bestxy = 9999;
MBob.run = 0;
MBob.id = 0;
MBob.blok = "";
MBob.xxxx = 0;
MBob.blokuj = 1;
MBob.checker = 0;
MBob.checker2 = 0;
MBob.interv1 = "";
MBob.interv2 = "";
MBob.interv3 = "";
};

setInterval(function() {
    MBob.blok = "";
}, 30000) 

 

Wklejasz w konsole i hula.

Opublikowano

@Ballas

Znam ten skrypt, zresztą z niego często korzystam ale chciałbym stworzyć coś swojego

Zresztą niekiedy pojawia się w konsoli Warning: Bot i nic się nie chce ruszyć

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

To może tak, bawiłem się z autoit i to dosyć dużo. Miałem ogarnięte chodzenie, szukanie stworków i jakieś pierdoły. Nic ciekawego z tego nie wyszło tylko z jednego powodu - autoit ssie, js/jquery są o wiele wydajniejsze w tym wypadku. Chcesz zrobić coś sam? To tak jak wynaleźć koło na nowo. Weź się za ten kod, przeanalizuj, może wpadniesz na jakiś ciekawy pomysł i go ulepszysz.

Powodzonka

Opublikowano

Tak jak mówiłem hero.searchPath(x,y);

Zbierz sobie wszystkie moby na mapie, ich pozycje masz w html (top,left). jeśli podzielisz przez bodajże 32 lub 16 nie pamiętam otrzymasz x i y, 

wrzucasz sobie liste pozycji gdzieś, i dajesz do hero.searchPath(x,y) pokolei

zeby poprawnie wywołać hero.searchPath(x,y); potrzebujesz wstrzyknąć się do przeglądarki lub użyć javascript

Opublikowano

@bluefine

To wiem jak należy wykonać. Chyba nawet czytałem gdzieś jak wyliczyć koordynacje npc na mapie

No nic, będę próbował

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...