mwBot
Get test api key
Payment
English zone
sección española
MW Bot Usage Calculator
Download bot
last update files

 

Bot change history

Started by Nikolaj, 30 December 2024, 13:02

Previous topic - Next topic

Nikolaj

For lazy people, for those who do not know how to use a translator, for those who do not have a bot, but want to follow the development of the bot, I created this topic. I'll try to update the topic.
I remind you that after each update, you can find a list of all changes in the root of the bot folder, in a file called new.txt.
There the list of changes is written in Russian.

2025.07.27
Minor and other corrections are generally not accounted for in these points.
1. Fixed the goposition function.
2. Changed the behavior of the searchitems function.
With standard behavior, after finding an item, the bot would pause, requiring the pause to be lifted to continue the search. Now, this can be changed using the parameter:
searchitems_pause_on_result=1 or 0
• 1 - Standard behavior: pause after finding an item.
• 0 - After finding an item, proceed to the next script instruction.

3. Configuring caching levels for the goposition function.
Settings should be entered in config.ini.
Parameter:
gopath_cache=0 or 1 or 2
• 0 - Cache off. Maximum CPU load.
• 1 - Route caching enabled. Good if the character walks the same routes repeatedly. Light RAM load, reduces CPU load during repeated path calculations. However, there is still a significant CPU load when building the grid matrix.
• 2 - Route and matrix caching. Maximum optimization for CPU load and maximum RAM load.

2025.07.13
1. Optimized sellcollection function: Improved the performance of the collection selling function.
2. Optimized data validation for temporary file cleanup: Enhanced the efficiency of data checks performed during temporary file cleanup.
3. Experimental multi-instance game launch added: You can now run multiple copies of the game simultaneously without needing a virtual machine. A big thank you to Nikolaj for this!
• To launch the game in multi-instance mode, hold Alt and select "start game" from the menu.
• Please note: Using scenarios in multiple game copies is not supported. This feature is primarily designed for convenience when entering a cave or arena solo.
• Each new game instance will have a unique title to help you distinguish between open windows.
4. Optimized goposition module:
• Added caching methods for matrix creation and route plotting.
• Cache files are stored in the temp/cache folder.
• Matrix cache format: locname_make time_version
• Route cache format: locname_make time_version_diagonal mode_start1_start2_end1_end2
5. Enhanced logging: Added informative messages to the general log (mw.log) regarding drop_end_offset and enable_drop_control end time.
6. Implemented an individual encrypted obstacle map system: This new system provides personalized and encrypted obstacle maps.
7. Implemented automatic resume for unfinished scenarios: The bot will now automatically launch an unfinished scenario upon startup.
• A scenario is considered "finished" if it was completed, closed using Ctrl+F2, or exited using the exit or botexit functions. All other closures are considered unfinished.
• To enable this feature, add the following parameter to your bot's configuration file (config.ini):
resume_scenario_on_startup=1
• Then, restart the bot.
8. Improved goposition error handling: The goposition function now throws errors if invalid range values are provided.
• Valid x range: 1-600
• Valid y range: 1-600
• Valid details range: 0-50
9. Default matrix size set to 600x600: The matrix is now drawn by default at 600x600. This change will not significantly impact performance due to caching; the matrix will be drawn once and then accessed quickly from the cache.

2025.06.29
1. New function: var_delete=variablename
Deletes a variable.
Example:
var=text=Hello, World!
speak=%text%
sleep=1
var_exists=text={"false": ["var=text=Empty text in variable"]}
speak=%text%
2. Fix: goposition
3. Fix: Global hook interception.
4. Fix: Freezing text search in keypress=keyname=regexp
At times when the game froze, or there was simply no text from the game.
5. The xp_control function check has been moved higher and should trigger more accurately.
6. Optimized pet summoning when the enable_pet function is declared.
7. New function: goposition_turn_details
Coordinate detailing on intermediate turns. This is so the character doesn't approach the exact coordinates on a turn, but with a specified deviation.
Default: goposition_turn_details=0
8. Optimized global hook catching.

2025.06.19
1. New function: menusearch
Allows searching for items in menus and lists.
Example:
menusearch=regexp={"keys": "keyname", "true": ["speak=ok"], "false": ["speak=no"]}
keys: key for iteration, default key: s
false: list of commands executed if item is not found
true: list of commands executed if item is found.
One of the attributes must be present: true or false.
2. Fix for global hook interception.
3. Fix for some issues with incorrect process execution in triggers and with timewait, wait functions.
4. goposition algorithm optimized.
It has become more aggressive towards turns.
The algorithm's aggressiveness can be set using the function:
goposition_turn_penalty=100
Default is 100.
5. When attempting to load a config using the function loadoptions=filename, if the file does not exist, an error will be thrown and the script will terminate.
6. If the specified point for movement in goposition is inside a wall, or it's impossible to reach, an error will be thrown.
To intercept the error, you can use the event:
event_goposition_error
add_action_speak=error={"text": ["event_goposition_error"], "execute": ["go_to_block=next path"]}
If the event is not monitored, an error will be thrown and the script will terminate.
7. In the enable_one_target attack method, if the target has 1000000 hp, it is considered either a chest or an NPC and will not be attacked.

