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

1,417
1,037
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?
если исходника нет, то скорее всего нельзя
 
  • Нравится
Реакции: sаnеk

iAmerican

Известный
Друг
612
260
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?
Вообще надо в таком случае прикладывать саму программу , раз такие вопросы задаешь. И я думаю она написана на AHK , а не на плюсах.
А с ахк дело уже намного проще.
 

ishi

Известный
493
110
Как сделать так, чтоб деструктор сам срабатывал после использования любого из элементов класса?
 

ishi

Известный
493
110
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится
Это называется область видимости переменных. После завершения блока переменная уничтожается. Пример работы можешь посмотреть здесь: C++ Shell (http://cpp.sh/3fmtj)
Деструктор также автоматически вызывается при delete.
 
Последнее редактирование:

NarutoUA

NarutoUA
BH Team
692
1,557
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?
Что значит "вызвать класс"?
 

kuleer

Участник
86
13
Когда пытаюсь копмилировать проект, творится какая то хрень, открывается Msbuild, и начинает флудить каждые 3 минуты открывается новый вот скрин: Как исправить?

Версия visual studio 2013
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    52.4 KB · Просмотры: 243
Последнее редактирование модератором:

Vandal™

Известный
55
4
C++:
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);
}

Строки всегда зеленые. В чем проблема?
Или как лучше перезаписать тип DWORD в D3DCOLOR? Ибо с форматированием код цвета указывается верно (К примеру, "text | 0xFFCCFF00").
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
@Vandal™ для использования цвета из ScrClientMessage в AddChatMessage необходимо привести его к типу 0xRRGGBB, вместо 0xAARRGGBB. Можешь использовать логическую операцию AND.
 
  • Нравится
Реакции: Vandal™

Karbun

Участник
112
3
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:
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;
}
Не ругайтесь слишком громко на меня, я только учусь:unknw:
 

sаnеk

Всефорумный sanek
Друг
2,114
2,105
как сделать, чтобы показывало только тех, кто в стриме? вариант с удалением этого
Код:
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;
        }
не поможет
C++:
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();
    }
 

SR_team

like pancake
BH Team
4,814
6,511
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:
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;
}
Не ругайтесь слишком громко на меня, я только учусь:unknw:
Добавь проверку на существование игрока с id i на сервере.
g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor
g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно быть