[Tutorial] Criando Organizaзгo + ZCMD/SSCANF
#1

Jб estou de saнda, amanhг posto todo o resto do Tutorial, ai estб manolos :
pawn Код:
#include <a_samp>
#include <zcmd> //Adicionando o ZCMD
#include <sscanf> //Adicionando o sscanf
#include <DOF2> //Adicionando o sscanf

#define CIVIL                   0 //Definimos "CIVIL" a 0
#define POLICIAM                1 //Mesma coisa
#define GROVE                   2 //Mesma coisa
#define BALLAS                  3 //Mesma coisa

#define COR_ERRO                0xAD0000AA //CORES
#define COR_SUCESSO             0x00AB00AA //CORES
#define COR_AV_ADM              0x007CF6AA //CORES
#define COR_AZUL_CLARO          0x00F6F6AA //CORES
#define COR_RAD                 0x4876FFAA //CORES

enum PlayerDados //O enum serve, na maioria das veses, para ser usado em outras variaveis como pode ver abaixo
{
    Organizacao,
    Cargo
}
//O enum tem funзгo de criar vбriaves que podem ser usadas em outras vбriavies, exemplo:
/*
if(pDados[playerid][Cargo] != 6)
{
    SendClientMessage(playerid, -1, "Vocк nгo й LНDER!");
}
*/


new pDados[MAX_PLAYERS][PlayerDados]; //Criamos a varнavel que amarzenarб os Dados do player
/*
MAX_PLAYERS = Para qual player serб setado ou getado tal informaзгo, exemplo: pDados[playerid][Ornizacao] = CIVIL;
PlayerDados = Como eu disse lб no comeзo, o enum cria varias vбriaveis, que pode ser usadas aqui, ao invйs de ter que usar aquele monte de "new"
*/

new GroveCars[3]; //O Nъmero de veнculos da organizaзгo +1

public OnGameModeInit()
{
    //Como adicionar veнculos privados para tal Organizaзгo:
    GroveCars[0] = AddStaticVehicle(509, -101.50000000, 1222.40002441, 19.29999924, 0.00000000, 1, 1); //Troque os parametros de acordo com sua necessidade
    GroveCars[1] = AddStaticVehicle(509, -103.69999695, 1222.50000000, 19.29999924, 0.00000000, 1, 1);
    GroveCars[2] = AddStaticVehicle(509, -103.69999695, 1222.50000000, 19.29999924, 0.00000000, 1, 1);
    return 1;
}

public OnGameModeExit()
{
    DOF2_Exit(); //Sempre coloque isto aqui quando estiver a usar DOF2, ou irб dar um WARN, e mau funcionamento da include
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SpawnPlayer(playerid); //Ao aparecer aqueles setinhas (<<< >>> SPAWN), o jgador irб levar Spawn
    return 1;
}

