Wird gemacht, da wir uns hier in der Programming Sektion befinden werde ich auch etwas auf die Funktionsweise eingehen, anstatt einfach nur eine Anleitung nach dem Schema "Kopiere a, Füge es bei x ein, Kopiere dann b und füge es bei y ein" zu geben.
Zunächst mal braucht man eine Funktion zum Resetten.
Diese muss eigentlich nur folgendes leisten:
- Überprüfen, ob der Char überhaupt eine Enigma anhat (ansonsten wäre das ganze schließlich witzlos)
- Das Inventar öffnen, dann auf die Rüstung klicken und danach, wenn sich ein Item auf dem Cursor befindet, nochmal auf dieselbe Position klicken
Meine derzeitige Funktion dazu habe ich ja schon genannt, allerdings muss man sie etwas auf die Grundbedingungen zurückführen, damit sie mit allen Versionen kompatibel ist.
Das heisst konkret: übersichtliche Konstanten raus, übersichtliche Funktionen raus.
Aus stylistischer Sicht also eine einzige Katastrophe, aber was tut man nicht alles, damit es läuft.
Macht man das, könnte eine solche Funktion in etwa so aussehen:
Code:
function MWT_ResetMyArmor()
{
var i, n;
var _items;
_items = me.getItems();
if(!_items)
return false;
for(var i = 0; i < _items.length; i++)
{
if(_item[i].mode == 1 && _item[i].itemloc == 3)
{
if((_items[i].itemflag&0x4000000) && _items[i].itemprefix == 0x503B)
{
SetUIState(0x1, true);
for(n = 0; n < 80; n++)
{
if(n % 40 == 0)
me.ClickItem(3);
NTC_Delay(100);
if(me.itemoncursor)
{
NTC_PingDelay(200);
break;
}
}
if(n >= 80)
{
me.Cancel(1);
break;
}
for(n = 0; n < 120; n++)
{
if(n % 40 == 0)
me.ClickItem(3);
NTC_Delay(100);
if(!me.itemoncursor)
break;
}
me.Cancel(1);
if(n < 120)
return true;
}
break;
}
}
return false;
}
Wie man vielleicht sieht entspricht
_items einem Array welches sämtliche auf dem Char befindlichen Items enthält, genauer gesagt, deren units.
Dieses Array wird nun durchlaufen, mit dem Ziel, unsere Rüstung zu finden.
Die Position dieser entspricht einer
itemloc von 3, sofern
mode gleich 1 ist.
Die Eigenschaft
mode ist für alle angelegten Items immer 1, für ungenutzte Items (Inventar, Stash...) immer 0 und für Tränke im Gürtel 2.
Wurde die Rüstung nun enddeckt, wird überprüft überprüft ob die Eigenschaft i
temflag das Bitmuster für Runenwörter (0x4000000) enthält, und ob die Eigenschaft
itemprefix der des Runenworts Enigma (0x503B) entspricht.
Ist das der Fall, passiert genau das, was die die Funktion Leisten soll:
Das Wiederanlegen der Rüstung. Man sollte natürlich darauf achten, dass dies auch Möglich ist, ansonsten kann die Rüstung nicht wieder angelegt werden und geht möglicherweise verloren.
Achja, wie man oben am Bezeichner der Funktion erkennt, wird die Funktion in der
NTTown library implementiert.
Jetzt braucht man diese Funktion eigentlich nurnoch aufzurufen.
Das soll immer dann geschehen, wenn der sich der Char bewegen soll, aber aus irgendeinem Grund Teleport fehlt.
Die Funktion dazu heisst
NTM_Move() und ist, wie der Name schon vermuten lässt, in der
NTMove library definiert.
Hier mal ein Auszug daraus, mit eingefügtem Aufruf der oben definierten Funktion:
Code:
if(MWConfig_ResetArmor && NTC_GetSkillLevel(54) < 1)
MWT_ResetMyArmor();
if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
{
_teleport = false;
}
else
_teleport = true;
Die Funktion wird hier aufgerufen, wenn die Config Variable
MWConfig_ResetArmor dem Wert
true hat und der Char nicht über Teleport verfügt.
Die Variable müsste man natürlich noch in der
NTConfig.ntl deklarieren und dann in der jeweiligen Charconfig mit dem gewünschten Wert initialisieren. Man kann sie aber auch einfach weglassen, sodass grundsätzlich die Rüstung bei fehlendem Teleport neu angelegt wird.
Sofern die Rüstung denn eine Enigma ist, ansonsten würde gar nichts passieren.
Ich hoffe das reicht als kleine Anleitung, ansonsten nachfragen.
Übrigens habe ich die Absicherung gegen den Verlust der Eni, wie sie etwa in meiner Version vorhanden ist, weggelassen, da das den Aufwand größer machen würde.
Der Verlust der Eni ist ohnehin unwahrscheinlich, sofern denn genug Stärke zum Anlegen vorhanden ist, abgesehen davon kostet eine Eni ja mittlerweile auch nicht mehr die Welt.
Lg
Muddy