I have set up everything correctly because "SPEL FULL" is successfully replaced but not he INFO NAM1. I have checked your documentation at https://github.com/SkyHorizon3/SSE-Dynamic-String-Distributor/blob/main/doc/Doc.md but maybe I am doing something wrong? Sorry to bother you but I have been trying since 1.1.3 and while your update today mentioned 1.6.1130+ specificially I thought to bring up my issue.
The json looks fine. It should work. Sure it's not working? I'll give it a try later. :) EDIT: I found another issue. Fix will be up soon EDIT2: Should work now with 1.2.0
Just confirmed (fixed map markers) with SE1.5.97: - For already discovered vanilla ones (during disabled): stay discovered - New (undiscovered) vanilla ones: can be discovered now.
Uhh... Windows Defender just notified me that your esp2dsd leaked a trojan that can't be quarentined. File check says its safe. False flag? Hopefully. But still can't contain or get rid of it. :( Edit: Says its a Trojan:Win32/Wacatac.H!ml
It's still there... i did a safe boot trying to remove it. what happened is the download failed and it never actually went into my drive completely. Nothing funny is happening with my pc, I didn't get another notification about it, but it still shows up in WD past notifications.
I'm working on something for fiddling with merchant gold in SkyPatcher, and realized that if I want to alter the Master Trader perk in a way that's mod-agnostic (e.g., I use Vokrii), it'd be nice to be able to replace text in a string without necessarily rewriting the string completely. Would it be possible to add a find/replace option?
In my use case, the idea would be to modify perk 001090A5's DESC and replace "1000" with the new amount. It'd be awesome to be able to find/replace on word boundaries and have other handy functionality, but a simple replacement would suffice for this case.
You could use xTranslator to search and replace the strings, then finalize it to a copy of the plugin and use esp2dsd from optional files here to create a JSON file for DSD.
Well as I understand it, DSD will just distribute the strings to the given form ID. But Vokrii overrides the description for the Master Trader perk from Skyrim.esm. AFAIK, there isn't a way to set up a .json file that would handle the replacement differently based on whether Vokrii is installed. So I could use this to make a change specific to my mod list, but I couldn't make the string change part of a new mod without adding patches.
Being able to replace a number in a string no matter which mods had acted on it would be a pretty powerful addition.
Is the 1000 defined in the string or does the string only contain <mag> instead? I could add options to replace all occurrences of specific words, but changing replacer tags would be more difficult. But I assume SkyPatcher can already replace these values...
"1000" is hardcoded in the string. I believe it has to be this way because the way the perk is actually implemented is via a leveled list that's part of most merchants' containers. The amount of gold is in the leveled list, not in the perk itself, so it isn't directly tied to the perk reference. So "<mag>" isn't really available for the perk text because of that disconnect.
Hey SkyHorizon! This is a very cool mod, nice one. Currently it's only really useful for translations, but I have an idea that could make it useful for basically everyone. Dropping it here in case you want to take a look at it.
Basically... Could you check for conditions too via the json file? The most useful one would be GetPCIsRace and the primary use would be for mods that add a bit more personality to player responses. "Khajiit Speak" comes to mind. It's a mod that replaces player text to sound like you're a khajiit. "What have you got for sale?" turns into "You've got things for sale, yes?", etc. The main problems with such mods are: 1) You must install or uninstall it depending on what race you're playing as the text is replaced no matter your race and 2) it needs a ton of patches... Your framework could fix both issues easily :)
Just an idea in case you want to have a go at it. Thanks for your mod!
Hi, it's me again :) The esp2dsd tool works really well, but I noticed that it creates entries even when the new string is identical to the original one (and, for example, for every string of a quest even if only one line is different). I don't know if it has any impact on performances in-game, but I feel it's not really "clean" to have a lot of useless entries and can't remove them by hand in a file with thousands of them. Would it be possible that the tool ignores them, or am I worrying for nothing? ^^
They should make no difference, the code for the tool comes directly from SSE-AT and its purpose was to merge translations with their originals so the strings that are the same are relevant for translators. I agree that they are obsolete for DSD and I can update the esp2dsd tool to ignore them.
esp2dsd works fine for common mods. But it seems will not work for base game plugins since they use STRINGS files, I actually have no "translated" version of base game plugins. Is it possible to generate them? Also hope a version generates DSD without the untranslated esp needed since sometimes we just want to batch create dsd files and don't care about the original version.
Edit: For my purpose, I have an old version json file got from others. I just need a new version json scheme. So I managed to get part of non-translated entries by passing argument True for `extract_strings` in source `convert.py`, and removed string check inside `extract_group_strings` (I hope the index is correct) index is correct. Also need to edit `SUBRECORD_MAPPING` in `subrecord.py` and `parser_whitelist.json`,
I already have a script to generate a vanilla database from a given Data folder and a folder containing STRINGS files for the base game plugins. But it's too specialized and not standalone. I am working on this and will publish it, when it's ready.
Also, I want to ask, is it possible to scan full load order and check identical strings added by different esps? Some mods just add almost vanilla things but perhaps have their own records so the translation just missed.
Yesterday I added search features for both modlist and database that make it possible to search for FormIDs, Types, EditorIDs, Original String and Translated String to SSE-AT. They come with the next pre-release version that I plan to upload this afternoon on our Discord server and it's planned to be published on Nexus Mods this week.
lingsamuel asked the two questions I was here to ask :D The two not-yet-covered cases in generating JSON are indeed localized plugins (string files) and maybe identical texts with different FormID (especially for Base Object Swapper mods). Thank you for the developments and your time <3
me again 🤐 I want to know if it is possible to add a debug mode, which will add a prefix or postfix to display the last changed plugin ID or name. Some strings are still untranslated or is badly translated, and it is hard to find who is the bad guy.
And I realized "scan full load order and check identical strings added by different esps" probably will be a hard work because we have to do something like disable all translation plugins and generate a form id list and enable them again and generate json from the form id list
SSE-AT will check updates in startup and will fail to start if it can't. In my case, it appears to be using a proxy setting, but I don't know where it's reading this from and what value it is. Thus it causes a proxy error and refuse to start 😅 Also, sometimes text errors are found by accident. If there is ESP information, we can fix it directly.
If you like, could you please consider adding format : {plugin} and {editor_id} without {form_Id}? I want translate using xmls exported from xTranslator. This xml contains the ESP name, EditorId, Rec type, and translation string, but not contains FormId. I think it easy to convert xml to json (this Mod format). So if you can support this format, I'll create a conversion script in Python.
I know this idea is not useful for general users. However, in some communities (Japan) translation using xTranslator and xml is common.
esp2dsd works fine! but not what I intended above. The process "finalizing your translations in xTranslator" takes a huge amount of time when using mod list. XML to Json conversion can skip this finalizing process.
That's true. But xTranslator's XMLs do not contain every piece of information, the newest version of DSD needs. It is straight up not possible. As example in xTranslator's XMLs it is not possible to get the FormIDs of specific strings.
If you tell me how to reproduce this, I will fix it. Are you sure it's because of this mod? It really doesn't edit anything that could even slightly change the visibility of map markers.
@Oaristys Yes, that was the problem if you had no json files. I can't reproduce it anymore as I've added numerous returns when one of the folders is empty or non-existent. Surely you are using version 1.1.1? If yes, did you add a special folder structure inside of the DynamicStringDistributor folder?
I've updated to 1.1.2 and done multiple tests, it seems fixed somehow (with JSON, without JSON, with empty folder structure) ^^ However, a strange issue occurred: I use Alternate Start - Live Another Life and DSD v1.1.2 seems to prevent the quest from updating (when choosing a start from the statue, nothing happens). Tested with JSON and without JSON file ^^'
99 comments
Example:
./esp2dsd.exe "C:\Users\User\Downloads\test1\Guards_Armor_Replacer.esp" "C:\Users\User\Downloads\test2\Guards_Armor_Replacer.esp"
[
{
"form_id": "000862|Dirt and Blood - Dynamic Visuals.esp",
"type": "INFO NAM1",
"index": 1,
"string": "Du bist ganz dreckig!"
},
{
"form_id": "000838|Dirt and Blood - Dynamic Visuals.esp",
"type": "SPEL FULL",
"string": "Hygiene"
}
]
I have set up everything correctly because "SPEL FULL" is successfully replaced but not he INFO NAM1. I have checked your documentation at https://github.com/SkyHorizon3/SSE-Dynamic-String-Distributor/blob/main/doc/Doc.md but maybe I am doing something wrong? Sorry to bother you but I have been trying since 1.1.3 and while your update today mentioned 1.6.1130+ specificially I thought to bring up my issue.
Thanks and have a good day!
EDIT: I found another issue. Fix will be up soon
EDIT2: Should work now with 1.2.0
- For already discovered vanilla ones (during disabled): stay discovered
- New (undiscovered) vanilla ones: can be discovered now.
Really thank you for the fix!
In my use case, the idea would be to modify perk 001090A5's DESC and replace "1000" with the new amount. It'd be awesome to be able to find/replace on word boundaries and have other handy functionality, but a simple replacement would suffice for this case.
Being able to replace a number in a string no matter which mods had acted on it would be a pretty powerful addition.
Basically... Could you check for conditions too via the json file? The most useful one would be GetPCIsRace and the primary use would be for mods that add a bit more personality to player responses. "Khajiit Speak" comes to mind. It's a mod that replaces player text to sound like you're a khajiit. "What have you got for sale?" turns into "You've got things for sale, yes?", etc. The main problems with such mods are: 1) You must install or uninstall it depending on what race you're playing as the text is replaced no matter your race and 2) it needs a ton of patches... Your framework could fix both issues easily :)
Just an idea in case you want to have a go at it. Thanks for your mod!
Edit:
For my purpose, I have an old version json file got from others. I just need a new version json scheme.
So I managed to get part of non-translated entries by passing argument True for `extract_strings` in source `convert.py`, and removed string check inside `extract_group_strings`
(I hope the index is correct)index is correct. Also need to edit `SUBRECORD_MAPPING` in `subrecord.py` and `parser_whitelist.json`,"GMST": [
and"DATA"
],
"DATA": StringSubrecord,
( I don't know if GMST DATA is needed but they seem to have meaningful content so I added them)
Thank you for the developments and your time <3
Some strings are still untranslated or is badly translated, and it is hard to find who is the bad guy.
And I realized "scan full load order and check identical strings added by different esps" probably will be a hard work because we have to do something like disable all translation plugins and generate a form id list and enable them again and generate json from the form id list
Also, sometimes text errors are found by accident. If there is ESP information, we can fix it directly.
If you like, could you please consider adding format : {plugin} and {editor_id} without {form_Id}? I want translate using xmls exported from xTranslator. This xml contains the ESP name, EditorId, Rec type, and translation string, but not contains FormId.
I think it easy to convert xml to json (this Mod format). So if you can support this format, I'll create a conversion script in Python.
I know this idea is not useful for general users. However, in some communities (Japan) translation using xTranslator and xml is common.
Conversion Example:
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SSTXMLRessources>
<Params>
<Addon>BSHeartland.esm</Addon>
<Source>english</Source>
<Dest>japanese</Dest>
<Version>2</Version>
</Params>
<Content>
<String List="0">
<EDID>CYRDialogueMountainWatchOreejTaiStory02</EDID>
<REC>DIAL:FULL</REC>
<Source>Have you told the others in Mountain Watch?</Source>
<Dest>マウンテンウォッチの人間には話しましたか?</Dest>
</String>
:
JSON:
[
{
"plugin": "BSHeartland.esm",
"editor_id": "CYRDialogueMountainWatchOreejTaiStory02",
"type": "DIAL FULL",
"string": "マウンテンウォッチの人間には話しましたか?"
}
]
The process "finalizing your translations in xTranslator" takes a huge amount of time when using mod list. XML to Json conversion can skip this finalizing process.
As example in xTranslator's XMLs it is not possible to get the FormIDs of specific strings.
Thank you for this much-needed tool, and for the converter :)
However, a strange issue occurred: I use Alternate Start - Live Another Life and DSD v1.1.2 seems to prevent the quest from updating (when choosing a start from the statue, nothing happens). Tested with JSON and without JSON file ^^'
EDIT: Fixed in reupload.
Edit: Thanks for the fix in 1.1.3 :)