Register for your free account! | Forgot your password?

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

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

Advertisement



Finden des richtigen Leaders

Discussion on Finden des richtigen Leaders within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Oct 2008
Posts: 216
Received Thanks: 47
Finden des richtigen Leaders

Ich bastel im Moment ein bisschen mit dem LeechScript das die Games im Chatfindet rum. Da diese Script ja mehrer Games/Leader kennt muss es am anfang kontrollieren ob einer der möglichen Leader sich in der Party befindet.

Im mom benutze ich im LeechScript folgenden Code, der jedoch leider manchmal den Leader nicht findet obwohl er im Game ist.

Code:
/// FIND LEADER CHAR IN PARTY OR END ////////////////////////////	
    NTConfig_Leader = false;
	for(i = 0; i <= 60; i++)
	{
		for (c = 0; c < NT_LeaderList.length; c++)
		if(NTC_InMyParty(NT_LeaderList[c]))
		{
			NTConfig_Leader = NT_LeaderList[c];
			Print('Found leader '+NTConfig_Leader);
			i = 61; 
			break;
		}
		Delay(500);
	}
	
	if(!NTConfig_Leader){
	
         SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Leader not found");
		 NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
		 return 0;
	}
So wie ich das Problem beobachten konnte tritt es nur in volleren Spielen mit mehreren Leechbots auf. Jeder lädt jeden unkoordiniert ein und am Ende befindet man sich (mit etwas Pech) in einer anderen Party als der Leader.

Hat diese Problem evtl schonmal jemand gelöst und kann mich mit dem entsprechenden Codeschnipsel versorgen ?
Grommel is offline  
Old 11/21/2010, 12:22   #2
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by Grommel View Post
Ich bastel im Moment ein bisschen mit dem LeechScript das die Games im Chatfindet rum. Da diese Script ja mehrer Games/Leader kennt muss es am anfang kontrollieren ob einer der möglichen Leader sich in der Party befindet.

Im mom benutze ich im LeechScript folgenden Code, der jedoch leider manchmal den Leader nicht findet obwohl er im Game ist.

Code:
/// FIND LEADER CHAR IN PARTY OR END ////////////////////////////    
    NTConfig_Leader = false;
    for(i = 0; i <= 60; i++)
    {
        for (c = 0; c < NT_LeaderList.length; c++)
        if(NTC_InMyParty(NT_LeaderList[c]))
        {
            NTConfig_Leader = NT_LeaderList[c];
            Print('Found leader '+NTConfig_Leader);
            i = 61; 
            break;
        }
        Delay(500);
    }
    
    if(!NTConfig_Leader){
    
         SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Leader not found");
         NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
         return 0;
    }
So wie ich das Problem beobachten konnte tritt es nur in volleren Spielen mit mehreren Leechbots auf. Jeder lädt jeden unkoordiniert ein und am Ende befindet man sich (mit etwas Pech) in einer anderen Party als der Leader.

Hat diese Problem evtl schonmal jemand gelöst und kann mich mit dem entsprechenden Codeschnipsel versorgen ?
Irgendwie finde ich deinen Codeschnipsel stylistisch ganz schön schräg.

Verstehe ich das richtig, dass die Variable NT_LeaderList ein Array ist, in dem Strings entsprechend der möglichen Namen gespeichtert sind?

Weil in dem Fall würde der Variable NTConfig_Leader, die ja als bool Variable initialisiert wird, einfach spontan ein String zugewiesen.
Das wird dann zwar implizit von der Laufzeitumgebung interpretiert, trotzdem ist das gerade in diesem Fall sehr schlechter Stil.

Wie dem auch sei, um wirklich ordentlich auf die Frage antworten zu können, müsstest du noch sagen, wie die Funktion NTC_InMyParty() bei dir Implementiert ist. Ich fände es hierbei beispielsweise wichtig, dass Namen dort vor dem Vergleich nach lower- bzw. uppercase convertiert werden, ansonsten ist das ganze einfach enorm Eingabefehler gefährdet.

