Eu estou usando o novo compilador pawno 3.10.10 mas após usar esse compilador e compilar as minhas coisas são tudo compilado com sucesso porém aparece o famoso 171 warning como eu desativou isso pois isso e do próprio compilador e não do meu código
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
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;
}
Ola amigos não sou 100% perito em pawno mas sempre procuro ajuda quando não sei se algo com pessoas mais entendidas gostaria de saber porq quando eu coloco animações no meu servidor eu preciso muitas vezes usar 2 vezes o comando para poder funcionar queria saber o motivo disso pois se tudo e feito nativamente do próprio pawno vou dar um exemplo para entenderem melhor , quando eu uso o comando sentar e uso o id 1 nada acontece , mas se eu usar novamente aí a animação e feita , isso tem acontecido para qualquer tipo de animação que faço , alguém pode me dar uma dica ou uma ajuda de como resolver isso pois que eu me lembre no axwell world ano tinha esse problema ao usar a animação de primeira já funcionava então talvez esteja faltando algo que eu não sei , obg pela ajuda quem puder
Ola cria esse comando por conta de alguns APK não possuir e para quem está desenvolvendo gamemode é muito útil então simplesmente ele pega a coordenada onde você quer ou você usar o comando e simplesmente ele salva automaticamente em um arquivo chamado save.txt quando você pode pegar suas coordenadas e colocar dentro da sua game mode muito simples e fácil, como eu não posso o PC e faço tudo pelo Android então preciso facilitar minha vida para desenvolver a minhas game mode então tô compartilhando meu código para quem está passando pela mesma dificuldade por conta de limitações de apk
Código:
CMD:save(playerid, params[]){
new Float:x, Float:y, Float:z, Float:angle;
GetPlayerPos(playerid, x,y,z);
GetPlayerFacingAngle(playerid,angle);
new File:file = fopen("save.txt", io_append);
if (file){
new string[128];
format(string, sizeof(string), "%f,%f,%f,%f\r\n", x,y,z,angle);
fwrite(file, string);
fclose(file);
SendClientMessage(playerid, -1, "Posicao salva com sucesso!");
}
return 1;
}
Ola como eu tenho muita dificuldade para entender as coisas da câmera posições etc para colocar na Gamemode para se criar a seleção de skin , então criei esse código que me ajudou muito pois nesse código ao digitar o comando câmera ela pega exatamente a posição de tudo necessário para mostrar o jogador de forma mais simples e sem dor de cabeça então resumindo ele e muito útil para mostrar o player na seleção da escolha de skin pois ela mostra exatamente o jogador na posição de frente para a câmera e todas as coordenadas das câmeras necessária , ao usar o comando fiz com que criasse um arquivo chamado camera.txt onde automaticamente e criado ao usar o comando e toda as coordenadas de maneira perfeita e fácil fica la então e só pegar e jogar dentro da Gamemode as posições , tenho absoluta certeza q isso irá ajudar há muitos de maneira mais fácil e prática , odeio complicações
Código:
#include <a_samp>
#include <zcmd>
#define PI 3.141592653589793
CMD:camera(playerid, params[]){
new Float:x, Float:y, Float:z;
new Float:angle;
new Float:camX, Float:camY, Float:camZ;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, angle);
camX = x - (5.0 * floatsin(angle * (PI / 180.0)));
camY = y + (5.0 * floatcos(angle * (PI / 180.0)));
camZ = z + 2.0;
new File:fileHandle;
new buffer[256];
fileHandle = fopen("camera.txt", io_append);
if (fileHandle){
format(buffer, sizeof(buffer), "SetPlayerPos(playerid, %.4f,%.4f,%.4f);\r\n", x, y, z);
fwrite(fileHandle, buffer);
format(buffer, sizeof(buffer), "SetPlayerFacingAngle(playerid, %.4f);\r\n", angle);
fwrite(fileHandle, buffer);
format(buffer, sizeof(buffer), "SetPlayerCameraPos(playerid, %.4f,%.4f,%.4f);\r\n", camX, camY, camZ);
fwrite(fileHandle, buffer);
format(buffer, sizeof(buffer), "SetPlayerCameraLookAt(playerid, %.4f,%.4f,%.4f);\r\n\r\n", x, y, z);
fwrite(fileHandle, buffer);
fclose(fileHandle);
SendClientMessage(playerid, 0x00FF00FF, "Coordenadas salvas em scriptfiles/camera_coords.txt!");
}else{
SendClientMessage(playerid, 0xFF0000FF, "ERRO: Não foi possível abrir o arquivo camera_coords.txt para escrita.");
}
format(buffer, sizeof(buffer), "SetPlayerPos(playerid, %.4f,%.4f,%.4f);", x, y, z);
SendClientMessage(playerid, -1, buffer);
format(buffer, sizeof(buffer), "SetPlayerFacingAngle(playerid, %.4f);", angle);
SendClientMessage(playerid, -1, buffer);
format(buffer, sizeof(buffer), "SetPlayerCameraPos(playerid, %.4f,%.4f,%.4f);", camX, camY, camZ);
SendClientMessage(playerid, -1, buffer);
format(buffer, sizeof(buffer), "SetPlayerCameraLookAt(playerid, %.4f,%.4f,%.4f);", x, y, z);
SendClientMessage(playerid, -1, buffer);
return 1;
}
Inserido por: yPontes - 30/06/2025 19:52 - Fórum: Includes
- Sem Respostas
Olá, hoje me encontro com o nome Pontes, mas já fui encontrado como zHypezinXzl e Y-Hypezin. E hoje trago aqui uma include que seria uma junção de todas outras includes que já fiz, essa include tem como finalidade extender as funções do SAMP nos seguintes seguimentos:
SKIN
CAMERA 1° PESSOA
MATEMATICA
ARQUIVOS
e fazer a adição do seguimento:
CORTINA
Vou trazer algumas informações sobre cada um desses seguimentos, mas não darei muitos exemplos de uso pois deixarei esses exemplos para a WIKI no tópico do github.
ENTÃO VAMOS LÁ
1. SKIN as novas funções relacionadas as SKINS envolverão conseguir pegar o Nome, Gênero, Local, Modelo e Existência.Contando assim com as funções:
IsValidSkinID-verifica se a skin existe
GetSkinName -obtém o nome da skin
GetSkinModelName - obtém o nome do modelo da skin
GetSkinSex -obtém o gênero da skin
GetSkinSexName - obtém uma string com o nome do gênero
GetSkinLocal -obtém o local da skin
GetSkinLocalName- obtém uma string com o nome do local onde a skin aparece
Caso queira trocar os nomes do gênero use o seguinte código acima da definição da include:
OBS:Referente ao nome das skins algumas delas podem ter nomes com numeração por exemplo paramedic, paramedic2, paramedic3 e por ai vai. Isso ocorre pela skin não fazer parte de nenhuma missão do jogo, então seu nome não tem tanta importância para o jogo, como o CJ, Ryder, Big Smoke e outros.
2. CÂMERA 1° PESSOA
as novas funções relacionadas a Câmera em 1° pessoa envolverão conseguir Definir a câmera do jogador em 1° pessoa, Cancelar a câmera em 1° pessoa, Verificar se o jogador está em 1°pessoa e Editar a posição dessa câmera.Contando assim com as funções:
ResetCamPosFirstPersonPlayer -volta as configurações da câmera para o padrão.
SetCamPositionFirstPersonPlayer -configura a posição da câmera em 1° pessoa do jogador.
SetCamFirstPersonPlayer - define a câmera do jogador para 1° pessoa.
CancelCamFirstPersonPlayer - volta o jogador ao estado espectro, ou a 3° pessoa.
IsCamFirstPersonPlayer - verifica se o jogador está com câmera em 1° pessoa.
3. MATEMÁTICA
as novas funções relacionadas a Matemática envolverão conseguir Número aleatório de N° a N° sendo positivo ou negativo(randomex só que melhorado podendo conter números negativos), potência de um número elevado a outro, Raiz quadrada, Resto raiz quadrada, e raiz sobre potência.Contando assim com as funções:
MathRandomEx -escolhe um número aleatório de N° a N°. ex: (-15, 30) escolheu -2
MathPow - faz a potência de um número pelo seu expoente N°^N°. ex: (5, 2) = (5.5) = 25
MathSqRoot -pega a raiz potencial de um número. (500, 2) = (√500) = 22
MathSqRootRest -pega o resto da raiz potencial de um número. (500, 2) = (22^2) = (500 - 484) = (√16) = 4
4. ARQUIVO
as novas funções relacionadas a Arquivos envolverão conseguir Manipular arquivos e armazenar valores em keys(dini com ping melhorado e estável), além de funções uteis como "fclear" que limpa todo conteúdo do arquivo ou "fsetstring" que pode inserir textos dentro de um arquivo sem precisar de uma key muito útil para logs. Com essas informações vamos ver todas funções:
fcreate - cria uma arquivo
frename - renomeia um arquivo
fcopy- copia um arquivo
fbackup- faz um backup do arquivo
fclear- limpa o conteúdo do arquivo
fsetstring- adiciona uma string no arquivo
fgetstring- pega uma string no arquivo
fgetlines- pega o número de linhas que o arquivo contém
fkeyexist- verifica se um KEY existe
fkeyrename- renomeia uma KEY
fkeyremove- remove a KEY
fgetkeystringex- armazena o conteúdo de uma KEY em uma variável (format)
fsetkeystring- adiciona uma string no conteúdo de uma KEY
fsetkeyinteger- adiciona um número no conteúdo de uma KEY
fsetkeyfloating- adiciona uma float no conteúdo de uma KEY
fsetkeyboolean- adiciona um booleano no conteúdo de uma KEY
fgetkeystring- obtém a string do conteúdo de uma KEY
fgetkeyinteger- obtém o número do conteúdo de uma KEY
fgetkeyfloating- obtém a float do conteúdo de uma KEY
fgetkeyboolean - obtém o booleano do conteúdo de uma KEY
Caso necessite trocar o tamanho que o nome do arquivo pode conter ou quantos caracteres as funções podem trabalhar use o seguinte código acima da definição da include:
Código:
// Padrão: 64
#define EXT_MAX_FILE_NAME (100)
// Padrão: 256
#define EXT_MAX_FILE_CHARS (500)
#include <a_extensions>
OBS: Caso você for trabalhar com armazenamento de strings grandes possa ser que seja necessário usar o código acima pois as funções não trabalham com string maiores que os definidos
5. CORTINA
O novo seguimento Cortina adicionará uma capacidade de "apagar" a tela do jogar e "acender" novamente, esse sistema é muito similar quando o jogador morre no modo História, escurecendo aos poucos a tela do jogador e ascendendo novamente quando ele aparece no hospital. As funções que ele ira contar são: Mostrar a cortina ao jogador, Verificar se o jogador está com a cortina, Remover a cortina de forma forçada da tela do jogador, e callbacks de acionamento capazes de ajudar no código do desenvolvedor. Com essas informações vamos ver tudo que será proporcionado:
ShowPlayerCurtain -mostra a cortina para o jogador (a cortina é removida automaticamente após o fim da animação
HidePlayerCurtain -remove de forma forçada a cortina do jogador
IsCurtainExists -verifica se a cortina existe
CALLBACKS:
OnPlayerUpdateCurtain - acionada toda vez que a opacidade da cortina muda (de 0 a 255)
OnPlayerCurtainClosed -acionada quando a cortina estiver cobrindo totalmente a luz (tela escura)
COMENTÁRIOS:
Citar:yPontes: agradeço ao @pushiline por sua contribuição com a adaptação da include para OPEN.MP
OBS:quando é dito cortina não significa que ira aparecer uma cortina literal na tela do jogador, apenas a tela do jogador ficará escura como se a luz da janela não chegasse a pessoa.
IAE galera estou aqui ensinando como ligar seu GM em seu próprio celular , isso serve pra vc compilar suas GM ou testar , sem ser preciso usar internet , estou compartilhando esse método pois talvez , creio eu que irá servir para aqueles que não possuem PC ou até mesmo para quem tem , e um método mais rápido e mais prático de vc mexer na sua GM deixarei o link pra vcs assisti e ver como e simples e funcional serve para qualquer GM vcs também podem baixar jogos de PC e jogar como um PC , dependendo do modelo e marca da potência do seu celular
Talvez muitos aqui não conheça esse método , então compartilhando com vcs , isso serve até mesmo pra vcs jogarem em vários celulares usando o localhost:7777 https://youtu.be/0LPG_c7pbj8?si=xX12DkhG1Pjle-y1
Pra quem curti um servidor só de corridas aqui tá um GM simples porém muito divertido essa e do fundo do baú
Ela está em inglês e só traduzir
Recursos Principais:
* Inclui 29 corridas
* Suporte para corridas ilimitadas
* Grade de largada no estilo MTA
* Crie e salve suas próprias corridas dentro do jogo
* Sistema de recordes com os 5 melhores tempos
* Suporte para corridas aéreas
* Sistema de votação para escolha da corrida
Commandos:
/rescueme (return to grid)
/newcar (spawns a new car for you)
/buildmode on (enter buildmode, you will not be teleported to the next race ect.)
/buildmode off (exit buildmode and return to grid)
/top5 (top5 records for this race)
Admin commands
/track [racename] (forces a track change to the map)
/pause (pauses the counting down to the next race)
/resume (resumes counting down)
/addtorotation [racename] (adds the named road to the rotation and voting)
Race Making tutorial
1) type '/buildmode on' into chat
2) Use your up+down and sprint keys to select options for WorldTime,Weather,TrackTime,Car type from the menu
3) Set the name of the race using '/set [racename]'
4) Get to the start of your race (teleporting is turned on here so you can teleport using the map, type /newcar if you lose your car)
5)Drive to a good position for the first person to start in (Grid Position: 1st) And press your FIRE button (mouse1) to save the location.
6)Drive to a good position for the second person to start in (Grid Position: 2nd) And press your FIRE button (mouse1) to save the location.
7)Drive around your planned race using FIRE (mouse1) to set checkpoints along the way
Once you have saved the last checkpoint (Finish line) type '/saverace'
9)If you are an admin type '/track [racename]' to load up your finished race.
10) if you are an admin and want your race to show up in rotation type '/addtorotation [racename]'
Planned Future Features
-Allow non-admins to add their races to the votes
-Some limiting of vehicle types to stick below the 70 type limit
-More vehicle options in creating races
-Add the singleplayer races
-Support for interior races
-A more advanced score tracking system
-Tools to edit finished races
-Maybe a buy menu for mods+NOS
Notes:
-Don't go too crazy vehicle types, there is no limiting to stop you hitting 70 types.
-If for some reason you want the mode to change after x amount of races, edit #define RACES_TILL_MODECHANGE 0
-The track rotation is kept in racenames.txt inside your scriptfiles folder
Credits
Coding:
Kynen: Highscore() code he made for me
******: Used GetXYInFrontOfPlayer() as base of Grid function
Simon: Used ConvertToSafeInput() as base for CheckSafeInput()
Dabombber: TimeConvert()
Yagu: Referenced his race filterscript early on
new PlayerBar: velocimetro_bar[MAX_PLAYERS];
new PlayerText: velocimetro_veiculo_nome[MAX_PLAYERS];
new PlayerText: velocimetro_fundo_box[MAX_PLAYERS];
new PlayerText: velocimetro_kmh[MAX_PLAYERS];
new PlayerText: velocimetro_lataria[MAX_PLAYERS];
new PlayerText: velocimetro_box_kmh[MAX_PLAYERS];
new PlayerText: velocimetro_gas_quant[MAX_PLAYERS];
new PlayerText: velocimetro_bar_textd[MAX_PLAYERS];