Другое С/С++ Вопрос - Ответ

holmes0

Известный
29
8
Пытаюсь получить позицию поля для ввода текста под чатом на SF (как сделано в CLEO InputHelper).
Посмотрев исходный код InputHelper-a, нашёл вот это:
CLEO:
0BAF: samp 6@ = get_input_info_ptr // stInputInfo
0C0C: 6@ = struct 6@ offset {pDXUTEditBox}0x8 size 4 // stInputBox

и это:
CLEO:
0C0C: 7@ = struct 6@ offset {dwPosChatInput1}0x8 size 4 // X
0C0C: 8@ = struct 6@ offset {dwPosChatInput2}0xC size 4 // Y

Только я не очень шарю в клео.
Я так понял, что мне нужно вот это (на SF):
C++:
SF->getSAMP()->getInput()->pDXUTEditBox;
но как оттуда достать X и Y?
или это вообще не то и мне надо доставать вручную из структур?
 
Последнее редактирование:

_=Gigant=_

Известный
134
191
how to get distance between me and vehicles near me ?

here code

for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
{
actor_info * player = actor_info_get(ACTOR_SELF, NULL);
vehicle_info *vehicle = getGTAVehicleFromSAMPVehicleID(i);

if (!vehicle)
continue;

D3DXVECTOR3 vehicle_pos, player_pos, screenposs, vscreenposs;

float * f_pos = &player->base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);

float * f_poss = &vehicle->base.matrix[4 * 3];
vehicle_pos.x = f_poss[0];
vehicle_pos.y = f_poss[1];
vehicle_pos.z = f_poss[2];
CalcScreenCoors(&vehicle_pos, &vscreenposs);

thanks for help !
 

Revalto

Известный
532
225
how to get distance between me and vehicles near me ?

here code

for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
{
actor_info * player = actor_info_get(ACTOR_SELF, NULL);
vehicle_info *vehicle = getGTAVehicleFromSAMPVehicleID(i);

if (!vehicle)
continue;

D3DXVECTOR3 vehicle_pos, player_pos, screenposs, vscreenposs;

float * f_pos = &player->base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);

float * f_poss = &vehicle->base.matrix[4 * 3];
vehicle_pos.x = f_poss[0];
vehicle_pos.y = f_poss[1];
vehicle_pos.z = f_poss[2];
CalcScreenCoors(&vehicle_pos, &vscreenposs);

thanks for help !
Код:
float GetDistance(D3DXVECTOR3 target)
{
    D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
    return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
Example:
Код:
sprintf(szMsg, "%.0f m.", GetDistance(D3DXVECTOR3(x, y, z)));
 
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
Код:
float GetDistance(D3DXVECTOR3 target)
{
    D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
    return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
Example:
Код:
sprintf(szMsg, "%.0f m.", GetDistance(D3DXVECTOR3(x, y, z)));


thank you very much !

here is the full code if someone need

float GetDistance(D3DXVECTOR3 target)
{
actor_info * playerR = actor_info_get(ACTOR_SELF, NULL);

CPed *pPedSelf = pGameInterface->GetPools()->GetPed((DWORD*)playerR);

D3DXVECTOR3 player(pPedSelf->GetPosition()->fX, pPedSelf->GetPosition()->fY, pPedSelf->GetPosition()->fZ);
return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}

sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);

this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong

sa-mp-234.png


thanks for help !
 
Последнее редактирование модератором:

Revalto

Известный
532
225
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);

this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong

sa-mp-234.png


thanks for help !
Lesson number 1:

Код:
void CALLBACK cmd_show_info_player( std::string param )
{
   if ( param.empty() ) return;
   int    i = std::stoi( param );

   char buf[128];

   stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

   if(!pPlayer) return;

   sprintf( 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 );
};

And in Mainloop:
SF->getSAMP()->registerChatCommand( "showinfo", cmd_show_info_player );

Expample for you:
Код:
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ Informer_Target_PlayerID ];
if(!pPlayer) return;
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", pPlayer->iPing, pPlayer->iScore);

