help leechbot

07/15/2011 03:42 getgoodson#1
Also: Meine leecher joinen ein game und kämpfen/machen alles schön mit.
ABER: sie "starten" nur, wenn der leader follow sagt und gehen nur aus dem game, wenn er "bail" sagt. ansonsten stehen sie ewig in einem game rum (wenn der leader vor "bail" das spiel verlässt, dann steht der leecher im game, bis ich es merke und ihn manuell rausnehme, genau das gleiche, wenn er vor "follow" das game verlässt)

wie kriege ich es hin, dass weder "follow" noch "bail" nötig sind. wie gesagt, ansonsten klappt alles (game joinen und WENN follow gesagt wurde, macht er auch alles, was ich will)

was habe ich:
muddys nt
automaton, installiert nach der anleitung aus lanaras blog

NTBotLeech (von lanara):

Code:
//###################################################################
//###########################Einstellungen###########################
//###################################################################
	
var leaderAccountName          = "x";
var leaderName                 = "y";
var gamepassword               = "";
var JoinGameAgain              = true; // wenn der Bot nach chicken oder disconnect ins selbe Spiel nochmal gehen soll, auf true stellen

var UseCDKeyChangeTrick        = false; // Wenn der LeechBot mehrere CD Keys nutzen soll, dann auf true stellen.

var joinRandomChannel          = false;
var joinChannelInChat          = "xy";
var firstJoinMessage           = ""; // Soll der leechbot etwas sagen, wenn er in den Chat kommt, dann hier eintragen
var chatMessageAfterGame       = ""; // Soll der leechbot etwas sagen, wenn er aus dem Spiel kommt, dann hier eintragen

//###################################################################
//##############################Delays###############################
//###################################################################

var gameMinLength              = 180000;

// realm delays (minutes)
var unableToConnectRetry       = 2;
var realmDownRetry             = 60;
var disconnectedRetry          = 2;
var cdkeyInUseRetry            = 2;

// interface delays (milliseconds)
var connectingToBnetTimeout    = 20000;
var characterScreenTimeout     = 10000;
var pleaseWaitTimeout          = 10000;
var createGameThreshold        = 10000;
var createGameThresholdRandom  = 1000;
var createGameTimeout          = 15000;
var waitInLineTimeout          = 15000;
var characterSelectDelay       = 1000;
var loginDelay                 = 1000;
var clickDelay                 = 500;
var textDelay                  = 500;
var clickDelayRandom           = 500;
var textDelayRandom            = 500;
var gameDoesNotExistDelayMin   = 600000;
var gameDoesNotExistDelayMax   = 900000;
var gameDoesNotExistTimeout    = 30000;
var waitBeforeEnterChatMin     = 1000;
var waitBeforeEnterChatMax     = 2000;
var waitInChatBeforeActionsMin = 2000;
var waitInChatBeforeActionsMax = 3000;

// Only for JoinBot (friend list delay, milliseconds)
var LeaderOfflineDelay         = 30000;
var LeaderInChatDelay          = 10000;
var GameIsFullDelay            = 30000;

//###################################################################
//###################################################################
//###############DO NOT CHANGE ANYTHING BELOW THIS###################
//###################################################################
//###################################################################

//D2NT Manager Command

const D2NT_MGR_LOADING = 1;
const D2NT_MGR_READY = 2;
const D2NT_MGR_LOGIN = 3;
const D2NT_MGR_CREATE_GAME = 4;
const D2NT_MGR_INGAME = 5;
const D2NT_MGR_RESTART = 6;
const D2NT_MGR_CHICKEN = 7;
const D2NT_MGR_PRINT_STATUS = 8;
const D2NT_MGR_PRINT_LOG = 9;

var lastGameMade     = GetTickCount();
var lastGameStatus     = 0;
var nextGameMake     = 0;
var inGameAt       = 0;
var chatActionsDone   = false;
var lastGameFailed     = false;
var sayChatMsgAfterGame = false;

Include("libs/controlInfo.ntl");

var controlData = new controlInfo();

var samegame = '';
var oldgame = '';
var game = '';
var _gamename = "";
var _gamepassword = "";
var _leaderOfflineTick = -LeaderOfflineDelay;
var _leaderInChatTick = -LeaderInChatDelay;
var _GameIsFullTick = -GameIsFullDelay;
var Debug = false;
var joinChatAfterGame    = true;


