MF-Weaponslot Switch

02/25/2011 16:39 MrBaltimore#1
Moin zusammen,

Finde einfach nix zum Thema, also frag ich mal hier nach.

Wie muß ich die Attack Library umschreiben, dass der Bot einen Weaponslot-Switch macht, wenn das Leben vom Boss nur noch x-% beträgt und den Slot bis zum Tod des Bosses bei behält und danach wieder auf den Kampfslot wechselt?

Hoffe hab mich da verständlich ausgedrückt. Ist halt dafür da, kurz vorm Ende mehr MF zu haben.

Gruß
Balti
02/25/2011 16:44 Muddy Waters#2
Wärst du so nett und editierst in deinen Beitrag noch deine NTA_KillMonster() Funktion rein?

Dann haben wir eine gemeinsame Basis auf die ich eingehen kann, so würde ich vermutlich an dir vorbei reden und Mitleser können nicht folgen.

Die Funktion findest du in der NTAttack library.
Und denk an die [Code]-Box. ;)

Lg
Muddy

Edit: Ich wollte doch weniger Vollzitate posten... :o
02/25/2011 16:50 MrBaltimore#3
Kommt sofort. Ist komplett Standard.

02/25/2011 17:10 Muddy Waters#4
Das hier ist einmal die schnelle Lösung, sehr einfach gestrickt:
Code:
function NTA_KillMonster(classid)
{
    var _target, _swapped;

    if(NTConfig_AttackSkill[1] < 1)
        return false;

    _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);

    if(!_target)
        return false;
        
    _swapped = false;
    
    if(_target.IsAttackable())
    {
        var _attackcount = 0;
    
        while(_attackcount < 300 && NTA_IsValidMonster(_target))
        {
            if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
                break;

            _attackcount++;
            
            if(!_swapped && parseInt(_target.hp * 100 / _target.hpmax) < MWConfig_SwitchSlotHP && (_target.classid == 156 || _target.classid == 211 || _target.classid == 242 || _target.classid == 243 || _target.classid == 544))
                _swapped = NTC_SwapWeapons();
        }
    }
    
    if(_swapped)
        NTC_SwapWeapons();

    return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
}
Da ich es nicht Kommentiert habe, gibt es hier mal ein paar Kommentare in Textform:
Die Schwelle habe ich in einer lokalen Konstante untergebracht, die mit dem gewünschten Wert initialisiert wird. Schicker wäre natürlich eine passende Variable in der Char Config.
Wenn du das lieber möchtest, frag nach, ist nur minimal mehr Aufwand.

Die Config Variable MWConfig_SwitchSlotHP muss natürlich noch deklariert werden. Dazu einfach die NTConfig.ntl im Config Ordner öffnen und irgendwo folgendes einfügen:
Code:
var MWConfig_SwitchSlotHP;
Danach muss die Variable nur irgendwo in der Charconfig initialisiert werden. Als Wert wird dabei die HP Schwelle des Monster in Prozent angegeben, bei der ein Slotwechsel erfolgen soll.
Soll kein Slotwechsel erfolgen, wird die Variable mit 0 initialisiert.

Hier einmal beispielshaft die initialisierung mit für eine Schwelle von 10%:
Code:
MWConfig_SwitchSlotHP = 10;
Natürlich ist diese Lösung auch dahingehend etwas suboptimal, dass einfach ein Slotwechsel durchgeführt wird, ohne zu überprüfen, welche Eigenschaften der aktuelle Slot hat. Allerdings wäre das Analysieren der verschiedenen Slots deutlich komplizierter und würde hier vermutlich den Rahmen sprengen, jedenfalls wenn deine D2NT Version nicht ohnehin schon entsprechende Funktionen dafür mitbringt.
Die Variable _swapped brauchen wir übrigens, um zu verhindern, dass nach jedem Angriff ein Slotwechsel erfolgt und auch um am Ende zurückzuwecheln, falls ein Slotwechsel erfolgt ist.

Edit: Übrigens wird der Slotwechsel bei obiger Funktion nur bei den Aktbossen Andariel, Duriel, Mephisto, Diablo und Baal durchgeführt.

