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
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.
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
Grundsätzlich geht das schon. Das einzige, was die Sache etwas komplizierter macht, ist dass du vermutlich auch den zugehörigen Accountnamen erst über eine Ausgabe des Bnets auslesen musst, weil me.account nur den Namen des Accounts beinhaltet, der im Profil eingetragen wurde, nicht aber den tatsächlichen Account.
Wie das geht, kannst du dir aber in der MWToolsgame.ntj abgucken, denn dort wird genau das gemacht.
Danach musst du nurnoch MWI_WriteMuleManagerOutput(accountname) aufrufen, wobei du den eben ausgelesenen Accountnamen übergibst. Um den Rest musst du dich dann nicht mehr kümmern.
Achja, du musst natürlich die MWItemlogger library inkludieren, damit obige Funktion definiert ist.
Kannst ja zum Auslesen direkt die aktuelle Version des Mule Manager Packages aus dem Startpost nehmen, das Update selber kommt im Verlauf des Tages, nachdem ich die letzten Kleinigkeiten erledigt habe.
LG
Muddy
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
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!
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);
}
}
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)
/**
* 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);
}
}
[
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)
{
...
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
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.
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!
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?
[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.