Brauche hilfe bei meiner script idee

03/13/2011 21:51 Delba#1
Hi Leute, Ich brauche Hilfe bei einem Script. Ich bekomme es einfach nicht hin.

Mein Char soll wenn der Leader sagt "Diablo Up" das tp des Leader nutzen und Diablo Killen.

Mein Problem ist entweder geht er nur runter und killt gar nicht, oder er geht immer runter sobald Tp des Leaders offen ist.

Hier mal ein Script für die msg:

Code:
function NTMain() 
{ 
    
   Include("libs/common/NTCommon.ntl"); 
   NTC_IncludeLibs(); 
   NTC_IncludeConfig("NTBot/char_configs"); 

   NT_LoadConfig(); 

   NTA_Initialize(); // 10 

   NTTM_CheckAct();

	RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);

  if(me.areaid != 103) 
   { 
  	NTTM_TownMove("waypoint");
   
	NTM_TakeWaypoint(103);
   } 
        
   NTTMGR_TownManager(); 
    
   for(i = 0; i <= 100; i++) 
   { 
      if(NTC_InMyParty) 
        break; 
   }

	NTTM_TownMove("portalspot");
	NTC_Delay(200);

Delay(5000000);

function NT_GameMsgEvents(msg, type)
   {    
	if(msg.indexOf("weaken") != -1) 
	{
	ExitGame();
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("Bo Time") != -1) 
      	{
      	NTM_UsePortal("BluePortal", 108, (NTConfig_Leader));
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("Bo End") != -1) 
      	{
      	NTM_UsePortal("BluePortal", 103, (NTConfig_Leader));
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("g") != -1) 
      	{
      	NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("u") != -1) 
      	{
      	NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("v") != -1) 
      	{
      	NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("Dead") != -1) 
	{
	NTM_UsePortal("BluePortal", 103, (NTConfig_Leader));
	}
	if(msg.indexOf("weaken") != -1) 
	{
	ExitGame();
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("Diablo Up") != -1) 
      	{ 
	NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
	}
	if(msg.indexOf("He's here") != -1) 
      	{ 
	Say("Pwnt");
	}
	if(msg.indexOf("weaken") != -1) 
	{
	ExitGame();
	}
	////////////////////////////////////////////////
	if(type == 0 && msg.indexOf("Next game") != -1)
	{
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END")
	}
}

function NT_MurderDiablo()
{
	
	NTC_FindMonster("Diablo");
            

	NTA_KillMonster("Diablo");
	
}
function chat(msg, type){ 
   var _split = msg.split(":"); 

   if(_split.length >= 1 && _split[1] != undefined) { 
      var _sender = _split[0].substring(3, _split[0].length - 3); 
       
      if(msg.indexOf("your message") != -1){ 
         NTM_UsePortal("BluePortal", 108, _sender); 
      } 
   } 
}
function NT_OpenSealInt(classid, x, y)
{
        var _seal;
 
        NTM_MoveTo(me.areaid, x, y);
 
        _seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid, 5);
 
        if(!_seal)
                return false;
 
        if(_seal.mode > 0)
                return true;
 
        for(var i = 0 ; i < 4 ; i++)
        {
                if((i % 2) == 0)
                {
                        if(GetDistance(me, _seal) > 2)
                                NTM_MoveTo(_seal.areaid, _seal.x+1, _seal.y);
 
                        NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
                }
 
                NTC_Delay(500);
 
                if(_seal.mode > 0)
                        return true;
        }
 
        return false;
}
}
die NT_MurderDiablo funktion besitzt mein bot nicht. ich weiß auch nicht von welchem bot das ursprünglich mal kam, jedenfalls soll er diablo killen sobald er Diablo Up lesen tut!

!diablo up
leecher geht runter zum killen
pick items und verlässt game.

da gabs nen fertiges script das hies NTDiabloSorc

das ist für meinen bot kompatible, nur leider habe ich da damals versehentlich gelöscht. das würde mir auch schon weiter helfen.
vor ab schonmal ein danke für eure mühe.
03/13/2011 22:09 Muddy Waters#2
Quote:
Originally Posted by Delba View Post
Hi Leute, Ich brauche Hilfe bei einem Script. Ich bekomme es einfach nicht hin.

Mein Char soll wenn der Leader sagt "Diablo Up" das tp des Leader nutzen und Diablo Killen.

Mein Problem ist entweder geht er nur runter und killt gar nicht, oder er geht immer runter sobald Tp des Leaders offen ist.

Hier mal ein Script für die msg:

