Register for your free account! | Forgot your password?

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

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

Advertisement



Brauche Hilfe beim Modifizieren meines Leecherscripts

Discussion on Brauche Hilfe beim Modifizieren meines Leecherscripts within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2009
Posts: 7
Received Thanks: 0
Brauche Hilfe beim Modifizieren meines Leecherscripts

Hi, ich verwende D2NT 3.1 und hab ein Baal Leechscript. Es funktioniert alles so weit, nur hätte ich gerne 2 Veränderungen:
1) Mein Leecher soll außer dem Leader noch eine einzelne Person in die Party holen. Der Public Mode ist bewusst AUS.

Code:
for(i = 0; i <= 200; i++)
   {
      if(NTC_InMyParty(_leader))
         break;
      
      //Party Leader only!
      _player = GetPlayerUnit();
      if(_player)
      {
         _mypartyid = _player.partyid;
         while(_player.GetNext())
         {
            if(_player.name == _leader && _player.partyflag == 2 && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
               me.ClickParty(_player, 2);
               break;
            }
         }
      }
      
      NTC_Delay(400);
   }
Dieser Code erlaubt es mir, nur Party anfragen vom Leader anzunehmen.

Code:
for(i = 0; i <= 200; i++)
   {
      if(NTC_InMyParty("Playername"))
         break;
      
      _player = GetPlayerUnit();
      if(_player)
      {
         _mypartyid = _player.partyid;
         while(_player.GetNext())
         {
            if(_player.name == "Playername" && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
               me.ClickParty(_player, 2);
               break;
            }
         }
      }
	 
	 NTC_Delay(400);
   }
Dieses Script lädt den Player mit den Namen "Playername" in die Party ein. Geht das noch eleganter? (abgesehen davon, dass ichs in ne variable packen könnte ist aber nicht nötig, weil ichs nur privat verwende und mit nur einem m8)

2) Ist es möglich den ingame Chat irgendwie zu verwerten? D.h. dass ich mit einer Schleife den Effekt erzeugen kann, dass mein Char erst nach erscheinen der Tp Safe Msg ins Portal geht?

Hilfe wäre sehr nett MfG
c00k1e is offline  
Old 07/27/2010, 17:26   #2
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by c00k1e View Post
Hi, ich verwende D2NT 3.1 und hab ein Baal Leechscript. Es funktioniert alles so weit, nur hätte ich gerne 2 Veränderungen:
1) Mein Leecher soll außer dem Leader noch eine einzelne Person in die Party holen. Der Public Mode ist bewusst AUS.

Code:
for(i = 0; i <= 200; i++)
   {
      if(NTC_InMyParty(_leader))
         break;
      
      //Party Leader only!
      _player = GetPlayerUnit();
      if(_player)
      {
         _mypartyid = _player.partyid;
         while(_player.GetNext())
         {
            if(_player.name == _leader && _player.partyflag == 2 && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
               me.ClickParty(_player, 2);
               break;
            }
         }
      }
      
      NTC_Delay(400);
   }
Dieser Code erlaubt es mir, nur Party anfragen vom Leader anzunehmen.

Code:
for(i = 0; i <= 200; i++)
   {
      if(NTC_InMyParty("Playername"))
         break;
      
      _player = GetPlayerUnit();
      if(_player)
      {
         _mypartyid = _player.partyid;
         while(_player.GetNext())
         {
            if(_player.name == "Playername" && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
               me.ClickParty(_player, 2);
               break;
            }
         }
      }
     
     NTC_Delay(400);
   }
Dieses Script lädt den Player mit den Namen "Playername" in die Party ein. Geht das noch eleganter? (abgesehen davon, dass ichs in ne variable packen könnte ist aber nicht nötig, weil ichs nur privat verwende und mit nur einem m8)

2) Ist es möglich den ingame Chat irgendwie zu verwerten? D.h. dass ich mit einer Schleife den Effekt erzeugen kann, dass mein Char erst nach erscheinen der Tp Safe Msg ins Portal geht?

Hilfe wäre sehr nett MfG
Zu 1:
Schonmal was von logischen Verknüpfungen gehört?
Es soll da ja sowas wie ODER-Verknüpfungen geben, mit denen Bedingungen aus mehreren verschiedenen Aussagen true werden können.

