[Release] Muddy's D2NT

06/02/2011 10:11 Denny456#2146
so nun weiß ich warum er stehen bleibt aber was da falsch ist weiß ich leider nicht. näheres im bild
06/02/2011 12:35 JustAnotherKeyshop#2147
Quote:
Originally Posted by Muddy_Waters View Post
Ganz sicher? Das ist dauerhaft der Fall? :confused:

Wenn ja würde ich dir mal einen ToolsThread mit Debug Ausgaben fertig machen, alternativ kannst du das natürlich auch selber machen, sofern Ahnung vorhanden ist. :)


It definitely is - feel free to post comments or ask questions in English. :)

Kind Regards
Muddy
Ja bin mir sicher, zumindest bei meiner Sorc, die trinkt einfach nicht... Allerdings wenn ich sie alleine laufen lasse, trinkt sie.
Sobald mein Pala und Barb auch gestartet sind trinkt sie nicht mehr und hat überwiegend chicken, fällt mir halt daran auf das sie oft mit nur low HP rum rennt.

ToolsThread mit Debug Ausgaben, kenn ich mich leider nicht mit aus.
06/02/2011 13:32 David Dean#2148
Quote:
Originally Posted by chrischris2 View Post
Ok.
So Muddy, first thanks for your d2nt bot version, which seems smarter that "official" d2nt.

I'm trying it, and wonder if it's possible to tune it to avoid "regular monsters", which is done with NTConfig_SkipRegularMonsters var in etal's bot.
And im boting witch a bone nec, and moded etal's bot to make nec use rather often "corpse explosion". Is there a possibility to do it in your bot without modify nta_attack function ?

Thx.
Chris.
I think this is done though the bot scripts themselves. Have you tried to set the unit spectypes? 0x01 is All, 0x02 is super uniques, 0x04 is champions, 0x08 is bosses, and 0x10 is minions. Most bot files have away to set these.
06/02/2011 17:11 AndreundNina#2149
Quote:
Originally Posted by Denny456 View Post
so nun weiß ich warum er stehen bleibt aber was da falsch ist weiß ich leider nicht. näheres im bild

Ja diesen fehler hatte ich auch schon oft, das ist wenn alle deine 3oder4 bots dieses teil in der pickit stehen haben und es zur selben zeit aufheben wollen, und nur einer kann es bekommen. Dann mekert meist ein benachteiligter bot, meine Lösung war ich habe die Pickit von den leechern sozusagen ausgestellt also nur noch tränke aufsammeln so nimmt nur der haupt bot diese sachen und die Leecher leechen:) denn wenn der Haupt bot diesen fehler hat war die nacht für alle umsonst.
06/02/2011 17:48 chrischris2#2150
Quote:
Originally Posted by David Dean View Post
I think this is done though the bot scripts themselves. Have you tried to set the unit spectypes? 0x01 is All, 0x02 is super uniques, 0x04 is champions, 0x08 is bosses, and 0x10 is minions. Most bot files have away to set these.
Finally i added this in the beginning of function "NTA_IsValidMonster(monster)" in ntattack.ntl.

MWConfig_SkipRegularMonsters must be declared in globalconfig or each bot script.

if(MWConfig_SkipRegularMonsters)
if(monster.spectype == 1 && me.areaid != 131)
return false;

Loosely inspired from vanilla d2nt bot... :/ but works well. Bots have no time to loose with uninteresting monsters ;)

Now corpse explosion...

Thx.
06/02/2011 19:40 JustAnotherKeyshop#2151
@ muddy hab auch mal nen screen von den ganzen Chicken gemacht:

[Only registered and activated users can see links. Click Here To Register...]

D1 ist der Paladin
D2 der Barb
D3 die Sorc

D1 und D2 trinken auch nicht, der Pala braucht auch so gut wie nie trinken.
Der Barb trinkt halt keine Mana Pots, somit hat er auch ab und an mal nen Chicken.
Spitzenreiter ist die Sorc, hat zwar 2k Life aber wenn Sie nicht trinkt, hat sie auch demensprechend viele Chicken.

Alle 3 Bots haben ihr eigenes Game und machen MF runs.
Wenn ich einen alleine laufen lasse, läuft es ganz normal und Sie trinken dann auch,
sobald ich jedoch den 2. Bot starte ist nichts mehr mit trinken.

Sehr komisch halt, aber hoffe hab es mal ein bissel detaliert dargestelt.


