D2NT Aura - Auto - Stack - Script (auradin)

03/19/2011 22:00 easy7going#1
Hallo zusammen,

da ich schon seit geraumer Zeit bei euch mitlese, möchte ich nun auch eine Kleinigkeit beisteuern.
Wie der Titel schon sagt handelt es sich um ein Aura-Auto-Stack Script für einen Auradin und kann wahlweise für den Helm oder die Rüstung angewendet werden.

Ich lasse derzeit das Script für einen BaalLeechFight follow bot auf HC laufen und bin mitlerweile bei Run 483, was ca. 32h Laufzeit entspricht.

Ich habe versucht das Script so sicher wie irgend möglich zu machen, soll heißen: der Bot soll tunlichst seine Dreams nich wegwerfen :rolleyes:
Daher wird fast alles doppelt und dreifach geprüft und wiederholt da durch Lags, Interrups, fragmentiertem Speicher, etc. es doch mal passieren kann das kurzfristig ein falscher Zustand angenommen wird und eine Schleife fälschlicherweise verlassen wird.
Also nich wundern das im Script zum Teil die selbe Schleife zwei bis vier Mal hintereinander auftaucht bzw. geprüft wird.

Verbesserungsvorschläge und Co. sind immer gern gesehn.

Btw. kann mir bitte wer das Itemprefix für Dream zukommen lassen?
Dann könnte ich noch ein SwapWeapon() einbaun für den Fall das der Char grad nicht sein Dream Schilt auf Tasche hat.


So, dann noch viel Spass beim austesten.


Best regards
easy7going aka eukl1d


Code:
[COLOR=Green]//[/COLOR]
[COLOR=Green]//script: NTAuraAutoSTACK.ntj[/COLOR]
[COLOR=Green]//description: [/COLOR]
[COLOR=Green]//the script will auto-stack your aura for a Dream helm or a Dragon armor[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//location:[/COLOR]
[COLOR=Green]//store the script in the folder: D2NT\scripts\NTBot\bots\[/COLOR]
[COLOR=Green]//and name it for example: NTAuraAutoSTACK.ntj[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//how to start the script: [/COLOR]
[COLOR=Green]//make a push-call in your char config: NTConfig_Paladin_YOURcharNAMEhere.ntl at the start via:[/COLOR]
[COLOR=Green]//NTConfig_Script.push("NTAuraAutoSTACK.ntj");[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//HOW SAFE IS IT[/COLOR]?????
[COLOR=Green]// ---> SHORT  version: its pretty safe, but its impossible to bring it up to a 100[/COLOR]%
[COLOR=Green]//[/COLOR]
[COLOR=Green]// ---> EXTENDED version:[/COLOR]
[COLOR=Green]//well, i use that script in HC for my BaalLeechFight-Bot (Follow-Bot) and the bot still wear his Dreams after 483 runs, even if i accidentally clicked around or pressed a button (like Esc/M/I/O/..) during the stack-task[/COLOR]
[COLOR=Green]//the script will double and tripple check everything but thats not a 100[/COLOR]% warranty!!!
[COLOR=Green]//so, the chance to lose your items should be incredibly small (as long as you don't click around during the stack-task)[/COLOR]
[COLOR=Green]// NEVER FORGET [/COLOR]=== >the chance to lose your items will rise if you click around!! even if the script intercepts most of it ---------------->TRY TO AVOID THAT<----------------------
[COLOR=Green]//if you aren't sure about the script ---> try it with a dummy[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//ya, maybe its a bit overdone with all the security checks/delays etc... but hey, as long as it works that well [/COLOR]^_^
[COLOR=Green]//[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//best regards[/COLOR]
[COLOR=Green]//eukl1d[/COLOR]
[COLOR=Green]//////////////[/COLOR]



[COLOR=Green]////////////////////////////////////////////////////////[/COLOR]
[COLOR=Green]//[/COLOR]|###########|
[COLOR=Green]//[/COLOR]|##OPTIONS##|
[COLOR=Green]//[/COLOR]|###########|
[COLOR=Green]//[/COLOR]
[COLOR=Green]//Stack Item -->[/COLOR] Helm = 1 , Armor = 3
[B][I][COLOR=Navy]var[/COLOR][/I][/B] BodyPart = [COLOR=Red]1[/COLOR];
[COLOR=Green]//[/COLOR]
[COLOR=Green]//********stack amount***********[/COLOR]
[B][I][COLOR=Navy]var[/COLOR][/I][/B] StackAmount = [COLOR=Red]100[/COLOR];  [COLOR=Green]//around 35sec for 100 stacks[/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]//******delay between action******[/COLOR]
[B][I][COLOR=Navy]var[/COLOR][/I][/B] StackDelay = [COLOR=Red]60[/COLOR];     [COLOR=Green]// do not change! + don't change any other delay! if you still want to change it --> test it with a DUMMY![/COLOR]
[COLOR=Green]//[/COLOR]
[COLOR=Green]////////////////////////////////////////////////////////[/COLOR]





