[Workshop] XVM-Mod

DarkMo

Lötkolbengott/-göttin
eXtended Visualisation Mod



In diesem Thread will ich versuchen, ein wenig Licht in die Konfiguration dieser "kleinen" Mod zu bringen. Zu aller erst ein paar allgemeine Informationen:
- Webseite: www.modxvm.com
- Stand: 12.02.2014 - XVM Version 5.1.0

Beim Download-Link gibt es auch ein monatlich aktualisiertes downloadbares Archiv mit Clan-Icons - falls man diese in seiner Config verwendet.


Inhalt


Was ist bzw. macht XVM eigentlich und wie "installiere" ich es?
Anfangs war es eher die Fortsetzung der beliebten OTM-Mod. OTM steht hierbei für Over Target Markers - also die Markierungen/Anzeigen oberhalb der Ziele/Panzer. Auf deutsch: Eine Modifizierung der Lebensbalken mit zusätzlichem Schnick Schnack. Mittlerweile wächst XVM aber immer weiter zu einer Art Mod-Sammlung heran. So werden Ideen anderer Projekte aufgenommen und in XVM integriert - zuletzt zum Beispiel eine modifizierbare Minimap wie sie Locastan entwickelt hatte. Oder aber auch Modifikationen der Kampfberichte nach der Schlacht. Vorteil: Man hat alles unter einem Hut und zudem ist es meist deutlich besser (bzw. überhaupt) konfigurierbar. Aber soviel konfigurierbarer Content schafft eben auch ein langes Config-File und nicht jeder mag sich hier ranwagen. Meine Motivation ist es also, diesen Schritt zu erleichtern.

Zwischenzeitlich wurde die Mod noch getrennt. Der ursprüngliche Part beinhaltet ja diese ganze Statistik Geschichte. Man startete WoT nicht mehr direkt, sondern über eine "Drittanbieter" (eben XVM) Executable (.exe) russischer Machart - auch für mich ein schwerer Schritt ^^ Warscheinlich haben sie es deswegen auch getrennt, weil das nicht jeder mochte, die Grundzüge der Mod aber dennoch toll fand (so wie ich - mein Einstieg erfolgte, als es eine abgespeckte Light-Version ohne stats.exe gab). Mittlerweile ist sie allerdings wieder zusammengeführt worden - jedoch OHNE eine extra .exe. Dies geschieht nun "ingame" durch WoT-Scripte. Es wird also weder die xvm-stat.exe benötigt, noch die damit verbundene Installation von Dokans Library vorrausgesetzt (damit fällt auch die .NET 3.5 Vorraussetzung flach). Wer also nun XVM installieren möchte, der lädt sich die xvm-<version>.zip herunter und entpackt sie einfach nach "res_mods\". Die "Kommando"-Dateien (Konfiguration, Dokumentation, Bildchen...) befinden sich dann im "res_mods\xvm"-Ordner und die ganzen geänderten Spiel-Dateien in "...gui\flash" oder "...\gui\scaleform" des entsprechenden Versions-Ordners. Aber wie gesagt, einfach entpacken reicht an und für sich.

top


Aller Anfang ist schwer
Oder vielleicht auch nicht. Ein Config-File wird nicht explizit mitgeliefert, man muss sich also erstmal eines anlegen. Fehlt ein Config-File oder ist dieses fehlerhaft, wird einfach von Default-Werten ausgegangen. "Die" Config wurde mittlerweile in mehrere Dateien aufgeteilt und der "Einstiegspunkt" befindet sich in "res_mods\xvm\configs". Es handelt sich um die "xvm.xc.sample". Am besten kopiert ihr sie und fügt sie gleich wieder ein. Dann umbennen in "xvm.xc" und ihr habts schon fast geschafft. Im selben Ordner findet und kopiert ihr dann den "default"-Ordner und fügt ihn ebenfalls gleich wieder ein. Benennt ihn um und verpasst ihm einen Namen eurer Wahl - "myConfig" zum Beispiel. Oder einfach in euren Nick eventuell, um der Welt zu zeigen - das ist MEINE ^^ Auf jedenfall solltet ihr euch den gewählten Ordner-Namen merken. Weiter gehts, indem wir unsere kopierte und umbenannte "xvm.xc" öffnen. Ich nutze hier das kostenlose Notepad++, da hier der Zeichensatz ganz automatisch beim Speichern beachtet wird. Passiert dies nicht, und man speichert ein UTF-8 Dokument als ANSI oder so ab, kann es dazu komen, dass Sonderzeichen (Umlaute usw.) als sonstwas dargestellt werden - nur nicht mehr als das, was man sich gewünscht hat. Gut, wir sehen ein recht überschaubares Text-File und uns intressiert an sich nur die letzte Zeile:

${"default/@xvm.xc":"."}

Wie ihr seht, wird hier ein Pfad zu einer Datei angegeben. Diesen ändern wir nun einfach so ab, dass er auf "unsere" Config zeigt, die wir eben angelegt haben (ich sagte ja, ihr sollt euch den Ordner-Namen merken ^^). Wir ändern das also ab in

${"<euer gemerkter Ordner-Name>/@xvm.xc":"."}

(bei mir also ${"DarkMo/@xvm.xc":"."} als Bsp.) und sind mit der "Einrichtung" fertig. Wir haben nun also unsere eigene Kopie einer Konfiguration. Um diese anzupassen, sollten wir also überwechseln in den Ordner "res_mods\xvm\configs\<euer Ordner>". Für den weiteren Verlauf empfehle ich, die "macros.txt" aus dem "res_mods\xvm\doc" Ornder zu öffnen und in der Hinterhand zu haben, da sie die nutzbaren Makros auflistet. Damit hat man also schon die ganzen Grundlagen geschaffen! Die eigene Config ist geboren *muharhar* Gut, ist noch kein Unterschied zu vorher, weil wir haben ja noch nichts verändert ^^ Also, fangen wir an. Dazu öffnen wir also nun die "@xvm.xc", die wir eben ja als "Verweis" in dem anderen File da angegeben hatten (wir sollten gerade hier sein: "res_mods\xvm\configs\<euer Ordner>")...

top


Grundlagen
Wie in vielen Programmiersprachen, verwendet auch dieses File die Kommantar-"Funktionen" // und /* */. // leitet einen einzeiligen Kommentar ein - Alles vor // wird ausgewertet, alles dahinter bis zum Zeilenende ignoriert. /* */ bietet die Möglichkeit Zeilenübergreifender Kommentare - Kommantarblöcke. Alles, was zwischen /* und */ steht, wird ignoriert, auch über Zeilenumbrüche hinweg. Der Rest ist dann im Großen und Ganzen in Blöcke und "Variablen" unterteilt. Ein Block besteht aus einer einleitenden { und einer abschließenden } geschwungenen Klammer. Mehrere aufeinanderfolgende Blöcke der selben "Ebene" werden per Komma getrennt. Ein Block (Sub/Kind-Block) innerhalb eines anderen Blocks (Parent/Eltern-Block) teilt sich nicht die selbe Ebene wie der umschließende Block. Klingt erstma kompliziert, isses aber ned ^^ Einrückungen zeigen das auch so ein bischen an. Hier mal ein kleines Bsp:
Code:
"Block1": {
   "Block2": {
   },
   "Block3": {
   }
 }
Block1 ist also die Ebene 1 meinetwegen und Block2 und 3 sind innerhalb dieses ersten Blocks - sie sind damit nicht Teil der Ebene 1 sondern haben ihre eigene. Einfach mal Ebene 2 genannt :P Da diese beiden aber sehr wohl auf der selben Ebene sind, müssen sie mittels Komma getrennt werden. Das is wichtig, falls ihr später mal bei einem Update irgendwelche neuen Teile reinkopiert. Fehlt dann plötzlich ein Komma, erzeugt das ganze Ding nen Fehler (wird dann beim Lade-Screen anstelle der Tipps angezeigt) und die Default-Config wird geladen. Hier im Beispiel sieht man schon den generellen Aufbau: In Gänsefüßchen die Bezeichnung, dann ein Doppelpunkt und danach entweder ein Wert oder ein Block. Sofern das dann nicht der letzte Teil des Blocks ist, muss - wie ja schon erwähnt - ein Komma folgen.
Code:
"Bezeichnung": <value> oder Block[,]
Zudem gibt es auch "Mengen". Ist im Endeffeckt das selbe wie ein Block, nur mit [] Klammern. Naja, ganz das Selbe eben nicht - zwischen diesen eckigen Klammern kann man Blöcke zusammenfassen. Ohne die eckigen Klammern würde jeder Block für sich stehen (im Bsp. von eben sind Block2 und 3 eigenständige Blöcke), so gelten alle zwischen diesen Klammern als zusammengehörig unter einem Punkt:
Code:
"Block1": {
  "Array": [
    {
      "name": "Block2";
      ...
    },
    {
      "name": "Block3";
      ...
    }
  ]
}
Die Blöcke sind nun unter "Array" zusammengefasst worden.

Neu seit Version 4 sind "Referenzen". Wir haben sie schon kennengelernt. Ihr erinnert euch bestimmt noch an die Zeile "${"configs/@Default/@xvm.xc":"."}". Das war schon so eine Referenz, oder "Verlinkung, wie ich es eingangs nannte. Eine großartige Sache und der Grund, dass man die Config nun beliebig aufsplitten kann. Was ist so toll daran, statt einer Datei nun nen ganzen Haufen rumfliegen zu haben? Nun, einmal kann man so den gesuchten Code-Abschnitt viel einfacher finden - einfach die Datei öffnen statt ewig in dem laaaangen alten Config-File zu suchen, wo alles untereinander in einer Datei stand. Zum anderen kann man auch innerhalb einer Datei einen speziellen Block "adressieren"/referenzieren. Somit wird Kapselung (also im Groben) möglich! Das ist ein Konzept aus der objekt orientierten Programmierung (oder kurz OOP) und bringt uns für unsere Config den Vorteil, dass wir "wiederverwendeten Code" "auslagern" können. Aaaalso zum Beispiel haben wir eine Schriftformatierung oder Schattenformatierung mit Farben und sonstewas für Parametern. Nun legen wir uns irgendwo ein paar Blöcke an mit verschiedenen "Designs" und referenzieren diese nur noch überall. Will man am Design irgendwas ändern, braucht man nur einmalig diese selbst erstellten Blöcke anpassen, und muss ned durch den ganzen Code rammeln. Will man für ein Element ein anderes Design, ändert man nur kurz den referenzierten Block und fertig. Es gibt verschiedene Arten bzw Schreibweisen, die ich im Folgenden einmal aufführen möchte:
Code:
Variante 1:
${ <relativer Pfad + Datei>:<Block-Zugriffspfad> }
Beispiel: ${ "configs/@Default/@xvm.xc":"." }

Variante 2:
"$ref": { "path": <Block-Zugriffspfad> }
Beispiel: "$ref": { "path": "damageText" }

Variante 3:
"$ref": { "file": <relativer Pfad + Datei>, "path": <Block-Zugriffspfad> }
Beispiel: "$ref": { "file": "hangar.xc", "path": "hangar.pingServers" }
Allgemeines:
  • "Realtiver Pfad" bedeuted, dass vom "Standort" (innerhalb der Ordnerhierarchie/Struktur) der aufrufenden Datei ausgegangen wird (Relation "ausf. Datei <=> Standort"). Ein absoluter Pfad wäre davon unabhängig und bezieht sich immer auf ein "Root"/Wurzel-Verzeichnis - also C: oder D: oder so. Da aber nicht jeder seinen Kram an die selbe Position installiert, können absolute demnach nicht immer korrekt sein. Daher verwendet man relative Pfade, da sich diese quasi "dynamisch" "bewegen" ^^ Befindet sich die Zieldatei also im selben Ordner wie die aufrufende Datei (die, wo wir das reinkritzeln), dann steht nur noch der Dateiname dort. Will man in einen Unterordner des "eigenen" Ordners (wie gesagt, die Relation ist die "ausführende Datei"), dann gibt man einfach dessen Namen an gefolgt von der Datei. Also meinetwegen "SubFolder/myConfig.xc". Möchte man in den "Parent/Super"-Folder (also eine Eben höher), so erreicht man dies mittels "../". Beides lässt sich kombinieren: "../ParentSubFolder". Man verlässt also den eigenen Ordner zum übergeordneten (Parent/Super) und wechselt von dort in einen Unter-Ordner dieses Parent-Ordners. Sinnvollerweise sollte das natürlich ein anderer sein wie der, in dem man selber steckt (man steckt ja natürlich selber in einem Subordner des Parentordners).
  • Mit einem "Zugriffspfad" ist ein verschachtelter Aufruf von Unter-Punkten (oder wie man es nennen mag) gemeint. In dieser Config herrschen ja die Blockstrukturen vor, also könnte man wohl Unter-Blöcke sagen. Die einfachste Form wäre einfach ein Block "BlockName" -> Zugriff erfolgt also mit... "BlockName" ^^ Blöcke können nun aber ja wiederrum Blöcke beinhalten (haben wir ja auch in diesem Abschnitt erst gelernt *Lehrerblick aufsetz*) und der Zugriff auf jene Unterblöcke erfolgt über einen ".". Da diese "Navigation" mittels Punkten durch die Block-Ebenen einem Pfad gleicht (da sind es halt Slashes statt Punkten), nennt man dies einen Zugriffspfad. "BlockName" enthält nun also zum Bsp einen Block "SubBlock" und dieser wiederrum einen "SchlussJetzt" Block. Der Zugriffspfad sähe also wie folgt aus: "BlockName.SubBlock.SchlussJetzt".

Varianten:

  • Variante 1 kennen wir ja nun schon zur Genüge. Hier nun also die Struktur dahinter: Es wird eine Pfadangabe verlangt, die schlussendlich den Dateinamen samt Endung beinhaltet sowie ein Block-Zugriffspfad getrennt per Doppelpunkt.
  • Variante 2 ist neu. Es wird ein Block mit dem (wohl reservierten) Namen $ref (wie Referenz) erstellt mit dem einzigen Parameter "path". Der Wert dieses Parameters ist der Block-Zugriffspfad.
  • Variante 3 erweitert Variante 2 um den Parameter "file", welcher als Wert nun wieder den relativen Pfad annimt und somit quasi zu einer equivalenten Schreibweise von Variante 1 wird.
Gut, ich denk das sollte reichen mit der grauen Theorie. Wollen wir endlich anfangen...

top


Makros und deren Formatierung
Leider leider nun doch noch etwas mehr Theorie, denn mit der XVM-Version für WoT-Patch 0.9.0 wurden die Makros formatierbar gemacht. Dafür fielen dann Konstruckte ala {{rating:3}} weg. Ersteinmal grundsätzlich: Was ist eigentlich ein Makro? Es ist schlicht ein Platzhalter, der später durch konkrete Werte ersetzt wird -> dies nennt man auch gerne Substitution. Heisst ja nu auch nix andres wie 'ersetzen' ^^ aber will man schlau wirken, muss man mit solchen Fremdwörtern um sich werfen! Ok, wir waren glaube bei Makros... ^^

Nehmen wir als Beispiel das schon genannte rating-Makro. Um ein Makro erkennbar zu machen für XVM, wird es in doppelte geschwungene Klammern gefasst: Besagtes rating-Makro (rating wäre hier dann der Makro-Name) muss dann also so geschrieben werden -> {{rating}}. Das rating find ich ein etwas unglückliches Makro, da man mittlerweile unter rating eher sowas wie Effiziens oder WNx versteht. Dieses Makro bezieht sich allerdings auf die globale Siegrate (Winrate). Nutzen wir dieses Makro nun beispielsweise im Playerspanel, indem wir etwas wie "Die Siegrate beträgt {{rating}}" schreiben, dann wird für jeden Spieler im Team genau diese Zeile ausgewertet und hingeschrieben. Allerdings wird dann eben {{rating}} durch die jeweilige Siegrate des Spielers (dessen PlayersPanel-Zeile gerade gemalt wird) substituiert *schlau wirk*. Das schaut für Olek dann vllt so aus: "Die Siegrate beträgt 55" - für KillerPlautze aber dann schon wieder so: "Die Siegrate beträgt 43". Ihr seht - selbe Zeile, unterschiedlicher output. im Ordner "res_mods\xv\doc" gibts die macros.txt in der alle verfügbaren Makros aufgeführt sind. Hinter dem Makro sind verschiedene Spalten und ab und an ein X darin. Über der Tabelle steht, welche Spalte für welchen Config-Bereich steht und das X markiert nun eben die Bereiche, in denen man das Makro nutzen und einsetzen kann. Am Schluss steht noch eine kurze Beschreibung des Makros.

So, nun haben wir also ein Makro gemalt, aber irgendwie ist das Ergebnis doof... "Die Siegrate beträgt 55" - ja was? Bratwürste? Eine Lösung wäre es, unsere Config-Zeile abzuändern: "Die Siegrate beträgt {{rating}}%" <- ein ProzentZeichen anfügen. Schon sieht das Ganze wie folgt aus: "Die Siegrate beträgt 55%" - toll! Es gibt aber auch andere Makros, die unterschiedlich lang sein können - allen vorran die WN-Makros. "Der hat ne WN8 von {{wn8}}" als Beispiel. Da haste nun eine Tomate mit 134 und nen unicum mit 2876. Die eine Zahl ist 3 Zeichen lang, die nächste 4. Macht allein für sich noch kein Problem, aber das Playerspanel ist hier wieder ein gutes Beispiel: Wenn die dann untereinander stehen, siehst so aus:
Code:
Der hat ne WN8 von 134
Der hat ne WN8 von 2876
Wäre schön, wenn die beiden Werte rechtsbündig untereinander stehen würden. Also das beide beim selben Abstand enden. Das hier geht prinzipiell auch noch, aber nun stellt euch vor, ihr habt da mehrere Werte. erst die WN8, dann die Gefechtszahl... dann ist das irgendwann alles wild durcheinander und nix steht mehr untereinander. Das ist doof, da das Auge sich davon verwirren lässt und man viel länger braucht, um die Information aufzunehmen. Und das is blöde ^^ Sowas muss schnell gehen. Kurzer Seitenblick - aha. Daher ist es gut, wenn man das irgendwie formatiert bekäme. Einerseits gabs genau dafür früher diese geschichten wie {{rating:3}} - also mit diesen :-Zusatz der besagt, dass hier 3 Zeichen für das Makro reserviert werden. Allerdings artet sowas auch schnell aus. Dann hat man für ein Makro plötzlich drei Versionen oder so.

Daher kam nun eben diese Makro-Formatierungs-Neuerung, wie Eingangs erwähnt. Das Ganze präsentierte sich im Changelog wie folgt:
Code:
XVM-5.3.0:
  [MAJOR UPDATES]
  * new macros formatting (see readme-en.txt)
      {{name[%[flag][width][.prec]type][~suf][|def]}}
      name  - macro name
      flag  - "-" for left align, else right align
              "0" for filling with leading zeros
      width - minimum width
      prec  - maximum width for lines or number of digits after comma for numbers
      type  - type (s - string, d - decimal, f - float, ...)
      suf   - suffix added at the end
      def   - default value, set when value is absent:
    Details: http://en.wikipedia.org/wiki/Printf
    For example:
      {{name%-16.16s}}      - cut names longer 10 chars, and fill names shorter 10 chars and align left
      {{kb%4.01f~k|----}}   - width 4 chars, exactly 1 char after comma, align right
                              if kb==null, display "----"
Wad will uns der Author nun damit sagen? Hier wird uns gezeigt, aus was so ein Makro maximal alles bestehen kann: {{name[%[flag][width][.prec]type][~suf][|def]}}. Wir erkennen schoneinmal bekannte Elemente: {{name[%[flag][width][.prec]type][~suf][|def]}}. Die doppelten Geschwungenen Klammern sowie den Makro-Namen. Danach folgen viele Sachen in eckigen Klammern. Diese eckigen Klammern bedeuten, dass dies optional angefügt werden kann. Es können optional (wenn man ganz genau hinschaut) also drei Dinge angehängt werden: {{name[%[flag][width][.prec]type][~suf][|def]}}. Rot unterstrichen habe ich mal etwas markiert, was allen gleich ist: Ein Zeichen, mit dem sie eingeleitet werden. Daran kann dann XVM erkennen, um welches der drei Optionalen Parameter es sich handelt. Ist es ein ~, so handelt es sich um den Suffix. Ein Suffix ist ein Anhängsel könnte man sagen. Ein solches Anhängsel haben wir eben schon im rating-Makro vermisst: %. Wir haben das erstmal stur einfach mit in den String da gepackt, aber nun können wir es direkt im Makro mit aufnehmen: "Die Siegrate beträgt {{rating~%}}"! Schon wird automatisch das Prozentzeichen mit ausgegeben. Wieso macht das hier mehr Sinn? Nunja, es muss nicht zwingend mehr Sinn ergeben, aber falls man nicht möchte, das im Fehlerfalle (Die Stats konnten nicht geladen werden) das Prozentzeichen mit ausgegeben wird, so ist das bei der Makro-Formatierung gegeben. da wird dann einfach -- ausgegeben zum Bsp. Was hier genau ausgegeben wird, kann man mit def bestimmen. Wird eingeleitet mit | und gibt einen Default - Standard-Wert an. Eben, falls er den Wert nicht laden konnte, dann wird dieser def-Wert ausgegeben: "Die Siegrate beträgt {{rating~%|--}}" -> nun wird einfach -- ausgegeben. Man könnte auch WR da hinschreiben, so dass man weis, was das fürn Wert gewesen wäre oder so. Was man auch beachten sollte: Die Anzahl der Zeichen des Default-Werts. Überall steht eine zweistellige Zahl und das Prozentzeichen - macht also drei stellen. Nur beim Neueinsteiger Franz gibt es noch garkeine Werte, und hier steht ein zweistelliges --. Zerhaut uns dann doch wieder die Formatierung ^^

