Jump to content

Senos

Global Moderators
  • Content Count

    183
  • Joined

  • Last visited

  • Days Won

    8

Reputation Activity

  1. Upvote
    Senos got a reaction from Schrwaizer in Script Intermediário (Aula 1)   
    Scripting Intermediário! - 1
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/  
    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.
  2. Upvote
    Senos got a reaction from Linkz in Happy Birthday! <3   
    Happy Birthday Judas, mkbu95, and Protimus, hehe!
  3. Upvote
    Senos got a reaction from Niunzin in Script Intermediário (Aula 4)   
    Script Intermediário! - 4
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/   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.
  4. Upvote
    Senos got a reaction from Niunzin in Script Intermediário (Aula 3)   
    Script Intermediário! - 3
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/  
    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.
  5. Upvote
    Senos got a reaction from ljsb in Script Intermediário (Aula 2)   
    Scripting Intermediário! - 2
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/
     
    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.
  6. Upvote
    Senos got a reaction from braindevel in Script Intermediário (Aula 1)   
    Scripting Intermediário! - 1
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/  
    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.
  7. Upvote
    Senos reacted to Ind in Regras (em Portugues)   
    Agradecimento especial ao mkbu95 por traduzir
    (Jan 24th 0'13). Editado em (Mar 16th 0'16): corrigido formatação.


    Enquanto nós tentamos não tornar o fórum uma prisão federal, há algumas regras que apreciaríamos que fossem seguidas à risca para tornar sua experiência no Hercules a melhor possível. Todos os membros são esperados a seguir estas regras ou punições variando de um alerta verbal, aumento da barra de alerta, restrição moderativa (um moderador terá que aprovar seus posts), suspensão de postar (poderá ver o fórum mas não postar ou criar tópicos) e suspensão do fórum (não pode ver o fórum nem postar) poderão ocorrer.
     
     
    Orientações Gerais na Criação de Tópicos Tópicos não devem conter SPAM. Spam são posts de uma palavra, posts sem relação ao tópico, ou posts duplas/triplas sem motivo. Responder na seção incorreta também não será tolerado. Posts na seção Off Topic serão tratadas como exceção. Tópicos duplicados não são permitidos. Crie seu tópico uma única vez, na seção correta. Caso você crie um tópico acidentalmente na seção errada, use o botão Report para denunciar seu próprio tópico, nossos moderadores irão cuidar disto para você. Tópicos nas seções de suporte podem receber posts seguidos com maiores informações não menos do que 24 horas depois do seu último post; se você possuir novas informações em menos de 24 horas, edite seu tópico. Reviver tópicos mortos é proibido ao menos que haja algo construtivo para acrescentar ao tópico. Caso contrário, não o faça, afinal o tópico está morto por um motivo. Se um link estiver quebrado, envie uma Mensagem Pessoal (PM) ao membro que a enviou originalmente, não responda o tópico dizendo que 'o link está quebrado', pois será considerado spam.  
    Assinaturas e Avatares
    Assinaturas não devem exceder 650 píxeis em largura e 150 píxeis em altura no TOTAL. Isto inclui imagens e textos. Assinaturas não devem conter links para warez, esquemas para ganhar dinheiro, nudez ou qualquer coisa de caráter obsceno. Avatares não devem possuir natureza imprópria, e.x.: nudez ou qualquer coisa de caráter obsceno. Assinaturas e Avatares podem ser removidos por um moderador dependendo de seu conteúdo. Entenda que todas as regras do fórum também se aplicam a sua assinatura, seu avatar e seu título.  
    Idiomas
    O uso do inglês é obrigatório em qualquer seção em inglês. Caso tenha problemas em se comunicar em inglês, utilize a área internacional dedicada a um idioma de sua compreensão.  
    Regras Gerais de Etiqueta do Fórum
    Não faça respostas ou tópicos todo em maiusculo, nem use um número excessivo de emoticons, ou qualquer coisa que torne a leitura do tópico ou resposta difícil ou incômoda de ser realizada. Abuso de qualquer tipo não será tolerado. "Trollar" e "Flamear" outros usuários também não é permitido. Criar uma nova conta se a sua atual conta estiver banida não é permitido. Ao fazer isto a sua conta será banida instantaneamente. Links direcionando para pornografia, nudez, warez ou esquemas para ganhar dinheiro não são permitidos. Não faça o trabalho de um moderador se você não for um. Utilize o botão Report (disponível no canto inferior direito de cada resposta). Divulgação de qualquer tipo (exceto na seção de Divulgação e as seções de Divulgação das seções das áreas internacionais) é proibida. Pedir dinheiro (esmolar) via Mensagem Pessoal (PM) ou no fórum não será tolerada. Não edite seu post ou tópico para remover sua dúvida quando seu problema for resolvido.  
    Área para Serviços Pagos
    Novos tópicos na área Paid Services são invisíveis até que haja aprovação por um administrador.
    Membros só poderão possuir assinaturas com serviços pagos ou tópicos e posts feitos no fórum caso o tópico seja aprovado na seção Paid Services. A seção Paid Services é para única e exclusiva divulgação de seus Serviços Pagos. Não faça divulgação de seu servidor (Ragnarok Online). Uma exceção será aberta caso você queira usar um link para um servidor como referência de trabalho (design que você criou, ferramentas, etc). Não se aplica a serviços de modificações na source; apenas use o referido código. Todos os Serviços Pagos sérios devem possuir HTTPS em partes sensíveis da webpage (incluindo, mas não limitado a: formulários que coletam senhas, informações pessoais, e informações de pagamento). Todos os provedores de hospedagem devem possuir um webpage onde os usuários possam requerir serviços de você. Se você estiver oferecendo modificações na source ou em scripts, ou serviços sítio/gráficos, o sítio é opcional.  
    Que tipos de serviço são permitidos?
    Hospedagem de Servidores (VPS, webhosting) Serviços de Modificações na Source ou em Scripts Serviços Gráficos (mapas, sprites, web design, etc.) Serviços de Programação de Sites  
     
    Estas regras estão sujeitas à mudanças.
    A quebra de uma regra irá levar a uma infração/alerta. Três infrações resultam em banimento temporário e cinco irão resultar em banimento permanente. Dependendo das circunstâncias, um banimento permanente pode ser dado a qualquer momento. Você pode apelar sobre qualquer ação tomada por um Moderador ou Moderador Global contra você por Mensagem Pessoal (PM). Você dever ter uma razão válida e um link para o que você está apelando. Não envie uma mensagem ao Moderador que realizou a ação contra você, é provável que você se involva em maiores problemas.  
    As regras acima são enfasadas pela Equipe Hercules, respeite a Equipe e suas decisões.
  8. Upvote
    Senos got a reaction from JulioCF in Happy Birthday! <3   
    Happy Birthday Judas, mkbu95, and Protimus, hehe!
  9. Upvote
    Senos reacted to jTynne in [Added Feature] jTynne's @go Command Alternative (.TXT Format!)   
    jTynne's @go Command Alternative In .txt Format!
    This is my custom alternative to @go that allows end users the ability to EASILY add/change @go locations on the fly without the need to edit any source files OR recompling/rebooting their server. This is a highly customizable script that is pretty straight-forward in its coding. You can easily add in or adjust existing @go locations in seconds.

    Please Note: This will replace the default @go command when loaded in-game!

    Instructions / Customization
    To use? Simply upload and @loadnpc the file in-game and @go will be modified. If you wish to add in a new @go location, all you have to do is add a new entry following the format noted below:

    if(@warp$ == "35" || @warp$ == "ecl" || @warp$ == "ecla" || @warp$ == "eclag" || @warp$ == "eclage") { callsub Process,"eclage",110,39,0,0; }
    if(@warp$ == "36" || @warp$ == "ser" || @warp$ == "sere" || @warp$ == "seren" || @warp$ == "serenglade") { callsub Process,"serenglade",34,82,0,0; }

    As noted in the text in red above, you add in a number higher than the current highest value (in the script currently, Eclage is 35, so to add in a custom location, simply add in a value of 36, customize the text based warp strings you want (for @go 36, in the above example, you can either use @go 36 or @go ser @go sere @go seren or @go serenglade, and all will teleport you to the same location of serenglade <34,82>).

    Planned for future releases:
    - Additional options GM's can set for the command in the header. (Re-use delay, price per use option)
    - Mapflag check for nowarp and nogo mapflags.
    - No usage while dead.

    Version History : Current Version 2.0

    2.0 Dec 31st, 2012 : http://www.justintfields.com/rAthena/scripts/gobind_v2.txt

    1.0 Dec 29th, 2012: http://www.justintfields.com/rAthena/scripts/gobind.txt


    Please report any bugs you may find, and/or if you have any requests / suggestions for the script as a response to this thread. Thank you!

    (Please +1 me if you enjoy this script~)
  10. Upvote
    Senos got a reaction from Schrwaizer in Script Intermediário (Aula 4)   
    Script Intermediário! - 4
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/   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.
  11. Upvote
    Senos got a reaction from Schrwaizer in Script Intermediário (Aula 3)   
    Script Intermediário! - 3
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/  
    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.
  12. Upvote
    Senos got a reaction from Schrwaizer in Script Intermediário (Aula 2)   
    Scripting Intermediário! - 2
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/
     
    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.
  13. Upvote
    Senos got a reaction from JulioCF in Script Intermediário (Aula 1)   
    Scripting Intermediário! - 1
    Lista de Aulas:
    Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/
    Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/  
    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.