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

Dark_Knight

Me, me and me.
Друг
4,070
2,086
C++:
vehicle_info* my_veh = vehicle_info_get(VEHICLE_SELF, NULL);
if(my_veh){
    float coord[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);
    }
}
 
  • Нравится
Реакции: _=Gigant=_

Revalto

Известный
532
225
Так то оно так, но лучше такую проверку:
Код:
if (my_veh->hitpoints <= 200)
Ведь у нас не всегда именно 200 хп будет)
 
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
how to get player current weapon name, here what i did


Код:
const struct weapon_entry    *weapon = weapon_list;

            sprintf(ctarget_wep, "{31f8ff}Weapon{FFFFFF} %s{FFFFFF} %u", gta_weapon_get_by_name(weapon->name), g_Players->pRemotePlayer[Target_PlayerID]->pPlayerData->onFootData.byteCurrentWeapon);

const struct weapon_entry    weapon_list[] =
{
    { 0, 0, -1, "Fist" },
    { 1, 0, 331, "Brass Knuckles" },
    { 2, 1, 333, "Golf Club" },
    { 3, 1, 334, "Nitestick" },
    { 4, 1, 335, "Knife" },
    { 5, 1, 336, "Baseball Bat" },
    { 6, 1, 337, "Shovel" },
    { 7, 1, 338, "Pool Cue" },
    { 8, 1, 339, "Katana" },
    { 9, 1, 341, "Chainsaw" },
    { 22, 2, 346, "Pistol" },
    { 23, 2, 347, "Silenced Pistol" },
    { 24, 2, 348, "Desert Eagle" },
    { 25, 3, 349, "Shotgun" },
    { 26, 3, 350, "Sawn-Off Shotgun" },
    { 27, 3, 351, "SPAZ12" },
    { 28, 4, 352, "Micro UZI" },
    { 29, 4, 353, "MP5" },
    { 32, 4, 372, "Tech9" },
    { 30, 5, 355, "AK47" },
    { 31, 5, 356, "M4" },
    { 33, 6, 357, "Country Rifle" },
    { 34, 6, 358, "Sniper Rifle" },
    { 35, 7, 359, "Rocket Launcher" },
    { 36, 7, 360, "Heat Seeking RPG" },
    { 37, 7, 361, "Flame Thrower" },
    { 38, 7, 362, "Minigun" },
    { 16, 8, 342, "Grenade" },
    { 17, 8, 343, "Teargas" },
    { 18, 8, 344, "Molotov Cocktail" },
    { 39, 8, 363, "Remote Explosives" },
    { 41, 9, 365, "Spray Can" },
    { 42, 9, 366, "Fire Extinguisher" },
    { 43, 9, 367, "Camera" },
    { 10, 10, 321, "Dildo 1" },
    { 11, 10, 322, "Dildo 2" },
    { 12, 10, 323, "Vibe 1" },
    { 13, 10, 324, "Vibe 2" },
    { 14, 10, 325, "Flowers" },
    { 15, 10, 326, "Cane" },
    { 44, 11, 368, "NV Goggles" },
    { 45, 11, 369, "IR Goggles" },
    { 46, 11, 371, "Parachute" },
    { 40, 12, 364, "Detonator" },
    { -1, -1, -1, NULL }
};

but this shows
Screenshot_2.jpg


thanks for help !
 

Babayka2016

Известный
51
2
Приветствую. Столкнулся с такой проблемой:

К примеру, есть координаты множества чекпоинтов, они расположены хаотично.

Есть координаты машины и поворот персонажа в ней:

Поворот персонажа:

public float Get_Rotation() {
int base_address = mem.ReadInt(0xB6F5F0);
float angel = mem.ReadFloat(base_address + 0x558);

return angel * 6;
}

Координаты машины:

public float[] Get_Car_Coord()
{
float[] Position = new float[2];
int car_offset = mem.ReadInt(0xBA18FC);
int offset_to_matrix_car = mem.ReadInt(car_offset + 0x14);
Position[0] = mem.ReadFloat(offset_to_matrix_car + 0x30);
Position[1] = mem.ReadFloat(offset_to_matrix_car + 0x34);
return Position;
}

Как мне сделать так, чтобы она могла проехать по маршруту чекпоинтов?

Мне нужно как-то взять тот угол, на который она должна повернуться.

Типа... Есть координаты чекпоинта:

x: 1141.513916
y: -1162.998169

И координаты машины:


x: 1162.112061

y: -1199.149658

Как сделать так, чтобы она туда приехала? Как вычислить тот угол, на который она должна повернуть?

Вообще, видел, что реализуют через функцию lua - getHeadingFromVector2d.

Как она вообще устроена? Как её перевести на другой язык, к примеру?

P.S НУЖНО БЕЗ SAMPFUNCS и SAMP LUA.

Заранее спасибо)
 
Последнее редактирование:

ШPEK

Известный
1,476
525
Как исправить?
Код:
||=== Build: Debug Win32 in SFPlugin (compiler: GNU GCC Compiler) ===|
C:\Documents and Settings\Admin\Рабочий стол\Новая папка\SFPlugin\main.cpp|6|fatal error: SAMPFUNCS_API.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
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 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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );

        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;
}
Файл SAMPFUNCS_API.h существует
 

SR_team

