[D2NT] Abfrage Playerzahl

05/24/2011 02:14 KingHigh#1
Hallo,

die Server werden ja immer unzuverlässiger und das joinen in ein game schlägt immer öfter fehl. Daher ist es für mich nötig, ein Skript, in dem mehrer Charactere in einem privaten game zusammenarbeiten, mit einer Abfrage zu versehen in der geklärt wird, ob alle da sind.
Daher meine Frage: gibt es eine Funktion mit der die Spieleranzahl in einem game/ in einer Party/ einer area ausgelesen werden kann?

Falls dies nicht der Fall ist hatte ich mir überlegt, nach einer Variablen _playernumber zu fragen die eine gewisse Größe erreichen muss damit die einzelnen Chars ihre nächsten Schritte machen.
Die eigentliche Abfrage würde dann ja ungefähr so aussehen:

Code:
	while(_playernumber != 4)    
		NTC_Delay(500);
Mein Problem ist jetzt, dass ich es anscheinend nicht schaffe den Wert dieser Variable durch die leecher zu erhöhen.
Ich habe die Variable in einer eingebundenen .ntj durch eingeführt.
Code:
var _playernumber = 1;

Bei den leechern bin ich hingeganen und habe einfach an gewünschter Stelle (nachdem sie ihren TownManger abgearbeitet haben) ein
Code:
_playernumber++;
eingeführt.

Kann mir jemand erklären woran ich hier scheitere? Die leecher und der leader laufen alle mit dem gleichen Bot, sie müssten demnach doch auch alle auf die gleiche Variable _playernumber zugreifen oder nicht?
Oder wird die Variable doch durch jeden leecher erhöht aber der leader bekommt das nicht mit? Das kann ich mir eher nicht vorstellen, nach meinem Verständnis fragt der leader ja nch jeder While-Schleife wieder neu die Variable ab....
05/24/2011 09:54 -Nemesis1337-#2
Code:
	SetStatusText("ÿc2Waiting for all characters to join...");
	while(!MWR_AllPlayersPresent() && !_MWR_CommenceRush)
		NTC_Delay(1000)
	
	_MWR_ConfirmationRequestTicks = GetTickCount();
	_startTicks = GetTickCount();
Code:
function MWR_AllPlayersPresent()
{
	var _players, _count;
	
	if(!MWConfig_NumberOfCharsToRush)
		return true;
	
	_count = 0;
	
	_players = GetPlayerUnit();
	
	if(_players)
	{
		while(_players.GetNext())
		{
			if(NTC_InMyParty(_players.name))
				_count++;
		}
	}
	
	return _count >= MWConfig_NumberOfCharsToRush;
}
Auszug aus dem Rushscript von Muddy.
Vllt. kannst du dir dort die "AllPlayersPresent" herleiten :)
05/24/2011 10:28 Muddy Waters#3
Quote:
Originally Posted by KingHigh View Post
Kann mir jemand erklären woran ich hier scheitere? Die leecher und der leader laufen alle mit dem gleichen Bot, sie müssten demnach doch auch alle auf die gleiche Variable _playernumber zugreifen oder nicht?
Oder wird die Variable doch durch jeden leecher erhöht aber der leader bekommt das nicht mit? Das kann ich mir eher nicht vorstellen, nach meinem Verständnis fragt der leader ja nch jeder While-Schleife wieder neu die Variable ab....
Die laufen alle in unterschiedlichen Threads und haben sogesehen nichts miteinander zu tun. Das Einzige was deine Variable macht, ist die Anzahl der TownManager Aufrufe zu zählen - wobei auch deren Wert mit jeder Neuinkludierung weg ist. ;)

Aber was Nemesis gesagt hat passt so, das lässt sich leicht über PlayerUnits lösen. :)

LG
Muddy
05/24/2011 17:30 KingHigh#4
Vielen Dank euch beiden, die genannte Funktion war genau das, was ich gesucht habe. Selbst ich habe es geschafft das in mein Skript einzubauen :)
Die ersten Testläufe hat es jetzt auch erfolgreich absolviert. Meine Frage ist somit vollauf beantwortet und hier kann dementsprechend zu gemacht werden...