Register for your free account! | Forgot your password?

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

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

Advertisement



Alle Bossmonster auf dem Weg töten?

Discussion on Alle Bossmonster auf dem Weg töten? within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
Alle Bossmonster auf dem Weg töten?

Hi,

ich nutze den D2NT Bluebird und möchte gerne das der Bot auf seinem Weg alle Bosse tötet.

Wie realisiere ich das?
IamSoLaZe is offline  
Old 07/26/2010, 15:54   #2
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
Code:
NTA_ClearRoom()
in dem jeweiligen botscript einbinden (für jedes worldstone level z.B) und im ntattack unter
Code:
function NTA_ClearRoom()
den spectype auf
Code:
var _spectype = [0x0A, 0x01, 0x01];
setzen
fuuch is offline  
Old 07/26/2010, 16:07   #3
 
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
Cleart der dann die Ebene?

Sollte nur das töten was aufm Weg ist^^.
IamSoLaZe is offline  
Old 07/26/2010, 16:49   #4
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
das cleart das level von allen unique und elite mobs, musst du testen ob es nur die auf dem weg cleart
fuuch is offline  
Old 07/26/2010, 22:45   #5
 
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
Kannst mir das genauer erklären in welcher Datei ich welche Zeile editen soll?

Ich habe jetzt unter der ntattack NTA_ClearRoom() abgeglichen.

Und jetzt soll ich in der Nt Config das jetzt z.B. so schreiben?

NTConfig_Script.push("NTGraefin.ntj");NTA_ClearRoo m();
IamSoLaZe is offline  
Old 07/26/2010, 23:23   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Im empfehle erstmal ein bisschen JavaScript Grundlagen.

Im übrigen kommst du bei dem was du vorhast mit einfachem Ändern von Werten vermutlich nicht zum gewünschten Ergebnis. Vielmehr musst du die Funktion NTM_MoveTo() sowie die Funktion NTA_ClearPosition() weiter parametrisieren und zwar dahingehend, dass du beim Aufruf den spectype definieren kannst.

Die spectypes hat fuuch ja schon genannt:
Code:
[COLOR=Red]0x01[/COLOR] - Alle Monster
[COLOR=Red]0x0A[/COLOR] - Nur bei Bossen, Champs, etc. ( == das was du suchst)
Du müsstest also so, dass die Funktion bei entsprechendem Aufruf nur Bosse und Champions beachtet, was aber nur stattfinden soll, wenn ein entsprechender Parameter übergeben wird.

Die entsprechenden Aufrufe der Funktion NTM_MoveTo() müsstendann in allen eigentlichen Bot Scripten angepasst werden.Insgesamt ist das nicht wirklich anspruchsvoll, für einen Laien aber eventuell schon, darum würde ich mich erstmal ein bisschen mit JavaScript befassen, damit du wenigstens halbwegs weisst was du tust.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 05:38   #7
 
elite*gold: 0
Join Date: Mar 2010
Posts: 7
Received Thanks: 0
Java habe ich in der Schule gelernt. C# ist auch dabei ein totaler Noob bin ich nicht aber auch nicht der Beste .

Ja ich finde der Bot killt zu wenig normale Boss Monster.

Alleine auf dem Weg zur Gräfin flitzen die öfters durchs Bild. Auf dem Weg in das CS sieht man meist die grünen da rumrennen uvm.

Er soll wie gesagt nicht die Ebene clearen sondern nur Bossmonster in einer bestimmten Range auf seinen Telewegn mitnhemen.
IamSoLaZe is offline  
Old 07/27/2010, 08:16   #8
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
du kannst in
Quote:
D2NT\scripts\NTBot\bots
das jeweilige botscript bearbeiten, falls du eine bestimmte gegend gecleart haben willst.
es reicht dort einfach
Quote:
clearroom()
einzufügen an den nötigen stellen (das säubert das lvl von uniques und ist die einfachste möglichkeit in etwa das zu erzielen, was du vorhast - jedoch willst du nur auf dem weg clearen), oder in der ntattack
Quote:
clearposition()
einfach mal kopieren und drunter neu einsetzen als
Quote:
clearpositionuniques()
oder so und nen spectype einbauen, den du an
Quote:
clearpositionuniques(spectype)
weitergibst so in etwa (muddy nennt das parametrisieren) um uniques zu clearen beim porten - guck dir an wie das in clearroom() gemacht wurde. du müsstest
Quote:
moveto()
auch irgendwie verändern,
Quote:
clearposition()
allein reicht nicht aus - ich weiß grad nicht wie.

