Register for your free account! | Forgot your password?

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

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

 

HowTo: Soso nutzt Statik NUR für Unique Bosse (ala Dia, Baal usw.)

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
HowTo: Soso nutzt Statik NUR für Unique Bosse (ala Dia, Baal usw.)

Nachdem mich das jetzt so geärgert hat, dass entweder immer statik genutzt wird, oder garnicht, oder bei jedem boss der von irgendwo herkommt, hab ich mich hingesetzt und mir die Skripte mal ein wenig angeschaut.

!! Das ganze basiert auf der Bluebird Version von D2NT. Wie es mit anderen klappt kann ich euch nicht sagen !!

Warnung: Bevor ihr meine Änderungen vornehmt macht eine Sicherheitskopie von euren aktuellen (hoffentlich funktionierenden ) Dateien.

Im Spoiler findet ihr die alte Version, die ich mir selbst ausgedacht habe, welche nicht unbedingt benutzt werden sollte

Nach fantastischer Hilfe von Muddy Waters ist dann die folgende Version entstanden:

Stellt in eurer Charconfig den gewünschten Statik level bei
Code:
NTConfig_CastStatic = 60;
ein.
Anschliessend muss die Variable
Code:
var WRZ_staticenemys = ["Blood Raven", "Andariel", "Mephisto", "Diablo", "Baal"];
in der NTConfig.ntl deklariert werden. Hier kann jeder gewünschte Boss gelöscht / hinzugefügt werden, auf den ihr Statik anwenden möchtet.

Danach geht ihr in die "NTAttack.ntl", sucht nach der Zeile:
Code:
if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
und ersetzt sie mit folgender:
Code:
if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80 && CheckStaticTarget(target))
Zum Schluss wird fügt ihr am Ende noch die folgende Funktion hinzu:
Code:
function CheckStaticTarget(target)
{
	for(var i = 0; i < WRZ_staticenemys.length; i++)
	{
		if(typeof WRZ_staticenemys[i] == "string" && WRZ_staticenemys[i].toLowerCase() == target.name.toLowerCase())
			return true;	
	}
	
	return false;
}
Das wars dann auch schon. Nochmal vielen Dank an Muddy Waters für die Verbesserung meiner Version



whoranzone123 is offline  
Thanks
2 Users
Old   #2
Administrator
 
elite*gold: 272143
Join Date: Jan 2010
Posts: 22,492
Received Thanks: 12,150
Ohne dir zu nahe treten zu wollen: irgendwie gehst du das reichlich unsinnig an.

NTA_KillMonster(classid) ist eine generische Funktion, es ist absolut nicht sinnvoll eine solche Funktion spezifischer zu machen. Das was du vorhast kann man sehr viel eleganter erreichen, indem man in der eigentlichen Angriffsfunktion für Sorcs ansetzt, also NTA_SorceressAttackInt().

Damit du selber tüfteln kannst, hier nur mal ein mögliches Grundkonzept:
Du legst ein Array an, indem du die Statik Ziele irgendwie spezifizierst. Das kann man über den Namen machen, über die Classid, über Spectypes...prinzipiell ist da alles möglich, der Einfachheit halber kannst du es ja vorerst nur mit Strings machen.
Jetzt schreibst du eine Funktion, der du jeweils die Unit des aktuellen Ziels übergibst und die daraufhin das Ziel mit den Spezifikationen in deinem Array abgleicht und dann, je nachdem wie dieser Abgleich ausfällt, true oder false zurückliefert.

Jetzt erweiterst du einfach das Argument der if-Anweisung um einen Aufruf eben dieser Funktion.

Das Ergebnis: Du hast eine viel allgemeinere Lösung, alle anderen Chars laufen wie bisher und du kannst ohne größeren Zusatzaufwand auch weitere Bosse als Statik Ziel in deiner Charconfig definieren (sofern du das oben genannte Array als Config variable deklarierst).

