From c1936a7b7bc943302d9b0406df142900c4ffa5b7 Mon Sep 17 00:00:00 2001 From: aeon0 Date: Fri, 5 Nov 2021 08:36:20 +0100 Subject: [PATCH] doc(md): Add some dev docu --- README.md | 7 ++-- assets/docs/coordinate_systems.png | Bin 0 -> 10416 bytes assets/docs/logo.png | Bin 23847 -> 23321 bytes development.md | 55 +++++++++++++++++++++++++++-- 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 assets/docs/coordinate_systems.png diff --git a/README.md b/README.md index e0de4e3..ec6509e 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ Open up D2R and wait till you are at the hero selection screen. Make sure the ch ### 5) Start Botty Download the a prebuilt release [here](https://github.com/aeon0/botty/releases). Start `run.exe` in the botty folder, go to D2R window and press the "resume" key. Move to your D2R window and press "f11". You can always force stop botty with f12. +## Development +Check out the [development.md](development.md) docu for infos on how to build from source and details of the project structure and code. + ## param.ini [general] | Descriptions --------------------------------|--------------------------------------------- @@ -94,9 +97,9 @@ redemption | Hotkey for redemption --------------------------------|--------------------------------------------- item_type | Select "1" if item should be picked up, "0" if not. -# Some distant future plans +## Some distant future plans - Running chaos with AI algo - Emulating Keyboard and Mouse with Arduino -# Support this project +## Support this project This project is free. Support it by contributing in any technical way, giving feedback, PRs or by submitting issues. That being said, I am not above accepting some pixel currency :) So if you want to send some fg my way to keep my dopamine high, here is my jsp: [jojo22](https://forums.d2jsp.org/user.php?i=768967). diff --git a/assets/docs/coordinate_systems.png b/assets/docs/coordinate_systems.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd827b78e764f276fdef28b2e788b70777861ac GIT binary patch literal 10416 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 E0|R-?00000 literal 0 HcmV?d00001 diff --git a/assets/docs/logo.png b/assets/docs/logo.png index 4eff71f1875f4584379b41f50c8f4df5dc56bb34..534e9c1b66aa2c0433e160751750bdbc2b3dcf85 100644 GIT binary patch literal 23321 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 +## Dependencies +- Install miniconda (https://docs.conda.io/en/latest/miniconda.html) +- Install git (https://gitforwindows.org/) + +## Getting started +``` +git clone https://github.com/aeon0/botty.git +cd botty +conda env create environment.yml +python src/run.py +``` + +## Building from source +If you want to build a .exe from source you will have to first add the cv2 path to your PYTHONPATH:
+Edit System environment variables -> Enfironment Vriables... -> PYTHONPATH -> C:\Users\$USER\miniconda3\envs\botty\lib\site-packages\cv2 +```python +# building .exe and bundeling all needed resource into one folder +python release.py +``` + +## Folder Structure +**/**
+In the root is docu, param files and development specific stuff such as .gitignore
+ +**assets**
+Contains all data for the project that is not source code
+**assets/docs**
+Images you can see in the .md files and logos
+**assets/items**
+Screenshot of item names that should be picked up. The filename must then be added to the param.ini
+**assets/npc**
+Templates of npcs in different poses
+**assets/templates**
+Templates for different UIs and key points. Also contains folders of "pathes" that were generated with the utils/node_creator.py
+ +**src**
+All python source files go here
+**src/char**
+Want to implement a new char or build. Check this folder out. You will have to inherit from IChar and go from there
+**src/char**
+Utilities functions and scripts e.g. for easily creating templates to traverse nodes and automatically generate code for it
+ +## State Diagram +The core logic of the bot is determined by a state machine with these states and transations. The bot.py which contains all of the transitions should have little implementation code which should be hidden as much as possible in the "manager" classes. + + +## Coordinate System +There are different coordinate systems used and I tried my best to add these to the variable names.
+**Monitor**: It will have the origin at the top left of the first monitor
+**Screen**: Same as monitor for single monitor setups, otherwise origin at top left of the screen
+**Absolute**: Has its origin at the center of the screen, thus at the footpoint of your char
+**Relative**: Relative coordinates as the name suggest are relative to something. It is mostly used to express relative coordinates in relation to a tempalte that is found
+