also fazit aus meiner wall of text

1.softmode -> clearroom() in botscripte einbauen, am besten nur geschlossene maps, wie andariel, mephisto, baal - nicht z.B. diablo, eldrich, shenk
2.hardmode -> spectype in clearposition() einbauen und moveto() umändern, sodass du nach jedem port clearposition aufrufst in etwa mit einer relativ kleinen range
fuuch is offline  
Old 07/27/2010, 14:05   #9
 
sternenlooper's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 1,675
Received Thanks: 789
Quote:
Originally Posted by IamSoLaZe View Post
Java habe ich in der Schule gelernt. C# ist auch dabei ein totaler Noob bin ich nicht aber auch nicht der Beste .

Ja ich finde der Bot killt zu wenig normale Boss Monster.

Alleine auf dem Weg zur Gräfin flitzen die öfters durchs Bild. Auf dem Weg in das CS sieht man meist die grünen da rumrennen uvm.

Er soll wie gesagt nicht die Ebene clearen sondern nur Bossmonster in einer bestimmten Range auf seinen Telewegn mitnhemen.
sry aber irgendwie stellst du dich schon etwas an -.-

wenn du eine komplettläsung gewollt hättest frage doch in dem botthreat nach! dieses ist die programming ecke! bedeutet etwas eingeninziative wird vorrausgesetzt

gehen wir mal ALLES schritt für schritt durch!

du willst also wenn dein bot zu einer gewissen position geht das er nur uniq monster killt?! nur die die auf dem weg sind!

also schauen wir uns mal den movetostair befehl genauer an und erkennen das sich die programmierer hingesetzt haben und den befehl clearpath schon eingebaut haben!
zu finden in der ntmove
Code:
function NTM_MoveToStair(areaid, subareaid, offsetx, offsety, [COLOR="Red"]clearpath[/COLOR])
{
		if(NTConfig_Teleport)
		{
		NTC_SwapWeapons(1)
		}
	var i, n;
	var _unit;

	if(arguments.length < 3)
	{
		offsetx = 0;
		offsety = 0;
	}

[COLOR="red"]	if(arguments.length < 5)
		clearpath = false;[/COLOR]

	for(i = 0 ; i <= 2 ; i++)
	{
		_unit = GetPresetUnits(areaid, NTC_UNIT_TILE);

		if(_unit)
		{
			for(n = 0 ; n < _unit.length ; n++)
			{
				if(_unit[n].subareaid == subareaid)
					return NTM_MoveTo(areaid, _unit[n].roomx*5+_unit[n].x+offsetx, _unit[n].roomy*5+_unit[n].y+offsety, 3, clearpath);
			}
		}

		if(i < 2)
			NTC_Delay(500);
	}

	return false;
}
so da man "anfänger" darinn ist schaut man sich mal ein script an bei dem der clear patch befehl schon eingebaut ist! (so habe ich angefangen das wichtigste zu lernen)

wo gibt es denn clearpath sachen? richtig bei dem grube script zb! also schauen wir uns dort einmal einen ausschnitt an!
Code:
		if(!NTM_MoveToStair(me.areaid, 16, 0, 0, true))
		{
			NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToStair()");
			return;
		}
hier macht er den pfad "sauber"!
Code:
		if(!NTM_MoveToStair(me.areaid, 16))
		{
			NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToStair()");
			return;
		}
hier nicht!

wo ist der unterschied? schaue dir obend as rot gezeichnete an und lese vergleiche!

so damit ist geklärt wie man es schafft den bot den pfad zu clearen!

aber wie macht man es nun das er "nur" helden bosse usw macht?!
dazu könntest du auf meinen bot wechseln! denn ich habe diesen befehl schon eingebaut musst du dir also keine arbeit machen -.-

das geht indem du den befehl dazu einbaust! in deinen extra geschriebenen clearpath befehl!
Quote:
NTConfig_uniq = true;
diesen befehl darfst du NICHT in deine charconfig setzen da er sonst permanent wirkt und du nirgends anders mehr keine nur uniq monster killen könntest!