public OnPlayerConnect(playerid)
{
    SendClientMessage(playerid, -1, "Bem vindo ao Servidor!");
    SendClientMessage(playerid, -1, "GameMode/Tutorial by CidadeNovaRP!");
    new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
    GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player
    format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)
    pDados[playerid][Organizacao] = 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 no player
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
    GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player
    format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)
    if(DOF2_FileExists(arquivo)) //Se a Conta existir
    {
        DOF2_SetInt(arquivo, "Organizaзгo", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizaзгo"
        DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //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][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizaзгo"
        DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    if(pDados[playerid][Organizacao] == CIVIL) //Verifica a organizaзгo do player
    {
        //SetPlayerHealth(playerid, vida); Seta o HP do player
        //SetPlayerArmour(playerid, colete); Seta o COLETE do player
        //SetPlayerInterior(playerid, interior); Seta o INTERIOR do player
        SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas
    }
    else if(pDados[playerid][Organizacao] == POLICIAM) //Verifica a organizaзгo do player
    {
        SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas
    }
    else if(pDados[playerid][Organizacao] == GROVE) //Verifica a organizaзгo do player
    {
        SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas
    }
    else if(pDados[playerid][Organizacao] == BALLAS) //Verifica a organizaзгo do player
    {
        SetPlayerPos(playerid, x, y, z); //Seta a POS do player de acordo com as coordenadas
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    SpawnPlayer(playerid); //Spawn no nego!
    return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    //Como expulsar do vйiculo se nгo for da organizaзгo:
    if(vehicleid == GroveCars[0] || vehicleid == GroveCars[1] || vehicleid == GroveCars[2] && pDados[playerid][Organizacao] != GROVE) return SendClientMessage(playerid, -1, "Vocк nгo tem as chaves deste veнculo e foi expulso."), RemovePlayerFromVehicle(playerid);
    //Este comando й mais complexo, atravйs do "if", verifica se o player estб em algum dos veнculos da grove, e depois se ele faz parte da grove, caso ele nгo seja, returna a funзгo que expulsa ele do veнculo
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new arquivo[34], playername[MAX_PLAYER_NAME]; //Criamos as vбriaveos que irгo armazenar o arquivo e o nome do jogador
    GetPlayerName(playerid, playername, sizeof(playername)); //Getamos o nome do player
    format(arquivo, sizeof(arquivo), "Contas/%s", playername); //Formatamos o arquivo de acordo com o nome do player (Contas/NOME)
    if(DOF2_FileExists(arquivo)) //Se a Conta existir
    {
        DOF2_SetInt(arquivo, "Organizaзгo", pDados[playerid][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizaзгo"
        DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //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][Organizacao]); //Setamos o valor de "pDados[playerid][Organizacao]" no "arquivo", com a TAG "Organizaзгo"
        DOF2_SetInt(arquivo, "Cargo", pDados[playerid][Cargo]); //Setamos o valor de "pDados[playerid][Cargo]" no "arquivo", com a TAG "Cargo"
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 666) //Verifica se o id do dialog == 666 (do convite)
    {
        new playername[MAX_PLAYER_NAME], string[128]; //Variaveis que irб armazenar o nome e "string"
        GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome do player que aparaceu o dialog
        if(response) //Se ele clicar em SIM...
        {
            pDados[playerid][Organizacao] = GetPVarInt(playerid, "OrgConvidado"); //Seta a organizaзгo de acordo com a PVarInt do comando /convida
            pDados[playerid][Cargo] = 1; //Seta o cargo 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"), COR_SUCESSO, string); //Envia a mensgaem a quem convidou
            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, COR_SUCESSO, "Vocк aceitou o Convite."); //Manda uma mensagem amigavel ao player que aceitou :P
            DeletePVar(playerid, "OrgConvidado"); //Deleta o PVar
            DeletePVar(playerid, "QuemConvidou"); //Deleta o PVar
            SpawnPlayer(playerid); //Spawn nele!
        }
        else //Se ele ciclar em NГO...
        {
            format(string, sizeof(string), "%s rejeitou seu Convite.", playername); //Formata a mensgaem com o nome do player que rejeitou o convite
            SendClientMessage(GetPVarInt(playerid, "QuemConvidou"), COR_SUCESSO, string); //Envia a mensagem a quem convidou o player
            SendClientMessage(playerid, COR_SUCESSO, "Vocк rejeitou o Convite."); //Manda uma mensagem amigavel ao player que rejeitou :P
            DeletePVar(playerid, "OrgConvidado"); //Deleta o PVar
            DeletePVar(playerid, "QuemConvidou"); //Deleta o PVar
        }
    }
    return 1;
}

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=( COMANDOS )=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

CMD:membros(playerid)
{
    new playername[MAX_PLAYER_NAME], string[128]; //Criamos variaveis que irгo armazenar o nome e mensganes formatadas
    if(pDados[playerid][Organizacao] >= 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, playername, sizeof(playername)); //Geta 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 cargo do player (loop)
                        SendClientMessage(playerid, GetPlayerColor(playerid), string); //Envia a mensagem do player que digitou o comando
                    }
                    else
                    {
                        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);
                        }
                    }
                }
            }
        }
    }
    else
    {
        SendClientMessage(playerid, COR_ERRO, "Vocк nгo pertence a nenhuma Organizaзгo.");
    }
    return 1; //Returnando a 1, nunca se esqueзa!
}

CMD:r(playerid, params[])
{
    new text[128], string[128], playername[MAX_PLAYER_NAME]; //Criando variavйs...
    if(sscanf(params, "s", text)) return SendClientMessage(playerid, COR_ERRO, "USE: /r [MENSAGEM]"); //Aqui estб o triunfo do sscanf! Para saber mais informaзхes leia o Tуpico
    if(pDados[playerid][Organizacao] == CIVIL) return SendClientMessage(playerid, COR_ERRO, "Civis nгo tem Rбdio."); //Verifica se o player й CIVIL, se for, returna a mensagem
    GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome de quem usou o comando
    format(string, sizeof(string), "(Rбdio) %s [Cargo: %d] diz: %s", playername, pDados[playerid][Cargo], text); //Formata uma mensagem com o nome do player, cargo e a mensgem
    SendFamilyMessage(pDados[playerid][Organizacao], COR_RAD, string); //Envia a mensagem a organizaзгo do player
    return 1; //Returnando a 1, nunca se esqueзa!
}