2025.06.08
1. Fix for waitspeak function.
Should now correctly process:
keypress=enter
waitspeak=regexp
2. Fix for goposition function when the one_target attack flag and attack_type=0 setting are active.
3. Optimization performed for obtaining version updates.
4. Fix for speech interception.

2025.06.07
1. New setting: keypress_text_timeout
Time to wait for text after pressing a key in the function:
keypress=keyname=regexp
Default value is 1 second.
Example:
keypress_text_timeout=1
2. Fix for pet summoning when the character is dead.
3. When the bot's HP reaches 0, a death flag is set.
Previously, the flag was only set when phrases about character death were received.
4. Implemented aiChat.exe utility.
Called by pressing F8 in the bot window. The aiChat.exe utility must be in the same folder as the bot.
The following settings are available in the config.ini file:
aichat_temperature=float 0.0 - 2.0
Creativity of responses. 0.0 for the most deterministic response.
2.0 for the most creative response, accuracy of responses may decrease.
Default is 1.0.
aichat_timeout=int time
Time to wait for a chat response.
Default is 60 seconds.
aichat_frequency_penalty=float 0.0 - 2.0
A parameter that reduces the likelihood of repeating the same words or phrases in the response.
Default is 1.0.
aichat_drop_provider=regexp
Regular expression to hide providers from the list of available models.
aichat_drop_model=regexp
Regular expression to hide models from the list of available models.

2025.06.05
1. Optimization of server connection settings.
2. Fix for minor bug when outputting speech via NVDA.
3. Fix for minor bug in route calculation in goposition.

2025.06.04
1. Optimization of control for the keypress=keyname=text function and data tracking in the trigger.
As soon as the text is similar to the trigger pattern, the execution of the keypress=keyname=text command will be stopped and the trigger block will be executed.
2. Fix for the problem where we terminated script execution but received a script execution error instead.
3. New variables:
%LASTBLOCK%
Name of the last executed block. Default block name: default
Redirects to the first line of the script.
%CURRENTBLOCK%
Name of the current block.
4. New setting for scripts:
ignore_mortal_timeout=10
Timeout during which the character death phrase will be ignored.
Needed to limit repeated launches of the mortal function.
Mainly designed for use when death tracking is done via a trigger for the event: event_mortal.

2025.06.03
1. Fix for event_mortal event:
add_action_speak=death={"text": ["event_mortal"], "execute": ["go_to_block=mortal"]}
wait
block=mortal
speak=successfull, death
sleep=2
go_to_block=mortal
2. Decreased game process control timeout from 0.5 to 0.1.
3. Fix for data in the adaptation file for the Chinese server.
4. Optimization of some functions when the game process disappears.

2025.06.01
1. Corrected the operation of the functions:
playfile_stop, player_all_stop, player_stop
Thanks to user: Dippydippy
2. New function: playfile_wait=filename
This function pauses script execution until the file filename finishes playing.
Usage example:
playfile=clear_logs.wav
playfile_wait=clear_logs.wav
speak=ended
Note: Not fully implemented according to the initial suggestion from user Dippydippy.
3. Internal work.

2025.05.25
1. Fix for critical error when using the reset_defaults function. Thanks to user Nikolaj.

2025.05.22
1. Default character movement speed set to 9 for the goposition function:
goposition_speed=9
2. Corrected line break handling in the script editor when pressing Shift+Enter.
3. Added the ability to replace text spoken by NVDA.
Parameters for config.ini:
speak_replace=1
• enable text replacement. The replacement file must be created in the bot's root directory: speakreplace.txt Line format: key=value original text=new text You can also specify a path to another replacement file using the parameter: speak_replace_path=filepath Where filepath is the path to the file relative to the bot's current directory. Example: speak_replace_path=myreplace.txt
4. Internal optimization of some procedures performed.
5. Now correctly handles the situation where the script is launched by pressing Enter when the game is closed, and after loading, the character is dead.
Previously, in such cases, only the mortal script would trigger, and the bot would stop working. Now everything works correctly – the bot continues execution.
6. When setting the volume in the volume=0 function, the sound is now completely turned off.
7. Added new function: reset_defaults — resets all settings to default values.
Example:
attack_type=1
keys_attack=j|i|h
enable_one_target
reset_defaults
As a result, the bot will return all parameters to their defaults:
attack_type=0
keys_attack=j
disable_one_target
8. Added new function: shutdown — shuts down the computer.
Usage example:
shutdown
This command can be used, for example, in conjunction with a delayed timer.

2025.05.10
1. Fix for last_login function.
2. Fix for line breaks in the chat message field when pressing Shift+Enter.
3. New variable %GAMELANG%
Indicates the selected game adaptation language.
Example:
if=["%GAMELANG%", "english", "!=", ["speak=The script is written only for the English version of the game.", "sleep=2", "break"]]
4. Updated script launch timer.
Thanks to user: Lilou
Previously, only 1 timer could be set, now multiple timers are available for setting.
To remove a timer from the list, select the timer and press the Delete key to remove it from the list.
5. Updated latest version loader update.exe.

