quisquous / cactbot

FFXIV TypeScript Raiding Overlay
Apache License 2.0
792 stars 379 forks source link

Customize version for FFXIVProcess #1945

Closed cubic-spline closed 2 years ago

cubic-spline commented 4 years ago

Summary

I'm playing on intl server (5.35) but using a localization patcher that swap the text mapping to cn. I'll be seeing chinese in both my UI and fflogs for all contents up to 5.25 (cn latest) but en/jp beyond that. Setting parser language to cn would make the general overlay like kagerou working, but cactbot seems to be not responsive. Raidboss wouldn't even trigger on dummy.

After some log printing, I found the problem being it's using FFXIVProcessCn to trigger events, which have a different charmap thus sending null as input to js callbacks. Things like this.me are all undefined. I can also see the error log "Charmap signature found 0 matches");.

I tried hardcoding to use FFXIVProcessIntl instead and things are working with the rebuilt dll.

I'm wondering if we can decouple client version from language, maybe as a develop option. I'm quite noob to windows programming otherwise I'd make a PR. This might actually broader impact as I can see some other stuff like buff counters depending on language (and subsequently version).

Thanks for the making the fantastic plugin btw!

quisquous commented 4 years ago

I think we could move towards what OverlayPlugin does, which is to try to find the signature via all versions, rather than just picking a version and then using that. I think then we wouldn't need an option. This probably isn't something I'll have time to look at any time soon, but if you were interested in sending a C# patch to do this sort of thing, I'd be happy to take a look.

Jaehyuk-Lee commented 4 years ago

Under this, https://github.com/quisquous/cactbot/blob/6809fe44899ee01b7bf98e7280b3203b411a7f4a/resources/user_config.js#L51 add

        if (options.EnforceParserLanguage)
          options.ParserLanguage = options.EnforceParserLanguage;

Under this, https://github.com/quisquous/cactbot/blob/6809fe44899ee01b7bf98e7280b3203b411a7f4a/ui/config/data/general_config.js#L119 add

    {
      id: 'EnforceParserLanguage',
      name: {
        en: 'Enforce Parser Language',
        ko: '파싱 플러그인 언어 설정 강제 변경',
      },
      type: 'select',
      options: {
        en: {
          'Use FFXIV Plugin Language': 'default',
          'English (en)': 'en',
          'Chinese (cn)': 'cn',
          'German (de)': 'de',
          'French (fr)': 'fr',
          'Japanese (ja)': 'ja',
          'Korean (ko)': 'ko',
        },
        de: {
          'Benutze FFXIV Plugin Sprache': 'default',
          'Englisch (en)': 'en',
          'Chinesisch (cn)': 'cn',
          'Deutsch (de)': 'de',
          'Französisch (fr)': 'fr',
          'Japanisch (ja)': 'ja',
          'Koreanisch (ko)': 'ko',
        },
        fr: {
          'Utiliser la langue du Plugin FFXIV': 'default',
          'Anglais (en)': 'en',
          'Chinois (cn)': 'cn',
          'Allemand (de)': 'de',
          'Français (fr)': 'fr',
          'Japonais (ja)': 'ja',
          'Coréen (ko)': 'ko',
        },
        ja: {
          'FFXIV Pluginの言語設定': 'default',
          '英語 (en)': 'en',
          '中国語 (cn)': 'cn',
          'ドイツ語 (de)': 'de',
          'フランス語 (fr)': 'fr',
          '日本語 (ja)': 'ja',
          '韓国語 (ko)': 'ko',
        },
        cn: {
          '使用最终幻想XIV解析插件设置的语言': 'default',
          '英语 (en)': 'en',
          '中文 (cn)': 'cn',
          '德语 (de)': 'de',
          '法语 (fr)': 'fr',
          '日语 (ja)': 'ja',
          '韩语 (ko)': 'ko',
        },
        ko: {
          'FFXIV Plugin 언어 사용': 'default',
          '영어 (en)': 'en',
          '중국어 (cn)': 'cn',
          '독일어 (de)': 'de',
          '프랑스어 (fr)': 'fr',
          '일본어 (ja)': 'ja',
          '한국어 (ko)': 'ko',
        },
      },
      default: 'default',
      debug: true,
      setterFunc: (options, value) => {
        if (value === 'default')
          return;
        options['EnforceParserLanguage'] = value;
      },
    },

Will resolve this problem, but I don't know if this should be implemented to cactbot. Swapping language is definitely against SQEX ToS (cactbot is also against it but it's gray zone as Yoshi-P mentioned.) plus, that's not a common thing to do on game client.

Ah, this don't exactly works need to fix dll part, I can make it work but as I said up there, I don't know if this should be implemented.

quisquous commented 2 years ago

I'm just going back through old issues. I do think this needs to be changed in the C# code. If you wanted to refactor the memory signature code to behave more like OverlayPlugin (where it looks for all signatures and then uses any it finds vs cactbot only looking for the version it needs), then I'd take those changes. I'll close this for now since this is an old issue, but feel free to reopen if this is still something you're interested in.