[Release] Muddy's D2NT

04/18/2011 22:56 Derbeth#1351
AutoRush problem:

Ich starte mit 2 Chars (habs auch mit nur einem probiert) den Rushentry. Eröffne ein game (connecte mit dem 2ten). Dann hol ich meine Soso, die als Rusher True eingestellt ist und den korrekten namen des Spieleröffners als Quester drin hat und connecte das Game ebenfalls.
Dann kommt:
Quests Scheduled:
Meinchar: .InvalidateQuester
Quester Status: Invalidated

Er geht los teleportiert zu andy, und die anderen beiden rühren nicht ihren arsch (bei ihnen steht Waiting for all characters to join) Die zu ziehen charakter sind auf 2 angegeben. Die zusatzquests hab ich auskommentiert b.z.w in der Charconfig rausgelöscht.

Jemand ne idee?
04/18/2011 23:02 Muddy Waters#1352
Quote:
Originally Posted by Derbeth View Post
AutoRush problem:

Ich starte mit 2 Chars (habs auch mit nur einem probiert) den Rushentry. Eröffne ein game (connecte mit dem 2ten). Dann hol ich meine Soso, die als Rusher True eingestellt ist und den korrekten namen des Spieleröffners als Quester drin hat und connecte das Game ebenfalls.
Dann kommt:
Quests Scheduled:
Meinchar: .InvalidateQuester
Quester Status: Invalidated

Er geht los teleportiert zu andy, und die anderen beiden rühren nicht ihren arsch (bei ihnen steht Waiting for all characters to join) Die zu ziehen charakter sind auf 2 angegeben. Die zusatzquests hab ich auskommentiert b.z.w in der Charconfig rausgelöscht.

Jemand ne idee?
Denke da stimmt was mit der Anzahl an zu rushenden Chars nicht.

Tipp mit irgend nem Char ".start" ein, dann gehts los, unabhängig davon, ob schon alle da sind.

Achja, und wenn der Quester ohnehin das Spiel erstellt, solltest du MWConfig_ActiveQuestersName einfach mit ner leeren Zeichenkette initialisieren, dann wird der Ersteller automatisch als Quester eingeteilt (jedenfalls wenn das Charlevel <= 70 ist). ;)

LG
Muddy
04/18/2011 23:05 Derbeth#1353
danke für deine schnelle antwort :)
Das ist nicht das problem den der Rusher startet ja. (mit einem char muss ichs über .start starten). Dann geht er genau gleich los bringt dieselbe meldung im chat und wartet wieder in den katas auf die jungs doch die stehen immer noch da und da steht oben immer noch Waiting for all characters to join..
04/18/2011 23:18 Muddy Waters#1354
Quote:
Originally Posted by Derbeth View Post
danke für deine schnelle antwort :)
Das ist nicht das problem den der Rusher startet ja. (mit einem char muss ichs über .start starten). Dann geht er genau gleich los bringt dieselbe meldung im chat und wartet wieder in den katas auf die jungs doch die stehen immer noch da und da steht oben immer noch Waiting for all characters to join..
Könnte ich die RushConfig mal sehen?

Klingt irgendwie sehr seltsam, gehen wir einfach mal von einem Problem in der Config aus, aber dazu kann ich erst was sagen, wenn ich diese auch sehe.

LG
Muddy
04/18/2011 23:22 Derbeth#1355
1. Quester
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: 02/27/2011
*/

