[bot] Implement/match n_GetPlayerHealth(...)

* Implement/match `CNetGame::GetPlayerHealth(...)`
This commit is contained in:
RD42 2024-07-03 23:23:15 +08:00
parent 61f5b2ffc4
commit 94ab5b9437
4 changed files with 28 additions and 34 deletions

View File

@ -1,33 +0,0 @@
# San Andreas Multiplayer
This is an ongoing matching decompilation of the 0.3.7 version of San Andreas Multiplayer.
## Status
- [ ] **samp.exe** - Mostly decompiled. Not matching due to issues with PACKAGEINFO.
- [ ] **samp.dll** - Incomplete.
- [x] **rcon.exe** - Fully decompiled.
- [x] **samp_debug.exe** - Fully decompiled.
- [ ] **samp-server.exe** - Incomplete.
- [ ] **samp03svr** - Incomplete.
- [x] **announce.exe** - Fully decompiled.
- [ ] **announce** - System and the GCC version not have been determined.
- [ ] **samp-npc.exe** - Incomplete.
- [ ] **samp-npc** - Incomplete.
## Building
### Requirements
- A clean virtual machine with Windows XP installed
- Microsoft Visual C++ 6.0
- Microsoft Visual C++ 6.0 (Service Pack 6)
- Microsoft Visual Studio .NET 2003
- Borland Delphi 7
Note(s):
- Make a backup of your Microsoft Visual C++ 6.0 installation before you install Service Pack 6 update. This update will overwrite your compiler binaries and alter your building results. You can find your Visual C++ 6.0 installation at `C:\Program Files\Microsoft Visual Studio`.
### Compiling
#### Windows
TODO
#### Linux
TODO
## Contributing
If you are interested in this decompilation project, feel free to create a pull request.

View File

@ -142,6 +142,29 @@ BYTE CNetGame::GetPlayerArmedWeapon(PLAYERID playerId)
}
}
BYTE CNetGame::GetPlayerHealth(PLAYERID playerId)
{
if(playerId >= MAX_PLAYERS) return 0;
if(bPlayerSlotState[playerId] == FALSE) return 0;
if(bytePlayerState[playerId] == PLAYER_STATE_ONFOOT)
{
return unnamed_3[playerId].byteHealth;
}
else if(bytePlayerState[playerId] == PLAYER_STATE_DRIVER)
{
return unnamed_4[playerId].bytePlayerHealth;
}
else if(bytePlayerState[playerId] == PLAYER_STATE_PASSENGER)
{
return unnamed_5[playerId].bytePlayerHealth;
}
else
{
return 0;
}
}
//----------------------------------------------------
// MATCH
BOOL CNetGame::IsPlayerAdded(PLAYERID playerId)

View File

@ -111,6 +111,7 @@ public:
BOOL GetPlayerPos(PLAYERID playerId, PVECTOR Vector);
VEHICLEID GetPlayerVehicleID(PLAYERID playerId);
BYTE GetPlayerArmedWeapon(PLAYERID playerId);
BYTE GetPlayerHealth(PLAYERID playerId);
void StopRecordingPlayback();
void PauseRecordingPlayback();

View File

@ -186,7 +186,10 @@ static cell AMX_NATIVE_CALL n_GetPlayerArmedWeapon(AMX *amx, cell *params)
// native GetPlayerHealth(playerid)
static cell AMX_NATIVE_CALL n_GetPlayerHealth(AMX *amx, cell *params)
{
// TODO: n_GetPlayerHealth
if(pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)params[1]))
{
return (cell)pNetGame->GetPlayerHealth((PLAYERID)params[1]);
}
return 0;
}