2025.05.04
1. Interface control key changes:
F1 now opens the server menu.
On the script tab, the control keys have been updated:
F2 – rename script
F3 – create new script
F4 – edit selected script
2. Fixed window focus issue related to the bot window.
3. Fixed chest opening in the Chinese version.
4. Renamed the start_game parameter in config.ini to launch_game to avoid conflicts with function names in scripts.
5. Added a new parameter to config.ini:
stop_sounds=1 – disables all bot sounds.
6. Added a new parameter to config.ini:
notify_sound_timeout=300 – notification repeat interval in seconds.
7. Added a new parameter for scripts:
open_chest_timeout=10 – timeout for approaching a chest. Default is 10 seconds.

2025.05.01
1. Removed auto-transition to the script list after script execution completion.

2025.04.30
1. added variable %CURRENTDATEFULL%
displays date in format:
HH:II:SS YYY-MM-DD

2. another fix for enable_drop_control=3|blockname operation

2025.04.29
1. fix for enable_drop_control=3|blockname function operation

2025.04.28
1. fixes for the attack key assignment bug.

2. optimized the method for checking new notifications.
notifications are available in the server menu via the f1 key.

2025.04.27
1. fix for opening chests on the map.

2. now if the enable_one_target function is enabled and combat is ongoing, the bot can still continue choosing movement in the goposition function, of course if attack_type=1 is enabled

3. data about opening a chest is now recorded in the openbox.log file.

2025.04.26
1. new function: shopscript
allows the use of personal scripts, or encrypted ones.
scripts are stored on the server, access can only be obtained by their hash value.
However, if personal access is set, only the user for whom it was created will be able to run it.
example:
shopscript=string hash

2. reworked the exchange interface.
Added functionality to add a description to the uploaded file.
if the file has already been uploaded, or you want to change the file description, focus on the file and press the f3 key to set a new description.
With the delete key you can delete the uploaded file.

3. implemented server menu functionality via the f1 key.
while on the message input tab, press the f1 key.
now you may also sometimes receive notifications about certain operations.
Upon receiving a notification, you will receive an audio signal; to view your notifications, if any, go to the f1 menu and you will see the notify +1 item
go in to view them.
additional information items may also be available via the tab key opposite the menu item.

4. fixes for the double repair bug with boxes in combat have been made.

5. improved method for handling character death event.

6. increased the waiting time for character hp; mp data from 1 to 2 seconds. sometimes the game didn't provide data within 1 second.

7. reworked the chat message list.
while on a message, press ctrl+c to copy the message text.
Press alt+enter to open message information.

8. many other minor fixes that I have already forgotten and didn't write down.

2025.04.07
1. For those whose new market search is not working, the ability to use the old market search function has been implemented, its name is
old_searchitems=search string

2. the functionality of the menu system in the bot interface has been laid out.
while on the message input field, press the f1 key.

3. other fixes

2025.03.30
1. fix for box repair

2. fix for getting time for the enable_drop_control function and the operation of the drop_end_offset option
if there are errors, they will be recorded in the error.log file

3. the badequipment.log log displays the full date including year, month, and day

4. added log output to a separate file for items that are dropped from the bag via the clearbag function

5. upon death, automatic disconnection from the server_bot_disconnect notifications server occurs

2025.03.23-1
1. restoration of access to the bot.

2025.03.23
1. new parameter: pet_food_timeout
pet fullness check timeout
Default 300 seconds
pet_food_timeout=300

2. new variable: COUNTMORTAL
shows how many times the character has died per session
can be implemented as
if=["%COUNTMORTAL%","5",">=", ["break"]]

3. bug fixes, minor and not so minor.

2025.03.20
1. Implemented functionality for clearing the logs folder via hotkeys
Suggestion by MoonPrincess
Hotkeys: ctrl+shift+delete
sound suggested by Dippydippy
sound file: clear_logs.wav

2. Implemented functionality for moving focus between interface elements
Suggestion by Squish
Hotkeys:
lalt+a - script list
lalt+s - message input field
lalt+d - chat history
Combinations can be changed via the config.ini file
script list
key_focus_scripts=lalt+a
message input field
key_focus_message=lalt+s
chat history
key_focus_history=lalt+d

3. it is now possible to download a file from the exchange directly to the scripts folder, just hold down shift+enter
enter - downloads to the files folder.
shift+enter - downloads to the scripts folder.

4. Added sound upon file download completion
sound file: download_finish.wav

5. now you don't need to write the open_game_window command at the beginning of scripts
the bot does this automatically.

6. new combat method, attacking one target until the target is destroyed.
enable_one_target
disable_one_target
the target is attacked until its health level becomes 0

7. fix for the repair function

8. new setting for config.ini
muted_speak=regexp
if regexp matches, this text will not be voiced by nvda.
example:
muted_speak=^(broadcast ;|system)

9. the muted_speak setting is also available in scripts
to clear the string clear_muted_speak

10. new market search method
Thanks to user: Jlex
Search speed increased