What kind of font do you use?
 
Последнее редактирование:
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
Lesson number 1:

Код:
void CALLBACK cmd_show_info_player( std::string param )
{
   if ( param.empty() ) return;
   int    i = std::stoi( param );

   char buf[128];

   stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

   if(!pPlayer) return;

   sprintf( 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 );
};

And in Mainloop:
SF->getSAMP()->registerChatCommand( "showinfo", cmd_show_info_player );

Expample for you:
Код:
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ Informer_Target_PlayerID ];
if(!pPlayer) return;
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", pPlayer->iPing, pPlayer->iScore);

What kind of font do you use?

im using

pD3DFont_sampStuff

CD3DFont *pD3DFont_sampStuff = new CD3DFont( "Tahoma", 10, FCR_BORDER );
 

CleanLegend

Известный
Всефорумный модератор
476
929
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);

this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong

sa-mp-234.png


thanks for help !
you need send update scoreboard
 
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
you need send update scoreboard

how can i do that i took a look at FYP screen info code and i included same stuff as him in that code still ping and score shows 0 here full code

C++:
void renderPlayerInfo()
{
    traceLastFunc("renderPlayerInfo()");


    if (gta_menu_active())
        return;

    if (cheat_state->_generic.cheat_panic_enabled)
        return;

    if (!g_dwSAMP_Addr || !g_SAMP || !g_Players)
        return;


    // don't run if the CGameSA doesn't exist
    if (!pGameInterface)
        return;

    // don't run if we don't exist
    if (isBadPtr_GTA_pPed(pPedSelf))
        return;

        if (g_Scoreboard->iIsEnabled)
            return;

        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            actor_info *actor = getGTAPedFromSAMPPlayerID(i);
            struct actor_info    *self = actor_info_get(ACTOR_SELF, 0);

            if (self == NULL)
                return;

            if (!actor)
                continue;

            D3DXVECTOR3 player_pos, screenposs;

            float * f_pos = &actor->base.matrix[4 * 3];
            player_pos.x = f_pos[0];
            player_pos.y = f_pos[1];
            player_pos.z = f_pos[2];
            CalcScreenCoors(&player_pos, &screenposs);

            char pos[256], ping[256], hparmw[256], pnameid[256], skin[256];

                if (screenposs.z < 1.f)
                    continue;

                if (g_Players->iIsListed[i] != 1)
                    continue;

                stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[i];

                const char * playerName = getPlayerName(i);

                if (Informer)
                {

                    _snprintf_s(pnameid, sizeof(pnameid) - 1, "{C235DD}Player{FFFFFF} %s <%d>{00FF00} Distance{FFFFFF} %.0f m", playerName, i, GetDistance(D3DXVECTOR3(player_pos.x, player_pos.y, player_pos.z)));
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 38, COLOR_WHITE(255), pnameid);

                    _snprintf_s(hparmw, sizeof(hparmw) - 1, "{FF0F0F}Health{FFFFFF} %0.0f Armour %0.0f{FFA00F} Weapon{FFFFFF} %u", g_Players->pRemotePlayer[i]->pPlayerData->fActorHealth, g_Players->pRemotePlayer[i]->pPlayerData->fActorArmor, g_Players->pRemotePlayer[i]->pPlayerData->onFootData.byteCurrentWeapon);//, g_Players->pRemotePlayer[i]->szPlayerName, i);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 26, COLOR_WHITE(255), hparmw);

                    _snprintf_s(ping, sizeof(ping) - 1, "{F0FF0F}Skin{FFFFFF} %d{00FF00} Ping{FFFFFF} %d Score %d", actor->base.model_alt_id, pPlayer->iPing, pPlayer->iScore);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 14, COLOR_WHITE(255), ping);

                    _snprintf_s(pos, sizeof(pos) - 1, "Pos X %0.02f Y %0.02f Z %0.02f", player_pos.x, player_pos.y, player_pos.z);//, g_Players->pRemotePlayer[i]->szPlayerName, i);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y, COLOR_WHITE(255), pos);

                }
    }
}
 

