[Release] Muddy's D2NT

03/03/2011 23:06 xXx__xXx#706
hmm, ihr habt alle Fehler, habt ihr alle aktuellen Updates usw. drauf?

Meiner hat beim Cuben keine Probleme!

LG rené
03/03/2011 23:11 loki-d2#707
Quote:
Originally Posted by Phantomracer View Post
hmm, ihr habt alle Fehler, habt ihr alle aktuellen Updates usw. drauf?

Meiner hat beim Cuben keine Probleme!

LG rené
updates?ich habe mir die datei heute geladen und installiert(v1.2).

lg loki
03/03/2011 23:17 xXx__xXx#708
ne meinte Windows,... weil hatte anfangs auch Probleme, als ich dann C++, NVidia usw. aktualisiert hatte Null Fehler, bei 500 Runs 1 Restart nur,... nun schon mit Muddys bot keinen einzigen Restart seit seinem Update auf 1.2!

schreibt er so irgendeinen Fehler? Und denke das es vl auch daran liegt das er schon 3 im Inventar hat,.... und somit Ammount erreicht wurde!

LG
03/03/2011 23:18 Muddy Waters#709
@loki-d2
Ich habe natürlich nicht alle Rezepte nach meinem Umbau getestet, so beispielsweise auch nie einzelne Gems, darum könnte es durchaus sein, dass dort der Wurm drin ist. Zumal man sich in den Funktionen der Cubing library gerne mal verläuft... :rolleyes:

Könntest du mir bitte mal deine globale Config bzw. deine Charconfig in einer [Code]-Box per PM zukommen lassen?
Je nachdem wo du die Rezepte eingefügt hast. ;)

Und soviele Informationen wie möglich über die derzeit auf dem Char vorhandenen Items in Stash und Inventar. Am besten du lässt ein Stashlog erstellen (Taste Einfg/Ins) und schickst das direkt mit, auch das aber bitte in einer [Code]-Box.

Damit kann ich das Problem (hoffentlich) reproduzieren und lösen. :)

Lg
Muddy

Edit: Wie gesagt, Details bitte, ich bin der letzte der behauptet das wäre in irgendeiner Form frei von Fehlern. ;)
03/03/2011 23:22 loki-d2#710
achso!ich habe den laptop heute bekommen und der war vorinstalliert.

windows 7 ist drauf ich hab jetzt nicht die geringst ahnung vom 7er da

ich xp user war.er startet eine endloßschleife beim quben und ich schalet

es jetzt mal aus bis ich eine lösung hab.

lg loki
03/03/2011 23:51 Muddy Waters#711
Da hat sich tatsächlich ein kleiner Fehler in der Cubing library eingeschlichen. :(
Die fehlerhafte Initialisierung des Cubing Arrays hatte zur Folge, dass der Char sämtliche Rezepte für Gems mit nur einem einzigen makellosen Gem als vollständig erachtet und das Cuben beginnt.

Für all diejenigen, die keine Lust auf einen erneuten Download haben:
  1. Öffnet die Cubing library ("..\scripts\libs\common\NTCubing.ntl")
  2. Geht zu Zeile 1276
  3. Ändert den if-Anweisungsblock von:
    Code:
    if(NTConfig_CubingItem[i][0] == NTCU_GEM) // Gems [COLOR="Red"]<-- Zeile 1276[/COLOR]
    	_count = 3;
    else if(NTConfig_CubingItem[i][0] >= NTCU_MAGIC && NTConfig_CubingItem[i][0] <= NTCU_MAGIC_CHARM) // Magic
    	_count = 27;
    else if(NTConfig_CubingItem[i][0] == MWCU_RARE) // Rare
    	_count = 12;
    else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON // // Crafting
    	|| NTConfig_CubingItem[i][0] >= NTCU_SOCKET_BODYARMOR && NTConfig_CubingItem[i][0] <= NTCU_SOCKET_SHIELD) // Socketing
    	_count = 9;
    else if(NTConfig_CubingItem[i][0] >= NTCU_RUNE_THUL && NTConfig_CubingItem[i][0] <= NTCU_RUNE_LEM || NTConfig_CubingItem[i][0] == NTCU_ESSENCE) // Runes/Essences
    	_count = 6;
    else // Runes >= EL && <= ORT OR >= PUL && <= CHAM
    	_count = 5;
    in
    Code:
    if(NTConfig_CubingItem[i][0] >= NTCU_MAGIC && NTConfig_CubingItem[i][0] <= NTCU_MAGIC_CHARM) // Magic
    	_count = 27;
    else if(NTConfig_CubingItem[i][0] == MWCU_RARE) // Rare
    	_count = 12;
    else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON // // Crafting
    	|| NTConfig_CubingItem[i][0] >= NTCU_SOCKET_BODYARMOR && NTConfig_CubingItem[i][0] <= NTCU_SOCKET_SHIELD) // Socketing
    	_count = 9;
    else if(NTConfig_CubingItem[i][0] >= NTCU_RUNE_THUL && NTConfig_CubingItem[i][0] <= NTCU_RUNE_LEM || NTConfig_CubingItem[i][0] == NTCU_ESSENCE) // Runes/Essences
    	_count = 6;
    else // Runes >= EL && <= ORT OR >= PUL && <= CHAM and Gems
    	_count = 5;