function NT_LoadConfig()
{
	// By default, the first char that enters the game and is level 70 or less will be set as active quester. (which is usually the char that creates the game)
	// You can also define the active quester yourself by entering a charname below. (case insensitive)
	MWConfig_ActiveQuestersName = "Derb_Gold"; 
	// Specify the number of chars to be rushed - the rush will not start until all chars have joined the game and the party or you initiate it yourself by typing ".start".
	MWConfig_NumberOfCharsToRush = 2; 
	// Whether your chars are supposed to get cubes when being rushed on normal difficulty.
	MWConfig_GetHoradricCubesInNorm = true;
	// Specify which quests are to be done during the rush. (A4Q1 and A5Q1 are currently the only quests that work relatively well)
	//MWConfig_QuestSchedule = [0];
	// Specify which acts are included in the rush.
	MWConfig_RushActs = [1, 2, 3, 4, 5];
	
	
	MWConfig_Script.push(["MWRush.ntj", 0]);
	me.maxgametime = 0;
}
2.Rush Game
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: 02/19/2011
*/

// Constants
const _CHAT_COMMAND_TRIGGER = '.';
// Global variables
var LeaveGame = false;

function NTMain()
{
	SetStatusText("ÿc8Initializing...");

	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	
	Include("NTBot/char_configs/NTConfig.ntl");
	Include("MWRush/MWRushConfig_Quester.ntl");
	
	NT_LoadConfig();
		
	if(NTConfig_StartDelay > 0);
		NTC_Delay(NTConfig_StartDelay);
	
	NTT_GetCorpses();

	RegisterEvent(EVENT_GAMEMSG, MW_ChatHandle);
	RegisterEvent(EVENT_KEYDOWN, MW_KeyEvents);
	RegisterEvent(EVENT_SCRIPTMSG, MW_ScriptMsgEvents);
		
	if(Load("NTBot/bots/MWRush.ntj"))
		Print("ÿc8Running MWRush.ntj");
		
	var _count = 0;

	while(!LeaveGame)
	{
		NTC_Delay(1000);
		
		if(_count > 5)
		{
			_count = 0;
			
			MWC_ManageParty();
		}
		
		_count++;
	}
	
	ExitGame();
}

function MW_ChatHandle(msg, type)
{
	var _message, _messenger;
	
	if(type == 0)
	{
		_message = msg.split("ÿc0: ")[1]; // Extract the message
	 
		if(_message.substr(0, _CHAT_COMMAND_TRIGGER.length) != _CHAT_COMMAND_TRIGGER)
			return;
		
		_message = _message.substr(_CHAT_COMMAND_TRIGGER.length, _message.length); // Remove the trigger
		
		_messenger = msg.split("ÿc0: ")[0].replace("ÿc4", ""); // Extract the name of the char that wrote the message

		NTC_SendMsgToScript("MWRush.ntj", _messenger + " " + _message.toUpperCase());
	}
}

function MW_KeyEvents(keycode)
{
	var _script;
	//Print("Keycode: " + keycode);
		
	switch(keycode)
	{
		case 19: // Pause (PAUSE)
			_script = NTC_FindScript("MWRush.ntj");
			
			if(_script)
			{
				if(_script.running)
				{
					_script.Stop();
					
					NTC_Delay(250);
					
					ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
					
					MWC_SetStatusText("ÿc1Stopped ÿc4" + _script.name);
					
					NTC_Delay(500);
				}
				else if(Load("NTBot/bots/MWRush.ntj"))
					MWC_SetStatusText("ÿc8Running MWRush.ntj");
			}
			break;
		case 36: // Show coordinates (POS1/HOME)
			Print("Current Position: (ÿc2" + me.x + "ÿc0|ÿc1" + me.y + "ÿc0) [ÿc7" + me.areaid + "ÿc0]");
			break;
		case 46: // Stop Script
			NTC_StopScript("MWRush.ntj");
			
			MWC_SetStatusText("ÿc1Stopping Script...");
	
			LeaveGame = true;
			break;
		case 8: // Show Item Info (UNDO)
			MWI_ShowItemInfo();
			break;
	}
}