Code:
function NTMain() 
{ 
    
   Include("libs/common/NTCommon.ntl"); 
   NTC_IncludeLibs(); 
   NTC_IncludeConfig("NTBot/char_configs"); 

   NT_LoadConfig(); 

   NTA_Initialize(); // 10 

   NTTM_CheckAct();

    RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);

  if(me.areaid != 103) 
   { 
      NTTM_TownMove("waypoint");
   
    NTM_TakeWaypoint(103);
   } 
        
   NTTMGR_TownManager(); 
    
   for(i = 0; i <= 100; i++) 
   { 
      if(NTC_InMyParty) 
        break; 
   }

    NTTM_TownMove("portalspot");
    NTC_Delay(200);

Delay(5000000);

function NT_GameMsgEvents(msg, type)
   {    
    if(msg.indexOf("weaken") != -1) 
    {
    ExitGame();
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("Bo Time") != -1) 
          {
          NTM_UsePortal("BluePortal", 108, (NTConfig_Leader));
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("Bo End") != -1) 
          {
          NTM_UsePortal("BluePortal", 103, (NTConfig_Leader));
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("g") != -1) 
          {
          NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("u") != -1) 
          {
          NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("v") != -1) 
          {
          NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("Dead") != -1) 
    {
    NTM_UsePortal("BluePortal", 103, (NTConfig_Leader));
    }
    if(msg.indexOf("weaken") != -1) 
    {
    ExitGame();
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("Diablo Up") != -1) 
          { 
    NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
    }
    if(msg.indexOf("He's here") != -1) 
          { 
    Say("Pwnt");
    }
    if(msg.indexOf("weaken") != -1) 
    {
    ExitGame();
    }
    ////////////////////////////////////////////////
    if(type == 0 && msg.indexOf("Next game") != -1)
    {
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END")
    }
}

function NT_MurderDiablo()
{
    
    NTC_FindMonster("Diablo");
            

    NTA_KillMonster("Diablo");
    
}
function chat(msg, type){ 
   var _split = msg.split(":"); 

   if(_split.length >= 1 && _split[1] != undefined) { 
      var _sender = _split[0].substring(3, _split[0].length - 3); 
       
      if(msg.indexOf("your message") != -1){ 
         NTM_UsePortal("BluePortal", 108, _sender); 
      } 
   } 
}
function NT_OpenSealInt(classid, x, y)
{
        var _seal;
 
        NTM_MoveTo(me.areaid, x, y);
 
        _seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid, 5);
 
        if(!_seal)
                return false;
 
        if(_seal.mode > 0)
                return true;
 
        for(var i = 0 ; i < 4 ; i++)
        {
                if((i % 2) == 0)
                {
                        if(GetDistance(me, _seal) > 2)
                                NTM_MoveTo(_seal.areaid, _seal.x+1, _seal.y);
 
                        NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
                }
 
                NTC_Delay(500);
 
                if(_seal.mode > 0)
                        return true;
        }
 
        return false;
}
}
die NT_MurderDiablo funktion besitzt mein bot nicht. ich weiß auch nicht von welchem bot das ursprünglich mal kam, jedenfalls soll er diablo killen sobald er Diablo Up lesen tut!

!diablo up
leecher geht runter zum killen
pick items und verlässt game.

da gabs nen fertiges script das hies NTDiabloSorc

das ist für meinen bot kompatible, nur leider habe ich da damals versehentlich gelöscht. das würde mir auch schon weiter helfen.
vor ab schonmal ein danke für eure mühe.
Nur nochmal zum Verständnis, denn wenn ich das richtig verstehe, ist der Großteil von dem oben genannten Entwurf (der noch recht viele Fehler enthält) schlicht überflüssig:
Der Leader erstellt ein TP nahe Diablo?
Sprich wenn der über dieses Script gesteuerte Char durch das Portal kommt, steht Diablo neben ihm oder aber wird es in den nächsten Sekunden tun?

Wenn ja:
Wozu wird die Funktion NT_OpenSealInt() benötigt?
Welchen Sinn hat die zweite Funktion zum handlen der Chat Events (chat()), welche nie aufgerufen wird?

Insgesamt ist das übrigens katastrophal formatiert, das müssen wir unbedingt verbessern. :)

Aber ich höre mir erstmal die Antworten auf meine Rückfragen an.

Lg
Muddy
03/13/2011 22:44 Delba#3
Quote:
Originally Posted by Muddy_Waters View Post
Nur nochmal zum Verständnis, denn wenn ich das richtig verstehe, ist der Großteil von dem oben genannten Entwurf (der noch recht viele Fehler enthält) schlicht überflüssig:
Der Leader erstellt ein TP nahe Diablo?
Sprich wenn der über dieses Script gesteuerte Char durch das Portal kommt, steht Diablo neben ihm oder aber wird es in den nächsten Sekunden tun?