CMD:convidar(playerid, params[])
{
    new id, playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME], string[128]; //Cria variaveis que irгo armazenar id, nome e string
    if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "USE: /convidar [ID]"); //Aqui estб o triunfo do sscanf! Para saber mais informaзхes leia o Tуpico
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COR_ERRO, "Este jogador nгo estб online."); //Verifica se o "id" estб online...
    if(pDados[id][Organizacao] != 0) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "Vocк nгo pode convidar a vocк mesmo."); //Verifica se o "id" = id de quem digitou (playerid)
    GetPlayerName(id, idname, sizeof(idname)); //Geta o nome do "id"
    format(string, sizeof(string), "Vocк convidou %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)); //Geta 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][Organizacao])); //Formata um dialog com o nome de que convidou e o nome da organizaзгo
    ShowPlayerDialog(id, 666, DIALOG_STYLE_MSGBOX, "Convite para organizaзгo", string, "Sim", "Nгo"); //Cria o dialog de acordo com a "string" e a mostra para o "id"
    SetPVarInt(id, "OrgConvidado", pDados[playerid][Organizacao]); //Setando PVarInt que serб usar no OnDialogResponse
    SetPVarInt(id, "QuemConvidou", playerid); //Setando PVarInt que serб usar no OnDialogResponse
    return 1; //Returnando a 1, nunca se esqueзa!
}

CMD:promover(playerid, params[])
{
    new id, cargo, string[128], playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME]; //Cria as vбriveis...
    if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "Vocк nгo й lнder."); //Verifica se o player que digitou o comando й lнder
    if(sscanf(params, "dd", id, cargo)) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "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, COR_ERRO, "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, COR_ERRO, "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] = cargo; //Seta o cargo do player de acordo com o "cargo" que o lнder digitou
        GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome do player que digitou o comando
        GetPlayerName(id, idname, sizeof(idname)); //Geta 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 o cargo
        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 a mensgame...
        SendClientMessage(id, GetPlayerColor(playerid), string); //Envia a mesngaem para quem foi promovido
    }
    else //Caso o cargo nгo esta de 1 a 5, envia a mensagem abaixo:
    {
        SendClientMessage(playerid, COR_ERRO, "Cargos de 1 a 5");
        return 1;
    }
    return 1; //Returnando a 1, nunca se esqueзa!
}

CMD:demitir(playerid, params[])
{
    new id, motivo[128], string[128], playername[MAX_PLAYER_NAME], idname[MAX_PLAYER_NAME]; //Criando variaveis :P
    if(pDados[playerid][Cargo] != 6) return SendClientMessage(playerid, COR_ERRO, "Vocк nгo й lнder."); //Verifica se o player que digitou o comando й lider
    if(sscanf(params, "ds", id, motivo)) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "Este jogador nгo estб online."); //Verifica se quem serб demitido estб online
    if(pDados[id][Organizacao] != pDados[playerid][Organizacao]) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "Vocк nгo pode demitir a vocк mesmo."); //Verifica se o "id" й ele mesmo (playerid)
    pDados[id][Organizacao] = CIVIL; //Seta a organizaзгo do player a CIVIL
    pDados[id][Cargo] = 0; //Seta o cargo od player a 0
    GetPlayerName(playerid, playername, sizeof(playername)); //Geta o nome de quem demitiu
    GetPlayerName(id, idname, sizeof(idname)); //Geta 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 no nego!
    return 1; //Returnando a 1, nunca se esqueзa!
}

