<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 "Exile Toast Blue" 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> -> <code>gambling_payout_base</code> </li> <li> <code>logging_reward</code> -> <code>logging_reward_player</code> </li> <li> <code>logging_transfer</code> -> <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 "Hi from ESM!"</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 "ExtensionCallback"</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>