Register for your free account! | Forgot your password?

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

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

Advertisement



[D2NT] TP benutzen wenn Leader "Safe!" sagt

Discussion on [D2NT] TP benutzen wenn Leader "Safe!" sagt within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2009
Posts: 47
Received Thanks: 3
[D2NT] TP benutzen wenn Leader "Safe!" sagt

Hallo,

Ich suche nach einer Möglichkeit, dass der Leecher erst das TP des Leaders verwendet, wenn er sagt: "Safe!" oder so.

Jemand eine Idee?
Piratescrew is offline  
Old 06/08/2010, 12:07   #2
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
ned wirklich... aber wäre es ned einfacher erst ein tp machen zu lassen wenn "safe" is?
kal_el is offline  
Old 06/08/2010, 12:09   #3
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
Schau dir mal die NTBotleech.ntj an. Solltest dort finden was du suchst
Medix is offline  
Old 06/08/2010, 12:20   #4
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
echt? wo... ich schau...
kal_el is offline  
Old 06/08/2010, 12:26   #5
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
ab
Code:
if(JoinFromChat){
sollte ungefähr die idee vermitteln wie man nachrichten auslesen kann. Das ist ja sein Ziel.
Medix is offline  
Old 06/08/2010, 21:35   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by Medix View Post
ab
Code:
if(JoinFromChat){
sollte ungefähr die idee vermitteln wie man nachrichten auslesen kann. Das ist ja sein Ziel.
Wenn er Ingame Nachrichten auslesen möchte, braucht er dazu aber ein Eventhandle, sprich der von dir vorgeschlagene Weg würde hier aller Wahrscheinlichkeit nach nicht funktionieren.

Ich arbeite bei meinem D2NT schon länger mit sowas.

Die Basis sieht so aus:
Code:
RegisterEvent(EVENT_GAMEMSG, [I]NameDerVerarbeitungsfunktion);
[/I]
Dieser Aufruf Erfolgt irgendwo am Scriptanfang. Danach läuft das ganze dann in einem gesonderten Thread im Hintergrund mit und ruft jedesmal die Verarbeitungsfunktion auf, wenn irgendwas im Chat passiert.

Der verarbeitenden Funktion werden dabei jedesmal zwei Aktualparameter übergeben, nämlich gerade die Nachricht selbst, sowie der Typ der Nachricht, welcher hierbei prinzipiell der Ausgabefarbe entspricht.

Formal sieht diese Funktion demnach so aus, ich nenne sie mal der kürzeren Schreibweise wegen einfach nur ChatHandle:
Code:
[B][COLOR=Blue]void[/COLOR][/B] ChatHandle([B][COLOR=Blue]string[/COLOR][/B] message, [B][COLOR=Blue]int[/COLOR][/B] type);
Der Text entspricht dem kompletten angezeigten Text, inklusive Farben (welche natürlich bei etwaigen Testausgaben nicht mehr explizit angezeigt werden). Das sollte immer bedacht werden, da es bei der Formatierung und Anschließenden Auswertung eine durchaus große Rolle spielt.
Diese beschränkt sich im wesentlichen auf den simplen Umgang mit Stringfunktionen, darum gehe ich darauf nicht weiter ein.

Anzumerken ist eventuell noch, dass man mit irgendwelchen Testausgaben ohne weitere Absicherung extrem leicht fiese Endlosschleifen produzieren kann, die dann dia Konsole mit exponentiell wachsenden Strings füttern und so relativ schnell einen Speicherüberlauf produzieren, der dann zum Crash führt, hier also aufpassen.

Lg
Muddy
Muddy Waters is offline  
Old 06/08/2010, 23:31   #7
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
aha.. grübel... super geil.. lol..
hab alles verstanden.

also..machma tp erst wenn safe is ^^
kal_el is offline  
Old 06/09/2010, 00:22   #8
 
Metal God's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 636
Received Thanks: 43
Quote:
Originally Posted by Muddy_Waters View Post
Wenn er Ingame Nachrichten auslesen möchte, braucht er dazu aber ein Eventhandle, sprich der von dir vorgeschlagene Weg würde hier aller Wahrscheinlichkeit nach nicht funktionieren.

Ich arbeite bei meinem D2NT schon länger mit sowas.

Die Basis sieht so aus:
...
...
.
.
Anzumerken ist eventuell noch, dass man mit irgendwelchen Testausgaben ohne weitere Absicherung extrem leicht fiese Endlosschleifen produzieren kann, die dann dia Konsole mit exponentiell wachsenden Strings füttern und so relativ schnell einen Speicherüberlauf produzieren, der dann zum Crash führt, hier also aufpassen.

Lg
Muddy
ääähhh.....Cheater?
Metal God is offline  
Old 06/09/2010, 09:00   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by kal_el View Post
aha.. grübel... super geil.. lol..
hab alles verstanden.

also..machma tp erst wenn safe is ^^
Naja, das hier ist schließlich die Programming Sektion und somit richtet sich dieser Beitrag an Leute mit einem gewissen programmiertechnischen Basiswissen.

Wer ein Praktisches Anwendungsbeispiel braucht kann auch einfach mal in die NTBotGame.ntj schauen, die World Event Message wird nämlich auch auf genau diesem Weg ausgelesen. An sich ist das alles nicht weiter schwierig.

Lg
Muddy
Muddy Waters is offline  
Old 06/12/2010, 10:42   #10
 
elite*gold: 0
Join Date: Apr 2010
Posts: 84
Received Thanks: 1
genau das gleiche möchte ich auch.
nur dass der bot auf eine chat nachricht das spiel verlässt. habe auch schon in der NTBotGame.ntj geschaut. allerdings komme ich da nciht so recht auf den trichter wie er "diablo walks earth" oder was da kommt ausliest!

hoffe auf hilfe

vg
quaxp
quapx is offline  
Old 06/12/2010, 12:05   #11
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by quapx View Post
genau das gleiche möchte ich auch.
nur dass der bot auf eine chat nachricht das spiel verlässt. habe auch schon in der NTBotGame.ntj geschaut. allerdings komme ich da nciht so recht auf den trichter wie er "diablo walks earth" oder was da kommt ausliest!

hoffe auf hilfe


vg
quaxp
Eigentlich müsste ich ja meine Projektarbeit programmieren, aber da die Frage einfach ist, gehe ich mal kurz drauf ein.
Übrigens ist der Teil fürs World Event an sich leicht verständlich.

Aber wie dem auch sei, wir starten erstmal mit der Message selbst.
Dazu sollte man wissen, dass die D2 Ausgabe alle Nachrichten in der Form konvertiert, dass sämtliche Farbcodes (ÿcX) im Ausgabestring in tatsächliche Farben umgewandelt werden. Man wird diese also nie direkt in der Ausgabe sehen, in den Strings, die das Eventhandle übergibt, stecken sie aber trotzdem noch drin!
Das ist elementar wichtig für eine korrekte Auswertung.

Mal ein Beispiel:
Code:
[COLOR=goldenrod]Chuck_Norris[/COLOR][COLOR=Black]: Roundhouse kick![/COLOR] [COLOR=Green]// Anmerkung: Schwarz soll hier für weiss (==ÿc0)[/COLOR][COLOR=Green] stehen[/COLOR]
entspricht eigentlich:
"ÿc4[COLOR=black]Chuck_Norris[/COLOR]ÿc0[COLOR=Black]: Roundhouse kick![/COLOR]"
Alles weitere sind jetzt nurnoch einfache String Operationen, man muss sich das isolieren, was man gerade braucht. In dem Fall macht es natürlich sinn, sich zum einen denjenigen zu isolieren, von dem die message kam und natürlich die message selbst.

Für die message selbst bietet sich der Teilstring "ÿc0: " zum splitten des Strings an, damit ist dann die reine message gerade:
Code:
var _message = message.split("ÿc0: ")[1];

_message
beinhaltet nun die reine message, für dieses beispiel also: "Roundhouse kick!"

Für den messenger kann man nun ähnlich vorgehen, nur dass diesmal der Teilstring vor dem Trennzeichen, also "ÿc0: " betrachtet wird.
Die Farbe muss natürlich noch raus, die ersetzen wir einfach durch eine leere Zeichenkette:
Code:
var _messenger = message.split("ÿc0: ")[0].replace("ÿc4", "");
Die String Variable _messenger beinhaltet nun: "Chuck_Norris"

Mithilfe des Messengers könnte man nun beispielsweise überprüfen, ob derjenige, der einen Befehl gibt, auch dazu berechtigt ist.

In jedem Fall bietet es sich an, einen Command Trigger einzuführen, wie man es von Channelbots her kennt, damit man nicht ungewollter Weise Befehle gibt.
Bevor man irgendetwas anderes macht, wird dann immer erst überprüft, ob zu Beginn einer Nachricht der Command Trigger steht.
Der Abgleich könnte beispielsweise so aussehen:
Code:
const CMD_TRIGGER = '.';

if(message.substr(0, CMD_TRIGGER.length) != CMD_TRIGGER)
    return;

Nun müsste man nurnoch das eben genannte zusammenbasteln, dabei käme dann sowas in der Art raus:
Code:
const CMD_TRIGGER = '.';
    
var _message = message.split("ÿc0: ")[1];[COLOR=Green] // Isolieren der Nachricht[/COLOR]

if(_message.substr(0, CMD_TRIGGER.length) != CMD_TRIGGER)[COLOR=Green] // Beginnt die Nachricht mit dem Command Trigger?[/COLOR]
    return;
    
[COLOR=Green]// Da nun bekannt ist, dass Command Trigger enthalten ist, kann dieser nun zur einfacheren Auswertung entfernt werden[/COLOR]
_message = _message.substr(CMD_TRIGGER.length, _message.length);

var _messenger = message.split("ÿc0: ")[0].replace("ÿc4", ""); [COLOR=Green]// Isolieren des Überbringers der Nachricht[/COLOR]
[COLOR=Green]
/* Eventuell zu implementierende Überprüfungsfunktion
if(!IsValidMessenger(_messenger))
    return;
*/[/COLOR]

switch(_message.toLowerCase())
{
    case "exit":
        SetStatusText("ÿc1Exiting game...");
        if(NTConfig_PublicMode)
            Say("Next game!");
        NTC_PingDelay(2000);
        ExitGame();
        break;
}
Damit wird der Bot nun das Spiel verlassen, wenn jemand ".exit" eingibt, wobei die Groß- und Kleinschreibung für den Befehl egal ist. An sich also wirklich keine schwere Sache, man muss in erster Linie wissen, was einem das EventHandle übergibt, damit man weiss, wie man zu konvertieren bzw. zu Isolieren hat. Das ganze nun einzubinden bekommst du hoffentlich selber hin.

Lg
Muddy
Muddy Waters is offline  
Old 06/12/2010, 12:40   #12
 
elite*gold: 0
Join Date: Apr 2010
Posts: 84
Received Thanks: 1
hey muddi das ist obernett
danke für die mühe
jetzt kommt eine evtl etwas peinlich frage: kann ich diese zeilen in die NTBotLeech.ntj einfügen? weil so hab ich das gemacht und nun kommt ein fehler wenn ich "start" klicke.


super riesen dank nochmal für die hilfe.

/e: ähm ich probier erst selbst nochmal bevor ich hier zu viel nerve. vielleicht bekomme ich es ja hin

/e: ok jetzt hab ich festgestellt dass das so blödsinn ist
quapx is offline  
Old 06/12/2010, 14:41   #13
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by quapx View Post
hey muddi das ist obernett
danke für die mühe
jetzt kommt eine evtl etwas peinlich frage: kann ich diese zeilen in die NTBotLeech.ntj einfügen? weil so hab ich das gemacht und nun kommt ein fehler wenn ich "start" klicke.


super riesen dank nochmal für die hilfe.

/e: ähm ich probier erst selbst nochmal bevor ich hier zu viel nerve. vielleicht bekomme ich es ja hin

/e: ok jetzt hab ich festgestellt dass das so blödsinn ist
Dass das was ich geschrieben habe blödsinn ist oder das einfügen in der NTBotLeech.ntj?

An sich war das lediglich eine kleine Anleitung, wie man mit mit einem ChatEventHandle programmiert, kein direkter copy&paste Quelltext, jedenfalls war es nicht so gedacht.

Beispielsweise habe ich die die Nachricht, die der ChatHandle Funktion übergeben wird, message genannt. So muss sie natürlich nicht heissen, ich glaube sie heisst in der NTBotGame.ntj nur msg. Und wenn überhaupt, ist das ganze in der NTBotGame.ntj in der entsprechenden ChatHandle Funktion einzufügen, auch da müsste man sich vorher überlegen, wo genau.
Kleiner Tipp: der Parameter type hat für eine normale Chat message, wie wir sie hier auswerten wollen, den Wert 0.
Achja, wenn der Char der den Befehl gibt ein Bot ist, wäre es eventuell sinnvoll dafür zu sorgen, dass er sich nicht selbst Befehle geben kann.
Dazu bricht man einfach ab, wenn _messenger gleich me.charname ist.

Eingefügt sieht das dann so aus, wobei ich mal die oben erwähnten Änderungen direkt eingefügt habe:
Code:
if(type == 0)
{
    const CMD_TRIGGER = '.';
        
    var _message = msg.split("ÿc0: ")[1]; [COLOR=Green]// Isolieren der Nachricht
[/COLOR] 
    if(_message.substr(0, CMD_TRIGGER.length) != CMD_TRIGGER) [COLOR=Green]// Beginnt die Nachricht mit dem Command Trigger?[/COLOR]
        return;
  [COLOR=Green]          
    // Da nun bekannt ist, dass Command Trigger enthalten ist, kann dieser nun zur einfacheren Auswertung entfernt werden[/COLOR]
    _message = _message.substr(CMD_TRIGGER.length, _message.length);

    var _messenger = msg.split("ÿc0: ")[0].replace("ÿc4", "");[COLOR=Green] // Isolieren des Überbringers der Nachricht[/COLOR]
        
    if(_messenger == me.charname)[COLOR=Green] // Keine Reaktion auf eigene Befehle[/COLOR]
        return;

   [COLOR=Green] /* Eventuell zu implementierende Überprüfungsfunktion
    if(!IsValidMessenger(_messenger))
        return;
    */[/COLOR]

    switch(_message.toLowerCase())
    {
        case "exit":
            SetStatusText("ÿc1Exiting game...");
            if(NTConfig_PublicMode)
                Say("Next game!");
            NTC_PingDelay(2000);
            ExitGame();
            break;
        }
}
Das geht jetzt schon mehr in Richtung Variante zum Reinkopieren und glücklich sein.
Sollte aber trotzdem an die richtige Stelle eingefügt werden.
Achja, wenn du den eigentlichen Befehl ändern willst, denk daran den Command Trigger mit einer leeren Zeichenkette zu initialiseren, du würdest eine exception verursachen wenn das Teil nicht initialisiert wird.
Ausserdem darauf achten, dass hier eine Konvertierung nach lower Case vorgenommen wird, der Ausdruck mit dem du Vergleichst sollte also auch nur Kleinbuchstaben enthalten. Schließlich sind "Next Game!" und "next game!" zwei völlig verschieden Ausdrücke.

Denke mit den weiteren Tipps sollte die Sache nun zu schaffen sein, viel Erfolg dabei.

Lg
Muddy
Muddy Waters is offline  
Old 06/12/2010, 15:15   #14
 
elite*gold: 0
Join Date: Mar 2010
Posts: 15
Received Thanks: 0
hey sowas wollte ich auch schon mal haben!
kommt das in die baalrun config?
phlaY is offline  
Old 06/13/2010, 09:18   #15
 
elite*gold: 0
Join Date: Apr 2010
Posts: 84
Received Thanks: 1
muddy nochmals danke
ich probier das jetzt mal.

einfach reinkopieren in die config geht nicht phlay
quapx is offline  
Reply


Similar Threads Similar Threads
d2nt - "chicken" wenn player joint
06/05/2010 - Diablo 2 - 6 Replies
medix hat mal gemeint es gibt sowas, kann mir einer kurz sagen wie ich das einstelle ? :P botte auf hc und letztens is in mein priv game nen bekannter hacker gejoint.. hab dann sofort player:1 und level unterschied:1 eingestellt, würde aber gern ganz sicher gehen und einstellen, das der bot egal wo er is, ob jetzt baal auf 2% hp oder in der stadt, das game sofort leaved wenn ein spieler joint danke für eure hilfe :)
"HCBot Clan Leader Bot Evaluation Test"
06/03/2010 - Diablo 2 - 25 Replies
Im Back After A While Of Absence This bot is not only for the leaders its for everyone who wants to push all they can from there bots or who has a slow computer that other bots dont work right on or for those with slow internet its also for a person who wants an easy to setup no brainer bot also for the person who wants a bot that gives the most features till date or as ive been told. also for the clan leaders its a bot that will make ur clan stand out compared to other clans it will make...



All times are GMT +2. The time now is 05:30.


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.