//NAMETAGS
for (int i = 0; i < 1000; i++)
{
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];
if (SF->getSAMP()->getPlayers()->IsPlayerDefined(i))
{
char buffer[24];
sprintf(buffer, "%s", pPlayer->szPlayerName);
SF->getSAMP()->getInfo()->pPools->pPool_Text3D->Create3DText(i, buffer,0.00,5000.0,true,i);
}
}
void _cdecl cmd_show_info_player( char *param )
{
int i = atoi( param );
char buf[128];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );
SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
};
void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}
При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?Код:void _cdecl cmd_show_info_player( char *param ) { int i = atoi( param ); char buf[128]; stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]; sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d", pPlayer->szPlayerName, pPlayer->iPing, pPlayer->iScore, pPlayer->iIsNPC, pPlayer->pPlayerData->iAFKState == 2 ); SF->getSAMP()->getChat()->AddChatMessage( -1, buf ); }; void CALLBACK mainloop(void) { static bool init = false; if(!init) { if(!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player); init = true; } }
#include <Windows.h>
#include <string>
#include <assert.h>
#include "CSAMPFUNCS.h"
CSAMPFUNCS *SF = new CSAMPFUNCS();
void _cdecl cmd_show_info_player( char *param ){};
void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
switch ( dwReasonForCall )
{
case DLL_PROCESS_ATTACH:
SF->initPlugin( mainloop, hModule );
}
return true;
Даже если так сделать:
Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.Код:#include <Windows.h> #include <string> #include <assert.h> #include "CSAMPFUNCS.h" CSAMPFUNCS *SF = new CSAMPFUNCS(); void _cdecl cmd_show_info_player( char *param ){}; void CALLBACK mainloop(void) { static bool init = false; if(!init) { if( !SF->getSAMP()->IsInitialized() ) return; if(!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player); init = true; } } BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved ) { switch ( dwReasonForCall ) { case DLL_PROCESS_ATTACH: SF->initPlugin( mainloop, hModule ); } return true;
#include <windows.h>
#include <string>
#include <assert.h>
#include "CSAMPFUNCS.h"
CSAMPFUNCS *SF = new CSAMPFUNCS();
void cmd_show_info_player( char *param )
{
int i = atoi( param );
char buf[128];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState );
SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
}
void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot",(CMDPROC) cmd_show_info_player);
init = true;
}
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
switch ( dwReasonForCall )
{
case DLL_PROCESS_ATTACH:
SF->initPlugin( mainloop, hModule );
}
return true;
}
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
short int sPlayerID;
float health;
char buf[256];
params->bitStream->Read(sPlayerID);
params->bitStream->Read(health);
params->bitStream->ResetReadPointer();
sprintf(buf, "%s (%d) health set to %.1f gesetzt", SF->getSAMP()->getPlayers()->GetPlayerName(sPlayerID), sPlayerID, health);
log(buf);
}
Hello, what is wrong?
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
float health;
char buf[128];
params->bitStream->ResetReadPointer();
params->bitStream->Read(health);
params->bitStream->ResetReadPointer();
sprintf(buf, "My health set to %.2f", health);
SF->Log( buf );
}
log is my own function. :)Maybe log(buf);?
Change to SF->log(buf); or... it's(log(buf)) your function?