Da das eigentlich recht einfach ist, lasse ich dich mal tüfteln, wenn du es nicht hinbekommst kannst du schließlich einfach nachfragen.


Muddy Waters is offline  
Thanks
2 Users
Old   #3
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
Ich hätte jetzt gerne so nen Ironie "Schönen Dank auch" Knopf

Ok danke dass du mich miträtseln lässt
Ich versuche mal soviel umzusetzen, wie ich verstanden habe:

Quote:
Originally Posted by Muddy Waters View Post
Du legst ein Array an, indem du die Statik Ziele irgendwie spezifizierst. Das kann man über den Namen machen, über die Classid, über Spectypes...prinzipiell ist da alles möglich, der Einfachheit halber kannst du es ja vorerst nur mit Strings machen.
Code:
var WRZ_staticenemys = ["BloodRaven", "Andariel", "Mephisto", "Diablo", "Baal"];
bin mir nichmehr sicher, aber bei Strings musste man doch "" verwenden ?

Quote:
Originally Posted by Muddy Waters View Post
Jetzt schreibst du eine Funktion, der du jeweils die Unit des aktuellen Ziels übergibst und die daraufhin das Ziel mit den Spezifikationen in deinem Array abgleicht und dann, je nachdem wie dieser Abgleich ausfällt, true oder false zurückliefert.
Ok. da fängts dann an, dass es als nicht Programmierer schwierig wird

Code:
function CompareEnemy(target)
{
if (target = WRZ_staticenemys)
	return "1";
else
	return "0";
}
Quote:
Originally Posted by Muddy Waters View Post
Jetzt erweiterst du einfach das Argument der if-Anweisung um einen Aufruf eben dieser Funktion.
Code:
if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80 && CompareEnemy(target) = "1")
Das wird warscheinlich noch nicht funktionieren, da der Abgleich mit den Namen nicht stimmt. Ich könnte mir vorstellen, dass die Funktion "GetLocaleString()" helfen könnte, aber die find ich grad nich

€dit:
Quote:
Originally Posted by Muddy Waters View Post
Ohne dir zu nahe treten zu wollen: irgendwie gehst du das reichlich unsinnig an.
Für mich war das ganze schlüssig
Nene ich hab ja nicht umsonst geschrieben, dass ich gerne Verbesserungsvorschläge hätte
whoranzone123 is offline  
Old   #4
Administrator
 
elite*gold: 272143
Join Date: Jan 2010
Posts: 22,492
Received Thanks: 12,150
Sieht für den Anfang schonmal gar nicht so schlecht aus.

Deine Funktion passt noch nicht ganz. WRZ_staticenemys ist ja vom Typ Array, target ist ein Objekt vom Typ Unit. Dann verwechselst du noch den Zuweisungsoperator (=) mit dem Vergleichsoperator (==) und weist dem Parameter target in deiner Funktion einfach dein Array zu. Das ist zwar kein Syntaxfehler, aber sinnvoll ist es auch nicht.

Du musst stattdessen dein Array durchlaufen und jedes einzelne Element jeweils mit dem Namen des Ziels abgleichen, das würde dann so aussehen:
Code:
function CheckStaticTarget(target)
{
	for(var i = 0; i < WRZ_staticenemys.length; i++)
	{
		if(typeof WRZ_staticenemys[i] == "string" && WRZ_staticenemys[i].toLowerCase() == target.name.toLowerCase())
			return true;	
	}
	
	return false;
}
Ich habe die Funktion auch mal anders benannt, versuch grundsätzlich selbstsprechend zu benennen, sprich aus dem Namen sollte zumindest im groben hervorgehen, was die Funktion eigentlich macht.

Wie du siehst habe ich auch den Rückgabewert verändert, dieser ist nun ein Objekt vom Typ Boolean.

