Friday, September 20, 2024 4:40:48 AM
> settings

Customize


Authenticate

> _2023-03-18.html.erb
<p>
  <p>
    Why - Hello there. It's been awhile! How have you been? I've been just swell, thanks for asking. I'm here to release a random update at a random time and act like this was all planned and everything.
  </p>
  <p>
    Spoiler alert, it's 2 years late 😂
  </p>
  <p>
    Just a little over 3 years ago, I started working on an update to replace the current the server extension with one that would let me do what I needed in order to add all the cool features that have been suggested over the years. As you could tell, it took some time. In short, I had to teach myself Rust lang and then <em>life</em> happened. What a own journey!
  </p>
  <p>
    This update being release today is not the update for the long awaited @esm v2.0, unfortunately, but it does lay all the necessary groundwork for me to bring you that update. I don't have a release date, but I can say that it will be released some time this year.
  </p>
  <h3 id="what-is-coming-in-the-new-update">What is coming in the new @esm v2.0 update?</h3>
  <p>
    I can't share too many details because I'm always coming up with new ideas and tweaking old ones, but I can tell you that @esm v2.0 will include the following:
  </p>
  <ul class="uk-list uk-list-hyphen">
    <li>32/64 bit support on Windows and Linux Arma 3 servers</li>
    <li>Improved performance, reliability, and memory-safety, thanks to Rust lang</li>
    <li>Improved server commands</li>
    <li>Vehicle and multiple reward support for the <code>reward</code> command</li>
    <li>And other surprises 😉</li>
  </ul>
  <p>
    <i>If you like reading code, you can see what I'm developing (and what's coming in the new update) by checking out the Github repositories for <a href="https://github.com/itsthedevman/esm_bot" target="_blank">esm_bot</a> and <a href="https://github.com/itsthedevman/esm_arma" target="_blank">esm_arma</a></i>
  </p>