11. New function: pastetext
copy text from the clipboard to a variable
example
pastetext=text
text from the clipboard will be placed in the variable text
pastetext=my_text
speak=%my_text%

12/. different text translation methods.
The setting in config.ini is used
translate_method=string
available translators:
googlefree, nvdaes, aifree, gemini

2025.02.23
1. New variables
%LASTPOSITIONX%
last obtained x coordinate
%LASTPOSITIONY%
last obtained y coordinate
%LASTLOCNAME%
last obtained location name
Data is obtained during the goposition function operation

2. Removed limit for pressing skill keys in setInterval
Now keys will be pressed regardless of what keys they are and how much time has passed since skills were used

2025.02.22-1
1. Fix pet_regen

2025.02.22
1. fix for pet summoning

2025.02.21
1. Added the ability to specify a period for pressing the escape key
Example:
enable_key_esc=float seconds
If not specified, the default period of 5 seconds is used.

2. New function: volume
windows volume control.
Example:
volume=100
maximum volume
volume=0
minimum volume

3. Fix for processing adaptation files

4. fix for badequipment function operation

5. Upon triggering the revival function, pets, target search, and auto-attack are disabled.

2025.02.16
1. now if a string contains only digits and characters like: .*[]{}()':;><. digits
then such a string will not be translated, but will be immediately sent for speech output.

2. fix for working with fragments and selling collections.

3. fix for expanding the bot window.

4. Other minor fixes that I forgot to write down


2025.02.06-1
1. Fix from 2025.02.06

2025.02.06
1. New parameter: keyboard_write_speed
Character input speed in fields
keyboard_write_speed=0.1
A character will be entered every 0.1 seconds.
Default is 0
2. Fix for key sticking when launching the game via hotkeys.
3. Minor fixes to core functions.

2025.01.29
1. Optimization of some functions.

2025.01.25
1. Fix for the main_stream attribute in the triggers module.
2. Fix for the mapper functionality.
3. Fix for minor issues in calculations.

2025.01.24
1. Correction of minor code errors from previous updates.

2025.01.22
1. Optimization of the respawn function.

2025.01.21
1. New function: speak_stop
Stops speech output.
This will stop NVDA if it is currently speaking.
2. Fix for the character respawn function.

2025.01.19
1. New function: includefile
Inserts lines from another file at the current position.
Example:
File main:
open_game_window 
get_def=test1 
get_def=test2 
wait 
includefile=file1 
File file1:
def=test1 
sleep=1 
speak=current file; file1 
enddef=test1 
includefile=file2 
File file2:
def=test2 
sleep=1 
speak=current file; file2 
enddef=test2 
Simply put, recursive nesting is supported.
2. Fix for fragment selling. If you have more than 2000 fragments, they will be sold in batches of 2000.
3. New variable: LASTSPEAK
The last received text from the game:
copytext=%LASTSPEAK%
4. Optimized the method for handling character death processing.
5. The environment of var_eval and eval has been extended with the re library, enabling work with regular expressions.
Example:
var=text=my 5 points 
var_eval=result=match.group(1) if (match := re.search(r'my (\d+) points', var_text)) else 0 
// result = 5 

2025.01.14-1
1. Fix for market search.
2. Fix for launching scripts via hotkeys.

2025.01.14
1. Implemented functional blocks similar to function calls.
Idea by (Dippydippy).
Example:
def=my name 
more code... 
enddef=my name 
This block of code can be placed anywhere in the script.
To call it:
get_def=my name
2. Return calculation results using Python eval.
var_eval=variablename=eval string 
The result of eval string is stored in variablename.
Example:
var_eval=result=2+2 
speak=%result% 
// result = 4 
Or:
var=name=100 
var_eval=result='yes' if %name%>=100 else 'no' 
speak=%result% 
// result = yes 
3. Implemented variable visibility in the eval execution space.
var=name=test 
var_result='yes' if var_name == 'test' else 'no' 
Or with math operations:
var=num=2 
var_eval=result=int(var_num)+2 
4. Implemented player function list:
player_play=name={params} 
Plays a file.
Launches a player with the name "name" and parameters {params}.
Example:
player_play=test={"file": "sounds/click.wav", "volume":50, "balance":0, "loops":0} 
Parameters:
• file – path to the file
• volume – volume from 0 to 100
• balance – from -100 (left channel) to 100 (right channel)
• loops – number of repetitions (-1 for infinite loop, 0 default, 1 for one repeat, etc.)
player_stop=name 
Stops playback of player "name".
player_pause=name 
Pauses player "name".
player_unpause=name 
Unpauses player "name".
player_volume=name=volume 
Sets the volume for player "name" (0-100).
player_balance=name=balance 
Sets the balance for player "name" (-100 to 100).
player_all_stop 
Stops all players.
5. After launching the script, the focus resets to the chat message list.
6. The player can now load sounds via http | https from the internet.
7. Implemented function-based replacements.
Example:
speak=result: %function.eval(2+2)% 
// result: 4 
Example:
speak=distance: %function.abs(-10-10)% 
// result: 20 
8. Implemented data input into text fields and storing them in a variable.
Example:
entry=variablename 
speak=%variablename% 
9. Refactored market search.
Previously, items had to be separated by |.
Now, regular expressions are used for more flexibility.
10. Added eval function.
eval=expression as a string 
11. Extended data processing in eval.
Now it is possible to store processing results in variables.
Example:
var=text=Hello, world! 
eval=function_var('result', var_text.replace('Hello', 'Hi')) if var_text.startswith('Hello') else function_var('result', 'my string') 
speak=%result% 
// result = Hi, world! 
12. Allowed parsing tags as commands.
var=text=speak=Hello, world! 
%text% 
The processor will parse %text% and execute it as speak=Hello, world!.
13. Refactored waitspeak mechanism.
Minimized text wait time, likely fixing issues where the menu opened faster than the bot could intercept the text.

