Uncategories
Tutorial para criar um GameMode Simples.
Tutorial para criar um GameMode Simples.
//Primeiro comece pelas includes:
//Includes: #include a_samp (Coloque < >)
#include dudb (Coloque < >)
Agora os (new), os (fowards) e as (defines)
foward Pagamento_PayDay; #define Verde 0x33AA33AA
#define Branco 0xFFFFFFAA
#define blue 0x375FFFFF
//Agora, postarei também uma simples corrida: new checkcorrida[MAX_PLAYERS];
new Float:ChecksAvenida[17][3] = {
{2021.9279,851.2713,6.4387},
{1806.2888,851.1154,10.3762},
{1597.7745,850.9503,6.4374},
{1315.8704,886.0849,6.5154},
{1227.3850,1170.5470,6.5219},
{1228.7192,1804.4149,6.4378},
{1229.5260,2301.2026,6.4387},
{1447.5416,2452.2988,6.4377},
{1849.4731,2497.6997,6.5153},
{2287.5569,2607.9063,6.4585},
{2609.7202,2514.3423,5.8201},
{2706.6592,2158.3931,6.4492},
{2705.5173,1674.4374,6.4448},
{2706.8931,1278.5399,6.4373},
{2624.1135,932.2136,6.4433},
{2312.5583,854.1749,6.4375},
{2049.3154,853.4050,6.4387}
};
//Agora, ensinarei a criarem um comando de /status sofisticado:
enum en_pstats
{
pkills,
pmortes,
pkillhim
}
new pstats [MAX_PLAYERS] [en_pstats];
//Nomes do Servidor a trocar a toda a hora:
#define MAX_SN 3
new count2;
new SVNAMES [MAX_SN] [256] = {
"Primeiro Nome do Servidor",
"Segundo Nome do Servidor",
"Terceiro Nome do Servidor"
};
foward MudarNomeDoServidor()
//Agora, vou explicar como se faz, para mover um objecto:
foward PortaoAutomatico()
new portao;
//Aqui, Random Spawn (Caa vez que nasce, nascer em sítios diferentes:
#define Max_Positions 7
new Float: Positions [Max_Positions] [3] = {
{Cordenadas da Posição 1},
{Cordenadas da Posição 2},
{Cordenadas da Posição 3},
{Cordenadas da Posição 4},
{Cordenadas da Posição5},
{Cordenadas da Posição 6},
{Cordenadas da Posição 7}
};
//Agora, iremos criar as defines das Teams, para depois poder fazer o OnPlayerRequestClass...
static gTeam[MAX_PLAYERS];
#define TEAM_A 0
#define TEAM_B 1
public OnGameModeInit()
{
//Iremos colocar o portão Automático, e o seu SetTimer que é o tempo que o portão se move:
portao = CreateObject(CORDENADAS_DO_PORTÃO);
SetTimer("PortaoAutomatico", 750, 1);
//Agora o SetTimer, para em segundos trocar o nome do servidor:
SetTimer("MudarNomeDoServidor", 750, 1);
//Agora, irei ensinar a colocar os skins:
AddPlayerClass(285, 1958.3783,1343.1572,15.3746,270.1425,25,50,32,300,17,10); //Se quiser colocar mais, só copiar o que está em cima, e mudar o ID do Skin "Que aquele é o 285"
//Agora, o SetTimer para o Pagamento_PayDay;
SetTimer("Pagamento_PayDay", 900000,1); //900000 são 15 minutos, porque se 60000 é 1 minuto, 60000x15=900000=15 minutos.
return 1;
}
public OnPlayerConnect(playerid) //Quando se entra no servidor.
{
SendClientMessage(playerid, blue, "Seja Bem-Vindo ao Servidor");
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
new string[128];
format(string, sizeof(string), "%s entrou no Servidor", PlayerName);
return 1;
}
public SetupPlayerForceClasseSeletion(playerid)
{
SetPlayerInterior(playerid, INTERIOR_ID);
SetPlayerPos(playerid, CORDENADAS);
SetPlayerCameraPos(playerid, CORDENADAS_DA_CAMARA);
SetPlayerCameraLookAt(playerid, CORDENADAS_DA_CAMARA);
SetPlayerFacingAngle(playerid,0.0);
}
public SetPlayerTeamFromClass(playerid,classid)
{
if(classid == ID_SKIN classid == ID_SKIN ) {
gTeam[playerid] = TEAM_A;
} ese if(classid == ID_SKIN classid == ID_SKIN)
gTeam[playerid] = TEAM_B;
}
public OnPlayerRequestClass(playerid, classid)
{
SetupPlayerForClassSelection(playerid);
SetPlayerTeamFromClass(playerid,classid);
if(classid == ID_SKIN classid == ID_SKIN ) {
SendClientMessage(playerid, Branco, "Seja Bem Vindo");
} else if(classid == ID_SKIN classid == ID_SKIN ) {
SendClientMessage(playerid, Branco, "Seja Bem Vindo");
}
return 1;
}
public OnPlayerSpawn(playerid) //Quando o Player morre e nasce denovo
{
SetPlayerInterior(playerid, INTERIOR_ID);
//Aqui fassa o que quiser, ResetPlayerWeapons, deia dinheiro, o que quiser mesmo.
SendClientMessage(playerid, blue, "----------------------------------");
SendClientMessage(playerid, Verde, "Esperemos que goste do Servidor ");
SendClientMessage(playerid, blue, "----------------------------------");
//Agora a parte por causa das Posições de Spawn:
new RandomP = random(Max_Positions);
SetPlayerPos(playerid, Positions[RandomP] [0],Positions]RandomP] [1],Positions[RandomP] [2]);
}
public OnPlayerDeath(playerid, killerid, reason) //Quando o Jogador morre
{
SendDeathMessage(killerid, playerid, reason);
GameTextForPlayer(playerid, "Morreu PlayBoy", 1000, 0);
//Agora as paradas por causa do comando status:
SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
SetPlayerScore(playerid, GetPlayerScore(playerid, - 0);
GivePlayerMoney(killerid, GetPlayerMoney(killerid) + 1000);
kills[killerid] ++;
deaths[playerid] ++;
moretes[playerid} ++;
return 1;
}
public OnPlayerDisconnect(playerid, reason) //Quando o Jogador sai do Servidor
{
new PlayerName[MAX_PLAYER_NAME];
new string[56];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
switch(reason)
{
case 0: format(string, sizeof(string), "%s deixou o Servidor (Problemas na Conexão)", PlayerName);
case 1: format(string, sizeof(string), "%s deixou o Servidor (Por Vontade Própria)", PlayerName);
case 2: format(string, sizeof(string), "%s deixou o Servidor (Kickado/Banido)", PlayerName);
}
SendClientMessageToAll(Branco, string);
return 1;
}
//Agora, vamos criar uns comandos simples:
public OnPlayerCommandText(playerid, cmdtext)
{
if(strcmp(cmdtext, "/status", true)==0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))return SendClientMessage(playerid, blue, "Use /status [ID]");
new plid = strval(tmp);
if(IsPlayerConnected(plid))
{
new string[0x100], pname[MAX_PLAYER_NAME], Float:health, Float:armour;
GetPlayerName(plid, pname, sizeof pname);
format(string, sizeof string, "Status de %s:", pname);
SendClientMessage(playerid, 0xFF0000AA, string);
format(string, sizeof string, "Matou: [%d] Morreu: [%d] Suicidou: [%d] Dinheiro: [%d] Score: [%d]",
pstats[plid][pkills], pstats[plid][pmortes], pstats[plid][pkillhim], GetPlayerMoney(plid),GetPlayerScore(plid));
SendClientMessage(playerid, 0xFFFFFFAA, string);
GetPlayerHealth(plid, health);
GetPlayerArmour(plid, armour);
format(string, sizeof string, "Vida: [%.1f] Colote: [%.1f]", health, armour);
SendClientMessage(playerid, 0xFFFFFFAA, string);
} else {
SendClientMessage(playerid, 0xFF0000AA, "Jogador não conectado!");
}
return 1;
}
if(strcmp(cmdtext, "/creditos", true)==0)
{
SendClientMessage(playerid, blue, "Gamemode criado por:");
SendClientMessage(playerid, Verde, "Seu Nome");
return 1;
}
//Agora vamos criar o comando de entrar na corrida
if(strcmp(cmdtext, "/entrarcorrida", true)==0)
{
checkcorrida[playerid] = 0;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]] [0], ChecksAvenida[checkcorrida[playerid]] [1], ChecksAvenida[checkcorrida[playerid]] [2], ChecksAvenida[checkcorrida[playerid] + 1] [0], ChecksAvenida[checkcorrida[playerid] + 1] [1], ChecksAvenida[checkcorrida[playerid] + 1] [2], 8.0);
return 1;
}
//Agora vamos criar o public do Pagamento_PayDay;
public Pagamento_PayDay()
{
for(new i;i <>
{
GivePlayerMoney(playerid, 1000); //Dá 1000 ao jogador
SendClientMessage(playerid, Branco, "Você recebeu seu dinheiro");
}
return 1;
}
//Agora vamos criar o public MudarNomeDoServidor
public MudarNomeDoServidor()
{
count2 ++;
if(count2 > MAX_SN)count2 = 0;
new string[128];
format(string, sizeof(string), "hostname %s", SVNAMES[count2]);
SendRconCommand(string);
}
//Agora vamos criar o public Portao Automatico
public PortaoAutomatico()
{
for(new i;i <>
{
if(PlayerToPoint(8, i, CORDENADAS_PORTAO_FECHADO);
{
MoveObject(portao, CORDENADAS_PORTAO_ABERTO);
} else {
MoveObject(portao, CORDENADAS_PORTAO_FECHADO);
}
}
}
stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
new Float:pos[6];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
pos[3] = pos[0] -x, pos[4] = pos[1] -y, pos[5] = pos[2] -z;
return ((pos[3] < color="#3366ff">3 ] > -radi)) && ((pos[4] <>
&& (pos[4] >-radi)) && ((pos[5] < color="#3366ff">5] > -radi));
}
//Agora, vamos colocar o OnPlayerEnterCheckpoint, por causa da corrida:
public OnPlayerEntercheckpoint(playerid)
{
if(checkcorrida[playerid] == 17)
{
SendClientMessage(playerid, 0xFFFF00AA, "Você terminou a corrida");
DisablePlayerRaceCheckpoint(playerid);
checkcorrida[playerid] = 0;
return 1;
}
else
{
DisablePlayerCheckpoint(playerid);
checkcorrida[playerid] ++;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]] [0], ChecksAvenida[checkcorrida[playerid]] [1], ChecksAvenida[checkcorrida[playerid]] [2], ChecksAvenida[checkcorrida[playerid] + 1] [0], ChecksAvenida[checkcorrida[playerid] + 1] [1], ChecksAvenida[checkcorrida[playerid] + 1] [2], 8.0);
return 1;
}
}
Estive desde as 10:12h até as 12:36h a preparar este tutorial, espero que gostem.