function MW_ScriptMsgEvents(msg)
{
	var _area, _script;

	switch(msg)
	{
		case "SCRIPT_END":
			_script = NTC_FindScript("MWRush.ntj");
			
			if(_script && _script.running)
				_script.Stop();
			break;
		default:
			Print("ÿc1MWRush.ntj: " + msg + " failed");

			_area = MWC_FindArea();

			if(_area)
				NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿE00000MWRush.ntj : " + msg + " failed (" + _area.name + ")");
			else
				NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿE00000MWRush.ntj : " + msg + " failed (unknown area)");

			MW_ScriptMsgEvents("SCRIPT_END");
			break;
	}
}
3. Rush Entry
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: 02/25/2011
*/

// D2NT Manager Command
const D2NT_MGR_LOADING = 1;
const D2NT_MGR_READY = 2;
const D2NT_MGR_LOGIN = 3;
const D2NT_MGR_CREATE_GAME = 4;
const D2NT_MGR_INGAME = 5;
const D2NT_MGR_RESTART = 6;
const D2NT_MGR_CHICKEN = 7;
const D2NT_MGR_PRINT_STATUS = 8;
const D2NT_MGR_PRINT_LOG = 9;

Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");

var ControlData = new controlInfo();
var LocationData = new Array("None", GetTickCount());

function NTMain()
{
	var _ingame, _gameStartTicks, _locationName;
	
	Delay(1000);

	_ingame = false;
	
	while(true)
	{
		if(me.ingame)
		{
			if(!_ingame)
			{
				RunGC();

				if(Load("MWRush/MWRushGame.ntj"))
				{
					_ingame = true;
					_gameStartTicks = GetTickCount();

					if(me.playtype > 0)
						NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "In Game [IP:" + me.gameserverip.split(".")[3] + "] (" + me.gamename + ((me.gamepassword) ? "//" + me.gamepassword : "") + ")", 0);
					else
						NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "In Game (" + me.gamename + ((me.gamepassword) ? "//" + me.gamepassword : "") + ")", 0);
				}
			}

			NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, "In Game [IP:" + me.gameserverip.split(".")[3] + "] [" + MWC_ConvertTicksToTimeString(GetTickCount() - _gameStartTicks) + "]", 0);
			
			Delay(500);
		}
		else
		{
			_locationName = ControlData.getLocation().name;
			
			if(_locationName && LocationData[0] != _locationName)
			{
				LocationData[0] = _locationName;
				LocationData[1] = GetTickCount();
			}
			
			if(_ingame)
				_ingame = false;
			
			NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, LocationData[0] + " [" + MWC_ConvertTicksToTimeString(GetTickCount() - LocationData[1]) + "]", 0);
			
			Delay(500);
		}
Besten dank fürs draufguckn :)
04/19/2011 00:08 Muddy Waters#1356
Änder mal bitte die Quest Initialisierung:
Code:
MWConfig_QuestSchedule = [];
Grundsätzlich keine Initialisierungen auskommentieren, in dem Fall geht das ausnahmsweise gut, weil die Variable mit einem Array Objekt vorinitialisiert ist, aber bei anderen Variablen kann das in die Hose gehen. ;)

Das ist aber nicht Ursache deines Problems. Ich tippe ja nach wie vor auf eine falsche Benennung. Wie gesagt, am besten MWConfig_ActiveQuestersName immer mit einer leeren Zeichenkette initialisieren, das beugt Tippfehlern vor.

Was mich noch interessieren würde:
Was geben die beiden Quester ganz zu Beginn des Spiels aus?

LG
Muddy
04/19/2011 00:12 Derbeth#1357
ich werds morgen testen, hab die bots schon aufn laptop eingestellt bastle jetzt nicht wieder zurück ;)
Der erste sagt er sei der quester und der 2te sagt ich muss gar nix tuhen alles wird für mich gemacht.

übrigens siehst du den fehler in dieser zeile:

[Name] == Monarch && [Quality] == unique && [Defense] >= 148 // Stormshield

