Portal SAMP
[Ajuda] Objeto não grudando no veiculo - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Objeto não grudando no veiculo (/showthread.php?tid=5055)



Objeto não grudando no veiculo - ANDREX - 16/07/2025

Ola galera criei esse script para ao usar o comando /aov aparecer a lista de objetos e eu clicar e escolher o objeto a ser criado e ser attached no veiculo o problema e que não sei porq os objetos não estão attachando no veiculo pois ao editar o objeto e finalizar usando a função response final o objeto não gruda no veiculo da forma que eu quero ele fica solto e eu posso sair com o veículo e ele fica ali solto já tentei de tudo pra ver oq de errado cometi por isso peço ajuda a vcs mais experientes 

Código:
//criado por ANDREX
#include <a_samp>
#include <zcmd>
#include <sscanf>
#include <mSelection>

new attachList = mS_INVALID_LISTID;
new playerVehicleObject[MAX_PLAYERS];

public OnGameModeInit()
{
    attachList = LoadModelSelectionMenu("Veh.txt");
    return 1;
}

CMD:aov(playerid, params[])
{
    if (!IsPlayerInAnyVehicle(playerid))
    {
        SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Você precisa estar em um veículo.");
        return 1;
    }

    ShowModelSelectionMenu(playerid, attachList, "Escolha um objeto para anexar");
    return 1;
}

CMD:rov(playerid, params[])
{
    if (IsValidPlayerObject(playerid, playerVehicleObject[playerid]))
    {
        DestroyPlayerObject(playerid, playerVehicleObject[playerid]);
        playerVehicleObject[playerid] = INVALID_OBJECT_ID;
        SendClientMessage(playerid, 0x00FF00FF, "[INFO] Objeto removido.");
    }
    else
    {
        SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Nenhum objeto para remover.");
    }
    return 1;
}

public OnPlayerModelSelection(playerid, response, listid, modelid)
{
    if (listid == attachList)
    {
        if (!response)
        {
            SendClientMessage(playerid, 0xAAAAAAFF, "[INFO] Menu cancelado.");
            return 1;
        }

        if (!IsPlayerInAnyVehicle(playerid))
        {
            SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Você saiu do veículo!");
            return 1;
        }

        // Criar o objeto exatamente na posição do jogador
        new Float:x, Float:y, Float:z;
        GetPlayerPos(playerid, x, y, z);

        new objid = CreatePlayerObject(playerid, modelid, x, y, z, 0.0, 0.0, 0.0);
        playerVehicleObject[playerid] = objid;

        EditPlayerObject(playerid, objid);
        SendClientMessage(playerid, 0x00FF00FF, "[INFO] Modo de edição ativado.");
    }
    return 1;
}
forward public OnPlayerEditPlayerObject(playerid, playerobject, objectid, response,
    Float:fX, Float:fY, Float:fZ,
    Float:fRotX, Float:fRotY, Float:fRotZ);
public OnPlayerEditPlayerObject(playerid, playerobject, objectid, response,
    Float:fX, Float:fY, Float:fZ,
    Float:fRotX, Float:fRotY, Float:fRotZ)
{
    if (!IsValidPlayerObject(playerid, objectid)) return 1;

    switch (response)
    {
        case EDIT_RESPONSE_FINAL:
        {
            if (!IsPlayerInAnyVehicle(playerid))
            {
                DestroyPlayerObject(playerid, objectid);
                playerVehicleObject[playerid] = INVALID_OBJECT_ID;
                SendClientMessage(playerid, 0xFF0000FF, "[ERRO] Você saiu do veículo.");
                return 1;
            }

            new vehicleid = GetPlayerVehicleID(playerid);

            new Float:vehX, Float:vehY, Float:vehZ;
            GetVehiclePos(vehicleid, vehX, vehY, vehZ);

            new Float:offsetX = fX - vehX;
            new Float:offsetY = fY - vehY;
            new Float:offsetZ = fZ - vehZ;

            AttachPlayerObjectToVehicle(playerid, objectid, vehicleid, offsetX, offsetY, offsetZ, fRotX, fRotY, fRotZ);

            SendClientMessage(playerid, 0x00FF00FF, "[INFO] Objeto fixado ao veículo com sucesso.");
            return 1;
        }

        case EDIT_RESPONSE_CANCEL:
        {
            DestroyPlayerObject(playerid, objectid);
            playerVehicleObject[playerid] = INVALID_OBJECT_ID;
            SendClientMessage(playerid, 0xFF0000FF, "[INFO] Edição cancelada.");
            return 1;
        }
    }
    return 1;
}