Schöne Grüße und Danke
06/02/2011 22:31 TheCrazy11#2152
Quote:
Originally Posted by Denny456 View Post
so nun weiß ich warum er stehen bleibt aber was da falsch ist weiß ich leider nicht. näheres im bild
Quote:
Originally Posted by AndreundNina View Post
Ja diesen fehler hatte ich auch schon oft, das ist wenn alle deine 3oder4 bots dieses teil in der pickit stehen haben und es zur selben zeit aufheben wollen, und nur einer kann es bekommen. Dann mekert meist ein benachteiligter bot, meine Lösung war ich habe die Pickit von den leechern sozusagen ausgestellt also nur noch tränke aufsammeln so nimmt nur der haupt bot diese sachen und die Leecher leechen:) denn wenn der Haupt bot diesen fehler hat war die nacht für alle umsonst.
Ihr habt noch die fehlerhafte SnagIt.ntl, die auch im normalen Muddy's drin ist.
In diesem Post hat Muddy die überarbeitete Version gepostet:
[Only registered and activated users can see links. Click Here To Register...]
06/02/2011 23:34 fred9x9#2153
Quote:
Originally Posted by Insaneety View Post
Ja bin mir sicher, zumindest bei meiner Sorc, die trinkt einfach nicht... Allerdings wenn ich sie alleine laufen lasse, trinkt sie.
Sobald mein Pala und Barb auch gestartet sind trinkt sie nicht mehr und hat überwiegend chicken, fällt mir halt daran auf das sie oft mit nur low HP rum rennt.

ToolsThread mit Debug Ausgaben, kenn ich mich leider nicht mit aus.
Passiert meiner Soso auch so ca. alle 10 - 20 Games.
06/03/2011 01:12 Denny456#2154
danke sowas habe ich mir scho gedacht naja werde ich dann ma ändern^^ aber leecher solln picken sind private 4er runs von daher bekomme ich sowieso alles
06/04/2011 15:12 fred9x9#2155
Quote:
Originally Posted by TheCrazy11 View Post
Ihr habt noch die fehlerhafte SnagIt.ntl, die auch im normalen Muddy's drin ist.
In diesem Post hat Muddy die überarbeitete Version gepostet:
[Only registered and activated users can see links. Click Here To Register...]
Snagit getauscht, aber sie trinkt ab und zu nicht, ob seltener als vorher kann ich noch nicht endgültig beurteilen.
Dafür scheint das Problem mit den vertauschten drinks, field/town/field/town nicht mehr aufzutreten. Wenigstens die letzten 100 games nix mehr passiert.
06/04/2011 16:00 JustAnotherKeyshop#2156
bei mir trinkt sie halt gar nich wenn alle 3 bots laufen
06/04/2011 16:46 Muddy Waters#2157
Ich habe mir die Sache gerade mal angeschaut und das Problem im Quellcode wiederfinden können.
Ursache ist die Ausführung der Aufrufe für HP/MP Tränke als else-Zweig, was zur Folge hatte, dass diese Aufrufe unter gewissen Umständen nie ausgeführt werden, somit also weder HP noch MP Tränke verwendet werden. :rolleyes:

Wie dem auch sei, ich habe das mal etwas angepasst und es sollte nun funktionieren. Ich bitte darum alle, den Inhalt der NTToolsThread.ntj, zu finden unter ../scripts/NTBot/tools/", durch folgendes zu ersetzen:
Code:
/**
*	This file was modified by [Only registered and activated users can see links. Click Here To Register...]
*	Check the programming section for updates and further scripts
*	Last Update: 16:38 04.06.2011
*/

var _MWLW_LastDrinkTicks = new Array(5);

const _MWLW_DELAY_REJUV = 600;
const _MWLW_DELAY_OTHER = 3000;

const _MWLW_TYPE_HP_ME = 0;
const _MWLW_TYPE_MP_ME = 1;
const _MWLW_TYPE_RV_ME = 2;
const _MWLW_TYPE_HP_MERC = 3;
const _MWLW_TYPE_RV_MERC = 4;

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

	var _count, _lifeMax, _manaMax, _merc, _rvStatus;

	_count = 0;
	
	for(var i = 0; i < 5; i++)
		_MWLW_LastDrinkTicks[i] = 0;
		
	MWLW_SetChickenThresholds();

	while(me.ingame)
	{
		if(!NTC_InTown())
		{
			_rvStatus = false;
			
			if(_lifeMax != me.hpmax || _manaMax != me.mpmax)
			{
				_lifeMax = me.hpmax;
				_manaMax = me.mpmax;

				MWLW_SetChickenThresholds();
			}

			if(!NTC_InTown())
			{
				if(parseInt(me.hp * 100 / _lifeMax) < NTConfig_LifeRejuvThresh || parseInt(me.mp * 100 / _manaMax) < NTConfig_ManaRejuvThresh)
					_rvStatus = NTLW_DrinkPotInt(_MWLW_TYPE_RV_ME);
				
				if(!_rvStatus)
				{
					if(parseInt(me.hp * 100 / _lifeMax) < NTConfig_LifeThresh)
						NTLW_DrinkPotInt(_MWLW_TYPE_HP_ME);
					if(parseInt(me.mp * 100 / _manaMax) < NTConfig_ManaThresh)
						NTLW_DrinkPotInt(_MWLW_TYPE_MP_ME);
				}

				_merc = NTC_GetMerc();

				if(_merc)
				{
					if(parseInt(_merc.hp * 100 / _merc.hpmax) < NTConfig_MercChicken)
					{
						var _area;

						_area = MWC_FindArea();

						if(_area)
							NTC_SendLogToOOG(NTC_LOG_ITEM, "ÿE00000Game is terminated by merc chicken (" + _area.name + ")");
						else
							NTC_SendLogToOOG(NTC_LOG_ITEM, "ÿE00000Game is terminated by merc chicken (unknown area)");

						NTC_SendMsgToScript("MWBotGame.ntj", "EXIT_GAME");
						break;
					}

					if(parseInt(_merc.hp * 100 / _merc.hpmax) < NTConfig_MercRejuvThresh)
						_rvStatus = NTLW_DrinkPotInt(_MWLW_TYPE_RV_MERC);
					if(!_rvStatus && parseInt(_merc.hp * 100 / _merc.hpmax) < NTConfig_MercLifeThresh)
						NTLW_DrinkPotInt(_MWLW_TYPE_HP_MERC);
				}
			}
		}
		
		if(_count > 25)
		{
			if(NTConfig_PublicMode || MWConfig_AutoParty)
				MWC_ManageParty();
			
			_count = 0;
		}
		
		_count++;

		NTC_Delay(200);
	}
}