die wird mir nicht akzeptiert, muss sie rauskommentieren...
Merci :)
04/19/2011 00:30 Muddy Waters#1358
Quote:
Originally Posted by Derbeth View Post
ich werds morgen testen, hab die bots schon aufn laptop eingestellt bastle jetzt nicht wieder zurück ;)
Der erste sagt er sei der quester und der 2te sagt ich muss gar nix tuhen alles wird für mich gemacht.

übrigens siehst du den fehler in dieser zeile:

[Name] == Monarch && [Quality] == unique && [Defense] >= 148 // Stormshield

die wird mir nicht akzeptiert, muss sie rauskommentieren...
Merci :)
Defense ist kein Property Keyword, sondern ein Stat Keyword.

Das muss so aussehen:
Code:
[Name] == Monarch && [Quality] == unique # [Defense] >= 148 // Stormshield
LG
Muddy
04/19/2011 01:34 Shrimps in Bierteig#1359
Also ich hab Lanara mal gefragt wie ich beim Nec, das hinkriege das er bei baal/dia und traiv decrepify auf die Bossmobs casted. Und ich wollte nur sichergehen, das ich das jetzt in die richtige Zeile einfüge^^

Code:
	if(MWConfig_AttacksBeforeRepositioning > 0 && _MWA_Attack_Time[3] % MWConfig_AttacksBeforeRepositioning == 0)
	{
		_vec = MWA_GetEvasionVector(4, 2, target);
		
		if(!_vec && !_vec.isZero())
			NTM_MoveTo(target.areaid, parseInt(target.x + _vec.x), parseInt(target.y + _vec.y), 0);
	}

	_viciousFoe = MWA_IsHazardousMonster(target);
	
[COLOR="Red"][B]		case 544: // Baal
			_viciousness += 5;
			break;
[/B][/COLOR]
	// Define the maximum values once as they are mostly constant anyway
Sollte das jetzt für Baal einfach so aussehen? Das währ die Zeilennr. 992 wo ich das eingefügt habe.

Und ich hab in den scripts nachgeschaut für dia und travi, aber ich hab keine ahnung welche die richtige nr ist^^ und wie das bei Dia aussehen würde :-/
04/19/2011 07:17 joeleibnitz#1360
hallo
ich muss sagen der bot ist der hammer !!
jetzt hab ich ne frage er macht andy und verkauft dan sachen aber wen zb ein amu oder grosser zauber kommt geht er aus dem game startet neu und klinkt sich neu ein und dan wieder das selbe er will verkaufen und grht wieder raus undstartet neu !

wo kan da jetzt mein fehler liegen weil wen er läuft ist er ja supper ^^ bitte um hilfe !
04/19/2011 07:56 Derbeth#1361
So also Monarch funktioniert jetzt natürlich :)

Aber Die autofollow beim rusher funktioniert noch nicht.
Habe jetzt den quester rausgenommen und die
MWConfig_QuestSchedule = []; wieder eingefügt, aber ist immer noch .invalidateQuester...
04/19/2011 10:26 gery68#1362
Quote:
Originally Posted by joeleibnitz View Post
hallo
ich muss sagen der bot ist der hammer !!
jetzt hab ich ne frage er macht andy und verkauft dan sachen aber wen zb ein amu oder grosser zauber kommt geht er aus dem game startet neu und klinkt sich neu ein und dan wieder das selbe er will verkaufen und grht wieder raus undstartet neu !

wo kan da jetzt mein fehler liegen weil wen er läuft ist er ja supper ^^ bitte um hilfe !
klingt so als würdest du Dia nicht in english starten.
04/19/2011 10:34 Shrimps in Bierteig#1363
Quote:
Originally Posted by Shrimps in Bierteig View Post
Also ich hab Lanara mal gefragt wie ich beim Nec, das hinkriege das er bei baal/dia und traiv decrepify auf die Bossmobs casted. Und ich wollte nur sichergehen, das ich das jetzt in die richtige Zeile einfüge^^