Zu 2:
Ich habe hier irgendwann mal relativ detailiert geschildert, wie man mit Chat Event Handles umgeht. Ich suchs mal und editiere hier einen rein.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 17:41   #3
 
elite*gold: 0
Join Date: Dec 2009
Posts: 7
Received Thanks: 0
es geht eigentlich nur darum, ob es elegantere wege gibt, einen einzelnen player anhand seines namens in die party einzuladen.

warum ich das ganze nicht in einem gelöst habe sei an dieser stelle egal. fakt ist dass es gewollt ist, aber danke für den freundlichen hinweis :-P

auf den link freu' ich mich schon vielen dank

wenn ich fertig bin werde ich den codeschnipsel zum warten auf das "Safe" signal des runners hier rein stellen

mfg
c00k1e is offline  
Old 07/27/2010, 18:11   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by c00k1e View Post
es geht eigentlich nur darum, ob es elegantere wege gibt, einen einzelnen player anhand seines namens in die party einzuladen.

warum ich das ganze nicht in einem gelöst habe sei an dieser stelle egal. fakt ist dass es gewollt ist, aber danke für den freundlichen hinweis :-P

auf den link freu' ich mich schon vielen dank

wenn ich fertig bin werde ich den codeschnipsel zum warten auf das "Safe" signal des runners hier rein stellen

mfg
Du hattest geschrieben, du möchtest einen weiteren Spieler einladen, dazu brauchst du Verknüpfungen.
Obwohl du recht hast, ich hatte gesagt du brauchst eine ODER-Verknüfpfung, tatsächlich brauchst du aber eine ODER- und eine UND-Verknüfpung.

Sollte dann etwa so aussehen:
Code:
for(i = 0; i <= 200; i++)
{
    if(NTC_InMyParty("Playername") && NTC_InMyParty("Playername2"))
        break;

    _player = GetPlayerUnit();
    if(_player)
    {
        _mypartyid = _player.partyid;
        while(_player.GetNext())
        {
            if((_player.name == "Playername" || _player.name == "Playername2") && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
                me.ClickParty(_player, 2);
                break;
            }
        }
    }

    NTC_Delay(400);
}
Übrigens empfielt es sich immer Strings zum Vergleichen nach Lower oder Upper Case zu konvertieren, ansonsten landest du bei Lösungen, die verlangen, dass du Charnamen exakt so schreibst wie sie ingame heissen.
Ich habe es mal oben nicht eingebaut, weil die Funktion NTC_InMyParty() von Haus aus einen Vergleich durchführt, welcher case sensitive ist.
Die Anpassung würde also keinen Sinn machen, wenn man nicht die Funktion gleich mit anpasst.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 18:30   #5
 
elite*gold: 0
Join Date: Dec 2009
Posts: 7
Received Thanks: 0
Quote:
Originally Posted by Muddy_Waters View Post
Du hattest geschrieben, du möchtest einen weiteren Spieler einladen, dazu brauchst du Verknüpfungen.
Obwohl du recht hast, ich hatte gesagt du brauchst eine ODER-Verknüfpfung, tatsächlich brauchst du aber eine ODER- und eine UND-Verknüfpung.

Sollte dann etwa so aussehen:
Code:
for(i = 0; i <= 200; i++)
{
    if(NTC_InMyParty("Playername") && NTC_InMyParty("Playername2"))
        break;

    _player = GetPlayerUnit();
    if(_player)
    {
        _mypartyid = _player.partyid;
        while(_player.GetNext())
        {
            if((_player.name == "Playername" || _player.name == "Playername2") && (_player.partyid == 65535 || _player.partyid != _mypartyid))
            {
                me.ClickParty(_player, 2);
                break;
            }
        }
    }

    NTC_Delay(400);
}
Übrigens empfielt es sich immer Strings zum Vergleichen nach Lower oder Upper Case zu konvertieren, ansonsten landest du bei Lösungen, die verlangen, dass du Charnamen exakt so schreibst wie sie ingame heissen.
Ich habe es mal oben nicht eingebaut, weil die Funktion NTC_InMyParty() von Haus aus einen Vergleich durchführt, welcher case sensitive ist.
Die Anpassung würde also keinen Sinn machen, wenn man nicht die Funktion gleich mit anpasst.