Soviel dazu, bei Rückfragen, einfach melden.

Lg
Muddy
02/25/2011 17:30 Derbeth#5
danke schön wollte das gleich auch fragen ich probiers ma aus und meld mich dann nochma zum dankeschön :)
02/25/2011 17:31 MrBaltimore#6
Die Sache mit der Variablen bekomm ich wahrscheinlich *aus dem Fenster lehn* auch alleine hin.

Was mich mehr oder weniger stört, ist das nicht geprüft wird welcher slot aktiv ist. Meine das so. Slot 1 = Kampfslot und Slot2 = MF Slot.
Also wenn Slot1 aktiv ist dann weaponswitch zu Slot2, ist Slot2 aktiv, dann kein weaponswitch, aber nach dem Tod vom Boss ein Switch zu Slot1.
Keine Ahnung, ob´s möglich ist.

Ach ja, wo ist NTC_SwapWeapons() definiert. Sry, muss blöd fragen, da keine Ahnung. Eigentlich wollte ich mich ja nicht tiefer damit beschäftigen, wegen keine Zeit, aber interessant wärs ja schon ^^.

*MrBaltimore <- trauert den alten AutoIt Zeiten hinterher*

P.S.: _SWAP_WEAPON_HP_THRESHOLD = 0.1
Wird hier definiert wann er switchen soll ? Sind aber keine % oder, da ja hier _target.hp / _target.hpmax <= _SWAP_WEAPON_HP_THRESHOLD verglichen wird
02/25/2011 17:39 Derbeth#7
Hab auch noch was, kann ich das irgendwie einstellen das das nur mein Hdin macht? habe noch 2 Sosos am laufen die kein weaponswitch benötigen...

Sonst funktionierts perfekt! besten Dank!
02/25/2011 17:51 Muddy Waters#8
Quote:
Originally Posted by Derbeth View Post
danke schön wollte das gleich auch fragen ich probiers ma aus und meld mich dann nochma zum dankeschön :)
In dem Fall hat sich der Vorschlag, die Frage besser in die Programming Sektion zu verlagern, ja gelohnt.

Ich dachte mir schon, dass das mehr Leute interessiert, gerade zu Ladder beginn eigentlich recht sinnvoll, wenn es wirklich noch auf MF ankommt. :)
Quote:
Originally Posted by MrBaltimore View Post
Die Sache mit der Variablen bekomm ich wahrscheinlich *aus dem Fenster lehn* auch alleine hin.

Was mich mehr oder weniger stört, ist das nicht geprüft wird welcher slot aktiv ist. Meine das so. Slot 1 = Kampfslot und Slot2 = MF Slot.
Also wenn Slot1 aktiv ist dann weaponswitch zu Slot2, ist Slot2 aktiv, dann kein weaponswitch, aber nach dem Tod vom Boss ein Switch zu Slot1.
Keine Ahnung, ob´s möglich ist.

Ach ja, wo ist NTC_SwapWeapons() definiert. Sry, muss blöd fragen, da keine Ahnung. Eigentlich wollte ich mich ja nicht tiefer damit beschäftigen, wegen keine Zeit, aber interessant wärs ja schon ^^.

*MrBaltimore <- trauert den alten AutoIt Zeiten hinterher*

P.S.: _SWAP_WEAPON_HP_THRESHOLD = 0.1
Wird hier definiert wann er switchen soll ? Sind aber keine % oder, da ja hier _target.hp / _target.hpmax <= _SWAP_WEAPON_HP_THRESHOLD verglichen wird
Zu deiner Frage:
Das Präfix der Funktion verweist auf die library, in der die Funktion definiert ist.

Siehe auch [Only registered and activated users can see links. Click Here To Register...], Punkt 5 unter "Benennung von Funktionen".
Und ja, du kannst festlegen, auf welchen Slot gewechselt wird, allerdings gewinnst du damit eigentlich gegenüber der jetzigen Lösung nichts.
Denn die Slotverteilung ist keinesfalls konstant und kann sich beispielsweise beim Ableben des Chars ändern.
In dem Fall hat man verloren, wenn man auf konstante Slots setzt.