Nochmal vielen Dank an loki-d2 für die Meldung dieses Fehlers, ich werde die hochgeladene Version schnellstmöglich korrigieren. :)

Lg
Muddy
03/04/2011 13:50 jexhammer#712
gibts in der v1.2 nen script was hot ips checkt ? wenn ja wo stelle ich diese ein wenn nicht wie binde ich sowas ein ? bitte um Hilfe
03/04/2011 14:10 Muddy Waters#713
Ist derzeit nicht enthalten, da ich Fastmod nutze und sich die tatsächliche IP des Spiels so ohnehin nicht mehr direkt ermitteln lässt.

Die einfachste Umsetzung wäre wahrscheinlich die Modifikation des schon vorhandenen Bot Scripts MWIdleMode.ntj.

Dazu würde ich einfach mit MWConfig_IdleModeRuntime die maximale Wartezeit definieren, MWIdleMode.ntj dann als erstes Bot Script einfügen, wobei die maximal Laufzeit für das Script selber auf unendlich gesetzt wird.

Dann müsste man man in MWIdleMode.ntj noch eine Abfrage einführen, die das Script beendet, bevor die Schleife beginnt, sofern die IP des aktuellen Spiels nicht einer der gesuchten IP entspricht.

So etwas könnte so aussehen:
Code:
var _hotIPs, _currentIP;
var i;

_hotIPs = [42, 43, 44];
_currentIP = me.gameserverip.split(".")[3];

for(i = 0; i < _myHotIPs.length; i++)
{
    if(_currentIP == _myHotIPs[i])
        break;
}

if(i >= _myHotIPs.length)
    NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
Lg
Muddy
03/04/2011 14:30 jexhammer#714
okay ich danke dir dafür schonmal. habe das eingefügt. kannst mir vllt noch in einer sache helfen ?

Undzwar sagen wir mal er hat jetzt ne hot ip. Dann soll er ewig im gamebleiben oder besser dia killen..., wenn nicht sollen die scripts normal weiter laufen. oder haste das da schon drin ?

oder wenn du nen richtiger schatz bist :D, copy&paste die edited MWIdleMode.ntj :D

oder kann ich das ding von GV als script übernehmen und iwie einbinden ?
Code:
function NTMain(){

	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");

	var i;

	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");

	NTA_Initialize();

	if(!NTTM_CheckAct())	{
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
		return;
	}
	NTTMGR_TownManager();
	if(me.areaid != 1){
		if(!NTTM_TownMove("waypoint")){
			NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
			return;
		}
		if(!NTM_TakeWaypoint(1)){
			NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
			return;
		}
	}	
	NTC_SendLogToOOG(NTC_LOG_ITEM, "ÿc9 ip" + "ÿc3[" + "ÿc3" + me.gameserverip.split(".")[3] + "]", 0);
	if(NTGVCH_IpCheck()){		
		NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc9HOT IP FOUND!!!" + "ÿc3[" + "ÿc3" + me.gameserverip.split(".")[3] + "]", 0);
		me.maxgametime = 0;
		SetStatusText("ÿc1IP FOUND!! " + "   [" + me.gameserverip.split(".")[3] + "] ");	
		NTGVCH_AntiIdle();
	}		
	if(NTConfig_JustAHunter){
		Print("ÿc4 No luck!!! Time to waste time!! lest try to avoid R/D!!");
		NTC_PingDelay(NTConfig_AvoidRD*1000);
		Print("ÿc4 Next game, better luck!! [[[[= <3!!");
	}
	else{
		Print("ÿc4 No HOT IP!!! ZzzZZzZZz, it's time-to-kill time!!");
	}		
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}