2025.01.04
1. New setting for config.ini:
server_connect_timeout=5 
Server connection timeout.
If you have a poor connection, increase the timeout.
Default: 5 seconds. Maximum: 30 seconds.
2. Fixed hotkey behavior for start_bot (expand bot window).
3. speak.log now displays full time format:
13:30:00 2025-01-04 
4. Fix for start_game=email account, updated for new game mechanics.

2024.12.31
1. new feature: goposition_stop
copyright Dippydippy
stop movement to a specified point
2. Quickly switch focus to the bot window: lalt+b
change the key in the config.ini file
parameter: start_bot=key combination
3. nvda passive mode is set as the default mode.

2024.12.29-1
1. Fixed update retrieval and unpacking.
2. Fixed sending empty messages.

2024.12.29
1. Rewritten functions for searching and identifying the necessary window for both the bot and the game.
2. Now, the correct line is displayed in the script error log.
3. Edited keys for stopping the script. You can now use both the left and right Ctrl keys. For pausing, you can also use both the left and right Alt keys.
4. Renamed keys: numpad+, numpad-
New names: numpadplus, numpadminus

2024.12.28
1. Redesigned the sleep function mechanism.
2. Developed a custom Windows global key interceptor. Now it bypasses restrictions on keypress tracking in the game.
3. If the text field contains text and you select a user using Alt+Enter, pressing Enter on the selected nickname will send the message to the chosen user.
4. New trigger system attribute: main_stream.
Ensures that instructions from "execute" are executed in the bot's main thread instead of a parallel thread.
Example:
add_action_speak=test={"text": ["debug"], "execute": ["sleep=1.1", "lshift+."], "main_stream": 1}
Default: main_stream = 0.
5. Expanded functionality of the setonkey function.
New attribute: pass = 1 | 0.
Allows passing triggered keys to the game or blocking their transmission. Default: pass = 1.
Example:
setonkey=test={"keys": "j", "execute": ["playfile=start.wav"], "pass": 0}
Pressing key j will play a sound, but no attack will occur. If "pass": 1 is set, the keypress will also be transmitted to the game.
6. Extended setonkey function.
You can now specify alternative keys for triggering. Previously, only one combination could be specified; now, multiple are supported.
Example:
setonkey=test={"keys": "f3", "execute": ["playfile=click.wav"]}
Triggers only when f3 is pressed.
setonkey=test={"keys": ["f3", "lctrl+f4"], "execute": ["playfile=click.wav"]}
In this example, it triggers on f3 or lctrl+f4.
7. New default variable: %LASTSERVERBOTTIME%.
Indicates how many seconds ago a message was received from the control server ("server_bot_connect").
Default value: -1.
8. Fixed time display in the private message list when pressing f3.
9. Fixed an error when appending a character to the end of a variable
var_append=text=
10. New default variable: %SCRIPTNAME%.
The name of the current script.
11. New function: wlog.
Writes the processed string to mw.log.
Example:
wlog=Current script: %SCRIPTNAME%

2024.12.05
1. Added variable with the current date: %CURRENTDATE% in the format yyyy-mm-dd.
2. Fixed keyboard operation with keyboard_type=1.

2024.12.04
1. Fixed filedelete function.
2. New function: goposition_diagonal_mode enables or disables diagonal movement mode.
Example:
goposition_diagonal_mode=1  // enable
goposition_diagonal_mode=0  // disable
By default, this function is always disabled.
3. Simultaneous key presses now available through the keydown function.
Example:
keydown=s+d
sleep=4
keyup=s+d
4. Now, when the script execution is complete, all sound playback also stops.
5. Fixed functions: var_minus, var_plus, var_div, var_mult.
6. Fixed temporary files cleanup.
7. New default variables: CURRENTMICROTIME, CURRENTTIME.
Retrieve current time in milliseconds and seconds in Unix format.
Example:
open_game_window
var=start=%CURRENTTIME%
sleep=2
var=end=%CURRENTTIME%
var_minus=end=%start%
speak=time: %end%
sleep=2
8. New parameter: goposition_stop_get_coords.
In goposition mode, stop movement while checking coordinates?
Example:
goposition_stop_get_coords=1  // stop 
goposition_stop_get_coords=0  // don't stop 
Default value: 0.
9. Fixed bot interface.

