Colocar um player em um ''evento'' - GabrielCampos - 15/05/2023
Bom dia a todos e espero que tenham aproveitado esse final de semana.
Gostaria de uma ajuda pois aqui na minha lógica não estou sabendo como cria. Como eu poderia fazer um evento para os players, por exemplo o player digita /irevento e aí meio que se cria um mundo so pra aquele evento e depois pra sair do evento, oq poderia fazer?
Gostaria de começar a implementar um sistema de eventos, mas nao estou sabendo nem iniciar esse sistema, se alguem tiver algo que eu possa ler ou puder explicar o principio, me ajuda muito. Eventos de team deathmatch, corridas e etc...
RE: Colocar um player em um ''evento'' - Dr Editor - 15/05/2023
Você pode simplesmente estudar um sistema existente do modo que deseja criar do zero, para estudá-lo e aprender como criar um do seu jeito.
Vou te dar um exemplo bem básico sobre TDM. Abaixo os passos utilizados e por fim o código.
1 - Criar um comandos do evento (criar, entrar, sair)
2 - No comando de entrar deve-se atribuir 3 coisas: balanceamento de equipe (no DM é só desconsiderar esta parte), armas e vida do jogador
4 - Ainda no comando você redireciona o jogador para outro mundo virtual e posição do local do evento
Código: static __playerTeam[MAX_PLAYERS];
static __teamBalance;
static bool:__activeEvent;
CMD:iniciarevento(playerid, params[])
{
if(__activeEvent)
return SendClientMessage(playerid, -1, "Este evento já está ativo.");
__activeEvent = true;
return 1;
}
CMD:pararevento(playerid, params[])
{
if(!__activeEvent)
return SendClientMessage(playerid, -1, "O evento não está ativo.");
__activeEvent = false;
__teamBalance = 0;
LeavePlayersEvent();
return 1;
}
CMD:irevento(playerid, params[])
{
if(!__activeEvent)
return SendClientMessage(playerid, -1, "O evento não está ativo.");
if(__playerTeam[playerid] > 0)
return SendClientMessage(playerid, -1, "Você já está no evento.");
JoinPlayerEvent(playerid);
return 1;
}
CMD:sairevento(playerid, params[])
{
if(!__activeEvent)
return SendClientMessage(playerid, -1, "O evento não está ativo.");
if(__playerTeam[playerid] == 0)
return SendClientMessage(playerid, -1, "Você não está no evento.");
LeavePlayerEvent(playerid);
return 1;
}
stock JoinPlayerEvent(playerid)
{
if((__teamBalance % 2) == 0)
{
__playerTeam[playerid] = 1;
SendClientMessage(playerid, -1, "Você pertence ao time 1.");
}
else
{
__playerTeam[playerid] = 2;
SendClientMessage(playerid, -1, "Você pertence ao time 2.");
}
SetPlayerHealth(playerid, 100.0); // Altera a vida em 100%
GivePlayerWeapon(playerid, 24, 50); // Dá uma Desert Eagle
SetPlayerVirtualWorld(playerid, 50); // Muda o mundo virtual
SetPlayerPos(playerid, 1.0, 2.0, 3.0); // Muda a posição do jogador
__teamBalance ++;
}
stock LeavePlayerEvent(playerid)
{
SendClientMessage(playerid, -1, "O evento terminou.");
SetPlayerHealth(playerid, 100.0); // Altera a vida em 100%
ResetPlayerWeapons(playerid); // Remove as armas do jogador
SetPlayerVirtualWorld(playerid, 0); // Muda o mundo virtual
SetPlayerPos(playerid, 1.0, 2.0, 3.0); // Muda a posição do jogador
__playerTeam[playerid] = 0;
__teamBalance --;
}
stock LeavePlayersEvent()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(!IsPlayerConnected(i))
continue;
SendClientMessage(i, -1, "O evento terminou.");
SetPlayerHealth(i, 100.0); // Altera a vida em 100%
ResetPlayerWeapons(i); // Remove as armas do jogador
SetPlayerVirtualWorld(i, 0); // Muda o mundo virtual
SetPlayerPos(i, 1.0, 2.0, 3.0); // Muda a posição do jogador
__playerTeam[i] = 0;
}
}
OBS.:
É um código extremamente simples, mas funcional. Há muitas coisas para adaptar e melhorar.
|