natürlich hätte man es auch besser lösen können (siehe post muddy)
aber als ich dieses eingebaut habe wusste ich es selbst noch nicht besser und es geht ja! das alles jetzt wieder ändern ist mir dann auch zu blöd auch wenn es muddy syntaktisch besser gefallen würde :P

so wenn du mehr fragen hast lasse es sein und bitte jemanden dir alles zurecht zu schreiben!
sternenlooper is offline  
Old 07/27/2010, 15:13   #10
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Ich finde auch, dass sich deine eigentlich ansehnliche Vorbildung etwas mit dem was du hier schreibst beisst.

Der Vorteil an meinem Vorschlag ist, dass dieser Ansatz sehr defensiv ist. Sprich die Änderung tritt nur dann in Kraft, wenn ein entsprechender Funktionsaufruf mit der notwendigen Parametersignatur stattfindet. Alle anderen Aufrufe wie sie in sämtlichen Scripten vorkommen bleiben damit unangetastet. Du bekommst dadurch ein hohes Maß an Kontrolle darüber, wann die modifizierte Fassung "wirkt" und wann einfach alles beim alten ist.

Mal schauen, vielleicht poste ich nachher die angepassten Funktionen, an sich ist das eine Arbeit von <10min. Jetzt werd ich aber erstmal was essen und eine runde entspannen.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 15:58   #11
 
sternenlooper's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 1,675
Received Thanks: 789
Quote:
Originally Posted by Muddy_Waters View Post
Ich finde auch, dass sich deine eigentlich ansehnliche Vorbildung etwas mit dem was du hier schreibst beisst.

Der Vorteil an meinem Vorschlag ist, dass dieser Ansatz sehr defensiv ist. Sprich die Änderung tritt nur dann in Kraft, wenn ein entsprechender Funktionsaufruf mit der notwendigen Parametersignatur stattfindet. Alle anderen Aufrufe wie sie in sämtlichen Scripten vorkommen bleiben damit unangetastet. Du bekommst dadurch ein hohes Maß an Kontrolle darüber, wann die modifizierte Fassung "wirkt" und wann einfach alles beim alten ist.

Mal schauen, vielleicht poste ich nachher die angepassten Funktionen, an sich ist das eine Arbeit von <10min. Jetzt werd ich aber erstmal was essen und eine runde entspannen.

Lg
Muddy
mein weg greift doch auch nur noch bei einer bestimmten einstellung :P
simpel (nicht viel das veränder werden muss/te) und effektiv (geht doch)! aber dafür nicht perfekt!

bsp. aus meinen scripten

töte alle monster auf einer ebene
Code:
if(NTConfig_ClearMaus == 2)
    {
        if(!NTA_ClearLevel())
              {
        NTC_SendMsgToScript("NTBotGame.ntj", "NTA_ClearLevel()");
        return;
              }
    }
töte nur alle besonderen monster auf einer ebene
Code:
if(NTConfig_ClearMaus == 3)
    {
        [COLOR="Red"]NTConfig_uniq = true;[/COLOR]
        if(!NTA_ClearLevel())
              {
        NTC_SendMsgToScript("NTBotGame.ntj", "NTA_ClearLevel()");
        return;
              }
    }
wirkt nur für dieses script und diese ebene!
ob ich das nun so oder so mache! *g*
dafür musste ich nur ganz wenig verändern und kann es dennoch nach belieben überall einbauen!
sternenlooper is offline  
Old 07/27/2010, 17:50   #12
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
@Sterni
Was soll man dazu sagen? Ausser, dass der Name der Config Variable blöd ist.