function NTMain()
{
    Delay(1000);

    var _ingame = false;

    controlData.clickDelay = clickDelay;
    controlData.textDelay = textDelay;
    controlData.clickDelayRandom = clickDelayRandom;
    controlData.textDelayRandom = textDelayRandom;

    while(1)
    {
        if(me.ingame)
        {
            _gamename = me.gamename;
            _gamepassword = me.gamepassword;

            if(!inGameAt)
                inGameAt = GetTickCount();

            if(!_ingame)
            {
                RunGC(); // run garbage collector between each game

                if(Load("NTMap/NTMapGame.ntj"))
                {
                    _ingame = true;

                    if(me.playtype > 0)
                        sendEventToOOG(D2NT_MGR_INGAME, "In Game[IP:" + me.gameserverip.split(".")[3] + "]", 0);
                    else
                        sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);

                    lastGameStatus = 2; // in game successful

                    // To exit game as soon as the leader quits
                    //Load("NTBot/NTCheckLeader.ntj");
                    // to party only the leader
                    //Load("NTBot/tools/NTTools_AutoPartyJoinFriendGames.ntj");
                }
            }

            Delay(1000);
        }
        else
        {
            if(_ingame)
            {
                _ingame = false;
                sayChatMsgAfterGame = true;

                sendEventToOOG(D2NT_MGR_READY, "", 0);
            }

            locationAction(controlData.getLocation());

            Delay(500);
        }
    }
}