Code:
	if(MWConfig_AttacksBeforeRepositioning > 0 && _MWA_Attack_Time[3] % MWConfig_AttacksBeforeRepositioning == 0)
	{
		_vec = MWA_GetEvasionVector(4, 2, target);
		
		if(!_vec && !_vec.isZero())
			NTM_MoveTo(target.areaid, parseInt(target.x + _vec.x), parseInt(target.y + _vec.y), 0);
	}

	_viciousFoe = MWA_IsHazardousMonster(target);
	
[COLOR="Red"][B]		case 544: // Baal
			_viciousness += 5;
			break;
[/B][/COLOR]
	// Define the maximum values once as they are mostly constant anyway
Sollte das jetzt für Baal einfach so aussehen? Das währ die Zeilennr. 992 wo ich das eingefügt habe.

Und ich hab in den scripts nachgeschaut für dia und travi, aber ich hab keine ahnung welche die richtige nr ist^^ und wie das bei Dia aussehen würde :-/
Ok, das war wohl die falsche zeilennr^^ Thx @ Lanara

nur die frage ist jetzt, wo es genau da reingeschrieben wird?

Zeile 2224 - 2260 in der NTAttack.ntj

Code:
function MWA_IsHazardousMonster(target)
{
	var _viciousness, _damageType, _count;
	
	_viciousness = 0;
	_damageType = -1;
	
	switch(target.classid)
	{
		// Physical damage (type 0)
		case 310: // Doom Knight
		case 312: // Oblivion Knight
		case 472: // Hell Temptress WSK
		case 510: // Death Lord WSK
		case 571: // Minion Of Destruction
		case 638: // Vile Witch WSK
		case 691: // Undead Soul Killer Throne
		case 700: // Doom Knight Throne
		case 702: // Oblivion Knight Throne
			_damageType = 0;
			_viciousness++;
			break;
		// Elemental damage (type 1)
		case 640: // Black Soul WSK
		case 641: // Black Soul Throne
			_damageType = 1;
			_viciousness++;
			break;	
		// Both physical and elemental damage (type -1)
		case 345: // Council Member
		case 346: // Council Member
		case 347: // Council Member
		case 362: // Venom Lord
		case 558: // Venom Lord Throne
			_viciousness++;
			break;	
	}
und wie kommt das jetzt da rein? Bzw. Wo genau :D

case 544: // Baal
_viciousness += 5;
break;


thx für die hilfe :D
04/19/2011 11:03 lanara#1364
Code:
function MWA_IsHazardousMonster(target)
{
	var _viciousness, _damageType, _count;
	
	_viciousness = 0;
	_damageType = -1;
	
	switch(target.classid)
	{
		// Physical damage (type 0)
		case 310: // Doom Knight
		case 312: // Oblivion Knight
		case 472: // Hell Temptress WSK
		case 510: // Death Lord WSK
		case 571: // Minion Of Destruction
		case 638: // Vile Witch WSK
		case 691: // Undead Soul Killer Throne
		case 700: // Doom Knight Throne
		case 702: // Oblivion Knight Throne
			_damageType = 0;
			_viciousness++;
			break;
		// Elemental damage (type 1)
		case 640: // Black Soul WSK
		case 641: // Black Soul Throne
			_damageType = 1;
			_viciousness++;
			break;	
		// Both physical and elemental damage (type -1)
		case 345: // Council Member
		case 346: // Council Member
		case 347: // Council Member
		case 362: // Venom Lord
		case 558: // Venom Lord Throne
			_viciousness++;
			break;
[COLOR="Red"]		case 544: // Baal
			_viciousness += 5;
			break;	[/COLOR]
	}
04/19/2011 11:16 Twinstyle#1365
Übrigens in der neusten version fehlt in den char konfigs unter Verfügbaren scripts das "NTPindleskin.ntj"-Script ;)
Muss man noch manuel hinzufügen.


mfg
Twinstyle