So würde ich es machen, ich finde es nicht unbedingt schwieriger:
Code:
function NTA_ClearPosition(range, pickitem, safelevel, [COLOR=Red]bossmode[/COLOR])
{
    var _orgx, _orgy;
    var _spectype;
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;

    if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
        return false;

    switch(arguments.length)
    {
    case 0:
        range = 20;
    case 1:
        pickitem = false;
    case 2:
        safelevel = 0;
  [COLOR=Red]  case 3:
        bossmode = false;[/COLOR]
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

  [COLOR=Red]  if(bossmode)
        _spectype = [0x0A, 0x0A, 0x0A];
    else
        _spectype = [0x0A, 0x01, 0x01];[/COLOR]
        
    _orgx = me.x;
    _orgy = me.y;

    for(var i = 0 ; i < _spectype.length ; i++)
    {
        _skiplist = new Array();

        while(_attackcount < (i+1)*100)
        {
            _mindistance = 100000;

            _target = NTC_FindUnit(NTC_UNIT_MONSTER);

            if(_target)
            {
                do
                {
                    if(_skiplist.indexOf(_target.gid) < 0)
                    {
                        if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
                        {
                            if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
                            {
                                _distance = GetDistance(me, _target);

                                if(_distance < _mindistance)
                                {
                                    _mingid = _target.gid;
                                    _mindistance = _distance;
                                }
                            }
                        }
                        else
                            _skiplist.push(_target.gid);
                    }
                } while(_target.GetNext());
            }

            if(_mindistance < 100000)
            {
                _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

                if(_target)
                {
                    _result = NTA_Attack(_target, (_attackcount%30) == 0);

                    switch(_result)
                    {
                    case 1:
                        _skiplist.push(_mingid);
                        break;
                    case 2:
                    case 3:
                        _attackcount++;
                        break;
                    default:
                        return false;
                    }
                }
            }
            else
                break;
        }
    }

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
        if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
        {
            if(NTC_PutSkill(124, NTC_HAND_RIGHT))
                NTC_PingDelay(1000);
        }
    }

    if(NTConfig_OpenChest)
    {
        _target = NTC_GetSpecialChest();

        if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
            _attackcount++;
    }

    if(pickitem && _attackcount > 0)
        NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
        return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
        return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
}
Code:
function NTM_MoveTo(areaid, x, y, retry, clearpath, [COLOR=Red]bossmode[/COLOR])
{
    var i, n;
    var _teleport;
    var _path;
    var _retry = 0;

    if(x == me.x && y == me.y)
        return true;

    if(arguments.length < 4)
        retry = 3;

    if(arguments.length < 5)
        clearpath = false;
    
  [COLOR=Red]  if(arguments.length < 6)
        bossmode = false;[/COLOR]

    if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
        _teleport = false;
    else
        _teleport = true;

    _path = GetPath(areaid, me.x, me.y, x, y, _teleport);

    if(!_path)
        return false;

    for(i = 0 ; i < _path.length ; i++)
    {
        for(n = 0 ; n < 2 ; n++)
        {
            if(_teleport)
            {
                if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
                    break;
            }
            else
            {
                if(NTM_WalkTo(_path[i][0], _path[i][1]))
                    break;
            }
        }

        if(n < 2)
        {
            if(clearpath)
            {
                if(!NTA_ClearPosition(20, true, 2,[COLOR=Red] bossmode[/COLOR]))
                    return false;
                                
                NTP_DoPrecast(false);

                NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
            }
        }
        else if(_retry < retry)
        {
            _path = GetPath(areaid, me.x, me.y, x, y, _teleport);

            if(!_path)
                return false;

            i = -1;
            _retry++;
        }
        else
            return false;
    }

    return true;
}
Code:
function NTM_MoveToStair(areaid, subareaid, offsetx, offsety, clearpath, [COLOR=Red]bossmode[/COLOR])
{
    var i, n;
    var _unit;

    if(arguments.length < 3)
    {
        offsetx = 0;
        offsety = 0;
    }

    if(arguments.length < 5)
        clearpath = false;
    
    [COLOR=Red]if(arguments.length < 6)
        bossmode = false;[/COLOR]

    for(i = 0 ; i <= 2 ; i++)
    {
        _unit = GetPresetUnits(areaid, NTC_UNIT_TILE);

        if(_unit)
        {
            for(n = 0 ; n < _unit.length ; n++)
            {
                if(_unit[n].subareaid == subareaid)
                    return NTM_MoveTo(areaid, _unit[n].roomx*5+_unit[n].x+offsetx, _unit[n].roomy*5+_unit[n].y+offsety, 3, clearpath, [COLOR=Red]bossmode[/COLOR]);
            }
        }

        if(i < 2)
            NTC_Delay(500);
    }

    return false;
}
Wie man an dem Teil in rot sieht sind die Änderungen Minimal. Wichtig ist aber, dass alle neuen Parameter Default Werte haben, damit die normalen Aufrufe nicht von den Änderungen betroffen sind.
Da du ja Fit bist, sollte es dir nun leicht fallen, die Funktionen an den gewünschten Stellen korrekt aufzurufen, die formalen Parameter hast du nun ja direkt vor der Nase.

