Register for your free account! | Forgot your password?

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

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

Advertisement



[D2NT] Zur Syntax der .nip-Dateien

Discussion on [D2NT] Zur Syntax der .nip-Dateien within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2012
Posts: 18
Received Thanks: 10
Arrow [D2NT] Zur Syntax der .nip-Dateien

Habe leider nirgendwo eine Spezifikation der Syntax und der Keywords fuer die .nip-Dateien finden koennen.
So glaube ich, dass hierzu ein Thread sinnvoll waere, in dem entsprechende Fragen abgehandelt werden koennen.

Hier also meine konkreten Fragen zur Syntax:
  • kann man ueberlange Zeilen wrappen, z.B. mit \ am Zeilenende wie in C, um die Datei uebersichtlich zu formatieren?
  • kann man Klammerung unbegrenzt verschachteln?
  • welche Precedence haben die Operatoren? (Das zu wissen, waere schoen, um ueberfluessige Klammerungen zu vermeiden)
  • kann man Makros erstellen/benutzen (z.B. wie bei C), um die .nip-Dateien uebersichtlicher zu gestalten? (Ansonsten wuerde ich halt den C-Preprocessor benutzen.)
  • gibt es vielleicht irgendwo eine vollstaendige Keywortliste? falls nicht:
  • gibt es Keywords fuer genauere Spezifizierung von [ItemAddClassSkills], also z.B. fuer Feuerskills, PB oder PC?
  • gibt es Keywords fuer z.B. self repair / self replenish?

Danke schon mal fuer Eure Hilfe!

Stefan


P.S.:
Habe gestern Muddywaters D2NT heruntergeladen, installiert, konfiguriert und testlaufen lassen mit meiner Blizzard/Meteor-Sorc.
Bin absoluter D2NT-Neuling, und bin begeistert, wie kinderleicht und selbsterklaerend die Konfiguration ist, wenn man der Anleitung von Muddyswater folgt.
Hat alles auf Anhieb funktioniert!
Sehr sauber und uebersichtlich gemacht, ein dickes Lob an Muddywater und alle Contributors!

Aber nun muss ich erstmal die .nip-Dateien nach meinem Geschmack zusammenschreiben, damit der Bot auch das aufsammelt, was ich haben will.
Daher dieser Thread.
Da es sich im weiteren Sinne um Programmierung handelt, hoffe ich, dass dies das richtige Unterforum ist - wenn nicht, bitte verschieben.
worthless1337 is offline  
Thanks
3 Users
Old 01/10/2012, 00:45   #2
 
mirkoregge's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 3,170
Received Thanks: 1,191
Schon mal reingeschaut?

Bei mir sieht dann z.b. die Pickit so aus: (Auszug)
Code:
//=========================================
//==========Natalya's Odium================
//=========================================
[Name] == GrimHelm && [Quality] == Set # [Defense] == 300 && [Dexterity] == 30 && [Strength] == 20 && [FireResist] == 20																	// Natalya's Totem
//[Name] == ScissorsSuwayyah && [Quality] == Set # [IAS] == 40																																// Natalya's Mark
[Name] == LoricatedMail && [Quality] == Set # [Defense] == 721 && [Sockets] == 3																											// Natalya's Shadow
[Name] == MeshBoots && [Quality] == Set # [Defense] == 169 && [ColdResist] == 25 && [LightResist] == 25																						// Natalya's Soul

//===============================================
//==========Tal Rasha's Wrappings================
//===============================================
//[Name] == SwirlingCrystal && [Quality] == Set # [SkillColdMastery] == 2 && [SkillFireMastery] == 2 && [SkillLightningMastery] == 2														// Tal Rasha's Lidless Eye
//[Name] == DeathMask && [Quality] == Set # [MaxHP] == 60 && [MaxMana] == 30																												// Tal Rasha's Horadric Crest
//[Name] == LacqueredPlate && [Quality] == Set # [Defense] >= 833 																															// Tal Rasha's Guardianship
//[Type] == amulet && [Quality] == Set # [SorceressSkills] == 2 && [MaxHP] == 50 && [MaxMana] == 42 																						// Tal Rasha's Adjucation
//[Name] == MeshBelt && [Quality] == Set # [ItemMagicBonus] >= 15 && [MaxMana] == 30																										// Tal Rasha's Fine-Spun Cloth