CMD:darlider(playerid, params[])
{
    new 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, COR_ERRO, "{00E5FF}Vocк nгo estб autorizado a usar este Comando."); //Verifica se o player estб logado na RCON, se nгo, returna a mensagem
    if(sscanf(params, "ii", id, org)) return SendClientMessage(playerid, COR_ERRO, "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, COR_ERRO, "Este jogador nгo estб online."); //Verifica se o player que iria ser setado lнder estб online
    if(playerid == id) return SendClientMessage(playerid, COR_ERRO, "Vocк nгo pode dar lider a vocк mesmo."); //Verifica se o "id" й igual ao seu (playerid)
    GetPlayerName(id, quemganhou, sizeof(quemganhou)); //Geta o nome de quem ganhou a lideanзa
    GetPlayerName(playerid, quemdeu, sizeof(quemdeu)); //Geta 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 orgnizaзгo que foi setada e o "id"
    SendClientMessage(playerid, COR_AZUL_CLARO, 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 lideranзa, o "playerid" e o nome organizaзгo setada
    SendClientMessage(id, COR_AZUL_CLARO, string); //Envia a mensgaem formatada para que 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(COR_AZUL_CLARO, string); //Envia a mensagem para todos Online
    pDados[id][Organizacao] = org; //Seta a organizaзгo do "id"
    pDados[id][Cargo] = 6; //Seta o cargo (lideranзa) do "id"
    SpawnPlayer(id); //Spawna o player que rebeu a lideranзa
    return 1; //Returnando a 1, nunca se esqueзa!
}


CMD:equipar(playerid)
{
    if(pDados[playerid][Organizacao] == CIVIL) return SendClientMessage(playerid, COR_ERRO, "Vocк й Civil e nгo pode equipar."); //Verifica se o player й CIVIL, se for returna a mensagem
    if(!IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z)) return SendClientMessage(playerid, COR_ERRO, "Vocк nгo estб no local para se equipar"); //Verifica se o player estб nas coordenadas, se for returna a mensagem
    new ammo = 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, 3, 1); //Dб um cassetete ao player
    GivePlayerWeapon(playerid, 31, ammo); //Dб uma M4 ao player
    GivePlayerWeapon(playerid, 23, ammo); //Dб uma pistola silenciosa ao player
    return 1; //Returnando a 1, nunca se esqueзa!
}

stock GetOrgName(orgid) //stock que geta o nome da Organizaзгo de acordo com a "orgid"
{
    new str[30];
    if(orgid == 0)
    {
        str = "Civil";
    }
    else if(orgid == 1)
    {
        str = "Policia Militar";
    }
    else if(orgid == 2)
    {
        str = "Grove";
    }
    else if(orgid == 3)
    {
        str = "Ballas";
    }
    return str;
}

stock SendFamilyMessage(orgid, cor, mensagem[]) //stock que envia a mensagem para tal organizaзгo de acordo com "ogrid"
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(pDados[i][Organizacao] == orgid)
            {
                SendClientMessage(i, cor, mensagem);
            }
        }
    }
    return 0;
}
Triunfo do SSCANF:
pawn Код:
//Triunfo do SSCAF:
/*Bem, veja o EXEMPLO abaixo:*/
CMD:pm(playerid, params[])
{
    new id, text[128], playername[24], str[128];
    sscanf(params, "ds", id, text) return 1;
    GetPlayerName(playerid, playername, sizeof(playername));
    format(str, sizeof(str), "PM de %s: %s", playername, text);
    SendClientMessage(id, -1, str);
    return 1;
}

Como puderam ver, o sscanf funciona praticamente igual ao format, as diferenзгs sгo que no format usamos por exemplo, %s para letras, %d para ids e %i para numeros, jб no sscanf usamos o s, d e i
A outra diferenзa й que o sscanf nгo precisa de sizeof e ele, vamos dizer assim, organiza o "params" do ZCMD

Usando SSCANF:
Primeiro й claro precisamos da funзгo:
sscanf

Depois a variavel que serб verificada, sendo:
params

Agora, o formato das variaveis que serгo definidas pelas variaveis:
"ds"
(d[ids] como se fosse o %d do format e o s[letras], como se fosse o %s)

Por fim, a variavel que irб armazenar o parametro, de acordo com o formato de cada variavel, se for "s", deveremos usar strings pro causa das letras, caso seja "d" ou "i", podemos usar uma variavel comum que armazena apenas algoritimos nъmericos, ficando:
id, text

CODE Final:
sscanf(params, "ds", id, text);
Reply
#2

Nice Tutorial , vai ajudar uns noob '-' -qq'
Reply
#3

Ajuda muito, bem explicado.
Reply
#4

Valeu ae galera, nao att o tutorial porque estou no celular.
Reply
#5

Legal parabens
Reply
#6

Tуpico atualizado com um BUG de Salvamento corrigido, em algumas horas/dias posto mais sobre ZCMD/STRCMP/STRFIND/FORMAT/VARIБVEIS entre outros...
Reply
#7

Bom tutorial vai ajudar muitas pessoas
+Rep
Vlw
Reply
#8

Quote:
Originally Posted by Schocc
Посмотреть сообщение
Bom tutorial vai ajudar muitas pessoas
+Rep
Vlw
Obrigado .
Reply
#9

Bom Tutorial
Reply
#10

Quote:
Originally Posted by mau.tito
Посмотреть сообщение
Bom Tutorial
Vlwe *-* Comentem ae .
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)