Skip to content

Commit

Permalink
添加更多玩家数据
Browse files Browse the repository at this point in the history
  • Loading branch information
HalcyonAlcedo committed Jun 4, 2021
1 parent ede9e64 commit 58f0f1a
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 6 deletions.
20 changes: 15 additions & 5 deletions Base.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ namespace Base {
string ModName = "LuaScript";
string ModAuthor = "Alcedo";
string ModVersion = "v1.2.4";
long long ModBuild = 122006031845;
long long ModBuild = 124006041930;
string Version = "421471";
}
#pragma endregion
Expand Down Expand Up @@ -97,6 +97,7 @@ namespace Base {
void* PlayerPlot = nullptr;
void* PlayerInfoPlot = nullptr;
void* PlayerDataPlot = nullptr;
void* PlayerArchivePlot = nullptr;
void* MapPlot = nullptr;
void* GameTimePlot = nullptr;
void* XboxPadPlot = nullptr;
Expand Down Expand Up @@ -137,6 +138,7 @@ namespace Base {
string Massage = "";
map<void*, float> FrameSpeed;
int SteamId = 0;
string Assembly = "";
}
#pragma endregion
//计时器
Expand Down Expand Up @@ -1035,10 +1037,7 @@ namespace Base {
CurrentEndurance = 0;
MaxEndurance = 0;
}
/*
char* PlayerName = offsetPtr<char>(BasicGameData::PlayerInfoPlot, 0x50);
if(strcmp(PlayerName, "\0")) Name = PlayerName;
*/
Name = offsetPtr<char>(BasicGameData::PlayerArchivePlot, 0x50);
Hr = *offsetPtr<int>(BasicGameData::PlayerInfoPlot, 0x90);
Mr = *offsetPtr<int>(BasicGameData::PlayerInfoPlot, 0xD4);
}
Expand Down Expand Up @@ -1373,6 +1372,9 @@ namespace Base {
BasicGameData::PlayerInfoPlot = *offsetPtr<undefined**>((undefined(*)())PlayerInfoPlot, 0xA8);
BasicGameData::GameTimePlot = (undefined(*)())MH::World::GameClock;
BasicGameData::MapPlot = *offsetPtr<undefined**>((undefined(*)())BasicGameData::PlayerPlot, 0x7D20);
void* PlayerArchivePlot = *(undefined**)MH::Player::PlayerArchive;
if (PlayerArchivePlot != nullptr)
BasicGameData::PlayerArchivePlot = *offsetPtr<undefined**>((undefined(*)())PlayerArchivePlot, 0xA8);
if (
BasicGameData::PlayerPlot != nullptr and
BasicGameData::MapPlot != nullptr and
Expand Down Expand Up @@ -1693,6 +1695,14 @@ ___
void* PlayerMessageOffset = *offsetPtr<undefined**>((undefined(*)())MassagePlot, 0x38);
if (PlayerMessageOffset != nullptr)
World::Massage = offsetPtr<char>(PlayerMessageOffset, 0x80);
//获取集会区域信息
void* AssemblyPlot = *(undefined**)MH::World::Assembly;
void* AssemblyOffset1 = *offsetPtr<undefined**>((undefined(*)())AssemblyPlot, 0x260);
void* AssemblyOffset2 = nullptr;
if (AssemblyOffset1 != nullptr)
AssemblyOffset2 = *offsetPtr<undefined**>((undefined(*)())AssemblyOffset1, 0x30);
if (AssemblyOffset2 != nullptr)
World::Assembly = offsetPtr<char>(AssemblyOffset2, 0x3C8);
//WebSocket数据处理
NetworkServer::WSHandle();
}
Expand Down
2 changes: 2 additions & 0 deletions ControlProgram.h
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,10 @@ namespace ControlProgram {
if (ImGui::TreeNode(u8"游戏数据"))
{
ImGui::Text(u8"地图Id:%d", Base::World::MapId);
ImGui::Text(u8"集会区域:%s", Base::World::Assembly);
if (ImGui::TreeNode(u8"玩家信息"))
{
ImGui::Text(u8"玩家名:%s", Base::PlayerData::Name);
ImGui::Text(u8"动作Id:%d", Base::PlayerData::ActionId);
if (ImGui::TreeNode(u8"派生信息"))
{
Expand Down
35 changes: 34 additions & 1 deletion LuaScript.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,31 @@ static int Game_Player_Weapon_CharacteristicByteValue(lua_State* pL) {
lua_pushinteger(pL, Component::GetWeaponCharacteristicByteValue(ptr));
return 1;
}
static int Game_Player_Weapon_SetCharacteristicValue(lua_State* pL) {
string ptr = "0x" + (string)lua_tostring(pL, 1);
string type = (string)lua_tostring(pL, 2);
long long Ptr = 0;
sscanf_s(ptr.c_str(), "%p", &Ptr, sizeof(long long));
void* ptrAddress = (void*)Ptr;
if (ptrAddress != nullptr) {
void* WeaponEntityPlot = *offsetPtr<void*>(Base::BasicGameData::PlayerPlot, 0x76B0);
if (WeaponEntityPlot != nullptr) {
if (type == "int") {
*offsetPtr<int>(WeaponEntityPlot, Ptr) = (int)lua_tointeger(pL, 3);
}
else if (type == "float") {
*offsetPtr<float>(WeaponEntityPlot, Ptr) = (float)lua_tonumber(pL, 3);
}
else if (type == "bool") {
*offsetPtr<bool>(WeaponEntityPlot, Ptr) = (bool)lua_toboolean(pL, 3);
}
else if (type == "byte") {
*offsetPtr<char>(WeaponEntityPlot, Ptr) = (char)lua_tointeger(pL, 3);
}
}
}
return 1;
}
static int Game_Player_Weapon_GetHitCoordinate(lua_State* pL) {
lua_pushnumber(pL, Base::PlayerData::Weapons::HitCoordinate.x);
lua_pushnumber(pL, Base::PlayerData::Weapons::HitCoordinate.y);
Expand Down Expand Up @@ -344,7 +369,7 @@ static int Game_Player_SetPlayerMaxEndurance(lua_State* pL) {
return 0;
}
static int Game_Player_GetPlayerRoleInfo(lua_State* pL) {
//lua_pushstring(pL, Base::PlayerData::Name.c_str());
lua_pushstring(pL, Base::PlayerData::Name.c_str());
lua_pushinteger(pL, Base::PlayerData::Hr);
lua_pushinteger(pL, Base::PlayerData::Mr);
return 2;
Expand All @@ -361,6 +386,10 @@ static int Game_World_SteamId(lua_State* pL) {
lua_pushinteger(pL, Base::World::SteamId);
return 1;
}
static int Game_World_Assembly(lua_State* pL) {
lua_pushstring(pL, Base::World::Assembly.c_str());
return 1;
}
static int Game_Monster_SetFilter(lua_State* pL) {
int id = (int)lua_tointeger(pL, 1);
int subId = (int)lua_tointeger(pL, 2);
Expand Down Expand Up @@ -1617,6 +1646,8 @@ int Lua_Main(string LuaFile)
lua_register(L, "Game_Player_Weapon_CharacteristicFloatValue", Game_Player_Weapon_CharacteristicFloatValue);
//获取玩家武器特殊数值(字节)
lua_register(L, "Game_Player_Weapon_CharacteristicByteValue", Game_Player_Weapon_CharacteristicByteValue);
//设置玩家武器特殊数值
lua_register(L, "Game_Player_Weapon_SetCharacteristicValue", Game_Player_Weapon_SetCharacteristicValue);
//获取玩家武器最后命中的坐标
lua_register(L, "Game_Player_Weapon_GetHitCoordinate", Game_Player_Weapon_GetHitCoordinate);
//获取玩家武器最后命中的怪物地址
Expand Down Expand Up @@ -1674,6 +1705,8 @@ int Lua_Main(string LuaFile)
lua_register(L, "Game_World_Message", Game_World_Message);
//获取Steam好友Id
lua_register(L, "Game_World_SteamId", Game_World_SteamId);
//获取集会区域代码
lua_register(L, "Game_World_Assembly", Game_World_Assembly);
#pragma region Monster
//设置怪物筛选器
lua_register(L, "Game_Monster_SetFilter", Game_Monster_SetFilter);
Expand Down
2 changes: 2 additions & 0 deletions deps/ghidra_export.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ namespace MH {
static void(*ActionFrameSpeed)(undefined8*) = (void(*)(undefined8*))0x1422455D0;
static void(*HookCoordinateChange)() = (void(*)())0x141F80AB2;
static void(*HookCoordinateChange2)(undefined8*, undefined8*) = (void(*)(undefined8*, undefined8*))0x140EFA699;
static void* PlayerArchive = (void*)0x145073E80;
}
namespace EnvironmentalBiological {
static undefined * (*ctor)(undefined*, undefined4, undefined4) = (undefined * (*)(undefined*, undefined4, undefined4))0x141D442C0;
Expand All @@ -57,6 +58,7 @@ namespace MH {
static undefined(*GameClockControl)(float) = (undefined(*)(float))0x141B9EB37;
static undefined(*Message)() = (undefined(*)())0x144D18278;
static undefined8(*ActionFrameSpeed)(undefined8*) = (undefined8(*)(undefined8*))0x142245590;
static void* Assembly = (void*)0x145224BF8;
}
namespace Shlp {
static void* (*GetShlp)(void*, int) = (void* (*)(void*, int))0x140F86090;
Expand Down

0 comments on commit 58f0f1a

Please sign in to comment.