Это называется область видимости переменных. После завершения блока переменная уничтожается. Пример работы можешь посмотреть здесь: C++ Shell (http://cpp.sh/3fmtj)Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится
Что значит "вызвать класс"?Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?
case ScriptRPCEnumeration::RPC_ScrClientMessage:
{
DWORD dwColor; int iLen;
char Msg[256];
params->bitStream->ResetReadPointer();
params->bitStream->Read(dwColor);
params->bitStream->Read(iLen);
params->bitStream->Read(Msg, iLen);
char test[10];
sprintf(test, "0x%X", dwColor);
D3DCOLOR d3dColor = reinterpret_cast <D3DCOLOR> (test);
SF->getSAMP()->getChat()->AddChatMessage(d3dColor, "%s | 0x%X", Msg, dwColor);
}
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
void vivod2(void)
{
for (int i = 0; i < SAMP_MAX_PLAYERS, i++;)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "%d"),
SF->getSAMP()->getPlayers()->GetPlayerName(i);
}
};
void CALLBACK vivod1(std::string str)
{
vivod2();
};
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->registerChatCommand("vivod1", vivod1);
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
if ( g_Players->pRemotePlayer[i]->pPlayerData == NULL
|| g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL )
{
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), not streamed in", getPlayerName(i), i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
height += 1.0f + pD3DFont_sampStuff->DrawHeight();
continue;
}
int i;
for ( i = current_player_id; i < SAMP_MAX_PLAYERS; i++ )
{
D3DCOLOR color = MENU_COLOR_DEFAULT;
if ( g_Players->iIsListed[i] != 1 )
continue;
rendered_players++;
if ( rendered_players >= max_amount_players )
return;
if ( g_Players->pRemotePlayer[i]->pPlayerData == NULL
|| g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL )
{
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), not streamed in", getPlayerName(i), i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
height += 1.0f + pD3DFont_sampStuff->DrawHeight();
continue;
}
if ( !getPlayerPos(i, pos) )
continue;
color = samp_color_get( i );
const char *szPlayerName = getPlayerName( i );
int iPlayerHealth = (int)g_Players->pRemotePlayer[i]->pPlayerData->fActorHealth;
int iPlayerArmor = (int)g_Players->pRemotePlayer[i]->pPlayerData->fActorArmor;
int iVehicleID = (int)g_Players->pRemotePlayer[i]->pPlayerData->sVehicleID;
int iVehicleHealth;
if ( g_Players->pRemotePlayer[i]->pPlayerData != NULL
&& g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Vehicle != NULL )
{
uint16_t playerVehicleID = g_Players->pRemotePlayer[i]->pPlayerData->sVehicleID;
vehicle = gta_vehicle_get_by_id( g_Vehicles->pSAMP_Vehicle[playerVehicleID]->pGTA_Vehicle->base.model_alt_id );
iVehicleHealth = (int)g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Vehicle->pGTA_Vehicle->hitpoints;
}
switch ( getPlayerState(i) )
{
case PLAYER_STATE_NONE:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: None", szPlayerName, i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
case PLAYER_STATE_ONFOOT:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: On foot, Health: %d, Armor: %d, Distance: %0.2f",
szPlayerName, i, iPlayerHealth, iPlayerArmor, vect3_dist((float *)pos, &self->base.matrix[4 * 3]) );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
case PLAYER_STATE_DRIVER:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: Driver (%s (%d)), VHealth: %d, Distance: %0.2f",
szPlayerName, i, vehicle->name, iVehicleID, iVehicleHealth,
vect3_dist((float *)pos, &self->base.matrix[4 * 3]) );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
case PLAYER_STATE_PASSENGER:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: Passenger (%s (%d)), Distance: %0.2f",
szPlayerName, i, vehicle->name, iVehicleID, vect3_dist((float *)pos, &self->base.matrix[4 * 3]) );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
case PLAYER_STATE_WASTED:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: Wasted", szPlayerName, i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
case PLAYER_STATE_SPAWNED:
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), State: Spawned", szPlayerName, i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
break;
}
height += 1.0f + pD3DFont_sampStuff->DrawHeight();
}
Добавь проверку на существование игрока с id i на сервере.Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:
Не ругайтесь слишком громко на меня, я только учусь:unknw:C++:#include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" SAMPFUNCS *SF = new SAMPFUNCS(); void vivod2(void) { for (int i = 0; i < SAMP_MAX_PLAYERS, i++;) { SF->getSAMP()->getChat()->AddChatMessage(-1, "%d"), SF->getSAMP()->getPlayers()->GetPlayerName(i); } }; void CALLBACK vivod1(std::string str) { vivod2(); }; void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->registerChatCommand("vivod1", vivod1); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: SF->initPlugin(mainloop, hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно бытьg_Players->pRemotePlayer->pPlayerData->pSAMP_Actor
крашитg_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно быть
тогда не заменяй, а дополняйкрашит
так я дополнил и крашит)тогда не заменяй, а дополняй