2024.11.26
1. Implemented functionality for playing sounds from the network.
Example:
playfile=https://mwbot.org/1.mp3
2. New function: playfile_stop stops playback.
Example:
playfile_stop
3. Display of private messages:
• In the "Write a message" or "Message list" tabs, press f3 to access the private message list.
• The private messages list will be displayed.
• Pressing tab moves to the input field. Write a message there and press enter to send it to the selected user.
• To clear the private messages list, while in the "All messages" list or input field, press shift+f3.
4. The text translation system now works when sending private messages.

2024.11.24
1. New function: var_replace replaces text in a variable.
Example:
var=text=hello 
var_replace=text=["llo", "y"] 
speak=%text% 
Result => hey 
Another example:
var=text=ring (left) 
var_replace=text=[["(",")"], ["\\(","\\)"]] 
speak=%text% 
Result => ring \(left\) 
Or:
var=text=hello 
var_replace=text=[["l","o"], ["","y"]] 
speak=%text% 
Result => hey 
2. Updated tools for updates.
3. New function: nvda_mode switches NVDA modes from scripts.
Example:
nvda_mode=0  // Normal mode
nvda_mode=1  // Passive mode
nvda_mode=2  // Silent mode

2024.11.23
1. Fixed filedelete function.
2. Critical changes!
• The file storage system for language adaptation has been redesigned. Translation files for the game and bot interface are now stored in the lang/ folder.
Example:
english.bot.txt  // Bot interface translation
english.game.txt  // Game interface adaptation
• The scripts folder is now named scripts, reflecting its current use.
The directory for location walls is now at scripts/wall.
3. New event: event_attack.
• Allows tracking the start and end of battles.
event_attack:0  // Battle ended
event_attack:1  // Battle started
event_attack:2  // Target exists
4. NVDA mode selection via alt+n keys:
• Normal mode (default).
• Passive mode (NVDA tries not to interrupt speech).
• Silent mode (NVDA goes completely silent in the game).

2024.11.10
1. Fixed fileexists function.
2. Fixed the ability to open the English or Spanish help versions using the ctrl+h keys.

2024.11.09
1. Fixed fileexists function.
2. Conducted optimization of script execution and code refactoring. Script execution speed has been improved.
3. New parameter: repair_max_retries.
Sets the number of repair attempts:
repair_max_retries=5 
The bot will attempt repair 5 times. If unsuccessful, both the game and the bot will close.
4. Critical change!
• Script pause and resumption after pause now use the f2 key!
Default timeout for re-pressing f2 is 0.3 seconds.
To change this, set the following in your script:
pause_timeout = float(seconds) 
Or specify the parameter in the bot's configuration file: config.ini.
pause_timeout=float seconds 
5. Added navigation through blocks in the script editor:
alt+b: move to the next line starting with block= 
alt+shift+b: move to the previous line starting with block= 
When a line is found, its content is announced, e.g., block=city.
6. New function: var_random.
Generates random values.
Example:
var_random=variable=1,300 
Generates a random value between 1 and 300 and stores it in %variable%.
Another example:
var_random=variable=["b1", "b2", "b3", "b4", "b5"] 
go_to_block=%variable% 
Selects a random value from the provided list.
7. New trigger system attribute: ignorepause.
Allows the trigger to continue working even during a pause.
Example:
add_action_speak=lack_of={"text": ["^lack of vitality"], "execute": ["gameexit"], "ignorepause":1, "noclear":1} 
8. Fixed fileexists function.
9. Other minor edits.

2024.10.20
1. New function: filedelete.
Deletes a file:
filedelete=filename 
2. New function: filerename.
Renames a file.
Example:
filerename=old_name=new_name 
3. New function: fileexists.
Checks for file existence.
Example:
fileexists=filename={"true": ["speak=file exists"], "false": ["speak=no find file"]} 
Another example:
fileexists=filename1={"false": ["fileopen=filename1=w=100"]} 
4. New function: var_exists.
Checks whether a variable exists.
Example:
var_exists=varname={"true": ["speak=yes, variable exists"], "false": ["speak=no, empty variable"]} 
Another example:
var_exists=varname={"false": ["var=varname=1"]} 
5. Updated "playfile" player functionality.
MP3 sounds can now also be played.

