Skip to content

Commit

Permalink
1.2.8更新
Browse files Browse the repository at this point in the history
修改Lua启动方式
Game_Shlp_GetShlpList重写
Lua_Math_Rander改为Lua_Math_Random
新增生成自定义投射物功能、获取用户屏幕分辨率功能、获取鼠标移动信息功能
修复获取玩家地址未实装的问题
修复游戏分辨率获取错误的问题
修复shlp地址消除异常的问题
  • Loading branch information
HalcyonAlcedo committed Feb 15, 2022
1 parent b12c9cd commit 2a7b5ae
Show file tree
Hide file tree
Showing 99 changed files with 33,113 additions and 210 deletions.
22 changes: 14 additions & 8 deletions AlModTemplate.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,26 +32,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
Expand Down Expand Up @@ -84,7 +84,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir)deps\Lua;$(IncludePath)</IncludePath>
<IncludePath>$(IncludePath)</IncludePath>
<OutDir>$(SolutionDir)build\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
Expand Down Expand Up @@ -146,7 +146,7 @@
<PreprocessorDefinitions>NDEBUG;ALMODTEMPLATE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(SolutionDir)deps;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)deps\minhook\include;$(SolutionDir)deps\lua;$(SolutionDir)deps;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
Expand Down Expand Up @@ -186,8 +186,6 @@
</ItemGroup>
<ItemGroup>
<Library Include="deps\loader.lib" />
<Library Include="deps\Lua.lib" />
<Library Include="deps\minhook\libMinHook.x64.lib" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="asm.asm">
Expand Down Expand Up @@ -233,6 +231,14 @@
<ClInclude Include="MonsterBuff.h" />
<ClInclude Include="PlayerBuff.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="deps\lua\lua.vcxproj">
<Project>{bc9308bb-6622-4be4-9840-ecdc8c3cba35}</Project>
</ProjectReference>
<ProjectReference Include="deps\minhook\build\VC15\libMinHook.vcxproj">
<Project>{f142a341-5ee0-442d-a15f-98ae9b48dbae}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>
6 changes: 0 additions & 6 deletions AlModTemplate.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,9 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<Library Include="deps\minhook\libMinHook.x64.lib">
<Filter>前置文件</Filter>
</Library>
<Library Include="deps\loader.lib">
<Filter>前置文件</Filter>
</Library>
<Library Include="deps\Lua.lib">
<Filter>前置文件</Filter>
</Library>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Base.h">
Expand Down
115 changes: 40 additions & 75 deletions Base.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ namespace Base {
//可设置参数
string ModName = "LuaScript";
string ModAuthor = "Alcedo";
string ModVersion = "v1.2.7";
long long ModBuild = 127010062307;
string ModVersion = "v1.2.8";
long long ModBuild = 128002151927;
string Version = "421471";
}
#pragma endregion
Expand Down Expand Up @@ -395,7 +395,7 @@ namespace Base {
map<string, NewImage> Img;
map<string, NewText> Text;
map<string, string> About;
Vector2 GameWindowSize = Vector2(GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN));
Vector2 MouseDelta = Vector2(0, 0);
}
#pragma endregion
//音频播放
Expand Down Expand Up @@ -1112,15 +1112,24 @@ namespace Base {
//投射物
#pragma region ProjectilesOperation
namespace ProjectilesOperation {
namespace TempData {
void* t_ShlpPtr = nullptr;
void* t_ShlpTargetPtr = nullptr;
}
map<void*, int> ProjectilesList;
void* ProjectilesListTemp[50];
void* ProjectilesListDelTemp[50];
struct ProjectilesData {
void* Plot;
void* From;
float CoordinatesX;
float CoordinatesY;
float CoordinatesZ;
ProjectilesData(
void* Plot = nullptr,
void* From = nullptr,
float CoordinatesX = 0,
float CoordinatesY = 0,
float CoordinatesZ = 0)
:Plot(Plot), From(From), CoordinatesX(CoordinatesX), CoordinatesY(CoordinatesY), CoordinatesZ(CoordinatesZ) {
};
};
map<void*, ProjectilesData> ProjectilesList;
//执行投射物生成
static bool CallProjectilesGenerate(int Id, float* Coordinate, int From = 0) {
static bool CallProjectilesGenerate(int Id, float* Coordinate, int From = 0, void* FromPtr = nullptr) {
//武器发出的投射物
void* Weapon = *offsetPtr<void*>(BasicGameData::PlayerPlot, 0x76B0);
void* WeaponShlpPlot = *offsetPtr<void*>(Weapon, 0x1D90);
Expand All @@ -1141,7 +1150,9 @@ namespace Base {
default:
return false;
}

if (FromPtr != nullptr) {
ShlpPlot = FromPtr;
}
void* ShlpRoute = MH::Shlp::GetShlp(ShlpPlot, Id);
if (ShlpRoute == nullptr)
return false;
Expand Down Expand Up @@ -1192,15 +1203,15 @@ namespace Base {
*tempCoordinateTailData_longlong = -1;
}
//生成投射物
static bool CreateProjectiles(int Id, Vector3 startPoint, Vector3 endPoint, int From = 0) {
static bool CreateProjectiles(int Id, Vector3 startPoint, Vector3 endPoint, int From = 0, void* FromPtr = nullptr) {
//创建投射物路径数据缓存指针
float* CoordinatesData = new float[73];
//填充缓存区数据
memset(CoordinatesData, 0, 73 * 4);
//处理投射物路径数据
GenerateProjectilesCoordinateData(CoordinatesData, startPoint, endPoint);
//执行生成投射物
bool GenerateResults = CallProjectilesGenerate(Id, CoordinatesData, From);
bool GenerateResults = CallProjectilesGenerate(Id, CoordinatesData, From, FromPtr);
//清理缓冲区
delete[]CoordinatesData;
return GenerateResults;
Expand Down Expand Up @@ -1590,46 +1601,15 @@ namespace Base {
return original(RCX, RDX);
});
//获取发射物列表
/*
HookLambda(MH::Shlp::GetShlpPtr,
[](auto RCX) {
GetRDIPtr(&Base::ProjectilesOperation::TempData::t_ShlpTargetPtr);
Base::ProjectilesOperation::TempData::t_ShlpPtr = RCX;
return original(RCX);
});
//从移动参数获取地址
HookLambda(MH::Shlp::ShlpCoordinateChangePtr,
[](auto RCX) {
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListTemp[i] == nullptr) {
ProjectilesOperation::ProjectilesListTemp[i] = RCX;
break;
}
}
return original(RCX);
});
*/
HookLambda(MH::Shlp::GetShlpPtr,
[](auto RCX) {
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListTemp[i] == nullptr) {
ProjectilesOperation::ProjectilesListTemp[i] = RCX;
break;
}
}
return original(RCX);
HookLambda(MH::Shlp::dtor,
[](auto monster) {
Base::ProjectilesOperation::ProjectilesList.erase(monster);
return original(monster);
});
HookLambda(MH::Shlp::DelShlpPtr,
HookLambda(MH::Shlp::ctor,
[](auto RCX) {
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListDelTemp[i] == nullptr) {
ProjectilesOperation::ProjectilesListDelTemp[i] = RCX;
break;
}
}
Base::ProjectilesOperation::ProjectilesList[RCX] = Base::ProjectilesOperation::ProjectilesData(RCX, *offsetPtr<void*>(RCX, 0x2B0),0,0,0);

return original(RCX);
});
//修改下一次任务
Expand Down Expand Up @@ -1752,7 +1732,14 @@ ___
Base::Monster::Monsters[monster].CoordinatesZ = *offsetPtr<float>(monster, 0x168);
}
}

//更新投射物信息
for (auto [projectiles, projectilesData] : Base::ProjectilesOperation::ProjectilesList) {
if (projectiles != nullptr) {
Base::ProjectilesOperation::ProjectilesList[projectiles].CoordinatesX = *offsetPtr<float>(projectiles, 0x160);
Base::ProjectilesOperation::ProjectilesList[projectiles].CoordinatesY = *offsetPtr<float>(projectiles, 0x164);
Base::ProjectilesOperation::ProjectilesList[projectiles].CoordinatesZ = *offsetPtr<float>(projectiles, 0x168);
}
}
//更新计时器时间
Chronoscope::NowTime = *offsetPtr<float>(BasicGameData::MapPlot, 0xC24);

Expand Down Expand Up @@ -1783,28 +1770,6 @@ ___
AssemblyOffset2 = *offsetPtr<undefined**>((undefined(*)())AssemblyOffset1, 0x30);
if (AssemblyOffset2 != nullptr)
World::Assembly = offsetPtr<char>(AssemblyOffset2, 0x3C8);
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListTemp[i] != nullptr) {
ProjectilesOperation::ProjectilesList[ProjectilesOperation::ProjectilesListTemp[i]] = 1;
ProjectilesOperation::ProjectilesListTemp[i] = nullptr;
}
}
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListDelTemp[i] != nullptr) {
ProjectilesOperation::ProjectilesList.erase(ProjectilesOperation::ProjectilesListDelTemp[i]);
ProjectilesOperation::ProjectilesListDelTemp[i] = nullptr;
}
}
//清除已经消除的投射物
/*
for (auto [Projectiles, PData] : ProjectilesOperation::ProjectilesList) {
if (PData != *offsetPtr<void*>(Projectiles, 0x2b0)) {
ProjectilesOperation::ProjectilesList.erase(Projectiles);
}
}
*/
//WebSocket数据处理
NetworkServer::WSHandle();
//任务数据
Expand Down
26 changes: 24 additions & 2 deletions ControlProgram.h
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,27 @@ namespace ControlProgram {
}
if (ImGui::TreeNode(u8"投射物信息"))
{
for (auto [projectiles, _t] : Base::ProjectilesOperation::ProjectilesList) {
for (auto [projectiles, projectilesData] : Base::ProjectilesOperation::ProjectilesList) {
if (projectiles != nullptr) {
ImGui::Text(u8"内存地址:%x", projectiles);
ostringstream ptr;
ptr << projectilesData.Plot;
string ptrstr = ptr.str();
if (ImGui::TreeNode(ptrstr.c_str()))
{
ImGui::Text(u8"内存地址:%x", projectilesData.Plot);
ImGui::Text(u8"当前坐标X:%f", projectilesData.CoordinatesX);
ImGui::Text(u8"当前坐标Y:%f", projectilesData.CoordinatesY);
ImGui::Text(u8"当前坐标Z:%f", projectilesData.CoordinatesZ);
float MonsterAngle = Base::Calculation::QuaternionToAngle(Base::Vector4(
*offsetPtr<float>(projectilesData.Plot, 0x174),
*offsetPtr<float>(projectilesData.Plot, 0x178),
*offsetPtr<float>(projectilesData.Plot, 0x17C),
*offsetPtr<float>(projectilesData.Plot, 0x180)
));
ImGui::Text(u8"朝向角:%f", MonsterAngle);
ImGui::TreePop();
ImGui::Separator();
}
}
}
ImGui::TreePop();
Expand Down Expand Up @@ -533,6 +551,10 @@ namespace ControlProgram {
}
ImGui::End();
}
//设备属性刷新
ImGuiIO& io = ImGui::GetIO();
Base::Draw::MouseDelta = Base::Vector2(io.MouseDelta.x, io.MouseDelta.y);

ImGui::Render();
pContext->OMSetRenderTargets(1, &mainRenderTargetView, NULL);
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
Expand Down
Loading

0 comments on commit 2a7b5ae

Please sign in to comment.