Mit diesen Informationen könnte man beide Funktionen einmal in ordentlicher Form neu schreiben, sodass sie mit hoher Wahrscheinlichkeit auch das tun, was sie sollen.

Lg
Muddy
Muddy Waters is offline  
Old 11/22/2010, 14:54   #3
 
elite*gold: 0
Join Date: Oct 2008
Posts: 216
Received Thanks: 47
Folgender Code hat etz seit paar hundert runs immer den Leader gefunden ... ist allerdings auf NTConfig_PublicMode = false ausgelegt und wurde anders auch noch nicht getestet. Danke übrg für den Hinweis mit der Konvertierung zu lowercase ...

Den leicht fehlerhaften Javascript Stil möge man mir nachsehen , da ich eigentlich ne andere Scriptsprache gewöhnt bin ...

Code:
// vorkonfigurierte Leaderliste in lowercase umwandeln
for(var c in NT_LeaderList)
	NT_LeaderList[c] = NT_LeaderList[c].toLowerCase();
		
// vorkonfigurierten Leader entfernen/zurücksetzen
NTConfig_Leader = '';
	
// maximal 60 sek auf einladung eines Leaders warten
for (var i = 0; i < 60, NTConfig_Leader == ''; i++)
{
	Delay(990); 
	if(_player = GetPlayerUnit() )
	{
		_mypartyid = _player.partyid;
		while( _player.GetNext() && NTConfig_Leader == '')
		 for( var c in NT_LeaderList )
		  if( _player.name.toLowerCase() == NT_LeaderList[c] && _player.partyflag == 2) 
		   if( _player.partyid == 65535 || _player.partyid != _mypartyid)
		   {
			me.ClickParty(_player, 2);
			NTConfig_Leader = _player.name;
			Print('Found leader '+NTConfig_Leader);
			break;
		   }
	}
}

	
if(NTConfig_Leader == '')
{
	SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Leader not found");
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
	return 0;
}
Grommel is offline  
Old 11/22/2010, 19:49   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Da das eigentliche Problem ja gelöst zu sein scheint, gehe ich nur nochmal auf die Stilfrage ein.

Ich denke solange man nicht einem in einem Team von Programmierern arbeitet, hat man stylistisch relativ viele Freiheiten.
Ich für meinen Teil, versuche in erster Linie auf gute Lesbarkeit zu erreichen, gleichzeitig sollte es aber auch gut tippbar sein.

Was mir bei deinem jetzigen Stil etwas misfällt, ist das häufige Verzichten auf geschweifte Klammern. Dadurch ist die Zugehörigkeit zu den Anweisungsblöcken nicht direkt gegeben und der Code schwer nachvollziehbar, ohne inhaltlich kompliziert zu sein.
Darum würde ich immer geschweifte Klammern setzen, sofern der Anweisungsblock länger als eine einzige Zeile ist.

Was mir dann noch inhaltlich auffält, ist das du anfangs erstmal die ganzen Daten im Array änderst bzw. nachhaltig manipulierst. Mal abgesehen vom verfälschen der Daten, ist das völlig unnötig, da du das Array ja später nochmal in einer for-Schleife durchläuft. Es würde daher völlig ausreichen, bei diesem Durchlauf die einzelnen Strings im Array nur für den Vergleich nach lower case zu konvertieren.
Im Bezug auf die Laufzeit ist das hier natürlich völlig unkritisch, jedoch rein gedanklich etwas ineffizient.

Grundsätzlich denke ich aber, man könnte das auch so lösen, ohne die eigentlich schon vorhandene Party Beitrittsfunktion aus dem Tools Thread neu aufzulegen, aber das bleibt natürlich dir selbst überlassen.

So viel Negatives...
Ich hoffe du siehst es als konstruktive Kritik, ich kann es schließlich auch nicht besser.