function NTGVCH_IpCheck() {
	var _presentip = Number(me.gameserverip.split(".")[3]);
	for (var i = 0; i < NTConfig_HotIP.length; i++) {
		if (_presentip == NTConfig_HotIP[i]){
			return true;
		}
	}
	return false;
}

function NTT_PrintCoordinatesIPandGateway(){
	NTC_Delay(1000);
	while (me.areaid != 0){
		NTC_Delay(3000);{		
			Print("c1 got to " + "Area: " + me.areaid + " X: " + me.x + " Y: " + me.y + " On: " + me.gatewayid + " IP: " + me.gameserverip);				
		}
	}
}
	
function NTGVCH_AntiIdle(){
	while (me.areaid != 0){
		NTC_PingDelay(500);
			Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
		NTTM_TownMove("waypoint")
		Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
		
		NTTM_TownMove("akara")
		Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
			
		NTTM_TownMove("stash")
		Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
			
		Say(NTConfig_SaySomethingNoob);
		NTC_PingDelay(2000);

		Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
			
		NTTM_TownMove("charsi")
		Say("!HOT IP Found!! "  + "   [" + me.gameserverip.split(".")[3] + "] ");
		NTC_PingDelay(2000);
			
		Say("!Bring in your sitter");
		NTC_PingDelay(2000);
			
		Say("!Exit game with me");
		NTC_PingDelay(2000);
			
		Say("!Let's find another game");
		NTC_PingDelay(2000);
			
			
		NTC_PingDelay(4000);
	}
}
03/04/2011 17:06 jannimanni#715
Quote:
Originally Posted by Muddy_Waters View Post
@jannimanni

Es gibt eigentlich drei Gründe, warum der Bot sofort das Spiel verlassen könnte:
  1. Mindestens eines der beiden Objekte die die Daten für World Events und Statistik enthalten ist nicht definiert (unwahrscheinlich)
  2. Die Variable MWConfig_ExitGameOnMissingPassword hat den Wert true und du erstellst ein Spiel, ohne Passwort (in dem Fall würde nichts im Manager Log stehen)
  3. Du hast keine Bot Scripte eingefügt oder aber du hast sie schlicht und einfach falsch eingefügt (das würde auf die Fehlerbeschreibung passen)
Kannst ja mal überlegen, was davon zutrifft. ;)


Muddy
Ich bin aber auch so doof :)
Hatte oben in der Run-Liste des Bots nichts aktiviert aber dafür unten bei den einzelnen runs die // weggenommen :P


Ich hab übrigens ein neues problem:
Botte jetzt mit 2 Pallys, von unterschiedlichen accounts und auch unterschiedlichen Cdkeyset, allerdings vom selben PC aus.
der eine verabschiedet sich jedes game mit nem timeout und steht dann im chat bis die zeit abläuft, macht en neues game und wieder timeout, usw. usw.

Jemand ne idee?
03/04/2011 18:33 Muddy Waters#716
@jexhammer
Ich entscheide mich mal für die erste Möglichkeit und "bin ein Schatz", so muss ich nämlich weniger erklären. :)

In etwa so sollte die MWIdleMode.ntj dann ausshen:
Code:
/**
*    This file was written by [Only registered and activated users can see links. Click Here To Register...]                
*    Check the programming section for updates and further scripts
*    Last Update: 07/20/2010                            
*/

