Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add fr localization #57

Closed
quisquous opened this issue Feb 19, 2018 · 54 comments
Closed

Add fr localization #57

quisquous opened this issue Feb 19, 2018 · 54 comments

Comments

@quisquous
Copy link
Owner

I think the first step is to add a locale file like hibiyasleep did for pull #23.

Timelines and triggers are their own thing. The current trigger format looks like this:

{
  id: 'O8S Shockwave',
  regex: / 14:28DB:Graven Image starts using Shockwave/,
  delaySeconds: 5,
  alertText: 'Look for Knockback',
  tts: 'knockback',
},

I think we could do something like this:

{
  id: 'O8S Shockwave',
  regex: / 14:28DB:Graven Image starts using Shockwave/,
  regexFr: /something fr here/,
  regexKo: /something ko here/,
  delaySeconds: 5,
  alertText: {
    en: 'Look for Knockback',
    fr: 'fr text here',
    ko: 'ko text here',
  },
  tts: {
    en: 'knockback',
    fr: 'fr tts here',
    ko: 'ko tts here',
  },
},

For timelines, one option that I'm not really fond of is to just have entirely duplicate timelines for each language. That seems less than great, because then if somebody ever resyncs times in a timeline or something, they'd have to adjust everything independently. I was thinking of maybe being able to just replace ability names from the english version.

So, I was thinking of something like this, for o8s.txt:

{
  replaceNames: {
    'Graven Image': 'fr translation',
    'Mana Charge': 'fr translation2',
  },
  replaceSyncs: {
    'Kefka': 'fr kefka mob name',
    'Graven Image': 'fr graven image mob name',
  },
},

I was thinking of just applying them all as search and replace regex substitutions, with a different block for replacing the timeline text in the bars from the replacing the syncs.

@Amiral-Benson
Copy link
Contributor

I like the solution for Triggers, it's very clean and simple to work with.

As for the timeline solution, I too, would rather not have to deal with separate files if possible, especially with that kind of files, subject to many changes right after the release of a fight, and I find your solution of replacing names and syncs like this quite suitable.

quisquous added a commit that referenced this issue Feb 25, 2018
This closes issue #8.

This also is intended to be used as the way for issue #57 to
replace timeline names in English with French.
quisquous added a commit that referenced this issue Feb 25, 2018
This is intended to help solve issue #57.
quisquous added a commit that referenced this issue Feb 25, 2018
Triggers can now have localized regexes.  For a given local (e.g. ko)
if there's a regexKo entry on the trigger, that will take precedence
over regex on its own.

Additionally, any trigger field that can be treated as a function
can now also return localized responses as an object, e.g.
instead of:

   return 'Get Out';

...triggers can instead do something like:

   return {en: 'Get Out', fr: 'something french here, etc'};

This change also avoids running Regexes.Parse on every single log line
for every single trigger.  @_@;;

This will help issue #57.
@quisquous
Copy link
Owner Author

I think this roughly should be enough for you to get started on raidboss translation. Let me know if you have any questions or if any of this doesn't work. I would suggest starting with the Middle La Noscea test.js/test.txt triggers and timeline to make sure this all works. Please replace my "You poke the striking dummy in French" jokes with something more real. ;)

One question I do have is if the test overlay works for you. When @hibiyasleep was looking at localization in Korean, it looked like the Korean build had slightly different memory offsets. I'm curious if your hp/mp/job data values look reasonable.

Regarding the rest of localizing cactbot, here's the remaining pieces (mostly for me to remember this later):

  • raidboss: There's roughly three callouts (e.g. o4s) across all fights that use timelines. I think maybe there needs to be some replacement text for this? Or alternatively Options.Language should be exposed to data so you can conditionally add these based on locale.
  • jobs: should be good to go, assuming the test page works and memory locations are not different between the English and French versions.
  • pullcounter: resources/fights.js needs start/end regexes for different locales, and support for these in dps_phase_tracker.js and pull_counter.js
  • oopsyraidsy: probably partially works at the moment. regexes are all based on effect names and ability ids, so don't need to be localized. Much of the output text is just based on parsed ability names (so would be localized already) but some of it is not. This needs to have the same support that raidboss got in 6c2c560 for returning an object with different locales in it.

@hibiyasleep
Copy link
Contributor

hibiyasleep commented Feb 26, 2018

on raidboss - there's another problem, that boss name (which referenced by regex) are also translated in game, so sometimes trigger doesn't work.

[21:43:51.800] 1A:엑스데스 gains the effect of Combust II from 히비야 for 30.00 Seconds.
[21:43:54.000] 00:2aab:엑스데스가 죽음의 선고를 시전합니다.
[21:43:56.509] 14:1D07:(Censored) starts using Stone IV on 엑스데스.

Usually not whole message get translated, so maybe we can just replace bosses' name only?

@Amiral-Benson
Copy link
Contributor

We're a bit in between two versions here, and while I know how to get the current files, I don't know how to get easily the current compiled CactbotOverlay.dll in order to test things, since I'm not a coder ^^'
And I believe it didn't worked well with the old one in my tests ^^'

