diff --git a/Reisen/AvZDSL/README.md b/Reisen/AvZDSL/README.md index 90c1855..f4f8f84 100644 --- a/Reisen/AvZDSL/README.md +++ b/Reisen/AvZDSL/README.md @@ -1,5 +1,7 @@ # AvZ DSL +**新版 DSL 已加入 AvZ2 本体。本插件已废弃,此后不再更新。** + > 使用 DSL 最明显的优点在于,一旦您获得了一种语言和转换引擎,您在 DSL 覆盖的软件开发特定方面的工作就会变得更有**效率**,因为您不必手动完成繁琐的工作。\ 如果您有一种方法可以用与领域高度一致的语言表达领域重点,您的**思路将变得更加清晰**,因为您编写的代码不会被实现细节搞得混乱。 换言之,使用 DSL 允许您将基本点与复杂性分开。\ DSL 的领域、抽象和符号与领域专家(即非编程人员)如何表达自己高度一致,这就**在技术人员与领域人员之间形成良好的配合**。\ diff --git a/Reisen/fodder/README.md b/Reisen/fodder/README.md index e3a95da..13643d1 100644 --- a/Reisen/fodder/README.md +++ b/Reisen/fodder/README.md @@ -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: diff --git a/Reisen/mod/mod/information.txt b/Reisen/mod/mod/information.txt index f9fe8ce..3b9e02b 100644 --- a/Reisen/mod/mod/information.txt +++ b/Reisen/mod/mod/information.txt @@ -1,2 +1,2 @@ -version 0.1.1 +version 0.1.2 avz 2022_10_01 diff --git a/Reisen/mod/mod/mod.h b/Reisen/mod/mod/mod.h index 3ace00a..3ca7fca 100644 --- a/Reisen/mod/mod/mod.h +++ b/Reisen/mod/mod/mod.h @@ -106,6 +106,11 @@ Mod SaveDataReadOnly{ {0x54b267, '\x70', '\x74'}, }; +// 阳光陈化(去除游戏中前 52 个天降阳光掉落更快的设定) +Mod StabilizeSunDrop{ + {{0x6a9ec0, 0x768, 0x553c}, 52}, +}; + // 暂停刷新 Mod StopZombieSpawn{ {0x4265dc, '\xeb', '\x74'}, diff --git a/Reisen/mod/mod/mod_avz1.h b/Reisen/mod/mod/mod_avz1.h index 8fdd8dd..5cda588 100644 --- a/Reisen/mod/mod/mod_avz1.h +++ b/Reisen/mod/mod/mod_avz1.h @@ -6,9 +6,10 @@ namespace _ModInternal { class ModEntry { private: - std::vector U32ToBytes(uint32_t x) { - std::vector result(4); - memcpy(result.data(), &x, 4); + template + static std::vector ToBytes(T x) { + std::vector result(sizeof(T)); + memcpy(result.data(), &x, sizeof(T)); return result; } @@ -16,23 +17,33 @@ class ModEntry { std::vector addr; std::vector data, orig; - ModEntry(std::vector addr_, std::vector data_, std::vector orig_) - : addr(std::move(addr_)), data(std::move(data_)), orig(std::move(orig_)) {} + template + ModEntry(uintptr_t addr, T data, T orig) + : addr{addr}, data(ToBytes(data)), orig(ToBytes(orig)) {} - ModEntry(std::vector addr_, char data_, char orig_) - : addr(std::move(addr_)), data{(unsigned char)data_}, orig{(unsigned char)orig_} {} + template + ModEntry(uintptr_t addr, T data) + : addr{addr}, data(ToBytes(data)) {} - ModEntry(std::vector addr_, uint32_t data_, uint32_t orig_) - : addr(std::move(addr_)), data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {} + ModEntry(uintptr_t addr, const std::vector& data, const std::vector& orig) + : addr{addr}, data(data), orig(orig) {} - ModEntry(uintptr_t addr_, std::vector data_, std::vector orig_) - : addr{addr_}, data(std::move(data_)), orig(std::move(orig_)) {} + ModEntry(uintptr_t addr, const std::vector& data) + : addr{addr}, data(data) {} - ModEntry(uintptr_t addr_, char data_, char orig_) - : addr{addr_}, data{(unsigned char)data_}, orig{(unsigned char)orig_} {} + template + ModEntry(const std::vector& 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 + ModEntry(const std::vector& addr, T data) + : addr(addr), data(ToBytes(data)) {} + + ModEntry(const std::vector& addr, const std::vector& data, const std::vector& orig) + : addr(addr), data(data), orig(orig) {} + + ModEntry(const std::vector& addr, const std::vector& data) + : addr(addr), data(data) {} }; enum class ModState { @@ -59,8 +70,8 @@ class Mod : protected AvZ::GlobalVar { } public: - Mod(std::vector entries_) : entries(std::move(entries_)) {} - Mod(std::initializer_list entries_) : entries(entries_) {} + Mod(const std::vector& entries) : entries(entries) {} + Mod(std::initializer_list entries) : entries(entries) {} Mod(const Mod&) = delete; Mod& operator=(const Mod&) = delete; @@ -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 { diff --git a/Reisen/mod/mod/mod_avz2.h b/Reisen/mod/mod/mod_avz2.h index c81e3e7..a388af2 100644 --- a/Reisen/mod/mod/mod_avz2.h +++ b/Reisen/mod/mod/mod_avz2.h @@ -6,9 +6,10 @@ namespace _ModInternal { class ModEntry { private: - std::vector U32ToBytes(uint32_t x) { - std::vector result(4); - memcpy(result.data(), &x, 4); + template + static std::vector ToBytes(T x) { + std::vector result(sizeof(T)); + memcpy(result.data(), &x, sizeof(T)); return result; } @@ -16,23 +17,33 @@ class ModEntry { std::vector addr; std::vector data, orig; - ModEntry(std::vector addr_, std::vector data_, std::vector orig_) - : addr(std::move(addr_)), data(std::move(data_)), orig(std::move(orig_)) {} + template + ModEntry(uintptr_t addr, T data, T orig) + : addr{addr}, data(ToBytes(data)), orig(ToBytes(orig)) {} - ModEntry(std::vector addr_, char data_, char orig_) - : addr(std::move(addr_)), data{(unsigned char)data_}, orig{(unsigned char)orig_} {} + template + ModEntry(uintptr_t addr, T data) + : addr{addr}, data(ToBytes(data)) {} - ModEntry(std::vector addr_, uint32_t data_, uint32_t orig_) - : addr(std::move(addr_)), data(U32ToBytes(data_)), orig(U32ToBytes(orig_)) {} + ModEntry(uintptr_t addr, const std::vector& data, const std::vector& orig) + : addr{addr}, data(data), orig(orig) {} - ModEntry(uintptr_t addr_, std::vector data_, std::vector orig_) - : addr{addr_}, data(std::move(data_)), orig(std::move(orig_)) {} + ModEntry(uintptr_t addr, const std::vector& data) + : addr{addr}, data(data) {} - ModEntry(uintptr_t addr_, char data_, char orig_) - : addr{addr_}, data{(unsigned char)data_}, orig{(unsigned char)orig_} {} + template + ModEntry(const std::vector& 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 + ModEntry(const std::vector& addr, T data) + : addr(addr), data(ToBytes(data)) {} + + ModEntry(const std::vector& addr, const std::vector& data, const std::vector& orig) + : addr(addr), data(data), orig(orig) {} + + ModEntry(const std::vector& addr, const std::vector& data) + : addr(addr), data(data) {} }; enum class ModState { @@ -59,8 +70,8 @@ class Mod : protected AStateHook { } public: - Mod(std::vector entries_) : entries(std::move(entries_)) {} - Mod(std::initializer_list entries_) : entries(entries_) {} + Mod(const std::vector& entries) : entries(entries) {} + Mod(std::initializer_list entries) : entries(entries) {} Mod(const Mod&) = delete; Mod& operator=(const Mod&) = delete; @@ -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 {