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.
Estou apenas puxando o módulo de comandos que tem 1 comando para testar e me aparece esse erro:
Código PHP:
E:\SAMP\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\y_scriptinit_impl.inc(772) : error 025: function heading differs from prototype E:\SAMP\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\y_scriptinit_impl.inc(772) : warning 231: state specification on forward declaration is ignored E:\SAMP\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\y_scriptinit_impl.inc(774) : error 025: function heading differs from prototype E:\SAMP\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\y_scriptinit_impl.inc(1092) : warning 201: redefinition of constant/macro (symbol "OnScriptInit(%0)")
e ao criar comandos no módulo resulta esse erro
Código PHP:
../modules/players/cmds.pwn(3) : error 021: symbol already defined: "cmd_teste"