function locationAction(location)
{
    switch(location.id)
    {
    case 3: // Lobby Chat
        sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);

        if(!chatActionsDone)
        {  
            Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));

            if(joinRandomChannel || joinChannelInChat != "")
            {
                Say("/join " + (joinRandomChannel ? getRandomString(Random(3,10)) : joinChannelInChat));
                Delay(1000);
            }

            if(firstJoinMessage)
            {
                Say(firstJoinMessage);
                Delay(200);
            }

            chatActionsDone = true;
        }

        if (chatMessageAfterGame && _gamename != "" && sayChatMsgAfterGame == true)
        {
            Say(chatMessageAfterGame);
            sayChatMsgAfterGame = false;
            Delay(200);
        }

        game = '';

        var _tick = GetTickCount();
        if ((_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick)
         && (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)
         && (_GameIsFullTick < 0 || (_GameIsFullTick + GameIsFullDelay) < _tick))
        {
            DebugInOOG('Locating the leader : '+leaderAccountName);
            Delay(6000);
            Say('/f l');
            Delay(1500);
        }

        if(chat = controlData.get(controlData.controls.lobby.chat.textBox.channelText))
        {
            var found_leader = false;
            lines = chat.GetText();
            for (var line_id = lines.length - 1; line_id > -1; line_id--)
            {
                if (found_leader) // useless... :/
                    break;

                if (lines[line_id].substring(0,1) == " ")
                    continue;

                // retrieving the whole message
                var msg = lines[line_id].replace(/^\s+|\s+$/, "");
                var msglines = 1;
                while (lines[line_id+msglines] != undefined && lines[line_id+msglines].substring(0,2) == "  ")
                {
                    msg += " " + lines[line_id+msglines].replace(/^\s+|\s+$/, "");
                    msglines++;
                }
                if (msg.lastIndexOf(leaderName) >= 0)
                    DebugInOOG("yc8found him :;"+msg);

                // checking if the msg is a friendly whisper
                if (msg.lastIndexOf(leaderName + ' (*' +leaderAccountName+')') > -1)
                {
                    var regGameNameWhispered=/^.*(game|partie|spiel|partita|partida).*(nomm[^\s]*|called|chiamata)\s*([\w\s-]*\w)\s*\.\s*$/gi;
                    if (msg.match(regGameNameWhispered))
                        game = msg.replace(regGameNameWhispered, "$3");

                    if (game != '')
                    {
                        found_leader = true;
                        break;
                    }
                }

                // checking if the msg is from the friend list
                if (msg.lastIndexOf(': '+leaderAccountName+',') > -1)
                {
                    found_leader = true;
                    var regOffline=/^.*(offline|desconectado).*$/gi;
                    var regInChat=/^.*(channel|canale?)\s*([\w\s-]*\w)\.?\s*$/gi;
                    var regGameName=/^.*(game|partie|spiel|partita|partida)\s*([\w\s-]*\w)\s*\(priv[^\)]*\)\.\s*$/gi;

                    if (msg.match(regOffline)
                        && (_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick))
                    {
                        DebugInOOG('Leader is offline, delay '+Math.round(LeaderOfflineDelay/1000)+' sec for next /f l.');
                        _leaderOfflineTick = GetTickCount();
                    }
                    else if (msg.match(regInChat)
                            && (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick))
                    {
                        DebugInOOG('Leader is in the chat "'+msg.replace(regInChat, "$2")+'", delay '+Math.round(LeaderInChatDelay/1000)+' sec for next /f l.');
                        _leaderInChatTick = GetTickCount();
                    }
                    else if (msg.match(regGameName)
                            && ((_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick)
                                && (_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)))
                    {
                        game = msg.replace(regGameName, "$2");
                    }
                    else if ((_leaderInChatTick < 0 || (_leaderInChatTick + LeaderInChatDelay) < _tick)
                            && (_leaderOfflineTick < 0 || (_leaderOfflineTick + LeaderOfflineDelay) < _tick))
                    {
                        // unhandled line, supposelly "In Realm"
                        DebugInOOG('The leader was in the the lobby but not in chat, delay '+Math.round(LeaderInChatDelay/1000)+' sec for next /f l.');
                        _leaderInChatTick = GetTickCount();
                    }

                    break;
                }
            }

            if (found_leader == false)
                DebugInOOG('I couldn\'t find the leader in my friend list!');

            if (game!="")
            {
                DebugInOOG('Leader is in the game "' + game + '"');
                //controlData.click(controlData.controls.lobby.button.join);
                //Delay(100);
								if(!JoinGameAgain)
								{
									if (game != samegame)
									{
									  if (UseCDKeyChangeTrick)
										{
											// increasing the number of runs in the OOG (for CDKey switch)
											// Problem : the gamename/gamepassword set in your OOG will be typed in the lobbyChat
											// this may output a red message in the lobby chat if you have a password set (not a real problem)
											// I recommend to set a gamename like "Run" and no gamepassword in your OOG. -> this will output "Run-01", "Run-02", etc in lobby chat before joining games
											sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
											Delay(1000);
										}

										controlData.click(controlData.controls.lobby.button.join);
										Delay (200);
										
									}
									else
										Delay(30000);
								}
								else
								{
								  if (UseCDKeyChangeTrick)
									{
										// increasing the number of runs in the OOG (for CDKey switch)
										// Problem : the gamename/gamepassword set in your OOG will be typed in the lobbyChat
										// this may output a red message in the lobby chat if you have a password set (not a real problem)
										// I recommend to set a gamename like "Run" and no gamepassword in your OOG. -> this will output "Run-01", "Run-02", etc in lobby chat before joining games
										sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
										Delay(1000);
									}

									controlData.click(controlData.controls.lobby.button.join);
									Delay (200);
								}
        
							}

        }
        else
        {
            DebugInOOG('I can\'t read the chat!');
            //DebugInOOG('You probably haven\'t added the lobby chat controlinfo coordinates!');
            Delay(30000);
        }
        
        if(game != '')
					samegame = game;

        break;

    case 1:    // Lobby
        if(location.id == 1 && joinChatAfterGame)
        {
            Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
            controlData.click(controlData.controls.lobby.button.enterChat);
            break;
        }
        break;

    case 2: // Waiting In Line
        if(GetTickCount()-lastGameMade > waitInLineTimeout)
            controlData.click(controlData.controls.lobby.inLine.button.cancel);
        break;

    case 4: // Create Game
        if(!controlData.get(controlData.controls.lobby.create.editBox.gameName))
        {
            controlData.click(controlData.controls.lobby.button.join);
            Delay (500);
            controlData.click(controlData.controls.lobby.button.create);
            Delay (500);
            break;
        }

        sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

        locationTimeout(5000, location);

        lastGameMade = GetTickCount();
        lastGameStatus = 1; // pending creation
        break;

  case 5: // Join Game
    if (game)
    {
        controlData.setText( controlData.controls.lobby.join.editBox.gameName, game);
        Delay (100);
        controlData.setText( controlData.controls.lobby.join.editBox.password, gamepassword);
        Delay (100);
        controlData.click(controlData.controls.lobby.join.button.joinGame);
        RunGC(); // run garbage collector between each game
        locationTimeout(5000, location);
        lastGameStatus = 1; // pending join
    }
    else
    {
        DebugInOOG('No game to join : cancelling');
        me.Cancel(1);
        Delay(1000);
    }
    break;

    case 6: // Ladder
        break;

    case 7: // Channel List
        break;

    case 8: // Main Menu
        if(controlData.getCurrentRealmIndex() == me.gatewayid)
        {
            outputGameLength();
            controlData.click(controlData.gameTypes[me.playtype]);
        }
        else
            controlData.click(controlData.controls.mainMenu.button.gateway);
        break;

    case 9: // Login
        sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
        Delay(loginDelay);

        controlData.setText(controlData.controls.login.editBox.accountName, me.account);

        sendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);

        locationTimeout(5000, location);
        break;

    case 10: // Login Error (this is a fatal error, so stop)
        sendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
        Delay(3500);
        break;

    case 11: // Unable To Connect
        timeoutDelay(unableToConnectRetry*60*1000, location)
        controlData.click(controlData.controls.login.unableToConnect.button.ok);
        break;

    case 12: // Character Select
        var _time, _control;

        sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);

        for(_time = 0 ; _time < characterScreenTimeout ; _time += 500)
        {
            _control = controlData.get(controlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
            if(_control && _control.GetText() != undefined)
                break;

            Delay(500);
        }

        if(_time < characterScreenTimeout)
        {
            Delay(characterSelectDelay);

            controlData.click(controlData.controls.characterSelect.textBox.characters[me.charloc], 0, 0, 1);
            controlData.click(controlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);

            // reset last game made, so it doesnt make a game immediately
            inGameAt = 0;
            setNextGameMake();
        }
        else
        {
            controlData.click(controlData.controls.characterSelect.button.exit);
            timeoutDelay(realmDownRetry*60*1000, location);
        }
        break;

    case 13: // Realm Down - Character Select screen
        controlData.click(controlData.controls.characterSelect.button.exit);
        timeoutDelay(realmDownRetry*60*1000, location);
        break;

    case 14: // Character Select - Disconnected
        timeoutDelay(disconnectedRetry*60*1000, location);
        controlData.click(controlData.controls.characterSelect.disconnected.button.ok);
        break;

    case 15: // New Character
        break;    

    case 16: // Character Select - Please Wait popup
        if(!locationTimeout(pleaseWaitTimeout, location))
            controlData.click(controlData.controls.characterSelect.pleaseWait.button.cancel);
        break;

    case 17: // Lobby - Lost Connection - just click okay, since we're toast anyway
        controlData.click(controlData.controls.lobby.lostConnection.button.ok);
        break;

    case 18: // D2 Splash
        controlData.click(controlData.controls.d2Splash.textBox.copyright);
        break;

    case 19: // Login - Cdkey In Use
        timeoutDelay(cdkeyInUseRetry*60*1000, location);
        controlData.click(controlData.controls.login.cdkeyInUse.button.ok);
        break;

    case 20: // Single Player - Select Difficulty
        controlData.click(controlData.singlePlayerDifficulties[me.diff]);
        break;

    case 21: // Main Menu - Connecting
        if(!locationTimeout(connectingToBnetTimeout, location))
            controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
        break;

    case 22: // Login - Invalid Cdkey (classic or xpac)
        sendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
        Delay(3500);
        break;    

    case 23: // Character Select - Connecting
        if(!locationTimeout(characterScreenTimeout, location))
            controlData.click(controlData.controls.characterSelect.button.exit);
        break;

    case 24: // Server Down - not much to do but wait..
        break;

    case 25: // Lobby - Please Wait
        if(!locationTimeout(pleaseWaitTimeout, location))
            controlData.click(controlData.controls.lobby.pleaseWait.button.cancel);
        break;

    case 26: // Lobby - Game Name Exists
        sendEventToOOG(D2NT_MGR_PRINT_LOG, "yE00000Game already exists", 0);

        inGameAt = 0;
        lastGameStatus = 0;
        setNextGameMake();

        locationTimeout(15000, location);
        break;

    case 27: // Gateway Select
        controlData.clickRealmEntry(me.gatewayid);
        controlData.click(controlData.controls.gateway.button.ok);
        break;

    case 28: // Lobby - Game Does Not Exist
        inGameAt = Random(gameDoesNotExistDelayMin, gameDoesNotExistDelayMax);
        lastGameStatus = 0;
        setNextGameMake();

        locationTimeout(gameDoesNotExistTimeout, location);
        break;
    default:
        DebugInOOG("Unhandled location : "+location.id);
        break;
    }
    DebugInOOG("Location : "+location.id);
}

