Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Autor: "SHARIVAN do clã ZM Brasil (ΖмBя.™ Clan)
- *
- * Descrição:
- * Segunda aula de programação em sourcepawn 1.7.
- * Nesta lição serão abordados os seguintes assuntos:
- * - Manipulação de convars.
- * - Criação de comandos de console.
- *
- * Para maiores informações sobre como programar plugins de sourcemod, recomendo ter as seguintes competências:
- *
- * - Conhecimento de matemática básica, principalmente geometria euclidiana, geometria analítica e vetores.
- * - Lógica da programação
- * - Conhecimento básico e intermediário das linguagens C e C++
- * - Linguagem Pawn
- *
- * Segue abaixo alguns links importantes:
- *
- * Manual do sourcepawn:
- * Pré 1.7: https://wiki.alliedmods.net/Introduction_to_sourcepawn
- * Pós 1.7: https://wiki.alliedmods.net/Introduction_to_SourcePawn_1.7
- *
- * API do sourcemod:
- * Pré 1.7: https://sm.alliedmods.net/api/
- * Pós 1.7: https://sm.alliedmods.net/new-api/
- *
- * Realçador de sintaxe do sourcepawn para Notepad++: https://forums.alliedmods.net/showthread.php?t=120037
- *
- * Pawn Studio: http://sourceforge.net/projects/pawnstudio/
- *
- *
- */
- #pragma semicolon 1
- #include <sourcemod>
- #include <sdktools>
- #define VERSION "1.0"
- // convars criadas ou vinculadas a um plugin devem ter uma variável do tipo/classe Handle associada a elas, porém é recomendável que seja usada a classe (methodmap) ConVar (que é uma subclasse da classe Handle) e por oferecer maior facildade e robustez para acessar as propriedades e métodos para manipulação de convars.
- ConVar g_cvarEnabled = null;
- ConVar g_cvarTimeLimit = null;
- public Plugin myinfo = {
- name = "Aula 2",
- author = "SHARIVAN from ΖмBя.™ Clan",
- description = "Segunda aula de sourcepawn",
- version = VERSION,
- url = "http://www.zmbrasil.com.br/"
- };
- // Forwards
- public void OnPluginStart() {
- // Criação de convars
- g_cvarEnabled = CreateConVar("l2_enabled", "1", "Habilitada/Desabilia o funcionamento deste plugin."); // Cria-se uma nova convar com o nome l2_enabled.
- g_cvarTimeLimit = CreateConVar("mp_timelimit", "45", ""); // Aqui neste caso não é criada a convar mp_timelimit pois ela já existe. Neste caso é apenas atribuído um handle da convar já existente a nossa variável g_cvarTimeLimit de forma que possamos controla-la.
- AutoExecConfig(true, "lession2"); // Carrega o arquivo de configuração deste plugin. Como o primeiro parâmetro passado foi true, caso o arquivo não exista entãO ele será criado automaticamente.
- g_cvarEnabled.AddChangeHook(OnConVarChanged); // Atribui um hook de modificação à nossa convar l2_enabled. Caso ela seja modificada, a função OnConVarChanged será chamada.
- RegConsoleCmd("l2_muda_tempo_do_mapa", Command_ChangeTimeLimit, "Altera o tempo do mapa."); // Registra um comando de console. Este comando estará acessível a todos os jogadores do servidor.
- }
- public void OnClientPutInServer(int client) {
- if (g_cvarEnabled.IntValue == 1) // Verfica se a convar l2_enabled está setada com o valor 1
- CreateTimer(2.0, OnMsgTimer, client, TIMER_FLAG_NO_MAPCHANGE) // Se sim, cria um timer com o intervalo de 2 segundos. O parâmetro TIMER_FLAG_NO_MAPCHANGE especificado nas flags indica que este timer será finalizado em caso de troca de mapa.
- }
- public Action OnMsgTimer(Handle timer, any client) {
- PrintToChat(client, "Fala seu noob!"); // Envia uma mensagem somente para um usuário específico.
- return Plugin_Stop; // O valor de retorno Plugin_Stop dentro de um timer callback sinaliza indica que o timer deverá ser destruído.
- }
- // Hooks
- // Toda função de callback para um hook de evento convar change deve ter a assinatura abaixo.
- public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) {
- if (convar == g_cvarEnabled) { // Verifica se a convar modificada é a nossa convar l2_enabled
- int antigoValor = StringToInt(oldValue); // Realiza uma conversão de uma string para um inteiro.
- int novoValor = StringToInt(newValue);
- PrintToChatAll("O valor da convar l2_enabled foi alterado de %d para %d", antigoValor, novoValor); // Envia uma mensagem para todos os usuários no servidor. Para informações sobre instruções de formatação usados em funções com suporte a formating, veja final do arquivo.
- }
- }
- // Comandos
- // Toda função de callback para um comando deve ter a assinatura abaixo. O parâmetro client é o Client Index de quem usou o comando, args é o número de argumentos passados no comando. O retorno desta função deve ser do tipo Action, caso seja uma convar criada por este plugin então retorne sempre o valor Plugin_Handled.
- public Action Command_ChangeTimeLimit(int client, int args) {
- if (args != 1) {
- ReplyToCommand(client, "Este comando deve conter somente um parâmetro!"); // Envia uma mensagem para o meio no qual o usuário enviou o comando. Se foi enviado pelo chat, a mensagem será enviada par ao chat. Se foi enviada pelo console, será enviada para o console.
- return Plugin_Handled;
- }
- char sValue[16];
- GetCmdArg(1, sValue, sizeof(sValue)); // Obtém o primeiro parâmetro passado pelo comando enviado pelo usuário. Os parâmetros passados por um comando sempre são do tipo string, somente depois deverão ser feitas as devidas validações e/ou conversões em caso de parâmetros numéricos ou que estejam restritos a um conjunto específico de valores.
- g_cvarTimeLimit.SetString(sValue, true, true); // Altera o valor de uma convar.
- PrintToChatAll("%N alterou o valor do tempo do mapa para %s", client, sValue); // Envia uma mensagem para todos os usuários no servidor.
- return Plugin_Handled;
- }
- /*
- *
- * Algumas instruções de formatação. Cada uma delas indica que deverá ser convertido o parâmetro correspondente para:
- *
- * %d - Inteiro para string.
- * %f - Ponto flutuante para string.
- * %s - String (não realiza conversão nenhuma)
- * %N - Client Index para Client Name (nome do jogador usado durante o jogo)
- * %t - Chave para frase traduzida (contida no arquivo de traduções) correspondente a linguagem usada pelo cliente alvo
- * %T - Client Index (ou SERVER_LANG) e Chave para frase traduzida (contida no arquivo de traduções). A diferença deste para o %t é que pode-se especificar qual linguagem será usada para traduzir, se será a do usuário ou do servidor.
- *
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement