mirror of
https://github.com/dashr9230/SA-MP.git
synced 2026-10-10 11:43:04 +08:00
437 lines
9.9 KiB
C++
437 lines
9.9 KiB
C++
|
|
#include "main.h"
|
|
#include "game/util.h"
|
|
|
|
extern CChatWindow *pChatWindow;
|
|
extern CGame *pGame;
|
|
extern CCmdWindow *pCmdWindow;
|
|
extern CDeathWindow *pDeathWindow;
|
|
extern CNetGame *pNetGame;
|
|
extern GAME_SETTINGS tSettings;
|
|
extern CConfig *pConfig;
|
|
extern CFontRender *pDefaultFont;
|
|
|
|
extern bool bShowDebugLabels;
|
|
extern bool bHudScaleFix;
|
|
extern bool bCameraTargetDebug;
|
|
extern BOOL bToggleObjectLight;
|
|
|
|
void ShutdownGame(); // .text:100C3E80
|
|
int VehicleSelect(int a1, int a2, int a3); // .text:1009E0A0
|
|
void sub_100C5430(); // .text:100C5430
|
|
char *sub_100C3AD0(); // .text:100C3AD0
|
|
|
|
void cmdDefaultCmdProc(PCHAR szCmd)
|
|
{
|
|
if(pNetGame) {
|
|
CLocalPlayer *pLocalPlayer;
|
|
pLocalPlayer = pNetGame->GetPlayerPool()->GetLocalPlayer();
|
|
pLocalPlayer->Say(szCmd);
|
|
}
|
|
}
|
|
|
|
void cmdTestDeathWindow(PCHAR szCmd)
|
|
{
|
|
if(pDeathWindow) {
|
|
pDeathWindow->AddMessage("Pooper","Pooper333",0xFFFFFFFF,0xFFFFFFFF,1);
|
|
pDeathWindow->AddMessage("Pooper","Pooper",0xFFFFFFFF,0xFFFFFFFF,5);
|
|
pDeathWindow->AddMessage("Pooper","Pooper",0xFFFFFFFF,0xFFFFFFFF,15);
|
|
pDeathWindow->AddMessage("Pooper","Pooper",0xFFFFFFFF,0xFFFFFFFF,14);
|
|
pDeathWindow->AddMessage("Pooper","Pooper",0xFFFFFFFF,0xFFFFFFFF,2);
|
|
pDeathWindow->AddMessage(0,"PooperPooperPooper0001",0xFFFFFFFF,0xFFFFFFFF,5);
|
|
pDeathWindow->AddMessage(0,"Pooper",0xFFFFFFFF,0xFFFFFFFF,-1);
|
|
pDeathWindow->AddMessage("Pooper","PooperPooperPooper0001",0xFFFFFFFF,0xFFFFFFFF,0);
|
|
}
|
|
}
|
|
|
|
void cmdCameraTargetDebug(PCHAR szCmd)
|
|
{
|
|
bCameraTargetDebug = !bCameraTargetDebug;
|
|
}
|
|
|
|
void cmdPageSize(PCHAR szCmd)
|
|
{
|
|
int iPageSize;
|
|
if(strlen(szCmd) && (iPageSize = atoi(szCmd)) >= 10 && iPageSize <= 20)
|
|
{
|
|
if(pChatWindow) pChatWindow->SetPageSize(iPageSize);
|
|
if(pConfig) pConfig->SetIntVariable("pagesize", iPageSize);
|
|
}
|
|
else
|
|
{
|
|
if(pChatWindow) pChatWindow->AddDebugMessage("pagesize [10-20] (lines)");
|
|
}
|
|
}
|
|
|
|
void cmdFontSize(PCHAR szCmd)
|
|
{
|
|
int iSize;
|
|
if(strlen(szCmd) && (iSize = atoi(szCmd)) >= -3 && iSize <= 5)
|
|
{
|
|
if(pConfig) pConfig->SetIntVariable("fontsize", iSize);
|
|
if(pDefaultFont) pDefaultFont->CreateFonts();
|
|
if(pChatWindow)
|
|
{
|
|
pChatWindow->FUNC_100681D0();
|
|
pChatWindow->FUNC_10067200();
|
|
}
|
|
if(pDeathWindow) pDeathWindow->CreateFonts();
|
|
sub_100C5430();
|
|
}
|
|
else
|
|
{
|
|
if(pChatWindow) pChatWindow->AddDebugMessage("Valid fontsize: -3 to 5");
|
|
}
|
|
}
|
|
|
|
void cmdNameTagStatus(PCHAR szCmd)
|
|
{
|
|
if(pNetGame) pNetGame->ToggleNameTagStatus();
|
|
}
|
|
|
|
void cmdTimestamp(PCHAR szCmd)
|
|
{
|
|
CChatWindow *pChatWindow = ::pChatWindow;
|
|
if(pChatWindow)
|
|
{
|
|
if(pChatWindow->m_bTimestamp)
|
|
{
|
|
pChatWindow->m_bTimestamp = 0;
|
|
pChatWindow->m_bRedraw = 1;
|
|
if(pConfig) pConfig->SetIntVariable("timestamp", 0);
|
|
}
|
|
else
|
|
{
|
|
pChatWindow->m_bTimestamp = 1;
|
|
pChatWindow->m_bRedraw = 1;
|
|
if(pConfig) pConfig->SetIntVariable("timestamp", 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdAudioMsg(PCHAR szCmd)
|
|
{
|
|
if(pConfig->GetIntVariable("audiomsgoff") == 1)
|
|
{
|
|
pConfig->SetIntVariable("audiomsgoff", 0);
|
|
if(pChatWindow) pChatWindow->AddInfoMessage("Audio messages: On");
|
|
}
|
|
else
|
|
{
|
|
pConfig->SetIntVariable("audiomsgoff", 1);
|
|
if(pChatWindow) pChatWindow->AddInfoMessage("Audio messages: Off");
|
|
}
|
|
}
|
|
|
|
void cmdLogUrls(PCHAR szCmd)
|
|
{
|
|
if(pConfig->GetIntVariable("logurls") == 1)
|
|
{
|
|
pConfig->SetIntVariable("logurls", 0);
|
|
if(pChatWindow) pChatWindow->AddInfoMessage("URL messages: Off");
|
|
}
|
|
else
|
|
{
|
|
pConfig->SetIntVariable("logurls", 1);
|
|
if(pChatWindow) pChatWindow->AddInfoMessage("URL messages: On");
|
|
}
|
|
}
|
|
|
|
void cmdHudScaleFix(PCHAR szCmd)
|
|
{
|
|
if(bHudScaleFix)
|
|
{
|
|
bHudScaleFix = false;
|
|
pConfig->SetIntVariable("nohudscalefix", 1);
|
|
}
|
|
else
|
|
{
|
|
bHudScaleFix = true;
|
|
pConfig->SetIntVariable("nohudscalefix", 0);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------
|
|
|
|
void cmdMem(PCHAR szCmd)
|
|
{
|
|
pChatWindow->AddDebugMessage("Memory: %u",*(DWORD *)0x8A5A80);
|
|
}
|
|
|
|
void cmdSetFrameLimit(PCHAR szCmd)
|
|
{
|
|
if(strlen(szCmd))
|
|
{
|
|
unsigned int uiLimit = atoi(szCmd);
|
|
if(uiLimit >= 20 && uiLimit <= 90)
|
|
{
|
|
pGame->SetFrameLimiter(uiLimit);
|
|
if(pConfig) pConfig->SetIntVariable("fpslimit", uiLimit);
|
|
pChatWindow->AddInfoMessage("-> Frame Limiter: %u", uiLimit);
|
|
}
|
|
else
|
|
{
|
|
pChatWindow->AddInfoMessage("-> Frame Limiter: valid amounts are 20-90", uiLimit);
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdHeadMove(PCHAR szCmd)
|
|
{
|
|
CGame *pGame = ::pGame;
|
|
if(pGame)
|
|
{
|
|
if(pGame->m_bHeadMove)
|
|
{
|
|
pGame->m_bHeadMove = 0;
|
|
if(pConfig) pConfig->SetIntVariable("disableheadmove", 1);
|
|
pChatWindow->AddInfoMessage("-> Head movements disabled");
|
|
}
|
|
else
|
|
{
|
|
pGame->m_bHeadMove = 1;
|
|
if(pConfig) pConfig->SetIntVariable("disableheadmove", 0);
|
|
pChatWindow->AddInfoMessage("-> Head movements enabled");
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdQuit(PCHAR szCmd)
|
|
{
|
|
ShutdownGame();
|
|
}
|
|
|
|
void cmdCmpStat(PCHAR szCmd)
|
|
{
|
|
}
|
|
|
|
void cmdSavePos(PCHAR szCmd)
|
|
{
|
|
CPlayerPed *pPlayerPed = pGame->FindPlayerPed();
|
|
|
|
char szString[264];
|
|
sprintf(szString, "%s\\savedpositions.txt", sub_100C3AD0());
|
|
|
|
FILE *f = fopen(szString, "a");
|
|
if(!f)
|
|
{
|
|
pChatWindow->AddDebugMessage("I can't open the savepositions.txt file for append.");
|
|
return;
|
|
}
|
|
|
|
if(pPlayerPed->IsInVehicle())
|
|
{
|
|
VEHICLE_TYPE *pVehicle = pPlayerPed->GetGtaVehicle();
|
|
int iIndex = GamePool_Vehicle_GetIndex(pVehicle);
|
|
float fAngle;
|
|
ScriptCommand(&get_car_z_angle, iIndex, &fAngle);
|
|
fprintf(f, "AddStaticVehicle(%u,%.4f,%.4f,%.4f,%.4f,%u,%u); // %s\n",
|
|
pVehicle->entity.nModelIndex,
|
|
pVehicle->entity.mat->pos.X,
|
|
pVehicle->entity.mat->pos.Y,
|
|
pVehicle->entity.mat->pos.Z,
|
|
fAngle,
|
|
pVehicle->byteColor1,
|
|
pVehicle->byteColor2,
|
|
szCmd);
|
|
fclose(f);
|
|
pChatWindow->AddInfoMessage("-> InCar position saved");
|
|
}
|
|
else
|
|
{
|
|
PED_TYPE *pPed = pPlayerPed->m_pPed;
|
|
float fAngle;
|
|
ScriptCommand(&get_actor_z_angle, pPlayerPed->m_dwGTAId, &fAngle);
|
|
fprintf(f, "AddPlayerClass(%u,%.4f,%.4f,%.4f,%.4f,0,0,0,0,0,0); // %s\n",
|
|
pPlayerPed->GetModelIndex(),
|
|
pPed->entity.mat->pos.X,
|
|
pPed->entity.mat->pos.Y,
|
|
pPed->entity.mat->pos.Z,
|
|
fAngle,
|
|
szCmd);
|
|
fclose(f);
|
|
pChatWindow->AddInfoMessage("-> OnFoot position saved");
|
|
}
|
|
}
|
|
|
|
void cmdRawSavePos(PCHAR szCmd)
|
|
{
|
|
// TODO: cmdRawSavePos .text:10068B80
|
|
}
|
|
|
|
void cmdPlayerSkin(PCHAR szCmd)
|
|
{
|
|
if(tSettings.bDebug)
|
|
{
|
|
if(!strlen(szCmd))
|
|
{
|
|
pChatWindow->AddDebugMessage("Usage: player_skin (skin number).");
|
|
}
|
|
else
|
|
{
|
|
int iSkin = atoi(szCmd);
|
|
if(pGame->sub_100A0930())
|
|
{
|
|
CPlayerPed *pPlayerPed = pGame->FindPlayerPed();
|
|
if(pPlayerPed)
|
|
{
|
|
pPlayerPed->SetSkin(iSkin);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdCreateVehicle(PCHAR szCmd)
|
|
{
|
|
if(tSettings.bDebug)
|
|
{
|
|
if(!strlen(szCmd))
|
|
{
|
|
pChatWindow->AddDebugMessage("Usage: /v (vehicle id).");
|
|
}
|
|
else
|
|
{
|
|
int iModel = atoi(szCmd);
|
|
if(pGame->sub_100A0930())
|
|
{
|
|
pGame->sub_100A0940(iModel, 2);
|
|
pGame->sub_100A0960();
|
|
CPlayerPed *pPlayerPed = pGame->FindPlayerPed();
|
|
if(pPlayerPed)
|
|
{
|
|
MATRIX4X4 mat;
|
|
pPlayerPed->GetMatrix(&mat);
|
|
char szName[9] = {0};
|
|
sprintf(szName, "TYPE_%d", iModel);
|
|
pGame->sub_100A0250(iModel, mat.pos.X - 5.0f, mat.pos.Y - 5.0f, mat.pos.Z + 1.0f, 0, 0)->Add();
|
|
}
|
|
else
|
|
{
|
|
pChatWindow->AddDebugMessage("I couldn't find the player actor.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pChatWindow->AddDebugMessage("game not loaded.");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdSelectVehicle(PCHAR szCmd)
|
|
{
|
|
if(tSettings.bDebug)
|
|
{
|
|
VehicleSelect(0, 0, 10);
|
|
}
|
|
}
|
|
|
|
void cmdSetWeather(PCHAR szCmd)
|
|
{
|
|
if(!strlen(szCmd))
|
|
{
|
|
pChatWindow->AddDebugMessage("Usage: set_weather (weather number)");
|
|
return;
|
|
}
|
|
pGame->SetWeather(atoi(szCmd));
|
|
}
|
|
|
|
void cmdSetTime(PCHAR szCmd)
|
|
{
|
|
if(!strlen(szCmd))
|
|
{
|
|
pChatWindow->AddDebugMessage("Usage: set_time (hour) (minute)");
|
|
return;
|
|
}
|
|
int iHour = 0, iMinute = 0;
|
|
sscanf(szCmd, "%d%d", &iHour, &iMinute);
|
|
if(iHour < 0 || iHour > 23 || iMinute < 0 || iMinute > 59)
|
|
{
|
|
pChatWindow->AddDebugMessage("Invalid Time. Use /set_time (hour 0-23) (minute 0-59)");
|
|
}
|
|
else
|
|
{
|
|
pGame->SetTime(iHour, iMinute);
|
|
}
|
|
}
|
|
|
|
void cmdShowInterior(PCHAR szCmd)
|
|
{
|
|
int iInterior;
|
|
ScriptCommand(&get_active_interior, &iInterior);
|
|
pChatWindow->AddDebugMessage("Current Interior: %u", iInterior);
|
|
}
|
|
|
|
void cmdToggleObjectLight(PCHAR szCmd)
|
|
{
|
|
bToggleObjectLight = !bToggleObjectLight;
|
|
}
|
|
|
|
void cmdDebugLabels(PCHAR szCmd)
|
|
{
|
|
bShowDebugLabels = !bShowDebugLabels;
|
|
}
|
|
|
|
void cmdRcon(PCHAR szCmd)
|
|
{
|
|
if(szCmd)
|
|
{
|
|
if(pNetGame)
|
|
{
|
|
RakNet::BitStream bsSend;
|
|
bsSend.Write((BYTE)201);
|
|
int iStrlen = strlen(szCmd);
|
|
bsSend.Write(iStrlen);
|
|
bsSend.Write(szCmd, iStrlen);
|
|
pNetGame->GetRakClient()->Send(&bsSend, HIGH_PRIORITY, RELIABLE, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------
|
|
|
|
void SetupCommands()
|
|
{
|
|
// RELEASE COMMANDS
|
|
pCmdWindow->AddDefaultCmdProc(cmdDefaultCmdProc);
|
|
pCmdWindow->AddCmdProc("quit",cmdQuit);
|
|
pCmdWindow->AddCmdProc("q",cmdQuit);
|
|
pCmdWindow->AddCmdProc("save",cmdSavePos);
|
|
pCmdWindow->AddCmdProc("rs",cmdRawSavePos);
|
|
pCmdWindow->AddCmdProc("rcon",cmdRcon);
|
|
pCmdWindow->AddCmdProc("mem",cmdMem);
|
|
pCmdWindow->AddCmdProc("fpslimit",cmdSetFrameLimit);
|
|
pCmdWindow->AddCmdProc("pagesize",cmdPageSize);
|
|
pCmdWindow->AddCmdProc("fontsize",cmdFontSize);
|
|
pCmdWindow->AddCmdProc("nametagstatus",cmdNameTagStatus);
|
|
pCmdWindow->AddCmdProc("timestamp",cmdTimestamp);
|
|
pCmdWindow->AddCmdProc("headmove",cmdHeadMove);
|
|
pCmdWindow->AddCmdProc("hudscalefix",cmdHudScaleFix);
|
|
pCmdWindow->AddCmdProc("testdw",cmdTestDeathWindow);
|
|
|
|
#ifndef _DEBUG
|
|
if(tSettings.bDebug)
|
|
{
|
|
#endif
|
|
pCmdWindow->AddCmdProc("vsel",cmdSelectVehicle);
|
|
pCmdWindow->AddCmdProc("v",cmdCreateVehicle);
|
|
pCmdWindow->AddCmdProc("vehicle",cmdCreateVehicle);
|
|
pCmdWindow->AddCmdProc("player_skin",cmdPlayerSkin);
|
|
pCmdWindow->AddCmdProc("set_weather",cmdSetWeather);
|
|
pCmdWindow->AddCmdProc("set_time",cmdSetTime);
|
|
#ifndef _DEBUG
|
|
}
|
|
#endif
|
|
|
|
pCmdWindow->AddCmdProc("interior",cmdShowInterior);
|
|
pCmdWindow->AddCmdProc("togobjlight",cmdToggleObjectLight);
|
|
pCmdWindow->AddCmdProc("cmpstat",cmdCmpStat);
|
|
pCmdWindow->AddCmdProc("dl",cmdDebugLabels);
|
|
pCmdWindow->AddCmdProc("ctd",cmdCameraTargetDebug);
|
|
pCmdWindow->AddCmdProc("audiomsg",cmdAudioMsg);
|
|
pCmdWindow->AddCmdProc("logurls",cmdLogUrls);
|
|
}
|
|
|
|
//----------------------------------------------------
|