Olá a todos e bem-vindos ao meu primeiro tutorial! Este tutorial é sobre comandos ZCMD, que são realmente fáceis de escrever e são fáceis de explicar! Cada parte inclui alguns comandos, explicados passo a passo! Hoje, vou mostrar a você estes comandos:
- O simples "energia / cura" -CMD
- O "chute" -CMD
- O "ban" -CMD
- O "clearchat" -CMD
- O -CMD "congelar / descongelar"
Requisitos:
- Conhecimento básico de "PAWN" - Sistema de
salvamento / registro (incluindo um enum para as informações do jogador)
NOTA: LEIA os comentários dados nos comandos! Vamos rolar!
O comando "/ energia" :
Descrição: O famoso "comando de energia" permite que um jogador, que está em um nível alto o suficiente, volte a encher sua saúde até 100! Este é o comando mais simples, e vou mostrá-lo para você, porque é só o começo!
Em primeiro lugar, vamos escrever este CMD, enquanto também definimos as permissões:
Código:
CMD: energia (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 5) // Não sei o que seu enum inclui e como se parece, o meu está com "pAdmin" definido, que costumava ser o "Adminlevel"! Então aqui nós verificamos, qual nível pode usar este comando, você pode alterá-lo para qualquer nível que você quiser / precisar! { } return 1; }
Agora que definimos a estrutura, temos que dar ao jogador a saúde, se ele tiver permissão para executar este comando:
Código:
CMD: energia (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 5) { SetPlayerHealth (playerid, 100); // se ele for permitido, restaure sua saúde SendClientMessage (playerid, COLOR_GREY, "A saúde foi restaurada para 100."); // e envie a ele a mensagem de sucesso } senão { SendClientMessage (playerid, COLOR_GREY, "Você não está autorizado a usar esse comando!"); // se não, envie a ele apenas a seguinte mensagem } return 1; }
Muito fácil, hein? Agora vamos nos aprofundar um pouco mais:
O comando "/ kick" :
Descrição: O que seria um servidor sem um kick-CMD? Se alguém incomodar você ou está brincando, você pode facilmente expulsá-lo do servidor!
Primeiro, definiremos as permissões novamente:
Código:
CMD: chute (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 3) // Idk novamente como seu enum está definido, no entanto, aqui definiremos as permissões { } return 1; }
Agora, queremos definir o playerid, que podemos chutar, o motivo e os nomes que queremos obter! Em primeiro lugar, você terá que criar este estoque, para que o compilador conheça a função que usaremos! Crie este estoque em qualquer lugar do seu script, mas não em nenhum retorno de chamada!
Código:
estoque PlayerName (playerid) { novo pName [25]; GetPlayerName (playerid, pName, sizeof (pName)); return pName; }
Ok, agora podemos definir coisas:
Código:
CMD: chute (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 3) { novo PID; // define o playerid que queremos chutar novo motivo [64]; // o motivo, colocado em uma string new str [128]; // uma nova string de mensagem novo nome de usuário [MAX_PLAYER_NAME], nome de administrador [MAX_PLAYER_NAME]; // define a função com o nome de jogo que queremos obter GetPlayerName (playerid, Adminname, sizeof (Adminname)); // define a função com o adminname que queremos obter GetPlayerName (PID, Playername, sizeof (Playername)); if (sscanf (params, "us [64]", PID, motivo)) return SendClientMessage (playerid, COLOR_GREY, "USO: / kick [playerid] [motivo]"); // diga ao sscanf se os parâmetros / sintaxe estão incorretos para retornar uma mensagem (PID e o motivo usado aqui) if (! IsPlayerConnected (PID)) // se o ID estiver errado ou não conectado, retorna uma mensagem! (PID usado aqui) return SendClientMessage (playerid, COLOR_GREY, "Player is not connected!"); format (str, sizeof (str), "'% s' foi chutado pelo administrador '% s'. Motivo:% s", nome do jogo, nome do administrador, motivo); // formate a string que definimos para enviar a mensagem, playername e adminname são usados para receber as informações sobre os nomes SendClientMessageToAll (COLOR_RED, str); // envia essa mensagem para todos Chute (PID); // chuta o playerid que definimos } else // se ele não tiver as permissões { SendClientMessage (playerid, COLOR_GREY, "Você precisa estar no nível 3 para usar esse comando!"); // retorna esta mensagem } return 1; }
Muito fácil, se você entende, hein? Você apenas tem que ter certeza de que está usando as variáveis definidas da maneira certa no lugar certo !!
O comando "/ ban" :
Descrição: Este é bem parecido com o kick-CMD, só que não deixa o usuário voltar, enquanto bloqueia seu IP!
Continuaremos como nos outros comandos, primeiro as permissões:
Código:
CMD: ban (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 3) // novamente aqui você deve definir suas próprias enum-infos, no entanto, aqui definiremos as permissões { } return 1; }
Então, vamos definir tudo da mesma maneira novamente, o ID, o motivo, a string para a mensagem e a função para obter o jogador - e o nome do administrador!
Código:
CMD: ban (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 3) { novo PID; // define o playerid que queremos banir novo motivo [64]; // o motivo, colocado em uma string new str [128]; // uma nova string de mensagem novo nome de usuário [MAX_PLAYER_NAME], nome de administrador [MAX_PLAYER_NAME]; // define a função com o nome de jogo que queremos obter GetPlayerName (playerid, Adminname, sizeof (Adminname)); // define a função com o adminname que queremos obter GetPlayerName (PID, Playername, sizeof (Playername)); if (sscanf (params, "us [64]", PID, motivo)) return SendClientMessage (playerid, COLOR_GREY, "USO: / kick [playerid] [motivo]"); // diga ao sscanf se os parâmetros / sintaxe estão incorretos para retornar uma mensagem (PID e o motivo usado aqui) if (! IsPlayerConnected (PID)) // se o ID estiver errado ou não conectado, retorna uma mensagem! (PID usado aqui) return SendClientMessage (playerid, COLOR_GREY, "Player is not connected!"); formato (str, sizeof (str), "'% s' foi banido pelo administrador '% s'. Motivo:% s", nome do jogo, nome do administrador, motivo); // formate a string que definimos para enviar a mensagem, playername e adminname são usados para receber as informações sobre os nomes SendClientMessageToAll (COLOR_RED, str); // envia essa mensagem para todos Ban (PID); // Banir o playerid que definimos } else // se ele não tiver as permissões { SendClientMessage (playerid, COLOR_GREY, "Você precisa estar no nível 5 para usar esse comando!"); // retorna esta mensagem } return 1; }
Também é fácil, não? Quase o mesmo que o "chute" -CMD! Vamos aprofundar um pouco mais no próximo comando!
Os comandos "/ freeze-unfreeze" :
Descrição: Se você congelar um jogador, ele não poderá mais se mover até que você o descongele! (Ou até que ela se desconecte)!
Em primeiro lugar, você precisa ter um sistema de salvamento / registro, que também inclui um enum! Tenho certeza que você tem um, certo?
Código:
enum pInfo { pPass, pCash, pAdmin, pKills, pDeaths } novo PlayerInfo [MAX_PLAYERS] [pInfo];
Este é apenas o MINE, não copie e cole o wild agora, veja se você tem um e, em seguida, armazene a "variável congelada" nele:
Código:
enum pInfo { pPass, pCash, pAdmin, pKills, pDeaths, Congeladas }
Muito bem, agora podemos começar de novo! Definir as permissões em primeiro lugar não seria ruim:
Código:
CMD: congelar (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 4) // configuração de permissões, novamente seu enum-stuff aqui, não pegue o meu 1: 1 { } return 1; }
Agora, não teremos apenas que definir as coisas anteriores, também verificaremos as variáveis do enum e defini-las como verdadeiras, para que o compilador saiba que o player está congelado neste comando!
Código:
COMANDO: congelar (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 5) { novo alvo; // define o playerid que queremos congelar if (sscanf (params, "u", Target)) SendClientMessage (playerid, COLOR_LIGHTBLUE, "USAGE: / freeze [playerid]"); // diga ao sscanf novamente se os parâmetros / sintaxe estão errados para retornar uma mensagem especial if (! IsPlayerConnected (Target)) // se o ID não existe, retorna uma mensagem de erro retornar SendClientMessage (playerid, COLOR_GREY, "ERROR: Player is not connected!"); if (! sscanf (params, "u", Target)) { if (Target == playerid) return SendClientMessage (playerid, COLOR_RED, "ERROR: Não é possível executar este comando em você!"); // Eu não adicionaria esta linha, porque ela não permitirá que você execute este CMD em você mesmo if (PlayerInfo [Target] [pAdmin]> PlayerInfo [playerid] [pAdmin]) return SendClientMessage (playerid, vermelho, "ERRO: Você não pode fazer isso em Admins que estão acima do seu nível!"); // se o jogador em que você está executando este comando tiver um nível superior como você, retorne uma mensagem, você não pode congelá-lo novo tname [MAX_PLAYER_NAME]; // define o novo nome-alvo do playerid GetPlayerName (Target, tname, sizeof (tname)); // obtém o nome de jogo com esta função novo pname [MAX_PLAYER_NAME]; // define o adminname GetPlayerName (playerid, pname, sizeof (pname)); // obtenha o adminname com esta função novo tstring [128]; // define a string para o jogador (vítima) new pstring [128]; // define a string para o administrador que está executando new astring [128]; // define a string para todos os jogadores que estão online format (tstring, sizeof (tstring), "Você foi congelado pelo administrador% s! Você não pode se mover!", pname); // isso está formatando o player-string, enquanto também obtém o adminname format (pstring, sizeof (pstring), "Você congelou o jogador% s (% d)!", tname, Target); // isso está formatando a string adminname, enquanto também obtém o nome de jogo e seu ID (destino) formato (astring, sizeof (astring), "Administrador% s congelou% s!", pname, tname); // isso está formatando todas as strings, enquanto envia esta mensagem para todos e obtém admin- e playername SendClientMessage (Target, COLOR_GOLD, tstring); // envia a mensagem para a vítima SendClientMessage (playerid, TEAM_GROVE_COLOR, pstring); // envia a mensagem para o administrador SendClientMessageToAll (COLOR_LIGHTBLUE, astring); // envia a mensagem para todos TogglePlayerControllable (Target, 0); // com essa função, o player não será capaz de se mover, enquanto estamos usando a variável "Target" como o playerid PlayerInfo [Target] [Frozen] = 1; // IMPORTANTE: estamos obtendo a variável "[frozen]" do enum e definindo seu valor como "1 ', o compilador sabe agora que o player está congelado } } // se ele não tiver permissões, retorne essa mensagem! senão retornar SendClientMessage (playerid, COLOR_RED, "ERRO: Você deve estar no nível 5 para usar este comando!"); return 1; }
O mais importante para você é esta linha:
Código:
PlayerInfo [Target] [Frozen] = 1;Também não foi tão difícil, o "descongelar-CMD" é o mesmo, só temos que definir a variável do enum para "0" para que o compilador saiba que o player ainda está descongelado:
Código:
COMANDO: descongelar (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 5) { novo alvo; // define o playerid que queremos descongelar if (sscanf (params, "u", Target)) SendClientMessage (playerid, COLOR_LIGHTBLUE, "USO: / descongelar [playerid]"); // diga ao sscanf novamente se os parâmetros / sintaxe estão errados para retornar uma mensagem especial if (! IsPlayerConnected (Target)) // se o ID não existe, retorna uma mensagem de erro retornar SendClientMessage (playerid, COLOR_GREY, "ERROR: Player is not connected!"); if (! sscanf (params, "u", Target)) { if (Target == playerid) return SendClientMessage (playerid, COLOR_RED, "ERROR: Não é possível executar este comando em você!"); // Eu não adicionaria esta linha, porque ela não permitirá que você execute este CMD em você mesmo if (PlayerInfo [Target] [pAdmin]> PlayerInfo [playerid] [pAdmin]) return SendClientMessage (playerid, vermelho, "ERRO: Você não pode fazer isso em Admins que estão acima do seu nível!"); // se o jogador em que você está executando este comando tiver um nível superior como você, retorne uma mensagem, você não é capaz de descongelá-lo novo tname [MAX_PLAYER_NAME]; // define o novo nome-alvo do playerid GetPlayerName (Target, tname, sizeof (tname)); // obtém o nome de jogo com esta função novo pname [MAX_PLAYER_NAME]; // define o adminname GetPlayerName (playerid, pname, sizeof (pname)); // obtenha o adminname com esta função novo tstring [128]; // define a string para o jogador (vítima) new pstring [128]; // define a string para o administrador que está executando new astring [128]; // define a string para todos os jogadores que estão online format (tstring, sizeof (tstring), "Você foi descongelado pelo administrador% s! Você não pode se mover!", pname); // isso está formatando o player-string, enquanto também obtém o adminname format (pstring, sizeof (pstring), "Você descongelou o jogador% s (% d)!", tname, Target); // isso está formatando a string adminname, enquanto também obtém o nome de jogo e seu ID (destino) formato (astring, sizeof (astring), "Administrador% s descongelou% s!", pname, tname); // isso está formatando todas as strings, enquanto envia esta mensagem para todos e obtém admin- e playername SendClientMessage (Target, COLOR_GOLD, tstring); // envia a mensagem para a vítima SendClientMessage (playerid, TEAM_GROVE_COLOR, pstring); // envia a mensagem para o administrador SendClientMessageToAll (COLOR_LIGHTBLUE, astring); // envia a mensagem para todos TogglePlayerControllable (Target, 1); // com essa função, o jogador será capaz de se mover novamente, enquanto usamos a variável "Target" como playerid novamente PlayerInfo [Target] [Frozen] = 0; // IMPORTANTE: estamos obtendo a variável "[frozen]" do enum e definindo seu valor como "0", o compilador sabe agora que o player foi descongelado } } // se ele não tiver permissões, retorne essa mensagem! senão retornar SendClientMessage (playerid, COLOR_RED, "ERRO: Você deve estar no nível 5 para usar este comando!"); return 1; }
NOTA: Para criadores de scripts avançados, poderíamos ver após uma desconexão se o player ainda está congelado ou não! Podemos tornar isso muito fácil com o retorno de chamada "OnPlayerSpawn":
Código:
public OnPlayerSpawn (playerid) { if (PlayerInfo [playerid] [Frozen] == 1) // Pegue as informações do enum e verifique se o player ainda está congelado { TogglePlayerControllable (playerid, 0); // Não deixa o jogador se mover SendClientMessage (playerid, red, "AVISO: Você ainda está congelado!"); // Envie-lhe uma mensagem } return 1; }
Não tão avançado ... ^^ Vamos ao último comando, que é mais do que simples, mas útil para ter uma pequena "visão geral" do seu chat:
Os comandos "/ clearchat" :
Descrição: Este comando é muito fácil e também muito útil se você quiser limpar o chat de spam, merda e outras coisas que seus jogadores escreveram! Primeiro, definiremos as permissões novamente:
Código:
CMD: clearchat (playerid, params []) { if (PlayerInfo [playerid] [pAdmin]> = 1) { } return 1; }
Não se preocupe, não precisamos usar 100 funções para limpar o chat, há um truque:
usaremos um loop que enviará 100 "SendClientMessageToAll" e, enquanto a cor estiver definida para branco, parece como o chat foi apagado, porque a string está vazia!
Código:
COMANDO: clearchat (playerid, params []) { if (PlayerInfo [playerid] [pAdmin] <1) return SendClientMessage (playerid, COLOR_RED, "ERROR: Você deve estar no nível 1 para usar este comando!"); { para (novo i = 0; i <= 100; i ++) SendClientMessageToAll (COLOR_WHITE, ""); } return 1; }
Entããão, esse foi meu tutorial simples e pequeno sobre alguns comandos ZCMD, que poderiam ser mais úteis em servidores DM, mas também alguns deles em servidores RP! Espero ter feito bem o meu trabalho e qualquer crítica é bem-vinda!

0 Comentários