Skip to content

Commit

Permalink
Reisen/mod: release 0.1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
alumkal committed Feb 8, 2024
1 parent de5910e commit 3345b28
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 37 deletions.
2 changes: 2 additions & 0 deletions Reisen/AvZDSL/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# AvZ DSL

**新版 DSL 已加入 AvZ2 本体。本插件已废弃,此后不再更新。**

> 使用 DSL 最明显的优点在于,一旦您获得了一种语言和转换引擎,您在 DSL 覆盖的软件开发特定方面的工作就会变得更有**效率**,因为您不必手动完成繁琐的工作。\
如果您有一种方法可以用与领域高度一致的语言表达领域重点,您的**思路将变得更加清晰**,因为您编写的代码不会被实现细节搞得混乱。 换言之,使用 DSL 允许您将基本点与复杂性分开。\
DSL 的领域、抽象和符号与领域专家(即非编程人员)如何表达自己高度一致,这就**在技术人员与领域人员之间形成良好的配合**\
Expand Down
2 changes: 2 additions & 0 deletions Reisen/fodder/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# AvZ 智能垫材

**本插件已废弃,此后不再更新。请使用 [AvZ DSL](https://gitlab.com/vector-wlc/AsmVsZombies/-/blob/master/tutorial/dsl/0%20%E5%89%8D%E8%A8%80.md)**

智能垫材插件,支持自动检测卡片CD,多个垫材集合混合使用,智能根据快速僵尸数量调整顺序等功能,且使用方便。

API:
Expand Down
2 changes: 1 addition & 1 deletion Reisen/mod/mod/information.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version 0.1.1
version 0.1.2
avz 2022_10_01
5 changes: 5 additions & 0 deletions Reisen/mod/mod/mod.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ Mod SaveDataReadOnly{
{0x54b267, '\x70', '\x74'},
};

// 阳光陈化(去除游戏中前 52 个天降阳光掉落更快的设定)
Mod StabilizeSunDrop{
{{0x6a9ec0, 0x768, 0x553c}, 52},
};

// 暂停刷新
Mod StopZombieSpawn{
{0x4265dc, '\xeb', '\x74'},
Expand Down
48 changes: 30 additions & 18 deletions Reisen/mod/mod/mod_avz1.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,44 @@
namespace _ModInternal {
class ModEntry {
private:
std::vector<uint8_t> U32ToBytes(uint32_t x) {
std::vector<uint8_t> result(4);
memcpy(result.data(), &x, 4);
template <typename T>
static std::vector<uint8_t> ToBytes(T x) {
std::vector<uint8_t> result(sizeof(T));
memcpy(result.data(), &x, sizeof(T));
return result;
}

public:
std::vector<uintptr_t> addr;
std::vector<uint8_t> data, orig;

ModEntry(std::vector<uintptr_t> addr_, std::vector<uint8_t> data_, std::vector<uint8_t> orig_)
: addr(std::move(addr_)), data(std::move(data_)), orig(std::move(orig_)) {}
template <typename T>
ModEntry(uintptr_t addr, T data, T orig)
: addr{addr}, data(ToBytes(data)), orig(ToBytes(orig)) {}

ModEntry(std::vector<uintptr_t> addr_, char data_, char orig_)
: addr(std::move(addr_)), data{(unsigned char)data_}, orig{(unsigned char)orig_} {}
template <typename T>
ModEntry(uintptr_t addr, T data)
: addr{addr}, data(ToBytes(data)) {}

ModEntry(std::vector<uintptr_t> addr_, uint32_t data_, uint32_t orig_)
: addr(std::move(addr_)), data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {}
ModEntry(uintptr_t addr, const std::vector<uint8_t>& data, const std::vector<uint8_t>& orig)
: addr{addr}, data(data), orig(orig) {}

ModEntry(uintptr_t addr_, std::vector<uint8_t> data_, std::vector<uint8_t> orig_)
: addr{addr_}, data(std::move(data_)), orig(std::move(orig_)) {}
ModEntry(uintptr_t addr, const std::vector<uint8_t>& data)
: addr{addr}, data(data) {}

ModEntry(uintptr_t addr_, char data_, char orig_)
: addr{addr_}, data{(unsigned char)data_}, orig{(unsigned char)orig_} {}
template <typename T>
ModEntry(const std::vector<uintptr_t>& addr, T data, T orig)
: addr(addr), data(ToBytes(data)), orig(ToBytes(orig)) {}

ModEntry(uintptr_t addr_, uint32_t data_, uint32_t orig_)
: addr{addr_}, data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {}
template <typename T>
ModEntry(const std::vector<uintptr_t>& addr, T data)
: addr(addr), data(ToBytes(data)) {}

ModEntry(const std::vector<uintptr_t>& addr, const std::vector<uint8_t>& data, const std::vector<uint8_t>& orig)
: addr(addr), data(data), orig(orig) {}

ModEntry(const std::vector<uintptr_t>& addr, const std::vector<uint8_t>& data)
: addr(addr), data(data) {}
};

enum class ModState {
Expand All @@ -59,8 +70,8 @@ class Mod : protected AvZ::GlobalVar {
}

public:
Mod(std::vector<ModEntry> entries_) : entries(std::move(entries_)) {}
Mod(std::initializer_list<ModEntry> entries_) : entries(entries_) {}
Mod(const std::vector<ModEntry>& entries) : entries(entries) {}
Mod(std::initializer_list<ModEntry> entries) : entries(entries) {}

Mod(const Mod&) = delete;
Mod& operator=(const Mod&) = delete;
Expand All @@ -77,7 +88,8 @@ class Mod : protected AvZ::GlobalVar {
return;
auto data = (state == ModState::OFF) ? &ModEntry::orig : &ModEntry::data;
for(const auto& entry : entries)
memcpy(ResolveAddress(entry.addr), (entry.*data).data(), (entry.*data).size());
if(!(entry.*data).empty())
memcpy(ResolveAddress(entry.addr), (entry.*data).data(), (entry.*data).size());
}

ModState State() const {
Expand Down
48 changes: 30 additions & 18 deletions Reisen/mod/mod/mod_avz2.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,44 @@
namespace _ModInternal {
class ModEntry {
private:
std::vector<uint8_t> U32ToBytes(uint32_t x) {
std::vector<uint8_t> result(4);
memcpy(result.data(), &x, 4);
template <typename T>
static std::vector<uint8_t> ToBytes(T x) {
std::vector<uint8_t> result(sizeof(T));
memcpy(result.data(), &x, sizeof(T));
return result;
}

public:
std::vector<uintptr_t> addr;
std::vector<uint8_t> data, orig;

ModEntry(std::vector<uintptr_t> addr_, std::vector<uint8_t> data_, std::vector<uint8_t> orig_)
: addr(std::move(addr_)), data(std::move(data_)), orig(std::move(orig_)) {}
template <typename T>
ModEntry(uintptr_t addr, T data, T orig)
: addr{addr}, data(ToBytes(data)), orig(ToBytes(orig)) {}

ModEntry(std::vector<uintptr_t> addr_, char data_, char orig_)
: addr(std::move(addr_)), data{(unsigned char)data_}, orig{(unsigned char)orig_} {}
template <typename T>
ModEntry(uintptr_t addr, T data)
: addr{addr}, data(ToBytes(data)) {}

ModEntry(std::vector<uintptr_t> addr_, uint32_t data_, uint32_t orig_)
: addr(std::move(addr_)), data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {}
ModEntry(uintptr_t addr, const std::vector<uint8_t>& data, const std::vector<uint8_t>& orig)
: addr{addr}, data(data), orig(orig) {}

ModEntry(uintptr_t addr_, std::vector<uint8_t> data_, std::vector<uint8_t> orig_)
: addr{addr_}, data(std::move(data_)), orig(std::move(orig_)) {}
ModEntry(uintptr_t addr, const std::vector<uint8_t>& data)
: addr{addr}, data(data) {}

ModEntry(uintptr_t addr_, char data_, char orig_)
: addr{addr_}, data{(unsigned char)data_}, orig{(unsigned char)orig_} {}
template <typename T>
ModEntry(const std::vector<uintptr_t>& addr, T data, T orig)
: addr(addr), data(ToBytes(data)), orig(ToBytes(orig)) {}

ModEntry(uintptr_t addr_, uint32_t data_, uint32_t orig_)
: addr{addr_}, data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {}
template <typename T>
ModEntry(const std::vector<uintptr_t>& addr, T data)
: addr(addr), data(ToBytes(data)) {}

ModEntry(const std::vector<uintptr_t>& addr, const std::vector<uint8_t>& data, const std::vector<uint8_t>& orig)
: addr(addr), data(data), orig(orig) {}

ModEntry(const std::vector<uintptr_t>& addr, const std::vector<uint8_t>& data)
: addr(addr), data(data) {}
};

enum class ModState {
Expand All @@ -59,8 +70,8 @@ class Mod : protected AStateHook {
}

public:
Mod(std::vector<ModEntry> entries_) : entries(std::move(entries_)) {}
Mod(std::initializer_list<ModEntry> entries_) : entries(entries_) {}
Mod(const std::vector<ModEntry>& entries) : entries(entries) {}
Mod(std::initializer_list<ModEntry> entries) : entries(entries) {}

Mod(const Mod&) = delete;
Mod& operator=(const Mod&) = delete;
Expand All @@ -77,7 +88,8 @@ class Mod : protected AStateHook {
return;
auto data = (state == ModState::OFF) ? &ModEntry::orig : &ModEntry::data;
for(const auto& entry : entries)
memcpy(ResolveAddress(entry.addr), (entry.*data).data(), (entry.*data).size());
if(!(entry.*data).empty())
memcpy(ResolveAddress(entry.addr), (entry.*data).data(), (entry.*data).size());
}

ModState State() const {
Expand Down

0 comments on commit 3345b28

Please sign in to comment.