Wenn ja:
Wozu wird die Funktion NT_OpenSealInt() benötigt?
Welchen Sinn hat die zweite Funktion zum handlen der Chat Events (chat()), welche nie aufgerufen wird?

Insgesamt ist das übrigens katastrophal formatiert, das müssen wir unbedingt verbessern. :)

Aber ich höre mir erstmal die Antworten auf meine Rückfragen an.

Lg
Muddy
Ist richtig was du schreibst der groß teil von dem ist überflüssig

Dieses Script diente mir als Leech Script
Er geht einfach nur runter und wieder hoch. wie gesagt das kommt eigentlich von einem anderem bot, ich habe das nur nach meinem wissen probiert anzupassen, insofern ich konnte.

Wenn du das Script schon schlimm findest, sei froh das du nicht meine anderen versuche siehst^^

so habe da mal ein wenig aufgeräumt mehr weiß ich jetzt auch nicht:

Code:
function NTMain() 
{ 
    
   Include("libs/common/NTCommon.ntl"); 
   NTC_IncludeLibs(); 
   NTC_IncludeConfig("NTBot/char_configs"); 
   NTSI_LoadNIPFiles("NTBot/item_configs");
   NT_LoadConfig(); 
   NTA_Initialize(); // 10 

   NTTM_CheckAct();

       RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);

    if(me.areaid != 103) 
   { 
    NTTM_TownMove("waypoint");
   
    NTM_TakeWaypoint(103);
   } 
        
    NTTMGR_TownManager(); 
    
    for(i = 0; i <= 100; i++) 
   { 
    if(NTC_InMyParty) 
    break; 
   }

    NTTM_TownMove("portalspot");
    NTC_Delay(200);

Delay(5000000);

function NT_GameMsgEvents(msg, type)

    {    
    if(type == 0 && msg.indexOf("Diablo bitch Up") != -1) 
    { 
    NTM_UsePortal("BluePortal", 108,  (NTConfig_Leader));
    }
    NTSI_PickItems();
          { 
    ExitGame();
    }
    if(msg.indexOf("weaken") != -1) 
    {
    ExitGame();
    }
    if(type == 0 && msg.indexOf("Next game") != -1)
    {
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END")
    }
}
}
Edit:
Bäh verkackt... ich gucke morgen nochmal, habe nicht mehr den kopf heute. vor ab bedanke ich mich mal bei dir muddy
03/13/2011 23:16 Muddy Waters#4
Bitte auch im Falle völliger Verzweiflung Doppelposts vermeiden und stattdessen zum [Only registered and activated users can see links. Click Here To Register...] Button greifen. ;)

Hier mal die schnell runtergetippte Variante von mir, müsstest du mal testen:
Code:
var _MW_DiabloMessage = "!diablo up";

var _MW_EnterTP = false;
var _MW_StopScript = false;

function NTMain() 
{ 
    RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
    
    Include("libs/common/NTCommon.ntl");
    NTC_IncludeLibs();
    NTC_IncludeConfig("NTBot/char_configs");

    NT_LoadConfig();
    NTSI_LoadNIPFiles("NTBot/item_configs");

    NTA_Initialize();
    
    var i;

    NTTM_CheckAct(4);

    NTTMGR_TownManager(); 

    NTTM_TownMove("portalspot");
    
    for(i = 0; i < 1000; i++)
    {
        if(_MW_StopScript)
            break;
        
        if(_MW_EnterTP)
        {
            if(NTM_UsePortal("BluePortal", 108, NTConfig_Leader))
            {
                NTC_FindUnit(NTC_UNIT_MONSTER, 243, 150);
            
                NTA_KillMonster(243);
                
                NTSI_PickItems();
                
                break;
            }
        }
        
        NTC_Delay(1000);
    }
    
    for(i = 0; i < 300; i++)
    {
        if(_MW_StopScript)
            break;
        
        NTC_Delay(1000);
    }
    
    UnregisterEvent(EVENT_GAMEMSG);
    
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END")
}

function NT_GameMsgEvents(msg, type)
{    
    var _message;
    
    if(type == 0)
    {
        _message = msg.toLowerCase();
        
        if(_message.indexOf(NTConfig_Leader.toLowerCase()) > -1)
        {
            if(_message.indexOf(_MW_DiabloMessage.toLowerCase()) > -1)
                _MW_EnterTP = true;
            else if(_message.indexOf("weaken") > -1 || _message.indexOf("next game") > -1)
                _MW_StopScript = true;
        }
    }
}
Ich habe dabei angenommen, dass es sich bei NTConfig_Leader um eine Variable vom Typ String handelt, die den Namen des Leaders enthält.

Sollte dem nicht so sein, müsste man das ändern, weil dann die String Methoden nicht definiert sind.

