Tutorial Criando Organização
Код:
Код:
- Código:
[size=14]#include <a_samp>
#include <zcmd> //Adicionando o ZCMD
#include <sscanf> //Adicionando o sscanf
#include <DOF2> //Adicionando o DOF2
#define CIVIL 0
#define POLÍCIA 1
#define BOSQUE 2
#define BALLAS 3
#define C_CIVIL 0x000000FF
#define C_POLICIAM 0x9999FFF6
#define C_GROVE 0x00D900C8
#define C_BALLAS 0x9900CCF6
enum PlayerDados //O enum serve, na maioria das vezes, para ser usado em outras variáveis como pode ver abaixo
{
Organização,
Carga
}
novos pDados[MAX_PLAYERS][PlayerDados]; //Criamos a varнavel que amarzenarб os Dados do player
principal()
{
print("\n----------------------------------");
print("[GM] DESCRIÇÃO DO GAMEMODE");
print("---------------------------------\n");
}
public OnGameModeExit()
{
DOF2_Exit(); //Sempre coloque isto aqui quando estiver a usar DOF2, ou irá dar um WARN, e mau funcionamento da include
retornar 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SpawnPlayer(playerid); //Ao aparecer aquelas setinhas (<<< >>> SPAWN), o jgador irá levar Spawn
retornar 1;
}
public OnPlayerConnect(playerid)
{
novo arquivo[34], nome do jogador[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
GetPlayerName(playerid, playername, sizeof(playername)); //Pegamos o nome do player
format(arquivo, sizeof(arquivo), "Contas/%s", nome do jogador);
pDados[playerid][Organização] = DOF2_GetInt(arquivo, "Organização"); //Setamos "pDados[playerid][Organizacao]" de acordo com a TAG getada do "arquivo"
pDados[playerid][Cargo] = DOF2_GetInt(arquivo, "Cargo"); //Setamos "pDados[playerid][Cargo]" de acordo com a TAG getada do "arquivo"
SpawnPlayer(playerid); //Dá SPAWN nenhum jogador
retornar 1;
}
public OnPlayerDisconnect(playerid, razão)
{
novo arquivo[34], nome do jogador[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
GetPlayerName(playerid, playername, sizeof(playername)); //Pegamos o nome do player
format(arquivo, sizeof(arquivo), "Contas/%s", nome do jogador);
if(DOF2_FileExists(arquivo)) //Se a Conta existir
{
DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organização]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizacao"
DOF2_SetInt(arquivo, "Carga", pDados[playerid][Carga]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
}
else //Se a conta nгo esxitir
{
DOF2_CreateFile(arquivo); //Cria o arquivo com os Dados do player
DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organização]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizacao"
DOF2_SetInt(arquivo, "Carga", pDados[playerid][Carga]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
}
retornar 1;
}
public OnPlayerUpdate(playerid)
{
novo arquivo[34], nome do jogador[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
GetPlayerName(playerid, playername, sizeof(playername)); //Pegamos o nome do player
format(arquivo, sizeof(arquivo), "Contas/%s", nome do jogador);
if(DOF2_FileExists(arquivo)) //Se a Conta existir
{
DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organização]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizacao"
DOF2_SetInt(arquivo, "Carga", pDados[playerid][Carga]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
}
else //Se a conta nгo esxitir
{
DOF2_CreateFile(arquivo); //Cria o arquivo com os Dados do player
DOF2_SetInt(arquivo, "Organização", pDados[playerid][Organização]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizacao"
DOF2_SetInt(arquivo, "Carga", pDados[playerid][Carga]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
}
retornar 1;
}
public OnPlayerSpawn(playerid)
{
if(pDados[playerid][Organizacao] == CIVIL)
{
SetPlayerPos(playerid, 1677.7240,-1635.5829,14.2266);
}
else if(pDados[playerid][Organizacao] == POLICIAM)
{
SetPlayerPos(playerid, 1530.0186,-1671.5234,6.2188);
}
else if(pDados[playerid][Organizacao] == GROVE)
{
SetPlayerPos(playerid, 2516.1411,-1675.4065,13.9113);
}
else if(pDados[playerid][Organizacao] == BALLAS)
{
SetPlayerPos(playerid, 1099.7534,-1189.1282,18.3361);
}
retornar 1;
}
public OnPlayerDeath(playerid, killerid, razão)
{
SpawnPlayer(playerid); //Spawn sem negociação!
retornar 1;
}
public OnDialogResponse(playerid, dialogid, resposta, listitem, inputtext[])
{
if(diálogo == 666)
{
novo nome de jogador[MAX_PLAYER_NAME], string[128]; //Variaveis que irá armazenar o nome e "string"
GetPlayerName(playerid, playername, sizeof(playername)); //Pega o nome do player que aparaceu o dialog
if(resposta) //Se ele clicar em SIM...
{
pDados[playerid][Organizacao] = GetPVarInt(playerid, "OrgConvidado"); //Define a organização de acordo com a PVarInt do comando /convida
pDados[playerid][Cargo] = 1; //Define a carga a 1
format(string, sizeof(string), "%s aceitou seu convite.", playername); //Formata uma mensagem com o nome do player que aceitou
SendClientMessage(GetPVarInt(playerid, "QuemConvidou"), 0x00FF00FF, string); //Envia a mensgaem a quem estava
format(string, sizeof(string), "%s é o mais novo membro da Organização.", playername); //Formata uma mensgaem com o nome do player que aceitou
SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Manda a mensagem para a organização do player
SendClientMessage(playerid, 0x00FF00FF, "Você aceitou o convite."); //Manda uma mensagem amigavel ao player que aceitou :P
DeletePVar(playerid, "OrgConvidado"); //Exclui o PVar
DeletePVar(playerid, "QuemConvidou"); //Exclui o PVar
SpawnPlayer(playerid); //Spawn nele!
}
else //Se ele ciclar em NГO...
{
format(string, sizeof(string), "%s rejeitei seu convite.", playername); //Formata a mensgaem com o nome do player que rejeitou o convite
SendClientMessage(GetPVarInt(playerid, "QuemConvidou"), 0x00FF00FF, string); //Envia a mensagem a quem estava o jogador
SendClientMessage(playerid, 0x00FF00FF, "Você rejeitou o convite."); //Manda uma mensagem amigavel ao player que rejeitou :P
DeletePVar(playerid, "OrgConvidado"); //Exclui o PVar
DeletePVar(playerid, "QuemConvidou"); //Exclui o PVar
}
}
retornar 1;
}
CMD:membros(playerid)
{
novo nome de jogador[MAX_PLAYER_NAME], string[128]; //Criamos variaveis que iremos armazenar o nome e mensganes formatadas
if(pDados[playerid][Organização] >= 1)
{
SendClientMessage(playerid, 0xBFC0C2FF, "(=-=-=-=-=-=-=({FFD700}Membros Online{BFC0C2})=-=-=-=-=-=-=)");
for(new i = 0; i < MAX_PLAYERS; i++) //Criamos um loop de acordo com o MAX_PLAYERS
{
if(IsPlayerConnected(i)) //Verifica se o "i" (player) do loop está online
{
if(pDados[i][Organizacao] == pDados[playerid][Organizacao]) //Verifica se a organização do player (do loop) é igual a do player que digitou o comando
{
GetPlayerName(i, nome do jogador, sizeof(nome do jogador)); //Pega o nome do player(loop)...
if(pDados[i][Cargo] <= 4) //Verifica se o player do loop e cargo 4 ou menos
{
format(string, sizeof(string), " Membro: %s, Cargo: %d", playername, pDados[i][Cargo]); //Formata uma mensgaem com o nome e carga do player (loop)
SendClientMessage(playerid, GetPlayerColor(playerid), string); //Envia a mensagem do player que digitou o comando
}
outro
{
if(pDados[i][Cargo] == 6) //Verifica se o player й Lнder e formata/envia uma mensagem diferente/destacada
{
format(string, sizeof(string), " Membro: %s, Cargo: Líder", playername);
SendClientMessage(playerid, GetPlayerColor(playerid), string);
}
else if(pDados[i][Cargo] == 5) //Verifica se o player й Lнder e formata/envia uma mensagem diferente/destacada
{
format(string, sizeof(string), " Membro: %s, Cargo: Sub-Líder", playername);
SendClientMessage(playerid, GetPlayerColor(playerid), string);
}
}
}
}
}
}
outro
{
SendClientMessage(playerid, 0xAD0000AA, "Você não pertence a nenhuma organização.");
}
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:ga(playerid, params[])
{
novo texto[128], string[128], nome do jogador[MAX_PLAYER_NAME]; //Criando variavйs...
if(sscanf(params, "s", text)) return SendClientMessage(playerid, 0xAD0000AA, "Uso correto: /ga [MENSAGEM]"); //Aqui está o triunfo do sscanf!
if(pDados[playerid][Organizacao] == CIVIL) return SendClientMessage(playerid, 0xAD0000AA, "Você não participa de nenhuma organização!");
GetPlayerName(playerid, playername, sizeof(playername)); //Obter o nome de quem usou o comando
format(string, sizeof(string), "(Rádio) %s [Carga: %d] diz: %s", playername, pDados[playerid][Cargo], text); //Formata uma mensagem com o nome do player, carga e a mensgem
SendFamilyMessage(pDados[playerid][Organizacao], 0xAD0000AA, string); //Envia a mensagem a organização do player
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:convidar(playerid, params[])
{
novo id, nome do jogador[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME], string[128]; //Cria variaveis que irao armazenar id, nome e string
if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, 0xAD0000AA, "Vocк nгo й lнder."); //Vê se quem digitou o comando й lнder, se nгo, returna a mensagem
if(sscanf(params, "d", id)) return SendClientMessage(playerid, 0xAD0000AA, "USE: /convidar [ID]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); //Verifica se o "id" está online...
if(pDados[id][Organizacao] != 0) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador já está em uma Organização."); //Verifica se o player jб estб em alguma organizaзгo, se estiver, returna a mensagem
if(playerid == id) return SendClientMessage(playerid, 0xAD0000AA, "Você não pode convidar a você mesmo."); //Verifica se o "id" = id de quem digitou (playerid)
GetPlayerName(id, idname, sizeof(idname)); //Pega o nome do "id"
format(string, sizeof(string), "Você está sozinho %s para sua organização.", idname); //Formata a mensagem com que foi convidado
SendClientMessage(playerid, GetPlayerColor(playerid), string); //Envia a mensagem ao lнder
GetPlayerName(playerid, playername, sizeof(playername)); //Obter o nome de quem digitou o comando
format(string, sizeof(string), "%s está lhe Convidando para fazer parte da Organização: %s \nDeseja aceitar?", playername, GetOrgName(pDados[playerid][Organização])); //Formata um dialog com o nome de que você estava e o nome da organização
ShowPlayerDialog(id, 666, DIALOG_STYLE_MSGBOX, "Convite para organização", string, "Sim", "Não"); //Cria o diálogo de acordo com a "string" e mostra para o "id"
SetPVarInt(id, "OrgConvidado", pDados[playerid][Organizacao]); //Configurando PVarInt que será usado no OnDialogResponse
SetPVarInt(id, "QuemConvidou", id do jogador); //Configurando PVarInt que será usado no OnDialogResponse
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:promover(playerid, params[])
{
novo id, cargo, string[128], nome do jogador[MAX_PLAYER_NAME], nome do id[MAX_PLAYER_NAME]; //Cria as vбriveis...
if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, 0xAD0000AA, "Vocк nгo й lнder."); //Verifica se o player que digitou o comando é lнder
if(sscanf(params, "dd", id, cargo)) return SendClientMessage(playerid, 0xAD0000AA, "USE: /promover [ID] [CARGO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); //Verifica se o player que será promovido está online
if(pDados[id][Organizacao] != pDados[playerid][Organizacao]) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não é da mesma Organização que você."); //Verifica se o "id" é da mesma organização do lнder
if(playerid == id) return SendClientMessage(playerid, 0xAD0000AA, "Você não pode promover a você mesmo."); //Verifica se o "id" ele mesmo (playerid)
if(cargo >= 1 || cargo <= 5) //Verifica se o cargo está entre 1 a 5
{
pDados[id][Cargo] = carga; //Defina a carga do player de acordo com a "carga" que o lнder digitou
GetPlayerName(playerid, playername, sizeof(playername)); //Pega o nome do jogador que digitou o comando
GetPlayerName(id, idname, sizeof(idname)); //Pegue o nome de quem recebeu a promoção
format(string, sizeof(string), "%s promoveu o membro %s para o Cargo %d.", playername, idname, cargo); //Formata a mesgaem com quem prommoveu, quem foi promovido e a carga
SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Envia a mensagem para a organização
format(string, sizeof(string), "%s te promoveu para o Cargo %d.", playername, cargo); //Formata um mensgame...
SendClientMessage(id, GetPlayerColor(playerid), string); //Envia a mesngaem para quem foi promovido
}
else //Caso o cargo nгo esta de 1 a 5, envie a mensagem abaixo:
{
SendClientMessage(playerid, 0xAD0000AA, "Cargas de 1 a 5");
retornar 1;
}
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:demitir(playerid, params[])
{
novo id, motivo[128], string[128], nome do jogador[MAX_PLAYER_NAME], nome do id[MAX_PLAYER_NAME]; //Criando variaveis :P
if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, 0xAD0000AA, "Vocк nгo й lнder."); //Verifica se o player que digitou o comando é lider
if(sscanf(params, "ds", id, motivo)) return SendClientMessage(playerid, 0xAD0000AA, "USE: /demitir [ID] [MOTIVO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); //Verifica se quem será demitido está online
if(pDados[id][Organizacao] != pDados[playerid][Organizacao]) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não é da mesma Organização que você."); //Verifica se o "id" é da mesma organização do lнder
if(playerid == id) return SendClientMessage(playerid, 0xAD0000AA, "Você não pode demitir a você mesmo."); //Verifica se o "id" ele mesmo (playerid)
pDados[id][Organização] = CIVIL;
pDados[id][Carga] = 0; //Define o cargo od player a 0
GetPlayerName(playerid, playername, sizeof(playername)); //Pegue o nome de quem demitiu
GetPlayerName(id, idname, sizeof(idname)); //Pegue o nome de quem foi demitido
format(string, sizeof(string), "%s demitiu o membro %s da Organização.", playername, idname); //Formata uma mensagem com o nome de quem demitiu e quem foi demitido
SendFamilyMessage(pDados[playerid][Organizacao], GetPlayerColor(playerid), string); //Envia a mensagem para a organização
format(string, sizeof(string), "%s te demitiu da Organização. Motivo: %s.", playername, motivo); //Formata uma mensagem com o nome de quem demitiu e o motivo
SendClientMessage(id, GetPlayerColor(playerid), string); //Envia a mensagem para quem foi demitido
SpawnPlayer(id); //Spawn sem negociação!
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:darlider(playerid, params[])
{
novo id, org, string[256], quemdeu[MAX_PLAYER_NAME], quemganhou[MAX_PLAYER_NAME]; //Cria vбriaveis que irб armazenar o id do lнder, a organizaзгo, o nome etc...
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado a usar este Comando."); //Verifica se o player está logado na RCON, se não, retorna a mensagem
if(sscanf(params, "ii", id, org)) return SendClientMessage(playerid, 0xAD0000AA, "USE: /darlider [ID] [ORGANIZAЗГO]"); //Aqui está o triunfo do sscanf! Para saber mais informações leia o Tópico
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); //Verifica se o jogador que iria ser definido lнder estб online
if(playerid == id) return SendClientMessage(playerid, 0xAD0000AA, "Você não pode dar o comando a você mesmo."); //Verifica se o "id" é igual ao seu (playerid)
GetPlayerName(id, quemganhou, sizeof(quemganhou)); //Pegue o nome de quem ganhou a lideanзa
GetPlayerName(playerid, quemdeu, sizeof(quemdeu)); //Pega o nome do admin que deu o lнder
format(string, sizeof(string), "Você deu lнder da Organização %s para %s(ID: %d)", GetOrgName(org), quemganhou, id); //Formata uma mensagem com o nome de quem ganhou a liderança, o nome da organização que foi definida e o "id"
SendClientMessage(playerid, 0x00F6F6AA, string); //Manda a mensgem formatada para quem digitou o comando (quem deu o lнder)
format(string, sizeof(string), "%s(ID: %d) te deu lнder da Organização %s.", quemdeu, playerid, GetOrgName(org)); //Formata uma mensgame com quem deu a lideranca, o "playerid" e o nome organizacao definida
SendClientMessage(id, 0x00F6F6AA, string); //Envia um mensgaem formatada para quem recebeu a liderança
format(string, sizeof(string), "%s(ID: %d) й o novo lнder da Organização %s.", quemganhou, id, GetOrgName(org)); //Formata a mensagem...
SendClientMessageToAll(0x00F6F6AA, string); //Envia a mensagem para todos Online
pDados[id][Organizacao] = org; //Defina a organização do "id"
pDados[id][Carga] = 6; //Defina o cargo (liderança) do "id"
SpawnPlayer(id); //Spawna o player que rebeu a lideranca
retornar 1; //Retornando a 1, nunca se esqueça!
}
CMD:equipar(playerid)
{
if(pDados[playerid][Organizacao] == CIVIL)
{
SendClientMessage(playerid, 0xAD0000AA, "Você Civil e nгo pode equipar.");
}
else if(pDados[playerid][Organizacao] == POLICIAM)
{
if(!IsPlayerInRangeOfPoint(playerid, 3.0,302.1005,-1528.7483,24.9219)) return SendClientMessage(playerid, 0xAD0000AA, "Você não está no local para se equipar");
new Armas_POLICIAM = 50*pDados[playerid][Cargo]; //Isto fára que multiplique 50 pelo cargo do player, sendo assim, a munição que o player terÁ
GivePlayerWeapon(playerid, 24, Armas_POLICIAM);
GivePlayerWeapon(playerid, 25, Armas_POLICIAM);
GivePlayerWeapon(playerid, 29, Armas_POLICIAM);
GivePlayerWeapon(playerid, 31, Armas_POLICIAM);
GivePlayerWeapon(playerid, 32, Armas_POLICIAM);
GivePlayerWeapon(playerid, 34, Armas_POLICIAM);
}
else if(pDados[playerid][Organizacao] == GROVE)
{
if(!IsPlayerInRangeOfPoint(playerid, 3.0,2522.8928,-1679.4075,15.4970)) return SendClientMessage(playerid, 0xAD0000AA, "Você não está no local para se equipar");
new Armas_GROVE = 50*pDados[playerid][Cargo]; //Isto fára que multiplique 50 pelo cargo do player, sendo assim, a munição que o player terÁ
GivePlayerWeapon(playerid, 24, Armas_GROVE);
GivePlayerWeapon(playerid, 25, Armas_GROVE);
GivePlayerWeapon(playerid, 29, Armas_GROVE);
GivePlayerWeapon(playerid, 31, Armas_GROVE);
GivePlayerWeapon(playerid, 32, Armas_GROVE);
GivePlayerWeapon(playerid, 34, Armas_GROVE);
}
else if(pDados[playerid][Organizacao] == BALLAS)
{
if(!IsPlayerInRangeOfPoint(playerid, 3.0,1075.3785,-1204.1298,18.2185)) return SendClientMessage(playerid, 0xAD0000AA, "Você não está no local para se equipar");
new Armas_BALLAS = 50*pDados[playerid][Cargo]; //Isto fára que multiplique 50 pelo cargo do player, sendo assim, a munição que o player terÁ
GivePlayerWeapon(playerid, 24, Armas_BALLAS);
GivePlayerWeapon(playerid, 25, Armas_BALLAS);
GivePlayerWeapon(playerid, 29, Armas_BALLAS);
GivePlayerWeapon(playerid, 31, Armas_BALLAS);
GivePlayerWeapon(playerid, 32, Armas_BALLAS);
GivePlayerWeapon(playerid, 34, Armas_BALLAS);
}
retornar 1; //Retornando a 1, nunca se esqueça!
}
estoque GetOrgName(orgid)
{
novo str[30];
if(orgid == 0)
{
str = "CIVIL";
}
else if(orgid == 1)
{
str = "POLÍCIA";
}
else if(orgid == 2)
{
str = "BOSQUE";
}
else if(orgid == 3)
{
str = "BALLAS";
}
retornar str;
}
stock SendFamilyMessage(orgid, cor, mensagem[]) //stock que envia a mensagem para tal organização de acordo com "ogrid"
[/size]
[size=13]{
for(novo i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(pDados[i][Organizacao] == orgid)
{
SendClientMessage(i, cor, mensagem);
}
}
}
retorna 0;
}[/size]
Creditos: KevinStyle