Skip to content

Commit

Permalink
新增屏幕分辨率、任务时间等获取方法,添加图片绘制的大小设置
Browse files Browse the repository at this point in the history
  • Loading branch information
HalcyonAlcedo committed Sep 3, 2021
1 parent 3740b71 commit f40f7ec
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 22 deletions.
73 changes: 62 additions & 11 deletions Base.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ namespace Base {
string ModName = "LuaScript";
string ModAuthor = "Alcedo";
string ModVersion = "v1.2.5";
long long ModBuild = 125006212157;
long long ModBuild = 125009031115;
string Version = "421471";
}
#pragma endregion
Expand Down Expand Up @@ -350,6 +350,8 @@ namespace Base {
bool Base64 = false;
int Width = 0;
int Height = 0;
int DisplayWidth = 0;
int DisplayHeight = 0;
NewImage(
float BgAlpha = 1,
Vector3 Channel = Vector3(1, 1, 1),
Expand All @@ -358,8 +360,10 @@ namespace Base {
string ImageFile = "",
bool Base64 = false,
int Width = 0,
int Height = 0
) :BgAlpha(BgAlpha), Channel(Channel), Pos(Pos), Name(Name), ImageFile(ImageFile), Base64(Base64), Width(Width), Height(Height) { };
int Height = 0,
int DisplayWidth = 0,
int DisplayHeight = 0
) :BgAlpha(BgAlpha), Channel(Channel), Pos(Pos), Name(Name), ImageFile(ImageFile), Base64(Base64), Width(Width), Height(Height), DisplayWidth(DisplayWidth), DisplayHeight(DisplayHeight) { };
};
struct NewText {
float BgAlpha = 1;
Expand All @@ -380,6 +384,7 @@ namespace Base {
map<string, NewImage> Img;
map<string, NewText> Text;
map<string, string> About;
Vector2 GameWindowSize = Vector2(GetSystemMetrics(SM_CXFULLSCREEN), GetSystemMetrics(SM_CYFULLSCREEN));
}
#pragma endregion
//音频播放
Expand Down Expand Up @@ -1107,8 +1112,9 @@ namespace Base {
void* t_ShlpPtr = nullptr;
void* t_ShlpTargetPtr = nullptr;
}
map<void*, void*> ProjectilesList;
vector<void*> ProjectilesList2;
map<void*, int> ProjectilesList;
void* ProjectilesListTemp[50];
void* ProjectilesListDelTemp[50];
//执行投射物生成
static bool CallProjectilesGenerate(int Id, float* Coordinate, int From = 0) {
//武器发出的投射物
Expand Down Expand Up @@ -1579,11 +1585,46 @@ namespace Base {
return original(RCX, RDX);
});
//获取发射物列表
/*
HookLambda(MH::Shlp::GetShlpPtr,
[](auto RCX) {
GetRDIPtr(&Base::ProjectilesOperation::TempData::t_ShlpTargetPtr);
Base::ProjectilesOperation::TempData::t_ShlpPtr = RCX;
//Base::ProjectilesOperation::ProjectilesList2.push_back(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::DelShlpPtr,
[](auto RCX) {
for (int i = 0; i < 50; i++)
{
if (ProjectilesOperation::ProjectilesListDelTemp[i] == nullptr) {
ProjectilesOperation::ProjectilesListDelTemp[i] = RCX;
break;
}
}
return original(RCX);
});
MH_ApplyQueued();
Expand Down Expand Up @@ -1727,18 +1768,28 @@ ___
AssemblyOffset2 = *offsetPtr<undefined**>((undefined(*)())AssemblyOffset1, 0x30);
if (AssemblyOffset2 != nullptr)
World::Assembly = offsetPtr<char>(AssemblyOffset2, 0x3C8);
//获取投射物数据
if (Base::ProjectilesOperation::TempData::t_ShlpPtr != nullptr and Base::ProjectilesOperation::TempData::t_ShlpTargetPtr != nullptr) {
ProjectilesOperation::ProjectilesList[ProjectilesOperation::TempData::t_ShlpPtr] = ProjectilesOperation::TempData::t_ShlpTargetPtr;
ProjectilesOperation::TempData::t_ShlpPtr = nullptr;
ProjectilesOperation::TempData::t_ShlpTargetPtr = nullptr;
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
8 changes: 5 additions & 3 deletions ControlProgram.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ namespace ControlProgram {
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();

if (Base::ModConfig::ModConsole)
{
ImGui::SetNextWindowBgAlpha(0.35f);
Expand Down Expand Up @@ -369,7 +368,7 @@ namespace ControlProgram {

if (ImGui::TreeNode(u8"投射物信息"))
{
for (auto [projectiles, projectilesData] : Base::ProjectilesOperation::ProjectilesList) {
for (auto [projectiles, _t] : Base::ProjectilesOperation::ProjectilesList) {
if (projectiles != nullptr) {
ImGui::Text(u8"内存地址:%x", projectiles);
}
Expand Down Expand Up @@ -423,7 +422,10 @@ namespace ControlProgram {
ImGui::GetMainViewport()->Pos.y + ImGui::GetMainViewport()->Size.y * Data.Pos.y
), ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
ImGui::Begin(("IMG_" + Data.Name).c_str(), NULL, window_flags);
ImGui::Image((void*)ImgTextureCache[Data.ImageFile].texture, ImVec2(ImgTextureCache[Data.ImageFile].width, ImgTextureCache[Data.ImageFile].height), ImVec2(0.0, 0.0), ImVec2(1.0, 1.0), ImVec4(Data.Channel.x, Data.Channel.y, Data.Channel.z, Data.BgAlpha));
ImVec2 DisplaySize = ImVec2(ImgTextureCache[Data.ImageFile].width, ImgTextureCache[Data.ImageFile].height);
if (Data.DisplayHeight != 0 and Data.DisplayWidth != 0)
DisplaySize = ImVec2(Data.DisplayWidth, Data.DisplayHeight);
ImGui::Image((void*)ImgTextureCache[Data.ImageFile].texture, DisplaySize, ImVec2(0.0, 0.0), ImVec2(1.0, 1.0), ImVec4(Data.Channel.x, Data.Channel.y, Data.Channel.z, Data.BgAlpha));
ImGui::End();
}
//文字显示
Expand Down
35 changes: 28 additions & 7 deletions LuaScript.h
Original file line number Diff line number Diff line change
Expand Up @@ -1056,16 +1056,16 @@ static int Game_Shlp_GetShlpList(lua_State* pL)
ptr << Plot;
string ptrstr = ptr.str();

ostringstream Targetptr;
Targetptr << Target;
string TargetptrStr = Targetptr.str();

lua_pushstring(pL, ptrstr.c_str());
lua_pushstring(pL, TargetptrStr.c_str());
lua_settable(pL, -3);
}
return 1;
}
static int Game_GetNowTime(lua_State* pL)
{
lua_pushnumber(pL, Base::Chronoscope::NowTime);
return 1;
}
#pragma endregion
#pragma region SystemFun
static int System_Keyboard_CheckKey(lua_State* pL) {
Expand Down Expand Up @@ -1253,6 +1253,8 @@ static int System_UI_DrawImage(lua_State* pL) {
float y = (float)lua_tonumber(pL, 4);
Base::Vector3 Channel = Base::Vector3(1,1,1);
float alpha = 1;
int dw = 0;
int dh = 0;
if (lua_gettop(pL) > 4) {
alpha = (float)lua_tonumber(pL, 5);
}
Expand All @@ -1263,7 +1265,11 @@ static int System_UI_DrawImage(lua_State* pL) {
(float)lua_tonumber(pL, 8)
);
}
Base::Draw::Img[name] = Base::Draw::NewImage(alpha, Channel, Base::Vector2(x, y), name, img);
if (lua_gettop(pL) > 8) {
dw = (int)lua_tointeger(pL, 9);
dh = (int)lua_tointeger(pL, 10);
}
Base::Draw::Img[name] = Base::Draw::NewImage(alpha, Channel, Base::Vector2(x, y), name, img, dw, dh);
return 0;
}
static int System_UI_DrawBase64Image(lua_State* pL) {
Expand All @@ -1275,6 +1281,8 @@ static int System_UI_DrawBase64Image(lua_State* pL) {
int height = (float)lua_tointeger(pL, 6);
Base::Vector3 Channel = Base::Vector3(1, 1, 1);
float alpha = 1;
int dw = 0;
int dh = 0;
if (lua_gettop(pL) > 6) {
alpha = (float)lua_tonumber(pL, 7);
}
Expand All @@ -1285,7 +1293,11 @@ static int System_UI_DrawBase64Image(lua_State* pL) {
(float)lua_tonumber(pL, 10)
);
}
Base::Draw::Img[name] = Base::Draw::NewImage(alpha, Channel, Base::Vector2(x, y), name, img, true, width, height);
if (lua_gettop(pL) > 10) {
dw = (int)lua_tointeger(pL, 11);
dh = (int)lua_tointeger(pL, 12);
}
Base::Draw::Img[name] = Base::Draw::NewImage(alpha, Channel, Base::Vector2(x, y), name, img, true, width, height, dw, dh);
return 0;
}
static int System_UI_RemoveImage(lua_State* pL) {
Expand Down Expand Up @@ -1322,6 +1334,11 @@ static int System_UI_RemoveText(lua_State* pL) {
Base::Draw::Text.erase(name);
return 0;
}
static int System_UI_GetGameWindowSize(lua_State* pL) {
lua_pushinteger(pL, Base::Draw::GameWindowSize.x);
lua_pushinteger(pL, Base::Draw::GameWindowSize.y);
return 2;
}
static int System_Sound_PlaySound(lua_State* pL) {
string file = (string)lua_tostring(pL, 1);
Base::SoundPlay::PlaySoundFile(file);
Expand Down Expand Up @@ -1726,6 +1743,8 @@ int Lua_Main(string LuaFile)
lua_register(L, "Game_World_Assembly", Game_World_Assembly);
//获取投射物数据
lua_register(L, "Game_Shlp_GetShlpList", Game_Shlp_GetShlpList);
//获取当前任务时间
lua_register(L, "Game_GetNowTime", Game_GetNowTime);
#pragma region Monster
//设置怪物筛选器
lua_register(L, "Game_Monster_SetFilter", Game_Monster_SetFilter);
Expand Down Expand Up @@ -1873,6 +1892,8 @@ int Lua_Main(string LuaFile)
lua_register(L, "System_UI_DrawText", System_UI_DrawText);
//移除添加的文字
lua_register(L, "System_UI_RemoveText", System_UI_RemoveText);
//获取游戏窗口大小
lua_register(L, "System_UI_GetGameWindowSize", System_UI_GetGameWindowSize);
//播放音频文件
lua_register(L, "System_Sound_PlaySound", System_Sound_PlaySound);
#pragma endregion
Expand Down
4 changes: 3 additions & 1 deletion deps/ghidra_export.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ namespace MH {
}
namespace Shlp {
static void* (*GetShlp)(void*, int) = (void* (*)(void*, int))0x140F86090;
static void(*GetShlpPtr)(void*) = (void(*)(void*))0x141ABAAA4;
static void(*GetShlpPtr)(void*) = (void(*)(void*))0x14210e080;
static void(*DelShlpPtr)(void*) = (void(*)(void*))0x1412ec394;
static void(*ShlpCoordinateChangePtr)(void*) = (void(*)(void*))0x1420A09E0;
static void(*CallShlp)(void*, void*, void*, void*) = (void(*)(void*, void*, void*, void*))0x141ABA910;
}
namespace Savefile {
Expand Down

0 comments on commit f40f7ec

Please sign in to comment.