ALF

Известный
Проверенный
320
537
how can i do that i took a look at FYP screen info code and i included same stuff as him in that code still ping and score shows 0 here full code

C++:
void renderPlayerInfo()
{
    traceLastFunc("renderPlayerInfo()");


    if (gta_menu_active())
        return;

    if (cheat_state->_generic.cheat_panic_enabled)
        return;

    if (!g_dwSAMP_Addr || !g_SAMP || !g_Players)
        return;


    // don't run if the CGameSA doesn't exist
    if (!pGameInterface)
        return;

    // don't run if we don't exist
    if (isBadPtr_GTA_pPed(pPedSelf))
        return;

        if (g_Scoreboard->iIsEnabled)
            return;

        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            actor_info *actor = getGTAPedFromSAMPPlayerID(i);
            struct actor_info    *self = actor_info_get(ACTOR_SELF, 0);

            if (self == NULL)
                return;

            if (!actor)
                continue;

            D3DXVECTOR3 player_pos, screenposs;

            float * f_pos = &actor->base.matrix[4 * 3];
            player_pos.x = f_pos[0];
            player_pos.y = f_pos[1];
            player_pos.z = f_pos[2];
            CalcScreenCoors(&player_pos, &screenposs);

            char pos[256], ping[256], hparmw[256], pnameid[256], skin[256];

                if (screenposs.z < 1.f)
                    continue;

                if (g_Players->iIsListed[i] != 1)
                    continue;

                stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[i];

                const char * playerName = getPlayerName(i);

                if (Informer)
                {

                    _snprintf_s(pnameid, sizeof(pnameid) - 1, "{C235DD}Player{FFFFFF} %s <%d>{00FF00} Distance{FFFFFF} %.0f m", playerName, i, GetDistance(D3DXVECTOR3(player_pos.x, player_pos.y, player_pos.z)));
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 38, COLOR_WHITE(255), pnameid);

                    _snprintf_s(hparmw, sizeof(hparmw) - 1, "{FF0F0F}Health{FFFFFF} %0.0f Armour %0.0f{FFA00F} Weapon{FFFFFF} %u", g_Players->pRemotePlayer[i]->pPlayerData->fActorHealth, g_Players->pRemotePlayer[i]->pPlayerData->fActorArmor, g_Players->pRemotePlayer[i]->pPlayerData->onFootData.byteCurrentWeapon);//, g_Players->pRemotePlayer[i]->szPlayerName, i);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 26, COLOR_WHITE(255), hparmw);

                    _snprintf_s(ping, sizeof(ping) - 1, "{F0FF0F}Skin{FFFFFF} %d{00FF00} Ping{FFFFFF} %d Score %d", actor->base.model_alt_id, pPlayer->iPing, pPlayer->iScore);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y - 14, COLOR_WHITE(255), ping);

                    _snprintf_s(pos, sizeof(pos) - 1, "Pos X %0.02f Y %0.02f Z %0.02f", player_pos.x, player_pos.y, player_pos.z);//, g_Players->pRemotePlayer[i]->szPlayerName, i);
                    pD3DFont_sampStuff->PrintShadow(screenposs.x, screenposs.y, COLOR_WHITE(255), pos);

                }
    }
}
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L841)
 
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
why this crashing i wanted to automatically exit car when car is about to explode

C++:
         vehicle_info* my_veh = vehicle_info_get(VEHICLE_SELF, NULL);
           
            float *coord = new float[3];
            coord[0] = pPedSelf->GetPosition()->fX;
            coord[1] = pPedSelf->GetPosition()->fY - 2.0f;
            coord[2] = pPedSelf->GetPosition()->fZ;
         
            if (my_veh->hitpoints == 200)  // if vehicle hp is 200 then exit from car
            {

            GTAfunc_RemoveActorFromCarAndPutAt(coord);
        }

thanks for help