Lg
Muddy
Muddy Waters is offline  
Old 07/27/2010, 18:51   #13
 
sternenlooper's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 1,675
Received Thanks: 789
Quote:
Originally Posted by Muddy_Waters View Post
@Sterni
Was soll man dazu sagen? Ausser, dass der Name der Config Variable blöd ist.

So würde ich es machen, ich finde es nicht unbedingt schwieriger:
Code:
function NTA_ClearPosition(range, pickitem, safelevel, [COLOR=Red]bossmode[/COLOR])
{
    var _orgx, _orgy;
    var _spectype;
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;

    if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
        return false;

    switch(arguments.length)
    {
    case 0:
        range = 20;
    case 1:
        pickitem = false;
    case 2:
        safelevel = 0;
  [COLOR=Red]  case 3:
        bossmode = false;[/COLOR]
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

  [COLOR=Red]  if(bossmode)
        _spectype = [0x0A, 0x0A, 0x0A];
    else
        _spectype = [0x0A, 0x01, 0x01];[/COLOR]
        
    _orgx = me.x;
    _orgy = me.y;

    for(var i = 0 ; i < _spectype.length ; i++)
    {
        _skiplist = new Array();

        while(_attackcount < (i+1)*100)
        {
            _mindistance = 100000;

            _target = NTC_FindUnit(NTC_UNIT_MONSTER);

            if(_target)
            {
                do
                {
                    if(_skiplist.indexOf(_target.gid) < 0)
                    {
                        if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
                        {
                            if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
                            {
                                _distance = GetDistance(me, _target);

                                if(_distance < _mindistance)
                                {
                                    _mingid = _target.gid;
                                    _mindistance = _distance;
                                }
                            }
                        }
                        else
                            _skiplist.push(_target.gid);
                    }
                } while(_target.GetNext());
            }

            if(_mindistance < 100000)
            {
                _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

                if(_target)
                {
                    _result = NTA_Attack(_target, (_attackcount%30) == 0);

                    switch(_result)
                    {
                    case 1:
                        _skiplist.push(_mingid);
                        break;
                    case 2:
                    case 3:
                        _attackcount++;
                        break;
                    default:
                        return false;
                    }
                }
            }
            else
                break;
        }
    }

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
        if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
        {
            if(NTC_PutSkill(124, NTC_HAND_RIGHT))
                NTC_PingDelay(1000);
        }
    }

    if(NTConfig_OpenChest)
    {
        _target = NTC_GetSpecialChest();

        if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
            _attackcount++;
    }

    if(pickitem && _attackcount > 0)
        NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
        return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
        return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
}
Code:
function NTM_MoveTo(areaid, x, y, retry, clearpath, [COLOR=Red]bossmode[/COLOR])
{
    var i, n;
    var _teleport;
    var _path;
    var _retry = 0;

    if(x == me.x && y == me.y)
        return true;

    if(arguments.length < 4)
        retry = 3;

    if(arguments.length < 5)
        clearpath = false;
    
  [COLOR=Red]  if(arguments.length < 6)
        bossmode = false;[/COLOR]

    if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
        _teleport = false;
    else
        _teleport = true;

    _path = GetPath(areaid, me.x, me.y, x, y, _teleport);

    if(!_path)
        return false;

    for(i = 0 ; i < _path.length ; i++)
    {
        for(n = 0 ; n < 2 ; n++)
        {
            if(_teleport)
            {
                if(NTM_TeleportTo(_path[i][0]+Random(-n, n), _path[i][1]+Random(-n, n)))
                    break;
            }
            else
            {
                if(NTM_WalkTo(_path[i][0], _path[i][1]))
                    break;
            }
        }

        if(n < 2)
        {
            if(clearpath)
            {
                if(!NTA_ClearPosition(20, true, 2,[COLOR=Red] bossmode[/COLOR]))
                    return false;
                                
                NTP_DoPrecast(false);

                NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
            }
        }
        else if(_retry < retry)
        {
            _path = GetPath(areaid, me.x, me.y, x, y, _teleport);

            if(!_path)
                return false;

            i = -1;
            _retry++;
        }
        else
            return false;
    }

    return true;
}
Code:
function NTM_MoveToStair(areaid, subareaid, offsetx, offsety, clearpath, [COLOR=Red]bossmode[/COLOR])
{
    var i, n;
    var _unit;

    if(arguments.length < 3)
    {
        offsetx = 0;
        offsety = 0;
    }

    if(arguments.length < 5)
        clearpath = false;
    
    [COLOR=Red]if(arguments.length < 6)
        bossmode = false;[/COLOR]

    for(i = 0 ; i <= 2 ; i++)
    {
        _unit = GetPresetUnits(areaid, NTC_UNIT_TILE);

        if(_unit)
        {
            for(n = 0 ; n < _unit.length ; n++)
            {
                if(_unit[n].subareaid == subareaid)
                    return NTM_MoveTo(areaid, _unit[n].roomx*5+_unit[n].x+offsetx, _unit[n].roomy*5+_unit[n].y+offsety, 3, clearpath, [COLOR=Red]bossmode[/COLOR]);
            }
        }

        if(i < 2)
            NTC_Delay(500);
    }

    return false;
}
Wie man an dem Teil in rot sieht sind die Änderungen Minimal. Wichtig ist aber, dass alle neuen Parameter Default Werte haben, damit die normalen Aufrufe nicht von den Änderungen betroffen sind.
Da du ja Fit bist, sollte es dir nun leicht fallen, die Funktionen an den gewünschten Stellen korrekt aufzurufen, die formalen Parameter hast du nun ja direkt vor der Nase.