Dadurch musst du auch bei deiner if-Anweisung keinen Vergleich mehr durchführen, sprich du kannst direkt schreiben:
Code:
if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80 && CheckStaticTarget(target))
Und ja, die Namen müssen passen, wobei durch obige Funktion schon die Groß- und Kleinschreibung ignoriert wird. Wenn du Blood Raven noch ein Leerzeichen spendierst, sollte das funktionieren. Aber ja, mit Local Strings wäre es noch schicker, allerdings bin ich meistens zu faul diese rauszusuchen. Blood Raven müsste die Local String ID 3111 haben.


Muddy Waters is offline  
Thanks
1 User
Old   #5
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
Aha aber das heißt, dass grundsätzlich bei der Variable "target" die Namen der Gegner weitergegeben werden ?

Und du glaubst dass das so funktioniert ?

Ich werds später mal testen

vielen Dank
whoranzone123 is offline  
Old   #6
Administrator
 
elite*gold: 272143
Join Date: Jan 2010
Posts: 22,492
Received Thanks: 12,150
Glauben tut man in der Kirche, aber nicht beim Programmieren - da sollte man nach Möglichkeit wissen, was man tut.

Und ja, das funktioniert so, es sei denn, ich habe mich irgendwo vertippt. target ist ein Objekt vom Typ Unit, welche Eigenschaften dieses hat, kannst du in meiner angefangenen D2NT API Referenz nachschauen. Eine Unit repräsentiert wie der Name schon sagt eine Unit im Spiel, dazu gehören NPCs, Monster, Items, Objekte, Warps und Geschosse.
Muddy Waters is offline  
Old   #7
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
Quote:
Originally Posted by Muddy Waters View Post
Glauben tut man in der Kirche, aber nicht beim Programmieren - da sollte man nach Möglichkeit wissen, was man tut.
I Like !

*** funktioniert wunderbar
Ich editier dann lieber mal den ersten Post. Dann kann das ganze sogar genutzt werden

Nochmal vielen Dank. Unter anderem für die Lehrstunde im Programmieren
whoranzone123 is offline  
Old   #8
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,198
Quote:
Aber ja, mit Local Strings wäre es noch schicker, allerdings bin ich meistens zu faul diese rauszusuchen
machs mal schicker
Code:
(3021)	Andariel
Code:
(3062)	Mephisto
Code:
(3061)	Baal
Code:
(3060)	Diablo
Attached Files
File Type: rar localStrings.rar (145.8 KB, 8 views)
kal_el is offline  
Thanks
2 Users
Old   #9
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
kal_el, hast du sowas auch für Affixe? xD
Wäre da mal für meine Pickit auf der Suche gewesen, aber es war mir dann zuviel Arbeit, alles aus den MPQs herauszusuchen!
TheCrazy11 is offline  
Old   #10
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,198
wirst wohl ned drumrum kommen, ich find da nix ^^


kal_el is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
Baal Leeech bot bleibt nach baal kill im game
hey leute hab en problem mit meinem leechbot, also ich leeche dia&baal und kämpfe auch mit aber nachdem baal gelegt wurde bleibt der bot einfach...
3 Replies - Diablo 2
Light soso baal-cs bot probleme...
LvL 85 hab max vita und str für spirit geskillt Fcr cap is geknackt Skillung 1 wärme 1 tele 1 gewitter
5 Replies - Diablo 2
[ Guide ] Nur Bosse im Diascript / Alles bei Baal
OK! Dann fang ich mal an... ;) das im problemlösungsthread untergehen wird schreib ich mal einfach einen guide dazu Hatte vor kurzem das...
4 Replies - Diablo 2
Die Soso, der Merc und die Baal-Minions
Hallo zusammen, seit einigen Wochen verfolge ich täglich das geschehen hier und habe mein ganzes Wissen übers botten hier glernt. Dafür schon mal...
8 Replies - Diablo 2
S: sorc sequenz für mm.bot mit STATIK
ja , trotz SUFU bin ich nicht fündig geworden. ich suche eine modifizierte light sorc sequence wo bei meppel und andi statik routinen eingebaut...
1 Replies - Diablo 2



All times are GMT +1. The time now is 06:38.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.