function sendEventToOOG(locationId, statusString, pendingTime)
{
    return SendCopyData("D2NT Manager", null, (locationId<<16)|pendingTime, statusString);
}

function setNextGameMake()
{
    lastGameMade = GetTickCount();
    nextGameMake = lastGameMade + createGameThreshold + Random(0-createGameThresholdRandom, createGameThresholdRandom) + inGameAt;
    inGameAt = 0;
    chatActionsDone = false;
}

function outputGameLength()
{
    if(inGameAt)
    {
        duration = GetTickCount() - inGameAt;

        inGameAt = (duration < gameMinLength ? gameMinLength - duration : 0);
    }
}

function locationTimeout(time, location)
{
    endtime = GetTickCount() + time;

    while(controlData.getLocation().id == location.id && endtime > GetTickCount())
    {
        sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
        Delay(500);
    }

    return (controlData.getLocation().id != location.id);
}

function timeoutDelay(time, location)
{
    endtime = GetTickCount() + time;

    while(endtime > GetTickCount())
    {
        sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " (" + parseInt((endtime-GetTickCount())/1000) + "s)", 0);
        Delay(1000);
    }
}

function getRandomString(_length)
{
    _retString = "";
    _charSet = "0123456789abcdefghijklmnopqrstuvwxyz";

    while(_length--)
    {
        _retString += _charSet.charAt(Random(0, _charSet.length-1));
        Delay(1);
    }

    return _retString;
}
function DebugInOOG(logString)
{
    if (Debug)
        return SendCopyData("D2NT Manager", null, 9<<16, "-- Debug : " + logString);
    else
        return false;
}