[B][I][COLOR=Navy]function[/COLOR][/I][/B] NTMain()
{
    Include([COLOR=Gray]"libs/common/NTCommon.ntl"[/COLOR]);
    NTC_IncludeLibs();
    NTC_IncludeConfig([COLOR=Gray]"NTBot/char_configs"[/COLOR]);
    NT_LoadConfig();
    NTSI_LoadNIPFiles([COLOR=Gray]"NTBot/item_configs"[/COLOR]);
    NTA_Initialize();

    [B][I][COLOR=Navy]if[/COLOR][/I][/B](!NTTM_CheckAct())
    {
        NTC_SendMsgToScript([COLOR=Gray]"NTBotGame.ntj"[/COLOR], [COLOR=Gray]"NTTM_CheckAct()"[/COLOR]);
        [B][I][COLOR=Navy]return[/COLOR][/I][/B];
    }

    NTC_PingDelay([COLOR=Red]500[/COLOR]);

    [B][I][COLOR=Navy]var[/COLOR][/I][/B] _merc = NTC_GetMerc();                      
    NTC_PingDelay([COLOR=Red]50[/COLOR]);
    [B][I][COLOR=Navy]if[/COLOR][/I][/B](_merc) [COLOR=Green]//merc alive [/COLOR]= true, else the script will stop
    {
        [B][I][COLOR=Navy]var[/COLOR][/I][/B] _items = _merc.GetItems();
    
        [B][I][COLOR=Navy]if[/COLOR][/I][/B]((BodyPart!=[COLOR=Red]1[/COLOR])&&(BodyPart!=[COLOR=Red]3[/COLOR]))
        {
            BodyPart=[COLOR=Red]1[/COLOR];
        }

        [COLOR=Green]//double check[/COLOR]
        NTC_PingDelay([COLOR=Red]150[/COLOR]);
        NT_SecurityCheck(); [COLOR=Green]//security check[/COLOR]
        NTC_PingDelay([COLOR=Red]150[/COLOR]);
        NT_SecurityCheck(); [COLOR=Green]//security check[/COLOR]

        [B][I][COLOR=Navy]if[/COLOR][/I][/B](_items)
        {
            NTC_PingDelay([COLOR=Red]StackDelay[/COLOR]);
            SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
            SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
            NTC_PingDelay([COLOR=Red]50[/COLOR]);

            [B][I][COLOR=Navy]if[/COLOR][/I][/B](me.ClickMercItem([COLOR=Red]BodyPart[/COLOR]))
            {
                NTC_PingDelay([COLOR=Red]100[/COLOR]);
                [B][I][COLOR=Navy]if[/COLOR][/I][/B](me.itemoncursor)
                {
                    [B][I][COLOR=Navy]for[/COLOR][/I][/B]([B][I][COLOR=Navy]var[/COLOR][/I][/B] count = [COLOR=Red]0[/COLOR]; count < StackAmount; count++)
                    {
                        NTC_PingDelay([COLOR=Red]StackDelay[/COLOR]);
                        SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
                        SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
                        me.ClickItem([COLOR=Red]BodyPart[/COLOR]);
                        NTC_PingDelay([COLOR=Red]StackDelay[/COLOR]);
                        SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
                        SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]);
                        me.ClickMercItem([COLOR=Red]BodyPart[/COLOR]);
                        NTC_PingDelay([COLOR=Red]StackDelay[/COLOR]);
                    }
                    SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]false[/COLOR][/I][/B]); [COLOR=Green]// close inv[/COLOR]
                    SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]false[/COLOR][/I][/B]); [COLOR=Green]// close inv merc[/COLOR]
                    NTC_PingDelay([COLOR=Red]StackDelay[/COLOR]);
                    NT_SecurityCheck(); [COLOR=Green]//security check[/COLOR]
                }
            }
        }
        
        NTC_PingDelay([COLOR=Red]1000[/COLOR]);
    }

    [B][I][COLOR=Navy]for[/COLOR][/I][/B]([B][I][COLOR=Navy]var[/COLOR][/I][/B] count = [COLOR=Red]0[/COLOR]; count < [COLOR=Red]4[/COLOR]; count++)
    {
        NT_SecurityCheck(); [COLOR=Green]//security check[/COLOR]
        NTC_PingDelay([COLOR=Red]500[/COLOR]);
    }

    NTC_SendMsgToScript([COLOR=Gray]"NTBotGame.ntj"[/COLOR], [COLOR=Gray]"SCRIPT_END"[/COLOR]);
}