//============================================
//==========Trang-Oul's Avatar================
//============================================
[Name] == BoneVisage && [Quality] == Set # [Defense] == 257 && [MaxMana] == 150																												// Trang-Oul's Guise
//[Name] == ChaosArmor && [Quality] == Set # [EnhancedDefense] == 150																														// Trang-Oul's Scales
[Name] == CantorTrophy && [Quality] == Set # [FireResist] == 45 && [Defense] == 189																											// Trang-Oul's Wing
[Name] == TrollBelt && [Quality] == Set # [Defense] == 166 && [MaxMana] == 50																												// Trang-Oul's Girth
[Name] == HeavyBracers && [Quality] == Set # [FCR] == 20 && [ColdResist] == 30 && [Defense] >= 74																							// Trang-Oul's Claws
Alle Codes für die Items findest du in der NTItemAlias.ntl
mirkoregge is offline  
Thanks
3 Users
Old 01/10/2012, 01:22   #3
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Eine kleine Übersicht des Aufbaus ist in der NTItemParser.ntl am Anfang:
Code:
/*

[Item-parser Syntax Information]

1. [Keyword] separates into two groups
   - [Property Keywords] : [Type], [Name], [Class], [Quality], [Flag], [Level], [Prefix], [Suffix]
   - [Stat Keywords] : [Number or Alias]

2. [Keyword] must be surrounded by '[' and ']'

3. [Property Keywords] must be placed first

4. Insert '#' symbol between [Property Keywords] and [Stat Keywords]

5. Use '+', '-', '*', '/', '(', ')', '&&', '||', '>', '>=', '<', '<=', '==', '!=' symbols for comparison

6. Use '//' symbol for comment

*/
Muddy hat da noch die [MaxQuantity] hinzugefügt (muss am Anfang der Zeile stehen!):
Code:
[B][MaxQuantity] == 1 && [/B][Name] == RingMail && [Quality] == set // Angelic Mantle
Die vollständige Keywordliste ist, wie mirkoregge schon erwähnt hat, in der NTItemAlias.ntl ersichtlich, wie auch die Qualitätsstufen, Klassen usw.

selfrepair bzw. selfreplenish:
Code:
[ItemReplenishDurability] >= 1
[ItemReplenishQuantity] >= 1
TheCrazy11 is offline  
Thanks
2 Users
Old 01/10/2012, 06:12   #4
 
elite*gold: 0
Join Date: Jan 2012
Posts: 18
Received Thanks: 10
Danke sehr fuer die hilfreichen Antworten und Verweise!
Die Fragen nach Keywordliste und nach dem grundlegenden Aufbau der Beschreibungszeilen sind damit beantwortet.

Das Verzeichnis scripts\libs\common ist wirklich sehr informativ.
Mein Wunsch nach der Moeglichkeit des Line-Wrappings zur uebersichtlichen Formatierung koennte mit einer kleinen Aenderung in ntitemparser.ntl in der Funktion NTIP_OpenFile() umgesetzt werden.
Habe dazu den Code gepostet.

Bleiben fuer mich also nur noch diese Fragen offen:
  • kann man Klammerung unbegrenzt verschachteln?
  • welche Rangfolge haben die Operatoren? (Das zu wissen, waere schoen, um ueberfluessige Klammerungen zu vermeiden)

Werde das posten, so ich das herausbekomme, aber vielleicht weiss ja jemand noch einen Link, der die Antwort schon hat?
worthless1337 is offline  
Old 01/10/2012, 07:35   #5
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
Das Verzeichnis scripts\libs\common\ sollte informativ sein, dort sind alle benötigten Bibliotheken gespeichert!

Ansonsten sehe ich keinen Sinn hinter deinem Wunsch des Line-Wrappings, mir kommt vor, dass dadurch die Nips eher unübersichtlicher werden.

Noch zu deinen Fragen:
  • Klammerung sollte theoretisch unbegrenzt funktionieren.
  • Rangfolge der Operatoren weiß ich nicht genau, ich glaube, dass das && vor dem || beachtet wird, ein Beispiel aus der normal.nip von Muddy:
    Code:
    [Name] == Monarch && [Quality] == normal && [Flag] == ethereal # [Sockets] == 0 && [Defense] >= 220 || [Sockets] == 4 && [Defense] >= 330 // BO Spirit socketable (bugable)
    Muddy könnte dir da sicherlich weiterhelfen, ich habe jetzt auf die Schnelle die Codestelle nicht gefunden, wo das umgesetzt wird!
TheCrazy11 is offline  
Thanks
3 Users
Old 01/10/2012, 12:26   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,624
Die Klammerung funktioniert in der Tat unbegrenzt. Grundsätzlich werden die Zeilen einfach in JavaScript Code übersetzt, genau das macht die ItemParser library. Damit wird aus jeder Zeile in den Nips ein String, der einen Boolschen Ausdruck repräsentiert und welcher dann der eval() Funktion übergeben wird, die den Code daraufhin ausführt.

Aus einer Zeile
Code:
[Name] == Shako && [Quality] == unique && [Flag] != ethereal # [Defense] >= 135 // Harlequin Crest
wird somit folgender Ausdruck:
Code:
item.classid == 422 && item.quality == 7 && !(item.itemflag&0x4000000) // 1 Abschnitt
item.GetStat(31) >= 135 // 2 Abschnitt
Wie durch die Trennung in Abschnitte verdeutlich werden die Ausdrücke vor und nach dem # unabhängig voneinander ausgewertet, das sollte man im Hinblick auf eine sinnvolle Klammersetzung im Hinterkopf behalten.