Gur, kommen wir zum dritten Teil, der eigentlich zuerst kommt (achja: ihr müsst die Reichenfolge beachten. ein |x.X~bla geht zum Bsp nicht ^^): [%[flag][width][.prec]type]. Dieser type-Teil wird eingeleitet durch ein %-Zeichen. Nutzt man das im rating-Makro, sieht das immer recht verwirrend aus, da dann plötzlich zwei %-Zechen da drin rumgammeln ^^ Jedenfalls gibt der Type an, von welchem Typ das Makro ist: Ein s wie String (eine Zeichenkette -> Wort...), ein d wie Ganzzahl (natürliche Zahl)... äh, ja steht eigentlich für decimal ^^ oder ein f für float, was Komma-Zahl, oder (um bei den schlauen Fremdwörtern zu bleiben) eben eine Reelle Zahl bedeuted. Die Siegrate ist zumindest schonmal eine Zahl. Man kann sie als Ganzzahl ausgeben, oder als relle Zahl, funktioniert beides. Gibt man sie als reelle Zahl an, dann tritt die nächste Besonderheit in Aktion: In diesem optionalen Dingen gibt es wiederrum drei optionale Parameter, die eingefügt werden können. Diesmal wird aber nur der letzte explizit durch ein Zeichen eingeleitet: den Punkt. flag ist schlicht und ergreifend ein - oder eine 0. Entweder man nutzt eine Variante, oder man lässt es. Nutzt man den -, so wird die Formatierung linksbündig angewendet. Also bei einer 4-Stellen-Formatierung und einer 3-Stellen Zahl, sähe es dann nicht so aus (_ anstelle eines Leerzeichens): _123, sondern so: 123_. Kann man beim PlayersPanel zum Bsp für das Gegner-Team benutzen, damit die Ausgabe am Ende wie gespiegelt wirkt. Nutzt man hingegen die 0, so wird vorne mit 0-en aufgefüllt. Also statt 123 wird 0123 ausgegeben. Oder statt 34 dann eben 0034. Da wir gerade schon von einer "4-Stellen-Formatierung" sprachen: Dazu ist width gedacht. Schreibt man hier eine 4, so werden 4 Zeichen für die Ausgabe reserviert. Das funktioniert auch bei Strings (dem Spielernamen zum Bsp) - hier legt es die minimale Länge des Strings fest. Und schlussendlich folgt noch der precision-Parameter, eingeleitet mit dem Punkt. Bei rellen Zahlen begrenzt man hier die Nachkommastellen, bei Strings gibt es die maximale Länge an. Wollen wir unser Rating also auf eine Stelle hinter dem Komma genau anzeigen lassen, müsste das finale Makro als so aussehen: {{rating%4.1f~%|error}}. Wenn ich jetzt nich völlig daneben liege, wird das Komma mit in die Zeichenanzahl reingerechnet. Wir haben also die 2-Stellige Siegrate (100% wird wohl keiner auf Dauer packen :P), den Punkt (dritte Stelle) und die eine Nachkommastelle -> macht 4 Stellen, die wir reservieren müssen. Hintendran kommt das %-Zeichen und im Fehlerfalle gibt er das 5-Stellige error aus.

Gut, ich hoffe, dass ich das einigermaßen rüberbringen konnte. Und nun viel Spaß mit der eigentlichen Praxis :)

top


@xvm.xc
Hier sind wir also nun in der zuerst referenzierten Datei, welche im Groben auch wieder nur ein Vermittler ist. Zu Beginn werden ein paar allgemeine Informationen aufgeführt und danach der "Kern" von XVM verlinkt. Also alle benötigten Dateien referenziert. Das Ganze sieht wie folgt aus:[/SIZE]
Code:
/**
 * Main configuration file (hereinafter - the configuration).
 *
 * Attention! Use \n as newline character instead of <br> tag
 */
{
  // Version of the config. Do not remove or change it unnecessarily.
  "configVersion": "5.1.0",

  // Version of the editor.
  "editorVersion": "0.80",

  // Language used in mod
  // "auto" - automatically detect language from game client,
  // or specify file name located in res_mods/xvm/l10n/ (ex: "en")
  "language": "auto",

  // Game Region
  // "auto" - automatically detect game region from game client,
  // or specify one of: "RU", "EU", "NA", "SG", "VTC", "KR"
  "region": "auto",

  // Common config options. All settings information in the mod not being used.
  "definition": {
    // Config author.
    "author": "XVM team",

    // Config description.
    "description": "Default settings for XVM",

    // Address to config updates.
    "url": "http://www.modxvm.com/",

    // Config last modified.
    "date": "12.05.2014",

    // Supported version of the game.
    "gameVersion": "0.9.0",

    // The minimum required version of the XVM mod.
    "modMinVersion": "5.3.0"
  },

  // Parameters for login screen.
  "login": ${"login.xc":"login"},

  // Parameters for hangar.
  "hangar": ${"hangar.xc":"hangar"},

  // Parameters for userinfo window.
  "userInfo": ${"userInfo.xc":"userInfo"},

  // General parameters for the battle interface.
  "battle": ${"battle.xc":"battle"},

  // Frag counter panel.
  "fragCorrelation": ${"battle.xc":"fragCorrelation"},

  // Ingame crits panel by "expert" skill.
  "expertPanel": ${"battle.xc":"expertPanel"},

  // Options for player statistics.
  "rating": ${"rating.xc":"rating"},

  // Special XVM hotkeys.
  "hotkeys": ${"hotkeys.xc":"hotkeys"},

  // Parameters for squad window.
  "squad": ${"squad.xc":"squad"},

  // Parameters of the Battle Loading screen.
  "battleLoading": ${"battleLoading.xc":"battleLoading"},

  // Parameters of the Battle Statistics form.
  "statisticForm": ${"statisticForm.xc":"statisticForm"},

  // Parameters of the Players Panels ("ears").
  "playersPanel": ${"playersPanel.xc":"playersPanel"},

  // Parameters of the After Battle Screen.
  "battleResults": ${"battleResults.xc":"battleResults"},

  // {{turret}} marker display strings.
  "turretMarkers": ${"turretMarkers.xc":"turretMarkers"},

  // Hit log (my hits calculator).
  "hitLog": ${"hitLog.xc":"hitLog"},

  // Capture bar.
  "captureBar": ${"captureBar.xc":"captureBar"},

  // Minimap.
  "minimap": ${"minimap.xc":"minimap"},

  // Over-target markers.
  "markers": ${"markers.xc":"markers"},

  // Color settings.
  "colors": ${"colors.xc":"colors"},

  // Options for dynamic transparency.
  "alpha": ${"alpha.xc":"alpha"},

  // Text substitutions.
  "texts": ${"texts.xc":"texts"},

  // Icon sets.
  "iconset": ${"iconset.xc":"iconset"},

  // Vehicle names mapping.
  "vehicleNames": ${"vehicleNames.xc":"vehicleNames"}
}
Im Grunde ist nur der Teil bis zum ersten Block interessant (und selbst hier muss man kaum etwas anpassen), danach folgen nur noch die Referenzen. Die ersten beiden Werte übernehme ich immer vom aktuellen Default-File. Sprich, wenn ich eine neue XVM-Version ziehe, dann schau ich mir die entsprechenden Default-Files an um Unterschiede/Änderungen zu finden. Stehen hier dann andere Werte, übernehm ich die einfach. language lässt einen explizit festlegen, welche Lokalisierungs-Datei gewählt werden soll, um die Übersetzung zu realisieren. Für eine statisch/feste deutsche Übersetzung als Bsp, müsste hier "de" stehen. Soll die Config allerdings "multilingual" (mehrsprachig) sein, belässt man den Wert auf auto. region kann man getrost auf auto lassen. Der definition-Block enthält dann noch ein paar Angaben zum Author usw. Das pass ich halt an mich an. gameVersion und modMinVersion übernehm ich wieder. Ja, viel is hier nich zu tun ^^

top


battle.xc[/SIZE]
Code:
/**
 * General parameters for the battle interface.
 */
{
  "battle": {
    // false - Disable tank icon mirroring (good for alternative icons).
    "mirroredVehicleIcons": true,
    // false - Disable pop-up panel at the bottom after death.
    "showPostmortemTips": true,
    // false - disable highlighting of own vehicle icon and squad.
    "highlightVehicleIcon": true,
    // true - enable {{hp*}} macros ability in players panels and minimap. WARNING: performance expensive
    "allowHpInPanelsAndMinimap": false,
    // Format of clock on the Debug Panel (near FPS).
    "clockFormat": "H:N", // TODO: "H:i"
    // Path to clan icons folder relative to res_mods/xvm/res.
    "clanIconsFolder": "clanicons/",
    // GUI elements settings (experts only)
    "elements": ${"elements.xc":"elements"}
  },
  // Frag counter panel at top side of battle windows interface.
  "fragCorrelation": {
    // true - hide textfields "Allies | Enemies".
    "hideTeamTextFields": true
  },
  // Ingame crits panel by "expert" skill.
  "expertPanel": {
    // Delay for panel disappear. Original value was 5.
    "delay": 15,
    // Panel scaling. Original value was 100.
    "scale": 150
  }
}

  • mirroredVehicleIcons gibt an, ob die Contour-Icons (das sind diese kleinen Panzerbildchen neben den Spielernamen in den Teamlisten) gespiegelt werden sollen oder nicht. Bei den Standard-Bildchen von WoT kennt mans ja, dass auf der einen Seite die Panzer aufm Bild nach links schauen und auf der anderen nach rechts - sie sind also gespiegelt. Hat man nun einen Contour-Icon Mod laufen, wo im Bildchen auch Zahlen oder Schrift zu finden ist, dann fetzt das nich so ganz bei den gespiegelten Bildchen ^^ Daher kann man das hier auch ausschalten. Aber vorsicht! Diese Contour Mods enthalten dann meist auch die battle.swf Datei - eben um das Gespiegel abzustellen. Diese dürft ihr dann NICHT verwenden. Die ist quasi nur nützlich für all jene, die kein XVM haben (oder andere Mods, die das eventuell auch mit beeinflussen).
  • showPostmortemTips de/aktiviert diese Hinweise nachm Tod mit der Kamera. Hab ich glaub schon ewig aus, kenns jetz jedenfalls garnich mehr so recht ><
  • highlightVehicleIcon beeinflusst die farbige Hervorhebung im Players-Panel (den Teamlisten links und rechts) vom gerade betrachteten Panzer - also meistens eurer. Wenn ihr mal ausversehen aus strategisch und taktisch schlauen Gründen... äh, also falls ihr mal tot sein solltet und durch die noch Lebenden durchschaltet, um denen bissl zuzuschauen, dann wird eben deren Panzerchen/Zeile hervorgehoben.
  • allowHpInPanelsAndMinimap lässt euch die HP-Makros ({{hp}}, {{hp-ratio}}, {{hp-max}} sowie deren Farb- und Transparenz-Makros) für schon erwähntes Players-Panel freischalten. Somit könntet ihr dort neben dem Spielernamen schriftlich oder gar grafisch den Zustand der Spielerpanzer darstellen lassen. Aber vorsicht! Das ist leider etwas Ressourcenfressend - kann also durchaus zu Rucklern führen.
  • clockFormat bestimmt die Anzeige der Zeit. Im Kommentar darüber steht an sich das wichtigste. Einfach 2 (leere) Gänsefüßchen und man hat keine Uhr. Die wird oben neben den Debug-Infos angezeigt (Ping, FPS...). Manche Mods bauen da selber auch ne Uhr hin und dann hat man so leicht versetzt zwei übereinander im dümmsten Fall. Das sieht nicht nur blöd aus, ist auch noch unleserlich und unbrauchbar. Je nach Bedarf halt setzen.
  • useStandardMarkers belässt die WoT standard Marker und ignoriert die OTM Marker von XVM.
  • clanIconsFolder gibt den Pfad zum clanicons-Ordner an. Man kann mit XVM ja die Clan-Logos mit anzeigen lassen (im Ladebildschirm, den Teamlisten, der TAB-Übersicht oder bei den OTM-Markern). Tut man das, muss man die irgendwo selber noch auf der Platte speichern. "../" bedeuted hierbei (wir erinnern uns) "der übergeordnete Ordner". "../../../clanicons" Bedeuted also 3 Ordner-Ebenen zurück und in den clanicons Ordner rein. Hier müssten dann die Clan-Bilder liegen (kein weiterer Sub-Ordner). Da er seit der Config-Umstellung mit Version 4 aber nicht mehr von von "res_mods/[GAME VERSION]/gui/flash" ausgeht, sondern von "res_mods/xvm/res", braucht man hier default-mäßig nichts zu ändern. Wöllte man nun bspw. das EXLX Logo einfügen, so müsste dann also hier liegen: "res_mods/xvm/res/clanicons/EN/clan/EXLX.png" :D Joa, falls man das woanders hin haben will, kann man das hier eben ändern.
  • elements verweist auf die Datei elements.xc, hier brauchen wir also nichts zu ändern
  • Im folgenden fragCorrelation block gibt es nur den Eintrag hideTeamTextFields, welcher bewirkt, dass die äusserst überflüssige schriftliche Anzeige ganz oben Mittig ("Allies | Enemies") verschwindet, sofern man es auf true setzt. Falls ihr aber andere Mods nutzt (zBsp TeamHpPool), die diese verändern, muss das hier natürlich auf true gesetzt bleiben, sonst sieht man nix von der tollen Zusatzmod.
  • expertPanel: Gute Frage nächste Frage :ugly: Wenn ich hier schlauer werde, passe ich das an. Anpassung: Ich habs schonma gewusst, aber wieder vergessen :klatsch:

top


rating.xc
Code:
/**
 * Options for player statistics
 */
{
  "rating": {
    // true - Toggle player statistics on/off. Global setting - without the statistics module, this is always disabled.
    "showPlayersStatistics": false,
    // true - Enable statistics in the user info window.
    "enableUserInfoStatistics": true,
    // true - Enable statistics in the company window.
    "enableCompanyStatistics": true,
    // true - Enable downloading of data on opponents in the "fog of war".
    "loadEnemyStatsInFogOfWar": true,
    // true - Enable saving statistics to "xvm-stat.log" file.
    "enableStatisticsLog": false
  }
}

  • showPlayersStatistics ist wohl der generelle an/aus Schalter für die ganze Stats Geschichte. Möchte man also das ehemalige XVM-Light "simulieren", dann sollte man hier ein false setzen.
  • enableUserInfoStatistics bezieht sich auf die Spieler-Statistik. Also wenn man bei sich auf den Wehrpass geht oder die Statistiken anderer in der Garage anschaut. Dann werden hier zusätzliche Daten angezeigt. Ganz nützlich, erschlägt einen Anfangs aber etwas ^^ Das dürfte die UserInfo.swf betreffen. Hat man die nicht mitkopiert, bringt die Einstellung hier auch nichts.
    worldoftanks 2013-03-31 17-43-07-12.jpg



  • enableCompanyStatistics bezieht sich auf die Spieler-Statistik-Anzeige im Kompanie- oder CW-Fenster. Hier hat man dann eine farbige und wertige Anzeige, wie gut die anwesenden Spieler sind.
    wot_company-cw.jpg



  • loadEnemyStatsInFogOfWar bestimmt, ob auch die anfangs unsichtbaren Gegner-Stats abgefragt werden. Hab das noch nicht ausprobiert und kann nur spekulieren. Eventuell lädt er die dann beim Auftauchen der Gegner nach und man kann damit die "Abfrage-Last" beim Laden des Matches verringern :ka: Aber mir wäre neu, dass er im Match noch was nachlädt. Hat er anfangs Probleme alles zu bekommen, bleibt die Lücke bis zum Ende ^^ Kann aber auch für CW gedacht sein, da hier die Gegner anfangs ja unbekannt sind.
  • enableStatisticsLog legt fest, ob der ganze Krams in ein Log-File geschrieben wird. Wenn er mal Daten nicht vom Server abfragen kann, holt er sie sich dann sicher aus diesem File (sofern man den betreffenden Kauz schonmal gesehn hatte) und stopft die Lücke mit (eventuell veralteten) Daten ausm Log-File. Hab ich auch noch nich selber probiert ^^

top


squad.xc
Code:
/**
 * Parameters for squad window.
 */
{
  "squad": {
    // false - Disable display info.
    "enabled": true,
    // false - hide player clan.
    "showClan": true,
    // Format of vehicle info field.
    "formatInfoField": "{{rlevel}}"
  }
}
In diesem Abschnitt kann man das Zug-Fenster etwas tunen. Sofern enabled true und nicht false ist, wird am rechten Rand noch die Tier-Stufe angezeigt. Mit showClan kann man den Clan-Tag hinterm Spielernamen noch ausblenden und mit formatInfoField lassen sich weitere Informationen über folgende Makros (siehe makros.txt) einblenden:
Code:
    [B]In Squad:[/B]
      {{level}}          - vehicle level (Arabic numerals)
      {{rlevel}}         - vehicle level (Roman numerals)
      {{vtype}}          - vehicle class
      {{vtype-l}}         - vehicle class (text substitution from locale)
      {{battletier-min}} - minimal vehicle battle tier
      {{battletier-max}} - maximal vehicle battle tier
Mit {{(r)level}} kann man entscheiden, ob die Tier-Stufe mit römischen Ziffern (VI, IX usw. -> {{rlevel}}) oder mit unseren herkömmlichen arabischen (6, 9 usw. -> {{level}}) angegeben werden soll. Und die battletier-Makros wären wohl ein Segen für so manchen Neueinsteiger, der mit seinem 5er Scout seine 5er "Normalo"-Kumpels ins 10er Gefecht zieht :roll: Leider werden wohl genau diese Leute nix hiervon wissen ^^ {{vtype}} lässt einen noch die Panzerklasse ausgeben, also ob TD oder Arty. {{vtype-l}} ist das Selbe in grün, nur dass es eben das Ausgibt, was man in der Lokalisierungs-Datei angegeben hat - die Ausgabe dieses Makros kann man also selbst beeinflussen.

top


hotkeys.xc
Code:
/**
 * Special XVM hotkeys.
 */
{
  "hotkeys": {
    // onHold: false - take action by key click. True - while key is remains pressed.
        
    // The only supported keys are:
    // "Backspace": 8,
    // "Tab": 9,
    // "Ctrl Left": 17,
    // "Ctrl Right": 163,
    // "Shift Right": 161,
    // "Esc": 27,
    // "Insert": 45,
    // "Delete": 46,
    // "Page Up": 33,
    // "Page Down": 34,
    // "A": 65,
    // "C": 67,
    // "V": 86,
    // "X": 88,
    // "F1": 112
    // "Caps Lock": 20
    
    "minimapZoom": { 
      "enabled": true,
      "onHold": true,
      "keyCode": 17 
    }
  }
}
minimapZoom ist bislang der einzige Eintrag und bewirkt bei Aktivierung (enabled = true), dass die MiniMap vergößert dargestellt wird (Locastan hatte das auch so umgesetzt). Mit onHold könnt ihr noch bestimmen, ob dieser Effekt nur Auftreten soll, wenn ihr die angegebene Taste gedrückt haltet (true), oder ob ihr ihn mit dieser Taste an und ausschalten könnt - also nicht halten müsst (false). Welche Taste es denn nun tatsächlich sein soll, wird per keyCode angegeben. Wie der Name schon vermuten lässt, wird hier der Tasten-Code verwendet. Welche es gibt, steht in dem Kommentar darüber. Einfach die Zahl der gewünschten Taste als Wert für keyCode rein tippseln und geschafft.

top


battleLoading.xc
Code:
/**
 * Parameters of the Battle Loading screen.
 */
{
  "battleLoading": {
    // Format of clock on the Battle Loading Screen.
    // http://php.net/date
    "clockFormat": "H:i:s",
    // true - Enable display of "chance to win". Read more: http://www.koreanrandom.com/forum/topic/1663-/
    "showChances": false,
    // true - Enable display of battle tier.
    "showBattleTier": false,
    // true - Disable Platoon icons. This blank space can house, for example, clan logos.
    "removeSquadIcon": false,
    // Display options for Team/Clan logos.
    "clanIcon": {
      // false - Disable Team/Clan logos in Battle Loading Screen.
      "show": true,
      // Position on the X axis, relative to the vehicle icon.
      "x": 0,
      // Position on the Y axis, relative to the vehicle icon.
      "y": 6,
      // Position on the X axis for right side (positive values run to the *inside* of the table).
      "xr": 0,
      // Position on the Y axis for right side.
      "yr": 6,
      // Width of the Team/Clan logo.
      "w": 16,
      // Height of the Team/Clan logo.
      "h": 16,
      // Transparency of the Team/Clan logo.
      "alpha": 90
    },
    // Display format for the left panel (macros allowed, see readme-en.txt).
    "formatLeftNick": "{{name%.20s~..}}<font alpha='#A0'>{{clan}}</font>",
    // Display format for the right panel (macros allowed, see readme-en.txt).
    "formatRightNick": "{{name%.20s~..}}<font alpha='#A0'>{{clan}}</font>",
    // Display format for the left panel (macros allowed, see readme-en.txt).
    "formatLeftVehicle": "{{vehicle}}<font face='Lucida Console' size='12'> <font color='{{c:kb}}'>{{kb%2d~k}}</font> <font color='{{c:xwn8}}'>{{xwn8}}</font> <font color='{{c:rating}}'>{{rating%2d~%}}</font></font>",
    // Display format for the right panel (macros allowed, see readme-en.txt).
    "formatRightVehicle": "<font face='Lucida Console' size='12'><font color='{{c:rating}}'>{{rating%2d~%}}</font> <font color='{{c:xwn8}}'>{{xwn8}}</font> <font color='{{c:kb}}'>{{kb%2d~k}}</font> </font>{{vehicle}}"
  }
}
Das hier betrifft die battleloading.swf. Kopiert man die nicht mit, hat das hier auch keine Auswirkung.

  • clockFormat ist wieder das selbe wie schon bei der "battle.xc". Diesmal wird das allerdings beim Ladebildschirm im ToolTip-Fensterchen mit angezeigt. Das Format ist an das von PHP angelehnt, siehe Link im Kommentar
  • showChances de/aktiviert die Gewinnprognose im Ladescreen. Als mehr als ein grober Indikator ist das aber bitte nicht zu verstehen. Stehn da 95% ist das immernoch keine Sieg-Garantie ;) Die Spieler müssen schon noch ihr Bestes geben, mit den Fahrzeugen auf der Map umgehen können und hoffen, das der Gegner nich besser kann, als die Stats vermuten lassen ^^ um zu gewinnen.
  • showBattleTier zeigt die "Match-Stufe" an. Sind Tier-6 Panzer die Toptiers, müsste das hier dann eben eine 6 ausgegeben werden.
  • removeSquadIcon entfernt das Schildchen mit der Zug-Nummer. Im Kommentar wird als Idee angefügt, dass man statt dessen zum Bsp das Clan-Logo anzeigen könnte. Ich wöllt nich drauf verzichten, aber muss ja jeder selber wissen :)
  • clanIcon* - ja, hier gehts halt genau darum ^^ Soll es angezeigt werden und wenn ja wo und wie. Die Kommentare darüber sollten eigentlich für sich sprechen *denk*
  • formatLeftNick und formatRightNick sind zur Ausgabe des Spielernames, formatLeftVehicle und formatRightVehicle für die Fahrzeugnamen. Also die ersetzen und erweitern diesen Teil. formatLeft... ist für die eigenen Leute, formatRight... für die Gegner. Hier kommen erstmals Makros zum Einsatz - welche wir verwenden können, finden wir in der macros.txt im "xvm\doc" Ordner:
In players panel, battle loading screen and statistic form:
{{nick}} - player nickname with clan name
{{name}} - player nickname without clan name
{{clan}} - clan name with brackets (empty if no clan)
{{clannb}} - clan name without brackets
{{vehicle}} - vehicle name
{{vehiclename}} - internal vehicle name (usa-M24_Chaffee)
{{vtype}} - vehicle type
{{c:vtype}} - color depended from vehicle type
{{veh-id}} - vehicle id
{{level}} - vehicle level (Arabic numerals)
{{rlevel}} - vehicle level (Roman numerals)
{{battletier}} - guessed current battle tier
+ statistics macros (see below)

...

Statistics macros ('rating/showPlayersStatistics' must be enabled):
{{avglvl}} - average level (tier) of tanks
{{eff}} - player efficiency: Wot-news - Efficiency rating calculator
{{teff}}, {{e}} - player per-vehicle efficiency: [
{{wn6}} - WN6 rating: [WN6, WN7
{{wn8}} - WN8 rating
{{xeff}} - XVM Scale for efficiency (values 00-99, XX for Tops)
{{xwn6}} - XVM Scale for WN6 (values 00-99, XX for Tops)
{{xwn8}} - XVM Scale for WN8 (values 00-99, XX for Tops)
{{rating}} - GWR (Global Win Ratio)
{{battles}} - total battles count
{{wins}} - total wins count
{{kb}} - number of kilo-battles (total battles count divided by 1000).
{{t-rating}} - vehicle win ratio
{{t-battles}} - total battles count for current vehicle
{{t-wins}} - total wins count for current vehicle
{{t-kb}} - number of kilo-battles for current vehicle
{{t-hb}} - number of hecto-battles for current vehicle (hecto = 100)
{{tdb}} - average damage for current tank - damage/battles
{{tdv}} - average damage efficiency for tank - damage/(battles*maxHP)
{{tfb}} - average frags per battle for current tank
{{tsb}} - average number of spotted enemies per battle for current tank
{{c:tdb}}, {{c:tdv}}, {{c:tfb}}, {{c:tsb}} - dynamic colors for this macros
{{c:eff}} - color depended from player efficiency
{{c:e}} - color depended from player per-vehicle efficiency
{{c:wn6}} - color depended from WN6 rating
{{c:wn8}} - color depended from WN8 rating
{{c:xeff}} - color depended from XVM Scale for efficiency
{{c:xwn6}} - color depending on XVM Scale for WN6
{{c:xwn8}} - color depending on XVM Scale for WN8
{{c:rating}} - color depended from GWR
{{c:kb}} - color depended from kilo-battles
{{c:avglvl}} - color depended from average level of tanks
{{c:t-rating}} - color depended from current vehicle win ratio
{{c:t-battles}} - color depended from current vehicle battles
Any color macro you can change to transparency macro ({{a: tdb}}).
Aus diesem reichen Fundus können wir hier also schöpfen und uns was Feines zusammen basteln. Das vorgegebene "{{vehicle}}<font face='Lucida Console' size='12'> <font color='{{c:kb}}'>{{kb%2d~k}}</font> <font color='{{c:xwn8}}'>{{xwn8}}</font> <font color='{{c:rating}}'>{{rating%2d~%}}</font></font>" (für LeftVehicle - die Eigenen Fahrzeuge) bedeuted nun also, dass zuerst der Fahrzeugname ({{vehicle}}) gefolgt von der Anzahl der gefahrenen Runden ({{kb}}-Makro mit Formatierung -> kb = kilo battles, 1000 Kämpfe) sowie abschließend den Werten für das WN8-Rating ({{xwn8}} - nicht direkt der Wert (das wäre {{wn8}} (oder auch {{wn6}} ginge)), sondern als %-Wert -> der Beste hat 100%, der Schlechteste 0%) und die globale Siegrate ({{rating}} - wieder schön Formatiert). Zusätzlich wird das Ganze noch farblich hinterlegt. Das macht man ganz simpel mittels HTML Formatierung -> hier die font-Tags mit color-Parameter. Als Farb-Wert wird wieder ein Makro verwendet. Diese kann man auch selber weiter unten in der Config an die eigenen Vorlieben anpassen.

worldoftanks 2013-03-31 17-31-28-21.jpg

top


statisticForm.xc

Code:
/**
 * Parameters of the Battle Statistics form.
 */
{
  "statisticForm": {
    // true - Enable display of "chance to win"
    "showChances": false,
    // true - Show "chance to win" only for live tanks.
    "showChancesLive": false,
    // true - Enable display of battle tier.
    "showBattleTier": false,
    // true - Disable Platoon icons.
    "removeSquadIcon": false,
    // Display options for Team/Clan logos (see battleLoading.xc).
    "clanIcon": {
      "show": true,
      "x": 0,
      "y": 6,
      "xr": 0,
      "yr": 6,
      "w": 16,
      "h": 16,
      "alpha": 90
    },
    // Display format for the left panel (macros allowed, see readme-en.txt).
    "formatLeftNick": "{{name%.20s~..}}<font alpha='#A0'>{{clan}}</font>",
    // Display format for the right panel (macros allowed, see readme-en.txt).
    "formatRightNick": "{{name%.20s~..}}<font alpha='#A0'>{{clan}}</font>",
    // Display format for the left panel (macros allowed, see readme-en.txt).
    "formatLeftVehicle": "{{vehicle}}<font face='Lucida Console' size='12'> <font color='{{c:kb}}'>{{kb%2d~k}}</font> <font color='{{c:xwn8}}'>{{xwn8}}</font> <font color='{{c:rating}}'>{{rating%2d~%}}</font></font>",
    // Display format for the right panel (macros allowed, see readme-en.txt).
    "formatRightVehicle": "<font face='Lucida Console' size='12'><font color='{{c:rating}}'>{{rating%2d~%}}</font> <font color='{{c:xwn8}}'>{{xwn8}}</font> <font color='{{c:kb}}'>{{kb%2d~k}}</font> </font>{{vehicle}}"
  }
}
Das hier betrifft die StatisticForm.swf. Kopiert man die nicht mit, hat das hier auch keine Auswirkung.
Im Endeffekt gilt hier das selbe wie für die battleLoading.xc, daher denk ich mal, brauche ich darauf nicht nochmal näher einzugehen. Hiermit wird die TAB-Anzeige im laufenden Match angepasst.

Neuerdings wird nur noch hier die ehemals "experimentelle" (showChancesExp -> showChancesLive) Siegchance angezeigt - machte woanders ja nur wenig Sinn. Diese bewirk quasi eine "Live"-Berechnung der Siegchancen im Gefecht. Erwischt man einen epischen (stats-technisch ^^) Gegner, verbessern sich natürlich die eigenen Chancen, verliert man selber Leute, verschlechtern sie sich usw usf. Auch das neue showBattleTier (ehemals Teil von showChancesExp) hat seinen Weg hier rein gefunden.

worldoftanks 2013-03-31 17-31-44-09.jpg

top


playersPanel.xc
Code:
/**
 * Parameters of the Players Panels ("ears").
 */
{
  "playersPanel": {
    // Opacity percentage of the panels. 0 - transparent, 100 - opaque.
    "alpha": 60,
    // Opacity percentage of icons in the panels. 0 - transparent ... 100 - opaque.
    "iconAlpha": 100,
    // true - Disable Platoon icons.
    "removeSquadIcon": false,
    // true - Remove the Players Panel mode switcher (buttons for changing size).
    "removePanelsModeSwitcher": false,
    // Start panels mode. Possible values: "none", "short", "medium", "medium2", "large".
    "startMode": "large",
    // Display options for Team/Clan logos (see battleLoading.xc).
    "clanIcon": {
      "show": true,
      "x": 0,
      "y": 6,
      "xr": 0,
      "yr": 6,
      "w": 16,
      "h": 16,
      "alpha": 90
    },
    // Enemy spotted status marker at right side panel.
    // This feature depends on enabled XVM minimap mod
    "enemySpottedMarker": {
      // false - Disable.
      "enabled": false,
      // Offset relative to level icon (by X, Y).
      "Xoffset": 15,
      "Yoffset": 0,
[COLOR=dimgray]      "format": {
        // Never seen this enemy.
        "neverSeen": "<font size='20' face='Webdings' color='#AE7D7D'>L</font>",
        // This enemy was seen atleast once.
        "lost": "<font size='16' face='Webdings' color='#FCA9A4'>r</font>",
        // Enemy currently revealed at minimap.
        "revealed": "<font size='18' face='Webdings' color='#C8FFA6'>N</font>",
        // Dead enemy.
        "dead": "<font size='20' face='Wingdings' color='#DF893E'>N</font>",
        // Artillery specific values.
        "artillery": {
          "neverSeen": "<font size='20' face='Webdings' color='#AE7D7D'>L</font>",
          "lost": "<font size='16' face='Webdings' color='#FCA9A4'>r</font>",
          "revealed": "<font size='18' face='Webdings' color='#C8FFA6'>N</font>",
          "dead": "<font size='20' face='Wingdings' color='#DF893E'>N</font>"
        }
      }    },
    // Options for the "none" panels - empty panels.
    "none": {
      // Layout ("vertical" or "horizontal")
      "layout": "vertical",
      // Extra fields.
      "extraFields": {
        "leftPanel": {
          "x": 0, // from left side of screen
          "y": 65,
          "width": 350,
          "height": 25,
          // Set of formats for left panel
          // example:
          // "format": [
          //   // simple format (just a text)
          //   "{{nick}}",
          //   "<img src='xvm://res/img/panel-bg-l-{{alive|dead}}.png' width='318' height='28'>",
          //   // extended format
          //   { "x": 20, "y": 10, "border": 1, "borderColor": "0xFFFFFF", "format": "{{nick}}" },
          //   { "x": 200, "src": "xvm://res/contour/{{vehiclename}}.png" }
          // ]
          //
          // types of formats available for extended format:
          //   - MovieClip (for loading image)
          //   - TextField (for writing text and creating rectangles)
          // if "src" field is present, MovieClip format will be used
          // if "src" field is absent, TextField format will be used
          //
          // fields available for extended format:
          //   "src" - resource path ("xvm://res/contour/{{vehiclename}}.png")
          //   "format" - text format (macros allowed)
          //
          // fields available for both MovieClip and TextField formats:
          //   "x" - x position (macros allowed)
          //   "y" - y position (macros allowed)
          //   "w" - width (macros allowed)
          //   "h" - height (macros allowed)
          //   "alpha" - transparency in percents (0..100) (macros allowed)
          //   "rotation" - rotation in degrees (0..360) (macros allowed)
          //   "align" - horizontal alignment ("left", "center", "right")
          //      for left panel default value is "left"
          //      for right panel default value is "right"
          //
          // fields available for both TextField format only:
          //   "valign" - vertical alignment ("top", "center", "bottom")
          //      default value is "top"
          //   "borderColor" - if set, draw border with specified color (macros allowed)
          //   "bgColor" - if set, draw background with specified color (macros allowed)
          //   "antiAliasType" - anti aliasing mode ("advanced" or "normal")
          //   "shadow": {
          //     "distance" (in pixels)
          //     "angle"    (0.0 .. 360.0)
          //     "color"    "0xXXXXXX"
          //     "alpha"    (0.0 .. 1.0)
          //     "blur"     (0.0 .. 255.0)
          //     "strength" (0.0 .. 255.0)
          //    }
          //
          // * all fields are optional
          //
          "formats": []
        },
        "rightPanel": {
          "x": 0, // from right side of screen
          "y": 65,
          "width": 350,
          "height": 25,
          // Set of formats for right panel (extended format supported, see above)
          "formats": []
        }
      }
    },
    // Options for the "short" panels - panels with frags and vehicle icon.
    "short": {
      // Display format for frags (macros allowed, see readme-en.txt).
      "fragsFormatLeft": "{{frags}}",
      "fragsFormatRight": "{{frags}}",
      // Extra fields. Each field have size 350x25. Fields are placed one above the other.
      // Set of formats for left panel (extended format supported, see above)
      "extraFieldsLeft": [],
      // Set of formats for right panel (extended format supported, see above)
      "extraFieldsRight": []
    },
    // Options for the "medium" panels - the first of the medium panels.
    "medium": {
      // Minimum width of the player's name column, 0-250. Default is 46.
      "width": 46,
      // Display format for the left panel (macros allowed, see readme-en.txt).
      "formatLeft": "<font color='{{c:xwn8}}'>{{nick}}</font>",
      // Display format for the right panel (macros allowed, see readme-en.txt).
      "formatRight": "<font color='{{c:xwn8}}'>{{nick}}</font>",
      // Display format for frags (macros allowed, see readme-en.txt).
      "fragsFormatLeft": "{{frags}}",
      "fragsFormatRight": "{{frags}}",
      // Extra fields. Each field have size 350x25. Fields are placed one above the other.
      // Set of formats for left panel (extended format supported, see above)
      "extraFieldsLeft": [],
      // Set of formats for right panel (extended format supported, see above)
      "extraFieldsRight": []
    },
    // Options for the "medium2" panels - the second of the medium panels.
    "medium2": {
      // Maximum width of the vehicle name column, 0-250. Default is 65.
      "width": 65,
      // Display format for the left panel (macros allowed, see readme-en.txt).
      "formatLeft": "<font color='{{c:xwn8}}'>{{vehicle}}</font>",
      // Display format for the right panel (macros allowed, see readme-en.txt).
      "formatRight": "<font color='{{c:xwn8}}'>{{vehicle}}</font>",
      // Display format for frags (macros allowed, see readme-en.txt).
      "fragsFormatLeft": "{{frags}}",
      "fragsFormatRight": "{{frags}}",
      // Extra fields. Each field have size 350x25. Fields are placed one above the other.
      // Set of formats for left panel (extended format supported, see above)
      "extraFieldsLeft": [],
      // Set of formats for right panel (extended format supported, see above)
      "extraFieldsRight": []
    },
    // Options for the "large" panels - the widest panels.
    "large": {
      // Minimum width of the player's name column, 0-250. Default is 170.
      "width": 170,
      // Display format for player nickname (macros allowed, see readme-en.txt).
      "nickFormatLeft": "<font color='{{c:xwn8}}'>{{xwn8}}</font> {{nick}}",
      "nickFormatRight": "{{nick}} <font color='{{c:xwn8}}'>{{xwn8}}</font>",
      // Display format for vehicle name (macros allowed, see readme-en.txt).
      "vehicleFormatLeft": "{{vehicle}}",
      "vehicleFormatRight": "{{vehicle}}",
      // Display format for frags (macros allowed, see readme-en.txt).
      "fragsFormatLeft": "{{frags}}",
      "fragsFormatRight": "{{frags}}",
      // Extra fields. Each field have size 350x25. Fields are placed one above the other.
      // Set of formats for left panel (extended format supported, see above)
      "extraFieldsLeft": [],
      // Set of formats for right panel (extended format supported, see above)
      "extraFieldsRight": []
    }
  }
}
Das hier betrifft die PlayersPanel.swf. Kopiert man die nicht mit, hat das hier auch keine Auswirkung.
Auch hier wieder im Großen und Ganzen vergleichbar. Hiermit wird die Team-Anzeige links und rechts im laufenden Match angepasst.

  • alpha gibt die Transparenz des Hintergrund-Balkens in Prozent an, iconAlpha das selbe für das Contour-Icon.
  • removeSquadIcon und clanIcon wie gesagt das Übliche.
  • removePanelsModeSwitcher ist für die Buttons über der eigenen Teamliste zuständig, mit denen man die Panel-Größe einstellen kann (STRG gedrückt halten, um den Cursor zum auswählen zu bekommen). Da man aber mit STRG+TAB (lass mich lügen ^^) durchschalten kann, is das hier wohl deaktivierbar.
  • startMode legt fest, welche Panel-Größe beim Countdown genutzt und angezeigt wird.
  • enemySpottedMarker lässt einen bei der gegnerischen Teamliste am rechten Bildrand ein paar Zusatzinfos einblenden. Man beachte den Kommentar darüber: "// This feature depends on enabled XVM minimap mod". enabled ist der an/aus Schalter, Xoffset und Yoffset lassen einen das Ganze beliebig positionieren (in Relation zur Bildmitte des ContourIcons) und mit format werden die eigentlichen "Texte" erstellt. Wurde das jeweilige Fahrzeug noch nie gespotted, so wird neverSeen angezeigt. Der format-Code-Schnipsel hier ist aus meiner Config (daher auch farblich etwas anders gestaltet), wo ich das Ganze mal getestet hab. Das L wird bei der Schriftart Webdings zu einem Lupen-Symbol. lost definiert die Ausgabe für wieder verlorene Ziele, also Ziele, die schoneinmal gespotted waren und nun wieder "verloren" wurden - bei mir ein X-Symbol. revealed meint die gerade gespotteten Gegner - ein Augen-Symbol - und dead... nunja, schon aus dem Spiel geschiedene Gegner ^^ Ich hab hier einfach mal das Totenkopf-Symbol vom HitLog übernommen, aber an und für sich kann mans auch einfach leer "" lassen - man siehts ja, ob der hinnev ist oder nicht. Mit artillery kann man eben jene Sonderfälle angeben. Also wenn man die genannten Anzeigen bei einer gespotteten Arty anders/deutlicher haben möchte oder wie auch immer.
worldoftanks 2013-04-29 11-56-19-00.jpg


  • none, short, medium, medium2 und large sind dann die unterschiedlichen Größen. Man kann ja zwischen den 5 Größen wählen, standardmäßig ist beim Counddown large zu sehn und im Match medium. medium2 ist dann nochmal so ein Zwischenschritt und short eine noch kleinere Stufe davor. none wiederrum wäre der deaktivierte zustand - nix zu sehn.
  • none lässt keine direkte Formatierung zu, da hier ja eigentlich garnichts angezeigt wird. Wir können es mittels layout vertikal (von oben nach unten) oder horizontal (von links nach rechts) ausgeben lassen und mit extraFields wird uns ein tolles neues Spielzeug in die Hand gelegt. Diese können wir für das leftPanel und für das rightPanel definieren: Jeweils mit x und y kann man den Abstand vom linken (x) (bzw rechten bei rightPanel) oberen (y) Bildschirmrand in Pixeln angeben und mit width und height die Dimension/Größe/Ausmaße des Panels angeben. Mit formats wird uns ein Block zur Verfügung gestellt, den wir nun aber nach allen Regeln der Kunst gestalten können. Und die eckigen Klammern zeigen uns, dass wir da mehrere Angeben dürfen. Das Ganze funktioniert dann so, dass alle hier angegebenen Ausgaben hintereinandergelegt werden. Oder untereinander, wie mans nehmen will. Also alle Ausgaben werden dann halt übereinander gepappt und überlagern sich. Im großen Kommentar darüber stehen schon einige Beispiele.
  • Bei short wird üblicherweise nur der Frags-Count (also wieviele man zerstört hat) angezeigt, daher können wir nun diesen hier mittels fragsFormatLeft und fragsFormatRight bearbeiten. Auch hier haben wir einen extraFields-Eintrag, allerdings diesmal ohne die ausführlichen Einstellungsmöglichkeiten wie bei none. Dies hier entspricht quasi dem formats von none.
  • medium erweitert dieses Repertoire nun noch um formatLeft und formatRight, das wir wie gewohnt Formatieren können, sowie um einen width Parameter, der die Breite in Pixeln angibt. Aber vorsicht! Wenn ihr bei formatLeft/Right ein unformatiertes {{name}} oder {{nick}} Makro verwendet, dann hat width keinerlei Auswirkung, da einfach der volle Spielername - komme was wolle - ausgegeben wird und die Breitenangabe schlicht sprengt.
  • medium2 ist im Grunde das Selbe wie medium, nur dass hier das Fahrzeug statt des Spielers angezeigt wird (also standardmäßig - wir könnens ja lustig selber bestimmen :D ).
  • Bei large wird der ausgegebene Text (formatLeft/Right) nun nochmals unterteilt in den Namens-Part und den Fahrzeug-Part. Ansonsten wieder einmal links und einmal rechts mit den üblichen Formatierungsmöglichkeiten.

wot_playerspanel.jpg

top


battleResults.xc
Anmerkung: Dies war ehemals die finalStatistic.
Code:
/**
 * Parameters of the After Battle Screen.
 */
{
  "battleResults": {
    // Initial page (1, 2, 3)
    "startPage": 1,
    // true - Display net income of credits in first page
    "showNetIncome": true,
    // true - Display shots precision and damage in first page under credits and XP
    "showExtendedInfo": true,
    // true - Show totals for your battle efficiency in first page
    "showTotals": true,
    // true - Enable display of "chance to win"
    "showChances": false,
    // true - Enable display of battle tier.
    "showBattleTier": false
  }
}
Das hier betrifft die battleResults.swf. Kopiert man die nicht mit, hat das hier auch keine Auswirkung.
Hiermit verändert man das Kampfberichts-Fentser in der Garage, nachdem der Kampf vorbei ist. Im ersten Reiter wird zusätzlich die Trefferquote, Damage und Spoting-Damage angezeigt und der Creditsbetrag auf den Netto-Wert (Brutto (Gesamteinkommen) - Ausgaben (Reperaturen, Munition...)) korrigiert.

  • startPage lässt einem die Wahl, welche der 3 Reiter man beim Öffnen des Fenster direkt sehen möchte. Standardmäßig sieht man ja den ersten Reiter, will man aber zum Beispiel lieber gleich die Teamliste sehen, müsste man hier die 2 eintragen usw.
  • showNetIncome behandelt nun eben diese Eingangs schon erwähnt "Netto-Korrektur" des Credit-Wertes im Übersichten-Kopf oben. Setzt hier true und es wird nicht mehr Brutto angezeigt.
  • showExtendedInfo fügt bei true dementsprechend auf der ersten Seite noch die Infos ein, wieviel Schaden man ausgeteilt hat und wie gut man getroffen hatte.
  • showTotals lässt einen einstellen, ob man den Netto- oder den Brutto-Credit-Wert angezeigt haben möchte, den man erhalten hat. Brutto wären die puren eingenommen Credits und Netto wäre der Brutto-Wert verrechnet mit den Abzügen für Reperatur, Munition und was es noch so gibt (quasi das, was tatsächlich auf dem Konto gelandet ist).
  • showChances lässt oben im Kopf des Fensters nochmal die Siegchances des Gefechts erstrahlen. Hat man ein 5% Match glorreich gewonnen, kann man sich freuen :P
  • showBattleTier lässt einen auch nach dem Gefecht nochmal das Battle-Tier anzeigen.

worldoftanks 2013-03-31 17-12-04-79.jpg

top


turretMarkers.xc
Code:
/**
 * {{turret}} marker display strings.
 */
{
  "turretMarkers": {
    // Subject has stock turret and top gun can not be mounted. Subject is highly vulnerable.
    "highVulnerability": "*",
    // Subject has stock turret and top gun can be mounted. Subject is somewhat vulnerable.
    "lowVulnerability": "'"
  }
}
Hiermit kann man bei der OTM-Anzeige über den Panzern anzeigen lassen, ob der jeweilige Panzer einen Stock-Turm hat oder nicht. Wird dies hier angezeigt, hat er einen Stock-Turm. Kann er mit diesem die Top-Gun NICHT ausrüsten, erscheint ein * hinterm Namen, kann er sie draufbauen (es zählt nur die Möglichkeit! Die muss dennoch nicht montiert sein) wird ein ' angezeigt. Beides kann man mit highVulnerability und lowVulnerability anpassen. Hab bei mir " -" und " +" gemacht ^^ Auch hier gibts wieder Möglichkeiten mittels Schriftarten "Bildchen" einzufügen.

top


hitLog.xc
Code:
/**
 * Hit log (my hits calculator).
 */
{
  "hitLog": {
    // false - Disable.
    "visible": true,

    // Show enemy HP left by Alt press
    // Destroyed enemies and enemies HP gets updated only when it markers become visible.
    // Markers are visible only inside 1000m side square.
    // Square with 1000 meters side is game engine restriction. Maximum marker show distance.
    // Particular enemy data will not be updated while you cant see this enemy marker or its wreck.
    "hpLeft": {
        // false - Disable.
        "enabled": true,
        // Header - Only localization macros are allowed, see readme-en.txt.
        "header": "<font color='#FFFFFF'>{{l10n:hpLeftTitle}}</font>",
        // Row in HP list (macros allowed, see readme-en.txt).
        "format": "<textformat leading='-4' tabstops='[50,90,190]'><font color='{{c:hp-ratio}}'>     {{hp}}</font><tab><font color='#FFFFFF'>/ </font>{{hp-max}}<tab><font color='#FFFFFF'>|</font><font color='{{c:vtype}}'>{{vehicle}}</font><tab><font color='#FFFFFF'>|{{nick}}</font></textformat>"
    },

    // X position (negative values - bind to right side of screen).
    "x": 270,
    // Y position (negative values - bind to bottom side of screen).
    "y": 5,
    // Width.
    "w": 500,
    // Height.
    "h": 1000,
    // Number of lines with hits. Old lines will be pushed out.
    "lines": 0,
    // Log direction: up - lines will be added from up to down, down - from down to up.
    "direction": "down",
    // Group hits by players name.
    "groupHitsByPlayer": true,
    // Insert order: begin - insert new values to begin, end - add to end.
    "insertOrder": "end",
    // Substitution for {{dead}} macro when tank is dead.
    "deadMarker": "<img src='xvm://res/icons/dead.png' width='12' height='12'>",
    "blowupMarker": "<img src='xvm://res/icons/blowedup.png' width='12' height='12'>",
    // Default header format (before first hit). Only localization macros are allowed, see readme-en.txt.
    "defaultHeader":  "<font color='#FFFFFF'>{{l10n:Hits}}:</font> <font size='13'>#0</font>",
    // Hits header format, including last hit (macros allowed, see readme-en.txt).
    "formatHeader":  "<font color='#FFFFFF'>{{l10n:Hits}}:</font> <font size='13'>#{{n}}</font> <font color='#FFFFFF'>{{l10n:Total}}: </font><b>{{dmg-total}}</b>  <font color='#FFFFFF'>{{l10n:Last}}:</font> <font color='{{c:dmg-kind}}'><b>{{dmg}}</b> {{dead}}</font>",
    // List of hits format (macros allowed, see readme-en.txt).
    "formatHistory": "<textformat leading='-4' tabstops='[20,50,90,190]'><font size='12'>\u00D7{{n-player}}:</font><tab><font color='{{c:dmg-kind}}'>{{dmg}}</font><tab>| {{dmg-player}}<tab>|<font color='{{c:vtype}}'>{{vehicle}} {{dead}}</font><tab><font color='#FFFFFF'>|{{nick}}</font></textformat>",
    // Shadow options.
    "shadow": {
      // Opacity.
      "alpha": 100,
      "color": "0x000000",
      // Offset angle.
      "angle": 45,
      // Offset distance.
      "distance": 0,
      "size": 5,
      // Intensity.
      "strength": 150
    }
  }
}
Ich liebe dieses Baby ^^ Das war mein Grund, XVM zu nutzen :P Es zeigt einem eine Liste der eigenen schadenverursachenden Treffer an (die sichtbar waren - also keine "Blindshots").

  • enabled lässt einen das Dingen an und ausschalten. Wers nicht braucht -> false.
  • Im hpLeft-Block kann man die alternative Ansicht bearbeiten. Drückt man im Spiel ALT, so wechselt die HitLog-Ansicht auf dieses Format, in der die verbliebene HP der (für einen irgendwann mal sichtbaren) Gegner vermerkt werden. Aber Achtung: Die Werte spiegeln nur den Stand wieder, den man selber mal irgendwann angezeigt bekam. Als Bsp: Ein 500HP Panzer der gespottet ist und innerhalb der Darstellungsreichweite (also auf dem Schlachtfeld sichtbar) ist, der wird hier mit 500HP aufgenommen. Wird er nun beschossen, so wird auch der Wert in dieser Anzeige aktualisiert. Nun verschwindet er wieder, wird aber dennoch getroffen (vllt. ne Arty-Mumpel, die zu spät zur Party kam) - das wird dann NICHT mehr hier vermerkt. Das selbe bei Panzern, die ausserhalb der eigenen Darstellungsreichweite bekämpft werden. Sieht man sie wieder selber, wird der Wert aber natürlich wieder aktualisiert. Ich nenne es gerne die "ToDo-Liste" ^^ enabled wie üblich der "Schalter", im header wird die "Überschrift" bearbeitet (hier ein Verweis auf die Lokalisierungs-Datei) und mit format jede einzelne Zeile/Eintrag. Der textformat-Tag* ("<textformat leading='-4' tabstops='[50,90,180]'>") bietet einem die Möglichkeit, die Ausgabe ordentlich zu strukturieren, so dass alle Werte tabellenartig untereinander stehen und nicht wild aneinanderklatschen. Der tabstops-Parameter ist hierbei beliebig erweiterbar (einfach weitere Werte per Komma anfügen). Die Werte für tabstop sind Pixel-Angaben und beziehen sich mE. auf den Anfang des Textes. Fügt man also ein erstes <tab> in den Text ein, so wird dieses (und damit der folgende Text) um soviel Pixel nach rechts verschoben (wie gesagt von Text-Anfang, NICHT vom letzten <tab> aus), wie im ersten Wert angegeben. In der Default-Config währen das also 50 Pixel. Der zweite <tab>-Tag würde das ganze nun 90 Pixel vom Anfang nach rechts verschieben - also 40 Pixel (90-50) hinter dem ersten <tab>.
  • x und y geben die Position auf dem Bildschirm in Pixeln an. Bei ner 1920er auflösung wäre das Ding bei "x": 960 also genau mittig - achja: mit x und y wird die linke obere Ecke des Hitlogs gemeint, NICHT die Mitte. Mit "x": 960 würde der linke Rand des HitLogs also genau mittig liegen, nicht aber das ganze HitLog (also die mitte des HitLogs bla). Nutzt man negative Werte bezieht sich die Angabe auf den rechten bzw unteren Bildschirmrand, positive Werte auf links/oben. Standardmäßig befindet sich das HitLog oben Links neben den Debuginfos/der Uhr.
  • w und h beschreiben die Breite und Höhe des HitLog-Bereichs. Ist der zu klein gewählt, wird der Rest vom Text einfach abgeschnitten.
  • lines lässt einen festlegen, wieviele Einzelzeilen angezeigt werden sollen. Das HitLog unterteilt sich in einen Gesamt/Kopf-Teil und einen Einzel-Aufschlüsselungs-Teil, oder wie mans nennen möchte ^^ Dieser Kopf-Teil zeigt den Gesamtschaden (wie oben beschrieben - Thema Blindshots usw...) an mit einer Treffer-Anzahl und was man noch möchte. Die lines (auf 0 gesetzt sieht man nur den Zusammenfassungs-Teil) sind dann eine Aufschlüselung einzelner Treffer oder getroffener Spieler:
  • groupHitsByPlayer *kurz vorgreif* bestimmt genau das. Ist das hier true, wird für jeden Spieler den man erwischt eine "line" erstellt, bei false für jeden einzelnen Treffer. Hat man also 2mal diesen ollen T-28 da getroffen, hat man 2 Zeilen generiert. Bei true wäre es nur eine gewesen.
  • direction und insertOrder lassen die Richtung noch ändern. Also soll das Hitlog von oben nach unten aufgebaut sein oder andersrum - und sollen neue Zeilen oben oder unten angefügt werden. Falls man das Ganze am unteren Bildschirmrand positioniert, könnte das nen optischen Mehrwert bedeuten.
  • deadMarker und blowupMarker legen fest, was das {{dead}}-Makro auf den Bildschirm kritzelt. Hier in der Vorlage wird ein N und ein M geschrieben - allerdings in der Schriftart Windings -> das Ganze wird bei einem Kill also zu einem Totenkopf und bei einem Ammorack-Treffer zu einer Bombe.
  • defaultHeader gibt die Kopfzeile im Urzustand an. Also der Teil, wo der Zusammengefasste Schaden usw steht - und zwar, bevor man irgendwas getroffen/beschädigt hat. Makros sind hier NICHT erlaubt. Wiederrum ein Verweis zur Lokalisierungs-Datei.
  • formatHeader ist das gleiche, nur eben für den Fall, dass man schon Schaden gemacht hat. Hier sind wiederrum Makros erlaubt, welche verrät die macros.txt:
In Hits Log:
{{nick}} - player nickname with clan name
{{name}} - player nickname without clan name
{{clan}} - clan name with brackets (empty if no clan)
{{clannb}} - clan name without brackets
{{vehicle}} - vehicle name
{{vehiclename}} - vehicle system name (usa-M24_Chaffee)
{{vtype}} - vehicle type (text substitution from config)
{{c:vtype}} - color depending on vehicle type
{{veh-id}} - vehicle id
{{level}} - vehicle level (Arabic numerals)
{{rlevel}} - vehicle level (Roman numerals)
{{battletier}} - guessed current battle tier
{{squad}} - value 'sq' for own squad, empty for others
{{squad-num}} - number of squad (1,2,...), empty if not in squad

{{n}} - total number of hits
{{n-player}} - number of hits for each player
{{dmg}} - damage health points / last hit value
{{dmg-kind}} - damage kind (attack, fire, ramming, ...)
{{c:dmg-kind}} - color depending on damage kind
{{dmg-total}} - total sum of hits
{{dmg-avg}} - average damage during the battle
{{dmg-player}} - sum of hits for each player
{{dead}} - tank's death marker

{{l10n:Hits}} - localizated text "Hits"
{{l10n:Total}} - localizated text "Total"
{{l10n:Last}} - localizated text "Last"

{{hp}} - current health points
{{hp-ratio}} - current health ratio (without '%' sign)
{{hp-max}} - maximum health points
{{c:hp}} - color depending on current health points (only in vehicle markers)
{{c:hp-ratio}} - color depending on current health ratio (only in vehicle markers)
{{a:hp}} - transparency depending on current health points (only in vehicle markers)
{{a:hp-ratio}} - transparency depending on current health ratio (only in vehicle markers)
{{alive}} - 'alive' for alive, '' for dead
Die beiden c:... Makros (4. und 5. von unten) stellen Farbwerte dar, müssten also in einem font Tag mit color Parameter verwendet werden.

  • formatHistory bildet dann die einzelnen "lines". Hat man das ganze Gruppiert nach Spielern, so macht es Sinn, wenn man einmal den Gesamt-Schaden am Spieler und nochmal den letzten Schaden ausgeben lässt - bei Treffer-für-Treffer Anzeige wäre das aber Quatsch. Hier muss man das Ganze also ein wenig aufeinander abstimmen. Mit dem textformat-Tag lässt sich die Ausgabe wieder ordentlich strukturieren.
  • shadow lässt einen noch den Schattenwurf der Schrift anpassen. Mit Schatten wird Schrift immer besser lesbar, da sie sich besser vom Hintergrund abhebt. angle beschreibt den Winkel, in der "die Sonne" quasi auf die Schrift scheint ^^ und distance simuliert den Effekt von schwebender Schrift. Gibt im Endeffekt halt an, wie weit der Schatten von der Schrift weg gemalt wird - angle die Richtung.

wot_hitlog.jpg

top


captureBar.xc
Code:
/**
 * Capture bar.
 */
{
  "captureBar": {
    // false - Disable.
    "enabled": true,
    // Upper textfield offset in case of big font size.
    "primaryTitleOffset": 7,
    // Append plus to three capturers. Cant calculate more than three.
    "appendPlus" : true,
    // Capture format (macros allowed, see readme-en.txt).
    "enemy": { // Вражеской.
      // Upper textfield.
      "primaryTitleFormat":   "<font size='15' color='#FFFFFF'>{{l10n:enemyBaseCapture}} {{extra}}</font>",
      // Lower textfield.
      "secondaryTitleFormat": "<font size='15' color='#FFFFFF'>{{points}}</font>",
      // Full capture text.
      "captureDoneFormat":    "<font size='17' color='#FFCC66'>{{l10n:enemyBaseCaptured}}</font>",
      // Extra text available after necessary calculations.
      "extra": "{{l10n:Capturers}}: <b><font color='#FFCC66'>{{tanks}}</font></b> {{l10n:Timeleft}}: <b><font color='#FFCC66'>{{time}}</font><b>",
      // Fields shadow
      "shadow": {
        "color": "0x000000",
        // Opacity 0-100.
        "alpha": 50,
        // Blur 0-255; 6 is recommended.
        "blur": 6,
        // Intensity 0-255; 3 is recommended.
        "strength": 3
      }
    },
    "ally": {
      "primaryTitleFormat":   "<font size='15' color='#FFFFFF'>{{l10n:allyBaseCapture}} {{extra}}</font>",
      "secondaryTitleFormat": "<font size='15' color='#FFFFFF'>{{points}}</font>",
      "captureDoneFormat":    "<font size='17' color='#FFCC66'>{{l10n:allyBaseCaptured}}</font>",
      "extra": "{{l10n:Capturers}}: <b><font color='#FFCC66'>{{tanks}}</font></b> {{l10n:Timeleft}}: <b><font color='#FFCC66'>{{time}}</font><b>",
      "shadow": {
        "color": "0x000000",
        "alpha": 50,
        "blur": 6,
        "strength": 3
      }
    }
  }
}
Hiermit kann man diesen Balken anpassen, der beim Einnehmen von Flaggen erscheint. Die Anzahl der Fahrzeuge im Cap sowie die verbleibende Restzeit wird mit angezeigt.

  • enabled -> joa, wieder an/aus Schalter
  • primaryTitleOffset... hierzu möchte ich gerne einen langen ausschweifenden und nichtssagenden Vortrag halten *räusper* ääh, keine Ahnung so recht was das macht ^^ :ka: Eventuell kann man hiermit die Höhe bestimmen, in der der Text dann über dem Balken schwebt.
  • appendPlus - stehen 3 oder mehr im Cap, hat das keine Auswirkung mehr auf die Cap-Geschwindigkeit, daher kann XVM auch nicht feststellen, wieviele da nu wirklich drin sind. Ist das hier true, wird an die 3 ein + angehängt.
  • Danach kann man einmal enemy und ally konfigurieren - der rote und der grüne Balken.
  • primaryTitleFormat und secondaryTitleFormat beinhalten den Text über bzw. unter dem Balken. Wieder hüsch formatierbar und auch Verweise aufs Lokalisierungs-Dingenskirchen dürfen nicht fehlen.
  • captureDoneFormat ist für den Text zuständig, wenn das Cappen beendet wurde. Wiedermal ein Verweis aufs Lokalisierungs-File.
  • Mit extra kann man anpassen, was das {{extra}}-Makro (verwendet in primaryTitleFormat) macht.
  • shadow lässt einen wieder einen Schatten bauen.

wot_capbar.jpg

top


minimap...xc
Die MiniMap-Konfiguration wurde in mehrere Dateien gesplittet. minimap.xc ist der "Einstiegspunkt" der auf die weiteren Dateien verweist.

minimap.xc:
Code:
/**
 * General parameters for minimap.
 */
{
  "minimap": {
    // false - Disable.
    "enabled": true,
    // Map image transparency.
    "mapBackgroundImageAlpha": 100,
    // Self icon transparency. White pointing arrow.
    "selfIconAlpha": 100,
    // Camera transparency and its attached geometry (green triangle).
    "cameraAlpha": 100,
    // Vehicles icon size. Does not affect attached geometry and textfields. Floating point allowed: 0.7, 1.4.
    "iconScale": 1,
    // Map zoom by key pressing. Key is defined at file "hotkeys.xc".
    "zoom": {
      // Number of pixels to get back from maximum size (screen height-minimap height).
      "pixelsBack": 160,
      // false - does not set zoomed minimap at display center.
      "centered": true
    },
    // Minimap labels.
    "labels": ${"minimapLabels.xc":"labels"},
    // Minimap circles.
    "circles": ${"minimapCircles.xc":"circles"},
    // Minimap lines.
    "lines": ${"minimapLines.xc":"lines"},
    // Square of the maximum units appearance (1000 m).
    "square" : {
      "enabled": false,
      // Show square if using artillery\SPG vehicle.
      "artilleryEnabled": false,
      "thickness": 0.7,
      "alpha": 40,
      "color": "0xFFFFFF"
    }
  }
}

  • enabled* - der obligatorische Schalter
  • mapBackgroundImageAlpha legt die Transparenz in Prozent des Kartenhintergrundbildes fest (also die Map als Bild halt ^^).
  • selfIconAlpha legt die Transparenz des eigenen Markers fest - dieses weisse Dreieck, was einen auf der Map selbst darstellt).
  • cameraAlpha legt die Transparenz des "Kamera-Bildes" fest (also das grüne "dreieckige" etwas, was die Blickrichtung darstellt).
  • iconScale legt die Größe der Panzer-Icons auf der Karte fest - ist ein Gleitkomma (Floating Point) Wert -> 0.8 oder 1.74 geht also auch.
  • zoom* ist für den Karten-Zoom zuständig. In der hotkeys.xc-Datei hat man dafür ja die Taste festgelegt. Wurde da enabled auf true gesetzt, wird dies hier wirksam. Mit centered legt man dann fest, ob die Karte "aus ihrer Ecke heraus" vergrößert wird (false), oder ob sie zentriert angezeigt und dort vergrößert wird (true). Dieses pixelsBack gibt an, um wieviel Pixel die vergrößerte Map verkleinert wird. Klingt irgendwie doof, also nochmal genauer: Die maximale Darstellungshöhe der Minimap wäre die Bildschirmhöhe. Bei Full-HD mit 1920x1080 Pixeln wäre das also eine Höhe von 1080 Pixeln. Davon wird nun der hier angegebene Wert abgezogen und in der daraus resultierenden Größe gemalt. In unserem Full-HD-Beispiel wäre die vergrößerte Minimap also 1080-160=920 Pixel hoch.
  • labels, circles und lines verweisen auf die Jeweiligen (Unter-)Dateien und den entsprechenden Block.
  • square*bildet hier den Abschluss und erzeugt ein Rechteck um das Fahrzeug herum, das die Darstellungsentfernung für Gegner darstellen soll. Ihr seht einen auf der Minimap, aber nicht auf dem Bildschirm? Wenn er ausserhalb dieses Rechtecks auf der Minimap zu sehen ist, wisst ihr von nun an wieso ^^ enabled... sparen wir uns die Worte, artilleryEnabled aktiviert das Ganze auch, wenn man in einer Arty sitzt (da man in der Vogelperspektive nicht daran gebunden ist, kann es mancher hier als überflüssig betrachten, zudem wird es wohl um die Kamera-Position herum gemalt, was den Sinn nochmals Schmälert) und abschließend wieder die Formatierungen für die Dicke, Transparenz und Farbe.


minimapLabels.xc:
Code:
/**
 * Minimap labels. Basic HTML/CSS supported.
 */
{
  "labels": {
      // {{vehicle-class}} macro substitutions.
      "vehicleclassmacro": {
        // LT / ЛT ♦.
        "light": "\u2022",
        // MT / СТ.
        "medium": "\u2022",
        // HT / ТТ.
        "heavy": "\u2022",
        // TD / ПТ ▼.
        "td": "\u2022",
        // Artillery / Арта. ■
        "spg": "\u25AA",
        // HeavyTank10 by gui_settings.xml.
        "superh": "\u2022"
        // Special symbols website
        // http://www.fileformat.info/info/unicode/char/25a0/index.htm
        // Great symbolic font by Andrey_Hard for {{vehicle-class}}:
        // http://goo.gl/d2KIj
      },
      // Textfields for tanks on minimap.
      "units": {
        // Textfields switch for revealed units.
        "revealedEnabled": true,
        // Textfields switch for lost enemy units. Show last seen position.
        "lostEnemyEnabled": true,
        "format": {
          "ally":           "<span class='mm_a'>{{vehicle}}</span>",
          "teamkiller":     "<span class='mm_t'>{{vehicle}}</span>",
          "enemy":          "<span class='mm_e'>{{vehicle}}</span>",
          "squad":          "<textformat leading='-2'><span class='mm_s'><i>{{nick%.5s}}</i>\n{{vehicle}}</span><textformat>",
          // Own marker or spectated subject.
          "oneself":        "",
          // Out of radio range ally
          "lostally":       "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_la'><i>{{vehicle}}</i></span>",
          // Out of radio range teamkiller
          "lostteamkiller": "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_lt'><i>{{vehicle}}</i></span>",
          // Lost enemy units.
          "lost":           "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_l'><i>{{vehicle}}</i></span>",
          // Out of radio range squadman
          "lostsquad":      "<textformat leading='-4'><span class='mm_dot'>{{vehicle-class}}</span><span class='mm_ls'><i>{{nick%.5s}}</i>\n   {{vehicle}}</span><textformat>",
          "deadally":       "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_da'></span>",
          "deadteamkiller": "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_dt'></span>",
          "deadenemy":      "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_de'></span>",
          "deadsquad":      "<span class='mm_dot'>{{vehicle-class}}</span><span class='mm_ds'><i>{{nick%.5s}}</i></span>"
        },
        // CSS style (fonts and colors option)
        "css": {
          "ally":            ".mm_a{font-family:$FieldFont; font-size:8px; color:#C8FFA6;}",
          "teamkiller":      ".mm_t{font-family:$FieldFont; font-size:8px; color:#A6F8FF;}",
          "enemy":           ".mm_e{font-family:$FieldFont; font-size:8px; color:#FCA9A4;}",
          "squad":           ".mm_s{font-family:$FieldFont; font-size:8px; color:#FFD099;}",
          "oneself":         ".mm_o{font-family:$FieldFont; font-size:8px; color:#FFFFFF;}",
          "lostally":       ".mm_la{font-family:$FieldFont; font-size:8px; color:#C8FFA6;} .mm_dot{font-family:Arial; font-size:17px; color:#B4E595;}",
          "lostteamkiller": ".mm_lt{font-family:$FieldFont; font-size:8px; color:#A6F8FF;} .mm_dot{font-family:Arial; font-size:17px; color:#00D2E5;}",
          "lost":            ".mm_l{font-family:$FieldFont; font-size:8px; color:#FCA9A4;} .mm_dot{font-family:Arial; font-size:17px; color:#E59995;}",
          "lostsquad":      ".mm_ls{font-family:$FieldFont; font-size:8px; color:#FFD099;} .mm_dot{font-family:Arial; font-size:17px; color:#E5BB8A;}",
          "deadally":       ".mm_da{font-family:$FieldFont; font-size:8px; color:#6E8C5B;} .mm_dot{font-family:Arial; font-size:17px; color:#004D00;}",
          "deadteamkiller": ".mm_dt{font-family:$FieldFont; font-size:8px; color:#5B898C;} .mm_dot{font-family:Arial; font-size:17px; color:#043A40;}",
          "deadenemy":      ".mm_de{font-family:$FieldFont; font-size:8px; color:#996763;} .mm_dot{font-family:Arial; font-size:17px; color:#4D0300;}",
          "deadsquad":      ".mm_ds{font-family:$FieldFont; font-size:8px; color:#997C5C;} .mm_dot{font-family:Arial; font-size:17px; color:#663800;}"
        },
        // Fields shadow.
        "shadow": {
          "ally":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 4 },
          "teamkiller":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 4 },
          "enemy":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 4 },
          "squad":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 4 },
          "oneself":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 4 },
          "lostally":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 6, "strength": 4 },
          "lostteamkiller":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 6, "strength": 4 },
          "lost":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 6, "strength": 4 },
          "lostsquad":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 6, "strength": 4 },
          "deadally":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 3 },
          "deadteamkiller":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 3 },
          "deadenemy":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 3 },
          "deadsquad":
           { "enabled": true, "color": "0x000000", "distance": 0, "angle": 45, "alpha": 80, "blur": 3, "strength": 3 }
        },
        // Field offset relative to current icon (except lost - relative to enemy last seen position).
        "offset": {
          "ally":           {"x": 3, "y": -1},
          "teamkiller":     {"x": 3, "y": -1},
          "enemy":          {"x": 3, "y": -1},
          "squad":          {"x": 3, "y": -2},
          "oneself":        {"x": 0, "y": 0},
          "lostally":       {"x": -5, "y": -11},
          "lostteamkiller": {"x": -5, "y": -11},
          "lost":           {"x": -5, "y": -11},
          "lostsquad":      {"x": -5, "y": -11},
          "deadally":       {"x": -5, "y": -11},
          "deadteamkiller": {"x": -5, "y": -11},
          "deadenemy":      {"x": -5, "y": -11},
          "deadsquad":      {"x": -5, "y": -11}
        },
        "alpha" : {
          "ally": 100,
          "teamkiller": 100,
          "enemy": 100,
          "squad": 100,
          "oneself": 100,
          "lostally": 70,
          "lostteamkiller": 70,
          "lost": 70,
          "lostsquad": 70,
          "deadally": 50,
          "deadteamkiller": 50,
          "deadenemy": 0,
          "deadsquad": 50
        }
      },
      // Textfield for map side size. 1000m, 700m, 600m.
      "mapSize": {
        "enabled": true,
        "format": "<b>{{cellsize}}0 m</b>",
        "css": "font-size:10px; color:#FFCC66;",
        "alpha": 80,
        "offsetX": 0,
        "offsetY": 0,
        "shadow": { // Тень.
          "enabled": true,
          "color": "0x000000",
          "distance": 0,
          "angle": 0,
          "alpha": 80,
          "blur": 2,
          "strength": 3
        },
        // Decrease sizes in case of map image weird shrinking while map resize.
        // Increase sizes in case of field being partially cut off.
        "width": 100,
        "height": 30
      }
    }
}

  • das vehicleclassmacro legt das aussehen der Symbole für verschwundene Gegner fest, welches mit dem {{vehicle-class}}-Makro platziert werden kann. Wird ein Gegner gespottet und verschwindet wieder, bleibt an der zuletzt gesichteten Position dann das hier angegebene Zeichen auf der Map. Hier kann man auch wieder mit sowas wie Windings experimentieren wenn man mag und andere Symbole suchen ^^ Oder man zieht sich das Font (Schriftart) von diesem Andrey_Hard, was im Kommentar erwähnt wird und steckt es in seinen Windows-Font-Ordner - sieht top aus :daumen: Verwendung prinzipiell ebenfalls wieder wie mit dem Windings-Font. Bildchen gehen mittels "<img src='xvmres://icons/MM_bar/m{{c:hp-ratio}}.png'>" als Beispiel natürlich auch. Das Bild müsste dann im Ordner "res_mods\xvm\res\icons\MM_bar" hinterlegt sein. Und wie man Am Beispiel auch sieht: Makros kann man hier auch sehr geschickt nutzen - für Lebensbalken meinetwegen. Also nicht zwingend bei den vehicle-class Teilen, aber weiter unten dann).
  • in units kann man mittels revealedEnabled und lostEnemyEnabled entscheiden, ob man die Textfelder auf der Map mit ausgeben will (einmal für aufgedeckte Gegner und nochmal für die wieder verlorenen). Setzt man das hier false, sieht man wie gewohnt nur die Symbole. Mit format kann man dann die einzelnen Texte an sich bearbeiten. Hier wird mit CSS (cascading style sheets) gearbeitet (der Text selbst ist im CSS-formatierten (class-Parameter) span-Tag untergebracht), was man nachfolgend auch gleich anpassen kann. Hier sieht man auch, dass standardmäßig nur bei den Squad-Membern der Nick (per Makro-Formatierung auf 5 Zeichen begrenzt) mit ausgegeben wird. Kann man ja aber hier selbst nach Belieben ändern :)
  • Wie angesprochen, kann man im css Teil die CSS-Klassen bearbeiten. Dem Punkt folgt der Klassen-Name (hier zum bsp mm_a), welcher dann im span-Tag benutzt werden kann, und daraufhin in geschwungenen Klammern die eigentliche Formatierung.
  • shadow dürfte mittlerweile klar sein denk ich mal ^^, mit offset kann man den Text in Relation zum Icon noch anpassen. x von links nach rechts und y von oben nach unten - kann bei Bildchen oder Symbolen helfen, die nicht exakt dort angezeigt werden, wo sie hinsollen. Und abschließend ist alpha noch mal für einzelnen Transparenzen der Icons zuständig.
  • Mit mapSize bearbeitet man dann noch das kleine Textfeld oben links in der Karte, welche die Map-Größe ausgibt (600m Kantenlänge meinetwegen). enabled wieder der an/aus Schalter, format stellt die eigentliche Ausgabe dar, css wieder die Formatierung und alpha sowie offsets und shadow sollten klar sein, denk ich mal. Was width und height da am Ende noch machen erschließt sich mir auf die Schnelle auch nicht ^^
In formats (im units-Block) lassen sich auch wieder Makros verwenden. Welche, wird wieder in der "macros.txt" ("res_mods\xvm\doc") ersichtlich:
Code:
In Minimap:
{{nick}} - player nickname with clan name
{{name}} - player nickname without clan name
{{clan}} - clan name with brackets (empty if no clan)
{{clannb}} - clan name without brackets
{{vehicle}} - vehicle name
{{vehiclename}} - vehicle system name (usa-M24_Chaffee)
{{vtype}} - vehicle type (text substitution from config)
{{c:vtype}} - color depending on vehicle type
{{veh-id}} - vehicle id
{{level}} - vehicle level (Arabic numerals)
{{rlevel}} - vehicle level (Roman numerals)
{{battletier}} - guessed current battle tier
{{squad}} - value 'sq' for own squad, empty for others
{{squad-num}} - number of squad (1,2,...), empty if not in squad
{{alive}} - 'alive' for alive, '' for dead
{{frags}} - current frags
{{c:system}} - system color
{{vehicle-class}} - places special symbol depending on subject vehicle class
{{cellsize}} - minimap cell side size
{{vehicle-short}} - shortened vehicle name

// nur mit aktiviertem allowHpInPanelsAndMinimap aus der [al=a5]battle.xc[/al]
{{hp}} - current health points
{{hp-ratio}} - current health ratio (without '%' sign)
{{hp-max}} - maximum health points
{{c:hp}} - color depending on current health points (only in vehicle markers)
{{c:hp-ratio}} - color depending on current health ratio (only in vehicle markers)
{{a:hp}} - transparency depending on current health points (only in vehicle markers)
{{a:hp-ratio}} - transparency depending on current health ratio (only in vehicle markers)
{{vehicle-short}} lässt sich in der vehicleNames.xc anpassen.



minimapCircles.xc:
Code:
/**
 * Minimap circles. Only real map meters. Only for own unit.
 */
{
    "circles": {
        "enabled": true,
        // TODO: better description and translation
        // View distance
        // Parameters:
        //   "enabled": false - disable
        //   "distance" - radius around own tank on minimap
        //   "scale" - scaling-factor for distance (not required)
        //   "thickness" - thickness of circle-line
        //   "alpha" - transparency
        //   "color" - color
        //   "state" - the state of the tank: 1-standing, 2-moving (not required) 
        // Available values for parameter distance:
        //   N - number in meters, static circle drawn
        //   "blindarea" - real limit to the blind zone of the tank (50 <= X <= 445)
        //   "dynamic"   - real sight range coverage worth considering tank standing / moving
        //   "standing"  - real sight range for standing tanks
        //   "motion"    - real sight range of the review of the tank in motion 
        // Source:
        //   http://www.koreanrandom.com/forum/topic/15467-/page-5#entry187139
        //   http://www.koreanrandom.com/forum/topic/15467-/page-4#entry186794
        "view": [
            // Main circles:
            { "enabled":  true, "distance": "blindarea", "scale": 1, "thickness": 0.75, "alpha": 80, "color": "0x3EB5F1" },
            { "enabled":  true, "distance": 445,         "scale": 1, "thickness":  1.1, "alpha": 45, "color": "0xFFCC66" },
            // Additional circles:
            { "enabled": false, "distance": 50,          "scale": 1, "thickness": 0.75, "alpha": 60, "color": "0xFFFFFF" },
            { "enabled": false, "distance": "standing",  "scale": 1, "thickness":  1.0, "alpha": 60, "color": "0xFF0000" },
            { "enabled": false, "distance": "motion",    "scale": 1, "thickness":  1.0, "alpha": 60, "color": "0x0000FF" },
            { "enabled": false, "distance": "dynamic",   "scale": 1, "thickness":  1.0, "alpha": 60, "color": "0x3EB5F1" }
        ],
        // Maximum range of fire for artillery
        // Artillery gun fire range may differ depending on vehicle angle relative to ground
        // and vehicle height positioning relative to target. These factors are not considered.
        // See pics at http://goo.gl/ZqlPa
        "artillery": { "enabled": true, "alpha": 55, "color": "0xFF6666", "thickness": 0.5 },
        // Maximum range of shooting for machine gun
        // Максимальная дальность полета снаряда для пулеметных танков
        "shell":     { "enabled": true, "alpha": 55, "color": "0xFF6666", "thickness": 0.5 },
        // Special circles dependent on vehicle type.
        // Many configuration lines for the same vehicle make many circles.
        // See other vehicle types at (replace : symbol with -):
        // http://code.google.com/p/wot-xvm/source/browse/trunk/src/xpm/xvmstat/vehinfo_short.py
        "special": [
          // Example: Artillery gun fire range circle
          // "enabled": false - выключен; "thickness" - толщина; "alpha" - прозрачность; "color" - цвет.
          //{ "ussr-SU-18": { "enabled": true, "thickness": 1, "alpha": 60, "color": "0xEE4444", "distance": 500 } },
        ]
    }
}
Hiermit kann man Kreise angeben, die dann um die eigene Position herum gezeichnet werden (natürlich auch nur fürs eigene Fahrzeug gültig).

  • enabled de/aktiviert das ganze wieder
  • im view-Array gibt man beliebig viele "Haupt-Kreise" an, wohingegen man mit dem special-Array Fahrzeugbezogene Kreise anlegen kann. Hier beispielsweise mit den Arty Reichweiten gemacht. Aber auch zum Bsp. Funkreichweiten der Panzer sind so realisierbar. Mit artillery kann man einen Kreis zeichnen lassen, der die Schussweite der eigenen Arty anzeigt und mit shell wird ebenfalls ein Schussweiten-Kreis gezeichnet - diesmal allerdings für normale Panzer, bei denen die Reichweite begrenzt ist (Bsp: T1-Cunningham mit der MG-Wumme da).
  • Jeden Kreis kann man mittels enable einzeln de/aktivieren, den Radius in Metern* angeben (distance), die Kreis-Linien-Dicke bestimmen (thickness) sowie die Transparenz (alpha) und Farbe (color) festlegen. scale ist optional und ich hab noch nicht herausgefunden, wozu das gut sein soll :ka: Ebenfalls optional ist state, dessen Sinn erschließt sich jedoch recht fix: Ist state 1, so wird der betreffende Kreis nur angezeigt, wenn der Panzer steht. Ist es 2, dann gilt das nur, wenn er fährt. Bei der Farbe kann man das 0x ignorieren, die hinteren 6 Zeichen stellen als Hexadezimalwerte die Farbkomponenten Rot, Grün und Blau (in der Reihenfolge) dar. Für jede Komponente kann man Werte von 00 (dezimal 0 -> nicht vergeben) bis FF (dezimal 255 -> voll vergeben). FF0000 wäre dann bspw. ein kräftiges Rot (voller Rot-Anteil und keinerlei Grün- oder Blau-Anteile). Zum selber suchen, kann diese Seite eventuell erwähnt werden: Hex-Farbcode-Tabelle . Bei special muss der Fahrzeug-Name in Gänsefüßchen noch davor. Mehrere Kreise für ein Fahrzeug? Einfach mehrere Kreis-Zeilen mit dem selben Fahrzeug-Namen erstellen.
  • * nochmal zu den Metern: Im view-Array kann man hier auch die Sonderwerte blindarea, dynamic, standing und motion eintragen. blindarea bewirkt hierbei einen dynamischen Kreis, der jedoch von den Kreisen 50m-Proxy-Spot und 445m-Max-Spot (egal ob angezeigt oder nicht) begrenzt wird - er kann also diese Grenzen nich unter- oder überschreiten. Das dynamische dabei ist, dass sich der Kreis erweitert, sobald ein verbautes Scherenfernrohr aktiv wird und auch verbaute Optiken werden berücksichtigt. Crewskills aber glaube ich nicht. dynamic ist quasi das selbe, nur das es nicht begrenzt ist. standing zeigt IMMER den erweiterten "Scherenfernrohr-Kreis" an - ob man nun son ding verbaut hat oder nicht -.- motion hingegen den Standard-Sichtweiten-Kreis (also ohne alles). Ich habe für mich zwei dynamic-Kreise mit state-Parameter konfiguriert, so dass der im stehen dann etwas deutlicher sichtbar ist.


