Bom eu estou passando por esse problema a muito tempo e tudo que fiz nada até agora resolveu. O bug é o seguinte... Eu ligo a GM na vps e depois de um tempão os mappas simplesmente some. Já tentei fazer de tudo. Trocar include/plugin streamer, tirei crashdetect(dizem que atrapalha o carregamento dos mappas), tirei todos os mappas também e deixei só um para ver se era algum mappa dando conflito e também o mapa que deixei sumiu depois de um tempo, revirei todos os OnGameModeInt incluindo dos módulos e não vi nada que possa atrapalhar algo do tipo.
Não sei mais o que fazer, o que vocês pode me aconselhar a fazer?
Inicialmente esse sistema foi criado para simplificar os clicks nas textdraws evitando o uso do ALS e HOOK com um objetivo direto e adicionar interações. Porem acabou que essa include nos testes que eu fiz, melhorou muito a resposta nos cliques ficando muito mais fluido e rápido. Inclusive testei com um servidor quase cheio e deu o mesmo resultado como se eu tivesse solo, os cliques responderam instantaneamente praticamente.
Vou deixar abaixo alguns exemplos de uso porem para mais detalhes ou reportes de problemas acessem o repositório no github.
Código de textdraw abaixo é apenas para ilustrações do funcionamento do SetClick
Padrão
Código:
stock CreateTextdraw(playerid) {
// A simple example of textdraw creation, just to illustrate SetClick.
new PlayerText:id = CreatePlayerTextDraw(playerid, 0.0, 0.0, "LD_SPAC:white") // or box, whatever
PlayerTextDrawSetSelectable(playerid, id, true);
So tinha eu no servidor On-line e isso apareceu
[debug]:
Citar:[debug] Parameter count corrections:
[debug]
[debug] The 1st mangled arguments (e.g. `<1073741823 arguments>`) below should read `<2 arguments>`
[debug] Parameter count loop detected.
[debug]
[debug] Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at index 20200 in array of size 300
[debug] AMX backtrace:
[debug] #0 0002c964 in _@yHOnPlayerDisconnect@04 (playerid=20200, reason=0) at ..\Dependencias\Global\Login.inc:94
[debug] #1 0001bbe8 in public ScriptInit_OnPlayerDisconnect (20200, 0) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\y_cgen\y_cgen_impl.inc:157
[debug] #2 0000b758 in public Android_OnPlayerDisconnect (playerid=20200, reason=0) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\../y_utils/y_utils_ip.inc:115
[debug] #3 00009810 in public Iter_OnPlayerDisconnect (playerid=20200) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\..\..\YSI_Players\y_android\y_android_entry.inc:148
Com mais de 10 anos de experiência no SA:MP, já entrei em diversos projetos, fiz centenas de trabalhos e hoje anuncio este servidor que foi projetado do absoluto zero em 4 meses de desenvolvimento e estamos na reta final.
A maioria dos projetos anunciados não vão pra frente. Isso é um fato e acompanhamos isto desde o Fórum SAMP oficial.
Apenas quem sabe o quão difícil é tirar um projeto do papel, sabe o trabalho que temos até lançá-lo.
Ideia de projeto:
O BERP surgiu a partir de dois ex-jogadores de um grande servidor, que me contrataram para desenvolver um servidor com uma proposta parecida com a do servidor que jogavam, pois gostavam da gameplay, porém não tanto da quantia de regras que o servidor possuia e como cada errinho podia custar suas contas.
Eu nunca joguei neste servidor em particular, mas já ouvi coisas parecidas de nossos jogadores.
Desenvolvimento:
Apesar de lançado e aberto ao público, o servidor está em constante desenvolvimento e para que nossos membros possam acompanhar de perto, temos o canal "changelog" onde todos podem ver o que foi alterado no servidor.
Há também o canal de sugestões onde discutimos a viabilidade de aplicar o que foi sugerido.
E também há a área de Previews, que foi recentemente adicionada para mostrar ao público mídia em vídeo ou imagem de forma antecipada sobre futuros updates que estão ou já foram desenvolvidos.
Recursos:
Whitelist (via Discord)
Anti-cheat com aproximadamente 30 mecanismos de detecções
O projeto tem como objetivo fornecer instaladores seguros e confiáveis para diferentes versões do mod SA:MP. Cada instalador é desenvolvido em C# usando Windows Forms, oferecendo uma interface moderna e amigável com suporte a múltiplos idiomas e uma janela com as redes sociais.
Eae pessoal estou usando o sistema do rootcause e está ocorrendo um erro que quando solta a mercadoria em cima do checkpoint fala que 'O pacote não caiu na área marcada'. tentei aumentar a distancia e nada.
public OnPlayerExitVehicle(playerid, vehicleid)
{
if(InDelivery[playerid])
{
SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY FAILED: {FFFFFF}You left your plane.");
ResetDelivery(playerid);
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsATraffickingPlane(GetVehicleModel(GetPlayerVehicleID(playerid))) && PRESSED(KEY_SUBMISSION))
{
if(!InDelivery[playerid]) {
if(GetPVarInt(playerid, "DeliveryCooldown") > tickcount()) return SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY: {FFFFFF}Please wait to start another delivery mission again.");
new id = random(sizeof(DropLocations)), string[144];
TraffickingObjects[playerid][OBJECT_ZONE] = CreatePlayerObject(playerid, 19946, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 0.0, 0.0, 0.0, 1200.0);
SetPlayerMapIcon(playerid, MAPICON_INDEX, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 24, 0, MAPICON_GLOBAL);
SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You've started a delivery mission.");
format(string, sizeof(string), "DELIVERY: {FFFFFF}Drop the package in the marked area at {3498DB}%s {FFFFFF}and you'll get your money.", DropLocations[id][dropLocation]);
SendClientMessage(playerid, 0x2ECC71FF, string);
SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You can drop a crate using H/CAPS LOCK.");
SendClientMessage(playerid, 0x2ECC71FF, "DELIVERY: {FFFFFF}You can cancel the delivery mission using 2 or by leaving your plane.");
InDelivery[playerid] = true;
PackageCount[playerid] = 5;
}else{
SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY CANCELLED: {FFFFFF}You've cancelled the delivery mission.");
ResetDelivery(playerid);
}
}
if(InDelivery[playerid] && PRESSED(KEY_CROUCH))
{
if(IsValidObject(TraffickingObjects[playerid][OBJECT_PACKAGE])) return 1;
if(PackageCount[playerid] == 0) return SendClientMessage(playerid, 0xE74C3CFF, "DELIVERY: {FFFFFF}You don't have any more packages.");
new Float: x, Float: y, Float: z, Float: z2;
GetPlayerPos(playerid, x, y, z);
GetPointZPos(x, y, z2);
TraffickingObjects[playerid][OBJECT_PACKAGE] = CreateObject(PACKAGE_MODEL, x, y, z-1.5, 0.0, 0.0, 0.0);
MoveObject(TraffickingObjects[playerid][OBJECT_PACKAGE], x, y, z2, 20.0);
PackageCount[playerid]--;
}
return 1;
}
public OnObjectMoved(objectid)
{
if(GetObjectModel(objectid) == PACKAGE_MODEL)
{
new owner = INVALID_PLAYER_ID;
for(new i, p = GetPlayerPoolSize(); i <= p; ++i)
{
if(objectid == TraffickingObjects[i][OBJECT_PACKAGE])
{
owner = i;
break;
}
}
new id = random(sizeof(DropLocations)), string[144];
format(string, sizeof(string), "DELIVERY: {FFFFFF}You've delivered a package and earned {2ECC71}$%d{FFFFFF}.", money);
SendClientMessage(owner, 0x2ECC71FF, string);
DestroyPlayerObject(owner, TraffickingObjects[owner][OBJECT_ZONE]);
TraffickingObjects[owner][OBJECT_ZONE] = CreatePlayerObject(owner, 19946, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 0.0, 0.0, 0.0, 1200.0);
SetPlayerMapIcon(owner, 69, DropLocations[id][dropX], DropLocations[id][dropY], DropLocations[id][dropZ], 24, 0, MAPICON_GLOBAL);
format(string, sizeof(string), "DELIVERY: {FFFFFF}Drop the package in the marked area at {3498DB}%s{FFFFFF}.", DropLocations[id][dropLocation]);
SendClientMessage(owner, 0x2ECC71FF, string);
format(string, sizeof(string), "DELIVERY: {FFFFFF}Packages left: {3498DB}%d{FFFFFF}.", PackageCount[owner]);
SendClientMessage(owner, 0x2ECC71FF, string);
}else{
SendClientMessage(owner, 0xE74C3CFF, "DELIVERY: {FFFFFF}Package didn't land in the marked area, better luck next time.");
}
DestroyObject(TraffickingObjects[owner][OBJECT_PACKAGE]);
TraffickingObjects[owner][OBJECT_PACKAGE] = INVALID_OBJECT_ID;
if(PackageCount[owner] == 0)
{
SendClientMessage(owner, 0x2ECC71FF, "DELIVERY: {FFFFFF}You're out of packages.");
ResetDelivery(owner);
}
}
qual a funcao do samp de quando colocamos um objeto em um player o objeto gruda e se move junto com o player ?
porq eu fiz um codigo e ao anex o objeto em que o player escolhe o objeto gruda no player mas o player mesmo se movendo o objeto fica grudado nele fixo sem se mover eu usei o attachobjecttoplayer se tem outros eu nao conheco me ajudem nao e a questao do codigo e sim anexar o objeto ao jogador e o objeto grudar no player e se mover conforme o player se mexe e nao do jeito que fiz que ao player se mover o objeto gruda e fixa fixo sem movimento desculpe sou horrivel explicando esse foi o codigo que ate um script daqui me ajudou
eu so mudei uma coisa foi isso AttachObjectToPlayer(playerid, objetos[playerid] assim o objeto nao tava grudando entao inverti para assim AttachObjectToPlayer(objetos[playerid],playerid ai o objeto agora gruda mas nao acompanha o movimento do player ele so acompanha o player ficando fixo sem movimento , mais uma vez obg pela ajuda e desculpa qualqur aborrecimento que eu possa esta causando
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)
{
// 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(objetos[playerid],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, "edicao 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;
}
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
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;
}