anexa um objeto ao jogador - André Santos - 01/12/2024
fiz esse comando que ao usar ele procura a lista de objetos que fiz na scriptfiles objects.txt entao o problema e que nao esta attachando o objeto ao jogador acho q fiz algo errado e nao sei resolver a outra coisa e que ao editar o objeto coloco na coordenada em que quero mas nao salva o objeto fica como se tivesse um ponto fixo acho que deve ser o problema aqui nisso if (response == EDIT_RESPONSE_FINAL)
{
// Atualiza a posição e rotação do objeto após edição
AttachObjectToPlayer(playerid, objetos[playerid], fX, fY, fZ, fRotX, fRotY, fRotZ); nao sei como fazer para o objeto ser salvo no corpo do jogador na maneira em que eu editei e usei o if (response == EDIT_RESPONSE_FINAL) talvez fiz algo errado e nao sei onde resolver
Código: #include <a_samp>
#include <mSelection>
#include <zcmd>
new objectList = mS_INVALID_LISTID; // ID da lista de seleção de objetos
new objetos[MAX_PLAYERS]; // Objeto temporário exibido para cada jogador
public OnFilterScriptInit()
{
// Carrega a lista de objetos a partir de um arquivo "objects.txt"
objectList = LoadModelSelectionMenu("objects.txt");
return 1;
}
CMD:objetos(playerid, params[])
{
// Mostra o menu para selecionar um objeto
ShowModelSelectionMenu(playerid, objectList, "Selecionar Objeto");
return 1;
}
public OnPlayerModelSelection(playerid, response, listid, modelid)
{
if (response)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
// Cria o objeto e salva a referência no array
objetos[playerid] = CreateObject(modelid, x, y, z, 0.0, 0.0, 0.0);
// Edita o objeto (isso pode ser opcional dependendo do que você deseja fazer)
EditObject(playerid, objetos[playerid]);
// Anexa o objeto ao jogador com a rotação inicial
AttachObjectToPlayer(playerid, objetos[playerid], x, y, z, 0.0, 0.0, 0.0);
}
return 1;
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
if (response == EDIT_RESPONSE_FINAL)
{
// Atualiza a posição e rotação do objeto após edição
AttachObjectToPlayer(playerid, objetos[playerid], fX, fY, fZ, fRotX, fRotY, fRotZ);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
// Remove o objeto temporário do jogador ao sair
if (IsValidObject(objetos[playerid]))
{
DestroyObject(objetos[playerid]);
}
return 1;
}
RE: anexa um objeto ao jogador - strelo - 02/12/2024
Código PHP: #include <a_samp> #include <mSelection> #include <zcmd>
new objectList = mS_INVALID_LISTID; // ID da lista de seleção de objetos new objetos[MAX_PLAYERS]; // Objeto temporário exibido para cada jogador
// Offsets para objetos de jogadores new Float:objectOffsets[MAX_PLAYERS][6]; // Armazena offsets (X, Y, Z, RotX, RotY, RotZ)
public OnFilterScriptInit() { // Carrega a lista de objetos a partir de um arquivo "objects.txt" objectList = LoadModelSelectionMenu("objects.txt"); return 1; }
CMD:objetos(playerid, params[]) { // Mostra o menu para selecionar um objeto ShowModelSelectionMenu(playerid, objectList, "Selecionar Objeto"); return 1; }
public OnPlayerModelSelection(playerid, response, listid, modelid) { if (response) { // Obtém a posição do jogador new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z);
// Cria o objeto na posição do jogador objetos[playerid] = CreateObject(modelid, x, y, z, 0.0, 0.0, 0.0);
// Inicializa os offsets para o objeto objectOffsets[playerid][0] = 0.0; // Offset X objectOffsets[playerid][1] = 0.0; // Offset Y objectOffsets[playerid][2] = 0.5; // Offset Z (altura inicial padrão) objectOffsets[playerid][3] = 0.0; // Rotação X objectOffsets[playerid][4] = 0.0; // Rotação Y objectOffsets[playerid][5] = 0.0; // Rotação Z
// Edita o objeto para o jogador ajustá-lo EditObject(playerid, objetos[playerid]);
// Anexa o objeto ao jogador usando os offsets iniciais AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]); } return 1; }
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) { if (response == EDIT_RESPONSE_FINAL) { // Obtém a posição do jogador new Float:playerX, Float:playerY, Float:playerZ; GetPlayerPos(playerid, playerX, playerY, playerZ);
// Calcula os novos offsets baseados na posição do jogador objectOffsets[playerid][0] = fX - playerX; // Offset X objectOffsets[playerid][1] = fY - playerY; // Offset Y objectOffsets[playerid][2] = fZ - playerZ; // Offset Z objectOffsets[playerid][3] = fRotX; // Rotação X objectOffsets[playerid][4] = fRotY; // Rotação Y objectOffsets[playerid][5] = fRotZ; // Rotação Z
// Reanexa o objeto ao jogador com os novos offsets AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]); } return 1; }
public OnPlayerDisconnect(playerid, reason) { // Remove o objeto associado ao jogador ao desconectar if (IsValidObject(objetos[playerid])) { DestroyObject(objetos[playerid]); objetos[playerid] = INVALID_OBJECT_ID; // Reseta o ID para evitar problemas futuros } return 1; }
RE: anexa um objeto ao jogador - André Santos - 02/12/2024
(02/12/2024 18:47)strelo Escreveu: Código PHP: #include <a_samp> #include <mSelection> #include <zcmd>
new objectList = mS_INVALID_LISTID; // ID da lista de seleção de objetos new objetos[MAX_PLAYERS]; // Objeto temporário exibido para cada jogador
// Offsets para objetos de jogadores new Float:objectOffsets[MAX_PLAYERS][6]; // Armazena offsets (X, Y, Z, RotX, RotY, RotZ)
public OnFilterScriptInit() { // Carrega a lista de objetos a partir de um arquivo "objects.txt" objectList = LoadModelSelectionMenu("objects.txt"); return 1; }
CMD:objetos(playerid, params[]) { // Mostra o menu para selecionar um objeto ShowModelSelectionMenu(playerid, objectList, "Selecionar Objeto"); return 1; }
public OnPlayerModelSelection(playerid, response, listid, modelid) { if (response) { // Obtém a posição do jogador new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z);
// Cria o objeto na posição do jogador objetos[playerid] = CreateObject(modelid, x, y, z, 0.0, 0.0, 0.0);
// Inicializa os offsets para o objeto objectOffsets[playerid][0] = 0.0; // Offset X objectOffsets[playerid][1] = 0.0; // Offset Y objectOffsets[playerid][2] = 0.5; // Offset Z (altura inicial padrão) objectOffsets[playerid][3] = 0.0; // Rotação X objectOffsets[playerid][4] = 0.0; // Rotação Y objectOffsets[playerid][5] = 0.0; // Rotação Z
// Edita o objeto para o jogador ajustá-lo EditObject(playerid, objetos[playerid]);
// Anexa o objeto ao jogador usando os offsets iniciais AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]); } return 1; }
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) { if (response == EDIT_RESPONSE_FINAL) { // Obtém a posição do jogador new Float:playerX, Float:playerY, Float:playerZ; GetPlayerPos(playerid, playerX, playerY, playerZ);
// Calcula os novos offsets baseados na posição do jogador objectOffsets[playerid][0] = fX - playerX; // Offset X objectOffsets[playerid][1] = fY - playerY; // Offset Y objectOffsets[playerid][2] = fZ - playerZ; // Offset Z objectOffsets[playerid][3] = fRotX; // Rotação X objectOffsets[playerid][4] = fRotY; // Rotação Y objectOffsets[playerid][5] = fRotZ; // Rotação Z
// Reanexa o objeto ao jogador com os novos offsets AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]); } return 1; }
public OnPlayerDisconnect(playerid, reason) { // Remove o objeto associado ao jogador ao desconectar if (IsValidObject(objetos[playerid])) { DestroyObject(objetos[playerid]); objetos[playerid] = INVALID_OBJECT_ID; // Reseta o ID para evitar problemas futuros } return 1; }
obg pela logica ta tudo correto compilando sem erros nenhum o unico problma ainda e que nao esta attachando o objeto no plaayer depois que coloco o objeto e tals posiciono no player tudo certinho mas na hora que finalizo o objeto fica no lugar correto mas ao andar o objeto continua la na cordenada correta que coloquei e o player pode andar ou mover sem o objeto ficar attached nele resumindo so falta o objeto grudar no player so isso mais nada tem algo incorreto no codigo que eu cometir?
RE: anexa um objeto ao jogador - strelo - 02/12/2024
Código PHP: #include <a_samp> #include <mSelection> #include <zcmd>
new objectList = mS_INVALID_LISTID; // ID da lista de seleção de objetos new objetos[MAX_PLAYERS]; // Objeto temporário exibido para cada jogador
// Offsets para objetos de jogadores new Float:objectOffsets[MAX_PLAYERS][6]; // Armazena offsets (X, Y, Z, RotX, RotY, RotZ)
public OnFilterScriptInit() { // Carrega a lista de objetos a partir de um arquivo "objects.txt" objectList = LoadModelSelectionMenu("objects.txt"); return 1; }
CMD:objetos(playerid, params[]) { // Mostra o menu para selecionar um objeto ShowModelSelectionMenu(playerid, objectList, "Selecionar Objeto"); return 1; }
public OnPlayerModelSelection(playerid, response, listid, modelid) { if (response) { // Obtém a posição do jogador new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z);
// Cria o objeto na posição do jogador objetos[playerid] = CreateObject(modelid, x, y, z, 0.0, 0.0, 0.0);
if (!IsValidObject(objetos[playerid])) { SendClientMessage(playerid, -1, "Erro: Objeto não foi criado!"); return 0; }
// Inicializa os offsets para o objeto objectOffsets[playerid][0] = 0.0; // Offset X objectOffsets[playerid][1] = 0.0; // Offset Y objectOffsets[playerid][2] = 0.5; // Offset Z (altura inicial padrão) objectOffsets[playerid][3] = 0.0; // Rotação X objectOffsets[playerid][4] = 0.0; // Rotação Y objectOffsets[playerid][5] = 0.0; // Rotação Z
// Anexa o objeto ao jogador usando os offsets iniciais AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]);
// Edita o objeto para o jogador ajustá-lo EditObject(playerid, objetos[playerid]); } return 1; }
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) { if (response == EDIT_RESPONSE_FINAL) { if (!IsValidObject(objectid)) { SendClientMessage(playerid, -1, "Erro: Objeto inválido!"); return 0; }
// Obtém a posição do jogador new Float:playerX, Float:playerY, Float:playerZ; GetPlayerPos(playerid, playerX, playerY, playerZ);
// Calcula os novos offsets baseados na posição do jogador objectOffsets[playerid][0] = fX - playerX; // Offset X objectOffsets[playerid][1] = fY - playerY; // Offset Y objectOffsets[playerid][2] = fZ - playerZ; // Offset Z objectOffsets[playerid][3] = fRotX; // Rotação X objectOffsets[playerid][4] = fRotY; // Rotação Y objectOffsets[playerid][5] = fRotZ; // Rotação Z
// Reanexa o objeto ao jogador com os novos offsets AttachObjectToPlayer(playerid, objetos[playerid], objectOffsets[playerid][0], objectOffsets[playerid][1], objectOffsets[playerid][2], objectOffsets[playerid][3], objectOffsets[playerid][4], objectOffsets[playerid][5]); } else if (response == EDIT_RESPONSE_CANCEL) { SendClientMessage(playerid, -1, "Edição do objeto foi cancelada."); } return 1; }
public OnPlayerDisconnect(playerid, reason) { // Remove o objeto associado ao jogador ao desconectar if (IsValidObject(objetos[playerid])) { DestroyObject(objetos[playerid]); objetos[playerid] = INVALID_OBJECT_ID; // Reseta o ID para evitar problemas futuros } return 1; }
|