2024.10.13
1. Fixed data recording for the email address that was last authorized.
2. Fixed access to editor fields for entering messages and chat message lists.
3. Fixed enable_xp_control function.
4. Fixed global keypress tracking with the onkey function.
5. Fixed if function:
• It is now not mandatory to specify the "else" block if no actions are present. Writing has been simplified:
if=["2", "2", "==", ["speak=yes"]] 
6. New function: mapwall_reset.
Clears data about the connected map in mapwall=filename.
7. In the chat input field, press alt+enter to see a list of online users. Select a user and press enter to auto-fill /p nickname in the input field for sending a private message.
8. New function: drop_end_offset.
Specifies how many seconds before the script should stop working.
Example:
drop_end_offset=600  // Stops the script 10 minutes before the farm ends. 
enable_drop_control 
9. New parameter: count_attack.
Number of attack repetitions. Default: 2 times.
10. New system for data exchange between different bots at the script level.
Example:
server_bot_connect=string  // Channel name, use a complex string for security. 
server_bot_disconnect  // Disconnects from the channel. 
server_bot_write=string | json  // Sends a message to the channel. 
If the string is JSON, all connected users execute the function list.
server_bot_write=["speak=hello", "playfile=click.wav"] 
Or specify a recipient:
server_bot_write={"nick": "Eugen", "execute": ["speak=hello", "playfile=click.wav"]} 
Allowed functions:
server_bot_allowed_functions=["speak", "playfile"] 
11. New function: copytext.
Copies text to the clipboard.
Example:
copytext=your text 
copytext=%variablename% 
12. New function: var_append.
Adds text to the end of a variable:
var_append=variablename=text 
13. Fixed: When a script is running and no pause is set, messages cannot be sent to the bot chat.
14. File operations implemented:
fileopen=filename=mode=value 
Modes:
• a: Append [value] to the end of the file.
• w: Overwrite file with [value].
• r: Read file contents into a variable.

2024.09.22
1. New function: clear_var_action.
Clears trigger tag data: %%1, %%2, and so on.
Thanks to users: Jgonzalezh, Cassius.
2. Extended functionality of the enable_xp_control function:
enable_xp_control=int xp|time period=block name 
• int xp - experience limit.
• time period - how often to check experience level.
• block name - block to execute when the experience is gained.
3. Now, when calling the disable_pet function with the recall parameter:
disable_pet=recall 
• If the enable_pet function was previously called, the pet will be recalled.
• If simply calling disable_pet, pet management will be disabled, but the pet itself will not be recalled.
4. To have the bot launch the game with a specific email, use the command:
start_game=your@mail.com 
5. New function: last_login=your@mail.com.
Sets the last login email.
• To apply these changes, restart the game.
6. Added a dialog for selecting game adaptation files.
• Press alt+l to choose the game language in the bot.
• If lang=... is missing in config.ini during the first launch, this dialog will also appear.
7. Before using the bot, you must read the manual and agree to the terms. A button is provided to access the manual.
8. New functions: setonkey, delonkey.
Example:
setonkey=name={"keys": "lalt+f4", "execute": ["playfile=click.wav", "sleep=1", "speak=game exit", "gameexit"]} 
Pressing the specified keys will execute actions listed in the execute attribute.
delonkey=name  // Removes the keypress controller with the specified name. 

2024.09.15
1. Fixed: When the attack was disabled with disable_attack, target search keys enable_nav_attack did not work.
2. Added the ability to change hotkeys for launching and closing the game.
To change the default keys, add the following lines to your config.ini file:
Launch game or expand game window: 
start_game=lalt+g 
Close game: 
quit_game=lalt+q 
3. Adjusted key release behavior in the random_going mode.
4. Extended functionality of the goposition function:
goposition=int x|int y=details 
• By default: 0 (exact match).
• Example:
goposition=100|100=5 
If the character reaches 102|96, it will be considered the target point.

2024.09.11
1. Fixed mastersynthfrag function.
2. Translated some messages into English.
3. Added additional translatable messages in the language.ini file.
4. New functions:
var_div=variable=value  // Divide variable value by specified value. 
var_mult=variable=value  // Multiply variable value by specified value. 
5. Implemented script start timer via the f7 key.
6. If the game crashes, the bot will not restart automatically on subsequent launches.
7. Enhanced functionality of the badequipment function:
badequipment=regexp 
The bot now logs items being discarded in log/badequipment.txt.

2024.09.04
1. Fixed playfile=filename function.
2. Conducted system optimization.

2024.08.21
1. New parameter:
keypress_limit=int number 
• Default: 5.
• If the same phrase appears number times in the keypress=keyname=regexp function, the bot will detect circular menu scrolling and stop working.
2. Migrated to a new server in Frankfurt am Main.

2024.08.18
1. For the new trigger add_action_speak, the onecopy attribute is now 1 by default.
2. New function:
enable_mount=name  // The character will attempt to use the specified mount. 
disable_mount  // Optional value to dismount. 
If no value is provided, the name from the previous enable_mount step will be used.

2024.08.16
1. Added a switch for starting a block after a specified time:
enable_drop_control=3|blockname 

2024.08.14
1. Extended functionality of the enable_drop_control function.
• Thanks to user: Jgonzalezh.
Example:
enable_drop_control=3|blockname 
When farm time expires, the script moves to the specified block.

2024.08.13
1. Added new function: enable_drop_control.
• Ends the script when your farm time runs out.

enable_drop_control 
• Variants:
enable_drop_control=1  // Shuts down the computer. 
enable_drop_control=2|scriptname  // Runs the specified script. 
2. Fixed key_open_profile parameter in config.ini.

2024.08.08
1. Added release date indication for updates to improve clarity.
2. Fixed clearbag function when timeout data was missing.