NTMapGame (auch von lanara):

Code:
 
function NTMain()
{
	Delay(1000);

	Include("libs/common/NTCommon.ntl");
	NTC_IncludeConfig("NTMap/char_configs");

	var _count = 0;
	var _LifeMax, _ManaMax;
	var _player, _mypartyid;

	NT_LoadConfig();

	SetStatusText("NTMap 1.2.1 - " + me.gameserverip);

	RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
	RegisterEvent(EVENT_KEYDOWN, NT_KeyEvents);

	SetUIState(0x0A, true);

	_LifeMax = me.hpmax;
	_ManaMax = me.mpmax;

	if(NTConfig_LifeChicken > 0)
		me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);

	if(NTConfig_ManaChicken > 0)
		me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);

	while(1)
	{
		if(!NTC_InTown())
		{
			if(_LifeMax != me.hpmax)
			{
				_LifeMax = me.hpmax;

				if(NTConfig_LifeChicken > 0)
					me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);
			}

			if(_ManaMax != me.mpmax)
			{
				_ManaMax = me.mpmax;

				if(NTConfig_ManaChicken > 0)
					me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);
			}
		}

		if(_count++ > 10)
		{
			if(MWConfig_AutoParty)
			{
				_player = GetPlayerUnit();

				if(_player)
				{
					_mypartyid = _player.partyid;

					while(_player.GetNext())
					{
						if(_player.partyid == 65535 || _player.partyid != _mypartyid)
						{
							if(_player.partyflag == 2)
							{
								me.ClickParty(_player, 2);
								break;
							}

							if(_player.partyid == 65535)
							{
								if(_player.partyflag == 4)
									break;

								me.ClickParty(_player, 2);
								NTC_Delay(NTC_DELAY_FRAME);

								if(_player.partyflag == 4 || (_player.partyid != 65535 && _player.partyid == _mypartyid))
									break;
							}
						}
					}
				}
			}

			_count = 0;
		}

		NTC_Delay(200);
	}
}

function NT_KeyEvents(keycode)
{
	switch(keycode)
	{
	case 109: // show or hide enemy - keypad '-'
		if(me.showenemyonautomap)
		{
			me.showenemyonautomap = false;
			Print("Enemy on Automap : Off");
		}
		else
		{
			me.showenemyonautomap = true;
			Print("Enemy on Automap : On");
		}
		break;
	case 107: // show or hide missile - keypad '+'
		if(me.showmissileonautomap)
		{
			me.showmissileonautomap = false;
			Print("Missile on Automap : Off");
		}
		else
		{
			me.showmissileonautomap = true;
			Print("Missile on Automap : On");
		}
		break;
	case 106: // auto party on/off - keypad '*'
		if(MWConfig_AutoParty)
		{
			MWConfig_AutoParty = false;
			Print("Auto Party : Off");
		}
		else
		{
			MWConfig_AutoParty = true;
			Print("Auto Party : On");
		}
		break;
	}
}