Lg
Muddy
Dankeschön, ist mir auch bewusst Ich werde jetzt noch n bisschen dran feilen, dann kann ich euch den kompletten leechbot hier reinsetzen (Quelltext).
Ein Problem habe ich noch:
Code:
RegisterEvent(EVENT_GAMEMSG, checkforsafemsg);
steht irgendwo in meiner funktion
und weiter unten natürlich das hier
Code:
function checkforsafemsg(message, type)
	{
	var _message = message.split("ÿc0: ")[1];
	var _messenger = message.split("ÿc0: ")[0].replace("ÿc4", "");
	if(_messenger == _leader && _message.toLowerCase() == "safe tp come with the king of paladins")
		{
		NTM_UsePortal("BluePortal", 131, _leader);
		}
	}
wie müsste ein codebeispiel aussehen, um diese anforderungen zu erfüllen:
- beim erscheinen der safe msg ins portal (sollte ja durch obigen eventhandler abgedeckt sein)
- angenommen ich joine und das tp existiert bereits, oder die safemessage wurde schon geschrieben/erscheint fehlerhaft/whatsoever: nach einer bestimmten zeit trotzdem ins portal

wäre das hier ausreichend:
Code:
for(i=0;i<60;i++)
{
if(me.areaid!=109)
break;
Delay(1000);
}
hiernach dann der rest. würde doch 60 sekunden in town stehen und wenn bis dahin nichts passiert ist ins portal? wenn fehler drin sind bitte ich um berichtigung
c00k1e is offline  
Old 07/27/2010, 18:46   #6
 
sternenlooper's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 1,675
Received Thanks: 789
Quote:
Originally Posted by c00k1e View Post
Dankeschön, ist mir auch bewusst Ich werde jetzt noch n bisschen dran feilen, dann kann ich euch den kompletten leechbot hier reinsetzen (Quelltext).
Ein Problem habe ich noch:
Code:
RegisterEvent(EVENT_GAMEMSG, checkforsafemsg);
steht irgendwo in meiner funktion
und weiter unten natürlich das hier
Code:
function checkforsafemsg(message, type)
	{
	var _message = message.split("ÿc0: ")[1];
	var _messenger = message.split("ÿc0: ")[0].replace("ÿc4", "");
	if(_messenger == _leader && _message.toLowerCase() == "safe tp come with the king of paladins")
		{
		NTM_UsePortal("BluePortal", 131, _leader);
		}
	}
wie müsste ein codebeispiel aussehen, um diese anforderungen zu erfüllen:
- beim erscheinen der safe msg ins portal (sollte ja durch obigen eventhandler abgedeckt sein)
- angenommen ich joine und das tp existiert bereits, oder die safemessage wurde schon geschrieben/erscheint fehlerhaft/whatsoever: nach einer bestimmten zeit trotzdem ins portal

wäre das hier ausreichend:
Code:
for(i=0;i<60;i++)
{
if(me.areaid!=109)
break;
Delay(1000);
}
hiernach dann der rest. würde doch 60 sekunden in town stehen und wenn bis dahin nichts passiert ist ins portal? wenn fehler drin sind bitte ich um berichtigung
Code:
function checkforsafemsg(message, type)
	{
	var _message = message.split("ÿc0: ")[1];
	var _messenger = message.split("ÿc0: ")[0].replace("ÿc4", "");
	if(_messenger == _leader && _message.toLowerCase() == "safe tp come with the king of paladins")
		{
		NTM_UsePortal("BluePortal", 131, _leader);
		}
	}
die 4 bedeutet goldene schrifft ^^

ich habe es woanders so gelöst um jedesmal eine willkommens nachricht zu schreiben wenn einer das game betritt!
Code:
function talk(msg, type) 
{ 
if(type == 4 && msg.indexOf("stronger") != -1) 
{ 
Say(NTConfig_Willkommen); 
} 
}
wenn ich es auf dein bsp umleiten wollen würde dann vielleicht so
[code]
function checkforsafemsg(msg, type)
{
if(type == 2 && msg.indexOf("safe tp come with the king of paladins") != -1)
{
NTM_UsePortal("BluePortal", 131, _leader);
}
} [code]