Lg
Muddy
das es mit dieser config variablen nicht elegant ist mag sein aber es geht :P
der name ist auch nur deshalb gewählt weil ich zu diesem zeitpunkt ca 10-15 neue habe einfallen lassen müssen! irgendwann wählt man die kürzeste die einen gerade einfällt *g*

und es sollte ja nur massentauglich sein und nicht für erfahrene leute die sowas selber machen können und sich das anschauen xD

ausserdem musste ich viel weniger verändern!
pah sieg auf der ganzen linie xD

solltest mal bei mir in die lehre gehen wie man etwas einfach machen kann! einfach = weniger fehleranfällig!
wenn ich bei deinem bsp nur einen fehler mache müsste ich alles anschauen und ausprobieren wenn ich bei meinem einen fehler gemacht hätte nur 2 zeilen!
sternenlooper is offline  
Reply


Similar Threads Similar Threads
Metinstein-und Bossmonster suche leicht gemacht
06/26/2010 - Metin2 Guides & Templates - 5 Replies
Ich wollte ma einen thread machen wo die leute nicht immer stunden durch eine map laufen um einen metin zu finden ich sag jetzt mal die häufigsten metin treffpunkte an Jinno map1:die meissten metins findet man hier rechts auf der map und oben also am wasser Jinno map2:dunkelheit ist am allerhäufigsten oben links genau wie schwärze ist aber leider überfarmt dort;unten auf der map lässt sich haufig eifersucht finden Wüste:hier ist es schwer metins zu finden die meisten findet man aber...
Metinstein-und Bossmonster suche leicht gemacht
07/16/2009 - Metin2 Guides & Templates - 9 Replies
Ich wollte ma einen thread machen wo die leute nicht immer stunden durch eine map laufen um einen metin zu finden ich sag jetzt mal die häufigsten metin treffpunkte an Jinno map1:die meissten metins findet man hier rechts auf der map und oben also am wasser Jinno map2:dunkelheit ist am allerhäufigsten oben links genau wie schwärze ist aber leider überfarmt dort;unten auf der map lässt sich haufig eifersucht finden Wüste:hier ist es schwer metins zu finden die meisten findet man aber...
Alle Mops inder den Umkreis TöTen???
05/11/2008 - Flyff - 5 Replies
Hey Leute, Ich wollte gerne wissen, wie dieser bot heißt womit man alle Mops in den Umkreis töten kann?? Bin mir nicht sicher ob es der Termination bot war :confused:... Vllt könnt ihr mir helfen:rolleyes: lG:cool:



All times are GMT +2. The time now is 07:00.


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.