</p>
<h2><strong class="esm-text-color-red"><a href="https://github.com/itsthedevman/esm_bot" target="_blank">esm_bot</a></strong> changelog</h2>
<h3>Core System</h3>
<ul class="uk-list uk-list-hyphen">
  <li>
    Upgraded from Ruby 2.7.6 to Ruby 3.2
  </li>
  <li>
    Expanded locale file into multiple files organized by the locales category
  </li>
  <li>
    Renamed <code>ServerSetting</code> attributes to be more descriptive
  </li>
  <li>
    Added <code>server_version</code> attribute to <code>Server</code>
  </li>
  <li>
    Added <code>reward_id</code>, <code>reward_vehicles</code>, <code>cooldown_quantity</code>, and <code>cooldown_type</code> attributes to <code>ServerReward</code>
  </li>
  <li>
    Added global logging methods <code>trace!</code>, <code>debug!</code>, <code>info!</code>, <code>warn!</code>, and <code>error!</code>
  </li>
  <li>
    Added better channel permission checks to handle when the bot is missing send/read permissions
  </li>
  <li>
    Improved await code for message responses with <code>ESM::Bot#wait_for_reply</code> and <code>ESM::Bot#waiting_for_reply?</code>
  </li>
  <li>
    Added <code>ESM::Callbacks</code> class for adding closure based callbacks to classes
  </li>
  <li>
    Added support for loading and executing <code>v1</code> versions of commands
  </li>
  <li>
    Added support for faster JSON parsing through the <code>ESM::JSON</code> class
  </li>
  <li>
    Expanded <code>ESM::Command::Base</code> methods out into their own files
  </li>
  <li>
    Added programmatic support for commands to skip the cooldown check
  </li>
  <li>
    Replaced <code>ESM::Command::Base#check_failed!</code> with <code>ESM::Command::Base#raise_error!</code>
  </li>
  <li>
    Replaced <code>ESM::Command::Base#deliver!</code> with <code>ESM::Command::Base#send_to_arma</code>
  </li>
  <li>
    Added support for Discord's message reply system. The bot will now reply to the message that triggered it
  </li>
  <li>
    Added support for editing a previously sent message via <code>ESM::Command::Base#edit_message</code>
  </li>
  <li>
    Simplified cooldown updating and creation code to avoid bugs
  </li>
  <li>
    Replaced <code>ESM::Command::Base#discord</code> with <code>ESM::Command::Base#on_execute</code>
  </li>
  <li>
    Replaced <code>ESM::Command::Base#server</code> with <code>ESM::Command::Base#on_response</code>
  </li>
  <li>
    Renamed <code>ESM::Command::Base.type</code> to <code>ESM::Command::Base.set_type</code>
  </li>
  <li>
    Renamed <code>ESM::Command::Base.aliases</code> to <code>ESM::Commmand::Base.register_aliases</code>
  </li>
  <li>
    Replaced <code>ESM::Websocket</code> and its sub-classes with <code>ESM::Connection</code> and its sub-classes.
  </li>
  <li>
    Improved <code>ESM::Embed.build</code> and embed template code
  </li>
  <li>
    Changed the default embed color from &quot;Exile Toast Blue&quot; to randomly pick a color from <code>ESM::Color::Toast</code>
  </li>
  <li>
    Replaced <code>ESM::Event::DiscordLog</code> and <code>ESM::Event::DiscordMessageChannel</code> with <code>ESM::Event::SendToChannel</code>
  </li>
  <li>
    Added @esm v2.0 support to <code>ESM::Event::ServerInitialization</code> and improved its performance
  </li>
  <li>
    Refactored <code>Hash#to_ostruct</code> to allow preserving Ruby data types when casting
  </li>
  <li>
    Refactored <code>OpenStruct#each</code> and <code>OpenStruct#map</code> to prevent nested instances of <code>OpenStruct</code> from being converted to instances of <code>Hash</code>
  </li>
  <li>
    Added <code>ESM::Command.configurations</code> that returns all command permission configurations
  </li>
  <li>
    Added <code>ESM::JSON.pretty_generate</code> for pretty printed JSON
  </li>
  <li>Added <code>ESM::Message</code> a Ruby representation of the data structure used for communication with the extension and A3 server
  </li>
  <li>Added <code>ESM::Arma::ClassLookup</code> class
    <ul>
      <li>
        This singleton class is used to convert Arma 3 object class names to their respective in-game display names
      </li>
      <li>Out of the box, this lookup has all vehicles, weapons, attachments, etc., for the base game plus the following mods:
        <ul>
          <li>
            CUP
          </li>
          <li>
            Exile (<i>duh</i> 😉)
          </li>
          <li>
            Extended Base Mod
          </li>
          <li>
            Extended Survival Pack
          </li>
          <li>
            KA weapons
          </li>
          <li>
            NiArms weapons
          </li>
          <li>
            RHS
          </li>
          <li>
            Secret Weapons
          </li>
          <li>
            SMA
          </li>
          <li>
            TRYK Uniforms
          </li>
          <li>
            USAF
          </li>
        </ul>
      </li>
      <li>
        <i>If there are other popular mods that I don't have in this list, please send me Steam Workshop links and I'll get exports for them</i>
      </li>
    </ul>
  </li>
  <li>Added <code>ESM::Arma::HashMap</code> a hash-like class that represents Arma 3's HashMap data type
  </li>
  <li>
    Moved territory ID obfuscation to <code>ESM::Server</code> and based it off of the server's key
  </li>
  <li>
    Added <code>ESM::Server#metadata</code> a volatile key/value data store for storing config data from the server that is only useful while the server is connected to ESM
  </li>
  <li>Renamed the following columns on <code>ESM::ServerSetting</code>
    <ul>
      <li>
        <code>gambling_payout</code> -&gt; <code>gambling_payout_base</code>
      </li>
      <li>
        <code>logging_reward</code> -&gt; <code>logging_reward_player</code>
      </li>
      <li>
        <code>logging_transfer</code> -&gt; <code>logging_transfer_poptabs</code>
      </li>
    </ul>
  </li>
  <li>Deprecated the following columns on <code>ESM::ServerSetting</code>
    <ul>
      <li>
        <code>request_thread_type</code>: No longer needed
      </li>
      <li>
        <code>request_thread_tick</code>: No longer needed
      </li>
      <li>
        <code>logging_path</code>: Moved to <code>config.yml</code>
      </li>
    </ul>
  </li>
</ul>
<h3>Commands</h3>
<ul class="uk-list uk-list-hyphen">
  <li>
    <code>!sqf</code>
    <ul class="uk-list uk-list-hyphen">
      <li>@esm v2.0: Added the ability to execute code on every connected player by providing <code>everyone</code> or <code>all</code> for a target:
        <ul>
          <li>
            <code>!sqf malden everyone systemChat &quot;Hi from ESM!&quot;</code>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <code>!server</code>
    <ul class="uk-list uk-list-hyphen">
      <li>
        Fixed a bug where the command would not work on a server that was offline
      </li>
    </ul>
  </li>
</ul>
<h3>Extension Server</h3>
<ul class="uk-list uk-list-hyphen">
  <li>Added Rust lang TCP server that handles communicating data between the bot and the Arma servers</li>
</ul>
<h2><strong class="esm-text-color-red"><a href="https://github.com/itsthedevman/esm_arma" target="_blank">esm_arma</a></strong> changelog</h2>
<p>
  <strong>This is for the upcoming <em>@esm v2.0</em>. This is not available for public use and does not reflect the current release</strong>
  <br>
  <i>Features and code are subject to change</i>
</p>
<h3>Core System</h3>
<ul class="uk-list uk-list-hyphen">
  <li>
    Added <code>tokio</code> based Rust extension that uses <code>message-io</code>, and <code>arma-rs</code> to communicate between the A3 server and the bot (<code>src/esm</code>)
  </li>
  <li>
    Added message standard for communicating data between the bot, the extension, and the Arma server (<code>src/message</code>)
  </li>
  <li>
    Added Rust build tool that handles everything from compiling and building the mod to deploying to the Arma server. Supports both Windows and Linux (<code>src/build</code>)
  </li>
  <li>
    Deprecated extension request system thread for <code>addMissionEventHandler &quot;ExtensionCallback&quot;</code>
  </li>
  <li>
    Added support for reloading <code>esm.key</code> while the server is running
  </li>
  <li>
    Added server side config for lower level control over logging, connection details, etc.
  </li>
  <li>
    Fixed an issue where escape characters in a server name would cause a crash
  </li>
  <li>
    Removed dependency on the server's restart time in <code>exile_server_config</code> to fix an issue when it's commented out
  </li>
  <li>
    Moved account existence checks from SQF to extension for both the player and the target
  </li>
</ul>
<h3>@esm</h3>
<ul class="uk-list uk-list-hyphen">
  <li>
    Switched to using <code>stringtable.xml</code> for mod messages to make it easier for the rest of the humans on this planet that don't use English to use their own languages
  </li>
  <li>
    Added support to redirect ESM's SQF logging calls to <code>esm.log</code> instead of the RPT
  </li>
  <li>
    Renamed <code>ESM_DatabaseVersion</code> to <code>ESM_DatabaseExtension</code>
  </li>
  <li>
    Renamed <code>ESM_PayTaxPercentage</code> to <code>ESM_Taxes_TerritoryPayment</code>
  </li>
  <li>
    Renamed <code>ESM_UpgradeTaxPercentage</code> to <code>ESM_Taxes_TerritoryUpgrade</code>
  </li>
  <li>
    Removed <code>ESM_fnc_checkForRequests</code> as that it is no longer needed
  </li>
  <li>Switched from Arma 3 <code>CfgFunctions</code> to Exile's <code>preInit</code> style of defining functions
    <ul>
      <li>
        <i>Also, I didn't like the look of <code>ESMServer_</code> so I shortened it to <code>ESMs_</code></i>
      </li>
    </ul>
  </li>
  <li>
    Added Discord embed SQF helper functions<code>ESMs_util_embed_create</code> and <code>ESMs_util_embed_addField</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_callExtension</code> with <code>ESMs_system_extension_call</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_exec</code> with <code>ESMs_command_sqf</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_log</code> and <code>ESM_fnc_logToDLL</code> with <code>ESMs_util_log</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_logToDiscord</code> with <code>ESMs_system_discord_log</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_preInit</code> with <code>ESMs_system_process_preInit</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_postServerInitialization</code> with <code>ESMs_system_process_postInit</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_respond</code> with <code>ESMs_system_message_respond_to</code>
  </li>
  <li>
    Replaced <code>ESM_fnc_sendToChannel</code> with <code>ESMs_system_discord_send_to</code>
  </li>
  <li>
    Added SQF Array utility functions <code>ESMs_util_array_all</code>, <code>ESMs_util_array_isValidHashmap</code>, and <code>ESMs_util_array_map</code>
  </li>
  <li>
    Added SQF Hashmap utility functions <code>ESMs_util_hashmap_fromArray</code>, <code>ESMs_util_hashmap_get</code>, and <code>ESMs_util_hashmap_toArray</code>
  </li>
</ul>
<h2><strong class="esm-text-color-red">esm_website</strong> changelog</h2>
<ul class="uk-list uk-list-hyphen">
  <li>
    Upgraded from Ruby 2.7.6 to Ruby 3.2
  </li>
</ul>
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8