I think it won't be a problem later when all core things will be sorted out, and only triggers and timelines for specific fights will need translation, but in the current state I believe I need it. Is there any easy way for me to get that?

@quisquous
Copy link
Owner Author

I'll attach a build here later tonight.

@quisquous
Copy link
Owner Author

Here you go: cactbot-0.6.4-prerelease.zip

@Amiral-Benson
Copy link
Contributor

Thank you for this prerelease!

I'm encountering an issue.
I installed it, and in \cactbot\user\jobs-example.js I set the language to:

Options.Language = 'fr'

And I renamed the file jobs.js, but as soon as I do that and reload the overlay, I get this ACT error:

03/03/2018 22:31:38: Info: Test Jobs: BrowserConsole: Uncaught TypeError: Cannot read property 'youGainEffectRegex' of null (Source: file:///C:/Program%20Files%20(x86)/Advanced%20Combat%20Tracker/OverlayPlugin/cactbot/ui/jobs/jobs.js, Line: 204)

quisquous added a commit that referenced this issue Mar 3, 2018
This should fix some errors going on in issue #57.
@quisquous
Copy link
Owner Author

4f9cc6d should fix it, sorry!

@Amiral-Benson
Copy link
Contributor

Amiral-Benson commented Mar 4, 2018

I installed the 5 new files, the error disappeared, but if I set \cactbot\user\jobs.js to 'fr', the jobs overlay shows nothing, if I let it to 'en', the jobs overlay works (tested on Monk) but the buff/debuff icons doesn't seem to work.
There's the cheese icon displayed all the time, which I believe is the Well Fed reminder, even if I took some food, it stayed there.
Someone drop an AST Balance on me, and no icon showed up.

I translated the \cactbot\ui\raidboss\data\triggers\test.js I went to Summerford, and it doesn't work with French emotes, it doesn't start with French Countdown, but when I paste as /say the text of English emotes, it works.

It's like it thinks I'm using ACT in English.

I think I translated everything, besides some common terms such as Super Tankbuster, some places were missing the French placeholders you created for some parts, so I added them, there's only the info, alert and alarm texts that I didn't translated, because I didn't knew if I could do that in the same place as the timelineReplace.

About the test overlay, Jobs, level, HP, MP, and CP are correct, but the GP is increasing constantly by increments of 5 every ticks when I pick a non DoL job (1500/0 then 1505/0, etc.), when I swith to a DoL class, the value is correct.

I attached the \cactbot\ui\raidboss\data\triggers\test.js translated.

Your plug-in is picking up the language automatically from the ACT FFXIV plug-in language setting? Or do we have to set up that somewhere else? Since there is this option in the \cactbot\user\jobs.js, I'm a little confused.
test.zip

@quisquous
Copy link
Owner Author

quisquous commented Mar 4, 2018

Sorry for all the headaches! I tested raidboss locally and it mostly looks like unicode isn't working properly in regexes. For testing, if you shorten the regular expressions to words without accent marks, it seems to work fine for me. Let me see if I can fix that up for you. Hopefully once these first hurdles are worked out, it should be more straightforward in the future.

The language isn't picked up automatically from ACT settings, because I didn't even know there was a language parsing option there until just now! (Thanks!) I'll look into adding that as a default. You currently have to set the language option for each module, so user/raidboss.js needs it for raidboss and user/jobs.js also needs it for jobs, etc. I wonder if raidboss is using en triggers because you haven't set that one too.

Re: test overlay. That's how they fixed GP when switching between jobs. It silently increases in the background until you switch to a gathering job which then will cap it. So, that's working properly. Do the job values work too, e.g. job: 70 MNK x | y (z) where x is your greased lightning stacks, y is your chakra stacks, and z is the ms left on greased lightning?

(Sorry, again!)

quisquous added a commit that referenced this issue Mar 4, 2018
This fixes the return values from triggers to properly return localized
results.  Currently they only return the 'en' value.

This should help with issue #57.
quisquous added a commit that referenced this issue Mar 4, 2018
Previously, this was destroying any non-ASCII characters in read files,
which meant that it was impossible to specify these properly, either
as regexes or as outputs.

This fixes a number of problems in issue #57.
@quisquous
Copy link
Owner Author

quisquous commented Mar 4, 2018

Ok, I fixed a couple of things, but it requires some changes to the plugin, so here's another build: cactbot-0.6.4-prerelease2.zip.

I'll hopefully release another official version soon, but I was waiting on changes to fix issue #56 before doing so.

With this change, I was able to set Options.Language = 'fr' in user/raidboss.js and echo the triggers in the console to start the timeline and get triggers. So, hopefully this should be good. I also did some local debugging with jobs and it seems to be fine too. I'm hoping the data files issues was the problem here too.

Also, you're correct that there's no support yet for translating the infoText/alertText/alarmText that refer to timelines. I'll work on that (it's in the list of remaining pieces in a comment above), but there's very few things that use timelines for callouts, so it's fairly minor. The test timeline does a lot of it, but only because the test timeline is there to show off everything that can be done.