function NT_GameMsgEvents(msg, type)
{
	if(type == 4 && msg.indexOf("x") != -1 && (msg.indexOf("left our world") != -1 || msg.indexOf("timeout") != -1))
	{
		ExitGame();
	}
}
Irgendjemand eine idee?
noch zwei kleine fragen: ist es möglich, dass ein leecher dem leader durch die akte folgt? also zum beispiel zuerst bei dia mitgeht, dann baal? und zweitens: ich wollte mal bei jemand anderem leechen, der hat mir dann passwort, char und accname geschickt aber auch noch messages, also hottp und nochwas. was sollte das? wofür brauche ich die?

vielen dank für eure hilfe und wenn der thread nicht am richtigen ort ist, entschuldigt bitte. ich habe im entsprechenden topic vor ein paar monaten geschrieben, aber da konnte mir niemand mehr mit diesem problem weiterhelfen

ps: char und acc namen habe ich oben rausgenommen, sind aber richtig geschrieben...
falls ihr sonst noch irgendwelche infos braucht, einfach sagen
07/18/2011 19:34 getgoodson#2
fehlt irgend eine angabe? oder hab ich es geschafft, dass ihr das problem ebenfalls nicht erkennen könnt?
07/19/2011 00:33 Muddy Waters#3
Naja, du musst da schon unterscheiden, das eine ist eben Automaton, das andere D2NT. Sind für sich aber zwei völlig verschiedene Dinge. Automaton liegt als DLL vor und sofern die Source nicht pubic ist, wirst du nicht um die Befehle herum kommen, mit D2NT sehen die Möglichkeiten schon besser aus.

Aber soweit ich das hier sehe, sollten die Leecher eigentlich mit dem Leader das Spiel verlassen, das ist für mich jedenfalls im Moment nicht nachvollziehbar.
Wegen dem Follow: man könnte das den Leader theoretisch immer wieder sagen lassen, bis der jeweilige Leecher eine Bestätigung gibt, dass die Information auch angekommen ist. Wäre aber verhältnismäßig aufwändig...

Ich schlage vor, lanara schaut hier mal drüber, der ist vermutlich mehr in der Materie drin. Mal hoffen, dass er es so sieht, ansonsten müssen wir ihn eben drauf hinweisen. :)

LG
Muddy
07/19/2011 09:55 lanara#4
Quote:
Originally Posted by getgoodson View Post
Also: Meine leecher joinen ein game und kämpfen/machen alles schön mit.
ABER: sie "starten" nur, wenn der leader follow sagt und gehen nur aus dem game, wenn er "bail" sagt. ansonsten stehen sie ewig in einem game rum (wenn der leader vor "bail" das spiel verlässt, dann steht der leecher im game, bis ich es merke und ihn manuell rausnehme, genau das gleiche, wenn er vor "follow" das game verlässt)

wie kriege ich es hin, dass weder "follow" noch "bail" nötig sind. wie gesagt, ansonsten klappt alles (game joinen und WENN follow gesagt wurde, macht er auch alles, was ich will)
"follow" wirst du immer sagen müssen, liegt wie Muddy schon sagte an Automaton. Warum die Leecher nicht das Spiel verlassen weiß ich auch nicht, sollte eigentlich klappen, vorrausgesetzt deren Spiel läuft auf Englisch und du hast den Leadername richtig eingetragen. Ich habe die NTMapGame für dich mal etwas geändert:

Code:
var Leader = "LeaderName";