[COLOR=Green]//security check, if item on cursor[/COLOR]
[B][I][COLOR=Navy]function[/COLOR][/I][/B] NT_SecurityCheck()
{
    [B][I][COLOR=Navy]while[/COLOR][/I][/B](me.itemoncursor)
    {
        NTC_PingDelay([COLOR=Red]150[/COLOR]);
        SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]); [COLOR=Green]// open inv[/COLOR]
        SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]); [COLOR=Green]// open inv merc[/COLOR]
        NTC_PingDelay([COLOR=Red]50[/COLOR]);
        me.ClickItem([COLOR=Red]BodyPart[/COLOR]);
        NTC_PingDelay([COLOR=Red]150[/COLOR]);

        [B][I][COLOR=Navy]if[/COLOR][/I][/B](me.itemoncursor)
        {
            SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]); [COLOR=Green]// open inv[/COLOR]
            SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]true[/COLOR][/I][/B]); [COLOR=Green]// open inv merc[/COLOR]
            NTC_PingDelay([COLOR=Red]50[/COLOR]);
            me.ClickMercItem([COLOR=Red]BodyPart[/COLOR]);
            NTC_PingDelay([COLOR=Red]150[/COLOR]);    
        }
        SetUIState([COLOR=Red]0x01[/COLOR], [B][I][COLOR=Navy]false[/COLOR][/I][/B]); [COLOR=Green]// close inv[/COLOR]
        SetUIState([COLOR=Red]0x24[/COLOR], [B][I][COLOR=Navy]false[/COLOR][/I][/B]); [COLOR=Green]// close inv merc[/COLOR]
        NTC_PingDelay([COLOR=Red]50[/COLOR]);
    }
}
03/19/2011 22:21 lanara#2
Das nenn ich mal einen soliden ersten Post hier im Forum. :p Kanns leider nicht testen, da ich nicht das benötigte Equip habe, aber schaut gut aus. ;)
03/19/2011 22:24 xXx__xXx#3
Hmm,wie lange macht er das denn ca. immer?

Halt wann ist das ganze abgeschlossen?

Lg rené
03/19/2011 22:27 lanara#4
Quote:
Originally Posted by Phantomracer View Post
Hmm,wie lange macht er das denn ca. immer?

Halt wann ist das ganze abgeschlossen?

Lg rené
Kannst du einstellen:

Code:
//********stack amount***********
var stack_AMOUNT = 100;  //around 35sec for 100 stacks
03/19/2011 22:35 easy7going#5
Quote:
Originally Posted by lanara View Post
Das nenn ich mal einen soliden ersten Post hier im Forum. :p Kanns leider nicht testen, da ich nicht das benötigte Equip habe, aber schaut gut aus. ;)
Danke, soweit ich weiß hast du mir gestern ein Dream für eine Hand voll fg vermacht.

Testen kannst du es trotzdem, nimm einfach n Dummy ;)

Best regards
03/19/2011 22:44 lanara#6
Quote:
Originally Posted by easy7going View Post
Danke, soweit ich weiß hast du mir gestern ein Dream für eine Hand voll fg vermacht.
Da musst du mich verwechseln, das letzte mal, dass ich etwas für FG getradet habe war vor etwa 4-5 Monaten. ;)
03/19/2011 23:07 easy7going#7
Hmm.. wenn du das sagst, aber vllt verklobbst du deine Items ja auch im Schlaf, vorallem die Dreams *lach*...

^_^
03/19/2011 23:08 Muddy Waters#8
Wirklich ein schöner erster Beitrag, freut uns doch immer wieder, wenn mal jemand was eigenes beisteuert. :)

// Werbung Start
Übrigens darfst du eigene Entwicklungen auch gerne in der Programming Sektion veröffentlichen, dort gehen sie vermutlich weniger schnell unter.
// Werbung Ende

Ohne es getestet zu haben, nur mal ein paar Anmerkungen zu dem was ich so sehe:
  • ein paar Einrückungen sind nicht ganz sauber
  • ich verstehe die Wahl deiner Bezeichner teilweise nicht, irgendwie ohne System und teilweise schwer zu lesen
  • deinen "quadro check" würde ich schon allein aus Gründen der Schreibfaulheit in einer for-Schleife unterbringen ;)
  • das Präfix für Dream lautet 0x5037
Mit dem Präfix kannst du dann auch direkt prüfen, ob überhaupt die benötigten Dream Helme vorhanden sind, so habe ich das jedenfalls in meinem Script für diesen Zweck gemacht. :)

