Jump to content

Senos

Global Moderators
  • Content Count

    183
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by Senos


  1. Script Intermediário! - 7

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     
    Bom, nesta aula ensinarei a utilizar as operações matemáticas, comparações, e condições (Baseado na linguagem C). Segue abaixo os tópicos que ensinaremos:
    • 1.0 Operador de igualdade
    • 2.0 Operadores aritméticos
    • 3.0 Operadores lógicos
    • 4.0 Operadores condicionais

     

    1.0 Operador de igualdade

     

    É um operador super comum em todas as linguagens de programação, esse operador (=) faz a variável da esquerda assumir o valor da variável da direita, ou expressão (caso for string), porém, no script nós NÃO utilizamos esse tipo de operador, e fazemos uma soma direto, utilizando a vírgula, vide o exemplo:

    set @var, @var + 2; // O conteúdo de @var é aumentado em 2!

     

    Simples, não? O operador de igualdade em C ficaria assim:

    var = var + 2; // O conteúdo de var é aumentado em 2!

     

     

    2.0 Operadores aritméticos

     

    Bom, são os operadores mais usados simplesmente na linguagem de script, tabela:

    S8zLR9h.png

     

    Exemplo com variável:

    set @variavel, 2;if (@variavel >= 3) {	// Isso aqui nunca aparecerá pois @variavel que é igual a 2, nunca será	// maior ou igual a 3, logo essa parte aqui se torna falsa, e pulará o if.    mes "Essa condição é falsa!";	close;}mes "A condição acima é falsa!";close;

     

    Outros exemplos agora sem variável:

    if (2 >= 3) {	mes "Isso nunca aparecerá (pois não é verdadeiro) porque 3 não é maior ou igual que 2.";    close;} mes "O valor é falso!";close;

     

    Agora vai da sua lógica saber utilizar os comandos da maneira como quiser e como necessitar em seu script!

     

     

    3.0 Operadores lógicos

     

    As vezes são usados normalmente com expressões booleanas (acho que o Dubugras explicou isso uma vez no Cronus), isto é, expressões que retornam verdadeiro ou falso (1 ou 0 por exemplo), para fins de testes em declarações condições.
     
    && (E lógico)
     
    Retorna verdadeiro se todos os operadores forem verdadeiros e falsos nos demais casos, por exemplo:
    if (1 < 2 && 2 > 1);  // 1 é menor que 2, e 2 é maior que 1.

     

    || (OU lógico)

     

    Retorna verdadeiro se todos os operadores forem verdadeiros e falsos nos demais casos, por exemplo:
    if (1 < 2 || 2 > 1);  // 1 é menor que 2, ou 2 é maior que 1.

     

     

    ! (NÃO lógico)
     
    Retorna verdadeiro se ele é falso e vice-versa, por exemplo:
    set @variavel, 1;if (!@variavel); // A variável NÃO é igual a 1.
     
    Em C, se fizemos só isso bastaria: 
    if (!var); // Ou até mesmo:if (var == 0); // Daria no mesmo!

     

     

    4.0 Operadores condicionais

     

    Temos uma forma genérica, por exemplo.
    <variável>, (expressao 1) ? (expressao 2) : (expressao 3);

     

    Em if poderiamos fazer simplesmente:
    if (var == 0) {	set varx, 2;} else {	set varx = 3;}

     

    Agora poderiamos otimizar da seguinte maneira:
    if ((var == 0) ? 2 : 3));

     

    Com certeza depois de almejar mais scripts, de fazer modificações ou até mesmo elaborar seus própios scripts, verão que são coisas extremamente simples de entender e até mesmo praticar! ;)


    _____________________________________________________________
     
    Fim do tutorial, criado por Wolf!

  2. Reallly a very good idea, and:

    We want Hercules to stand out, with that in mind we've been planning features exclusive to Hercules, features other projects won't be able to merge. And how is that even possible? features that will integrate with our forum is one example of them. For example a feature capable of automatically looking for new updates in scripts/modifications downloaded from our upcoming downloads section.

     
    This for me is the best part, innovation for Hercules, ambitions for the project grow is really cool. 
     
    Onward!!!

  3.  

    Oh, you want the Group Names listed on the footer of the Board? (i.e. Administrator, Core Developer, etc.)

     

     

     

     

     

    I find it interesting that has the name of the groups of staff in footer of the forum, because it is easier to manupulate who enters and leaves the theam and see who is really in a faster way.

     

     

     

     

     

     
    Yes yes, I find it interesting, do not you think?

  4. So okay, is more a matter of habit even this type of structure.
    Area not think useless, because i like a lot of help in this area.
     
    But ok, thanks!
     
    What about:

     

    I find it interesting that has the name of the groups of staff in footer of the forum, because it is easier to manupulate who enters and leaves the theam and see who is really in a faster way.

     

    ?

  5. Well, hauhauha, here I am again.  :D
     
    I find it interesting that has the name of the groups of staff in footer of the forum, because it is easier to manupulate who enters and leaves the theam and see who is really in a faster way.
     
    And also adding the Area of Requests and "Database" in support areas. 
    Area of Requests: requests for scripts, database, source, etc ...
    Database: all requests that are resolved are moved to this area,  only after passing if someone ask the same thing.
     
    I hope I was clear, thank you!

  6. Script Intermediário! - 6

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     
    Bom galera, depois de aprendermos loops, arrays, menus dinâmicos e suas teorias, setd e getd, attachrid e detachrid, partiremos então para o Banco de Dados e aprenderemos então a maniuplar as Queries SQL, que é de suma importância para quem gosta de seus scripts mais seguros e com suas respectivas tabelas.
     
    Assunto da aula:
    - Queries SQL
     
    Como de costume, começarei mostrando a sintaxe do comando, e em cima dela, trabalharemos:
    query_sql "sua query de MySQL", <variável> {,<variável>, ...};

     

    Sua Query_SQL: Você colocará a query que você quer executar, você aprenderá neste tutorial como escrever sua query da maneira que quer.
    Variável: Nem sempre é preciso específicar a variável, depende do comando que você utilizará. Você quando for atualizar (update) ou deletar (delete) algo de seu Banco de Dados ou sua respectiva tabela, você não precisará utilizar, agora caso for pegar alguma informação (select), você precisará sim da variável, lembrando que ser for texto ou palavars, precisará da var. string ($) caso contrário for números, não precisará.

     

    Bom, então começaremos a explicar os comandos, comando SELECT:

    SELECT <informacão> FROM <tabela> 

     

    informacão: Como podemos perceber no Banco de Dados, uma tabela é formada por vários campos, neste campo, você indica o nome do campo que você deseja ler. Você pode específicar vários campos para serem lidos, exemplo:
    SELECT <informacão>,<informação>,<informação> FROM <tabela>
     

    Mas lembrando que teremos que específicar uma variável para cada campo no final da escrita da Querie, você pode substituir o nome dos campos por um (*), assim retornará todos os campos da tabela, sem precisar específicar um por um.
     

    tabela: Nome da tabela dentro do Banco de Dados que você gostaria de pegar a informação. 

    Agora vejamos um exemplo utilizando o comando SQL em uma sintaxe Querie: 

    query_sql ("SELECT `user_id` FROM `login`",@nome_do_usuario$);

     

    No caso essa variável @nome_do_usuario$ se tornará uma array, pois não será apenas 1 valor, e sim vários valores pois serão retornados todos os nomes de usuários de jogadores do seu servidor. No caso ficará assim:

    @nome_do_usuario$[0]: Usuario 1@nome_do_usuario$[1]: Usuario 2// Ficará sempre assim, só mudando a index da array, [2], [3], [4], etc...


    Aproveitarei com o comando SELECT, para explicar o comando WHERE, iremos pegar o nome de usuário de um jogador com o ID 1 no Banco de Dados, faremos assim no caso:

    query_sql ("SELECT `user_id` FROM `login` WHERE `account_id`=1",@nome_do_usuario$);

     

    Assim buscaremos uma conta específica e não todas as contas do jogo, simples, não?! ;)


    Temos um conjunto de dois comandos chamados AND e OR, é utilizado junto com o WHERE, vejamos:
    query_sql ("SELECT `user_id` FROM `login` WHERE `level`=99 AND `sex`='M'",@nome_do_usuario$);


    Nesse caso só pegariamos o nome dos usuários dos jogadores que forem level 99 e (AND) do Sexo Masculino. Exemplo com o comando OR:

    query_sql ("SELECT `user_id` FROM `login` WHERE `level`=99 OR `sex`='F'",@nome_do_usuario$);

     

    Agora só pegariamos o nome dos usuários dos jogadores que forem level 99 ou (OR) do Sexo Feminino. Os dois comandos são super simples! 

     

    Temos também o comando ASC (Ascendente) e DESC (Descendente), vejamos:
    query_sql ("SELECT `user_id` FROM `login` ASC"); // Retornaria a lista de nomes de usuários do servidor em ordem alfabética de A para o Z.query_sql ("SELECT `user_id` FROM `login` DESC"); // Retornaria a lista de nomes de usuários do servidor em ordem alfabética de Z para o A.

     

    Comando INSERT INTO: Este comando é para que você possa criar uma nova linha de dados dentro de uma tabela, criando uma nova informação na sua tabela desejada, vejamos:

    INSERT INTO <tabela> (<campos>) VALUES (<valores>);

     

    Vejamos um exemplo:

    query_sql ("INSERT INTO `login` (`account_id`, `user_id`, `user_pass`, `sex`, `email`) VALUES ('2000000', 'test', '12345', 'M','[email protected]')");

     

    Nesta caso, estamos criando uma conta com o account_id 2000000, o nome de usuário test, a senha 12345, sexo masculino, e e-mail [email protected].


    Partiremos então pro comando UPDATE, sintaxe:

    UPDATE `<tabela>` SET `<campo1>`='<valor1>',`<campo2>`='<valor2>';

     

    Não é um comando complicado, com o exemplo passará de complexo para super simples, vejamos:
    query_sql ("UPDATE `login` SET `level`=99 WHERE `user_id`='Wolf'");

     

    Esta queria irá mudar o Nível de GM da conta Wolf para 99, preste atenção, pois caso você não específicasse com o comando WHERE, todas as contas do servidor poderiam ser mudadas para 99, causando um transtorno enorme.

     

    Comando DELETE: Simplesmente faz oque diz, deleta uma informação da tabela, sintaxe:
    DELETE FROM `<tabela>`
     
    Se fizermos simplesmente DELETE FROM `login`, todas as informações da tabela login seriam deletadas, por isso iremos específicar, por exemplo:
    query_sql ("DELETE FROM `login` WHERE `userid`='Wolf'");

     

    Neste caso a conta Wolf será deletada da tabela login do Banco de Dados. Porém não é recomendável deletar a conta desta maneira, pois as informações de chars, itens, e pets ainda ficariam ocupando espaços no Banco de Dados, no caso você teria que deletar tudo manualmente, porém serviu de exemplo.
     
    Comando DROP: Deleta a tabela inteira, sintaxe:
    DROP TABLE `<tabela>`
     
    Exemplo:
    query_sql ("DROP TABLE `login`");

     

    Destrói a tabela login, ninguém mais consegue logar no servidor, e poderá arrecadar muitos problemas. Existe DROP DATABASE também, no caso você deletará uma Database, se você fizer DROP DATABASE `ragnarok`, acabará com o Banco de Dados ragnarok ò_ó.
     
    _____________________________________________________________
     
    Fim do tutorial, posteriormente irei editar esse tópico e adicionar uns exemplos utilizando Querie, mas talvez, pois adicionei diversos exemplos no tutorial. Abraços!!

  7. Remove option Show 'Edit by' line in any board.

     

    But because Wolf?

    - For administrators and moderators have control of members' posts. In case of disputes, discussions, prevent members to edit their posts, not that it will happen, but if it happens.

     

     

    I think only creators of topics in the areas of tutorials should have this option, to edit/update/modify your tutorials.


  8. Script Intermediário! - 5

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     
    Bom, nesta aula estarei ensinando sobre o comando attachrid e detachrid, são comandos mais complexos, porém entendíveis para aqueles que tem atenção na aula e uma boa noção já de script, que já manipulam suas lógicas para fazer da maneira que acha melhor e correto. Irei iniciar então o assunto da aula, e nela criar exemplos, explicações, e explicar a sintaxe do comando.

    Primeiro assunto da aula:
    - Attachrid

    Sintaxe do comando:
    attachrid(<ID Da Conta>);

     

    A função básica desta sintaxe é anexar o RID do jogador ao NPC (script), ou seja, você pode forçar o jogador a executar as funções do npc.

    Vejamos um exemplo:

    -	script	Olá	-1,{	OnOla:		attachrid(2000001);		mes "Olá";		mes "Você foi forçado a ver o olá do script! ^~";	close;}


    Agora caso aplicarmos desta forma, teremos um problema. O jogador pode estar offline, então poderá gerar aquele erro no map-server "Player not attached (Jogador não atachado, não encontrado)". Para resolvermos esse problema, teremos que fazer uma verificação, veja:

    -	script	Olá	-1,{	OnOla:		if (!attachrid(getcharid(3,"Nick_do_Jogador")) {			// O jogador está offline, logo já evitaremos o erro			// do player not attached.			end;		}		//Caso o jogador esteja online:		mes "Olá";		mes "Você foi forçado a ver o olá do script! ^~";		close;}

     

    O comando attachrid retorna 0 se o jogador estiver offline e 1 para online. Pegamos no snippet feito, o account_id do jogador pelo nome/nick dele.


    Esse comando é de grande utilidade pois podemos criar sistemas com tempos, no qual podemos anexar o jogador ao tempo com seu limite. Podemos criar loops em função do attachrid para anúncios, verificar se o jogador está online não, tudo isso ligado a apenas um jogador (o jogador anexado). Pegar o nome de quem matou ou morreu, aplicar um comando neste unico jogador, etc...

    Alguns exemplos com attachrid:

     

    1. Primeiro exemplo:

    OnPCDieEvent:		set .BaseLevel, BaseLevel;	attachrid(killedrid); // Verifica todos os jogadores que matou o outro [Killerdrid = variável pronta para jogadores que matam].	set .exp, (100*.BaseLevel/BaseLevel); // No caso isso dará um bônus baseado no BaseLevel do cara multiplicado 100x.	getexp .exp, .exp;end;

     

    Dará experiência a um jogador que matou o outro.

     

    2. Segundo exemplo:

    	mes "Gostaria de participar do evento?";	if (select("Sim:Não")==2) close;	next;	set $@rids_salvos[.i], getcharid(3);	set .i, .i +1;	warp "",0,0;	end;

     

    Isso salvará o rid do jogador no script, para que possa utilizar posteriormente, caso queira limpar o rid salvo, só fazer:

    OnPcLogouEvent:	set $@rids_salvos[.i], 0;end;

     

    Bom, aí no caso quando o jogador deslogar a variável $@rids_salvos será zerada, e não terá mais valor. Mas aí vai de acordo como você quiser, eu coloquei para quando o jogador deslogar, você bota opcionalmente como você quiser, foi apenas um exemplo.
     

     

    Segundo assunto:
    - Detachrid
     

    Detachrid faz o contrário do attachrid, esse dexanexa o jogador do script. Então comandos para jogadores que necessitam de attachs, não passam mais a funcionar. Como forçar o jogador a falar com o script, ou por exemplo você atachar ele ao script, e no final desanexá-lo, você terá que anexá-lo denovo para usar funções que anexam ele ao script, caso queira criar funções dos exemplos que eu fiz.

     
    Não tenho muito oque dizer sobre este comando, é básicamente isso, e sintaxe dele é simplesmente:
    detachrid;

     

    Bom, é simplesmente isso, um abraço!
    Wolf.


  9. Interesting idea, but it could for maps gvg/pvp could be optional, know? Example:
    // 0 or false to disable, 1 or true to enableenable_maps_pvps: 0 enable_maps_gvgs: 1
     
    Just an example and suggestion. ;)

  10. Organized, "optimized" and removed the labels, if you want to use:

     

    prontera,155,181,5    script    Clahador    757,{	 function getPremiumTime;	mes "[^FF0000Clahador^000000]";	mes "Hello "+strcharinfo(0)+", I'm ^FF0000Clahador the butcher^000000.";	mes "I will be of help if you need something.";	next;	mes "[^FF0000Clahador^000000]";	mes "Oh! you need help?";	mes "What kind of help do you need?";	next;	switch (select("Newbie here:I'm a ViP!:Nevermind")) {		case 1:			mes "[^FF0000Clahador^000000]";			mes "Did you already claim your free items in the ^FF0000Freebies NPC^000000???";			if (select("Sim:Não")==2) {				mes "[^FF0000Clahador^000000]";				mes "You should get 'em!.";				mes "It will help you on the start.";				mes "I will send you to the freebie giver.";				next;				warp "prontera",155,183;			}  else {		 		mes "[^FF0000Clahador^000000]";				mes "Haha, i hope you like those items.";				next;				mes "By the way, you can earn zennies through quests like going to daily quest, request board, and many more!";				mes "Did you know that you can have many zennies you want if you gonna hunt more rare items?";				mes "Try it!";			}			 break;		case 2:			mes "[^FF0000Clahador^000000]";			mes "Oh you avail our ViP Ticket!";			mes "Thank you!";			next;			mes "[^FF0000Clahador^000000]";			mes "Your ^0055FFPremium Time^000000 Left : "+getPremiumTime( #Premium );			mes "You should maximize it";			mes "Grind your skills and hunt now!";			break;		case 3:			mes "[^FF0000Clahador^000000]";			mes "Thank you!";			mes "Come Again!";			break;	}	 close;}

  11. Logo logo irei reformular o tópico das mesmas, não gosto dessas coisas tão coloridas assim, é porque a 1 e a 2 foram as primeiras que fiz, já a 3 e a 4 já fiz direto aqui no Hercules e ficaram mais organizadas, pois gosto desse tipo de code que contém no rA/brA e aqui, já no Cronus não tem, então preferi fazer com imagens.

    Muito obrigado, e caso queira redistribuir no brAthena ou algo do tipo, fica a dispor!

     

    Reformulei os tópicos já, deixei mais limpos, retirei as corzinhas que me incomodavam, acho que agora está melhor!!


  12. Script Intermediário! - 4

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     

    Bom, como já estou no processo de criações de aulas de script, começarei a ensinar sobre setd's e getd's, na qual muitos acham comandos super difíceis de entender, deixarei bem claro, extremamente fáceis, o manuseio dos comandos são simples, passam a ser complexos quanto a códigos grandes, porém nada que uma boa estudada nos ajude a compreender cada um dos dois.

     

    Primeiro assunto da aula:

    - Setd e Getd

     

    Sintaxe do comando Setd: 

    setd "<nome da variável>",<valor>;

     

    O comando setd funciona igualzinho ao comando set, a diferença é que o nome da variável é identificada com string.
     
    Exemplo:
    set $var$, "Poring";
    setd "$var$", "Poporing";mes $var$; // Aparecerá Poporing
    setd "$" + $var$ + "123$", "Poporing é legal";mes $Poporing123$; // Vai mostrar Poporing é legal

     

    Sintaxe do comando Getd: 

    getd("<nome da variável>"); 

     

    Retorna uma referência da variável (setd), vejamos:
    set getd("$variavel_referencia"), 1;set @i, getd($digimon);

     

    Esse exemplo criará uma variável de acordo com o nome do jogador atachado:
    set "@var" + strcharinfo(0), 135;
     
    Se o nome do jogador for "Mijo" então o nome da variável será @varmijo, certo?
     
    Para checar se o jogador tem uma variável como essa, use o getd, veja:
    if (getd("@var"+strcharinfo(0)) > 0) {	set Zeny, Zeny + getd("@var"+strcharinfo(0)); }end;
     
    Dará o Zeny de acordo com o valor da variável acima, no caso, 135.
     
    Um outro exemplo: 
    OnHour22:for (set @i,0; @i <= getarraysize($users_on); set @i,@i+1) {	setd $users_on[@i]+"_var, 1;}
     
    Onde $users_on é definido quando o jogador loga com o getcharid(0).
    A variável seria: 00000000_var
     
    Ou seja, poderiamos saber o valor que um char específico tem nessa variável:
    if (00000000_var == 1) mes "O jogador de id 00000000 tem a var como 1";

     

    Se fosse um jogador atachado com o strcharinfo como no exemplo mais acima, dariamos para fazer o if de outra maneira, mas estamos falando de ID da conta, e não de nome de char, algo totalmente diferente.
     
    Mais continuando no if feito acima, poderiamos definir outro valor para ela:
    set 00000000_var,1;
     
    Daria no mesmo que utilizar o Getd ou Setd.
     
    Iremos pegar essa variável quando o jogador logar novamente:
    OnPcLoginEvent:if(getd(getcharid(0)+"_var") == 1)) //Quer dizer que o jogador estava on na hora =){	dispbottom "Parabéns!";	getitem 501,1;	setd $users_on[@i]+"_var,0;}end;
     
    É simples, setd define uma variável customizada e getd retorna o valor dessa variável customizada.
     
    Simples, e novamente, um abraço!
     
    Wolf.

  13. Script Intermediário! - 3

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     

    Como prometido, estarei começando com a terceira aula de script (Menu dinâmico e suas teorias).

     

    Primeiro assunto da aula:

    - Menus dinâmicos e suas teorias

     

    Menus dinâmicos são essenciais hoje em dia justamente pelo fato da necessidade de otimizações e dinâmismo que podemos dar aos scripts. 

    No meu método de seleção e aprendizado, utilizaremos uma string que será como se você estivesse digitando no select suas opções na hora, facilitando muito.
    Claro, existem diversas formas de fazer um menu dinâmico, porém essa é a mais simples e prática utilizada hoje em dia.
     
    Então partiremos para criar um menu.
    Para começar, precisamos ter uma variável do tipo STRING, na qual guardaremos as intruções do select.
    //Faremos ela sem valor nenhum inicialmente, para deopis fazer um loop e adicionar as funções.//Observem que usei uma variável temporária do npc para essa função (mais simples e rápido)set .@cmd$,"";
     
    Agora precisamos e setaremos uma lista de opções que serão usadas no seu menu (pode ser feito antes do .@cmd$, caso você queira):
    setarray .@opt$[0],"Comprar","Vender","Trocar";

     

    Nunca coloque opção de cancelar nessa array, ela será posta mais tarde.
    Então iniciamos nosso loop que fará a linha de comando, vejamos:
    for(set @i,0; @i <= getarraysize(.@opt$); set @i,@i+1)	set .@cmd$, .@cmd$+.@opt$[@i] + ":";

     

    Entendendo:
    .@cmd$+.@opt$[@i]+":"

     

    .@cmd$ = Prepara a variável que contém a linha do comando atual para adição de mais um item no menu.
    .@opt$[@i] = É a opção a ser adicionada na linha de comando.
    ":" = É o que separa as opções em um select. (Como qualquer select sem dinamização, só para exemplo).
     
    Agora para finalizar, adicionaremos por último:
    set .@cmd$, .@cmd$+"Fechar"; //Esse fechar é a última opção de nosso (seu) menu.

     

    Finalmente colocamos o select que usará a linha de comando, fazendo o código ficar desta maneira:

    set .@cmd$,"";setarray .@opt$[0],"Comprar","Vender","Trocar";for(set @i,0; @i <= getarraysize(.@opt$); set @i,@i+1)	set .@cmd$, .@cmd$+.@opt$[@i] + ":";set .@cmd$, .@cmd$+"Fechar";select(.@cmd$);

     

    Para utilizar o snippet utilize uma forma normal, com a variável retornada por todo tipo de menu, que é a @menu.
     
    Para lembrarmos, veja um exemplo simples:
    select("Oi":"Tchau");if (@menu == 1) mes "Oi";if (@menu == 2) mes "Tchau";

     

    É simplesmente isso, o uso é bem simples como o tutorial, em caso de dúvidas, mande uma PM que ajudarei com toda certeza!

    Um abraço, Wolf.


  14. Scripting Intermediário! - 2

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/


     
    Assunto da aula:
    - Arrays
     
    As arrays não passam de um conjunto de variáveis, que são usados dentro de loops que são For e Whiles como ensinados na aula anterior, podem servir de Banco de Dados, já que podemos guardar/alterar/modificar/remover valores dento delas e certamente economizam certas linhas se bem usadas no script. São uma das melhores ferramentas para scripters hoje em dia.
     
    Array, não possui tradução para português, mas podemos entender como Conjunto de Variáveis, o nome já diz tudo, não? Vamos ver as maneiras certas para a utilização de uma array:

    +==========+======+=======+|Variável  | Norm | Array |+==========+======+=======+|$Str$     | OK!  | OK!   |+----------+------+-------+|$@Str$    | OK!  | OK!   |+----------+------+-------+|@Str$     | OK!  | OK!   |+----------+------+-------+|#Str$     | OK!  | ERRO! |+----------+------+-------+|Str$      | OK!  | ERRO! |+----------+------+-------+|$Int      | OK!  | OK!   |+----------+------+-------+|$@Int     | OK!  | OK!   |+----------+------+-------+|@Int      | OK!  | OK!   |+----------+------+-------+


    E agora temos algumas variáveis que dão erros, caso o uso for desta maneira:

    #str$ - ERROStr$ - ERRO

     
    Porque ocorreram esses erros? o_o
    Simplesmente porque as arrays não podem ser "setadas" à um jogador, por isso existem as variáveis normais. 
     

    Sintaxe da Array:

    setarray <Nome da Array>[<Index>],<Valor>{,<Valor>,...,<Valor>};

     
    Exemplos:

    setarray @i[0],1000,2000,3000,4000;

     

    @array [0] = 1000
    @array [1] = 2000
    @array [2] = 3000
    e @array [3] = 4000
     
    Agora se eu usar após o exemplo anterior (lembre-se, APÓS):

    setarray @array[1],1,2; 

     

    @array[0] = 1000 (Pois o 0 não foi alterado, e somente o 2, 3 se a index anterior for 0).
    @array[1] = 1
    @array [2] = 2
    @array [3] = 4000
     
    Temos o comando cleararray, que limpa a array:

    cleararray <nome do array>[<primeiro valor para alterar>],<valor>,<número de valores para definir>;

     

    Esse comando vai mudar o valor de uma array e ao mesmo tempo adicionar outro. Exemplo:

    setarray @i[0],1000,2000,3000,4000;

     

    cleararray @i[0],0,6; Isso transformará todos os valores em 0.
    cleararray @i[0],245,1; Isso transformará o valor do @i[0] == 1000, para 245.
    cleararray @i[1],345,2; Isso transformará o valor do @i[1], @i[2] para 345.
     
    Simples, não? Ensinaremos então, o comando getarraysize que é muito útil também no Loop (For):
     
    Essa função retorna o número de valores que estão contidos dentro de uma array, no caso, um valor específico. Exemplo:

    setarray @i[0],1000,2000,3000,4000;

    set @i_size,getarraysize(@i); Isso vai fazer com que @i seja igual a 4, pois temos 4 "indexes".
     

    Agora se eu fizer:

    setarray @i[0],1000,2000,3000,4000,0;

    set @i_size,getarraysize(@i); Será de qualquer maneira 4, pois 0 é igual a nada, então não contará.
     

    Existe também o copyarray, como podemos ver a utilização desse:

    copyarray <array de destino>[<primeiro valor>],<array fonte>[<primeiro valor>],<número de elemento a serem copiados>;

     
    Esse comando faz com que você copie o valor de uma array, vejamos:

    setarray @i[0],1000,2000,3000,4000;

    copyarray @i2,@i[0],@i[1]; Essa array @i2 terá o primeiro valor 1000, e o segundo 2000.

     

    Mas porque Wolf? Vejamos, o @i2[0] == 1000, e o @i[1] == 2000, pois copiamos o valor index de uma outra array.
    E os outros valores da array? Se os outros valores da array não foram copiados, retornaram 0 em caso de uso incorreto.

     

    Vamos falar agora do comando DeleteArray. Esse comando vai deletar um VALOR ESPECÍFICO em uma array.

    setarray @i[0],1000,2000,3000,4000;

     

    Agora caso eu usar:

    deletearray @i[0],1;

     

    O deletearray irá DELETAR o valor 1000, e irá mover os outros, se tornando:

    setarray @i[0],2000,3000,4000;

     

    Então @i[0] passará a ser 2000 e não mais 1000, e assim por diante!
     

    Fim da aula de Arrays, e vejamos para finalizar, um exemplo de uso:

    mes "Deseja registrar sua banda em nosso concurso?";if (select("Sim:Não")==2) close;next;input @banda$;setarray $banda$,[getarraysize($banda$)+1],@banda$; // Essa array adicionará o nome da banda (@banda$) na array $banda$.next;mes "Banda registrada com sucesso!";for (set @i,0; @i <= getarraysize($bandas$); set@i, @i+1) {	mes $bandas$,[@i];} set registrado$,@str$; // Isso deixará o jogador registrado permanentemente no script.close;

     

    Agradeço ao Keoy por ter me instruído a criar as aulas, ser meu professor antigamente, e eu por criar as aulas com base nas aulas que ele fazia, adicionando os comandos copyarray, deletearray, cleararray e atualizar o snippet.


  15. Scripting Intermediário! - 1

    Lista de Aulas:

    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/

     
    Olá, meu nome é João Victor vulgo nick é Wolf, e estou criando este tutorial para aprendizado da linguagem script do emulador. São aulas que estavam desatualizadas antigamente no eAthena, que eu me propus a atualizar e adicionar comandos como while, e outros exemplos afim de ajudar a todos da comunidade.
     
    Primeiro assunto:

    - While

     

    No inglês o comando While significa enquanto, funciona da mesma forma que um if (verificação). Utilizando condição como base, ele criará um loop (laço) enquanto o valor que estiver nele for verdadeiro, vejamos um exemplo:
    set @i, 1;while (@i < 100) {	mes "Estou aprendendo loopings em Script!";	set @i, @i +1;} 
     
    Nesse caso, iniciamos o nosso contador que é o While, lembrando que primeiro atribuimos um valor a nossa variável que é igual a 1 (@i). Nosso While avalia se @i é menor que 100, caso for verdadeiro, a condição, ele executará o script, se não for, no caso a condição for falsa, ele sairá do loop (do laço). 
     
    A primeira volta de nosso loop, a instrução é verdadeira, então dentro do loop escrevemos a mensagem e somamos +1 a variável @i, com o operador de incrementação (+). Após terminar, o loop volta e avalia @i com o vlaor 2, se for verdadeiro, rodará mais uma vez, e assim por diante, até que chegue a seu limite e delimite como falsa, para quebrar o loop.
     

    No caso se quisessemos fazer com if, fariamos dessa forma:

    Retornar:if (@i < 100) {	mes "estou aprendendo loops em script!";	set @i, @i +1;	callsub Retornar;}

     

    Como vimos, o comando while verifica primeiro a variável. Já o comando Do While, que iremos explicar agora, faz ao contrário. Mas porquê? Simples, ele executa o código primeiro, e só depois que verifica a variável, se ela for verdadeira, ele executará o código novamente, e não como o while que verifica primeiro para que depois possa executar ou não o script. Veja o exemplo:
    set @i, 1;do {	mes "Estou aprendendo loops em script!";	set @i, @i +1;} while (@i < 100);

     
    Fim da aula de While!
     
    Segundo assunto desta aula:

    - For
     
    A sintaxe (comando) for funciona da mesma maneira que o While, em conjunto com um if. Utilizando uma ou mais variáveis como base, junto com uma condição. Ele cria um loop também, enquanto o valor for verdadeiro ele executa, porém em uma linha só, vejamos:

     for (set @i,1; //Como no While, setamos a variável e seu valor. 

     

    Agora nesse mesmo For, iremos incrementar a condição, como no While, veja:
    for (set @i,1; @i <= 100;

     

    E como no final, iremos adicionar +1 a variável inicial, para que o for possa contar, até chegar o seu valor condicionalmente definido (100), como abaixo:
    for (set @i,1; @i <= 100; set @i, @i + 1)

     

    Isso não fará do script incorreto, mas se você fizer isso e não souber utilizar corretamente o script, fará um loop inifinito, ou seja, executará o script para sempre, sem que ele pare. Utilizamos desta forma quando o script acaba sendo baseado em uma variável inicial, ou mais variáveis. Veja:
    for (set @i,1; @i < 100; set @i, @i + 1) {	mes "Estou aprendendo loops em script!";}

     

    Neste caso ele executará o mes 100x até o valor 100 ser sanado, batido. Vejamos melhor como funciona, se eu utilizasse um if: 
    set @i, 1;Retornar:if (@i < 100) {      mes "Estou aprendendo Loopings em Script!";      set @i, @i + 1;      callsub Retornar;}

     

    Mas pra que isso, se podemos transformar esse if em apenas uma linha? Veja:
    for (for set @i,1; @i < 100; set @i, @i +1) {         mes "Estou aprendendo Loopings em Script!"; }

     

    set @i,0; É o valor inicial da variável base.
    @i < 100; É a condição para o loop se manter.
    set @i,@i+1; É o complemento da variável, a incrementação na variável @i, para que a condição seja atingida.
     
    Acabamos por aqui nossa primeira aula de script intermediário! 

    Agradeço ao Keoy por ter me ajudado sempre, ser meu professor antigamente e me ensinar muito tudo que sei, e me ter dado aulas com base para criação destes tutoriais.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.