function NTMain()
{
	Delay(1000);

	Include("libs/common/NTCommon.ntl");
	NTC_IncludeConfig("NTMap/char_configs");

	var _count = 0;
	var _LifeMax, _ManaMax;
	var _player, _mypartyid;

	NT_LoadConfig();

	SetStatusText("NTMap 1.2.1 - " + me.gameserverip);

	RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
	RegisterEvent(EVENT_KEYDOWN, NT_KeyEvents);

	SetUIState(0x0A, true);

	_LifeMax = me.hpmax;
	_ManaMax = me.mpmax;

	if(NTConfig_LifeChicken > 0)
		me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);

	if(NTConfig_ManaChicken > 0)
		me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);

	while(1)
	{
		if(!NTC_InTown())
		{
			if(_LifeMax != me.hpmax)
			{
				_LifeMax = me.hpmax;

				if(NTConfig_LifeChicken > 0)
					me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);
			}

			if(_ManaMax != me.mpmax)
			{
				_ManaMax = me.mpmax;

				if(NTConfig_ManaChicken > 0)
					me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);
			}
		}

		if(_count++ > 10)
		{
			if(NTConfig_AutoParty)
			{
				_player = GetPlayerUnit();

				if(_player)
				{
					_mypartyid = _player.partyid;

					while(_player.GetNext())
					{
						if(_player.partyid == 65535 || _player.partyid != _mypartyid)
						{
							if(_player.partyflag == 2)
							{
								me.ClickParty(_player, 2);
								break;
							}

							if(_player.partyid == 65535)
							{
								if(_player.partyflag == 4)
									break;

								me.ClickParty(_player, 2);
								NTC_Delay(NTC_DELAY_FRAME);

								if(_player.partyflag == 4 || (_player.partyid != 65535 && _player.partyid == _mypartyid))
									break;
							}
						}
					}
				}
			}

			_count = 0;
		}

		NTC_Delay(200);
	}
}

function NT_KeyEvents(keycode)
{
	switch(keycode)
	{
	case 109: // show or hide enemy - keypad '-'
		if(me.showenemyonautomap)
		{
			me.showenemyonautomap = false;
			Print("Enemy on Automap : Off");
		}
		else
		{
			me.showenemyonautomap = true;
			Print("Enemy on Automap : On");
		}
		break;
	case 107: // show or hide missile - keypad '+'
		if(me.showmissileonautomap)
		{
			me.showmissileonautomap = false;
			Print("Missile on Automap : Off");
		}
		else
		{
			me.showmissileonautomap = true;
			Print("Missile on Automap : On");
		}
		break;
	case 106: // auto party on/off - keypad '*'
		if(NTConfig_AutoParty)
		{
			NTConfig_AutoParty = false;
			Print("Auto Party : Off");
		}
		else
		{
			NTConfig_AutoParty = true;
			Print("Auto Party : On");
		}
		break;
	case 97: //Numpad1
		Say("follow");
		break;
	}
}

function NT_GameMsgEvents(msg, type)
{
	if(type == 4 && msg.toLowerCase().indexOf(Leader.toLowerCase()) != -1 && (msg.indexOf("left our world") != -1 || msg.indexOf("timeout") != -1))
	{
		ExitGame();
	}
}
Oben Leader eintragen, Spiel muss wie gesagt auf Englisch laufen. Wenn du auf dem Numpad die Taste 1 drückst, schreibt dein Char "follow".

Quote:
Originally Posted by getgoodson View Post
noch zwei kleine fragen: ist es möglich, dass ein leecher dem leader durch die akte folgt? also zum beispiel zuerst bei dia mitgeht, dann baal? und zweitens: ich wollte mal bei jemand anderem leechen, der hat mir dann passwort, char und accname geschickt aber auch noch messages, also hottp und nochwas. was sollte das? wofür brauche ich die?
Wenn du den Leecher mit zum WP nimmst, sollte er dir in den anderen Akt eigentlich nachporten, vorrausgesetzt er hat die nötigen WP's.

HotTP Messages sind dafür gedacht, wenn man einen Leecher erst zu einem bestimmten Zeitpunkt das TP joinen lassen will. Meisst wird das bei Baalruns genutzt, damit der Leecher nicht sofort reinrennt wenn das TP vom Leader auf geht, da es zu diesem Zeitpunkt oft noch nicht safe ist.
07/20/2011 03:24 getgoodson#5
Quote:
Originally Posted by lanara View Post
"follow" wirst du immer sagen müssen, liegt wie Muddy schon sagte an Automaton. Warum die Leecher nicht das Spiel verlassen weiß ich auch nicht, sollte eigentlich klappen, vorrausgesetzt deren Spiel läuft auf Englisch und du hast den Leadername richtig eingetragen. Ich habe die NTMapGame für dich mal etwas geändert:

Code:
var Leader = "LeaderName";