Lg
Muddy
03/14/2011 12:28 Delba#5
Geht super nur fehlen zwei Dinge, leider. Er muss noch das game verlassen, einmal wenn der Leader das Spiel verlässt und einmal wenn Diablo Tot ist. Ansonnsten echt super!!!
Freu mich nochmals nen dickes Danke
03/14/2011 12:40 Muddy Waters#6
Quote:
Originally Posted by Delba View Post
Geht super nur fehlen zwei Dinge, leider. Er muss noch das game verlassen, einmal wenn der Leader das Spiel verlässt und einmal wenn Diablo Tot ist. Ansonnsten echt super!!!
Freu mich nochmals nen dickes Danke
Eigentlich sollte er das Spiel verlassen, sofern der Leader das Spiel verlässt.

Allerdings habe ich einen Fehler bezüglich des Typs gemacht, daher kam die Nachricht dafür nicht ganz an.

Versuch es mal so:
Code:
var _MW_DiabloMessage = "!diablo up";

var _MW_EnterTP = false;
var _MW_StopScript = false;

function NTMain()
{
    RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
    
    Include("libs/common/NTCommon.ntl");
    NTC_IncludeLibs();
    NTC_IncludeConfig("NTBot/char_configs");

    NT_LoadConfig();
    NTSI_LoadNIPFiles("NTBot/item_configs");

    NTA_Initialize();
    
    var i;

    NTTM_CheckAct(4);

    NTTMGR_TownManager();

    NTTM_TownMove("portalspot");
    
    for(i = 0; i < 1000; i++)
    {
        if(_MW_StopScript)
            break;
        
        if(_MW_EnterTP)
        {
            if(NTM_UsePortal("BluePortal", 108, NTConfig_Leader))
            {
                NTC_FindUnit(NTC_UNIT_MONSTER, 243, 150);
            
                NTA_KillMonster(243);
                
                NTSI_PickItems();
                
                // _MW_StopScript = true; // Optional
                
                break;
            }
        }
        
        NTC_Delay(1000);
    }
    
    for(i = 0; i < 300; i++)
    {
        if(_MW_StopScript)
            break;
        
        NTC_Delay(1000);
    }
    
    UnregisterEvent(EVENT_GAMEMSG);
    
    NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END")
}

function NT_GameMsgEvents(msg, type)
{    
    var _message;
    
    if(type == 0 || type == 4)
    {
        _message = msg.toLowerCase();
        
        if(_message.indexOf(NTConfig_Leader.toLowerCase()) > -1)
        {
            if(_message.indexOf(_MW_DiabloMessage.toLowerCase()) > -1)
                _MW_EnterTP = true;
            else if(_message.indexOf("weaken") > -1 || _message.indexOf("next game") > -1)
                _MW_StopScript = true;
        }
    }
}
Lg
Muddy
03/14/2011 12:51 Delba#7
Ja geht jetzt, nur nach Diablos tot verlässt er das game nicht. Wenn das noch klappt ist der Bot eigentlich fertig.
03/14/2011 13:17 Muddy Waters#8
Quote:
Originally Posted by Delba View Post
Ja geht jetzt, nur nach Diablos tot verlässt er das game nicht. Wenn das noch klappt ist der Bot eigentlich fertig.
Du hast das aber schon als einziges Bot Script eingefügt, oder?

Denn das sollte so eigentlich normal enden, nachdem dein Leader das Spiel verlassen hat. Wenn du direkt nach Diablo das Script beenden möchtest, entfernst du einfach die Kommentare vor dem Teil, den ich als optional gekennzeichnet habe.

Ich würde es übrigens vermeiden ExitGame() in einem Bot Script aufzurufen, bei meiner Version würdest du damit beispielsweise Endlosschleifen im Channel produzieren.
Lieber als einziges Bot Script aktivieren, sodass das Verlassen des Spiels ganz normal im game thread erfolgt. :)

Lg
Muddy
03/14/2011 13:47 Delba#9
Danach kommt kein Script mehr. Er Steht halt nur da^

Nach Diablo verlässt der Leader nicht das Spiel. Sondern der Leader steht nach dem run als filler in town und wartet das der Diablo killer geht.

edit: jetzt geht es Danke dir, voll geil^^

Kann dir den bot schicken wenn willst, aber wenn die Scripts siehst die ich da verändert habe. wirst du tot umfallen, ganz sicher^^
03/14/2011 14:19 Muddy Waters#10
Nein danke, wenn ich sowas bräuchte, hätte ich es schon lange geschrieben. ;)

Aber freut mich dass es klappt, ich war eben davon ausgegangen, dass der Leader das Spiel verlässt. :)

Lg
Muddy
03/14/2011 14:30 Delba#11
np Freud mich auch riesig^^ und nochmals danke Muddy