like pancake
BH Team
4,729
6,389
Как исправить?
Код:
||=== Build: Debug Win32 in SFPlugin (compiler: GNU GCC Compiler) ===|
C:\Documents and Settings\Admin\Рабочий стол\Новая папка\SFPlugin\main.cpp|6|fatal error: SAMPFUNCS_API.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
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 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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );

        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;
}
Файл SAMPFUNCS_API.h существует
В sln есть виртуальные директории или типа того. Что бы GCC подсосал файл по не верному пути надо ему об этом сказать через `-I`. qmake и qbs делают это автоматически. Но лучше исправить путь, ведь `SAMPFUNCS_API.h` и `main.cpp` лежат не в одной папке.
 

ALF

Известный
Проверенный
320
537
how to get player current weapon name, here what i did


Код:
const struct weapon_entry    *weapon = weapon_list;

            sprintf(ctarget_wep, "{31f8ff}Weapon{FFFFFF} %s{FFFFFF} %u", gta_weapon_get_by_name(weapon->name), g_Players->pRemotePlayer[Target_PlayerID]->pPlayerData->onFootData.byteCurrentWeapon);

const struct weapon_entry    weapon_list[] =
{
    { 0, 0, -1, "Fist" },
    { 1, 0, 331, "Brass Knuckles" },
    { 2, 1, 333, "Golf Club" },
    { 3, 1, 334, "Nitestick" },
    { 4, 1, 335, "Knife" },
    { 5, 1, 336, "Baseball Bat" },
    { 6, 1, 337, "Shovel" },
    { 7, 1, 338, "Pool Cue" },
    { 8, 1, 339, "Katana" },
    { 9, 1, 341, "Chainsaw" },
    { 22, 2, 346, "Pistol" },
    { 23, 2, 347, "Silenced Pistol" },
    { 24, 2, 348, "Desert Eagle" },
    { 25, 3, 349, "Shotgun" },
    { 26, 3, 350, "Sawn-Off Shotgun" },
    { 27, 3, 351, "SPAZ12" },
    { 28, 4, 352, "Micro UZI" },
    { 29, 4, 353, "MP5" },
    { 32, 4, 372, "Tech9" },
    { 30, 5, 355, "AK47" },
    { 31, 5, 356, "M4" },
    { 33, 6, 357, "Country Rifle" },
    { 34, 6, 358, "Sniper Rifle" },
    { 35, 7, 359, "Rocket Launcher" },
    { 36, 7, 360, "Heat Seeking RPG" },
    { 37, 7, 361, "Flame Thrower" },
    { 38, 7, 362, "Minigun" },
    { 16, 8, 342, "Grenade" },
    { 17, 8, 343, "Teargas" },
    { 18, 8, 344, "Molotov Cocktail" },
    { 39, 8, 363, "Remote Explosives" },
    { 41, 9, 365, "Spray Can" },
    { 42, 9, 366, "Fire Extinguisher" },
    { 43, 9, 367, "Camera" },
    { 10, 10, 321, "Dildo 1" },
    { 11, 10, 322, "Dildo 2" },
    { 12, 10, 323, "Vibe 1" },
    { 13, 10, 324, "Vibe 2" },
    { 14, 10, 325, "Flowers" },
    { 15, 10, 326, "Cane" },
    { 44, 11, 368, "NV Goggles" },
    { 45, 11, 369, "IR Goggles" },
    { 46, 11, 371, "Parachute" },
    { 40, 12, 364, "Detonator" },
    { -1, -1, -1, NULL }
};

but this shows
Screenshot_2.jpg


thanks for help !
const struct weapon_entry *weapon = &weapon_list[byteCurrentWeapon];
sprintf(buf, "weapon: %s", weapon->name);
 
  • Нравится
Реакции: _=Gigant=_

_=Gigant=_

Известный
134
191
const struct weapon_entry *weapon = &weapon_list[byteCurrentWeapon];
sprintf(buf, "weapon: %s", weapon->name);

it shows name but incorrect for example if player use pistol it shows molotov cocktail but sometimes it show correct name like when player have Fist or Catana

i did it like this

stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[player_target];
const struct weapon_entry *weapon = &weapon_list[pPlayer->pPlayerData->onFootData.byteCurrentWeapon];

sa-mp-243.png
 

Babayka2016

Известный
51
2
Приветствую. Создаю бота, который ездит на машине.

Есть координаты машины и чекпоинта.

Как рассчитать угол между двумя точками, куда нужно повернуть машине?

P.S Без SAMPFUNCS и SAMP LUA.
 

ALF

Известный
Проверенный
320
537
it shows name but incorrect for example if player use pistol it shows molotov cocktail but sometimes it show correct name like when player have Fist or Catana

i did it like this

stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[player_target];
const struct weapon_entry *weapon = &weapon_list[pPlayer->pPlayerData->onFootData.byteCurrentWeapon];

sa-mp-243.png
C++:
stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[player_target];
for (int i = 0; weapon_list[i].name != nullptr; i++)
{
    const struct weapon_entry *weapon = &weapon_list[i];
    if (weapon->id == pPlayer->pPlayerData->onFootData.byteCurrentWeapon)
    {
        sprintf(buf, "weapon: %s", weapon->name);
    }
}
 
  • Нравится
Реакции: 01EG и _=Gigant=_