function NTMain()
{
	Delay(1000);

	Include("libs/common/NTCommon.ntl");
	NTC_IncludeConfig("NTMap/char_configs");

	var _count = 0;
	var _LifeMax, _ManaMax;
	var _player, _mypartyid;

	NT_LoadConfig();

	SetStatusText("NTMap 1.2.1 - " + me.gameserverip);

	RegisterEvent(EVENT_GAMEMSG, NT_GameMsgEvents);
	RegisterEvent(EVENT_KEYDOWN, NT_KeyEvents);

	SetUIState(0x0A, true);

	_LifeMax = me.hpmax;
	_ManaMax = me.mpmax;

	if(NTConfig_LifeChicken > 0)
		me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);

	if(NTConfig_ManaChicken > 0)
		me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);

	while(1)
	{
		if(!NTC_InTown())
		{
			if(_LifeMax != me.hpmax)
			{
				_LifeMax = me.hpmax;

				if(NTConfig_LifeChicken > 0)
					me.chickenhp = parseInt((_LifeMax*NTConfig_LifeChicken)/100);
			}

			if(_ManaMax != me.mpmax)
			{
				_ManaMax = me.mpmax;

				if(NTConfig_ManaChicken > 0)
					me.chickenmp = parseInt((_ManaMax*NTConfig_ManaChicken)/100);
			}
		}

		if(_count++ > 10)
		{
			if(NTConfig_AutoParty)
			{
				_player = GetPlayerUnit();

				if(_player)
				{
					_mypartyid = _player.partyid;

					while(_player.GetNext())
					{
						if(_player.partyid == 65535 || _player.partyid != _mypartyid)
						{
							if(_player.partyflag == 2)
							{
								me.ClickParty(_player, 2);
								break;
							}

							if(_player.partyid == 65535)
							{
								if(_player.partyflag == 4)
									break;

								me.ClickParty(_player, 2);
								NTC_Delay(NTC_DELAY_FRAME);

								if(_player.partyflag == 4 || (_player.partyid != 65535 && _player.partyid == _mypartyid))
									break;
							}
						}
					}
				}
			}

			_count = 0;
		}

		NTC_Delay(200);
	}
}

function NT_KeyEvents(keycode)
{
	switch(keycode)
	{
	case 109: // show or hide enemy - keypad '-'
		if(me.showenemyonautomap)
		{
			me.showenemyonautomap = false;
			Print("Enemy on Automap : Off");
		}
		else
		{
			me.showenemyonautomap = true;
			Print("Enemy on Automap : On");
		}
		break;
	case 107: // show or hide missile - keypad '+'
		if(me.showmissileonautomap)
		{
			me.showmissileonautomap = false;
			Print("Missile on Automap : Off");
		}
		else
		{
			me.showmissileonautomap = true;
			Print("Missile on Automap : On");
		}
		break;
	case 106: // auto party on/off - keypad '*'
		if(NTConfig_AutoParty)
		{
			NTConfig_AutoParty = false;
			Print("Auto Party : Off");
		}
		else
		{
			NTConfig_AutoParty = true;
			Print("Auto Party : On");
		}
		break;
	case 97: //Numpad1
		Say("follow");
		break;
	}
}

function NT_GameMsgEvents(msg, type)
{
	if(type == 4 && msg.toLowerCase().indexOf(Leader.toLowerCase()) != -1 && (msg.indexOf("left our world") != -1 || msg.indexOf("timeout") != -1))
	{
		ExitGame();
	}
}
Oben Leader eintragen, Spiel muss wie gesagt auf Englisch laufen. Wenn du auf dem Numpad die Taste 1 drückst, schreibt dein Char "follow".

danke erstmal. problem besteht aber weiterhin: wenn mein leader das game verlässt, bevor er follow/bail gesagt hat, dann bleibt der leecher einfach stehen und tut gar nix.
english: sollte es sein, die flist nachrichten werden bei beiden english angezeigt, ingame auch alles. leadername stimmt
hab die NTMapGame ersetzt. aber wenn ich die 1 auf dem nummernblock drücke, dann kommt: current script order: dann meine scripts und wenn ichs nochmal drücke: targeting "leechchar" und bringen tut das nix (leechchar rennt mir nicht hinterher)...

das ganze wird irgendwie immer seltsamer...
07/20/2011 08:35 lanara#6
Ähm was? :confused: Du bist dir aber schon sicher, dass du die NTMapGame im richtigen Ordner ersetzt, oder? [Only registered and activated users can see links. Click Here To Register...] Welchen Bot nutzt du denn?
07/20/2011 15:10 getgoodson#7
Quote:
Originally Posted by lanara View Post
Ähm was? :confused: Du bist dir aber schon sicher, dass du die NTMapGame im richtigen Ordner ersetzt, oder? [Only registered and activated users can see links. Click Here To Register...] Welchen Bot nutzt du denn?
scripts/NTmap/NTMapGame <-- die habe ich ersetzt
nutze muddys bot.