Lg
Muddy
03/19/2011 23:16 easy7going#9
Ah besten Dank.

Einrückungen: kann mir leider auch nicht helfen warum es teilweise so arg verschoben war/ist, hab es teilweise schon mühselig von Hand im Post überarbeitet

Bezeichner: was genau fällt dir schwer daran? Sorry manchmal sieht man es selbst nicht da alles so sonnenklar erscheint ;)

Programming Sektion: werd ich machen

Item Prefix: super, btw. wo finde ich denn die Liste dafür bzw. wo kann ich das auslesen? Hab mich durch alle text files gekämpft aber vermutlich dann doch übersehen..

quadro check: ja da hast du recht, hab ich vor lauter copy paste aus den Augen verloren (edited)

Best regards
03/19/2011 23:57 Muddy Waters#10
Es ist so, dass D2NT schon von Haus aus einen gewissen Standard, bei der Wahl der Bezeichner vorgibt.

Ich richte mich nach Möglichkeit immer nach diesem Standard. Auch wenn ich gerne mal das Präfix NT durch meine Initialen ersetze, um etwas als mein eigen zu brandmarken. :D

Ist natürlich auch eine Frage woher man in Sachen Programmiersprachen kommt.
Du machst auf mich zumindest leicht den Eindruck, als wärst du in irgendeiner Form in dem Bereich vorgeschädigt.
Wenn nicht, nochmal Hut ab, in dem Fall ist das schon wirklich eine Leistung. :)

Zum Thema; Beispiel für einen sehr schlecht lesbaren Bezeichner:
Code:
NT_ITEMonCURSOR_securityCHECK()
Die Verwendung von Teilbegriffen aus Upper Case Buchstaben in Bezeichnern, die nicht zu Konstanten gehören, ist unüblich.

Besser ist deshalb einfaches camel casing, so sähe der Name dann so aus:
Code:
NT_ItemOnCursorSecurityCheck()
Aber auch so ist der Bezeichner noch nicht optimal, da man ihn im Bezug auf den Kontext auch kürzer fassen könnte und da er ausserdem als Bezeichner einer Funktion den Charakter eines Verbs haben sollte.

Also in etwa:
Code:
NT_CheckItemOnCursor()
Das könnte man noch sehr viel weiter ausführen und wir könnten das im Detail diskutieren, aber sofern das gewünscht ist, machen wir das in der Programming Sektion, denn dort sind solche Dinge thematisch deutlich besser platziert als hier. ;)

Achja, und das Präfix kannst du durch eine Ausgabe der entsprechenden Eigenschaft einer Item Unit mit relativ wenig Aufwand herausfinden.
Setzt eben voraus, dass man das entsprechende Item in irgendeiner Form zur Verfügung stehen hat.

Und zur Einrückung:
Du solltest immer nach dem gehen was dir die Vorschau anzeigt, nicht nach dem was du im Editierfenster siehst.
Und du solltest Code immer in deinem Editor bearbeiten und dann komplett kopieren.

Obwohl dort tatsächlich einige seltsame Leerzeichen drin waren, vielleicht lag es auch an deiner Nachträglichen Anpassung.


Lg
Muddy
03/20/2011 00:06 kal_el#11
moved
03/20/2011 00:12 easy7going#12
Besten Dank kal_el,
wärst du so gut und würdest den zweiten thread löschen? ^_^
Gelöscht wird nur, wenn der Inhalt eines Themas extrem aus dem Ruder gerät, ansonsten wird nur geschlossen.
Ich habe aber mal einen Verweis auf dieses Thema eingefügt. - Muddy

@ Muddy, ein weiteres Danke, werd Morgen noch mal drüber gehn.

I'm off.

Best regards
03/20/2011 04:55 Progamer6661#13
Schöne Arbeit...sieht gelungen aus, ohne jetzt in Details zu gehen...
03/20/2011 22:45 easy7going#14
Abend zusammen,

in Run 871 hat mein Pala leider das Zeitliche gesegnet (ja, bis dato hat er noch immer seine Dreams getragen ;) ).
Zu schade, wollte eigentlich die 1000 und damit die ca. 66,6 Stunden voll machen bevor ich ein kleines Update bringe ^^

R.I.P. TheVoid_Ger

Best regards
05/13/2011 16:42 UncleChicken#15
hey,
ich hab mich an die Anleitung gehalten, aber mein leech-bot bleibt nur noch in der Stadt stehen, keine Ahnung warum.
Wo genau muss ich den "push-Befehl" einfügen? Ich habs an mehreren Stellen innerhalb der jeweiligen Char-Config des Dream-users probiert. Kein Erfolg.

Ideen?