Aber wenn du es trotzdem so machen möchtest, kannst mit NTC_SwapWeapons() mit dem Parameter 0 aufrufen, um auf den Slot mit dem Index I zu wechseln, NTC_SwapWeapons() mit dem Parameter 1 aufrufen, um auf den Slot mit dem Index II zu wechseln.

Quote:
Originally Posted by Derbeth View Post
Hab auch noch was, kann ich das irgendwie einstellen das das nur mein Hdin macht? habe noch 2 Sosos am laufen die kein weaponswitch benötigen...

Sonst funktionierts perfekt! besten Dank!
Klingt so, als sollten wir doch besser eine Config Variable definieren. :)

Ich editiere das gleich oben rein. ;)

Lg
Muddy
02/25/2011 18:00 MrBaltimore#9
Ok, nicht daran gedacht, dass sich die Werte nach Char Tod ändern.

So langsam steig ich in dem Aufbau durch, dank deinem Guide. Übrigens :handsdown: , schöne Arbeit.

P.S.: Les mir grad Muddy's D2NT V1.13 mit Update vom 18.12.2010 durch. Hört sich ja gut an, nur wieder diese sch.. englische Installation. Muss nochmal suchen wie das nochmal ging Deutsch -> Englisch
02/25/2011 18:15 Muddy Waters#10
Quote:
Originally Posted by MrBaltimore View Post
Ok, nicht daran gedacht, dass sich die Werte nach Char Tod ändern.

So langsam steig ich in dem Aufbau durch, dank deinem Guide. Übrigens :handsdown: , schöne Arbeit.
Danke. :)

Ich würde mich ja freuen, wenn hier mehr Fragen zu so kleinen entwicklerischen Problemen kommen, denn anhand solcher kleinen Beispiele kann man meist schon eine Menge lernen und man sieht, dass sowas gar nicht so furchtbar kompliziert ist, wie es zunächst scheint.
Leider tauchen solche Fragen immer in den allgemeinen D2NT Themen auf, wo sie dann untergehen, ohne dass je eine Lösung dafür entwickelt wird.
Andererseits muss man auch sehen, dass sich die breite Masse der Fragen auf Probleme bei der richtigen Konfiguration bezieht. Sowas taucht dann teilweise auch hier auf und ist natürlich Fehl am Platze. :)

Übrigens habe ich meinen Beitrag ergänzt, nicht nur um das Einfügen einer Config Variable, sondern auch um eine Eingrenzung der möglichen Ziele auf die 5 Aktbosse.

Lg
Muddy

Edit:
Versuchs mal [Only registered and activated users can see links. Click Here To Register...], [Only registered and activated users can see links. Click Here To Register...] oder [Only registered and activated users can see links. Click Here To Register...].
Übrigens ist der Text dort ziemlich überholt, sogar auf die dort veröffentlichte Version, wird Zeit, dass ich das mal neu schreibe. :)
02/25/2011 19:03 MrBaltimore#11
THX, Diablo ist jetzt auf Englisch. Nun mal sehen, ob ich deine Version ans laufen bekomme ^^.

Quote:
Ich würde mich ja freuen, wenn hier mehr Fragen zu so kleinen entwicklerischen Problemen kommen, denn anhand solcher kleinen Beispiele kann man meist schon eine Menge lernen und man sieht, dass sowas gar nicht so furchtbar kompliziert ist, wie es zunächst scheint.
Leider tauchen solche Fragen immer in den allgemeinen D2NT Themen auf, wo sie dann untergehen, ohne dass je eine Lösung dafür entwickelt wird.
Andererseits muss man auch sehen, dass sich die breite Masse der Fragen auf Probleme bei der richtigen Konfiguration bezieht. Sowas taucht dann teilweise auch hier auf und ist natürlich Fehl am Platze.
Tja, denke das Problem ist da doch eher die Unwissenheit der Leute. Siehe mich. Nicht genug damit befasst und siehe da, auch im falschen Bereich gelandet. Und es ist selten so einen freundlichen Wissenden wie dich zu finden. In der Regel wird man ziemlich nieder gemacht. Also mal wieder :handsdown: vor dir.