function NTMain()
{
    Include("libs/common/NTCommon.ntl");
    NTC_IncludeLibs();
    NTC_IncludeConfig("NTBot/char_configs");

    NT_LoadConfig();
    NTSI_LoadNIPFiles("NTBot/item_configs");

    MWC_Initialize();

    var _endtime, _starttick, _loops, _hotIPs, _currentIP;
    var i;
    
    if(!NTTM_CheckAct(me.act, true))
    {
        NTC_SendMsgToScript("MWBotGame.ntj", NTTM_CheckAct, 18, me.act, true);
        return;
    }

    NTTMGR_TownManager();

    _hotIPs = [42, 43, 44];
    _currentIP = me.gameserverip.split(".")[3];

    for(i = 0; i < _myHotIPs.length; i++)
    {
        if(_currentIP == _myHotIPs[i])
            break;
    }

    if(i >= _myHotIPs.length)
        NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
    
    _loops = 0;
    _starttick = GetTickCount();
    
    while((!MWConfig_IdleModeRuntime || MWConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()))
    {
        SetStatusText("ÿc8Switching to Act " + (1 + _loops % 5) + "...");
        NTTM_CheckAct(1 + _loops % 5);
        
        SetStatusText("ÿc8Moving to Portal Spot...");
        NTTM_TownMove("portalspot");
        
        _endtime = GetTickCount() + 6E4; // Wait 60 seconds in each act
        
        while(_endtime > GetTickCount() && ((MWConfig_IdleModeRuntime) ? (MWConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()) : true))
        {
            SetStatusText("ÿc2Running ÿc8MWIdleMode (" + ((parseInt((GetTickCount() - _starttick) / 36E5) >= 1) ? parseInt((GetTickCount() - _starttick) / 36E5) + "h" : "") + (parseInt((GetTickCount() - _starttick) / 6E4) % 60) + "m"+ (parseInt((GetTickCount() - _starttick) / 1E3) % 60) +"s) ["+ ((MWConfig_IdleModeRuntime) ? ((MWConfig_IdleModeRuntime / 60 > 1) ? parseInt(MWConfig_IdleModeRuntime / 60) + "h" : "") + (MWConfig_IdleModeRuntime % 60) + "m" : "inf") + "]");
                
            NTC_Delay(1000);
        }
        
        _loops++;
    }
    
    NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}
Damit wartet er entweder solange im Spiel, bis die als MWConfig_IdleModeRuntime angegebene Laufzeit überschritten ist, oder geht zum nächsten Bot Script über, sofern keine Hot IP gefunden wurde.

Die IPs musst du im Array _hotIPs definieren, es können beliebig viele sein.

@jannimanni
Startest du beide Instanzen über dieselbe Diablo II.exe?

Wenn ja, versuch es mal mit einer eigenen Diablo 2 Installation je verwendeter Instanz. ;)

Lg
Muddy
03/04/2011 19:55 jexhammer#717
Danke Muddy :D:D:D

Sag mal den Co-Baalfight haste entfernt wa ?

würde ja den vom sternlooper einfügen wird aber net gestart das script
03/04/2011 20:17 Muddy Waters#718
Ich kann nichts entfernen, was nie da war. ;)

Wie meinem Vorwort zu entnehmen ist - die Version richtet sich an meine eigenen Bedürfnisse. Und meine Chars arbeiten allein. :cool:

Wenigstens gestartet werden müsste es allerdings, sofern du es denn korrekt eingefügt hast. Nur das Beenden sollte ohne Änderungen nicht funktionieren.

Allerdings musst du nach dem Einfügen neuer Scripte grundsätzlich den Manager neu starten - es stehen nur Script Objekte zur Verfügung, von den Scripten, die zu Startzeitpunkt des Managers im Ordner vorhanden sind.

Alles andere existiert aus Sicht des Managers nicht.

Somit könnte es also durchaus auch einfach am fehlenden Neustart liegen. ;)

Lg
Muddy
03/04/2011 20:27 jexhammer#719
Habs in 2 formen probiert:

Code:
	// Use the following syntax for activating botscripts: MWConfig_Script.push([<ScriptName>, <Script runtime in minutes (0 is infinite)>]);
	// ***************** Current schedule ******************
	//MWConfig_Script.push(["NTAndariel.ntj", 10]);
	//MWConfig_Script.push(["NTPit.ntj", 10]); MWConfig_ClearPathToPitSpectype = 0; NTConfig_ClearPitLevel1 = 2; // 0 : don't clear, 1 : clear path only, 2 : clear all
	//MWConfig_Script.push(["NTCountess.ntj", 5]); MWConfig_ClearCountessRoomsSpectype = 0;
	//MWConfig_Script.push(["NTAncientTunnels.ntj", 10]); MWConfig_ClearPathToTunnelsSpectype = 0x01;
	//MWConfig_Script.push(["NTTravincal.ntj", 10]);
	//MWConfig_Script.push(["NTMephisto.ntj", 10]); MWConfig_OpenMephistoChest = true; MWConfig_MephistoClearArea = true;
	//MWConfig_Script.push(["NTEldritch.ntj", 10]); NTConfig_ShenkExtension = true;
	MWConfig_Script.push(["Others-BaalLeechFight.ntj", 10]); NTConfig_KillBaal = true;
	NTConfig_Leader = "asddf" // Name vom Leader-Char, Groß- und Kleinschreibung beachten!
	NTConfig_Script.push("Others-DiabloLeechFight.ntj");
	NTConfig_Script.push("Others-BaalLeechFight.ntj"); NTConfig_KillBaal = true;
entweder ich bin zu doof oder der läds net ^^
03/04/2011 20:50 Muddy Waters#720
Quote:
Originally Posted by jexhammer View Post
Habs in 2 formen probiert:

Code:
    [COLOR="Blue"]// Use the following syntax for activating botscripts: MWConfig_Script.push([<ScriptName>, <Script runtime in minutes (0 is infinite)>]);[/COLOR]
    // ***************** Current schedule ******************
    //MWConfig_Script.push(["NTAndariel.ntj", 10]);
    //MWConfig_Script.push(["NTPit.ntj", 10]); MWConfig_ClearPathToPitSpectype = 0; NTConfig_ClearPitLevel1 = 2; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //MWConfig_Script.push(["NTCountess.ntj", 5]); MWConfig_ClearCountessRoomsSpectype = 0;
    //MWConfig_Script.push(["NTAncientTunnels.ntj", 10]); MWConfig_ClearPathToTunnelsSpectype = 0x01;
    //MWConfig_Script.push(["NTTravincal.ntj", 10]);
    //MWConfig_Script.push(["NTMephisto.ntj", 10]); MWConfig_OpenMephistoChest = true; MWConfig_MephistoClearArea = true;
    //MWConfig_Script.push(["NTEldritch.ntj", 10]); NTConfig_ShenkExtension = true;
 [COLOR=Green]   MWConfig_Script.push(["Others-BaalLeechFight.ntj", 10])[/COLOR]; NTConfig_KillBaal = true;
    [COLOR=Orange]NTConfig_Leader[/COLOR] = "asddf" // Name vom Leader-Char, Groß- und Kleinschreibung beachten!
    [COLOR=Red]NTConfig_Script.push("Others-DiabloLeechFight.ntj");[/COLOR]
    [COLOR=Red]NTConfig_Script.push("Others-BaalLeechFight.ntj");[/COLOR] NTConfig_KillBaa = true;
entweder ich bin zu doof oder der läds net ^^
Alles in rot ist falsch. Das grüne ist so korrekt. Bei Unsicherheit einfach nach den Kommentaren richten, siehe blau. :)

Ich habe die eine Variable mal orange hervorgehoben. Die ist nur eventuell falsch. :D
Sie ist richtig, sofern du sie an anderer Stelle (im Normalfall in der Deklarierungsliste NTConfig.ntl) deklariert hast und falsch, sofern du das nicht getan hast.
Sollte letzteres zutreffen, reicht es zum Testen aus, wenn du die Variable einfach direkt in deiner Char Config Deklariert und initialisierst, ihr also in anderen Worten ein var Statement spendierst. ;)

Ich kenne den Aufbau des Scripts nicht, aber sollte dort irgendeine Form von Warteschleife laufen, bis der Leader gefunden wurde, läuft das Script wahrscheinlich soweit, kann aber den Leader niemals finden, weil die Variable NTConfig_Leader in diesem Kontext nicht deklariert ist.

Sollte dem so sein, hast du eine klassische Endlosschleife, wenn auch keine wirklich böse, die in Sekunden einen Speicherüberlauf produziert. :rolleyes:

Lg
Muddy