Lg
Muddy
Muddy Waters is offline  
Old 11/22/2010, 20:44   #5
 
elite*gold: 0
Join Date: Oct 2008
Posts: 216
Received Thanks: 47
Zur Stil Sache: Ich versuche es immer möglichst übersichtlich zu halten so das ich vieles auf einen Blick erfassen kann. Viele Klammern ziehen das ganze unnötig in die Länge/Breite und machen (es für mich persönlich) eher undurchsichtiger. Im obigen Beispiel reicht mri da die Einrückung durch ein Leerzeichen um es direkt zu erkennen ... aber ich bin meinen Stil ja auch gewöhnt .

Das Array ändere ich vorher weil er mir bei NT_LeaderList[c].toLowerCase() erzählen will NT_LeaderList[c] sei undefiniert. Meine erste Version der Abfrage sah so aus:
Code:
if(_player.name.toLowerCase() == NT_LeaderList[c].toLowerCase() && _player.partyflag == 2)
Was nach meinem Empfinden eigtl. hätte funktionieren sollen .... tat es aber leider nicht.
Evtl is das eine der Eigenheiten von Js die ich nicht kenne ?

An der NTToolsThread habe ich übrg nichts verändert, der Schnipsel wird so direkt quasi inline im bots/NTBaalLeech.ntj Script verwendet. Der erste Schnipsel ganz oben is übrg das standardmässig da verbaute Codeteil gewesen.

Achso, und konstruktive Kritik ist immer sinnvoll, wenn ich keine wöllte, würd ich mich schließlich nicht ans Forum wenden.
Grommel is offline  
Old 11/22/2010, 21:19   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by Grommel View Post
Zur Stil Sache: Ich versuche es immer möglichst übersichtlich zu halten so das ich vieles auf einen Blick erfassen kann. Viele Klammern ziehen das ganze unnötig in die Länge/Breite und machen (es für mich persönlich) eher undurchsichtiger. Im obigen Beispiel reicht mri da die Einrückung durch ein Leerzeichen um es direkt zu erkennen ... aber ich bin meinen Stil ja auch gewöhnt .

Das Array ändere ich vorher weil er mir bei NT_LeaderList[c].toLowerCase() erzählen will NT_LeaderList[c] sei undefiniert. Meine erste Version der Abfrage sah so aus:
Code:
if(_player.name.toLowerCase() == NT_LeaderList[c].toLowerCase() && _player.partyflag == 2)
Was nach meinem Empfinden eigtl. hätte funktionieren sollen .... tat es aber leider nicht.
Evtl is das eine der Eigenheiten von Js die ich nicht kenne ?

An der NTToolsThread habe ich übrg nichts verändert, der Schnipsel wird so direkt quasi inline im bots/NTBaalLeech.ntj Script verwendet. Der erste Schnipsel ganz oben is übrg das standardmässig da verbaute Codeteil gewesen.

Achso, und konstruktive Kritik ist immer sinnvoll, wenn ich keine wöllte, würd ich mich schließlich nicht ans Forum wenden.
Ich könnte mir vorstellen, dass das eventuell mit den nicht vorhandenen geschweiften Klammern zusammenhängt.
Das Problem rührt aus meiner sicht relativ eindeutig daher, dass der Index c mit dem du auf die Feldelemente zugreifst, an dieser Stelle nicht definiert ist.

Versuch doch mal den Direktvergleich, indem du auch die for-Schleifen ausformulierst.

Ich habe das mal nach meinem Gusto formatiert, um zu zeigen, wie man es auch machen könnte. Da du ja sagst, du verlierst bei Klammern den Überblick, habe ich mal eine Eigenheit eingebaut, wie sie mein Informatik Professor immer eingesetzt hat: Kommentare nach den schließenden Klammern eines Anweisungsblocks.
Ich persönlich nutze diese sonst nicht, weil ich richtig eingerückte Klammerkonstrukte übersichtlich genug finde. Aber wenn es einem hilft, ist es natürlich eine tolle Sache.

Hier dein Codebeispiel etwas umformuliert:
Code:
// vorkonfigurierten Leader entfernen/zurücksetzen
NTConfig_Leader = "";
    
// maximal 60 sek auf einladung eines Leaders warten
for(var i = 0; i < 60 && NTConfig_Leader == ""; i++)
{
    Delay(990); 
    if(_player = GetPlayerUnit())
    {
        var _mypartyid = _player.partyid;
        while(_player.GetNext() && NTConfig_Leader == "")
        {
            for(var j = 0; j < NT_LeaderList.length; j++)
            {
                if(_player.name.toLowerCase() == NT_LeaderList[j].toLowerCase() && _player.partyflag == 2) 
                {
                    if(_player.partyid == 65535 || _player.partyid != _mypartyid)
                    {
                        me.ClickParty(_player, 2);
                        NTConfig_Leader = _player.name;
                        Print("Found leader " + NTConfig_Leader);
                        break;
                    } // if
                } // if
            } // for
        } // while
    } // if
} // for

if(NTConfig_Leader == "")
{
    SendCopyData("D2NT Manager", null, 7<<16, "ÿE00000Leader not found");
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
    return 0;
}
Ich hoffe es sind keine Tippfehler drin, ich bin derzeit etwas aus der Übung.

Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 11/22/2010, 23:08   #7
 
elite*gold: 0
Join Date: Oct 2008
Posts: 216
Received Thanks: 47
tatsache ... dein stück läuft ... mhh, nun läufts auch ohne klammern ...
hatte bestimmt n tipfehler als ich es getestet hab ... trzdm thx

und den fehler in der for schleife hat er auch noch gefunden
(ich kenns das bei , beide bedingungen wahr sein müssen das et weiterläuft,
aber hatte mich auch schon gewundert das die syntax so bei js nirgends erwähnt wird)
Grommel is offline  
Reply


Similar Threads Similar Threads
Richtigen Pointer finden?
08/14/2010 - General Coding - 2 Replies
Hi liebe Com Ich habe ein spiel in dem ich den Pointer finden will das Problem ist wenn ich auf find out what writes this adresse klicke und dort den neuen wert als HEX eingebe kommen dan 10 adressen woher weis ich welche die richtige ist?
A Bot For Clan Leaders EVAL
06/01/2010 - Diablo 2 - 2 Replies
This Bot Is For Clan Leaders Or High command Members You Can Get More Info At : http://www.elitepvpers.com/forum/diablo-2/590947-ta blet-n-kal_el-only-plz.html . sorry for double post but the other topic had a wack name that i shouldnt have put it on there.
Top Leaders [Request]
03/31/2010 - CO2 Weapon, Armor, Effects & Interface edits - 7 Replies
I've been possibly looking for someone to do an edit that will give you the special aura that are around on the server.. For example The top guild leader aura Top deputy leader guild aura.. monthly pk aura etc. I was wondering if someone could do an edit that will allow me to get one of those..? Prefberley the green deputy one? :P
[How To] richtigen Lehrmeister finden
08/21/2009 - Metin2 Guides & Templates - 12 Replies
Hi heute möchte ich mal erklären wie man in der deutschen exe eines P-Server weiß, Welche Lehre sich wo befindet Zuerst mal ich erstelle den Thread weil ich immer wieder fragen dazu sehe bzw öfter auch beantworte: Es ist ganz einfach: 1. Ihr drückt das ihr seht welche beiden Lehren ihr zur Auswahl habt. 2. Ihr geht zu den 2 Lehrmeistern die Blinken (leuchten...,etc) 3. So nun Schaut ihr auf das Fenster das ihr mit geöffnet habt.
How can u make more than 5 deputy leaders
12/16/2007 - Conquer Online 2 - 1 Replies
how can u make more than 5 dl in 1 guild without making branch cause my friend told me u can but he won't tell me?



All times are GMT +2. The time now is 12:34.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.