@Amiral-Benson
Copy link
Contributor

I tested this new prerelease, the test.js for the raidboss worked flawlessly, I also enabled the SpokenAlerts and the TTS in French worked as well!

But I could not start the test with the in-game countdown, only from /bow. I rechecked the fr.js file, and the sentence for the countdown seem to be the right one (À l'attaque !).

And, unless I made a mistake, the job overlay now doesn't seem to work at all, it only shows the Cheese icon. I tried a couple of buff, only a Balance worked, but it might be because it's close to the English one (La Balance).
It doesn't show any more the custom bars and countdown for MNK.

The test overlay informations for MNK are all correct, the countdown is synced, I also tested for BRD, name of song, stacks, and countdown for the song were all correct.

quisquous added a commit that referenced this issue Mar 4, 2018
@quisquous
Copy link
Owner Author

Yay!

Ok, I think d4e6500 should fix the test timeline. The test timeline itself had a sync for "Engage" and that needed to be replaced too. I'll look into making it reuse the translation directly from lang/fr.js but it's just duplicated right now for convenience.

Glad to hear that the test overlay is working. Memory locations are a pain enough for me to figure out. Thankfully they only change like once or twice an expansion or so, but I'm glad nobody else has to go through that. <_<

I am not sure what's wrong with your jobs overlay regarding missing bars. Did you set an option in user/jobs.js like Options.JustBuffTracker = true? (If you copied jobs-example.js into jobs.js that might have done it.)

In terms of buffs appearing, I think Well Fed is the easiest one to test because you can buy super cheap food, click it off, and there's no cooldown. When I have fr turned on, the line it's looking for in the log is something like 1A:Ton Katsu gains the effect of Repu from ? for ? Seconds. where the ? would match anything. If you start attacking a target dummy with ACT open, eat food, and then look at the ACT log, what line does it give you?

@Amiral-Benson
Copy link
Contributor

It almost fixed the timeline, somehow it seems the exclamation point is causing an issue, while 'Engage!': "À l'attaque !", doesn't work, 'Engage!': "À l'attaque" works.
It's not because of the space before the exclamation point I think, because in French there's always a space there.

And you were right, I made a clean user/jobs.js with just language set, and everything worked, food, pots, job helpers, etc.

Should I start to translate some fights now? By taking examples from the methods you used in test.js, or is it better I wait a bit more so you can make some changes?

And if I understand correctly, I will have only to translate things inside the triggers .js files, nothing inside the timelines .txt files?

@quisquous
Copy link
Owner Author

quisquous commented Mar 4, 2018

I think things are working enough that you should start translating some fights now using the same replaceText/replaceSync for timelines and the same regexFr and returning 'fr' for triggers. And you're correct, you should only translate things in the js files and not in the txt files. If raidboss is mostly working, then you should be able to go into fights with translated timelines and triggers and it should start being able to be useful for you.

Let me know if you feel like you need any automated tools for this to help verify replacement text or find missing translations. Some things I could do would be like:

  • list of all untranslated triggers (by file / trigger id)
  • printing out the full replaced timeline
  • list of all timeline syncs that do not have any replaceSync lines that affect them (or replaceSyncs/replaceTexts that don't do anything)

Re: Engage translation. 🤔 🤔 🤔 I printed out the replace syncs locally to make sure they looked ok and I see raidbossy: BrowserConsole: /:Engage!/, /:À l'attaque !/ which seems reasonable to me. Can you do a couple of tests for me?

  1. In timelines/test.txt, if you replace the /:Engage!/ with /:À l'attaque !/ directly in the file, does it work properly?
  2. In triggers/test.js, if you replace the 'Engage!': "À l'attaque !" with 'Engage!': "À l'attaque " (space but no exclamation) does it work properly?

@Amiral-Benson
Copy link
Contributor

Okay, I'm gonna start by translating first the current most useful fights for me, O8S, UCoB, etc. then I'll slowly do all the rest.

I believe I have ACT logs for pretty much every fights, some might be hard to find in the archives, but I believe that if I look at my FFLogs upload dates, I can use those dates within the import a Log File feature of ACT to track them down.
For fights where I didn't see yet the all fight, I've seen only 30% of God Kefka for example, I'm wondering what would be best.
I can use XIVDB translations, one tricky thing is that the web site display all French enemies actions by putting a capital at the beginning of every words, which most of the time is not what the game does, it depends on semantic, so I think I'll ask Josh Freeman the creator of XIVDB, if he can do something about that, he always helped me with things like that in the past.
FFlogs does the same with French ACT uploads, it put a capital on every Abilities words, while in ACT logs there's the real way the game used.
So I'm wondering if I could find a French player on FFlogs who always clear everything super fast, and if I somehow could find a way from FFlogs to get their raw ACT logs.
This would be really for when I'm stuck with not enough personal logs, do you guys here used a specific way in those cases?

Thanks a lot for proposing automated tools, I'm still unsure how laborious some triggers files will be, something that could point out I missed a translation somewhere could be useful. I'll use Dreamveaver, as it's part of my Creative Cloud subscription, I don't know if that helps.

I'll probably ask questions here when it comes to some special regex where it needs to pick up things like names, gains, loses, etc.

I'm wondering also if I could take some freedom for the TTS, I noticed sometimes that Alert Text are more complete. For example lots of TTS currently just say the name of the attack, but only the Alert Text says what to do, not the TTS.
So I'm wondering if I should only customised them for myself in my /user/raidboss.js or if I could take some freedom in the common trigger file.

I did the tests you specified, none of them worked, and I made sure I reset the overlay each time, as well as making sure I properly ended up the timeline with the emote.
I also made sure for the 1st one that I had nothing in the .js file for replacement, and for the second test I made sure I put back the original text in the .txt file.

@quisquous
Copy link
Owner Author

I don't think there's a way to get raw ACT logs from fflogs. You could try talking to Kihra on the fflogs discord, maybe? I usually ask friends for logs if it's something I haven't seen or just use my own logs if I have. I don't have any secret source.

If it's just a question of capitalization, you can add an i to the end of the regular expression to make it case insensitive, e.g. regexFr: /Test/i will match against Test or TEST or test etc. If you know the capitalization then I wouldn't use an i, but if you're speculatively making triggers for things you haven't seen, then maybe that will help.

Re: TTS. Personally, I don't use TTS for that much. I find audio a lot more distracting than visual text and folks I know who use TTS generally like them shorter than the long sentences that some of the infoTexts have. That's kind of why they're like that. Feel free to make the French versions more descriptive if you think that'd be useful.

Re: Engage. That's awfully curious. I wonder if that space is somehow special. Does changing it to 'Engage!': "À l'attaque.*!" work?

@Amiral-Benson
Copy link
Contributor

Your case insensitive capitalization regex sounds perfect for lots of situations, and thank you for pointing me out the FFLogs Discord, I'm sure over there I'll always found players willing to share their logs, that should be the perfect source, and in last resort I could always ask Kihra.

I tested 'Engage!': "À l'attaque.*!" and it works!

@quisquous
Copy link
Owner Author

quisquous commented Mar 7, 2018

It seems like the space must be special, then! Can you try replacing it with a non-breaking space? Which is probably Alt+0160 in Windows? Alternatively, copy and paste directly from an encounter log?

Edit: https://en.wikipedia.org/wiki/Non-breaking_space#Width_variation

Alternatively, it's not a non-breaking space, it's a narrow non-breaking space? Not sure how to enter that in other than copying it from an encounter log?

@Amiral-Benson
Copy link
Contributor

I replaced it with a non-breaking space, and unfortunately it didn't worked.

I used Alt+0160, I used Alt+255, and to make sure I was getting the right space, I opened up the file in Microsoft Word with Unicode UTF-8 encoding, and set it up to display the formatting:

2018-03-07 1

Word uses a dash for a normal space, and a ° for a non-breaking one, so I was sure I entered a non-breaking one. I also used the Word shortcut Ctrl+Shift+Space, same result.

When I copy the sentence from FFXIV logs and paste it into Word, I get a regular space before the exclamation point.

I also did the same test with the sentence Début du combat dans 5 secondes ! which contains no apostrophe but still an exclamation point at the end, it's the sentence saying the fight will start in 5 seconds, but it didn't worked as well.

Then I set up an ACT trigger in its Custom Triggers tab, and the same way, ACT is not picking up the string unless either I remove the exclamation point and space, or I put a .* to replace the space.
If I remove the exclamation point, but not the regular space, it doesn't work.
If I remove the exclamation point, and only keep a non-breaking space, it doesn't work.

@quisquous
Copy link
Owner Author

Also! I realized that the WipeDetector is built into C# and so needs localization as well. If you have translations for Weakness/Brink/LB3 names, that'd be quite appreciated: https://github.com/quisquous/cactbot/blob/master/CactbotOverlay/WipeDetector.cs#L36

CptDraco added a commit to CptDraco/cactbot that referenced this issue Apr 21, 2018
* Shortening O5 timeline names (quisquous#49)

* Adding timelines for Sigmascape 6-8N (quisquous#53)

* Cleanup o5678n reset lines

* O8S naming cleanup (quisquous#55)

* Triggers for o6s (quisquous#54)

* Add Triggers in o6s

* update severity for last kiss target

* Fix tabbed indents and fix missing square bracket

* More indenting fixes

* o7n: replace missile with prey

* raidboss: add preRun functions

* raidboss: Allow overrides for condition and texts

This allows users to specify shorter/longer outputs from triggers.  Also,
overriding conditions lets folks narrow (or broaden) when triggers show
up, e.g. see provokes even when you're not a tank or turn off mechanics
triggers for particular roles when they matter less.

Style-wise the capitalization on all the options looks weird, but I'm just
going to leave it for now for the sake of consistency.

Closes quisquous#51.

* Add tts for general provoke/shirk/etc triggers

Also shorten the names.

* ucu: Fix adds phase rp text mistake OOPS

* raidboss: o6s triggers

* o5s: Add more sync windows in case somebody misses the train coming back

* fractal hard: don't call knockback on first death spin

* o7s: make more program names specific

* o5s: narrow sync times after add phase

* Fix https update check

Releases page is now https only, so needs some extra flags and
should use the correct url.

* Bump version to 0.6.3

* Create fr.js (quisquous#58)

* Create fr.js

New locale 'fr'

* Update fr.js

Added translation for Seal and Unseal.

* Logic fixes in lang/fr

* Move zone names out of locale-specific lang files

These names come from ACT and not the game, so they're all in English.

* Add sigmascape zones to well fed regex

* Fix cactbot initialization race

The log doesn't get set up until after the plugin has started.
There's no event for this, so defer cactbot initialization until the
first slow timer.

This allows initialization error messages to not be dropped on the floor.

* Support html entities in custom elements

resource-bar, timer-bar, and timer-icon all currently only allow
flat text.  Allow html entities in these text strings as well.

* raidboss: Allow timeline names to be overridden

This closes issue quisquous#8.

This also is intended to be used as the way for issue quisquous#57 to
replace timeline names in English with French.

* oopsy: fix test bootshine trigger misapplying

* raidboss: Allow timeline syncs to be overridden

This is intended to help solve issue quisquous#57.

* raidboss: add support for localized triggers

Triggers can now have localized regexes.  For a given local (e.g. ko)
if there's a regexKo entry on the trigger, that will take precedence
over regex on its own.

Additionally, any trigger field that can be treated as a function
can now also return localized responses as an object, e.g.
instead of:

   return 'Get Out';

...triggers can instead do something like:

   return {en: 'Get Out', fr: 'something french here, etc'};

This change also avoids running Regexes.Parse on every single log line
for every single trigger.  @_@;;

This will help issue quisquous#57.

* oopsy: re-re-fix test bootshine typo

This fixes a typo from 4dd1cc4, whoops.

* oopsy: ability ids can only match entire ids

This prevents Bootshine (35) from matching Hakaze (1D35).

* raidboss: O8S timeline tweaks (quisquous#62)

Adding targetable/untargetable lines where appropriate

* Add DispatchToJS lock to prevent races

These data races have always been there, but were only going to be
exposed in PullCounter, which called an OverlayMessage that dispatched
an event, which could collide with game events dispatched from the
fast thread.

These races result in bogus Javascript to execute, such as such as
    document.dispatchEvent(new CustomEvent('onSendSaveData', { detail: {document.dispatchEvent(new CustomEvent('onSendUserConfigLocation', { detail: "data":" etc

...because both of these events are trying to be sent simultaneously,
and the string builder still has text from the previous event in
progress.  This leads to anonymous Javascript errors like "Unexpected
token )", which are awfully confusing.  It also sometimes but not
always leads to JSON serialization C# errors.

(This could explain why PullCounter never started when loaded
remotely as well.  onSendSaveData could be clobbering other events.)

This should fix races that will become a lot more common in pull quisquous#64.

* raidboss: Fix triggers returning integers

This fixes a bug introduced in 6c2c560 where anything that returned an
integer was incorrectly handled, so all delaySeconds became zero.

One day I will learn enough Javascript not to make silly mistakes.

* Custom User Config Local Directory (quisquous#64)

Adds user-specified config directory override to the C# config panel.

By default, it picks the user directory adjacent to the CactbotOverlay.dll
(and not to the html).  So if you are using cactbot out of a git repo
outside of your ACT directory, you likely will need to specify a directory
override.

Closes quisquous#56.

* Minor fixes after pull quisquous#64

* Allow blank as a custom user directory default

This removes several levels of redundant default filling.

* Simplify user location messages

If remote user directories aren't going to check for existence, then
there's no reason to do it in the local case either.  This cleans up
needing to send the overlay name along with the message and just
allows the remote side to send the user directory alone.

This also removes the checks for css and js, which allows for
overriding css without overriding js in the case of local files.

* Refactor SendFastRateEvents preamble/cleanup

Since I'm about to add another early out, hoist the timer and semaphore
code outside the SendFastRateEvents body so that nobody can mess it up.

* Automatically add onDOMContentReady listener

Every plugin will now get code injected to wait for DOMContentReady.
Once this is done, it will message the overlay plugin back, which
will automatically send the user data info, and the overlay can initialize
itself.

(Overlays currently pre-initialize and then reinitialize, but that can be
cleaned up after this commit.)

* Wait for user config before initializing overlay

This is the followup to 476ea6d which changes overlays to wait on the
onOverlayInitialize message before creating any of their objects,
reading options, or hooking up to DOM elements.  This should stop
initialization races ONCE AND FOR ALL.

This also reverts most of 65cf263 which half-heartedly tried to fix this.

* util: make_timeline.py improvements (quisquous#67)

Added FFlogs support, event filtering, and phases. Also supports
importing from external scripts now.

* oopsy: belated 4.2 flag value updates

Many flag values changed in 4.2, most notably:
* '0' is never an attack anymore (which will help issue quisquous#63)
* instant death is 33 not 32
* mysterious 3C shift is now a 3D shift

The 3D change explains why oopsy was flakily dropping damage messages.

* oopsy: Add all nameless autos as ids

Thanks to Nemekh on the fflogs discord.

* oopsy: reset first puller on countdown start/cancel

This should hopefully address issue quisquous#63.

* readme: add more details to install instructions

* Add fr.js to overlay html files

This should fix some errors going on in issue quisquous#57.

* raidboss: fix localization return values

This fixes the return values from triggers to properly return localized
results.  Currently they only return the 'en' value.

This should help with issue quisquous#57.

* Read data files in unicode

Previously, this was destroying any non-ASCII characters in read files,
which meant that it was impossible to specify these properly, either
as regexes or as outputs.

This fixes a number of problems in issue quisquous#57.

* raidboss: fr localization for test triggers

From quisquous#57 (comment)

* Add french engage replaceSync for test timeline

This fixes the issue mentioned in:
quisquous#57 (comment)

* raidboss: add load/run o7s triggers

* raidboss: O7S timeline fixes (quisquous#72)

Minor oversights. They were close enough to not lose syncing but still
enough to be misleading

* raidboss: fix o7s visual continuity times

Fixes quisquous#73.

* raidboss: add suppressSeconds to triggers

Too many triggers have had to do this manually, such as heavensfall or kefka
triggers.  Add this option that prevents retriggering for N seconds.

* raidboss: Clean up triggers to use suppressSeconds

* raidboss: better ucu fireball logic

Don't use the debuff anywhere, just track if you took the fireball.
Also, shorten the triggers back to not talk about thunder.

* Adding O8S timeline syncs (quisquous#66)

* raidboss: Adding O8S timeline syncs

The diff may not be super useful, so I'll summarize the changes (beyond
simply adding syncs). Preserved the existing naming for the most part.

- Added the Thunder/Fire hits of Celestriad
- Fixed some slight +/- 1s timing issues
- Added all non-starstrafe Soaks (The Path of Light, renamed for
clarity), since they were included, albeit inconsistently, later on in
the fight. Having specific timing for them is useful for dodging into
it.
- Added All Things Ending to Past/Future End during Starstrafe. The ATE
cast on the normal ones is fast enough (3s) that it's not worth timing
it, but there's a bigger gap in that one (8s).
- Also added Meteor hit (the stack) during Starstrafe
- Added some missing Ultimas (1328, 1358, 1543)
- Added a missing Ultimate Embraces (1364)
- Changed tether times to activation rather than appearance

* raidboss: O8S timeline minor fixes

Forgot to save these.

* raidboss: O8S end of fight syncs

* Support mixing remote url with local user files

For obvious security reasons, Chrome doesn't let you load files
off the local disk from a remote url.  To fix this, have the C#
load all the user files from disk and pass them to JS if that
directory exists locally.  JS can then inject this text directly
into the page.  If the directory doesn't exist locally, then
the overlay will link to the user page.

This should let all combinations of local and remote for url and
user directories work properly.

Fixes quisquous#56.

* Log dll versions and locations when starting cactbot

This is a bit verbose, but I've had a ton of users who have old dlls
lying around their system (quisquous#75), or the wrong OverlayPlugin (quisquous#70),
or a misnamed FFXIV plugin (quisquous#50).  This should help debug things.

* raidboss: more o8s triggers

* raidboss: fix o7s rot triggers

* raidboss: improve mana release triggers for tts

Closes quisquous#59.

* Bump version to 0.6.4

* Fix null config directory preventing overlays from starting

The Uri constructor apparently throws exceptions (oops) and this was
causing the overlay to explode and not send the init message.  This
would happen if you hadn't set the user config directory.  I had
tested this earlier, but not after the most recent user file sending
changes that broke it.

SORRY T_T

Fixes quisquous#76.

* Bump version to 0.6.5

* de: Create de.js (quisquous#84)

Add german locale

* de: Update jobs.html (quisquous#79)

Add de.js to html file

* de: Update pull_counter.html (quisquous#80)

Add de.js to html file

* de: Update oopsyraidsy.html (quisquous#81)

Add de.js to html file

* de: Update xephero-cactbot.html (quisquous#82)

Add de.js to html file

* de: Update raidboss.html (quisquous#83)

Add de.js (german lang)

* Allow spaces in cactbot user config dir locations

Uri unescaping, oops.  /o\

Fixes quisquous#90.

* Try loading user files html-relative before dll-relative

This is the way it used to work and allows folks working in git
repositories that aren't inside of the ACT folder to have their
user folder work as they'd expect.  If the html-relative doesn't
exist, it'll fall back to DLL-relative.

Fixes quisquous#88.

* Localize o5s for de/fr/jp (quisquous#85)

JEDF clients should now work with timeline sync and triggers. 
timeline translation for german client added

* Clean up formatting from pull quisquous#85

Multi-line conditionals need {}.
Two space indent everywhere.
Line up }; with the { indent level.

* Fix fr engage message in pull quisquous#85

See comments in quisquous#57 for more details.

* Split out regexes by language after pull quisquous#85

* Register languages before initializing overlay

* Add more ignore zones to xephero dps

* oopsy: ignore pvp and eureka

* raidboss: eureka triggers

* Fix typo in o2s.js

Fixes quisquous#94.

* raidboss: add fafnir eureka trigger

* o8s: Fix hyperdrive and ultimate embrace triggers

Closes quisquous#98.

* raidboss: pass locale through as data.lang

This should help with issue quisquous#57.

* o8s: add fr translation for mana release

This uses the new data parameter from fcc101c to help issue quisquous#57.

* jobs: Add option for showing hp/mp for other jobs

* Add eureka map module

* eureka: make resize helper match real thing

* eureka: be more permissive with tracker regexes

Tracker regexes can have hyphens in them too.

* eureka: prevent console error when changing zones

* rdmty: fix resize handle not appearing

The path to resize_handle.js

Fixes quisquous#102.

* eureka: add ability to import times from web tracker (quisquous#103)

* eureka: Split out tracker names explicitly

* eureka: split out tracker vs local times

If you've seen a mob die, then that's more accurate than a tracker time.

* eureka: add more readme information

* eureka: add star in NM readme text

* raidboss: allow sound volume settings for infoText

Previously you could only do this on named sounds.

* eureka: add wraith counter
@quisquous
Copy link
Owner Author

I was looking at the raw ACT log and had a brief thought. I think I can re-use @xephero's make_timeline.py fflogs api interface and have fflogs itself do the translation for me for all the fights, e.g. this api link, add your own API key in at the end is a french translation of this english report because it uses fr.fflogs.com instead of www.fflogs.com.

If that's true, I think it'd be quite straightforward to generate auto-translations of timelines and maybe even some triggers. That couldn't do everything, but it could do a ton of the heavy lifting, I think.

quisquous added a commit that referenced this issue Apr 22, 2018
This uses fflogs to generate translations of all the mobs and ability
names in a given fight to automate producing the timelineReplace
section in cactbot triggers.

Produces a file that looks like https://pastebin.com/Us1ZKxjL

This doesn't get everything, as mobs that don't do damage (e.g.
Remorse casting the knockback ability) aren't listed.

This also lists effects for translation help, even though they're not
used by anything at the moment.

However, this is super helpful and saves a ton of work.

The next automation follow-up steps here are to
(1) add something that will process a timelineReplace and a timeline file
    and add TODOs for any missing translations
(2) do something smarter about name conflicts (e.g. Heavensfall + HF Trio)
(3) figure out how to use these automatically for triggers?

This should help with issue #57.
quisquous added a commit that referenced this issue Apr 28, 2018
@quisquous
Copy link
Owner Author

Coil is still missing nael rp text triggers , a number of timeline text translations (although all syncs should be there), fang of light / tail of darkness mob triggers, and all the trigger output translations. But, it's a lot closer now!

quisquous added a commit that referenced this issue Apr 29, 2018
Thanks for the log in #57, @IrealiTY.

fr translations still missing:
* all trigger outputs
* nael rp in adds phase
* some timeline replaceText
quisquous pushed a commit that referenced this issue Apr 29, 2018
@quisquous
Copy link
Owner Author

@Amiral-Benson I've been on a translation kick this weekend, so I committed the o8s changes that you had in the zip file above.

Sorry about the delay on the ucob fr localization. Been super busy with my static trying to clear ucob msyelf so haven't had a ton of free time. I think if somebody translated the trigger outputs, it'd be like 95% of the way there.

@Amiral-Benson
Copy link
Contributor

I just added the last remaining French translations for O8S (Fire stack and spread). #111

For your WipeDetector, here are the French translations you were looking for:

Weekness:
gains the effect of Affaiblissement from

Brink:
gains the effect of Mourant from

LB3 Names:

  • Astral Stasis: Équilibre Astral
  • Meteor: Météore
  • Sagittarius Arrow: Flèche Du Sagittaire
  • Dragonsong Dive: Plongeon Des Dragons
  • Dark Force: Force Des Ténèbres
  • Satellite Beam: Rayon Satellite
  • Final Heaven: Paradis Final
  • Chimatsuri: Chimatsuri
  • Last Bastion: Dernier Bastion
  • Angel Feathers: Plumes D'ange
  • Teraflare: TéraBrasier
  • Land Waker: Terre Vierge
  • Pulse of Life: Pulsation Vitale

Your auto-translation from FFLogs looks wonderful.

For UCoB, just like you, I've been trying to clear it lately, yesterday I managed to reach Teraflare 2 times, and I got one of the last 4 remaining Nael French quotes I still need.
Next Thursday I have another UCoB session, hopefully this will be enough to find out the 3 remaining quotes.
I've been using DAT miner tools to find them, but while I managed to locate lots of instances fight dialogues, Nael ones weren't there, and it's not handy to search, unless I missed a feature, I have to repeat the search manually in all text categories, and there's thousands.

Today I'm trying to finish UCoB triggers translation, to see if I'm missing something else than those 3 quotes, I have enough of my own logs up to Teraflare to help me.

@quisquous
Copy link
Owner Author

Thanks for those translations! I (unsurprisingly) haven't tested any of those ucob translations, so please let me know what's broken or not.

Do you also know the skill that Phoenix uses before golden phase, e.g. [19:29:21.118] 16:4000B4A3:Phoenix:26F2:Flames Of Rebirth:1048638C:Tini Poutini:30:10000:640F:59C0000:1C:26F28000:0:0:0:0:0:0:0:0:0:0:0:57562:4560:0:0:1000:0.7938568:3.126736:0:5725000:5725000:12000:12000:1000:1000:0:0:2.384186E-07:

The reason I ask is because wipe detection is (currently) a hacky check like "did you come back to life without weakness and there was no lb3", so Phoenix fits in that category too.

@Amiral-Benson
Copy link
Contributor

The Feu Résurrecteur yeah, still being in TeraFlare, I don't have logs yet for this transition, but I figured what you were trying to do.

Are you gonna need something specific from my logs there?

@quisquous
Copy link
Owner Author

Oh! Haha, it got autotranslated and I missed it. I should have looked there first, sorry. I just needed the skill name.

@Amiral-Benson
Copy link
Contributor

I translated everything I could for UCoB Timeline and Triggers. #112

I even found the French Nael quotes we were still missing for TeraFlare. I went back in the DAT mining software, it took me 2 hours, but I found all the quotes:

data-mining-ucob-french-nael-quotes

The translation was so poetically different, that I had to use their ID to be sure I was translating the right quotes.
Also, as you can see from the picture, it explains all the errors we had with spaces before punctuation points, they put <Indent/> as the space before ! or ? for example.

To translate UCoB further, I believe that like O8S one, it will require quite a lot of modifications.
If you think it is worth the extra work, you'll tell me if you want quick translations here or if you prefer to use placeholders that I will fill in the end, or anything else, etc.

@Amiral-Benson
Copy link
Contributor

@IrealiTY The French translation of UCoB is complete, you might want to tell your friend to give it a try. He needs to download latest versions of both the triggers and timeline.

@quisquous Maybe we could change line 4 of the Triggers file, to specify that French translation is full and not partial any more.

quisquous added a commit that referenced this issue May 19, 2018
Also, copy and paste translations from savage to normal modes.

cc @ArkfrostLumas @Amiral-Benson

This addresses some missing timelines from #119 and #57.
@mooondark
Copy link
Contributor

I've just made a pull request for Tsukuyomi-ex. As I am not used to GitHub (and dev related thing), I'm waiting for your advices.
If it's ok, i'll try to do the sigmascapes.

@nuks-fr
Copy link
Contributor

nuks-fr commented Jun 10, 2018

I don't know if I should post this here or make a new Issue but there is a problem with eureka tracker. trackerName is different depending on which language you set the website
English :
★ NMs whose windows are open: Sabo > Lord > Teles > Emperor > Callisto > Number > Jaha > Amemet > Caym > Bomba > Serket > Julika > Rider > Poly > Strider > Hazmat > Fafnir > Amarok > Lamashtu > Pazuzu
German :
★ NMs whose windows are open: Sabo > Prinz[p] > Teles > Kaiser > Callisto > Zahl > Jaha > Amemet > Caym > Bomba > Serket > Julika > Reiter > Poly > Simurghs > Hazmat > Fafnir > Amarok > Lamashtu > Pazuzu
French :
★ NMs whose windows are open: Pampa > Seigneur > Teles > Empereur > Callisto > Number > Jaha > Amemet > Caym > Bomba > Serket > Julika > Cavalier > Poly > Simurgh > Hazmat > Fafnir > Amarok > Lamashtu > Pazuzu
Japanese :
★ NMs whose windows are open: サボテンダー > ロード > テレス > アネモス > カリスト > ナンバーズ > ジャハンナム > アミメット > カイム > ボンバディール > セルケト > ジュリカ > ホワイトライダー > ポリュペモス > シームルグ > ハズマット > ファヴニル > アマロック > ラマシュトゥ > パズズ

I think we should do for trackerName the same thing you did for mobName
mobName: {
en: 'Sabotender Corrido',
de: 'Sabotender Corrido',
fr: 'Pampa Corrido',
ja: 'サボテンダー・コリード',
},
trackerName: {
en: 'Sabo ',
de: 'Sabo',
fr: 'Pampa',
ja: 'サボテンダー',
},

quisquous added a commit that referenced this issue Jun 10, 2018
This was pointed out as missing on #57.  (Thanks!)
@quisquous
Copy link
Owner Author

Thanks for pointing that out! Sorry for not doing that earlier.

@nuks-fr
Copy link
Contributor

nuks-fr commented Jun 10, 2018

Don't be sorry, you have done an amazing job with this plugin.

@quisquous
Copy link
Owner Author

I think this issue can be closed now, and any specific followups can be made in pull requests. Thanks for all the translation work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants