|
You last visited: Today at 12:34
Advertisement
Finden des richtigen Leaders
Discussion on Finden des richtigen Leaders within the Diablo 2 Programming forum part of the Diablo 2 category.
11/20/2010, 15:12
|
#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 ?
|
|
|
11/21/2010, 12:22
|
#2
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
|
Quote:
Originally Posted by Grommel
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
|
|
|
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;
}
|
|
|
11/22/2010, 19:49
|
#4
|
Administrator
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
|
|
|
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.
|
|
|
11/22/2010, 21:19
|
#6
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
|
Quote:
Originally Posted by Grommel
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
|
|
|
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)
|
|
|
|
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.
|
|