99.11
1. Implemented script continuation after the specified date:
enable_time_start=2024-08-06 03:00:00 
• The bot will execute the next script instructions only after the specified time.
• To disable this:
disable_time_start 
2. Added timeout functionality to the clearbag function.

99.10
1. Fixed clear_action_speak.
2. Save translation state in config.ini.

99.9
1. Added alt+r hotkey for program reload.

99.8
1. Added key reassignment for basic functions:
key_open_profile=` 
key_open_chat=backslash 
key_get_hp=r 
key_get_pet_hp=lshift+r 

99.7
• Fixed assignment and launching of hot scripts.

99.6
• Implemented the function for quickly uploading scripts to the exchange using the ctrl+u hotkey.
To use: select the desired script and press ctrl+u.
• Fixed disabling keys f10, f11, f12.

99.5
• Changed the hotkey for launching the game to alt+g.
• Added a hotkey combination for closing the game: alt+q.
Note: The hotkey for closing the game may not work when the game window is active.
• Removed hotkeys: f10, f11, f12.
• Added the ability to assign hotkeys to scripts:
To assign a hotkey to a script, select the script and press alt+shift+ followed by a number from 1 to 9.
To call the script, use the combination alt+ followed by the assigned number.

99.4
• ctrl+h opens the help section in the language set for the bot.
If the language is not set, it opens the help section in English.
• Modified the game launch function.
• Adjusted logging output.
• Game can now be launched using the global hotkey: left alt + left shift + g.
If the game is already running, this combination brings the game window to the foreground.
Note: This hotkey is global and can be used outside the bot window.

99.3
• Added the ability to open the help section using the ctrl+h key.
• New function:
action_speak_change=["trigger name", "attribute name", "value"] 
Example:
add_action_speak=critical={"text": ["^crit"], "is_count": 2, "execute":["keypress=n"], "onecopy":1}
action_speak_change=["critical", "text", "no crit"] 
• It is now possible to launch a script via a chat command:
/map script name
• Other minor edits.

99.2
• New function: switch.
Syntax:
switch=string={"default": ["default actions"], "value 1": ["actions list"], "string 2": ["actions list"]} 
Example:
var=counter=0 
switch=%counter%={"default": ["speak=default case: %counter%"], "1": ["speak=case 1"], "2": ["speak=case 2"]} 
var_plus=counter=1 
sleep=1 
go_to_line=2 

99.1
• Attempted to identify keyboard error.

99.0
• Fixed logging data in logerror when a file is missing in the mapwall=filename construction.
• New function:
var_plus=variable_name=int value  // Adds the value to the variable. 
Example:
var=counter=0 
speak=counter: %counter% 
sleep=1 
var_plus=counter=5 
speak=new counter: %counter% 
• New function:
var_minus=variable_name=int value  // Subtracts the value from the variable. 
• New function: if.
Syntax:
if=["cond1", "cond2", "operator", ["true_action"], ["false_action"]] 
Example:
if=["1", "2", "<", ["speak=1 < 2, ok"], ["no, 1 > 2 :)"]] 
Example with variables:
var=counter=0 
speak=counter: %counter% 
sleep=1 
var_plus=counter=1 
if=["%counter%", "5", ">=", ["break"], ["go_to_line=2"]] 
The script will stop when the variable %counter% reaches 5 or more.
Supported operators:
• >
• <
• <=
• >=
• ==
• !=
For questions, visit the forum at https://mwbot.org/ or use the /report command.

98.9
• Added functionality to open the bot directory using the ctrl+e hotkey.
Idea by user: Jgonzalezh.

98.8
• Optimized the sellcollection function.
• Preparation for migration to a new address (not a bot function).

98.7
• Added the ability in the target search function to specify key combinations like:
lshift+5|lshift+6 
Example:
nav_keys=lshift+5|lshift+6|k|; 
• Fixed key replacement behavior in the config.ini file.
Example:
kbr_rctrl=space 
This makes the bot press space instead of the right ctrl.

98.6
• Fixed go_to_line function.
Thanks to user: Jgonzalezh.

98.5
• Fixed incorrect behavior of the go_to_line function in some situations.
Thanks to user: Jgonzalezh.

98.4
• Added event generation function:
action_speak_generate=your text 
To capture the event, use the text:
add_action_speak=test={"text": ["^event_generate_action:your text"], "execute":...} 

98.3
• Fixed go_to_block function.

98.2
• Fixed the onecopy attribute in triggers.
• Added new attribute timeout:
timeout: 123  // Sets how often a trigger can activate. 
Example:
add_action_speak=testTimeout={"text":["^(\\d+); (\\d+)$"], "execute":["sleep=1", "speak=hp: %%1; mp: %%2"], "onecopy":1, "timeout": 5} 
When pressing r to check stats, the trigger will only activate once every 5 seconds.
• Added function:
stopwall=regexp 
Instead of adding stop phrases of walls to the stopwallword.txt file, you can now enter phrases using a regular expression directly in your script, the work of data from the stopwallword.txt file is also taken into account.
command added: execute=["cmd1", "cmd2", "cmd3"]
execution of commands in one line, intended to be used to set settings
fixed using the go_to_block function in triggers in the execute attribute.