Ola a todos, venho apresentar a vocês o meu projeto, Strey Life Multiplayer é um servidor Free Roam/RP com conceitos do single player.
1- INICIO CRIAÇÃO DO SERVIDOR
Bem a ideia principal desse servidor iria ser só um rp, mas um roleplay ele seria só mais um no meio de vários, então decidi apostar em um free roam, mas diferente dos Free roam que conheci que só tem mini games, esse tera um pouco de roleplay, nesse meio do roleplay você poderá trabalhar, comprar sua casa e fazer o seu dia a dia em nossa cidade, mas ele não se limita a só isso, tera muito mais
2-SINGLE PLAYER FEATURES ?
Eu pretendo trazer características do gta single player para o multiplayer como missões, sistema de territórios, corridas, desafios de dança com low rider e dança e muito mais, coisas que realmente lembra o GTA single player, mas você esta jogando com um monte de pessoas
3- DESENVOLVIMENTO DO SERVIDOR
O Servidor está em seu estado "Pre - Alpha" Devido o que eu quero trazer o servidor não esta nem 10% pronto, eu também trabalho sozinho no meu tempo livre assim "atrasando" o projeto, mas com tempo ele está indo, os sistemas que temos já estão funcionais
4- IDEIAS FUTURAS
Não quero ficar limitado só ao gta san andreas, pretendo trazer mecanicas de outros gta como, GTA 3, GTA VC E GTA 4/5, Esses GTA trouxeram ideias ótimas, e acredito que implementar elas no samp ficariam incríveis
5- SISTEMAS DO SERVIDOR
Irei mostrar agora um pouco do servidor e seus sistemas
SISTEMA DE MISSÕES COM NPC
Você pode pegar missões com os protagonistas do modo historia, cada um deles tera 7 missões diferentes para realizar, exemplo Sweet Mate os traficantes do bairro, Ryder Roubar armas/equipamentos para groove
COMPRAR COM NPCS
[b]Aqui você vai poder comprar armas com npcs, eles tera uma pequena animação pegando a arma e colocando na mesa, cada loja de arma tera seu interior correspondente a sua cidade[/b]
ASSALTAR LOJINHAS
[b][b]Além de apenas comprar itens Com NPC No nosso servidor você poderá assaltar eles, basta apenas apontar uma arma para ele
[/b][/b]
GTA IV PHONE
[b]Nesse sistema de celular você poderá utilizar ele para diversas coisas, ele não se limita a só mais um textdraw simples, com ele você pode ligar para os "protagonista" e pedir alguma missão ou trabalho para eles para ganhar dinheiro de uma forma rápida
[/b]
GTA V GPS
[b]Esse é o nosso sistema de GPS, ele ira criar uma linha em seu mapa de acordo a cor do checkpoint marcado e também ira mostrar quantos mi falta até você chegar ao seu destino[/b]
Nota: Esse projeto é inspirado e diversos servidores mas em principal seria o (NEWUS ROLEPLAY) criado pelo "[b]guikommander2" [/b]que infelizmente não foi continuado
Gm Base feita por: RosaScripter
Agradecimentos total a esse forum que me ajudou e tirou duvidas com diversas coisas
como eu faco aqui para quando um player ja for registrado e ele logar ele ja passa pela public onplayerrequestclass ai ele selecionar a skin e quando ele sair do servidor ele logar novamente nao precisar passar pela selecao de skin novamente ja logar com a skin que ele escolheu antes prq toda vez que logo eu passo pela callback onplayerrequestclass queria que o jogador so precissase passar uma unica vez me ajudem nisso ou me diga como faco
Código:
#include a_samp
#include dini
#define DIALOG_REGISTER 0
#define DIALOG_LOGIN 1
main(){}
new Logged[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME], file[200];
GetPlayerName(playerid, name, sizeof(name));
format(file, sizeof(file), "\\users\\%s.ini", name);
Logged[playerid] = 0;
if (!dini_Exists(file))
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar","");
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])//dialogresponse
{
if(response == 1) // Se o jogador clicou em "Registrar" ou "Logar"
{
if (strlen(inputtext) == 0)
{
//SendClientMessage(playerid, vermelho, "» voce precisa inserir uma senha!");
if (dialogid == DIALOG_REGISTER)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
}
else if (dialogid == DIALOG_LOGIN)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar","");
}
return 1;
}
new name[MAX_PLAYER_NAME], file[200];
GetPlayerName(playerid, name, sizeof(name));
format(file, sizeof(file), "\\users\\%s.ini", name);
if (dialogid == DIALOG_REGISTER) // Registro
{
if (strlen(inputtext) < 4) // Verifica se a senha tem no mínimo 4 caracteres
{
SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} a senha deve ter no minimo 4 caracteres.");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Autorizacao", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar", "");
return 1;
}
dini_Create(file);
dini_IntSet(file, "password", adler32_hash(inputtext)); // Armazena a senha com hash
dini_IntSet(file, "cash", 0);
dini_IntSet(file, "score", 0);
SendClientMessage(playerid, -1, "{ff0000}»{ffffff} voce se registrou com sucesso");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Por favor, insira sua senha:", "Logar", "");
return 1;
}
else if (dialogid == DIALOG_LOGIN) // Login
{
if (!dini_Exists(file)) // Verifica se o arquivo do jogador existe
{
SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} o arquivo de usuario nao foi encontrado. Por favor, registre-se.");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "{ff0000}»{ffffff} Por favor, insira uma senha para se registrar:", "Registrar","");
return 1;
}
if (adler32_hash(inputtext) != dini_Int(file, "password")) // Verifica se a senha esta correta
{
SendClientMessage(playerid, 0x00ffffaa, "{ff0000}»{ffffff} senha incorreta! Tente novamente.");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "{ff0000}»{ffffff} Senha incorreta! Por favor, tente novamente:", "Logar","");
return 1;
}
Logged[playerid] = 1;
GivePlayerMoney(playerid, dini_Int(file, "cash"));
SetPlayerScore(playerid, dini_Int(file, "score"));
SendClientMessage(playerid, -1, "{ff0000}»{ffffff} voce esta logado com sucesso!");
return 1;
}
}
return 1;
}
adler32_hash(buf[])
{
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}
new playerinminigame[MAX_PLAYERS];
new bloodring[15],derbyon,derbyplaying,playercarid[MAX_PLAYERS],playerinderby[MAX_PLAYERS],derbyrank,reward,bloodringfull[15],playerinbloodring[MAX_PLAYERS];
new dtimer;
//comandos do minigame derby
CMD:derby(playerid)
{
if(derbyplaying == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "O derby já começou");
if(playerinminigame[playerid] == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "Voce já esta em um minigame");
new pname[256];
GetPlayerName(playerid, pname, 256);
new string[256];
dtimer = SetTimer("StartDerby", 60000, 0);
format(string, sizeof(string), "%s iniciou um derby, você tem um minuto para escrever /derby e juntar-se", pname);
SendClientMessageToAll(0x33AA33AA, string);
Eu tenho um sistema simples de registro e login todas vez que entro no servidor depois de logado eu tenho que escolher as eskin disponíveis que fica na public onplayerrequestclass , até aí tudo bem o q eu queria saber e como eu faço para quando o player logar ele possa escolher na public onplayerrequestclass as skins e quando ele entrar novamente no servidor já que está logado ele spawnar com a última skin que ele escolheu e não aparecer mais as escolhas de skin para ele na public onplayerrequestclass já tentei de tudo e não dá certo se não for pedir muito que seja salvo em dini , pode ser só um exemplo pra mim adaptar na minha Gamemode pois estou criando uma Gamemode igual ao axwell World aqual sou fan e falta isso pois o resto já fiz
Olá,
estou disponibilizando o código-fonte de um bot que desenvolvi para o Discord, voltado a integrar informações de servidores SA:MP no Discord de sua comunidade. Este projeto é simples, mas funcional, e oferece recursos básicos para monitorar as estatísticas de um servidor SA:MP em tempo real.
O que o bot faz?
O bot coleta dados do seu servidor SA:MP e exibe essas informações automaticamente em um canal do Discord que você configura diretamente no código. Ele foi projetado para manter os dados atualizados sem poluir o canal, substituindo sempre a mensagem anterior.
Estatísticas exibidas:
Nome do servidor (hostname).
Quantidade de jogadores online e o limite máximo de jogadores.
Gamemode em execução no servidor.
Lista de administradores conectados (opcional, com tags personalizáveis diretamente no código).
Além disso, ele conta com um sistema de resposta automática à palavra-chave "IP", enviando uma mensagem com o endereço IP do servidor SA:MP para quem mencioná-lo no chat.
Funcionalidades principais:
Envio de informações em um canal específico:
O bot publica automaticamente as estatísticas do servidor em um único canal do Discord.Para configurar o canal de destino, é necessário editar o arquivo config.py
Atualização contínua e organizada:
A cada intervalo configurado, o bot edita a mensagem anterior com os dados mais recentes do servidor, garantindo que o canal não fique sobrecarregado com várias mensagens desnecessárias.
Respostas automáticas à palavra-chave "IP":
Caso alguém envie "IP" no chat, o bot responderá automaticamente com o endereço configurado no arquivo de configuração.
Comandos interativos: $$Players - Exibe todos os jogadores conectados ao servidor. $$Online [Nome] - Busca e verifica se um jogador específico está online.
OBS: Você pode configurar o prefixo no arquivo Config.py
Área de Download:
O Download do código fonte juntamente com um Guia para instalar as dependências está presente no meu GITHUB. Link: BOT-DC
Este é o meu primeiro projeto que estou disponibilizando para que qualquer pessoa possa utilizá-lo ou adaptá-lo conforme as suas necessidades. Se tiver dúvidas ou sugestões, ficarei à disposição para ajudar e receber feedbacks.
ola pessoal alguem sabe me dizer oq fiz de errado pois quando eu passo no primeiro checkpoint ele vai pro meio do mapa bem no meio do mapa do gta sa e nao segue as floats que coloquei alguem poderia me dizer pois ja estou quebando a cabeca e nao conesgui resolver
galera porq quando eu uso o comando kart eu spawno no nada e o player nao entra dentro do veiculo para iniciar o evento? outra coisa porq quando passo do primeiro check point o segundo checkpoint nao segue a ordem que coloquei no float ele vai para outro lugar nada aver me ajude nesse script estou sem saber oq fazer
new playerinminigame[MAX_PLAYERS];
new karts[15],kartfull[15],karton,kartplaying,playerinkartrace[MAX_PLAYERS],kartrank,playerinkart[MAX_PLAYERS],currentcheckpoint[MAX_PLAYERS],krtfirst,playercarid[MAX_PLAYERS],reward;
forward RewardCalc(playerid,min,max);
new startvar[8];
new krttimer;
public SpawnKarts()
{
for (new i = 0; i < 15; i++)
{
karts[i] = CreateVehicle(571, kartspawns[i][0], kartspawns[i][1], kartspawns[i][2], kartspawns[i][3], -1, -1, -1);
LinkVehicleToInterior(karts[i], 15);
SetVehicleVirtualWorld(karts[i], 1);
kartfull[i] = 0;
}
return 1;
}
public DestroyKarts()
{
for (new i = 0; i < 15; i++)
{
DestroyVehicle(karts[i]);
kartfull[i] = 0;
}
}
public RespawnKarts()
{
for (new i = 0; i < 15; i++)
{
SetVehicleToRespawn(karts[i]);
SetVehicleVirtualWorld(karts[i], 1);
kartfull[i] = 0;
}
}
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
SetTimer("load", 2000, 0);
return 1;
}
public OnFilterScriptExit()
{
DestroyKarts();
return 1;
}
#endif
public OnGameModeInit()
{
SetTimer("load", 2000, 0);
return 1;
}
public StartKart()
{
if(startvar[6] == 1) {
if( kartrank <= 1 )//menor q 1
{
SendClientMessageToAll(0x33AA33AA, "corrida de Kart cancelado. Motivo: Jogadores Insuficientes (Minimo = 2)");
kartplaying = 0;
kartrank = 0;
karton = 0;
startvar[6] = 0;
RespawnKarts();
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
playerinkart[i] = -1;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(i, 15);
SetPlayerPos(i, spawnX,spawnY,spawnZ);
TogglePlayerControllable(i, 1);
}
}
}
return 1;
}
new string[32];
format(string, sizeof(string), "~r~3");
new gdelay=1000;
kartplaying = 1;
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, gdelay, 6);
PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
}
}
}
startvar[6] = 2;
SetTimer("StartKart", gdelay, 0);
} else if(startvar[6] == 2) {
new string[32];
format(string, sizeof(string), "~r~2");
new hdelay=1000;
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, hdelay, 6);
PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
}
}
}
startvar[6] = 3;
SetTimer("StartKart", hdelay, 0);
} else if(startvar[6] == 3) {
new rdelay=1000;
new string[32];
format(string, sizeof(string), "~g~1!");
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
GameTextForPlayer(i, string, rdelay, 6);
PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
TogglePlayerControllable(i, 1);
}
}
}
SetTimer("KrtFinish",300000,0);
startvar[6] = 0;
}
return 1;
}
public KrtFinish()
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if (playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i,0);
SetPlayerInterior(i, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
RespawnKarts();
SendClientMessageToAll(0x33AA33AA, "A corrida de kart acabou");
return 1;
}
public OnGameModeExit()
{
DestroyKarts();
return 1;
}
public OnPlayerConnect(playerid)
{
playerinminigame[playerid] = 0; // Checks if a player is in a minigame
playerinkartrace[playerid] = 0; // Kart Race
playerinkart[playerid] = -1;
//currentcheckpoint[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new str[256]; // Declarando a variável 'str' corretamente
if (playerinkartrace[playerid] == 1)
{
new KartPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, KartPlayerName, sizeof(KartPlayerName));
format(str, sizeof(str), "%s foi descartado da corrida de kart", KartPlayerName); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
kartfull[playerinkart[playerid]] = 0;
playerinkart[playerid] = -1;
if (kartrank <= 1)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
KillTimer(krttimer);
RespawnKarts();
return 1;
}
kartrank--;
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new str[256]; // Declarando a variável 'str' corretamente
if (playerinkartrace[playerid] == 1)
{
new KartPlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, KartPlayerName, sizeof(KartPlayerName));
format(str, sizeof(str), "%s foi descartado da corrida de kart", KartPlayerName); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
kartfull[playerinkart[playerid]] = 0;
playerinkart[playerid] = -1;
if (kartrank <= 1)
{
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i) && playerinkartrace[i] == 1)
{
playerinkartrace[i] = 0;
playerinminigame[i] = 0;
SetPlayerVirtualWorld(i, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(i, spawnX, spawnY, spawnZ);
}
}
kartplaying = 0;
kartrank = 0;
karton = 0;
KillTimer(krttimer);
RespawnKarts();
return 1;
}
kartrank--;
}
// }
return 1;
}
CMD:kart(playerid)
{
if(kartplaying == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "A corrida de kart já começou");
if(playerinminigame[playerid] == 1)return SendClientMessage(playerid, 0xB4B5B7AA, "Você já está em um minigame");
new pname[256];
GetPlayerName(playerid, pname, 256);
new str[256]; // Declarando a variável 'str' corretamente
if(karton == 0)
{
karton = 1;
playerinminigame[playerid] = 1;
playerinkartrace[playerid] = 1;
kartrank = 1;
krtfirst = 1;
currentcheckpoint[playerid] = 0;
SetPlayerInterior(playerid, 15);
SetPlayerVirtualWorld(playerid, 7);
SetVehicleVirtualWorld(karts[0], 7);
kartfull[0] = 1;
PutPlayerInVehicle(playerid, karts[0], 0);
playerinkart[playerid] = 0;
TogglePlayerControllable(playerid, 0);
SetPlayerRaceCheckpoint(playerid, 0, kcps[0][0], kcps[0][1], kcps[0][2], kcps[1][0], kcps[1][1], kcps[1][2], 20);
startvar[6] = 1;
krttimer = SetTimer("StartKart", 60000, 0);
format(str, sizeof(str), "%s[%s] entrou no evento [kart], /kart", pname,playerid); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
return 1;
}
else if(karton == 1 && kartrank < 15) {
playerinminigame[playerid] = 1;
playerinkartrace[playerid] = 1;
kartrank++;
currentcheckpoint[playerid] = 0;
SetPlayerInterior(playerid, 15);
for(new i=0; i<15; i++)
{
if(kartfull[i] == 0)
{
SetPlayerVirtualWorld(playerid, 7);
SetVehicleVirtualWorld(karts[i], 7);
kartfull[i] = 1;
PutPlayerInVehicle(playerid, karts[i], 0);
TogglePlayerControllable(playerid, 0);
SetPlayerRaceCheckpoint(playerid, 0, kcps[0][0], kcps[0][1], kcps[0][2], kcps[1][0], kcps[1][1], kcps[1][2], 20);
playerinkart[playerid] = i;
format(str, sizeof(str), "%s juntou-se a corrida de kart", pname); // Agora 'str' está declarado corretamente
SendClientMessageToAll(0x33AA33AA, str); // Enviando a mensagem para todos
return 1;
}
}
}
else if(karton == 1 && kartrank >= 15) {
format(str, sizeof(str), "A corrida de kart está cheia, esperar para a próxima rodada", pname); // Agora 'str' está declarado corretamente
SendClientMessage(playerid, 0x33AA33AA, str); // Enviando a mensagem para o jogador
return 1;
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
playercarid[playerid] = GetPlayerVehicleID(playerid);
}
if(oldstate == 2)
{
if(playerinkartrace[playerid])
{
PutPlayerInVehicle(playerid,playercarid[playerid],0);
}
}
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
if (playerinkartrace[playerid])
{
if (currentcheckpoint[playerid] <= 2)
{
currentcheckpoint[playerid]++;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid, 0, kcps[currentcheckpoint[playerid]][0], kcps[currentcheckpoint[playerid]][1], kcps[currentcheckpoint[playerid]][2],
kcps[currentcheckpoint[playerid] + 1][0], kcps[currentcheckpoint[playerid] + 1][1], kcps[currentcheckpoint[playerid] + 1][2], 20);
}
else if (currentcheckpoint[playerid] >= 3 && currentcheckpoint[playerid] != 7)
{
currentcheckpoint[playerid]++;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerRaceCheckpoint(playerid, 0, kcps[currentcheckpoint[playerid] - 4][0], kcps[currentcheckpoint[playerid] - 4][1],
kcps[currentcheckpoint[playerid] - 4][2], kcps[currentcheckpoint[playerid] - 3][0], kcps[currentcheckpoint[playerid] - 3][1],
kcps[currentcheckpoint[playerid] - 3][2], 20);
}
else if (currentcheckpoint[playerid] == 7)
{
if (krtfirst == 1)
{
DisablePlayerRaceCheckpoint(playerid);
new string[256];
krtfirst++;
kartrank--;
new winnername[256];
GetPlayerName(playerid, winnername, sizeof(winnername));
RewardCalc(playerid, 5000, 10000);
format(string, sizeof(string), "%s ganhou a corrida de kart e ganhou $%d", winnername, reward);
SendClientMessageToAll(0x33AA33AA, string);
GivePlayerMoney(playerid, reward);
playerinkartrace[playerid] = 0;
playerinminigame[playerid] = 0;
currentcheckpoint[playerid] = 0;
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, spawnX, spawnY, spawnZ);
oi gente tenho esse script aqui para salvamento de armas queria saber o porq nao ta salvando quando adquiro uma arma no servidor e quando conecto nao salva ja criei uma pasta chamada weapons dentro da scriptfeles mas mesmo assim nada algum script que entenda mais pode me salvar?
SkinGender - Identificação Profissional de Gênero de Skins no SA-MP / Open.MP
Sistema avançado, eficiente e otimizado para identificar de forma precisa o gênero das skins no SA-MP e Open.MP, com validação de IDs e personalização simples para atender às necessidades de gamemodes e filterscripts.
Recursos e Funcionalidades:
Identificação de gênero de skins com desempenho O(1), garantindo alta performance em servidores com grande número de jogadores.
Compatibilidade total com gamemodes e filterscripts, permitindo fácil integração em qualquer projeto.
Validação automática dos IDs das skins, evitando erros com skins inválidas ou desconhecidas.
Textos totalmente personalizáveis para os gêneros (masculino, feminino, inválido), permitindo adaptar a solução à linguagem ou estilo do servidor.
---
Instruções de Instalação e Configuração:
1. Adicione o arquivo `SkinGender.inc` à pasta `includes` do seu projeto.
2. Inclua a linha de código abaixo no seu script principal para carregar o sistema:
Código PHP:
#include <SkinGender>
3. Personalização de textos (opcional): Se deseja personalizar os textos usados para identificar os gêneros, defina as variáveis de texto antes da inclusão:
4. Desativação do `y_hooks` (opcional): Caso não deseje usar a funcionalidade `y_hooks`, basta desativá-la antes da inclusão com a seguinte diretiva:
Código PHP:
#define SKG_NO_Y_HOOKS
---
Funções Disponíveis:
IsMaleSkinID(skinid): Verifica se o ID fornecido corresponde a uma skin masculina. Retorna verdadeiro ou falso.
IsFemaleSkinID(skinid): Verifica se o ID fornecido corresponde a uma skin feminina. Retorna verdadeiro ou falso.
GetSkinGenderText(skinid): Retorna o texto associado ao gênero da skin fornecida. Exemplos: "Masculino", "Feminino" ou "Inválido", caso o ID da skin não seja válido.
IsValidSkinID(skinid): Verifica se o ID fornecido é válido dentro do sistema. Retorna verdadeiro ou falso.
---
Exemplo de Uso do Sistema:
Código PHP:
if(IsMaleSkinID(22)) { print("A skin id 22 é masculina"); } else if(IsFemaleSkinID(9)) { print("A skin id 9 é feminina"); } else if(!IsValidSkinID(555)) { print("A skin id 555 é inválida."); }
printf("A skin id 280 é: %s", GetSkinGenderText(280));
---
Informações do Projeto:
Autor: BitSain (Leonardo) Contato para Suporte e Dúvidas: bitsaindeveloper@gmail.com Repositório GitHub:Clique aqui. Licença: Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0)
---
Licenciamento e Termos de Uso:
Este projeto é licenciado sob a Creative Commons Attribution-ShareAlike 4.0. Você é livre para compartilhar e adaptar o conteúdo, desde que dê o devido crédito e compartilhe sob a mesma licença. Para mais informações, consulte a Licença Completa.