From 82ee6b6ecf3cc5407c0411df3369d6672774aa9f Mon Sep 17 00:00:00 2001 From: Dimitrios Apostal Date: Wed, 15 Nov 2017 21:02:59 -0500 Subject: [PATCH] added cross-world dx9 --- CHANGELOG.md | 3 +++ README.md | 10 ++-------- main.cpp | 2 ++ src/arch/arch.cpp | 5 +++-- src/arch/arch.h | 1 + src/arch/x64.cpp | 4 ++-- src/arch/x86.cpp | 18 +++++++++++++++++- src/player/ally.cpp | 5 +++++ src/player/ally.h | 1 + src/player/allyCW.cpp | 22 ++++++++++++++++++++++ src/player/allyCW.h | 12 ++++++++++++ src/player/player.h | 3 +++ src/player/you.cpp | 5 +++++ src/player/you.h | 1 + 14 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 src/player/allyCW.cpp create mode 100644 src/player/allyCW.h diff --git a/CHANGELOG.md b/CHANGELOG.md index fd40733..358879c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog All notable changes to this project will be documented in this file. +##[1.0.0] +- Cross-world party support for DX9 + ## [0.0.6] ### Added - Cross-world party support for DX11 diff --git a/README.md b/README.md index 2ed4f95..af04b11 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,11 @@ This program reads from process memory. Use at your own risk! This program reads the names of party members by memory and opens their username in a search page in your default browser. #### EXAMPLE -![](https://media.giphy.com/media/xUOxfkTf6NHqzHwgyQ/giphy.gif) - -[Youtube](https://youtu.be/r9TKVYfq_b0) - -#### Known Issues -- Doesn't update cross-world parties on DX9 -- Lists previous members in the party list until someone new overwrites their position (thank SE for this, still looking for solution) +![](https://i.imgur.com/anW8rD2.png) +[Youtube](https://youtu.be/4OjrkHsZ1fM) #### TODO ---------------- -- Cross-world Parties for DX9 - Add stats directly to program - UI diff --git a/main.cpp b/main.cpp index e1392ce..b630201 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,9 @@ #include "src/menu.h" +#include int main() { + SetConsoleTitle(TEXT("FFXIV Party Logs")); Menu menu; menu.start(); diff --git a/src/arch/arch.cpp b/src/arch/arch.cpp index c42fb9a..7144b70 100644 --- a/src/arch/arch.cpp +++ b/src/arch/arch.cpp @@ -75,15 +75,16 @@ void Arch::filterAllies() } + void Arch::updateNames(Process* proc, int &partyMembers) { for (auto &p : allies_) { - ReadProcessMemory(proc->getHandle(), (void*)(exe_->getAddress() + p->address_), &p->name_, 80, 0); + p->updateName(proc, exe_); } for(auto &p : alliesCW_) { - ReadProcessMemory(proc->getHandle(), (void*)(p->address_), &p->name_, 80, 0); + p->updateName(proc, exe_); } filterAllies(); diff --git a/src/arch/arch.h b/src/arch/arch.h index 751998f..e353c1d 100644 --- a/src/arch/arch.h +++ b/src/arch/arch.h @@ -7,6 +7,7 @@ #include "../player/player.h" #include "../player/you.h" #include "../player/ally.h" +#include "../player/allyCW.h" class Arch { diff --git a/src/arch/x64.cpp b/src/arch/x64.cpp index 129854b..4c9a622 100644 --- a/src/arch/x64.cpp +++ b/src/arch/x64.cpp @@ -46,12 +46,12 @@ void x64::createAllies(Process* proc) ReadProcessMemory(proc->getHandle(), (void*)address, &address, sizeof(DWORD64), 0); address += 0x2E8; - alliesCW_.push_back(new Ally(address)); + alliesCW_.push_back(new AllyCW(address)); for(int i = 0; i < 6; i++) { - alliesCW_.push_back(new Ally(address += 0x48)); + alliesCW_.push_back(new AllyCW(address += 0x48)); } } diff --git a/src/arch/x86.cpp b/src/arch/x86.cpp index caedf2f..7d1ff11 100644 --- a/src/arch/x86.cpp +++ b/src/arch/x86.cpp @@ -36,7 +36,6 @@ x86::~x86() void x86::createAllies(Process* proc) { - allies_.reserve(8); // dx9 32-bit offsets allies_.push_back(new YOU(0x115E431)); allies_.push_back(new Ally(0x117AA30)); @@ -47,6 +46,22 @@ void x86::createAllies(Process* proc) allies_.push_back(new Ally(0x117B4D0)); allies_.push_back(new Ally(0x117B6F0)); allies_.push_back(new Ally(0x117B910)); + + + alliesCW_.push_back(allies_[0]); // YOU + + DWORD address = exe_->getAddress(); + address += 0x010287A4; + + ReadProcessMemory(proc->getHandle(), (void*)address, &address, sizeof(DWORD64), 0); + address += 0x2E0; + alliesCW_.push_back(new AllyCW(address)); + + for (int i = 0; i < 6; i++) + { + alliesCW_.push_back(new AllyCW(address += 0x48)); + } + } @@ -58,4 +73,5 @@ void x86::updateNumberOfPartyMembers(Process *proc, int &partyMembers) void x86::checkCrossWorldParty(Process* proc) { // do nothing for the time being + ReadProcessMemory(proc->getHandle(), (void*)(exe_->getAddress() + 0x1179BE4), &inCrossWorldParty_, 1, 0); } \ No newline at end of file diff --git a/src/player/ally.cpp b/src/player/ally.cpp index dc6dcb2..b3d1dc3 100644 --- a/src/player/ally.cpp +++ b/src/player/ally.cpp @@ -16,3 +16,8 @@ void Ally::display() { std::cout << name_ << "\n"; } + +void Ally::updateName(Process* proc, Module* exe) +{ + ReadProcessMemory(proc->getHandle(), (void*)(exe->getAddress() + address_), &name_, 80, 0); +} diff --git a/src/player/ally.h b/src/player/ally.h index b5a9052..7cd17c6 100644 --- a/src/player/ally.h +++ b/src/player/ally.h @@ -8,4 +8,5 @@ class Ally : public Player Ally(DWORD64); ~Ally(); void display(); + void updateName(Process*, Module*); }; diff --git a/src/player/allyCW.cpp b/src/player/allyCW.cpp new file mode 100644 index 0000000..46bd23b --- /dev/null +++ b/src/player/allyCW.cpp @@ -0,0 +1,22 @@ +#include "allyCW.h" +#include + +AllyCW::AllyCW(DWORD64 address) +{ + address_ = address; +} + +AllyCW::~AllyCW() +{ + +} + +void AllyCW::display() +{ + std::cout << name_ << "\n"; +} + +void AllyCW::updateName(Process* proc, Module* exe) +{ + ReadProcessMemory(proc->getHandle(), (void*)(address_), &name_, 80, 0); +} \ No newline at end of file diff --git a/src/player/allyCW.h b/src/player/allyCW.h new file mode 100644 index 0000000..a3d19f8 --- /dev/null +++ b/src/player/allyCW.h @@ -0,0 +1,12 @@ +#pragma once + +#include "player.h" + +class AllyCW : public Player +{ +public: + AllyCW(DWORD64); + ~AllyCW(); + void display(); + void updateName(Process*, Module*); +}; diff --git a/src/player/player.h b/src/player/player.h index 6e1c3cb..464356b 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -3,6 +3,8 @@ #include #include #include +#include "../process/module.h" +#include "../process/process.h" class Player { @@ -16,6 +18,7 @@ class Player DWORD64 address_; char name_[80]; virtual void display() = 0; + virtual void updateName(Process*, Module*) = 0; bool characterCheck(); void charRequest(std::wstring, std::vector, std::wstring, std::wstring&, int&); bool getCharId(); diff --git a/src/player/you.cpp b/src/player/you.cpp index d4a4fd4..1d53ffd 100644 --- a/src/player/you.cpp +++ b/src/player/you.cpp @@ -16,3 +16,8 @@ void YOU::display() { std::cout << "YOU (" << name_ << ")" << "\n"; } + +void YOU::updateName(Process* proc, Module* exe) +{ + ReadProcessMemory(proc->getHandle(), (void*)(exe->getAddress() + address_), &name_, 80, 0); +} diff --git a/src/player/you.h b/src/player/you.h index cce1bcb..8708a1b 100644 --- a/src/player/you.h +++ b/src/player/you.h @@ -8,4 +8,5 @@ class YOU : public Player YOU(DWORD64); ~YOU(); void display(); + void updateName(Process*, Module*); }; \ No newline at end of file