Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 750fe8a2e5 | |||
| aa9412d7c2 | |||
| d0aff5e95a | |||
| 2a10763dac | |||
| 9449080788 |
@@ -72,18 +72,18 @@ jobs:
|
||||
dist/WowPresence.zip
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Create GitHub Release v1.0
|
||||
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && github.event.head_commit.message == 'release v1.0' }}
|
||||
- name: Create GitHub Release v1.1
|
||||
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && github.event.head_commit.message == 'release v1.1' }}
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: v1.0
|
||||
tag_name: v1.1
|
||||
target_commitish: ${{ github.sha }}
|
||||
files: |
|
||||
dist/WowPresence.dll
|
||||
dist/WowPresence.exe
|
||||
dist/WowPresence.zip
|
||||
fail_on_unmatched_files: true
|
||||
name: "WowPresence v1.0"
|
||||
name: "WowPresence v1.1"
|
||||
body_path: RELEASE_NOTES.md
|
||||
generate_release_notes: true
|
||||
make_latest: true
|
||||
|
||||
@@ -44,6 +44,14 @@ After extraction, the relevant files should look like this:
|
||||
|
||||
The runtime JSON and log files are created automatically inside the same `WowPresence` folder.
|
||||
|
||||
When WowPresence is installed through **Modernization Tool**, the same binaries automatically use:
|
||||
|
||||
```text
|
||||
<WoW folder>\.modernization_tool\WowPresence\
|
||||
```
|
||||
|
||||
instead. No separate build is required.
|
||||
|
||||
## 🛰️ Discord Application ID
|
||||
|
||||
WowPresence intentionally does **not** include a server-specific Discord Application ID.
|
||||
@@ -120,7 +128,9 @@ The DLL does not communicate directly with Discord.
|
||||
|
||||
The companion executable does not read or write WoW memory.
|
||||
|
||||
Runtime files are kept together in:
|
||||
Runtime files are kept together in one of these locations:
|
||||
|
||||
**Standalone installation:**
|
||||
|
||||
```text
|
||||
<WoW folder>\WowPresence\
|
||||
@@ -130,6 +140,18 @@ Runtime files are kept together in:
|
||||
└─ WowPresence.log
|
||||
```
|
||||
|
||||
**Installed through Modernization Tool:**
|
||||
|
||||
```text
|
||||
<WoW folder>\.modernization_tool\WowPresence\
|
||||
├─ discord_application_id
|
||||
├─ discord_broadcast_flags
|
||||
├─ discord_wow_status.json
|
||||
└─ WowPresence.log
|
||||
```
|
||||
|
||||
If the Modernization Tool managed folder exists, WowPresence automatically prefers it. Otherwise it uses the standalone `WowPresence` folder.
|
||||
|
||||
## 🔒 Privacy flags
|
||||
|
||||
The included file:
|
||||
|
||||
+12
-18
@@ -1,25 +1,19 @@
|
||||
# WowPresence v1.0
|
||||
# WowPresence v1.1
|
||||
|
||||
First standalone release of WowPresence.
|
||||
## Changes
|
||||
|
||||
- Added automatic support for Modernization Tool installations.
|
||||
- Standalone installs continue to use `WowPresence\` in the WoW folder.
|
||||
- When `.modernization_tool\WowPresence\` already exists, the same binaries automatically use that managed data directory instead.
|
||||
- No separate Modernization Tool build of WowPresence is required.
|
||||
- Existing `discord_application_id` and `discord_broadcast_flags` files remain user-managed.
|
||||
|
||||
## Included
|
||||
|
||||
- WowPresence.dll
|
||||
- WowPresence.exe
|
||||
- WowPresence.zip ready-to-install package
|
||||
- `WowPresence.dll`
|
||||
- `WowPresence.exe`
|
||||
- `WowPresence.zip` ready-to-install standalone package
|
||||
|
||||
## Highlights
|
||||
|
||||
- Native Discord Rich Presence for WoW 1.12.1 build 5875 compatible clients
|
||||
- Character name, guild, level, class, race, faction and zone display
|
||||
- Stable elapsed-session timer across character changes
|
||||
- Read-only game-memory sampling
|
||||
- Separate native Discord IPC companion
|
||||
- Configurable Discord Application ID through `WowPresence\discord_application_id`
|
||||
- Privacy flags through `WowPresence\discord_broadcast_flags`
|
||||
- Standalone `WowPresence\` runtime folder
|
||||
- Automatic companion startup and exact WoW process tracking
|
||||
|
||||
## Installation
|
||||
## Standalone installation
|
||||
|
||||
Extract `WowPresence.zip` into the WoW folder, edit `WowPresence\discord_application_id`, add `WowPresence.dll` to VanillaFixes `dlls.txt`, then launch WoW normally.
|
||||
|
||||
+26
-3
@@ -3,8 +3,8 @@
|
||||
* Read-only WoW 1.12.1 (build 5875) status sampler for WowPresence.
|
||||
*
|
||||
* Runtime contract:
|
||||
* <game>\WowPresence\discord_wow_status.json
|
||||
* <game>\WowPresence\discord_broadcast_flags
|
||||
* standalone: <game>\WowPresence\...
|
||||
* Modernization Tool: <game>\.modernization_tool\WowPresence\...
|
||||
*
|
||||
* Discord IPC is intentionally out of process. After the first sample, this
|
||||
* DLL starts WowPresence.exe from its worker thread and passes the exact
|
||||
@@ -541,11 +541,34 @@ static int game_folder(char *output, size_t output_size) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int directory_exists(const char *path) {
|
||||
DWORD attrs;
|
||||
if (!path || !path[0]) return 0;
|
||||
attrs = GetFileAttributesA(path);
|
||||
return attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
static int support_folder(char *output, size_t output_size) {
|
||||
char root[MAX_PATH];
|
||||
char root[MAX_PATH], managed[MAX_PATH];
|
||||
int count;
|
||||
if (!game_folder(root, sizeof(root))) return 0;
|
||||
|
||||
/* Modernization Tool creates this directory before WoW starts. Prefer it
|
||||
* when present so the same binaries can use the tool-managed location. */
|
||||
count = _snprintf(
|
||||
managed,
|
||||
sizeof(managed),
|
||||
"%s\\.modernization_tool\\WowPresence",
|
||||
root
|
||||
);
|
||||
managed[sizeof(managed) - 1] = 0;
|
||||
if (count >= 0 && (size_t)count < sizeof(managed) && directory_exists(managed)) {
|
||||
if (strlen(managed) + 1u > output_size) return 0;
|
||||
lstrcpynA(output, managed, (int)output_size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Standalone installs keep their data in <game>\\WowPresence. */
|
||||
count = _snprintf(output, output_size, "%s\\WowPresence", root);
|
||||
if (output_size) output[output_size - 1] = 0;
|
||||
if (count < 0 || (size_t)count >= output_size) return 0;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Invisible companion process for WowPresence.
|
||||
*
|
||||
* - is started automatically by WowPresence.dll after WoW is running
|
||||
* - reads WowPresence\discord_wow_status.json
|
||||
* - reads the standalone WowPresence folder or the Modernization Tool managed folder
|
||||
* - publishes Discord Rich Presence over the local Discord IPC named pipe
|
||||
* - exits when WoW_Modernized.exe exits
|
||||
*/
|
||||
@@ -54,9 +54,30 @@ static int own_directory(char *out, size_t out_size) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int directory_exists(const char *path) {
|
||||
DWORD attrs;
|
||||
if (!path || !path[0]) return 0;
|
||||
attrs = GetFileAttributesA(path);
|
||||
return attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
static int support_directory(char *out, size_t out_size) {
|
||||
char root[MAX_PATH];
|
||||
char root[MAX_PATH], managed[MAX_PATH];
|
||||
if (!own_directory(root, sizeof(root))) return 0;
|
||||
|
||||
_snprintf(
|
||||
managed,
|
||||
sizeof(managed),
|
||||
"%s\\.modernization_tool\\WowPresence",
|
||||
root
|
||||
);
|
||||
managed[sizeof(managed) - 1] = 0;
|
||||
if (directory_exists(managed)) {
|
||||
if (strlen(managed) + 1 >= out_size) return 0;
|
||||
lstrcpynA(out, managed, (int)out_size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strlen(root) + strlen("\\WowPresence") + 1 >= out_size) return 0;
|
||||
_snprintf(out, out_size, "%s\\WowPresence", root);
|
||||
out[out_size - 1] = 0;
|
||||
@@ -140,7 +161,7 @@ static int load_application_id(char *out, size_t out_size) {
|
||||
|
||||
if (!support_file(path, sizeof(path), "discord_application_id") ||
|
||||
!read_text_file(path, configured_id, sizeof(configured_id))) {
|
||||
log_line("discord_application_id is missing. Add your Discord Application ID to WowPresence\\discord_application_id.");
|
||||
log_line("discord_application_id is missing. Add your Discord Application ID to the active WowPresence data folder.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user