Mich interessiert es, welche Software ihr in Hearthstone so einsetzt und wie ihr diese bewertet.
Bis zu dieser Erweiterung war ich ein Purist ohne zusätzliche Software, aber ich es wurde mir zu nervig. Ich habe mir meine eigenen Skripte geschrieben (bei Interesse siehe unten (1) und (2)), bin mir jedoch nicht sicher, ob ich weitere Software einsetzen sollte (aber auch irgendwie in Stimmung dazu gekommen).
Für den Fall dass noch jemand diese Skripts nützlich findet, füge ich diese hier mit einer kurzen Beschreibung ein (und um mich rechtlich abzusichern: Benutzung auf eigene Gefahr).
(1)
Meine Motivation
Bislang habe ich immer alle meine Decks ohne Software per Hand abgespeichert \(Deckstring kopieren; Notepad öffnen, einfügen, speichern, beenden; Wordpad öffnen, speichern, beenden\) war zwar etwas umständlich, aber ich habe selten Decks als "speicherwürdig" angesehen. Aber irgendwann hatte ich keine Lust mehr, und so hatte ich 27 Decks "rumfliegen", die ich noch speichern wollte...).Um das Ganze zu vereinfachen habe ich mir eine hybride JScript-Batch geschrieben um den Deckstring in das Verzeichnis der Batch-Datei zu speichern (Deckstring kopieren; Doppelclick auf die entsprechende Batch Datei).
Um es mir noch einfacher zu machen habe ich an den Namen der Skriptdatei etwas Funktion gebunden:
Heisst die “saveDeck..bat”, so speichert sie das Deck unter “<Datum> <optional> <Titel>[000-999].<Klasse>.txt”.
Heisst sie “saveDeck.<optional>.brawl.bat” so ist das Format der Textdatei “<optional>[000-999].txt”
(Die Nummern 000 bis 999 werden bei doppelten Dateinamen automatisch generiert.)
Ich benutze (ist aber Geschmackssache) die Datei derzeit für Wild/Standard mit den folgenden Dateinamen:
“saveDeck.EU.bat”, “saveDeck.US.bat”, “saveDeck.Asia.bat”.
Für wild werde ich den Titel immer an das Format
“saveDeck.<Kalenderwoche> [EU|US|Asia] <Titel des Kartenchaos’>.brawl.bat” anpassen, diese Woche also:
“saveDeck.2019 KW 15 EU Kartenkollosseum - Standard.brawl.bat”
(Ich werde aber nur eine Datei erstellen, um nicht ständig den Titel ändern zu müssen; nur EU, US, Asia ändere ich bei Bedarf falls nötig.)
Quelltext Speichermodul
@if (true == false) @end /*
@echo off
cls
setlocal enableExtensions disableDelayedExpansion
cscript //nologo //e:JScript "%~f0" "location:%~dp0"
if errorlevel 1 ( pause & pause )
goto :eof
*/
function getClipBoard() {
var html = new ActiveXObject("HTMLFile");
var text = html.parentWindow.clipboardData.getData("text");
delete html;
return text;
}
function getHsRegExp() {
var d = "[A-Za-z0-9+/]"; // base64 digit
var p = "="; // base 64 padding code
var b4 = d + "{4}"; // base 64 4 digits block, no padding
var b3 = d + "{3}" + p + "?"; // base 64 2 digits block, 0 or 1 padding chars
var b2 = d + "{2}(?:" + p + "{2})?"; // base 64 1 digits block, 0 or 2 padding chars
return new RegExp (
"^" +
"(?:### .*\\n)" +
"(?:# [^:]+:[^:]+\\n){2}" +
"(?:#.*\\n)+" +
"(?:" + b3 + ")*(?:.*)\\n" + // "(?:" + b3 + "|" + b2 + "|" + b1 + "" +
"(?:#.*\\n)+" +
"$"
);
}
function nextToken(text, tokenPos, prefixDelim, postfixDelim) {
tokenPos.sot = text.indexOf(prefixDelim, tokenPos.eot) + 1;
tokenPos.eot = text.indexOf(postfixDelim, tokenPos.sot);
if (tokenPos.sot > tokenPos.eot) tokenPos.eot = tokenPos.sot;
return text.substring(tokenPos.sot, tokenPos.eot);
}
function getFilename(prefix, extension) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var shell = new ActiveXObject("WScript.Shell");
var folder = fso.GetFolder(fso.GetAbsolutePathName("."));
var filename = null;
if (!fso.FileExists(prefix + extension)) {
filename = prefix + extension;
} else {
var N = folder.files.Count;
for (var i = 0; i < N; ++i) {
counter = " " + ("" + (1000 + i)).substring(1);
if (!fso.FileExists(prefix + counter + extension)) {
filename = prefix + counter + extension;
break;
}
}
}
delete shell;
delete fso;
return filename;
}
function saveFile(filename, text) {
var stream = WScript.CreateObject("ADODB.Stream");
stream.Open();
stream.Charset = "UTF-8";
stream.WriteText(""); // force bom creation
stream.WriteText(text);
stream.SaveToFile(filename, 2); // adSaveCreateOverWrite = 2
stream.Flush();
delete stream;
}
function main() {
var text = getClipBoard().replace(/\r\n/g, "\n");
var regexp = getHsRegExp();
if (regexp.test(text) == true) {
var date = new Date();
var tokenPos = {
sot : 0, // start of token
eot : 0 // end of token
};
var title = nextToken(text, tokenPos, " ", "\n");
var avatarClass = nextToken(text, tokenPos, ":", "\n").substring(1);
var format = nextToken(text, tokenPos, ":", "\n").substring(1);
var era = nextToken(text, tokenPos, "#", "\n").substring(1);
tokenPos.sot = 0; tokenPos.eot = 0;
var optionalString = nextToken(WScript.ScriptName, tokenPos, ".", ".");
var optionalType = (optionalString.length != 0) ? nextToken(WScript.ScriptName, tokenPos, ".", ".") : "";
var year = date.getFullYear();
var month = date.getMonth() + 1; month = (month < 10) ? "0" + month : "" + month;
var day = date.getDate(); day = (day < 10) ? "0" + day : "" + day;
var filename = (optionalType == "brawl") ?
getFilename(optionalString, "." + avatarClass + ".txt") :
getFilename(year + " " + month + " " + day + " " + optionalString + " " + title, "." + avatarClass + ".txt");
/** /
WScript.echo("title : \"" + title + "\"");
WScript.echo("avatarClass : \"" + avatarClass + "\"");
WScript.echo("format : \"" + format + "\"");
WScript.echo("era : \"" + era + "\""); // brawl only?
WScript.echo("optionalString: \"" + optionalString + "\"");
WScript.echo("filename : \"" + filename + "\"");
WScript.echo("text : \"" + text + "\"");
/**/
saveFile(filename, text.replace(/\n/g, "\r\n"));
delete date;
WScript.Quit(0);
} else {
WScript.echo("Invalid File: " + text);
WScript.Quit(1);
}
}
main();
(2)
Zum Laden der Decks habe ich mir ein kleines Batch-Skript geschrieben, dass die Datei die den Deckstring enthält per Drag-and-Drop auf die Batch in die Zwischenablage lädt).
"loadDeck.bat"
@echo off
setlocal enableExtensions disableDelayedExpansion
>nul chcp 65001
if not "%~1" == "" type "%~1" | @(>nul (pause & pause & pause) & findstr "^") | clip
goto :eof
PS: Ich hoffe, dass man die Quelltexte ohne Nebeneffekte der Forensoftware mit copy-paste in eine Batch transferieren kann:
Dennoch sollte man den Quelltext vergleichen, ehe man die Datei abspeichert.