beid er roten 2 bin ich mir nicht sicher ob es nicht vielleicht auch eine 0 sein müsste! ;(

mit dem counter glaube ich setzt du an der falschen stelle an ^^
ka wie du dein script genau aufbaust!

wo setzt du den msg check denn ein? in die ntbotleech oder in das script selbst?
setzt du diesen check in das leechscript direkt könntest du dieses in eine for schleife (counter) setzen! und danach dann einfach
Code:
if(me.areaid!=109)
NTM_UsePortal("BluePortal", 131, _leader);
denke aber muddy findet eine bessere lösung *g*
ich mache halt alles einfach so vom kopf herraus was ich gerade so weiss! ;(
sternenlooper is offline  
Old 07/27/2010, 19:13   #7
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by sternenlooper View Post
findet eine bessere lösung *g*
ich mache halt alles einfach so vom kopf herraus was ich gerade so weiss! ;(
Mach ich denn je was anderes?
Übrigens: Schreib doch die Sachen vorher in Notepad++ und kopier sie dann samt Formatierung in einem Stück in die Code Box. Du weisst selbst wie schlecht schlecht eingerückter Quelltext zu lesen ist.

Für sein Problem würde das mit dem Index auch gut funktionieren. Meine Variante ist komplexer und erlaubt es sehr klar Nachrichten und den Namen desjenigen, von dem diese kommen, klar zu isolieren, was hier aber nichtmal nötig ist. Wobei man natürlich auch hier noch sicherstellen sollte, dass die Nachricht von der richtigen Person kommt.
Der Message type ist übrigens für normale Chat Nachrichten wie du schon richtig vermutet hast 0.

@c00k1e
Nur mal so nebenbei: Die Umschließenden Klammern eines Anweisungsblocks werden an sich nicht mit eingerückt, glaube da bist du etwas über das Ziel hinaus geschossen.

Grundsätzlich würde ich mit immer sehr zurückhaltend mit auszuführendem Code in Event Handles sein. Du musst immer bedenken, dass diese als zusätzlicher Thread im Hintergrund mitlaufen und bei einem Event dann einfach in das laufende Script eingreifen/springen.
Darum kann es zu Problemen kommen, wenn du im Event Handle größere Funktionen aufrufst, bei denen der Char irgendwas aktiv machen soll.

Ich würde dir daher eine globale (bool) Variable vorschlagen, welche bei entsprechender Chat Meldung auf true bzw. false gesetzt wird.

Du kannst dann einfach eine Schleife laufen lassen mit einer gewissen Maximalen Laufzeit, welche dann ein durch die globale Variable bedingtes break enthält. "Schaltet" die Variable, endet die Schleife.
Damit hättest du beide Konzepte vereint. Wenn du das genauer brauchst, einfach fragen.

Achja, was mir noch aufgefallen ist:
Du verwendest in der Chat Handle Funktion die Variable _leader. Diese ist dem Namen nach zu urteilen aber eine lokale Variable und demzufolge in der Chat Handle Funktion gar nicht definiert.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 19:28   #8
 
elite*gold: 0
Join Date: Dec 2009
Posts: 7
Received Thanks: 0
Quote:
Originally Posted by Muddy_Waters View Post
@c00k1e
Nur mal so nebenbei: Die Umschließenden Klammern eines Anweisungsblocks werden an sich nicht mit eingerückt, glaube da bist du etwas über das Ziel hinaus geschossen.

Grundsätzlich würde ich mit immer sehr zurückhaltend mit auszuführendem Code in Event Handles sein. Du musst immer bedenken, dass diese als zusätzlicher Thread im Hintergrund mitlaufen und bei einem Event dann einfach in das laufende Script eingreifen/springen.
Darum kann es zu Problemen kommen, wenn du im Event Handle größere Funktionen aufrufst, bei denen der Char irgendwas aktiv machen soll.

Ich würde dir daher eine globale (bool) Variable vorschlagen, welche bei entsprechender Chat Meldung auf true bzw. false gesetzt wird.

Du kannst dann einfach eine Schleife laufen lassen mit einer gewissen Maximalen Laufzeit, welche dann ein durch die globale Variable bedingtes break enthält. "Schaltet" die Variable, endet die Schleife.
Damit hättest du beide Konzepte vereint. Wenn du das genauer brauchst, einfach fragen.

Achja, was mir noch aufgefallen ist:
Du verwendest in der Chat Handle Funktion die Variable _leader. Diese ist dem Namen nach zu urteilen aber eine lokale Variable und demzufolge in der Chat Handle Funktion gar nicht definiert.
zum ersten:
Danke für den Hinweis, ich hab mir Programmieren mit 8 Jahren (erste Javascripts xD) selbst beigebracht und mir das halt so angeeignet, werde deinen Tip aber natürlich beherzigen

zum zweiten:
thx, das hat nämlich so wie ich es hatte auch nicht funktioniert. ich werd' ne variable dafür verwenden, dann sollte es ja klappen.

zum dritten:
jo, das ist mir beim nochmal überfliegen auch gleich aufgefallen. habs jetzt mal alles hardcoded reingemacht. wenn mir danach ist, werd' ich das alles in die config datei in form von globalen variablen auslagern :P
c00k1e is offline  
Old 07/27/2010, 20:09   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by c00k1e View Post
zum ersten:
Danke für den Hinweis, ich hab mir Programmieren mit 8 Jahren (erste Javascripts xD) selbst beigebracht und mir das halt so angeeignet, werde deinen Tip aber natürlich beherzigen

zum zweiten:
thx, das hat nämlich so wie ich es hatte auch nicht funktioniert. ich werd' ne variable dafür verwenden, dann sollte es ja klappen.

zum dritten:
jo, das ist mir beim nochmal überfliegen auch gleich aufgefallen. habs jetzt mal alles hardcoded reingemacht. wenn mir danach ist, werd' ich das alles in die config datei in form von globalen variablen auslagern :P
Sich das mit 8 selbst beizubringen spricht definitiv für dich.

Dass du aber nicht auf die Idee kommst, die Schaltvariable auch als Config Variable zu deklarieren. Die wird scgließlich nur scriptintern von Funktionen verändert, nicht aber irgendwie vom Nutzer initialisiert. Darum reicht es, wenn diese im Script selbst global deklariert und initialisiert wird.

Noch ein Tipp: Die Bezeichner von globale Variablen beginnen mit einem Großbuchstaben. Daran würde ich mich auch halten, weil es ein zusätzliches Maß an Übersichtlichkeit schafft.

Lg
Muddy
Muddy Waters is offline  
Reply


Similar Threads Similar Threads
Hilfe beim erstellen meines P-servers
01/06/2011 - Metin2 Private Server - 2 Replies
hallo ich bins mal wieder :D diesmal hab ich folgendes problem: ich hab die instandserverfiles installiert und auch hochgefahren bis zu mcncc# und hab den server in filezilla offen und bin unter dem ordner quest. jetzt will ich die quests alle selbst übersetzen, weil bei den fertig übersetzten quests fährt der server bei mir nicht mehr hoch, nachdem ich die draufgespielt habe. 1. frage: wie übersetze ich die quests? also ansehen/bearbeiten aber was muss drin stehen? 2. frage: wenn ich...
Hilfe beim Modifizieren....
04/18/2010 - Metin2 - 0 Replies
Moin, Also ich habe folgendes Problem ich habe in einer Guiide gelesen wie man den Cursor von Metin (Modified Client by Neon Blue v4.0) verändert ich mousemodule und hab die Zeile: app.NORMAL : CursorImage("D:/Ymir Work/UI/Cursor/cursor.sub"), in app.NORMAL : CursorImage("D:/Ymir Work/UI/Cursor/cursor.cur"), geändert (Mein Cursor ist da drin) Wenn ich nun metin starte beendet sich es einfach...:confused: Pls helft mir!
Hilfe gesucht beim verbessern meines Servers
01/29/2010 - Metin2 Private Server - 3 Replies
Servus, ich suche jmd der sich bisschen auskennt mit nem eig. hamachi server der server laüft braüchte nur jmd der mir dass mit den shops und co bisschen erklärt usw.. icq nummer per pn wäre perfekt vielen dank ;)
Brauche Hilfe beim freischalten von einem Port meines T-Com Routers!!!
03/20/2009 - Tutorials - 29 Replies
Also ich hätte da mal ne Frage, wie ich beim Speedport W500v den port 6885 freischalte WÜRD MICH SEHR SEHR FREUEN!!! das im Browser eingeben --> http://192.168.2.1/ dann öffnet sich die router konfig anschließend auf Netzwerk: Nat & Portregeln: PCs Übernehmen und Freigeben: dann hab ich den pc übernommen, ich hab ihn PC genannt^^ dann wirder zurück auf Nat & Portregeln und dann auf Nat & Portregeln --> Port-Weiterleitung --> Neue Regel definieren



All times are GMT +2. The time now is 04:25.


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.