minimapLines.xc:
Code:
/**
 * Minimap lines. Only for owned vehicle.
 */
{
  "lines": {
       "enabled": true,
       // "inmeters": true  - make line size to be in real map meters.
       // "inmeters": false - make line size to be in minimap interface clip points. Minimap interface clip side is 210 points.
       // Distance between farthest corners at 1km map is somewhat more than 1400 meters.
       // Sections can contain any number of lines.
       // To set a point try setting line with length of one and large thickness.
       // You can leave one line for simplicity. Remember comma positioning rules.
       //---------------------------------------------------------------------------------------------------
       // Own vehicle direction.
       "vehicle": [
         { "enabled": false, "from": 20,  "to": 300, "inmeters": false, "thickness": 0.4, "alpha": 35, "color": "0xFFCC66"}
       ],
       // Camera direction.
       "camera": [
         { "enabled": false, "from": 50,  "to": 100, "inmeters": true, "thickness": 2,   "alpha": 60, "color": "0xEE0044"},
         { "enabled": false, "from": 200, "to": 300, "inmeters": true, "thickness": 1.5, "alpha": 45, "color": "0xEE0044"},
         { "enabled": false, "from": 350, "to": 445, "inmeters": true, "thickness": 1,   "alpha": 30, "color": "0xEE0044"}
       ],
       // Gun traverse angles may differ depending on vehicle angle relative to ground. See pics at http://goo.gl/ZqlPa
       //---------------------------------------------------------------------------------------------------
       // Horizontal gun traverse angle lines.
       "traverseAngle": [
         { "enabled": true, "from": 20,  "to": 300, "inmeters": false, "thickness": 0.4, "alpha": 35, "color": "0xFFCC66"}
       ]
    }
}
Hiermit werden - wie unschwer zu erraten - Linien auf der Map erzeugt.

  • Der obligatorische an/aus Schalter wurde auch hier in Form von enabled nicht vergessen. vehicle, camera und traverseAngle arbeiten im Grunde alle gleich: Man setzt sich EINE Linie aus mehrere Teil-Linien zusammen - oder eben nur eine einzige Linie, wenn einem das reicht. Mehrere Zeilen bedeuten hier also nicht, dass man mehrere Linien (in verschiedenen Richtungen) erzeugt, sondern dass man sich eine Linie zusammenbasteln kann. Meinetwegen im Biene-Maja Stil in abwechselndem Schwarz und Gelb :ugly: vehicle gibt hierbei die Ausrichtung des eigenen Fahrzeugs an, camera die eigene Blickrichtung und traversAngel baut bei Fahrzeugen ohne Turm, die nur einen begrenzten Richtbereich haben, je eine Linie als linken und eine als rechten Begrenzer. "Punkte" können auch realisiert werden, indem man unheimlich kurze, aber dafür unheimlich dicke... *hust* äh, Linien-Segmente anlegt ^^
wot_minimap.jpg

top


markers...xc
Das ist der größte Abschnitt der Config und bezieht sich auf die Lebensbalken über den Panzern (ehemals als OTM - OverTargetMarkers bekannt). Der Grundaufbau lässt sich in der markers.xc gut erkennen und gestaltet sich folgendermaßen:
Code:
/**
 * Over-target markers. All settings moved to separate files.
 */
{
  "markers": {
    "ally": {
      "alive": {
        "normal": ${"markersAliveNormal.xc":"ally"},
        "extended": ${"markersAliveExtended.xc":"ally"}
      },
      "dead": {
        "normal": ${"markersDeadNormal.xc":"ally"},
        "extended": ${"markersDeadExtended.xc":"ally"}
      }
    },
    "enemy": {
      "alive": {
        "normal": ${"markersAliveNormal.xc":"enemy"},
        "extended": ${"markersAliveExtended.xc":"enemy"}
      },
      "dead": {
        "normal": ${"markersDeadNormal.xc":"enemy"},
        "extended": ${"markersDeadExtended.xc":"enemy"}
      }
    }
  }
}
Man erkennt, das die Grundätzliche Unterteilung in die zwei großen Abschnitte für ally (die eigenen) und enemy (die pösen Gegner) unterteilt wurde und diese wiederrum jeweils in alive und dead - also was wird angezeigt, wenn der entsprechende Panzer zerstört ist (dead) oder eben nicht (alive). Da es ja jedesmal noch den alternativen Anzeigemodus gibt (wenn man Alt ingame drückt), wird dies jeweils nochmals unterteilt in normal und extended (die Ansicht, während man Alt drückt). Und eben jene "untersten Ebenen" referenzieren dann die einzelnen detaillierten .xc Dateien (markersAliveNormal.xc, markersDeadNormal.xc, markersAliveExtended.xc und markersDeadExtended.xc).

Diese enthalten dann jeweils in etwa den folgenden Code zwei mal - einmal für die eigenen und einmal für die gegner. Die selben Dateien werden hier also zweimal referenziert - nur mit dem jeweils entsprechenden Block als Angabe (${"markersAliveNormal.xc":"ally"} bzw. ${"markersAliveNormal.xc":"enemy"}). Los gehts mit einem frei definierten damageText-Block:
Code:
/**
 * Options for alive without Alt markers.
 */
{
  // Floating damage values.
  "damageText": {
    // false - disable
    "visible": true,
    // Axis field coordinates
    "x": 0,
    "y": -67,
    // Opacity (dynamic transparency allowed, see readme-en.txt).
    "alpha": 100,
    // Color (dynamic colors allowed, see readme-en.txt).
    "color": null,
    "font": {
      "name": "$FieldFont",           // Font name
      "size": 18,                     // Font size
      "align": "center",              // Text alignment (left, center, right)
      "bold": false,                  // True - bold
      "italic": false                 // True - italic
    },
    "shadow": {
      "alpha": 100,                   // Opacity
      "color": "0x000000",
      "angle": 45,                    // Offset angle
      "distance": 0,                  // Offset distance
      "size": 6,
      "strength": 200                 // Intensity
    },
    // Rising speed of displayed damage (float up speed).
    "speed": 2,
    // Maximimum distance of target for which damage rises.
    "maxRange": 40,
    // Text for normal damage (see description of macros in the readme-en.txt).
    "damageMessage": "{{dmg}}",
    // Text for ammo rack explosion (see description of macros in the readme-en.txt).
    "blowupMessage": "{{l10n:blownUp}}"
  },

  • visible ist der an/aus Schalter und x und y wieder die Startposition (mittig des Textes/des Schadens). alpha und color... ne ;) und mit font kontrolliert man noch die Schriftart. $FieldFont ist einfach die von WoT verwendete Schriftart. align ist die Textausrichtung - center bedeuted eben zentriert (daher ist x und y auch mittig - ändert man das align, ändert sich auch das Verhalten mit der Positionierung). bold und italic sind Regler für fette oder kursive Schrift. schadow das Übliche. speed gibt die Geschwindigkeit an, mit der der Text nach oben huscht und maxRange wie weit nach oben. Bei damageMessage wird angegeben, was denn überhaupt dort durch die Gegend huscht - hier wird sinnigerweise das {{dmg}}-Makro genutzt. Was man weiter nutzen kann, entnimmt man wie üblich der readme-en.txt (siehe am Ende dieses Abschnitts). Bspw. könnte man einen weiteren Block damageTextAlt erstellen (den hier kopieren, einfügen und umbenennen), der dann hier statt "{{dmg}}" "{{dmg-ratio}}\u0025" nutzt. Damit würde angezeigt werden, wieviel Prozent des Lebens der Treffer abgezogen hat und das \u0025 stellt einen Code (Unicode Character 'PERCENT SIGN' (U+0025)) für das %-Zeichen dar. Die blowupMessage lässt einen die Textausgabe für einen Ammorack-Hit (Munitionslager) anpassen (normalerweise "BlowUp"). Hier sind der Fantasie natürlich keine Grenzen gesetzt ^^
Weiter geths mit dem eigentlichen Part. Ich habe hier nur einmal den ally-Block herausgegriffen, da sich der enemy-Block vom Grundaufbau nicht unterscheidet:


Code:
  "ally": {
    // Type of vehicle icon (HT/MT/LT/TD/Arty).
    "vehicleIcon": {
      // false - disable
      "visible": true,
      // true - show speaker even if visible=false
      "showSpeaker": false,
      // Axis field coordinates
      "x": 0,
      "y": -16,
      // Opacity.
      "alpha": 100,
      // Color (currently not in use).
      "color": null,
      // Maximum scale (default is 100).
      "maxScale": 100,
      // Offset along the X axis (?)
      "scaleX": 0,
      // Offset along the Y axis (?)
      "scaleY": 16,
      "shadow": {
        "alpha": 100,                   // Opacity
        "color": "0x000000",
        "angle": 45,                    // Offset angle
        "distance": 0,                  // Offset distance
        "size": 6,
        "strength": 200                 // Intensity
      }
    },
    "healthBar": {
      "visible": true,
      "x": -41,
      "y": -33,
      "alpha": 100,
      "color": null,
      "lcolor": null,
      "width": 80,
      "height": 12,
      "border": {
        "alpha": 30,
        "color": "0x000000",
        "size": 1
      },
      "fill": {
        "alpha": 30
      },
      "damage": {
        "alpha": 80,
        "color": null,
        "fade": 1
      }
    },
    // Floating damage values for ally, player, squadman.
    "damageText": {
      "$ref": { "path":"damageText" }
    },
    "damageTextPlayer": {
      "$ref": { "path":"damageText" }
    },
    "damageTextSquadman": {
      "$ref": { "path":"damageText" }
    },
    // Vehicle contour icon.
    "contourIcon": {
      // false - disable
      "visible": false,
      // Axis field coordinates.
      "x": 6,
      "y": -65,
      // Opacity (dynamic transparency allowed, see readme-en.txt).
      "alpha": 100,
      // Color (dynamic colors allowed, see readme-en.txt).
      "color": null,
      // Color intensity from 0 to 100. The default is 0 (off).
      "amount": 0
    },
    // Player or clan icon.
    "clanIcon": {
      "visible": false,  // false - disable
      "x": 0,            // Position on the X axis
      "y": -67,          // Position on the Y axis
      "w": 16,           // Width
      "h": 16,           // Height
      // Opacity (dynamic transparency allowed, see readme-en.txt).
      "alpha": 100
    },
    // Vehicle tier.
    "levelIcon": {
      "visible": false,  // false - disable
      "x": 0,            // Position on the X axis
      "y": -21,          // Position on the Y axis
      "alpha": 100       // Opacity
    },
    // Markers "Help!" and "Attack!".
    "actionMarker": {
      "visible": true,   // false - disable
      "x": 0,            // Position on the X axis
      "y": -67,          // Position on the Y axis
      "alpha": 100       // Opacity
    },
    // Block of text fields.
    "textFields": [
      // Text field with the name of the tank.
      {
        "name": "Tank name",
        "visible": true,
        "x": 0,
        "y": -36,
        "alpha": 100,
        "color": null,
        "font": {
          "name": "$FieldFont",
          "size": 13,
          "align": "center",
          "bold": false,
          "italic": false
        },
        "shadow": {
          "alpha": 100,
          "color": "0x000000",
          "angle": 45,
          "distance": 0,
          "size": 6,
          "strength": 200
        },
        "format": "{{vehicle}}{{turret}}"
      },
      // Text field with the remaining / maximum health.
      {
        "name": "Tank HP",
        "visible": true,
        "x": 0,
        "y": -20,
        "alpha": 100,
        "color": "0xFCFCFC",
        "font": {
          "name": "$FieldFont",
          "size": 11,
          "align": "center",
          "bold": true,
          "italic": false
        },
        "shadow": {
          "alpha": 100,
          "color": "0x000000",
          "angle": 45,
          "distance": 0,
          "size": 4,
          "strength": 100
        },
        "format": "{{hp}} / {{hp-max}}"
      }
    ]
  }

  • vehicleIcon stellt eben das Icon für den Fahrzeugtyp dar. Ist es eine Arty oder ein Heavy usw. Mit visible kann man die Anzeige des Icon aus- oder einschalten, showSpeaker könnte für VoIP sein - kenn ich selber jetzt garnicht - und x und y sind wieder für die Ausrichtung zuständig. Ausgegangen wird von der Mitte des Markers, will man das Teil also etwas höher setzen, müsste man x verringern -> negative Werte. Das selbe für y wenn man es zum Beispiel links neben den Lebensbalken setzen möchte. alpha ist wieder die Transparenz, color bisher ohne Nutzen. Mit maxScale kann man beeinflussen, wie groß das Icon wird (weiter entfernte Panzer haben ein kleineres Symbol). scaleX und scaleY lassen einen noch beeinflussen, in welche Richtung diese Skalierung gehen soll - beides genullt bewirkt aber leider nicht, das es garnicht skaliert, dann wirds nur von der mitte heraus skaliert. Der obligatorische Schatten darf mit shadow natürlich auch nicht fehlen.
  • Die healthBar ist natürlich der Lebensbalken. Hier wird etwas genauer als im WoT-Original angezeigt, welcher Schaden verursacht wurde. So werden zwei aufeinanderfolgende Schüsse auch als eben das angezeigt, und nicht etwa wie im Originalen zusammengefasst. Auch hier kann man wieder mit visible das Element an- und ausschalten und mit x und y positionieren. alpha kennen wir mittlerweile und von den beiden (l)color Werten würde ich Abstand nehmen - das sieht total grottig aus, wenn man hier Werte einsetzt >< width und height lassen einen noch die Breite und Höhe in Pixeln angeben und border ist für den Rahmen des Lebensbalkens zuständig. Mit fill kann man die Transparenz der Restlebens-Anzeige bestimmen - die füllt ja nicht immer den ganzen Lebensbalken aus und mit damage die Schadens-Malus-Anzeige konfigurieren - die Anzeige im Lebensbalken, wieviel Schaden abgezogen wird. alpha bestimmt mal wieder die Transparenz, color ist die Farbe und fade bestimmt die Zeit in Sekunden, wie lange das Spektakel im Balken sichtbar bleiben soll. Je größer der Wert hier, desto länger sieht man den angerichteten Schaden als Balken-Abschnitt.
  • Mit damageText, damageTextPlayer und damageTextSquadman kann man die nach oben gleitenden Schadens-Zahlen beeinflussen. Hier wird jeweils auf den selben Abschnitt "verlinkt" (per Referenz an den Anfang des Config-Files), auf welchen ich eingangs zu sprechen kam. Wer Lust dazu hat, kann hier für alle drei damageText-Optionen eigene Blöcke entwerfen und diese so individualisieren.
  • Mit contourIcon kann man ggf. nochmals direkt auf dem Schlachtfeld über dem Panzer das Contour-Icon (was in den Teamlisten links und rechts auch zu sehen ist) ausgeben lassen. Das meiste sollte mittlerweile selbsterklärend sein und mit amount kann man angeben, wieviel Prozent (0-100 als Wert) der Originalfarbe erhalten bleiben soll. Bei 0 wird das ContourIcon dann szs. monochrom (einfarbig) dargestellt, bei 100 voll eingefärbt (normales aussehen).
  • Für clanIcon* (wie der Name schon vermuten lässt, kann man hiermit das Icon/Bildchen des Clans mit anzeigen lassen, dazu wird der clanicons-Ordner benötigt - erhältlich im monatlichen Update über den Download-Mirror-Link gaaaanz oben), levelIcon (die Tierstufe -> IV oder IX oder oder) und actionMarker (Hilferufe, Reload...) gilt das Gleiche wie bei den contourIcons. w und h (bei clanIcon) steht für die Breite und Höhe des Icons.
  • textFields* ist ein Array und lässt einen beliebig viele und verschiedenste Text-Felder anlegen und positionieren. Für ein neues Text-Feld einfach einen weiteren Block mittels {} anlegen (innerhalb der eckigen [] Array-Klammern) - das Komma vorm ehemals letzten Block nicht vergessen! Am besten einfach einen vorhandenen Block kopieren und anpassen. Das Meiste sollte eigentlich bekannt sein. Für die Textformatierung (global für dieses textField) kann man sich im font-Abschnitt austoben. Als name bspw. "Arial" genommen und man hat diese Schriftart ausgewählt. Auch die Farbe kann hier geändert werden. Der eigentliche Text wird in format angegeben und kann auch hier (lokal) nochmal formatiert werden - dazu braucht man dann aber den font-Tag aus HTML Will man also nun im rosa gefärbten Arial-Text *urgs* ^^ grüne Verdana-Schrift platzieren, so könnte man zum Bsp. folgendes Konstrukt mit font-Tag nutzen: "Hallo <font face='Verdana' color='green'>Bsp-Schrift</font> Welt". Würde dann in etwa sowas bei rauskommen: Hallo Bsp-Schrift Welt :ugly: . Alles ausserhalb des font-Tags wird durch font formatiert und alles innerhalb eben durch den font-Tag. Mit {{c:rating}} als color-Wert (<font color='{{c:rating}}'>) könnte man beispielsweise den Namen nach der Efficiency einfärben. Für markersAliveNormal.ally stehen hier nur die beiden Makros {{vehicle}}{{turret}} drin - es wird also am Ende sowas wie IS-2* dastehen. Wenn man den Turret-Marker weiter oben verändert, ändert sich hier dann eben auch die Ausgabe. Ich hatte bei mir ja statt des "*" nen " +" gemacht, damit ein Leerzeichen noch hinter dem Namen steht. ich hätte es auch bei "+" belassen können und hier bei format einfach zwischen die beiden Makros ein Leerzeichen hauen können ^^ viele Wege führen nach Rom. Hier nochmal der readme-en.txt-Ausschnitt:
Code:
    In tank markers:
      {{nick}}        - player nickname with clan name
      {{name}}        - player nickname without clan name
      {{clan}}        - clan name with brackets (empty if no clan)
      {{clannb}}      - clan name without brackets
      {{squad}}       - value '1' for own squad, empty for others
      {{vehicle}}     - vehicle name
      {{vehiclename}} - internal vehicle name (usa-M24_Chaffee)
      {{vtype}}       - vehicle type
      {{level}}       - vehicle level (Arabic numerals)
      {{rlevel}}      - vehicle level (Roman numerals)
      {{turret}}      - stock turret marker:
                          "*" symbol - stock turret, cannot mount top gun
                          "'" symbol - stock turret, top gun is possible
                          empty - top turret
      {{hp}}          - current health points
      {{hp-ratio}}    - current health ratio (without '%' sign)
      {{hp-max}}      - maximum health points
      {{dmg}}         - damage health points
      {{dmg-ratio}}   - damage health ratio (without '%' sign)
      {{dmg-kind}}    - damage kind (attack, fire, ramming, ...)
      {{c:hp}}        - color depended from current health points (only in vehicle markers)
      {{c:hp-ratio}}  - color depended from current health ratio (only in vehicle markers)
      {{c:dmg}}       - color depended from damage source
      {{c:dmg-kind}}  - color depended from damage kind
      {{c:vtype}}     - color depended from vehicle type
      {{c:system}}    - system color (disable override color)
      {{a:hp}}        - transparency depended from current health points (only in vehicle markers)
      {{a:hp-ratio}}  - transparency depended from current health ratio (only in vehicle markers)
      {{l10n:blownUp}}  - localizated text "Blown-up!", only in "blowupMessage"
      [B]+ statistics macros (see below)[/B]

      ...

        Statistics macros ('rating/showPlayersStatistics' must be anabled):
      {{avglvl}}      - average level (tier) of tanks
      {{eff}}         - player efficiency: http://wot-news.com/index.php/stat/calc/en/
      {{eff:4}}       - player efficiency aligned from left to 4 chars
      {{teff}}, {{e}} - player per-vehicle efficiency: http://www.koreanrandom.com/forum/topic/1643-
      {{wn}}          - WN6 rating: http://www.koreanrandom.com/forum/topic/2575-
      {{xeff}}        - XVM Scale for efficiency (values 00-99, XX for Tops)
      {{xwn}}         - XVM Scale for WN6 (values 00-99, XX for Tops)
      {{rating}}      - GWR (Global Win Ratio)
      {{rating:3}}    - GWR aligned from left to 3 chars
      {{battles}}     - total battles count
      {{wins}}        - total wins count
      {{kb}}          - number of kilo-battles (total battles count divided by 1000).
      {{kb:3}}        - number of kilo-battles aligned from left to 3 chars
      {{t-rating}}    - vehicle win ratio
      {{t-rating:3}}  - vehicle win ratio aligned from left to 3 chars
      {{t-battles}}   - total battles count for current vehicle
      {{t-battles:4}} - number of battles for current vehicle aligned from left to 4 chars
      {{t-wins}}      - total wins count for current vehicle
      {{t-kb}}        - number of kilo-battles for current vehicle
      {{t-kb-0}}      - number of kilo-battles for current vehicle with leading zero
      {{t-kb:4}}      - number of kilo-battles for current vehicle aligned from left to 4 chars
      {{t-hb}}        - number of hecto-battles for current vehicle (hecto = 100)
      {{t-hb:3}}      - number of hecto-battles for current vehicle aligned from left to 3 chars
      {{tdb}}, {{tdb:4}} - average damage for current tank - damage/battles
      {{tdv}} - average damage efficiency for tank - damage/(battles*maxHP)
      {{tfb}} - average frags per battle for current tank
      {{tsb}} - average number of spotted enemies per battle for current tank
      {{c:tdb}}, {{c:tdv}}, {{c:tfb}}, {{c:tsb}} - dynamic colors for this macros
      {{c:eff}}       - color depended from player efficiency
      {{c:e}}         - color depended from player per-vehicle efficiency
      {{c:wn}}        - color depended from WN6 rating
      {{c:xeff}}      - color depended from XVM Scale for efficiency
      {{c:xwn}}       - color depended from XVM Scale for WN6
      {{c:rating}}    - color depended from GWR
      {{c:kb}}        - color depended from kilo-battles
      {{c:avglvl}}    - color depended from average level of tanks
      {{c:t-rating}}  - color depended from current vehicle win ratio
      {{c:t-battles}} - color depended from current vehicle battles
      Any color macro you can change to transparency macro ({{a: tdb}}).

wot_otm.jpg

top


colors.xc
Dieser Komplex befasst sich mit der Konfiguration all unserer verfügbaren Farb-Makros: {{c:...}}. Da er auch ein wenig größer ist, werde ich ihn nicht komplett verewigen. Hier kann man jedenfalls alle möglichen Farben (nochmals der dezente Hinweis auf Seiten wie bspw. Hex-Farbcode-Tabelle ) ändern und den eigenen Vorlieben anpassen. So habe ich zum Beispiel fürs Hitlog die Fahrzeug-Klassen-Farben an Pogs Countour-Mod angepasst. Oder diese "WoW Configs", wo die Ratings nicht von Rot über Orange/Gelb zu Grün gehen, sondern die "epischen" Leute eben Lila sind usw. Nun gut, im ersten Part werden ein paar Grundlegende Farben definiert. Der Block heisst dementsprechend "def":
Code:
/**
 * Color settings.
 */
{
  // Color values for substitutions.
  "def": {
    "al": "0x96FF00", // ally
    "sq": "0xFFB964", // squadman
    "tk": "0x00EAFF", // teamKiller
    "en": "0xF50800", // enemy
    "pl": "0xFFDD33", // player
    // Dynamic color by various statistical parameters.
    "colorRating": {
      "very_bad":     "0xFE0E00",   // very bad
      "bad":          "0xFE7903",   // bad
      "normal":       "0xF8F400",   // normal
      "good":         "0x60FF00",   // good
      "very_good":    "0x02C9B3",   // very good
      "unique":       "0xD042F3"    // unique
    },
    // Dynamic color by remaining health points.
    "colorHP": {
      "very_low":         "0xFF0000",   // very low
      "low":              "0xDD4444",   // low
      "average":          "0xFFCC22",   // average
      "above_average":    "0xFCFCFC"    // above-average
    }
  },
Dieser Bereich ist szs völlig frei definierbar. Man kann fröhlich Zeugs hinzufügen oder umbennen (wenn man lieber "ally" statt "al" haben möchte - ausdruckskräftige Variablen-Namen ^^). Beim Umbenennen ist allerdings Vorsicht geboten! Werden diese Parameter im folgenden Code referenziert, dann müssen hier auch alle Referenzen angepasst werden (aus ${"def.al"} müsste dann dementsprechend ${"def.ally"} werden - überall). Man sollte es sich also gut überlegen, ob man sich das antun will (bzw bei selbst erstellten Parametern/Variablen vorher überlegen, wie man diese benennen mag). Vorteil des Ganzen habe ich ja schon öfters aufgegriffen (Kapselungs-Gefasel). Ein und die selben Farbwerte werden gerade hier öfters aufgegriffen (WN- oder EFF-Ratings werden in selben Farben dargestellt, genauso die Siegchancen usw) und können so allesamt mit einem Streich angepasst werden. Zusätzlicher Vorteil (sofern man die mitgebrachten Parameter wie "al" nicht umbenannt hat): Werden weitere "Ratings" und dergleichen hinzugefügt, nehmen die gleich ohne jegliche Zusatzkonfiguration die selbst getüdelten Werte an. Zum Bsp. kam erst kürzlich das Durchschnitts-Tier mit dem {{avglvl}}-Makro neu dazu. Da hier dann auch wieder die selben Parameter referenziert werden, wie bei vergleichbaren Makros (${"def.colorRating.normal"} meinetwegen), übernehmen die neuen Elemente gleich die alten Einstellungen.

Nun gehts quasi richtig los. Im folgenden Abschnitt kann man die "Grundfarben" einstellen:
Code:
"colors": {
    // System colors.
    "system": {
      // Format: object_state
      // Object:      ally, squadman, teamKiller, enemy
      // State:       alive, dead, blowedup
      "ally_alive":          ${"def.al"},
      "ally_dead":           "0x009900",
      "ally_blowedup":       "0x007700",
      "squadman_alive":      ${"def.sq"},
      "squadman_dead":       "0xCA7000",
      "squadman_blowedup":   "0xA45A00",
      "teamKiller_alive":    ${"def.tk"},
      "teamKiller_dead":     "0x097783",
      "teamKiller_blowedup": "0x096A75",
      "enemy_alive":         ${"def.en"},
      "enemy_dead":          "0x840500",
      "enemy_blowedup":      "0x5A0401"
    },
Die Parameter werden aus ally (Eigene), enemy (Gegner), squad (Zug) und Teamkiller (Schlumpf :P ) für die erste Position und alive und dead sowie blowedup (also Munilager-Tod) für die zweite Position kombiniert (<Posi1>_<Posi2>). Die Farbe für einen toten Feind gibt man also mit enemy_dead an. Ist man sadistisch veranlagt, kann man das eigene Team also auch rosa färben, wenn man mag xD Ja, hier werden - wie man sieht - erste zaghafte Verweise auf Farben aus dem "def"-Block genutzt.

dmg_kind (nicht Kind... englisch für Art ^^ nein nein nein, nicht Art(englisch) wie Kunst(dt), ihr macht mich fertig...) und vtype sind vorsätzlich für das Hitlog von Bedeutung, eventuell aber auch anderso noch nutzbar. dmg_kind lässt einen das {{c:dmg_kind}}-Makro anpassen, welches eben jenen hier gesetzten Farbwert zurückliefert (je nach Schadens-Art (wobei Schadens-Kunst auch gut klingt :ugly: ) eben) und vtype liefert Werte für das {{c:vtype}}-Makro. Je nach Panzer-Typ, wird der entsprechende Farbwert zurückgegeben. Für Premium-Panzer kann man auch nochmal eine extra Farbe angeben und mit usePremiumColor festlegen, ob das genutzt werden soll oder ob die auch nach der Klasse gefärbt werden sollen. Hier hab ich zum Bsp. die Farben an "meinen" (also meinen favorisierten) Contour-Mod angepasst. Ein T-28 (Medium) als Beispiel wäre dann im Hitlog in nem hellen Ocker/Beige-Ton eingefärbt. Mich hat das tierisch genervt, da beim Contour-Mod Mediums grün gefärbt sind und ich so daran gewöhnt war, dass ich das nicht intuitiv lesen konnte - also hab ich hier die Mediums eben grün gefärbt ^^ (und dem Rest selbstverständlich dann auch noch die jeweiligen Farben verpasst).

Den nächsten Teil find ich sehr interessant:
Code:
// Color settings for damage.
    "damage": {
      // Format: src_dst_type.
      // Src:  ally, squadman, enemy, unknown, player.
      // Dst:  ally, squadman, allytk, enemytk, enemy.
      // Type: hit, kill, blowup.
      "ally_ally_hit":        ${"def.tk"},
      "ally_ally_kill":        ${"def.tk"},
      "ally_ally_blowup":    ${"def.tk"},
      "ally_squadman_hit":    ${"def.tk"},
      "ally_squadman_kill":    ${"def.tk"},
      "ally_squadman_blowup":    ${"def.tk"},
      "ally_enemy_hit":        ${"def.en"},
      "ally_enemy_kill":    ${"def.en"},
      "ally_enemy_blowup":    ${"def.en"},
      "ally_allytk_hit":    ${"def.tk"},
      "ally_allytk_kill":    ${"def.tk"},
      "ally_allytk_blowup":    ${"def.tk"},
      "ally_enemytk_hit":    ${"def.en"},
      "ally_enemytk_kill":    ${"def.en"},
      "ally_enemytk_blowup":    ${"def.en"},
      "squadman_ally_hit":    ${"def.tk"},
      "squadman_ally_kill":    ${"def.tk"},
      "squadman_ally_blowup":    ${"def.tk"},
      "squadman_squadman_hit":    ${"def.tk"},
      "squadman_squadman_kill":    ${"def.tk"},
      "squadman_squadman_blowup":    ${"def.tk"},
      "squadman_enemy_hit":    ${"def.en"},
      "squadman_enemy_kill":    ${"def.en"},
      "squadman_enemy_blowup":    ${"def.en"},
      "squadman_allytk_hit":    ${"def.tk"},
      "squadman_allytk_kill":    ${"def.tk"},
      "squadman_allytk_blowup":    ${"def.tk"},
      "squadman_enemytk_hit":    ${"def.en"},
      "squadman_enemytk_kill":    ${"def.en"},
      "squadman_enemytk_blowup":${"def.en"},
      "enemy_ally_hit":        ${"def.al"},
      "enemy_ally_kill":    ${"def.al"},
      "enemy_ally_blowup":    ${"def.al"},
      "enemy_squadman_hit":    ${"def.sq"},
      "enemy_squadman_kill":    ${"def.sq"},
      "enemy_squadman_blowup":    ${"def.sq"},
      "enemy_enemy_hit":    ${"def.en"},
      "enemy_enemy_kill":    ${"def.en"},
      "enemy_enemy_blowup":    ${"def.en"},
      "enemy_allytk_hit":    ${"def.al"},
      "enemy_allytk_kill":    ${"def.al"},
      "enemy_allytk_blowup":    ${"def.al"},
      "enemy_enemytk_hit":    ${"def.en"},
      "enemy_enemytk_kill":    ${"def.en"},
      "enemy_enemytk_blowup":    ${"def.en"},
      "unknown_ally_hit":    ${"def.al"},
      "unknown_ally_kill":    ${"def.al"},
      "unknown_ally_blowup":    ${"def.al"},
      "unknown_squadman_hit":    ${"def.sq"},
      "unknown_squadman_kill":    ${"def.sq"},
      "unknown_squadman_blowup":${"def.sq"},
      "unknown_enemy_hit":    ${"def.en"},
      "unknown_enemy_kill":    ${"def.en"},
      "unknown_enemy_blowup":    ${"def.en"},
      "unknown_allytk_hit":    ${"def.al"},
      "unknown_allytk_kill":    ${"def.al"},
      "unknown_allytk_blowup":    ${"def.al"},
      "unknown_enemytk_hit":    ${"def.en"},
      "unknown_enemytk_kill":    ${"def.en"},
      "unknown_enemytk_blowup":    ${"def.en"},
      "player_ally_hit":    ${"def.pl"},
      "player_ally_kill":    ${"def.pl"},
      "player_ally_blowup":    ${"def.pl"},
      "player_squadman_hit":    ${"def.pl"},
      "player_squadman_kill":    ${"def.pl"},
      "player_squadman_blowup":    ${"def.pl"},
      "player_enemy_hit":    ${"def.pl"},
      "player_enemy_kill":    ${"def.pl"},
      "player_enemy_blowup":    ${"def.pl"},
      "player_allytk_hit":    ${"def.pl"},
      "player_allytk_kill":    ${"def.pl"},
      "player_allytk_blowup":    ${"def.pl"},
      "player_enemytk_hit":    ${"def.pl"},
      "player_enemytk_kill":    ${"def.pl"},
      "player_enemytk_blowup":    ${"def.pl"}
    },
Hier kann man Farben für den Schaden, der über den Markern aufsteigt angeben. Zum Beispiel kann man squadman_enemy_hit so einfärben, dass man gleich sieht, wenn einer aus dem eigenen Zug Schaden gemacht hat. Kann man schön fokusieren usw :) Genereller Namens-Aufbau ist wer_wen_was. Bei wen gibt es scheinbar auch die Unterscheidungsmöglichkeit für Normalos und Teamkiller.

Die nächsten vielen Blöcke sind immer nach dem selben Muster aufgebaut - ein Array voll mit Werten und Farben in dieser Form:
{ "value": 17, "color": <Farbwert> }
// wobei <Farbwert> entweder als Hex-Zahl ("0xFE0E00") oder als Referenz (${"def...."}) genutzt wird
Der Wert (value) stellt quasi immer ein Maximum dar und die Farbe des Wertes (color) gilt immer für den Bereich des letzten Wertes (oder 0, falls es der Erste ist) bis zu diesem (neuen maximal) Wert. Man muss also aufpassen, dass die Werte aufsteigend sind. Meistens steht in den Kommentaren ja aber auch nochmal genaueres dazu. Wenn ihr neue Werte hinzufügt, denkt an die Kommas! ^^

  • hp beeinflusst die Farbe nach Lebenspunkten - find ich selber etwas sinnfrei ^^ Wenn man von 2000 für Grün ausgeht, dann hätten alle T1 Panzer usw ja selbst mit vollen HP schon tiefrote Werte >< -> Makro {{c:hp}}
  • hp_ratio ist hier der (mMn) sinnvollere Wert -> geht nach den Prozenten der HP. also bei 1000/2000 hat man 50% bla blubb. Ich hab mir hier noch einen 75% Wert eingefügt als Bsp. -> Makro {{c:hp-ratio}}
  • x ist für die Ranglisten-Position von XVM gut. Also gehört man zu den oberen 20% oder eher zu den unteren 10? In Bezug auf Efficiency oder WN6 -> Makros {{c:xeff}} und {{c:xwn}}
  • eff ist die Efficiency-Wertung eines Spielers -> Makro {{c:eff}}
  • Das wn-Makro ist nicht mehr und wurde durch wn6 und wn8 ersetzt und bezieht sich logischerweise auf das entsprechende WN-Rating -> Makros {{c:wn6}} und {{c:wn8}}
  • e soll glaube ich das selbe wie eff sein, nur aufs benutzte Panzerchen bezogen, funktioniert aber nicht, da das kein global gespeicherter Wert ist. kA wieso die das da mit aufgenommen haben -> Makro {{c:e}}
  • rating ist ein wohlgewählter Name :schief: Damit wird die globale Siegrate in Prozent bezeichnet -> Makro {{c:rating}}
  • t-rating hingegen ist wie rating - nur wieder aufs Fahrzeug bezogen. Hier funktioniert das ganze scheinbar, auch wenn die Werte wohl ned stimmen. Kumpel meinte, er hat nur 30% irgendwas Siegrate mit dem Panzer und angezeigt wurden knapp 50 oO -> Makro {{c:t-rating}} - seltsamerweise ist es nach Umbennung in t-rating (früher twr) nicht mehr in der readme, aber funktioniert noch ^^
  • kb sind die Kilo Battles - also 1000 gespielte Runden. Wenn ich mich nicht täusche ergibt sich der wert aus round(Gefechte/1000) - also aufrunden ab x,5 -> Makro {{c:kb}}
  • t_battles wiederrum kb nur aufs Fahrzeug bezogen (ungetestet) -> Makro {{c:t-battles}}
  • avglvl gibt das Durchschnittstier des Spielers an. Ich glaube es berechnet sich aus der Gefechtszahl aller Panzer und ihrer Stufen (Summe über alle Panzer[PanzerTier*PanzerGefechte]/GesamtGefechte) -> Makro {{c:avglvl}}
  • tdb bezeichnet den Durchschnittsschaden (avg Tank-Damage per Battle) auf diesem Fahrzeug -> Makro {{c:tdb}}
  • tdv wiederrum dreht sich um durchschnittliche Schadens-Effiziens (loggisch, wa? :fresse: ) -> Makro {{c:tdv}}
  • tfb kümmert sich um die Durchschnitts-Kills (avg Tank-Kills per Battle) -> Makro {{c:tkb}}
  • und tsb schlussendlich behandelt die Werte fürs Durchschnitts-Spotting (avg Tank-Spots per Battle) -> Makro {{c:tsb}}

top


alpha.xc
Im Grunde genau das Gleiche wie bei den Farben, nur eben diesmal für dynamische Transparenz. Statt "c:" vorweg, nun ein "a:". Das Makro für hp_ratio wäre nun dementsprechend {{a:hp-ratio}} (man beachte, dass im Makro ein Bindestrich "-" und kein Unterstrich "_" verwendet wird). Seltsamerweise find ich in der readme-en.txt nur was über die ersten beiden :huh:

Auch wie in colors.xc fällt das wn-Makro weg ({{a:wn}}) und wird durch die zwei neuen Makros {{a:wn6}} und {{a:wn8}} ersetzt.

top


texts.xc
Code:
/**
 * Text substitutions.
 */
{
  "texts": {
    // Text for {{vtype}} macro.
    "vtype": {
      // Text for light tanks
      "LT":  "LT",
      // Text for medium tanks
      "MT":  "MT",
      // Text for heavy tanks
      "HT":  "HT",
      // Text for arty
      "SPG": "SPG",
      // Text for tank destroyers
      "TD":  "TD"
    }
  }
}
An und für sich nichts Wildes. Nutzt man das {{vtype}} (eventuell gilt es auch für das {{vehicle-type}} aus der minimap.xc) -Makro (verwendet in playersPanel.xc, battleLoading.xc, statisticForm.xc, markers...xc and hitlog.xc), wird je nach Fahrzeug-Klasse/Typ der hier verewigte Text angezeigt. Falls man also lieber Light als LT ließt... here we go.

top


iconset.xc
Code:
/**
 * Icon sets. Path relative res_mods/xvm/res.
 */
{
  "iconset": {
    // Folder containing the icon set for Battle Loading Screen.
    "battleLoadingAlly": "contour/",
    "battleLoadingEnemy": "contour/",
    // Folder containing the icon set for Battle Statistics Form (pressing "Tab").
    "statisticFormAlly": "contour/",
    "statisticFormEnemy": "contour/",
    // Folder containing the icon set for the Players Panels.
    "playersPanelAlly":  "contour/",
    "playersPanelEnemy":  "contour/",
    // Folder containing the icon set for the Over-target markers.
    "vehicleMarkerAlly": "contour/",
    "vehicleMarkerEnemy": "contour/"
  }
}
Hier kann man für die verschiedenen Anzeige-Orte für Countour-Icons verschiedene Pfade angeben - falls man Überall was anderes sehen möchte. NEW Das ganze ist dann noch getrennt für Verbündete oder Feinde.

top


vehicleNames.xc
Hier kann man den verschiedenen Panzern im Spiel eigene kreative Namen verleihen! Der Phantasie sind keine Grenzen gesetzt. Den 5er TD der franzosen ingame als Badewanne oder Damenschuh wiederfinden? Kein Problem :P Das allgemeine Schema ist auch sehr simpel:
"germany_Ltraktor": {"name": null, "short": null}
Zeurst kommt der WoT-System-Name gefolgt von seiner Ersetzungs-Variante in Form des name-Parameters. Mit short kann man noch eine kürzere Variante erstellen, welche man für die Minimap nutzen kann. Will man den Standard-Namen, lässt man hier einfach das null stehen.

top


login.xc
Code:
/**
 * Parameters for login screen
 */
{
  "login": {
    // Skip intro movie
    "skipIntro": true,
    // Auto enter to the game
    "autologin": false,
    // Auto confirm old replays playing
    "confirmOldReplays": true,
    // Ping servers
    "pingServers": {
      "$ref": { "file": "hangar.xc", "path": "hangar.pingServers" },
      // true - Show ping to the servers
      "enabled": false,
      // Axis field coordinates
      "x": 5,
      "y": 30
    }
  }
}
Hier lässt sich der Login-Screen konfigurieren. Dazu zählen mittlerweile auch ein paar Kompfort-Funktionen.

  • skipIntro lässt einen mit true das Intro-Video ausschalten und macht somit extra "Intro-Killer"-Mods überflüssig.
  • Mit autologin ist der Name programm: Er verbindet sofort, ohne das man noch was klicken muss. Eine Server-Wahl fällt dann allerdings auch flach und oftmals wird aus Sicherheitsgründen ja vor sowas gewarnt.
  • mit confirmOldReplays kann man die Sicherheitsabfrage beim Abspielen von Replays aus älteren WoT-Versionen umgehen. Er nimmt dann automatisch an, dass das gehen soll. Kann aber natürlich zu Problemen führen (ab und an werden Panzer geändert (demnächst der KV-1S, oder Damals der alte KV oder oder) und wer weis, wie das Dingen da dann verträgt ^^).
  • Schlussendlich kann man im pingServers-Block noch Einstellungen treffen, um die Pings zu allen Servern auszugeben. Spielt man auf einem Server-Cluster, kann man nun anhand der Pings einen Vorentsheid treffen, zu welchem Server des Clusters man sich besser verbindet. Mit gesetztem autologin fällt das natürlich flach und er connected zum letzt gewählten. Gut, der Hauptteil wurde ausgelagert in die hangar.xc, was bleibt ist der übliche enabled-Schalter sowie eine Positionierungsmöglichkeit mittels x und y.

top


hangar.xc
Code:
/**
 * Parameters for hangar
 */
{
  "hangar": {
    // true - Disable display of tutorial icon
    "hideTutorial": false,
    // true - Show XWN instead of XEFF in company windows
    "xwnInCompany": true,
    // true - Show mastery mark in tank carousel
    "masteryMarkInTankCarousel": true,
    // true - Show mastery mark in tech tree
    "masteryMarkInTechTree": true,
    // true - Hide price button in tech tree
    "hidePricesInTechTree": false,
    // true - Enable widgets
    "widgetsEnabled": false,
    // Ping servers
    "pingServers": {
      // true - Enable display of ping to the servers
      "enabled": false,
      // Update interval, in ms
      "updateInterval": 10000,
      // Axis field coordinates
      "x": 170,
      "y": 35,
      // Transparecy
      "alpha": 80,
      // Server to responce time text delimiter
      "delimiter": ": ",
      // Maximum number of column rows
      "maxRows": 4,
      // Gap between columns
      "columnGap": 10,
      // Text style
      "fontStyle": {
        // Font name
        "name": "$FieldFont",
        "size": 12,
        "bold": false,
        "italic": false,
        // Different colors depending on server responce time
        "color": {
          "great": "0xFFCC66",
          "good": "0xE5E4E1",
          "poor": "0x96948F",
          "bad": "0xD64D4D"
        }
      },
      // Threshold values defining responce quality
      "threshold": {
        // Below this value responce is great
        "great": 35,
        // Below this value responce is good
        "good": 60,
        // Below this value responce is poor
        "poor": 100
        // Values above define bad responce
      },
      "shadow": {
        "enabled": true,
        "color": "0x000000",
        "distance": 0,
        "angle": 0,
        "alpha": 70,
        "blur": 4,
        "strength": 2
      }
    }
  }
}
Hierin kann man nun diverse Einstellungen innerhalb der Garage vornehmen. Der ehemals externe Teil der UserInfo wurde hier mit eingegliedert.

  • Mit hideTutorial lässt sich der Button oben Links zum Starten des Tutorials ausblenden (true).
  • xwnInCompany gibt an, ob im Kompaniefenster der XWN oder der XEFF Wert ausgegeben werden soll. Beide stellen nicht den Wert an sich dar, sondern nur eine Positionierung in Prozent aller Spieler - ist mit zweistelligen Zahlen statt bis zu vierstelligen aber eben kompakter.
  • masteryMarkInTankCarousel lässt einen einstellen, ob das Überlegenheitsabzeichen (das Mastery Mark) im Hangar unten bei den Panzerbildchen mit angezeigt werden soll (true), oder eben nicht (false).
  • masteryMarkInTechTree ist quasi das selbe in grün, nur eben für die Bildchen im Forschungsbaum.
  • showExtraDataInProfile ist mittlerweile in die userInfo.xc gewandert.
  • hidePricesInTechTree soll das Knöppken im TechTree (Forschungsbaum zu Neudeutsch ^^) verschwinden lassen (true), welches einen Module direkt aus dem TechTree heraus kaufen lässt.
  • widgetsEnabled ist wohl ein zukünftiges Element. Damit lassen sich kleine "Helferlein" aktivieren. Als Beispiele wurde eine Garagen-Uhr benannt, man könnte sich auch einen Crew-Switcher oder einen Taschenrechner vorstellen. Wer weis, was da noch kommen mag...
  • pingServers: Hier haben wir eben von der login.xc drauf zugegriffen. Hier können wir alles Rund um die Pings einstellen. enabled...
    10%20sm_B-[.gif
    , updateInterval legt fest, wie oft der Ping ermittelt werden soll (soll ja nich die ganze Bandbreite nutzen und testen testen testen). Hier auf "alle 10 Sekunden" gestellt. Mit x und y lässt sich das Ganze wieder Positionieren (in der login.xc haben wir das durch deren Angaben quasi überschrieben) und alpha sollte mittlerweile selbsterklärend sein. delimiter lässt einen ein Trennungszeichen bestimmen. Im Bsp unterstrichen: "EU1: 35". maxRows ist für uns EU'ler eher unbedeutend, da unser Cluster gerademal aus zwei Servern besteht. Jedenfalls kann man hier angeben, wieviele Server untereinander aufgeführt werden sollen, ehe sie rechts daneben in einer neuen Spalte fortgeführt werden (wie in einer Tabelle szs). Mit welchem (Pixel-)Abstand diese Spalte angefügt werden soll, steht in columnGap. Wie die Schrift aussehen soll, legt man mittels fontStyle fest - die Elemente sollten bekannt sein. Einzig color unterscheidet sich zur üblichen Angabe: Hier kann man Farben für verschiedene "Qualitäten" angeben. Mittels threshold kann man für eben jene "Qualitäts-Klassen" die Abgrenzungen angeben: Von 0 bis great gilt der Ping als great und bekommt die entsprechende Farbgebung, von great bis good zählt er als good, von good bis poor dann eben als poor und alles darüber wird als bad gewertet. Die shadows bilden den Abschluss - nichts Neues für uns.
  • Schlussendlich fand noch die userInfo (der Wehrpass) ihren Weg hier hinein und kann konfiguriert werden. Dank neu gestaltetem Wehrpass mit 8.8 ist hier wohl noch mit "etwas" Bewegung zu rechnen, dennoch die bisher eingetragenen Elemente: startPage lässt einen wählen, welche Ansicht im Wehrpass einen beim aufrufen entgegenspringen soll. Viele nervt am neuen Wehrpass, dass sie nicht mehr gleich die alte Gefechts-Panzer-Liste da sehen - das könnte man hiermit wieder ändern. In eben jener Ansicht lies sich mittels XVM diese ellenlange Liste (sie wird ja nicht kürzer, je länger man spielt) Filtern (zum Bsp nur Fahrzeuge in der Garage anzeigen, oder Nation/Stufe...). Ob diese Filterung möglich/aktiv ist, wird mittels showFilters geregelt. true und man kann fröhlich filtern. filterFocused... es gab noch ein kleines Textfeld, in das man einen Panzernamen eintippeln konnte (wenn ich mich recht erinner) - ist dieser Parameter auf true gesetzt, so wird dieses Textfeld "gefokust" - es ist also ausgewählt und wenn man etwas eintippt, wird das dort hineingeschrieben. Hätte das Textfeld keinen Fokus, würden Texteingaben hier nichts bringen und man müsste erst mit der Maus reinklicken (damit erteilt man dem Dingen quasi händisch den Fokus). inHangarFilterEnabled... puh. Noch ein Filter ^^ Ohne das jetzt testen zu können schwer zu sagen. Ich würde fast vermuten, dass das sowas wie bei locastans 2rowedCaroussel ist, wo man zusätzliche Filtermöglichkeiten für die Panzerchens unten hatte. Kann ich aber gerade nur vermuten. defaultFilterValue lässt uns einen vordefinierten Filter-Text im Filter-Textfeld anzeigen (also wonach man gern und häufig filtert). Welche Spalte zur Sortierung (also die Standard-Sortierung, ehe man selbst eine Sortierungsart auswählt) benutzt wird, kann man schlussendlich mittels sortColumn bestimmen (siehe Kommentar darüber).

top


userInfo.xc
Code:
/**
 * UserInfo window.
 */
{
  "userInfo": {
    // Initial page (1, 2, 3, 4).
    "startPage": 1,
    // number of column for sorting by default. Sort order: >0 - default, <0 - reverse
    // 1 - Nation
    // 2 - Type
    // 3 - Level
    // 4 - Name
    // 5 - Fights
    // 6 - Wins
    // 7 - Average XP
    // 8 - Class mark
    "sortColumn": 5,
    // true - Show extra data in profile (experimental)
    "showExtraDataInProfile": false,
    // true - Enable filter tanks in hangar by default.
    "inHangarFilterEnabled": false,
    // true - Show filters on tanks.
    "showFilters": true,
    // true - Set the default focus to the filter text input
    "filterFocused": true,
    // TODO: description of the substitutions (+all, -premium, ...)
    // default value of the filter
    "defaultFilterValue": ""
  }
}
Diese Datei ist für den eigenen Wehrpass oder eben das Informationsfenster über andere Spieler zuständig. Hier können zusätzliche Statistiken eingeblendet werden usw usf.

  • startPage lässt einen wählen, welche Ansicht im Wehrpass einen beim Aufrufen entgegenspringen soll. Viele nervt am neuen Wehrpass, dass sie nicht mehr gleich die alte Gefechts-Panzer-Liste da sehen - das könnte man hiermit wieder ändern.
  • showExtraDataInProfile ist noch experimentell und soll wohl im Wehrpass zusätzliche statistische Werte anzeigen lassen.
  • Welche Spalte in eben jener Liste zur Sortierung (also die Standard-Sortierung, ehe man selbst eine Sortierungsart auswählt) benutzt wird, kann man mittels sortColumn bestimmen. Welche Zahl für welche Spalte steht, kann man dem Kommentar darüber entnehmen.
  • inHangarFilterEnabled... puh. Noch ein Filter ^^ Ohne das jetzt testen zu können schwer zu sagen. Ich würde fast vermuten, dass das sowas wie bei locastans 2rowedTankCaroussel ist, wo man zusätzliche Filtermöglichkeiten für die Panzerchens unten hatte.
  • Für die Panzer-Listen-Ansicht lies sich mittels XVM diese ellenlange Liste (sie wird ja nicht kürzer, je länger man spielt) Filtern (zum Bsp nur Fahrzeuge in der Garage anzeigen, oder Nation/Stufe...). Ob diese Filterung möglich/aktiv ist, wird mittels showFilters geregelt. true und man kann fröhlich filtern.
  • filterFocused... es gab noch ein kleines Textfeld, in das man einen Panzernamen eintippeln konnte (wenn ich mich recht erinner) - ist dieser Parameter auf true gesetzt, so wird dieses Textfeld "gefokust" - es ist also ausgewählt und wenn man etwas eintippt, wird das dort hineingeschrieben. Hätte das Textfeld keinen Fokus, würden Texteingaben hier nichts bringen und man müsste erst mit der Maus reinklicken (damit erteilt man dem Dingen quasi händisch den Fokus). Kann ich aber gerade nur vermuten.
  • defaultFilterValue lässt uns einen vordefinierten Filter-Text im Filter-Textfeld anzeigen (also wonach man gern und häufig filtert).

top


elements.xc

Code:
[SIZE=3][SIZE=3][SIZE=3][SIZE=3][SIZE=2][SIZE=3][SIZE=3][SIZE=3][SIZE=3][SIZE=2][SIZE=3][SIZE=3][SIZE=3][SIZE=3][SIZE=2]/**
 * GUI elements settings (experts only)
 *
 * TODO: documentation
 * Do I need to describe:
 * 1. General principles (the root begins with _root)
 * 2. Commands ("@ log":% level%, "@ textFormat": {}, "% var%": "@ log")
 * 3. Mathematical expressions ("y": "HEIGHT / 2 + sin (_x)")
 * 4. Execution contexts:  *      { WIDTH:width, HEIGHT:height }, // globals
 *      obj,                            // current object
 *      _root,                          // _root
 *      Config.s_config,                // config
 *      Defines                         // global defines
 */
{
  "elements": [
    //${"snippet-1.xc"},
    //${"snippet-2.xc"}
  ]
}[/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE]
Hier gibts nur den Block elements und der Inhalt ist auskommentiert - also bisher noch eine Baustelle *vermut*

top


Lokalisierung
Im Ordner "res_mods\xvm\l10n" befinden sich weitere .xc Dateien, welche als Namen einen Ländercode tragen. Hierrüber lassen sich mittels Makros Übersetzungen abrufen. Je nach eingestelltem oder ermitteltem Land (und damit Ländercode) wird die jeweilige Datei (sofern vorhanden) geöffnet und das Makro greift hierraus nun auf seinen Block zu. Das Makro {{l10n:hpLeftTitle}} würde bei einem deutschen Client also de.xc aufrufen und sich selbst entsprechend dem Eintrag "hpLeftTitle": "Verbleibende Trefferpunkte:" durch "Verbleibende Trefferpunkte:" ersetzen. In einem englischen Client würde dementsprechend en.xc aufgerufen werden und durch den dortigen Eintrag für hpLeftTitle ersetzt, welcher dann "Hitpoints left:" lautet. Man sieht: Ein Makro, verschiedenste Ausgaben.

Wenn ihr eine solche Datei anpasst, könnt ihr euch dann unter XVM_translator verewigen oder euren Namen dazuschreiben. Ist ja an und für sich Wurst, aber manche brauchen ja den Ruhm! ^^ Inwiefern sich so eine Datei selbst anpassen lässt (über die Werte-Änderung vorhandener Parameter hinaus, also selber Parameter anlegen -> "meinEintrag": "test", Zugriff über {{l10n:meinEintrag}} möglich?), habe ich noch nicht getestet.
Vorteil: Man könnte eventuell noch nicht übersetzte Stellen der Config mit übersetzen.
Nachteil: Anderen müsste man seiner Config die l10n-Dateien mitgeben, da sie ohne diese nur unvollständig funktioniert (wenn es nicht gar zu Fehlern käme). Sofern es die eigene Sprache betrifft sicher kein Problem, englisch wird auch noch gehen, aber danach wirds für die meisten schwer. Eine solche angepasste Lokalisierung wäre also nicht mehr wirklich multilingual bzw nur noch (sehr) eingeschränkt.

top
 
Zuletzt bearbeitet:
Klasse Tut! Hatte bisher gar nicht mitbekommen, dass du es online gestellt hast. :(
Werd wohl mit ein paar Funktionen noch ein bisschen rumtüfteln, aber alles nachem Abi. :D
 
Sehr nettes Tutorial, weiter so!

Allerdings hat sich in der Sektion Minimap ein Fehler eingeschlichen:
Statt "{{vehicle}}" sollte "{{vehicle-type}}" stehen.
Sonst siehts so aus:
shot_008igxfu.jpg
 
- Das war natürlich nur ein Kunskniff, das soll so sein!
- Das war nur, um eure Aufmerksamkeit zu testen!
- Das war nur... ähm ^^

Ich versuchs mal zu ändern ^^ Wenn ihr eigene Configs habt, könnt ihr die ja in nem Posting vorstellen (vllt mit Bilderchen) und ich kann die Direktlinks dazu oben mit sammeln oder so?
 
Wirklich ein guter Workshop. Werd es mal austesten. Vielleicht kann ich mich ja doch noch mit dem XVM anfreunden :)
 
soa, hab mal "fix" die neuerungen reingetüdelt. hoff ich hab nix vergessen ^^

edit: falls wer mal möchte, hier meine komplette config im anhang. ist für xvm version 3.5.0 :)
 

Anhänge

  • XVM-085-350.zip
    19,9 KB · Aufrufe: 277
Zuletzt bearbeitet:
Sehr schönes Tut. Ich werde trotzdem bei der Config bleiben die in dem XVM Paket dabei ist. Um mich da einzuarbeiten bin ich zu faul.
 
Irgendwie bin ich grade zu doof für die Minimapconfig.

Ich will nur Fahrzeugnamen haben, also sowohl bei den Gegnern als auch bei den Verbündteten und nur wenn sie leben. Mehr will ich nicht. Aber irgendwie klappt das nicht. Kann mir das grade wer posten?
 
Du meinst sichtbar statt leben? weil tote werden garnich angezeigt ^^

und wenn mich ned alles täuscht musst du nur bei labels-units-format-lost das zeug löschen. also aus
"lost": "<span class='mm_dot'>\u2022</span><span class='mm_l'><i>{{vehicle-type}}</i></span>",
"lost": "",
machen.
 
Also hatte das eben bei meiner Konfig soweit hinbekommen, dass er mir die Namen auf der Map anzeigt, ABER dann hattee ich aufeinmal auch Kreis, die Markierungen über den Panzern waren auf einmal auch verändert und dann stanbd oben unter der puntekstand anzeige noch mein team - gegenerisches Team.
Ich raff das nicht. :huh:
Die Minimap war dann auch eufienmal kleiern als sonst. -.-

Wenn ich hier meine Config anhänge, kann das dann einer für mich ändern? :)
 