// Internal function
function NTLW_DrinkPotInt(type)
{
	var _potType, _result, _col, _now;

	if(type == _MWLW_TYPE_RV_ME || type == _MWLW_TYPE_RV_MERC)
	{
		if(_MWLW_LastDrinkTicks[type] && (GetTickCount() - _MWLW_LastDrinkTicks[type] < _MWLW_DELAY_REJUV))
			return false;
	}
	else
	{
		if(_MWLW_LastDrinkTicks[type] && (GetTickCount() - _MWLW_LastDrinkTicks[type] < _MWLW_DELAY_OTHER))
			return false;
	}

	if(me.mode == 0 || me.mode == 17 || me.mode == 18)
		return false;

	switch(type)
	{
		case _MWLW_TYPE_HP_ME:
		case _MWLW_TYPE_HP_MERC:
			_potType = "hp";
			break;
		case _MWLW_TYPE_MP_ME:
			_potType = "mp";
			break;
		default:
			_potType = "rv";
			break;
	}

	_col = MWLW_GetColumnIndex(_potType);

	if(_col > -1)
	{
		if(type < _MWLW_TYPE_HP_MERC)
			_result = me.UseBelt(_col);
		else
			_result = me.UseBelt(_col, true);

		if(_result)
		{
			_MWLW_LastDrinkTicks[type] = GetTickCount();
			
			NTC_SendMsgToScript("MWBotGame.ntj", "SET_" + _potType.toUpperCase() + "DRANK_1");
			
			return true;
		}
	}

	return false;
}

function MWLW_GetColumnIndex(type)
{
	var _potions;

	_potions = MWC_GetItems(-1, 2);
	
	if(_potions)
	{
		for(var i = 0; i < _potions.length; i++)
		{
			if(_potions[i].x < 4 && _potions[i].code.indexOf(type) > -1)
				return _potions[i].x;
		}
	}

	return -1;
}

function MWLW_SetChickenThresholds()
{
	if(NTConfig_LifeChicken > 0 && NTConfig_LifeChicken <= 100)
		me.chickenhp = parseInt((me.hpmax * NTConfig_LifeChicken) / 100);
	else if(NTConfig_LifeChicken > 100)
		me.chickenhp = NTConfig_LifeChicken;

	if(NTConfig_ManaChicken > 0 && NTConfig_ManaChicken <= 100)
		me.chickenmp = parseInt((me.mpmax * NTConfig_ManaChicken) / 100);
	else if(NTConfig_ManaChicken > 100)
		me.chickenmp = NTConfig_ManaChicken;
}
In der Theorie sollte dies das Problem beheben, ich bitte dennoch um Rückmeldungen, ob es das in der Praxis auch tatsächlich tut. ;)

LG
Muddy
06/04/2011 18:12 JustAnotherKeyshop#2158
so hab den bot mal ein bissel laufen lassen, Ergebniss ist sehr gut :-)
Alle Bots trinken wieder und keine chickens mehr.

20 Runs 20 Erfolgreich :-)
06/04/2011 18:45 Denny456#2159
mhhh soll ich das auch ändern weil bei mir läuft alles rund und man sagt ja "never change a running system"
06/04/2011 19:17 Muddy Waters#2160
Quote:
Originally Posted by Denny456 View Post
mhhh soll ich das auch ändern weil bei mir läuft alles rund und man sagt ja "never change a running system"
Ja.

Deshalb schrieb ich ja:
Quote:
Wie dem auch sei, ich habe das mal etwas angepasst und es sollte nun funktionieren. Ich bitte darum alle, den Inhalt der NTToolsThread.ntj, zu finden unter "../scripts/NTBot/tools/", durch folgendes zu ersetzen:
Manchmal - wenn auch nur selten - drücke ich mich eben doch sehr bewusst aus. :D

LG
Muddy