Es gelten ansonsten die üblichen JavaScript Syntaxregeln, natürlich entspricht auch die Rangfolge der Operatoren derselben wie in JavaScript, also:
Code:
1. 	Rangstufe: 	,
2. 	Rangstufe: 	= += -= <<= >>= &= ^= |=
3. 	Rangstufe: 	?:
4. 	Rangstufe: 	||
5. 	Rangstufe: 	&&
6. 	Rangstufe: 	|
7. 	Rangstufe: 	^
8. 	Rangstufe: 	&
9. 	Rangstufe: 	== === != !=
10. 	Rangstufe: 	< <= > >=
11. 	Rangstufe: 	<< >> >>>
12. 	Rangstufe: 	+ -
13. 	Rangstufe: 	* / %
14. 	Rangstufe: 	! ~ - ++ --
15. 	Rangstufe: 	() [] . (Klammerung und Vektoren)
Muddy Waters is offline  
Thanks
4 Users
Old 01/10/2012, 17:05   #7
 
elite*gold: 0
Join Date: Jan 2012
Posts: 18
Received Thanks: 10
Quote:
Originally Posted by TheCrazy11 View Post
Ansonsten sehe ich keinen Sinn hinter deinem Wunsch des Line-Wrappings, mir kommt vor, dass dadurch die Nips eher unübersichtlicher werden.
Kommt wohl drauf an, was man gewohnt ist.
Fuer mich sind lange Zeilen, die ungebrochen ueber mehrere Bildschirmzeilen gehen, unuebersichtlich, geschweige denn von Zeilen, fuer die man den Horizontal-Scrollbar bemuehen muss.
Hauptsache fuer mich ist, dass das Line-Wrapping, so wie ich es fuer mich umgesetzt habe, meinen Vorstellungen entgegenkommt und mir das Zusammenschreiben leichter macht. Ob es Anderen auch gefaellt, ist eine ganz andere Sache. Muss ja keiner benutzen.

Quote:
Originally Posted by TheCrazy11 View Post
Muddy könnte dir da sicherlich weiterhelfen, ich habe jetzt auf die Schnelle die Codestelle nicht gefunden, wo das umgesetzt wird!
In der Tat, es ist genaugenommen pure Faulheit. Ich koennte mir natuerlich auch den ganzen Code durchsehen (was ich auch tun werde, wenn ich mal mehr Zeit habe).

Quote:
Originally Posted by Muddy Waters View Post
Die Klammerung funktioniert in der Tat unbegrenzt. Grundsätzlich werden die Zeilen einfach in JavaScript Code übersetzt, genau das macht die ItemParser library. Damit wird aus jeder Zeile in den Nips ein String, der einen Boolschen Ausdruck repräsentiert und welcher dann der eval() Funktion übergeben wird, die den Code daraufhin ausführt.

Aus einer Zeile [...] wird somit folgender Ausdruck: [...]
Sehr anschauliche Darstellung, die mit ein paar Worten kurz erklaert, was man sonst in laengerem Codelesen selbst herausklamuesern muesste. eval() ist wirklich eine schoene Sache, gefaellt mir (Muss gestehen, dass ich ein absoluter Javascript-Nub bin).

Nun weiss ich alles Notwendige, um meine Pickit-Dateien schoen sauber und detailliert auszuarbeiten.

Danke Euch sehr fuer die Hilfe!
worthless1337 is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Muddy's D2NT mit 1.13d D2NT.dll + Neuer D2NT Etal
01/06/2012 - Diablo 2 - 474 Replies
Damit hier mal langsam Ruhe einkehrt lade ich jetzt den Muddy's D"NT mit der D2NT.dll für 1.13d hoch. Die Grundlage ist die Rev3 vom Bot. Hier ist ganz klar zu sagen, dass der Dank für den Bot an Muddy_Waters geht Das hier ist kein Fragethread. Ich habe selber keine Ahnung wie mögliche Bugs, die von der neuen dll kommen gefixt werden können. Wenn ihr Bugs entdeckt und diese fixxen könnt dürft ihr gerne das ganze posten. So kann man schnell für Probleme Lösungen finden. Bei anderen...
[HELP] C# WPF syntax
12/23/2010 - CO2 Programming - 14 Replies
Does anyone knows how to convert or what's the right syntax on this C# form application syntax? webBrowser1.Document.GetElementById("name&quo t;).SetAttribute("value", textBox2.Text); webBrowser1.Document.GetElementById("message& quot;).SetAttribute("value", textBox1.Text); webBrowser1.Document.GetElementById("sumbit&q uot;).InvokeMember("click"); i'm having error on "GetElementById" :S just confused.



All times are GMT +2. The time now is 23:01.


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.