es kann sein, dass er dann die default config lädt. schau einfach mal beim ladescreen der runde unten zum tooltip, da haste nen kleinen debugmonitor szs (also nur im fehlerfalle). wenn man bspw nen , oder ; oder so vergisst oder sonstwelche fehler rein mehrt, dann geht die ganze config ned mehr.

kannst deine ruhig mal anhängen, aber heute wird das nix mehr. wohl erst morgen abend.
 
was is denn das für ne config xD da wird man ja blöde im kopf he. da is ja alles querbeet durcheinander gewürfelt und die formatierung zum gruseln *buha*

also du wolltest dass bei den fritzen, die wieder verschwunden sind, keine namen/texte dabei stehen. sollte ja an und für sich so funtzen. mal bei mir testen, ob er fehler anzeigt *test* ok, nen fehler gibts ned, aber der zeigt ja überhaupt nix an. nichmal bei den eigenen oder sichtbaren feinden. hää?
 
Weiß nicht, hab mir das mal so zusammengewurschelt aus vorhandenen Mods, das ging nicht so richtig und dann hab ich es mit dem Tool auf der XVM-Seite gemacht.

Genau ich möchte den Panzernamen bei meinem Team und bei den Gegner, sofern die auf der Map aufgedeckt sind. Wenn die Gegner verschwunden sind soll da auch nichts mehr stehen, genauso bei toten Panzern. Der Rest soll so bleiben. Und, dass ich die Minimap noch größere machen kann, also zoomen.

Na weil das bei mir gestern nicht wollte, hab ich dir jetzt die "normale" von mri geschickt, wo jetzt das mit der Map noch hinzu soll.
 
Hab jetzt eben nochmal rumpriobiert bei mri und irgendwie klappt das hinten und vorne nicht. -.-

Vllt. setz ich meine Konfig einfach nochmal neu auf.:huh:
 
hab schon überlegt, ob du mir "einfach" mal sagst, was du alles drin haben möchtest ^^ weil mit dieser verwurschtelten config komm ich garnich klar :(
 
Also ich hab drin:
Hitlog
Capanzeige
Stats

Mehr hab ich meine ich nicht. Der Rest müsste alles normal sein.
Das Problem bei meiner Config ist ja dieser ganze Map murks, weil iwi kann ich das nicht richtig aktivieren, aber löschen geht auch nicht, weil dann iwi ich dann auch andere Spielerindikatoren habe... ganz merkwürdig.

Bzw. kann ich ja einfach ne neue Konfig machen, die das Minimap zeugs hat, also nur aufgedeckte Fahrzeuge mit Bzeiechnung und Zoom. Die füge ich dann mit dem Onlinebearbeitungsdingens zusammen.
 
nimm dir doch einfach die default-config her und bastel da drin rum, was du brauchst. das anspruchsvollste is noch das OTM gerödel, weil das so extrem aufgefächert is. danach die farben und dann positionierung ^^ so mein empfinden.
 
Zurück