[D2NT] Mob auslassen?

05/18/2010 19:08 SparkZ11#1
Hi,

hab das problem vorallem im cs, wenn mal so ein ghost hinter ner mauer rumschebt probiert der bot den zukillen ohne erfolg bis er ausn game rausgeht kann man irgendwie einstellen das er nach 10 sek den mob skipt?

danke schonmal
05/18/2010 19:18 Medix#2
NTAttack

Code:
function NTA_IsValidMonster(monster)
{
	var _classid;

	if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
		return false;

	_classid = monster.classid;

	if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
		return false;

	if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
		return false;

	if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
		return false;

	if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
		return false;

	return true;
}

so jetzt einfach die id von den ghosts raussuchen und adden
05/18/2010 19:38 Muddy Waters#3
Quote:
Originally Posted by Medix View Post
NTAttack

Code:
function NTA_IsValidMonster(monster)
{
    var _classid;

    if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
        return false;

    _classid = monster.classid;

    if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
        return false;

    if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
        return false;

    if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
        return false;

    if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
        return false;

    return true;
}
so jetzt einfach die id von den ghosts raussuchen und adden
Irgendwie löst das aber das eigentliche Problem nicht, es umgeht es einfach. :p

Das mit dem Timer sollte auch leicht umzusetzen sein. Irgendwo in der NTAttack.ntj müsstest du mal die entsprechende Attack Funktion suchen.
Typischerweise wird dort ein Monster Objekt instantiiert, danach kommt in irgend einer Weise eine While-Schleife, in der dann als Schleifenbedingung sowas wie monsterunit.GetNext() steht. du musst dir im Grunde nur anschauen wie nun die einzelnen Monster angegriffen werden, vermutlich auch in einer While-Schleife, wobei vermutlich vermutlich solange angegriffen wird, solange das Monster ein gültiges Ziel ist (also beispielsweise noch lebt).

Genau vor dieser Schleife speicherst du nun den aktuellen Tick Count in einer Variable. In die Bedingung der "Angriffs"-While-Schleife kommt nun eine zusätzliche Bedingung, nämlich ganz einfach die Differenz von aktuellem Tick Count und dem zuvor gespeicherten Wert.
Dies ist dann die Schleifenlaufzeit in Millisekunden, die du dann nach belieben mit einem vorher definiertem Referenzwert (z.B. 10 Sekunden) vergleichen kannst.
Das war einmal die Kurzform, ich hoffe die Umsetzung schaffst du selbst, ich habe gerade weder Zeit noch Lust das zu implementieren. ;)

Lg
Muddy
05/18/2010 20:09 Medix#4
Quote:
Originally Posted by Muddy_Waters View Post
Irgendwie löst das aber das eigentliche Problem nicht, es umgeht es einfach. :p
ja aber sehr effektiv ^.^

Deine Lösung mag zwar sehr elegant sein, er wird sich damit jedoch den kompletten bot zerschießen wenn er nicht weiß was er tut . :D


PS: Die Monsterid findest du im Sticky
05/18/2010 22:05 hdin84#5
Mein Ansatz war nach jedem Angriff zu schaun ob der erfolgreich war oder nich (gibt nen switch wo dies abgefragt wird) und wenn der angriff daneben ging nen zähler zu inkrementieren. sobald der dann z.B. >5 soll er das Monster auslassen und zum nächsten gehen - hat nur nich so geklappt wie ichs wollt und habs drum wieder rausgenommen - vllt hat ja wer anders mehr Erfolg damit.. ;)
05/19/2010 00:33 SparkZ11#6
Quote:
Originally Posted by Muddy_Waters View Post
Irgendwie löst das aber das eigentliche Problem nicht, es umgeht es einfach. :p

Das mit dem Timer sollte auch leicht umzusetzen sein. Irgendwo in der NTAttack.ntj müsstest du mal die entsprechende Attack Funktion suchen.
Typischerweise wird dort ein Monster Objekt instantiiert, danach kommt in irgend einer Weise eine While-Schleife, in der dann als Schleifenbedingung sowas wie monsterunit.GetNext() steht. du musst dir im Grunde nur anschauen wie nun die einzelnen Monster angegriffen werden, vermutlich auch in einer While-Schleife, wobei vermutlich vermutlich solange angegriffen wird, solange das Monster ein gültiges Ziel ist (also beispielsweise noch lebt).

Genau vor dieser Schleife speicherst du nun den aktuellen Tick Count in einer Variable. In die Bedingung der "Angriffs"-While-Schleife kommt nun eine zusätzliche Bedingung, nämlich ganz einfach die Differenz von aktuellem Tick Count und dem zuvor gespeicherten Wert.
Dies ist dann die Schleifenlaufzeit in Millisekunden, die du dann nach belieben mit einem vorher definiertem Referenzwert (z.B. 10 Sekunden) vergleichen kannst.
Das war einmal die Kurzform, ich hoffe die Umsetzung schaffst du selbst, ich habe gerade weder Zeit noch Lust das zu implementieren. ;)

Lg
Muddy
hmm danke so werd ichs wahrscheinlich machen hab euch allen ein thx gegeben :)
05/19/2010 22:47 ~Yuki~#7
Also wirklich... wer so programmiert hat ja keinen style :O

Das schaut nicht nach C# aus.... eher Kinderlähmung