Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 23:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Release] Muddy's Mule Manager V1.2.1

Discussion on [Release] Muddy's Mule Manager V1.2.1 within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old 05/23/2011, 17:31   #151
 
elite*gold: 160
Join Date: Apr 2011
Posts: 77
Received Thanks: 18
Quote:
Originally Posted by DeathFromHeaven View Post
mit rechtsklick auf das Item kannste auswählen, was alles ausgegeben wird^^
Falls du mich meintest, hast du nicht verstanden, was ich geschrieben habe...
€dit: Ich habe doch sogar ein Beispiel gepostet... -.-

Edit2: Ich spreche übrigens von der TradeList.
DjCybo is offline  
Old 05/23/2011, 21:19   #152
 
elite*gold: 0
Join Date: Aug 2009
Posts: 435
Received Thanks: 159
Quote:
Originally Posted by DjCybo View Post
Falls du mich meintest, hast du nicht verstanden, was ich geschrieben habe...
€dit: Ich habe doch sogar ein Beispiel gepostet... -.-

Edit2: Ich spreche übrigens von der TradeList.
Ja meinte dich und doch habsch dich verstanden... denke ich zumindest :P

Code:
 
[Color=#8B814C]Arachnid Mesh[/Color] -- +119% Enhanced Defense
so gehts auch
hier mal ein bild wie ich das eingestellt habe. du musst nur den entsprechenden Haken rausnehmen

denke das ist was du wolltest, oder?
DeathFromHeaven is offline  
Thanks
2 Users
Old 05/23/2011, 23:03   #153
 
elite*gold: 160
Join Date: Apr 2011
Posts: 77
Received Thanks: 18
Quote:
Originally Posted by DeathFromHeaven View Post
Ja meinte dich und doch habsch dich verstanden... denke ich zumindest :P

Code:
 
[Color=#8B814C]Arachnid Mesh[/Color] -- +119% Enhanced Defense
so gehts auch
hier mal ein bild wie ich das eingestellt habe. du musst nur den entsprechenden Haken rausnehmen

denke das ist was du wolltest, oder?
Ja passt...
Ist aber irreführend...
Naja nun geht's auf jeden Fall!
Danke!
DjCybo is offline  
Old 05/24/2011, 01:39   #154
 
elite*gold: 0
Join Date: Aug 2009
Posts: 162
Received Thanks: 25
kann man vielleicht irgendwo einstellen das die häckchen standardmäßig nur bei den stats gesetzt sind? also ohne name, lvl req und so
z.b. bei charms

habe über 1200 items das ist ziemlich zeitaufwendig jedes item einzeln anzuklicken und die häckchen neu zu setzen
icke_binnet is offline  
Thanks
1 User
Old 05/24/2011, 09:44   #155
 
elite*gold: 0
Join Date: Mar 2009
Posts: 382
Received Thanks: 45
Quote:
Originally Posted by icke_binnet View Post
kann man vielleicht irgendwo einstellen das die häckchen standardmäßig nur bei den stats gesetzt sind? also ohne name, lvl req und so
z.b. bei charms

habe über 1200 items das ist ziemlich zeitaufwendig jedes item einzeln anzuklicken und die häckchen neu zu setzen
name und lvlreq is gerade bei rares zB von interesse (wobei auch req bei charms vereinzelt wichtig ist zB bei 15 life scs), bei magischen zaubern - da muss ich dir recht geben, zT eher unbedeutend ... und afaik geht das was du willst atm nicht, das einzige was man für die zukunft machen koennte wäre eine option einzubauen indem ich via script dem programm sagen kann "zeige mir bei allen magischen riesenzaubern folgende stats an: .... " aber da is muddygefragt inwieweit er das so übernehmen will
GruenerApfel is offline  
Thanks
2 Users
Old 05/24/2011, 10:41   #156
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
Denkbar ist das auf jeden Fall, auch wenn ich noch absolut keine Idee habe, wie man das möglichst geschickt einstellbar macht.
Aber ich denke da wird mir schon noch was einfallen.

Generell ist die Version natürlich nicht auf Perfektion ausgelegt, vielmehr gibt es zahlreiche recht neue Features, deren Verbesserungspotential sich erst zeigen muss - das wäre schonmal eins davon.

LG
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 05/24/2011, 13:14   #157
 
elite*gold: 0
Join Date: Mar 2009
Posts: 382
Received Thanks: 45
nja ..

da fällt mir spontan die affix-liste auf india als vorbild ein, du hast dann halt ne zusätzliche Option in der tradelist, als filter oder whatever kA - nur als gedankengang.... wo du wie oben zB nen magischen Riesenzauber auswählst .... dann poppen alle Eigenschaften auf die angezeigt werden koennten ( iLvL, LvLreq, Name, Affixe usw), dort wähl ich mir dann aus welche Eigenschaften angezeigt werden sollen zB um bei Zaubern zu bleiben ... + 1 to skilltree; max-ar; life etc .... und wenn ich jetzt zB alle zauber xy in meine tradelist importiere, filtert er automatisch nach meiner angabe, spuckt mir also zB nur "+1 to fire skills" aus ohne dabei den namen oder die lvlreq etc mit anzuhängen zumindest net so lange ich das net will, ... rechtsclick edit sollte dennoch weiter angewand werden können denk ich

is halt dann zwecks buganalyse interessant wie man das dann mit charms handlet die durch den filter keine ausgabe bringen ... wenn ich jetzt zB nur skiller aktiviert habe, 10 zauber einlese aber nur 9 davon skiller sind, ob dann ne anfrage kommen soll was mit dem zauber #10 passieren soll oder ob der dann einfach übergangen wird (würde variante #1 bevorzugen, nachfragen is immer gut)

das sollte aber echt nur optional sein, heißt nur dann angewand werden wenn ich den - ich nenns jetzt einfach mal so - "Filter" aktiv habe, sonst halt ganz normal die standartausgabe wie bisher
GruenerApfel is offline  
Old 05/25/2011, 17:41   #158
 
elite*gold: 0
Join Date: Aug 2004
Posts: 233
Received Thanks: 39


nachdem ich erstmal ein paar andere sachen angegangen bin will ich mit damit mal anfangen.

Code:
			if(!Account)
				Say("/whoami");
Wenn Account nicht Deklariert ist, dann soll er /whoami sagen

Code:
function MW_ChatHandle(msg, type)
{
	var _message, _messenger;
	
	if(!Account && type == 3 && msg.indexOf("<BattleNet>") > -1)
	{
		Account = msg.replace(/<BattleNet>(.)+\(\*([A-Za-z0-9_.:'+!^\-\[\]\(\)]{1,15})(#[0-9])?\),(.)+/gi, "$2");
		
		if(Account.length > 15)
			Account = "FORMAT_ERROR";
			
		Print("ÿc2Accountname registered! (" + Account + ")");
	}
}
Das ist die Funktion die den accountnamen pharsed?

so wie ich das sehe wird die Funktion niemals aufgerufen?
und vorallem nicht mit den Übergabe parametern msg und type.

Wie speichere ich die Ausgabe von /whoami, in eine Variable mit der ich dann MW_ChatHandle callen kann?
MW_ChatHandle(Var, 3)
letsid is offline  
Old 05/25/2011, 17:51   #159
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Weiter oben in der Datei wird die Funktion einem Eventhandler zugeteilt:
Code:
RegisterEvent(EVENT_GAMEMSG, MW_ChatHandle);
...
<Hier kommt dann der "/whoami"-Aufruf rein>
...
UnregisterEvent(EVENT_GAMEMSG);
Sobald eine Meldung im Chat erscheint, wird diese Funktion aufgerufen.
Die Meldung, die dann für uns interessant ist, ist die "/whoami"-Antwort vom Battle.net!
TheCrazy11 is offline  
Thanks
2 Users
Old 05/25/2011, 18:31   #160
 
elite*gold: 0
Join Date: Aug 2004
Posts: 233
Received Thanks: 39
Ah jetzt ja und wieder was gelernt, danke für die Schnelle Antwort


Funktioniert einwandfrei.
Gerade alles immer auf dem Aktuellen stand


Habe ein neues Script geschrieben welches im /bots/ verzeichniss abgelegt werden muss und als letzes script aufgerufen wird. (hatte auch andere ansätze aber ich habs nicht hinbekommen, dass er es als letzes ausführt)

Code:
/**
*	This file was written by 				
*	Check the programming section for updates and further scripts
*	Last Update: 02/05/2011							
*/
var Account = "";

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

	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");
	
	MWC_Initialize();
	
	RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
	Say("/whoami");
        NTC_Delay(1000);
	UnregisterEvent(EVENT_GAMEMSG);
	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}

function NT_GameMsgEvents(msg, type)
{
	var _message, _messenger, _output, _date;
	var i;	
	
	if(!Account && type == 3 && msg.indexOf("<BattleNet>") > -1)
	{
		Account = msg.replace(/<BattleNet>(.)+\(\*([A-Za-z0-9_.:'+!^\-\[\]\(\)]{1,15})(#[0-9])?\),(.)+/gi, "$2");
		
		if(Account.length > 15)
			Account = "FORMAT_ERROR";
			
		Print("ÿc2Accountname registered! (" + Account + ")");
		MWI_WriteMuleManagerOutput(Account);
	}
}
letsid is offline  
Thanks
1 User
Old 05/27/2011, 16:02   #161
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Quote:
Originally Posted by letsid View Post
Ah jetzt ja und wieder was gelernt, danke für die Schnelle Antwort


Funktioniert einwandfrei.
Gerade alles immer auf dem Aktuellen stand


Habe ein neues Script geschrieben welches im /bots/ verzeichniss abgelegt werden muss und als letzes script aufgerufen wird. (hatte auch andere ansätze aber ich habs nicht hinbekommen, dass er es als letzes ausführt)

Ich habe das auf eine andere Variante gelöst, habe meine MWBotGame.ntj umgeschrieben:
Da es sonst zu groß geworden wäre, ist nicht die ganze MWBotgame.ntj angehängt, die einzufügenden Codeteile sollten leicht eingebunden werden können...
Code:
/**
*	This file was modified by 
*	Check the programming section for updates and further scripts
*	Last Update: 02/26/2011
*/
// Global constants
const _MWBG_CHAT_COMMAND_TRIGGER = '.';

// Global variables
var _MWBG_ExperienceThresholds = new Array(
500, 1500, 3750, 7875, 14175, 22680, 32886, 44396,																		// Level 2 - 9
57715, 72144, 90180, 112725, 140906, 176132, 220165, 275207, 344008, 430010,											// Level 10 - 19
537513, 671891, 839864, 1049830, 1312287, 1640359, 2050449, 2563061, 3203826, 3902260,									// Level 20 - 29
4663553, 5493363, 6397855, 7383752, 8458379, 9629723, 10906488, 12298162, 13815086, 15468534,							// Level 30 - 39
17270791, 19235252, 21376515, 23710491, 26254525, 29027522, 32050088, 35344686, 38935798, 42850109,						// Level 40 - 49
47116709, 51767302, 56836449, 62361819, 68384473, 74949165, 82104680, 89904191, 98405658, 107672256,					// Level 50 - 59
117772849, 128782495, 140783010, 153863570, 168121381, 183662396, 200602101, 219066380, 239192444, 261129853,			// Level 60 - 69
285041630, 311105466, 339515048, 370481492, 404234916, 441026148, 481128591, 524840254, 572485967, 624419793,			// Level 70 - 79
681027665, 742730244, 809986056, 883294891, 963201521, 1050299747, 1145236814, 1248718217, 1361512946, 1484459201,		// Level 80 - 89
1618470619, 1764543065, 1923762030, 2097310703, 2286478756, 2492671933, 2717422497, 2962400612, 3229426756, 3520485254);// Level 90 - 99

var _MWBG_CurScriptIndex = 0;
var _MWBG_CurScriptEndTick = GetTickCount();
var _MWBG_CurScriptStartTick = GetTickCount();

var _MWBG_LastScript = false;
var _MWBG_UserExit = false;

var _MWBG_Statistics;
var _MWBG_WorldEventData;

var _MWBG_ShowStatusText = true;
var _MWBG_ShowCurrentPing = false;

var _MWBG_PositionsPrinted = new Array();

[COLOR="red"]var Account = "";[/COLOR]

function MW_GameStatistics()
{
	...
}

function MW_WorldEventData()
{
	...
}

function NTMain()
{
	SetStatusText("ÿc8Initializing...");
	
	Include("libs/common/NTCommon.ntl");
		
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");
	
	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");
	
	var _script, _loops;
	
	_MWBG_Statistics = new MW_GameStatistics();
	_MWBG_WorldEventData = new MW_WorldEventData();	
		
	NTC_Delay(NTConfig_StartDelay);
	
	if(!_MWBG_Statistics || !_MWBG_WorldEventData)
		ExitGame();
		
	if(MWConfig_UseXMLItemlog)
	{
		if(MWI_WriteTempLogToXML())
			MWI_ClearTempLog();
	}
	
	MWI_ClearLoc();
	
	SetUIState(0x0A, true);
	
	NTT_GetCorpses();

	if(MWConfig_ExitGameOnMissingPassword && !me.gamepassword)
	{
		SetStatusText("ÿc1Exiting game...");
		ExitGame();
	}

	if(MWConfig_Script.length > 0)
	{
		NTCU_InitCubing();
			
		Load("NTBot/tools/NTToolsThread.ntj");

		RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
		RegisterEvent(EVENT_KEYDOWN, NT_KeyEvents);
		RegisterEvent(EVENT_SCRIPTMSG, NT_ScriptMsgEvents);

		MW_ResetTicks();
		
		[COLOR="red"]if(!Account)
			Say("/whoami");[/COLOR]

		Load("NTBot/bots/" + MWConfig_Script[_MWBG_CurScriptIndex][0]);

		_loops = 0;
		
		while(!_MWBG_LastScript && me.ingame)
		{
			MW_SetStatusText();
			
			if(GetTickCount() >= _MWBG_CurScriptEndTick && MWConfig_Script[_MWBG_CurScriptIndex][1] != 0 && !isNaN(MWConfig_Script[_MWBG_CurScriptIndex][1]) && !NTC_InTown() && !_MWBG_WorldEventData.Loop.Running)
			{
				_script = NTC_FindScript(MWConfig_Script[_MWBG_CurScriptIndex][0]);
				
				if(_script && _script.running)
				{
					Print("ÿc;" + MWConfig_Script[_MWBG_CurScriptIndex][0] + "ÿc8 is skipped due to exceeding the maximum runtime of ÿc;" + MWConfig_Script[_MWBG_CurScriptIndex][1] + "ÿc8 minutes!");
					
					NT_ScriptMsgEvents("SCRIPT_END");
				}
			}
			
			NTC_Delay(500);
			
			if(!_MWBG_LastScript && _MWBG_Statistics.Errors > MWConfig_GameErrorLimit)
			{
				
				NTC_StopScript(MWConfig_Script[_MWBG_CurScriptIndex][0]);

				_MWBG_LastScript = true;
			}
			
			if(_loops++ % 40 == 0)
				MW_UpdateCommonLog();
		}
	}
	
	UnregisterEvent(EVENT_GAMEMSG);
	UnregisterEvent(EVENT_KEYDOWN);
	UnregisterEvent(EVENT_SCRIPTMSG);
	
	MW_UpdateCommonLog();
	
	MW_CheckMinGametime();
	
	SetStatusText("ÿc1Exiting game...");

	[COLOR="Red"]if(!(_MWBG_Statistics.Errors > MWConfig_GameErrorLimit)) // musste ich machen, da ansonsten immer Fehler auftraten, wenn er aufgrund Errors das Game verlassen hat.
		MWI_WriteMuleManagerOutput(Account);[/COLOR]

	if(me.ingame)
		MW_PrintOutputString(_MWBG_UserExit);
	
	me.revealautomap = false;
	me.showmissileonautomap = false;
	me.showenemyonautomap = false;

	if(!NTC_InTown() && !_MWBG_UserExit)
		NTSI_PickItems(true);
		
	ExitGame();
}

function NT_GameMsgEvents(msg, type)
{
	var _message, _messenger, _output, _date;
	var i;	
	
	[COLOR="red"]if(!Account && type == 3 && msg.indexOf("<BattleNet>") > -1)
	{
		Account = msg.replace(/<BattleNet>(.)+\(\*([A-Za-z0-9_.:'+!^\-\[\]\(\)]{1,15})(#[0-9])?\),(.)+/gi, "$2");
		
		if(Account.length > 15)
			Account = "FORMAT_ERROR";
			
		Print("ÿc2Accountname registered! (" + Account + ")");
	}[/COLOR]

	if(type == 0)
	{
		...
TheCrazy11 is offline  
Thanks
1 User
Old 05/27/2011, 19:04   #162
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
Da gibt es sicherlich diverse Varianten, auch wenn ich noch nicht ganz verstehe, wozu du dir bei obiger Variante den Aufwand machst, den Account per Workaround zu bekommen.

Du willst doch den Accountnamen eines tatsächlichen Botchars haben, oder sehe ich das falsch?
Wenn ja, entspricht me.account ja in diesem Fall dem passenden Namen, daher würde es reichen einfach MWI_WriteMuleManagerOutput() ohne Parameter aufzurufen.

Quote:
Originally Posted by GruenerApfel View Post
nja ..

da fällt mir spontan die affix-liste auf india als vorbild ein, du hast dann halt ne zusätzliche Option in der tradelist, als filter oder whatever kA - nur als gedankengang.... wo du wie oben zB nen magischen Riesenzauber auswählst .... dann poppen alle Eigenschaften auf die angezeigt werden koennten ( iLvL, LvLreq, Name, Affixe usw), dort wähl ich mir dann aus welche Eigenschaften angezeigt werden sollen zB um bei Zaubern zu bleiben ... + 1 to skilltree; max-ar; life etc .... und wenn ich jetzt zB alle zauber xy in meine tradelist importiere, filtert er automatisch nach meiner angabe, spuckt mir also zB nur "+1 to fire skills" aus ohne dabei den namen oder die lvlreq etc mit anzuhängen zumindest net so lange ich das net will, ... rechtsclick edit sollte dennoch weiter angewand werden können denk ich

is halt dann zwecks buganalyse interessant wie man das dann mit charms handlet die durch den filter keine ausgabe bringen ... wenn ich jetzt zB nur skiller aktiviert habe, 10 zauber einlese aber nur 9 davon skiller sind, ob dann ne anfrage kommen soll was mit dem zauber #10 passieren soll oder ob der dann einfach übergangen wird (würde variante #1 bevorzugen, nachfragen is immer gut)

das sollte aber echt nur optional sein, heißt nur dann angewand werden wenn ich den - ich nenns jetzt einfach mal so - "Filter" aktiv habe, sonst halt ganz normal die standartausgabe wie bisher
Die Affixe in der Form habe ich aber ja nicht, ich habe lediglich einen string bzw. mehrere mit dem Inhalt der Beschreibung - daraus Affixe zu machen würde durchaus einigen Mehraufwand mit sich bringen.
Was man aber wohl machen könnte, ist die Vor-Formatierung, die derzeit auch schon stattfindet, nach außen zu legen.
Dann könnte man problemlos festlegen, etwa alle Zeilen, die "Required Level" enthalten von Haus aus zu deaktivieren.
Auch hatte ich über eine Option nachgedacht, Festlegungen von einem Item auf alle ähnlichen Items zu definieren.
Ich deaktiviere beispielsweise die Zeile "Required Level 51" bei einer IST-Rune und kann dies dann auch auf alle anderen ähnlichen Items übertragen.
Die Frage ist, wie man das "ähnlich" definiert, denn ich denke nur ClassId und Quality wären zu allgemein, man müsste vielleicht noch eine festlegbare Mindestanzahl an übereinstimmenden Zeilen in der Beschreibung festlegen können.

Aber mal schauen, bei mir stehen in absehbarer Zeit mal wieder einige Klausuren an, insofern werde ich vermutlich ohnehin erst weitermachen, wenn die erste Klausurphase durch ist.

LG
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 05/27/2011, 19:34   #163
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Quote:
Originally Posted by Muddy_Waters View Post
Da gibt es sicherlich diverse Varianten, auch wenn ich noch nicht ganz verstehe, wozu du dir bei obiger Variante den Aufwand machst, den Account per Workaround zu bekommen.
Daran hab ich gar nicht gedacht, da kann man ja ohne Parameter aufrufen...
Hatte es nur noch mit dem AutoMule so drin, da musste man den Account so herausbekommen!

Also Muddy -->
TheCrazy11 is offline  
Old 05/28/2011, 17:13   #164
 
elite*gold: 0
Join Date: Mar 2009
Posts: 382
Received Thanks: 45
und was wäre wenn man die strings auf gleichheit matchen würde ? und wenn sie übereinstimmen, dass das dann ausgegeben wird
GruenerApfel is offline  
Old 05/31/2011, 00:45   #165
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Ich habe auch einen Vorschlag: Nur die variablen Stats eines Items anzeigen.

Ist relativ viel Arbeit, man könnte die XML-Datei vom D2ItemReader von indiablo nehmen:
Das Problem dabei ist, dass die ganzen Daten auf deutsch sind, eine Übersetzung würde sich dennoch in Grenzen halten oder gibt es sowas sogar schon in englisch?
TheCrazy11 is offline  
Reply


Similar Threads Similar Threads
[Release] Muddy's D2NT
01/25/2021 - Diablo 2 Programming - 7420 Replies
AnnouncementPlease note: development discontinued! / Bitte beachten: Entwicklung eingestellt! English I am discontinuing development of this version and will henceforth focus on bot development using D2BS. According to this, there won't be any major updates, but merely smaller bug fixes at best. Focusing on D2BS, I will decrease my efforts in supporting this project, since it has become way too time-consuming. I might still check this topic every now and then and offer my support, but...
Muddy's D2NT Help
07/29/2010 - Diablo 2 - 3 Replies
hi i just started to use the bot it work's great. how do i set up the skill's i use on my Sorc and pick up itme's? ..... if you reply to this post please use english
Mule Manager
05/07/2010 - Diablo 2 - 1 Replies
Ein, wie ich finde, für uns Botter ein sehr nützliches Programm. Ich habe die SuFu hier im Forum benutzt, aber nichts dergleichen gefunden. Ich fände ein solches Programm schon ziemlich nützlich. Ihr kennt das Durcheinander in euren Mule ja :D Hier ist der Link zu originalen Topic -> Click Nur leider scheint dieses Prgramm nicht mehr all zu aktuell zu sein. Ich bin mir auch nicht sicher, wie es funktioniert und ob dieses Programm "Safe" ist.



All times are GMT +1. The time now is 23:14.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.