Quote:
Übrigens habe ich meinen Beitrag ergänzt, nicht nur um das Einfügen einer Config Variable, sondern auch um eine Eingrenzung der möglichen Ziele auf die 5 Aktbosse.
Ähm, sry, wie war das nochmal, MF hat auf Runendrops keine Einflüsse oder?

Lg
MrBaltimore
02/25/2011 22:57 Derbeth#12
Besten Dank, müsste jetzt wohl klappen :)

Wenn nur mein DSL Anbieter so schnell auf Fragen antworten würde ;)

Gruss Derb
02/26/2011 12:41 MrBaltimore#13
Sry, kleines Prob ist noch da!

Und zwar, wenn der Char stirbt und der MF Slot ist aktiv, wird ja nicht beim nächsten Start auf den richtigen Slot zurück gestellt. Bot läuft also die ganze Zeit mit aktiven MF Slot rum.
Da meine Fb/Fo noch recht häufig stirbt, kann ichs so nicht benutzen, trotzdem THX.

Lg
Balti

P.S.: Hab deinen Bot mal getestet. Läuft auch soweit, nur stirbt er immer. Bei der Gräfin teleportiert er immer hin und her und lockt dadurch zu viele an. Wie gesagt meine Soso schafft Gräfin so eben ^^. Schade, das ItemLog und einiges anderes wäre echt schön gewesen
02/26/2011 13:04 Muddy Waters#14
Quote:
Originally Posted by MrBaltimore View Post
Sry, kleines Prob ist noch da!

Und zwar, wenn der Char stirbt und der MF Slot ist aktiv, wird ja nicht beim nächsten Start auf den richtigen Slot zurück gestellt. Bot läuft also die ganze Zeit mit aktiven MF Slot rum.
Da meine Fb/Fo noch recht häufig stirbt, kann ichs so nicht benutzen, trotzdem THX.

Lg
Balti

P.S.: Hab deinen Bot mal getestet. Läuft auch soweit, nur stirbt er immer. Bei der Gräfin teleportiert er immer hin und her und lockt dadurch zu viele an. Wie gesagt meine Soso schafft Gräfin so eben ^^. Schade, das ItemLog und einiges anderes wäre echt schön gewesen
In dem Fall müsste man tatsächlich die Eigenschaften der verschiedenen Slots auswerten, was dann aber etwas kompliziert wird.

Du könntest dir mal bei meiner Version die Funktion MWC_GetSlotID(type) anschauen, die macht prinzipiell genau das, wenn auch mehr zur Bestimmung des Precast oder FindItem Slots.
Aber so in der Form könnte man das umsetzen.

Zu meiner Version:
Kannst ja testweise mal die Variable MWConfig_KeepDistanceToMonsters auf false setzen, auch wenn das in den meisten Fällen eher den gegenteiligen Effekt haben sollte. Es sei denn deine Sorc hat aus irgendeinem Grund zu wenig FCR, um vernünftig ausweichen und zwischendurch noch angreifen zu können. In dem Fall würde ich Fastmod nutzen, als Anleitung empfehle ich [Only registered and activated users can see links. Click Here To Register...].

Lg
Muddy

P.S.: Und nein, MF wirkt sich nicht auf Runen aus, aber solche Fragen kannst du besser [Only registered and activated users can see links. Click Here To Register...] stellen. ;)
02/26/2011 14:18 MrBaltimore#15
Quote:
Es sei denn deine Sorc hat aus irgendeinem Grund zu wenig FCR, um vernünftig ausweichen und zwischendurch noch angreifen zu können.
Ok, hab nur 80% erhöhte. KA ob das reicht. Kann´s Probleme damit geben, dass ich Occu benutze?

Quote:
P.S.: Und nein, MF wirkt sich nicht auf Runen aus, aber solche Fragen kannst du besser hier stellen.
Sinnlos und komisch nur für den, der´s weis! :o