Ir para conteúdo

Ot Server

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Ot Server deu reputação a Ryzor em "Math", a matemática por traz do script   
    Math
    A matemática por traz do script

    introdução:

    bem, antes de começar a explicar o math em si, acho melhor explicar que:

    não é recomendado colocar variáveis como x ou y em uma equação
    alem do exemplo acima, funções lua ou de otserv, não podem ser declaradas como nome de variáveis
    "=" é diferente de "=="

    para facilitar, de uma olhada nessa tabela com os simbulos matemáticos em lua :





    + ---------------------- adição - ------------------ subtração *---------------- multiplicação / ---------------------- divisão == ------------------ igualdade ~= -------------- desigualdade > ----------------- maior que >= -------- maior ou igual que < ----------------- menor que <= -------- menor ou igual que ^ ----------------- potenciação O math sozinho: O math, sozinho, serve somente para colocar equações e cálculos em geral. ficando assim : local var = getPlayerHealth(cid) local resultado = math((var-(var/2))) no caso, var é a vida do player, e na variavel resultado e math resolve a equação que está em seu parametro. math.random: O math.random, pode pegar um numero aleatorio entre um minimo e um maximo, pegar um numero de uma tabela, ou ate mesmo randomizar frases e etc... randomizando numeros por min/max : observe resultado = math.random(1,3) no caso ali, 1 é o numero minimo a ser sorteado, e 3 é o maximo. randomizando por meio de tabelas novamente com um codigo de base : tabela = {1, "eu sou de...mai...onese!", " tutorial by Eventide =D ", 2, 3, 5} Sorteio = math.random(1, table.getn(tabela)) resultado = tabela[Sorteio] primeiramente, foi feito uma tabela com o que seria sorteado. depois, declarei que ia sortear em uma variavel (sorteio), usando math.random, o primeiro numero de seu parametro, indica em qual valor da tabela ele começara a contar, o numero pode ser considerado ordinal, mas é escrito como cardinal, veja o exemplo: table = { "1° valor (ordinal), é representado por 1 ( cardinal )", "2° valor (ordinal), é representado por 2 (cardinal)" } outro modo: tab = {"sete", "mih", "exemplo" } R = math.random(1,table.maxn(tab)) rand = tab[R] assim, você cria uma tabela, randomiza normalmente pelo metodo min/max, sendo que o max é o numero de valores contidos na tabela, e depois na variavel rand, você pega a tabela randomizada, com esse metodo, da pra inserir novos valores na tabela futuramente, sendo que estes tambem serão randomizados... math.fmod(x, y) Retorna o resto da divisão de x por y, caso necessario o valor é arredondado para baixo. math.fmod(4,2) -- retornara 0 math.sqrt (x) Retorna a raiz quadrada de x. math.sqrt(9) -- retornara 3 math.pow (x, y) Retorna x elevado a y math.pow(x, 2) -- retornara x² math.abs( ) retorna o valor absoluto do valor contido em seu parametro, ou seja, os números negativos são automaticamente transformados em positivos. math.abs(-x) -- retornara x math.floor (x) transorma um numero decimal em inteiro, exemplo, se x for 1,3 depois de passar pelo floor ele se torna 1. math.floor(1,5) -- retornara 1
    é sempre bom usar isto após uma divisão







    creditos: (60%)Eventide (30%)Merdamen (10%) Dark( pelas dicas... ;p)




    para saber mais, acesse :



    Creditos :

    Eventide
  2. Gostei
    Ot Server deu reputação a Ryzor em Metamétodos   
    Metamétodos

    Bem, talvez não seja útil a todos (ou apenas não vejam a utilidade disso no começo), mas como já tinha feito um tutorial de POO em lua decidi me aprofundar mais e entrar em um assunto que não tem muita gente que sabe, ter um conhecimento intermediário sobre POO ajuda a aprender isso (saber usar a função setmetatable também), mas apenas um complementa o outro como veremos logo a seguir.


    Porque aprender ?

    Se eu dissesse que isso é necessário para programar eu estaria mentindo, mas pode acabar sendo útil, quem sabe para complementar o conhecimento de POO, mas é como eu já disse no outro tópico, aprende quem quiser.
    Metamétodos


    Metamétodos são (obviamente) associados a metatabelas, esses "métodos" são basicamente os eventos que ocorrem quando Lua (a linguagem) executa algumas operações: subtração, divisão, comparações, concatenações etc. É o que chamam em algumas linguagens de sobrecarregar operador (basicamente é a mesma coisa), cada evento tem um nome, adição é "add", exponenciação é "pow", concatenação é "concat", mais a frente eu cito todos e suas funções. Um exemplo, que caso você já saiba POO já deve ter visto é esse:



    Classe = {} function Classe:new() return setmetatable({}, { __index = self }) end Esse __index, já se perguntou o que ele faz ali ? Ele é um metamétodo também, ele simplesmente mostra que é para procurar indices(seja métodos, atributos, oque for) na tabela self (ou seja, nela mesma), e é por isso que quando você cria uma classe você consegue usar os métodos (não confunda com metamétodos), atributos dela. O 2º parametro da função setmetatable é uma tabela de metamétodos. Exemplo: metatable = {} function String(s) return setmetatable({ value = s or '' }, metatable) end function metatable.__add(a, b) return String(a.value .. b.value) end Veja que eu adicionei o metamétodo __add que se refere ao operador matemático de adição, com esse método você pode fazer isso (a seguir), tente executar e veja o resultado: s = String('Hello') print("Valor de 's' é: " .. s.value) m = s + String(' World') print("Soma de duas Strings: " .. m.value) Agora apague tudo e tente dessa maneira sem o metamétodo: metatable = {} function String(s) return setmetatable({ value = s or '' }, metatable) end s = String('Hello') print("Valor de 's' é: " .. s.value) m = s + String(' World') print("Soma de duas Strings: " .. m.value) Vai resultar em um erro. A partir disso você pode criar muitas coisas ! o exemplo acima (o que funciona) também pode ser escrito dessa maneira: function String(s) return setmetatable({ value = s or '' }, { __add = function(a,b) return String(a.value .. b.value) end }) end s = String('Hello') print("Valor de 's' é: " .. s.value) m = s + String(' World') print("Soma de duas Strings: " .. m.value) Eu pulei linha ali no setmetatable apenas pra ficar mais organizado e de fácil entendimento, não que seja necessário. Basicamente, metamétodos são os métodos que fazem operações em metatabelas lua, agora veja o mesmo exemplo acima mas sem o metamétodo: String = {} function String:new(s) return setmetatable({ value = s or '' }, { __index = self }) end function String:add(s) self.value = self.value .. s.value return self.value end s = String:new('Hello') print("Valor de 's' é: " .. s.value) m = s:add(String:new(' World')) print("Soma de duas Strings: " .. m) O uso ficaria um pouco mais complicado e não daria a liberdade de você fazer isso (em negrito): s = String('Hello') print("Valor de 's' é: " .. s.value) m = s + String(' World') + String(' and ') + String('Universe') print("Soma de quatro Strings: " .. m.value) Soma de quatro objetos String ao mesmo tempo (em negrito) --- A tabela com os metamétodos, toma-se class1 como um objeto de uma classe qualquer e class2 como um outro objeto da mesma classe de class1, ou numero, ou string, ou tabela, ou userdata, ou thread ou qualquer outro tipo de dado lua: As cores não estão ali a toa, Função/Nome = o nome e função do metamétodo; Uso = Como se deve usar; Parâmetros = Quais parâmetros o metamétodo possui; Exemplo = Exemplo de quando o metamétodo irá acontecer. Você pode encontrar todas os metamétodos junto a um exemplo nesse link http://www.lua.org/manual/5.1/pt/manual.html#2.8, mas vou citar alguns exemplos: TV = {} function TV:new(marca, polegadas) return setmetatable({ marca = marca or '', polegadas = polegadas or '' }, { __add = function (tv, n) -- Metamétodo de adição if (type(n) == 'number') then return TV:new(tv.marca, tv.polegadas + n) else return TV:new(tv.marca, tv.polegadas + n.polegadas) end end, __mul = function (tv, n) -- Metamétodo de multiplicação return TV:new(tv.marca, tv.polegadas * n) end, __eq = function (tv1, tv2) -- Metamétodo de igualdade if (tv1.marca == tv2.marca and tv1.polegadas == tv2.polegadas) then return true end return false end }) end tv1 = TV:new("LG", 21) tv2 = TV:new("Philips", 19) tv1 = tv1 + 4 -- Adiciono 3 a tv1 print(tv1.polegadas) -- tv1 fica com 25 polegadas tv2 = tv1 + tv2 -- Adiciono as polegadas da tv1 na tv2 print(tv2.polegadas) tv1 = tv1 * 2 -- Multiplico as polegadas da tv1 por 2 print(tv1.polegadas) if (tv1 == tv2) then print('tv1 é igual a tv2 !') else print('tv1 não é igual a tv2') end tv1 = tv2 -- Agora tv1 é igual a tv2 if (tv1 == tv2) then print('tv1 é igual a tv2 !') else print('tv1 não é igual a tv2') end O exemplo é ruim eu sei, mas to sem criatividade D: Explicação detalhada: Agora uma explicação passo a passo de um metamétodo, vou aproveitar o da TV: __add = function (tv, n) -- Metamétodo de adição if (type(n) == 'number') then return TV:new(tv.marca, tv.polegadas + n) else return TV:new(tv.marca, tv.polegadas + n.polegadas) end end e uma soma qualquer: tv1 = tv1 + 4





    O metamétodo tem 2 parametros, tv e n (você pode escolher o nome que quiser), tv e n referem-se a tv1 e 4 na soma respectivamente, ou seja, o __add (linha 1) vai verificar se o n é um numero (linha 2) e caso for ele vai retornar outro objeto da classe TV , com a mesma marca da tv mas com as polegadas somadas ao numero n (linha 3) , mas caso não for um numero (linha 4) vai manter a marca da tv e somar as polegadas da tv e da TV n (linha 5) . Novamente, as cores (e o negrito) não estão ali a toa.

    Bem é um pouco complicadinho, mas todos (a maioria) dos metamétodos seguem esse mesmo padrão de 2 parametros, ai facilita um pouco

    ---


    Espero que alguém tenha compreendido, tentei ser o mais claro possível, caso contrario eu refaço as partes que estão complicadas,
    Qualquer dúvida, sugestão, critica, só postar !
    Quem quiser pode me enviar sugestões de temas para tutoriais sobre scripting e programação, algum assunto que não entendeu, que não viu no forum ou que faltou algo mais detalhado.




    Creditos


    Lwkass
  3. Gostei
    Ot Server deu reputação a Ryzor em Fazendo Praia   
    Fazendo Praia


    Olá pessoal, tudo bom? Gostaria de ensinar a vocês como fazer uma praia simples e legal para seu servidor. É algo fácil de fazer mas poucos têm noção de como!

    Para começar, faça seu mapa base, com água e areia.




    Esse foi o começo, agora você irá colocar também grama e as bordas de praia. As bordas que você deve usar estão entre o id 4644 e o id 4663, tudo bem?

    Posicionem de acordo com o que você vai colocar de grama e tenha cuidado, deixe uma parte com areia, não tão grande e outra com grama. Você pode fazer algo grande, mas no tibia, é bom ir variando entre areia e grama!

    Você também pode colocar bordas grossas de grama em alguns lugares.




    Agora é a hora de detalhar!

    Primeiramente, coloque alguns arbustos e árvores na parte verde do mapa, assim como tufos de grama. Caso queira colocar tufos de grama na areia, você pode, mas sem exagerar.


    Coloque também alguns mangroves mortos (5392 e 5396) na areia e mangroves vivos (5393 e 5397) na parte de grama.


    Coloque palmeiras vivas e mortas, na grama ou na areia, procure não exagerar!


    Coloque algumas conchas (5680) na areia!


    Também na areia, coloque os sand gravel (id 8033 a 8045) em algumas partes!



    Acho que ficou bem legal seu mapa, não é? Como é um tutorial, não fiz algo tão bem detalhado, por isso vou colocar uma outra foto aqui de algo que pode ser também uma praia!



    Assim, é possível notar que você pode colocar alguns cactos, flores e também outros tipos de bordas, mas são coisas que não são essenciais!!


    Creditos :

    Anyur
  4. Gostei
    Ot Server deu reputação a Ryzor em Montanha+Cave   
    Ta bom mano que mane auto-border todos mapper usem , alguns falao que nao mais usam sim
  5. Gostei
    Ot Server deu reputação a Ryzor em Informações que vai/já precisar/precisou   
    Tenho em meu PC algumas listas copm informações para se colocar em algumas funções que não se acha tão facilmente...




    - = Slots = -




    Aposto que muitos já se perguntaram o que por em slot na função getPlayerSlotItem(cid, slot). Abaixo há a resposta:



    CONST_SLOT_HEAD (1) = helmet CONST_SLOT_NECKLACE (2) = necklace slot CONST_SLOT_BACKPACK (3) = backpack CONST_SLOT_ARMOR (4) = armor CONST_SLOT_LEFT (5) = left hand CONST_SLOT_RIGHT (6) = right hand CONST_SLOT_LEGS (7) = legs CONST_SLOT_FEET (8) = boots CONST_SLOT_RING (9) = ring slot CONST_SLOT_AMMO (10) = ammo slot Exemplo de uso: if getPlayerSlotItem(cid, 10).itemid == 2229 then doPlayerSendTextMessage(cid, 22, "Você tem uma caveirano lugar das munições.") end Que seria o mesmo que: if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2229 then doPlayerSendTextMessage(cid, 22, "Você tem uma caveirano lugar das munições.") end Nota: a função getPlayerSlotItem(cid, slot) retorna uma table de três valores: itemid, uid e actionid. description weight defense attack attackspeed weaponType extradef absorbPercentDeath absorbPercentHoly absorbPercentIce absorbPercentEnergy absorbPercentEarth absorbPercentFire absorbPercentPhysical skillShield magiclevelpoints defense weaponType armor slotType weight speed Um exemplo muito usado em scripts de refinamento: doItemSetAttribute(item2.uid,"extradefense",8) Nota: as keys devem sempre ser usadas como uma string, ou seja, entre aspas. Nota2: Aquelas keys listadas não são as únicas, mas são as menos conhecidas. há também aid que representa a action id entre outras(que também precisam ser usadas como string). SKILL_FIST (0) = Fist Fighting SKILL_CLUB (1) = Club Fighting SKILL_SWORD (2) = Sword Fighting SKILL_AXE (3) = Axe Fighting SKILL_DISTANCE (4) = Distance Fighting SKILL_SHIELD (5) = Shielding SKILL_FISHING (6) = Fishing Exemplo: doPlayerAddSkill(cid, 1, 8) Que seria o mesmo que: doPlayerAddSkill(cid, SKILL_CLUB, 8)



    Espero que tenha ajudado


    Creditos

    Antharaz
    - = Keys = - Outra coisa importante são as keys de itens, usadas nas funções doItemSetAttribute(uid, key, value), doItemEraseAttribute(uid, key) e getItemAttribute(uid, key). Abaixo há uma lista com as keys: - = Skills = - Por último mas não menos importante há os skills, onde são usados em funções como doPlayerAddSkillTry(cid, skillid, n[, useMultiplier]), doPlayerAddSkill(cid, skillid, amount) entre outras. Abaixo segue a lista:
  6. Gostei
    Ot Server deu reputação a Ryzor em Player morre e nasce em posiçao errada   
    Cara se for por site pa cria conta em seu ot serv vai em xamp/htdocs/accountmanagement.php

    procure por essa linha > posx < ai vai ter 3 linhas vc poe a posição do seu templo exemplo 160 51 7..

    ajudei ? rep+ ae


    Hospede seu OTServ na LKM www.LkmHosting.com
    Compilação do OT em Linux!! Proteção DDoS!! Equipe especializada!! Migração de Windows para Linux!!
    E muito mais!
  7. Gostei
    Ot Server deu reputação a Ryzor em Como Criar uma Calculadora em C++   
    Primeiramente você deve ter um Editor de Texto e um Compilador.
    Recomendados:
    Windowns - Dev-ccp
    Linux - Gedit e Terminal (G++) Acredito que em todos Linux já venha integrado.

    1º Abra seu Editor(Gedit ou Dev-Ccp) e escreva as libs que vamos usar
    Código: [#include <string> #include <iostream> 2º Digite int main() e Abra seu Escopo.
    3º Agora Vamos Criar as Variáveis:
    Código:   char SkyFail; std::string r("potencia"); double x=0; double y=0; double z=0; Vou Explicar
    SkyFail = a Variavel onde ira guardar o tipo de Conta
    std::string r("potencia"); = Necessário para que você posa usar Letras no IF.
    double z x e y = Onde ira guardar os numeros da soma
    Agora uma parte muito importante:
    Código:   std::cout<<"Informe o X: "; std::cin>>x; std::cout<<"Informe a Operação: (+, -, *, /, %, potencia): "; std::cin>>r; Ira Enviar a Mensagem Informe o X ai você ira falar o numero que quer no X
    Informe a Operação - Você deve informar qual o tipo de operação deseja fazer.
    Lembra do std::string? Usaremos ele agora:
    Código:   if(r.compare("potencia")==0) { std::cout<<"Quadrado(2) ou Cubo(3)? : "; std::cin>>SkyFail; } else { std::cout<<"+, -, *,/ ou %? : "; std::cin>>SkyFail; std::cout<<"Informe o Y: "; std::cin>>y; } Se a Pessoa Dizer que quer fazer potencia perguntara se deseja Quadrado(Digite 2) ou Cubo(Digite 3)
    se não dizer Potência Refaz a pergunta de qual operaçao deseja.
    Agora a Parte Final Onde Estará as Contas.
    Código:   switch(SkyFail) { case '+': z = x + y; break; case '-': z=x-y; break; case '*': z=x*y; break; case '/': z=x/y; break; case '%': z=x*y/100; break; case '3': z=x*x*x; break; case '2': z=x*x; break; } std::cout<<"O Resultado e:"<<z<<"\n"; } Case '+': z=x+y
    Se o player escrever + fazer x+y(Que ja foi pedido antes) e z = resultado
    std::count Irá mostrar o resultado <<z e o <<"\n" serve para que a resposta não fique pregada ao texto do CMD ou Terminal.
    os std::cin>>Serve para Registrar o que você digitou.

    Obs:Se for windowns no final coloque
    system("PAUSE");
    return EXIT_SUCCESS;
    Obrigado
     
  8. Gostei
    Ot Server deu reputação a Ryzor em Manual de Referencia c++/Rapido   
    Referência Rápida de C++

    Variáveis
     
    tipo tamanho(bytes) descrição   char 1 representa um caractere ( valores entre 0 - 255 )
    short int 2 valor inteiro curto
    int 2,4 valor inteiro
    long int 4 valor inteiro longo
    float 4 valor real (ponto flutuante)
    double 8 valor real (precisao dupla)
    long double 10 valor real long (precisao dupla)

    signed indica que o valor possui sinal
    unsigned indica que o valor não possui sinal

    void tipo vazio Constantes

    Constantes do pré-processador:
    (PS: não se utiliza ponto-e-vírgula no final deste tipo de constante)
     
      #define <constante> <valor> exemplo:
     
      #define PI 3.1415926 Tipos Constantes:
     
      const <tipo> <nome> = <valor>; exemplo:
     
      const float PI = 3.1415926; Variáveis Estáticas

    (uma variável estática mantém seu valor inalterado, mesmo quando
    seu escopo não for mais válido)
     
      static <tipo> <nome>; exemplo:
    (variável estática de tipo inteiro)
     
      static int indice; Operadores Matemáticos e de Atribuição
      = atribuição (uma variável recebe um valor ou outra variável)
    + soma
    - subtração
    * multiplicação
    / divisão
    % resto da divisão (módulo)
    ++ incrementa uma variável (em uma unidade)
    -- decrementa uma variável (em uma unidade)
    += x = x + y
    -= x = x - y
    *= x = x * y
    /= x = x / y
    %= x = x % y Operadores Condicionais e Lógicos
     
      == comparação de igualdade (é igual)
    != comparação negada de igualdade (não é igual)
    > maior que
    < menor que
    <= menor ou igual
    >= maior ou igual
    && operador lógico 'E' (AND)
    || operador lógico 'OU' (OR)
    ! operador lógico 'NÃO' (NOT) Estruturas Condicionais

    Comando if
     
      if(<expressão condicional>)
    {
    <comandos>
    }
    else
    {
    <comandos>
    } exemplo:
     
      if(valor > 10)
    {
    cout << "O valor é maior que 10" << endl;
    }
    else
    {
    cout << "O valor é menor ou igual a 10" << endl;
    }
      Comando switch
    (a condição "default:" é executada quando nenhuma das outras é válida)
     
      switch(<variavel>)
    {
    case <valor>:
    <comandos>
    break;
    case <valor>:
    <comandos>
    break;
    ...

    default:
    <comandos>
    break;
    } exemplo:
     
      switch(opcao)
    {
    case 1:
    cout << "primeira opcao" << endl;
    break;

    case 2:
    cout << "segunda opcao" << endl;
    break;
    default:
    cout << "opcao invalida" << endl;
    break;
    } Estruturas de Repetição

    Comando for 
    (o número de repetições é conhecido)
    (pode-se entender a expressão condicional da seguinte forma: 
    "enquanto a expressão for verdadeira repita..." )
     
      for( <inicialização>; <expressão condicional>; <incremento> )
    {
    <comandos>
    }
      exemplo:
     
      for ( i = 0; i < 10; i++ )
    {
    cout << "valor de i = " << i << endl;
    } Comando while
    (o número de repetições não é conhecido, teste no início)
     
      while(<expressão condicional>)
    {
    <comandos>
    } exemplo:
     
      while( var != 1 )
    {
    cout << "Repitindo enquanto var for diferente de 1"<< endl;
    } Comando do while
    (o número de repetições não é conhecido, teste no final)
    (os comandos são executados pelo menos uma vez)
     
      do
    {
    <comandos>
    }while ( < expressão condicional > ); exemplo:
     
      do
    {
    cout << "Repitindo enquanto var é igual a 1"<< endl;
    }while( var == 1); Estruturas de Dados

    Vetores

    Declarando um vetor:
     
      <tipo> <nome>[tamanho]; exemplo:
    (declara um vetor de inteiros com 10 elementos)
     
      int vetor[10]; Acessando/Atribuindo um valor em um vetor:
    ( vetores são indexados a partir do valor 0 (zero)
    em um vetor de 10 elementos, o primeiro elemento é o 0 (zero)
    e o ultimo elemento é o 9 )
     
      <nome>[posição] = <valor ou variável>; exemplo:
     
      vetor[2] = 10; exemplo:
    (Percorrendo todas as posições de um vetor)
     
      for(int i = 0; i < 10; i++)
    {
    vetor = 0;
    } Matrizes

    Declarando uma Matriz:
     
      <tipo> <nome>[número de linha][número de colunas]; exemplo:
    (declara uma matriz de inteiros com 3 linhas e 6 colunas)
     
      int matriz[3][6]; Acessando/Atribuindo um valor em uma matriz:
     
      <nome>[<linha>][<coluna>] = <valor ou variável>; exemplo:
     
      matriz[1][2] = 10; exemplo:
    (Percorrendo todas as posições de uma matriz)
     
      for(int i = 0; i < 3; i++)
    {
    for(int j = 0; j < 6 ; j++)
    {
    matriz[j] = 0;
    }
    } Estruturas

    Uma estrutura permite agrupar uma série
    de tipos de variaveis a partir de um 
    único identificador (nome da variável)
     
      struct <novo tipo> 
    {
    <tipo> <nome>;
    <tipo> <nome>;
    ...
    <tipo> <nome>;
    }; exemplo:
     
      struct registro
    {
    string nome;
    string cargo;
    float salario;
    }; quando se declara um estrutura
    um novo tipo de dado é criado.
    No exemplo anterior o tipo de dado
    "registro" foi criado.
    Para declara e acessar um determinado campo
    desta estrutura deve-se fazer o seguinte:
     
      registro var;

    var.nome = "Fulano da Silva";
    var.cargo = "Programador";
    var.salario = 20000.00; Strings

    Strings armazenam uma cadeia de caracteres
    Em C++ utilizaremos o tipo string da biblioteca STL ( Standard Template Library)
    para isso é necessário adicionar o arquivo de cabeçalho <string> no código fonte

    #include <string>

    A forma de utilização da string do STL é simples, sem 
    ser necessário a preocupação com os seu tamanho e 
    limites de memória.

    A maioria dos operadores funcionam como 
    nos valores numéricos (+=, >, < , ==, etc)

    exemplo:

     
      string texto1;
    string texto2;

    texto1 = "Fulano ";
    texto2 = "da Silva";

    texto1 = texto1 + texto2;
    // agora texto1 possui o texto "Fulano da Silva" Funções

    Declarando funções:
    (se uma função possuir um tipo de retorno diferente de "void"
    é necessário retornar um valor utilizando o comando "return" )
     
      <tipo de retorno> <nome>( <lista de parametros> )
    {
    }

    exemplo:

    int soma ( int a, int b )
    {
    return a + b;
    } Chamando uma função:

    exemplo:
     
      int x;
    x = soma(2,2); Passagem de Parâmetro

    Passagem de parâmetro por valor:

    (a variável declarada na lista de parâmetros recebe
    o VALOR da variável utilizada na chamada da função)
     
      <tipo de retorno> <nome da função> ( <tipo1> <parâmetro1>, ... ,<tipoN> <parâmetroN> ) exemplo:
     
      int soma ( int a, int b )
    {
    return a + b;
    } Passagem de parâmetro por referência:

    (a varíavel declarada na lista de parâmetros passa a ser
    um APELIDO (alias) para a variável utilizada na chamada
    da função: LEMBRE_SE: modificando a variável do parâmetro 
    modifica também a variável utilizada na chamada da função )

    (um '&' é adicionado no final do tipo para representar
    que o parâmetro é uma referência)
     
      <tipo de retorno> <nome da função> ( <tipo1>& <parâmetro1>, ... ,<tipoN>& <parâmetroN> ) exemplo:
      void soma ( int& a, int& b )
    {
    a = a + b;
    } Funções com valores padrão

    ( C++ permite que as variáveis declaradas nos parâmetros
    de uma funções possuam um valor padrão, facilitando a chamada de função )
    (Estes parâmetros devem ser colocados no final da lista, de traz para frente)

    exemplo:
     
      float divide ( float a, float b = 2.0)
    {
    return a / b;
    } ( para chamar a função temos duas alternativas )
     
      float x;
    x = divide(2);
    x = divide(2,3); ( se um valor for omitido, ele assume seu valor padrão )


    Entrada e Saída

    Para a utilização dos operadores de entrada
    e saída de dados é necessário adicionar o arquivo
    de cabeçalho <iostream> no código fonte

    #include <iostream>


    cin

    (le um valor do teclado e armazena em uma variavel)
    (um valor é lido após um <enter> um <espaço> ou um TAB)
    (cin utiliza o operador de extração ">>" )
     
      cin >> <variável1> >> <variável2> >> ... >> <variávelN>; exemplo:
     
      int opcao;
    cin >> opcao; cout

    (escreve na tela valores ou variáveis)
    (cout utiliza o operador de inserção "<<" )
     
      cout << <variavel ou valor> << ... << <variável ou valor>; exemplo:
     
      int var = 10;
    cout << "Fulano da Silva";
    cout << var; Formatando cout

    para formatar a siada de cout se utiliza os manipulador
    definidos no arquivo de cabeçalho <iomanip>
     
      #define <iomanip> Lista dos principais manipuladores:
     
      dec os numeros são exibidos em decimal
    oct os numeros são exibidos em octal
    hex os numeros sao exibidos e hexadecimal

    fixed representação fixa
    scientific representação científica
    setprecision(n) determina que o numero possuirá n digitos de precisão

    endl indica linha nova
    left alinha a esquerda
    right alinha a direita exemplo:
     
      float val = 10.2345;
    cout << fixed << setprecision(2) << val;
    // val será mostrado na tela como "10.23"  
    Espero que ajude alguem!
     
     
    Creditos:
    vyctor17
     
     
     
  9. Gostei
    Ot Server deu reputação a Ryzor em Scripting Dictionary   
    Scripting Dictionary

    Antes de tudo
    Olá comunidade Tibia King. Venho através desse tutorial facilitar a vida de muitos scripters.
    Trago a vocês o Scripting Dictionary. Uma forma mais simples de entender aquelas siglas ou palavrinhas chatas encontradas em todos os scripts e que poucas pessoas sabem o significado ou o motivo de estar ali.
    Vocês também podem ajudar a aumentar o conteúdo desse dicionário enviando-me as palavras que vocês gostariam de serem adicionadas. Para isso, poste nesse mesmo tópico.
    Estou disposto a atualizar sempre que for preciso o tópico, mas, caso algum imprevisto aconteça, a moderação está liberada para editar, adicionando dicas e palavras, sempre seguindo o mesmo padrão de postagem, enfatizando as palavras. Assim teremos uma melhor organização.
    Por fim, gostaria que todos os scripters, experientes ou não, e principalmente os que estão iniciando sua possível carreira na área, dentro da comunidade TK, lessem e corrigissem, se necessário.





    Começando


    array
    Array é uma variável onde há dois ou mais valores. É conhecido como vetor ou lista. Dependendo do caso, também pode ser conhecida como matriz. Cada valor dentro da array tem sua posição que é dada por um índice e que, geralmente, segue uma sequência de números inteiros. Pode ser local ou global.
    Exemplo: local arr = {1, 2, "valor 3", 503, variavelTeste}

    cid
    Normalmente uma variável onde é atribuida a identificação da criatura que, em muitos casos, está executando o script. A sigla cid vem do inglês Creature Identification.
    Exemplo: if isPlayer(cid) == TRUE then

    concatenação
    Éo ato de juntar uma ou mais strings. Em Lua, a concatenação é feita com o simbolo Ponto-Ponto (..)
    Exemplo: print("Skyen".."_".."Hasus")
    A saída gerada por esse comando seria: Skyen_Hasus.

    do
    1. Normalmente usada no começo de funções que exercem alguma ação. Pode ser usada separada (sozinha) ou em alguma condição (ex. if). Tem sua tradução mais próxima da palavra fazer.
    2. É utilizado em conjunto com o FOR, tendo de estar, obrigatoriamente, no final da linha em que há o loop for.
    Exemplo: doSendMagicEffect(pos, effect)
    Exemplo: for i =1, 10 do

    else
    É utilizado em condições. Caso todas as outras não sejam verdadeiras, o else será executado. É sempre usado sozinho e pode ser entendido como "Se não:". É utilizado em conjunto do if.
    Exemplo:

    if 1 > 2 then
    else
    -- script
    end[/code] [b]elseif[/b]
    Assim como o else, é utilizado em conjunto do if e serve para verificar se há outra possível condição. Pode ser entendido como "Ou se:".
    Exemplo:

    [code=lua]
    if 1 > 2 then
    elseif 1 < 2 then
    --script
    end end
    End é utilizado para fechar todas as condições, inclusive o loop for. Significa FIM. Tudo o que abre (if e for) deve ser fechado com um end.
    Exemplo:

    if 1 > 2 then
    else
    -- script
    end[/code] [b]get[/b]
    É muito encontrada em funções, onde sempre é retornado um valor, nulo ou não. Get, em inglês, no nosso caso, tem a tradução mais próxima de obter. As funções que começam com get, nunca estarão sozinhas, e sim, dando valor a alguma variável ou comparado a algo.
    Exemplo: local level = getPlayerLevel(cid)

    [b]if[/b]
    Obrigatoriamente deve ter em um script. Claro, há excessões, sempre há excessões. Serve para impor uma condição. Essa condição pode ser verdadeira ou falsa. Caso seje verdadeira, a continuação do script continuará até encontrar um END, caso contrário, verificará os elseifs e se não for verdadeiro com nenhum, havendo um else, será executado o código a partir dele.
    A palavra if é proveniente do inglês e significa SE.
    Exemplo: if level >= 30 then -- (Se level maior ou igual a 30, então)

    [b]is[/b]
    Is, no começo de funções, é para fazer uma verificação. Sempre é usada em alguma condição e tem seu significado mais próximo da palavra é.
    Exemplo: if isPlayer(cid) == TRUE then

    [b]loop[/b]
    Loop é o nome dado a função que é executada várias vezes até que haja a condição para que ele pare. O mais utilizado é o for, mas também, na linguagem LUA temos o while e repeat.
    Exemplo: for i = 1, 10 do

    [b]parâmetros[/b]
    Parâmetros de uma função são todas as variáveis que se encontram entre os parênteses.
    Exemplo: doRemoveItem(uid) -- uid é o parâmetro da função doRemoveItem

    [b]syntax sugars[/b]
    São as facilidades que a linguagem de programação permite ao programador.
    Exemplo 1:
    [code=lua]
    var = "Skyen Hasus"
    print(string.upper(var)) -- Normal
    print(var:upper()) -- Syntax Sugar
    Ambas as saídas geradas seriam: SKYEN HASUS.

    Exemplo 2:

    teste = function(s) -- Normal
    end
    function teste(s) -- Syntax Sugar
    end[/code] Apesar de parecerem legais, evite usar Syntax Sugars quando desnecessário, pois podem causar problemas se usadas incorretamente.


    [b]set[/b]
    Palavra utilizada no começo de nomes de funções que estabelecem valor de algo. É muito utilizado por iniciantes apenas para quests, mas tem muito mais importância que isso. No português, tem o significado mais próximo de estabelecer. [color=DarkRed](conteúdo a ser ampliado)[/color]
    Exemplo: setPlayerStorageValue(cid, 3001, 1)

    [b]string[/b]
    Corresponde a um texto, as strings sempre são entre aspas.
    Exemplos: "string" ou 'string'
    Note que há dois tipos de aspas, as duas são válidas.

    [b]then[/b]
    Utilizado em conjunto do if ou do elseif. Pode ser entendido como ENTÃO. Sempre será encontrado no fim da linha em que haja as condições citadas.
    Exemplo: if getPlayerStorageValue(cid, 3001) > 0 then

    [b]variáveis[/b]
    Variáveis são valores reservados na memória ram do computador para serem utilizados durante o script. Pode-se entender por variável, quando é encontrado a palavra var ou variable (em inglês). Variáveis podem ser locais ou globais, nesse último caso, tendo uso em mais de uma função.
    Exemplo: local level = getPlayerLevel(cid)
    Exemplo: global estatistica = estatistica + 1


    [b]Você também pode ajudar[/b]
    Perguntando o que você não entendeu é uma forma de ajudar. Poste suas dúvidas aqui, não tenha vergonha.
    Outro modo de ajudar, é postando mensagem com as palavras que você não sabe o significado ou sabe e não está aqui.
    Quero deixar claro que eu não sou expert e não saberei tudo. Pesquisarei e tentarei deixar o mais claro possível todo o conteúdo aqui contido.
    Eu gostaria que esse dicionário funcionasse como a wikipedia, onde todos podem editar e corrigir. Mas como não há a possibilidade de todos editarem, postem.

    Se você editou algo, ponha seu nome.
    Se você postar conteúdo a ser adicionado, seu nome irá ser posto aqui.

    [b]Atualizações[/b]
    05.08.2009 - Adicionado as palavras array, loop e set.
    06.08.2009 - Adicionado as palavras if, else, elseif, end, string (Nord) e then.
    06.08.2009 - Atualizado a palavra do.
    09.08.2009 - Adicionado as palavras concatenação e syntax sugars. (Skyen Hasus)
    18.08.2009 - Atualizado a palavra end. (marcryzius)


    Creditos

    Pivizz
  10. Gostei
    Ot Server deu reputação a Ryzor em Missão por experiencia   
    NPC Mission
    Servidor testado: TFS
    Autor: kawon

    Primeiro crie um arquivo npc_mission.xml dentro da pasta data/npc/.
    E coloque isso:









    Transcrições:

    PLAYER: hi
    NPC: Hello |PLAYERNAME|. You can started 'quest'?
    PLAYER: quest
    NPC: Ok, you can started "first mission"?
    PLAYER: first mission
    NPC: Please bring me 10 "meat"
    PLAYER: meat
    When player finish this mission
    NPC: You finished this mission.
    When player do first once
    NPC: Thank you! You can started "second mission".. (you received 1000 points of experience)
    When player don't have 10 meat
    NPC: You must have more items
  11. Gostei
    Ot Server deu reputação a Ryzor em [LUA] Conhecendo o os.date   
    Este tutorial abaixo foi inteiramente criado por shoeei.

    Introdução
    Vou tentar ajudar vocês com um tutorial de os.date. Sendo sincero, eu aprendi a pouco tempo como usar o os.date, em um exemplar de programação lua. Estou fazendo este tutorial para esclarecer a maioria das duvidas que vocês possam ter, então, por favor, prestem muita atenção se forem ler, e não leiam a menos, que estejam com tempo, paciência e vontade de aprender, pois eu creio que mesmo sendo novato com o os.date, eu vou conseguir fazer um bom tutorial.

    Publico Alvo
    Este tutorial foi feito para ensinar programadores lua, do nível iniciante/intermediário, ou seja, aqueles que já tem algum conhecimento quanto a os.time, variáveis, loopings, e etc...

    Tutorial
    Em OtServers, os.date é pouco explorado, já que sua funcionalidade, é, por muitos, desconhecida. Então vou explicar como você poderia usa-lo em um script para o seu ot. Vamos ver, digamos que você queira que um script funcione a partir das oito da manhã, e pare de funcionar a partir das duas da tarde; para isso, você poderia usar o os.date. O os.date, assim como o os.time, serve para controlar valores de tempo, e retornam os mesmos de acordo com os valores da cpu, a partir de quando o script entra em funcionamento, então, o exemplo acima ficaria assim:
    function onSay(cid, words, param) if os.date("%X") >= "08:00:00" and os.date("%X") <= "14:00:00" then doPlayerSendTextMessage(cid, 22, "Teste") end end No exemplo acima, a talkaction só ira funcionar se for depois das oito da manhã, e antes das duas da tarde, então, dentro deste intervalo de tempo, o script funcionará normalmente, e irá mandar a mensagem "Teste" para o jogador. Já se o script for executado fora deste intervalo, no caso, nada acontecerá.
    Deve-se notar, também, que no script acima, dentro dos parênteses esta isto:
    "%X" Certo, eu acho que eu poderia chamar isto de Pattern; existem vários destes parâmetros que podem ser utilizados, neste caso, eu usei o "%X", pois ele retorna valores do horário na seguinte forma:
    Onde, azul são as horas, vermelho são os minutos, e verde são os segundos; neste caso, você deveria usar os números como um relógio digital de 24 horas.

    Acho que a lógica do os.date já deu para entender, mas vamos recapitular:

    O os.date é usado para retornar algum valor de tempo;
    Você pode usa-lo como uma condição para executar um outro comando;
    Dentro dos parênteses do os.date, você deve usar parâmetros.

    Uma coisa muito importante do os.date, é que você deve igualar ele, com valores entre aspas, mesmo que sejam números, por exemplo:
    if os.date("%X") >= "08:00:00" and os.date("%X") <= "20:00:00"Perceba que os números estão entre aspas. Certo, depois de termos recapitulado a lógica do os.date, vamos aos mais importantes parâmetros que podem ser usados e os valores que são retornados por eles; segue a lista:
     
    Pattern - Explicação:
    %a - dia da semana abreviado (Wed) %A - dia da semana completo (Sunday) %b - nome do mês abreviado (Sep) %B - nome do mês completo (April) %c - data e hora (09/16/98 23:48:10) %d - dia do mês [01-31] %H - hora de um relógio de 24 horas [00-23] %I - hora de um relógio de 12 horas [01-12] %M - minutos [00-59] %m - mês [01-12] %S - segundos [00-60] %w - dia da semana por números [0-6 = Domigo-Sabado] %x - data (09/16/98) %X - hora (23:48:10) %Y - ano (1998) Vocês podem perceber que todas as palavras que forem usadas, tanto abreviações, como palavras inteiras, devem ser em ingles, é claro.
     
    Certo, dito os mais usados parâmetros e a lógica do os.date, acho que isso pode encerrar o nosso tutorial, mas antes, uma ultima dica; se você tem duvida de que valor o parâmetro vai retornar, faça o seguinte:
    function onSay(cid, words, param) local par = os.date("Parâmetro") doPlayerSendTextMessage(cid, 22, "O valor é "..par.."!") end E por ultimo, mas não menos importante, para se criar uma tabela usando o os.date, deve-se usá-lo da seguinte maneira:
    os.date("*t", Valor_da_Tabela) Finalização
    Isso deve funcionar e encerrar o nosso tutorial; é claro que o os.date pode ter mais alguma utilidade que eu desconheça, mas eu acho que isso pode ser uma boa introdução dele. Espero que tenham gostado, ate mais.
  12. Gostei
    Ot Server deu reputação a Ryzor em Dicas para Treiners Naturais   
    Dicas para Treiners Naturais
    A intenção deste tutorial é mostrar aos mappers, iniciantes ou não, como pode ser feito áreas para treino naturais, ou seja, um lugar para os players treinar sem ser exatamente com treiner monk.

    Você deve estar se perguntando:
    "Porque vou me dar ao trabalho de criar algo assim se com um monte de treiner monk num prédio é mais fácil?"

    Não existe uma resposta especifica para esta pergunta, mas veja bem, se utilizar a idéia deste tutorial você poderá fazer um mapa diferente, bonito e inovador, a idéia deste tutorial não é lhe ensinar "tin tin por tin tin", mas dar uma visão diferente sobre treiners.

    -A caverna do treino:

    Na imagem abaixo mostro onde o player irá treinar.





    Se você reparar bem, há "cantos" onde o player pode ficar que somente duas criaturas irão ataca-lo.

    -Veja a outra imagem:





    As bolinhas vermelhas é a posição do player e os quadrados verdes são onde os slimes (ou outra criaturas) ficariam.

    Tibia possui possui muita variedade de criaturas, e com a edição podemos criar um número infinito delas. Há a possibilidade de fazer várias áreas diferentes, não só com slimes, mas com rotworms, cyclops, tudo que for favorável ao treino de skills.

    -Cave de rotworms:







    Tudo o que precisamos fazer como mapper é dar ao jogador a possibilidade do treino, moldando o mapa para tal e adicionando o monstro certo.

    Talvez seja necessário um editada nos monstros, como os slimes, crie um monstro chamado Slime Mother e faça-o summonar slimes normais, assim os players saberão quem é o slime que não poderão atacar.

    Crie uma Rotworm Queen que sumonne Rotworms ou Carrion Worms, ou até mesmo uma máquina que sumonne dwarfs.





    -Localização:

    Acho que é importante ressaltar que não ficaria legal colocar esses treiners naturais no meio da cidade com uma plaquinha dizendo: "Treiners Here!"

    Legal mesmo é colocar eles no meio de uma hunt, dentro de uma caverna, fazer com que o player VEJA que ali ele pode treinar.

    -Considerações finais:

    Bem, espero que esse tutorial tenha dado boas dicas a todos vocês e espere ver serves com treiners assim, bem natural.

    Abraços!
  13. Gostei
    Ot Server deu reputação a Ryzor em Lista de Tutoriais Recomendados   
    Lista dos melhores tutoriais, selecionados e classificados por nivel de conhecimento necessár io , a lista não precisa ser seguida necessariamente na ordem que se encontra, este tópico apenas contém um apoio ao estudo.
    Lembrando , não reviva os tópicos aqui listados com agradecimentos ou comentários desnecessários , salvo os casos onde alguma dúvida não foi sanada (pesquise antes para saber se sua pergunta já não foi respondida) e for relevante ao assunto tratado no tópico !
    As estrelas representam o nível de recomendação tendo como base o conteúdo tratado em cada tutorial e não o nível de qualidade.





    Matematica

    Afinal, quem deseja programar (independente da linguagem) precisa saber e gostar (pelo menos um pouco) de matematica.

    http://tibiaking.com/forum/topic/19534-caculos-com-porcentagem/
    http://tibiaking.com/forum/topic/19533-math-a-matematica-por-traz-do-script/


    Programação/Scripting Lua

    Programação Lua propriamente dita que pode ser aplicada fora ou em um OTServer.


    • Dicas e/ou Técnicas de Programação

    Algumas dicas que podem ou não ajudar sua produtividade e/ou economizar tempo.

    http://tibiaking.com/forum/topic/18735-automatizacao-e-simplificacao-de-scripts/


    http://tibiaking.com/forum/topic/18592-metodologia-de-scripting/


    http://tibiaking.com/forum/topic/19554-did-you-know/

    http://tibiaking.com/forum/topic/18584-matematica-lua/


    http://tibiaking.com/forum/topic/18606-dicas-essenciais-em-lua/


    http://tibiaking.com/forum/topic/19556-boas-praticas-de-programacao/



    http://tibiaking.com/forum/topic/19177-algumas-libs-uteis-em-otserv/


    http://tibiaking.com/forum/topic/19328-conceitos-de-aleatorio/



    http://tibiaking.com/forum/topic/19557-declarando-variaveis-de-forma-simples/



    http://tibiaking.com/forum/topic/19558-scripting-dictionary/




    • Iniciante


    http://tibiaking.com/forum/topic/19560-tutorial-return/


    http://tibiaking.com/forum/topic/19026-conhecendo-o-osdate/


    http://tibiaking.com/forum/topic/19562-nmedio-string-tutorial/


    http://tibiaking.com/forum/topic/19563-criando-funcoes/



    • Intermediario


    http://tibiaking.com/forum/topic/19248-manipulando-arquivos-atraves-de-lua/


    • Avançado


    http://tibiaking.com/forum/topic/18766-poo-em-lua/



    http://tibiaking.com/forum/topic/19565-patterns/


    http://tibiaking.com/forum/topic/19250-metametodos/


    http://tibiaking.com/forum/topic/18784-nvav-usando-luasql/




    ✔ Programação/Scripting Lua direcionado a OTServ

    Parte que visa a programação Lua para OTServ, suas particularidades e funções.



    http://tibiaking.com/forum/topic/19261-entendendo-o-stackpos/


    http://tibiaking.com/forum/topic/19051-informacoes-que-vaija-precisarprecisou/



    • Intermediário

    http://tibiaking.com/forum/topic/19056-talkaction-com-multiplos-parametros/
  14. Gostei
    Ot Server deu reputação a Ryzor em [Action] Destruir Paredes   
    Olá pessoal eu venho aqui contribuir com algo que creio eu que não á por aqui.
    é o meu primeiro Script (action) que fiz com a intenção de trazer mais RPG a
    servidores.

    Testado em: TFS 0.3.6 (8.60)
    Descrição: O Script funciona da seguinte maneira, o player da use em um Machado e clica na parede, logo
    depois a parede será destruida, a parede quebra em 3 Partes, ou seja tem que usar o machado 3
    vezes na parede.

    Bom vamos ao Script

    1° Primeiramente você tera que ir no RME e colar um UniqueID na parede que será destruída

    Em data/actions/scripts copie um arquivo qualquer e renomeie para destruction.lua






    2° Agora em data/actions/actions.xml adicione:


    Código:
    <action itemid="2391" event="script" value="destruction.lua"/>
    Legenda:
    Verde: ID do item que será usado para destruir a parede, eu uso este:
    Vermelho: São os id das paredes, Ex: parede normal, parede destruida, parede mais destruida.
    Azul: São os id das paredes depois de destruida, Ex: id 3361 vai virar 3399, depois 3399 vai virar 3387 assim por diante



    Vídeo mostrando o Sistema;

    http://youtu.be/-01nLh9L3Bg



    Créditos:
    Bloodwalker ( Por Fazer O Script )
    GodMarini ( Por trazer Ao TK )
  15. Gostei
    Ot Server deu reputação a Ryzor em Removedor Automático de frags   
    Vamos lá, faça uma cópia de qualquer arquivo dentro da pasta globalevents\scripts e renomeie para "removeFrags.lua"
    Agora abra o arquivo, apague tudo que tiver dentro e coloque isso:







    Agora vá em globalevents.xml e adicione isso:


    Código:
    <globalevent name="removeFrags" interval="18000" event="script" value="removeFrags.lua"/>

    Pronto, agora é só rodar

    Agora vou explicar o script:

    Onde está em...

    Vermelho: É o tempo de intervalo entre uma remoção e outra. 18000 são 5 horas pois 18000 ai está em segundos, e 18000 segundos = 5 horas
    Caso queira mudar, já sabe como fazer né? Mas não se esqueça de mudar a mensagem também caso vá mudar o intervalo.

    Roxo: É uma função pra pegar todos os players online pra mim, e fazer uma ação em cada um deles. Pra quem não entende muito bem, o "pid" ali é o ID do player na qual ela está checando.

    Verde: É a função que é executada em todos os players.

    Marrom: É a mensagem que é mandada após a remoção.


    Creditos
    Ramza ( Por Fazer O Script )
    GodMarini (Por Trazer Ao TK )
  16. Gostei
    Ot Server deu reputação a Ryzor em Global Event Boate(Otimizado)   
    Nome: Boite System(Mock)
    Autor: Mock - Remake #GodMarini
    Versão Testada: The forgotten server 0.3.5 PL1 - 8.50


    Em data/globalevents/globalevents.xml coloque esta tag:
    Código PHP:

    <globalevent name="boate" interval="1" script="boate.lua"/>


    Em data/globalevents/scripts crie um arquivo chamado boate.lua e coloque isto em seu conteúdo:





    E agora, como eu configuro?

    Simples, viu aquela parte lá, POSITIONS?


    POSITIONS = {
    [1] = {x=146, y=59, z=8},
    [2] = {x=138, y=61, z=8},
    [3] = {x=142, y=57, z=8},
    }



    Para adicionar mais é só aumentar um dos números entre colchetes, colocar a posição igual tá os outros, e no final colocar uma vírgula.
    Por exemplo:

    Código:
    [4] = {x=1044, y=1023, z=7},E assim vai.

    2 avisos:
    ºOs monstros devem estar PARADOS, ou seja, tranque-os em celas ou ponha pz ao seu redor.

    ºFaça somente se estiver de noite ou for em um sub-solo. Senão a luz será a luz do dia.
  17. Gostei
    Ot Server deu reputação a Ryzor em [Creature] Teleport para o templo quando acabar VIP   
    Venho trazer para vocês hoje um script feito por mim e que realmente é MUITO ÚTIL.!



    Código:
    Autor: Shoeei
    Versão Testada: TheForgottenServer 0.4 8.60 REV 3884.
    Nível do Script: Fácil~IntermediarioO que ele faz?
    Ele verifica quantos dias de Premium o player tem e se for = a 0 ele teleporta a jogador para a sua cidade natal. Assim kikando ele da área vip após o termino da sua vip.
    O script em sí é bem simples, mas de bastante utilidade.

    Lembrando que esse script foi feito com base na VIP utilizando PremiumTime. Se você usa o VIP System do Mock ou os outros, deixe mensagem no tópico que modífico ele para estes sistemas, sem problema algum.

    Vamos aos códigos agora (:

    Vá para data/creaturescripts/scripts e crie um arquivo chamada vipkick.lua e cole isso dentro dele,



    Código:
    -- by Marini for Tibia King Forum --
    function onLogin(cid)
    if getPlayerPremiumDays(cid) > 0 then
    setPlayerStorageValue(cid, 20500, 1)
    elseif getPlayerPremiumDays(cid) == 0 and getPlayerStorageValue(cid, 20500) == 1 then
    doTeleportThing(cid, getPlayerMasterPos(cid))
    setPlayerStorageValue(cid, 20500, -1)
    end
    return TRUE
    endAgora abra o arquivo na mesma pasta chamado login.lua e pressione CTRL + F e procure por,



    Código:
    registerCreatureEvent(cid, "ReportBug")e abaixo dele cole isso,



    Código:
    registerCreatureEvent(cid, "VipKick")Feche e salve, agora volte uma pasta e abra o arquivo creaturescripts.xml e adicione está linha a ele,



    Código:
    <event type="login" name="VipKick" event="script" value="vipkick.lua"/>
    Salve e feche.

    Pronto agora, sempre que acabar a Vip dos players eles serão transportados direto para seus templos (:



    Creditos : shoeei

  18. Gostei
    Ot Server deu reputação a Ryzor em [Talkcations] Sistema-Guild-Fairy-Tail   
    [sistema] Guild Fairy Tail

    Sintaxe: minha_funcao(pos, item, itemtr)
    Descrição: Função que faz você pegar certo level ser mandado ao Rei, Escolher Sua Guilda.
    Requerimentos: MySQL / Lua 5.1+


    Primeiramente Vou me apresentar, GodMarini. Velho aqui, mais novo em postagens, vim trazer um script feito por min.

    Vai em data/creaturescripts e poe :


    Código:
     
    <event type="combat" name="attacknacao" script="attacknacao.lua"/> <event type="look" name="Look" event="script" value="look.lua"/> Vai em data/creaturescripts/scripts Crie uma .lua com nome attacknacao.lua e poe :


    Código:

    --script by Muliouch
    function onCombat(cid, target)
    local creatureSkull = getCreatureSkullType(cid)


     
    if isPlayer(target) and getPlayerReino(cid) ~= tostring("0") and getPlayerReino(target) ~= tostring("0") then if isPlayer(target) and getPlayerReino(cid) == getPlayerReino(target) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não pode atacar jogadores da mesma Guilda.") doCreatureSetSkullType(cid, creatureSkull) return false end end return true end

    Vai em data/creaturescripts/scripts Crie uma .lua com nome loguin.lua e poe :


    Código:
     
    registerCreatureEvent(cid, "Look") registerCreatureEvent(cid, "attacknacao") Vai em data/creaturescripts/scripts Crie uma .lua com nome look.lua e poe :


    Código:

    --Script feito por Muliouch
    function onLook(cid, thing)


    pid = thing.uid
    local access = {[1] = {[0] = 'has no vocation',
    [1] = 'a Sorcerer',
    [2] = 'a Druid',
    [3] = 'a Paladin',
    [4] = 'a Knight',
    [5] = 'a Magician',
    [6] = 'a Warlock',
    [7] = 'a Templar',
    [8] = 'a Healer',
    [9] = 'a Assassin',
    [10] = 'a Archer',
    [11] = 'a Lord Knight',
    [12] = 'a Defender',},
    [2] = {'a Tutor'},
    [3] = {'a Senior Tutor'},
    [4] = {'a Gamemaster'},
    [5] = {'a GOD'},}


    local art = {
    [0] = 'She',
    [1] = 'He',
    }

     
    if isPlayer(pid) then local nacao = getPlayerAccess(pid) > 2 and '' or ' Nação '.. getPlayerReino(pid) ..'' local guild = (getPlayerGuildName(pid)~='' and " ".. art[getPlayerSex(pid)] .." is ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '') local guild1 = (getPlayerGuildName(pid)~='' and " You are ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '') local voc = getPlayerAccess(pid) > 2 and access[getPlayerAccess(pid)][1] or access[1][getPlayerVocation(pid)] local level = getPlayerAccess(pid) > 2 and '.' or ' (Level '.. getPlayerLevel(pid) ..').' local msg = ('You see '.. getPlayerName(pid) ..''.. level .. ' '.. art[getPlayerSex(pid)] ..' is '.. voc ..'.'..nacao)..guild local msg1 = ('You see yourself. You are '.. voc ..'.'..nacao)..guild1 if getPlayerName(pid) == getPlayerName(cid) then if getPlayerAccess(cid) > 2 then if getPlayerStorageValue(cid, 1078) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1) else return true end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1) end else if getPlayerAccess(cid) > 2 then if getPlayerStorageValue(cid, 1078) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) else return true end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) end end elseif not isPlayer(pid) then return true end end Verde: As Vocations Vai De Acordo Com o Serv
    Vai em data/lib crie um .lua. nacao.lua :


    Código:
     
    --Script feito por Muliouch local nacao = { [1] = "Fairy Tail", [2] = "Phantom Lord", [3] = "Blue Pegasus", [4] = "Lamia Scale", [5] = "Cait Shelte" } function reinoSetTable() local i = db.executeQuery("ALTER TABLE `players` ADD `reino` VARCHAR(50) NOT NULL DEFAULT '0' AFTER `name`;") return i end function setPlayerReino(cid, new) dofile("config.lua") db.executeQuery("UPDATE `"..sqlDatabase.."`.`players` SET `reino` = '".. nacao[new].."' WHERE `name` = '".. getPlayerName(cid).."';") return true end function getPlayerReino(cid) local get = db.getResult("SELECT `reino` FROM `players` WHERE `name` = '".. getPlayerName(cid).."';") local j = get:getDataString('reino') return j end function haveReino(cid) if type(getPlayerReino(cid)) == 'string' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Nação: ".. getPlayerReino(cid).."") end end Vai em data/talkactions/scripts e crie um .lua reino.lua :


    Código:
     
    --script feito por GustavoMassa e adaptado por Muliouch function onSay(cid, words, param) local c = { levelmin = 20, reipos = {x = 851, y = 1687, z = 7}, <----------------- x,y,z, as coordenadas do Castelo do NPC do Rei no MAP. reino1pos = {x = 99, y = 99, z = 7}, <----------------- x,y,z, as coordenadas do reino da "Fairy Tail", aonde so os players da Fairy Tail podem ir. reino2pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Phantom Lord", aonde so os players da Phantom Lord podem ir. reino3pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Blue Pegasus", aonde so os players da Blue Pegasus podem ir. reino4pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Lamia Scale", aonde so os players da Lamia Scale podem ir. reino5pos = {x = 99, y = 99, z = 7} <-----------------x,y,z, as coordenadas do reino da "Cait Shelte", aonde so os players da Cait Shelte podem ir. } if isPlayerPzLocked(cid) then doPlayerSendCancel(cid, "You cannot use this command during battle.") return true end if param == '' then if getPlayerLevel(cid) < c.levelmin then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Desculpe, você precisa alcançar o lvl 20 para poder ir ate o Rei.") return false elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("0") then doTeleportThing(cid,c.reipos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora vá falar com o Rei e escolher sua Nação!") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Fairy Tail") then doTeleportThing(cid,c.reino1pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Fairy Tail.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Phantom Lord") then doTeleportThing(cid,c.reino2pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guild Phantom Lord.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Blue Pegasus") then doTeleportThing(cid,c.reino3pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Blue Pegasus.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Lamia Scale") then doTeleportThing(cid,c.reino4pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Lamia Scale.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Cait Shelte") then doTeleportThing(cid,c.reino5pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Cait Shelte.") return true end end return true end

    Código:
    Vai em data/npc e crie um npc chamado rei :

     
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Rei" script="rei.lua" walkinterval="0" floorchange="0"> <health now="9999" max="9999"/> <look type="325" head="95" body="94" legs="60" feet="113" addons="3"/> <parameters> <parameter key="message_greet" value="Bem-Vindo ao meu Castelo |PLAYERNAME|."/> </parameters> </npc>
    Vai em data/talkactions e poe :


    Código:

    <talkaction words="/reino" event="script" value="nacao/nacao.lua"/>



    Vai em data/npc e crie um .lua rei :


    Código:

     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler)
     
    function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end  
    function oracle(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end  
    local reinoNode = node:getParent() local reino = reinoNode:getParameters().new if getPlayerReino(cid) == tostring("0") then setPlayerReino(cid, reino) selfSay('Agora você pertence ao Reino {'..getPlayerReino(cid)..'}.',cid) elseif getPlayerReino(cid) ~= tostring("0") then selfSay('Você já pertence ao Reino {'..getPlayerReino(cid)..'}.',cid) npcHandler:resetNpc() end return true end
     
    function greetCallback(cid) if(getPlayerLevel(cid) < 20) then selfSay('Volte quando alcançar o Nível 20.',cid) npcHandler:resetNpc() else return true end end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setMessage(MESSAGE_GREET, '|PLAYERNAME| está preparado para escolher seu reino?')  
    local yesNode = KeywordNode:new({'sim' or 'sím'}, oracle) local noNode = KeywordNode:new({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Então, que Reino ira escolher?'})
     
    local node1 = keywordHandler:addKeyword({'sim' or 'sím'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer se juntar aa guilda {Fairy Tail}, a guilda {Phantom Lord}, a guilda {Blue Pegasus}, a guilda {Lamia Scale}, a guilda {Cait Shelt}?'}) local node2 = node1:addChildKeyword({'Fairy Tail'}, StdModule.say, {npcHandler = npcHandler, new = 1, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Fairy Tail}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Phantom Lord'}, StdModule.say, {npcHandler = npcHandler, new = 2, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Phantom Lord}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Blue Pegasus'}, StdModule.say, {npcHandler = npcHandler, new = 3, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Blue Pegasus}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Lamia Scale'}, StdModule.say, {npcHandler = npcHandler, new = 4, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Lamia Scale}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Cait Shelte'}, StdModule.say, {npcHandler = npcHandler, new = 5, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Cait Shelte}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) keywordHandler:addKeyword({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Volte quando estiver pronto.'})
    npcHandler:addModule(FocusModule:new())

     
  19. Gostei
    Ot Server deu reputação a Ryzor em Cassino slot machine   
    Nome: Cassino slot machine
    Autor: CyberM // otland
    Versão Testada: tfs 0.4
    Informações Adicionais: video auto-explicativo. Video:
    Frutas padrões

    Ganho padrão de combos

    Outras infos
    -Qualquer item jogado nos grounds de slot são deletados, para prevenir bugs e trapaças
    -Ao player "usar" a alavanca ele não pode se mover até o jogo acabar
    -Se o player "desaparecer" o jogo renicia
    Em actions/scripts crie um arquivo .lua chamado cassino e coloque isto dentro:
    Código:
    --[[
    Advanced Slot Machine
    by Cybermaster
    ]]--
    --REQUIRED MONEY(gp) TO PLAY SLOT MACHINE
    local money = 1000
    --MILISECONDS TO CHANGE FRUITS
    local time = 200
    --ITERATOR TIME TO STOP CHANGING FRUIT IF PLAYER DOESN'T (30 is like 7 seconds)
    local limit = 30
    --FRUITS THAT WILL RANDOMLY APPEAR AND SWITCH
    local fruits = {2674,2675,2676,2679,2680,2682,2683,5097,8841}
    --PRIZES TABLES
    local win = {
    -- [{FRUIT.1,FRUIT.2,FRUIT.3} = {PRIZE,#PRIZE}]
    --MIXED COMBOS
    [{2679,2683,2679}] = {2160,2}, -- cherry-pumpkin-cherry
    [{8841,2682,8841}] = {2160,1}, -- lemon-melon-lemon
    --TRIPLE COMBOS
    [{2680,2680,2680}] = {2152,80}, -- triple strawberry
    [{5097,5097,5097}] = {2152,60}, -- triple mango
    [{2683,2683,2683}] = {2152,80}, -- triple pumpkin
    [{2682,2682,2682}] = {2152,50}, -- triple melon
    [{2676,2676,2676}] = {2152,40}, -- triple banana
    [{8841,8841,8841}] = {2152,25}, -- triple lemon
    [{2679,2679,2679}] = {2152,20}, -- triple cherry
    [{2675,2675,2675}] = {2152,30}, -- triple orange
    [{2674,2674,2674}] = {2152,10}, -- triple apple
    --ANY COMBOS
    [{ANY,2683,2683}] = {2152,5}, -- double pumpkin right
    [{2683,2683,ANY}] = {2152,5}, -- double pumpkin left
    [{2683,ANY,2683}] = {2152,10}, -- pumpkin sides combo
    [{ANY,2679,2679}] = {2152,4}, -- double cherry right
    [{2679,2679,ANY}] = {2152,4}, -- double cherry left
    [{2679,ANY,2679}] = {2152,8}, -- cherry sides combo
    [{ANY,8841,8841}] = {2152,5}, -- double lemon right
    [{8841,8841,ANY}] = {2152,5}, -- double lemon left
    [{8841,ANY,8841}] = {2152,5}, -- lemon sides combo
    }
    --MESSAGES THAT RANDOMLY APPEAR WHEN PLAYER WINS
    local messages = {'Bingo!','Lucky!','Jackpot!','Win!'}
    --FRUITS ROWS
    local p = { --[LEVER.UNIQUEID]
    [6297] = {},[6298] = {},[6299] = {},[6300] = {}, --[6301] = {},
    } --JUST PUT THE INITIAL ROW POS FROM LEFT, SECOND & THIRD WILL BE AUTOM. GENERATED
    for i = 1,3 do --p, UNIQUEID.LEVER, {POS FROM TILE OF LEFT}
    table.insert(p[6297],i,{x=91+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6298],i,{x=95+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6299],i,{x=99+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6300],i,{x=103+(i-1),y=145,z=7,stackpos=1})
    -- table.insert(p[6301],i,{x=19+(i-1),y=145,z=7,stackpos=1})
    end
    function verifyRow(cid, array, pos)
    local result, prize = false, ''
    for a, b in pairs(win) do
    if getTileItemById(pos[1],a[1]).uid > 1 or a[1] == ANY then
    if getTileItemById(pos[2],a[2]).uid > 1 or a[2] == ANY then
    if getTileItemById(pos[3],a[3]).uid > 1 or a[3] == ANY then
    doPlayerAddItem(cid, b[1], b[2] or 1, true)
    doSendAnimatedText(getThingPos(cid), messages[math.random(#messages)], math.random(255))
    result, prize, amount = true, b[1], b[2]
    end
    end
    end
    end
    if prize ~= '' then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'Congratulations!! You won '..amount..' '..getItemPluralNameById(prize)..'!')
    end
    for i = 1,3 do
    doSendMagicEffect(pos, result and CONST_ME_GIFT_WRAPS or CONST_ME_EXPLOSIONHIT)
    doRemoveItem(getTileThingByPos(pos).uid)
    end
    return not result and doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'You have lost in the Slot Machine Try again')
    end
     
    function onUse(cid, item, fromPosition, itemEx, toPosition)
     
    local function doFruit(pos,cid,id,limit)
    if not isPlayer(cid) then
    return doItemEraseAttribute(item.uid, 'aid'), getTileThingByPos(pos).uid > 0 and doRemoveItem(getTileThingByPos(pos).uid)
    end
    if getTileThingByPos(pos).itemid < 1 then
    doSendMagicEffect(pos, CONST_ME_POFF)
    doCreateItem(fruits[math.random(#fruits)], 1, pos)
    else
    doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1)
    end
    if limit <= 0 then
    doSendMagicEffect(pos,math.random(28,30))
    doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1)
    doItemSetAttribute(getTileThingByPos(fromPosition) .uid, 'aid', getTileThingByPos(fromPosition).actionid+1)
    doTransformItem(getTileThingByPos(fromPosition).ui d, getTileThingByPos(fromPosition).itemid == 9826 and 9825 or 9826)
    elseif getTileThingByPos(fromPosition).actionid > id then
    doSendMagicEffect(pos,math.random(28,30))
    doTransformItem(getTileThingByPos(pos).uid,fruits[math.random(#fruits)],1)
    else
    addEvent(doFruit,time,pos,cid,id,limit-1)
    end
    end
     
    if item.actionid == 0 then
    if not doPlayerRemoveMoney(cid, money) then
    return doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, 'You need '..money..' gps to play Slot Machine.')
    end
    doItemSetAttribute(item.uid, 'aid', 1)
    doCreatureSetNoMove(cid, true)
    doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826)
    doSendAnimatedText(getThingPos(cid), '-$'..money,COLOR_RED)
    for i = 1,3 do doFruit(p[item.uid],cid,i,i*limit) end
    elseif isInArray({1,2,3},item.actionid) then
    doItemSetAttribute(item.uid, 'aid', item.actionid+1)
    doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826)
    elseif item.actionid == 4 then
    doCreatureSetNoMove(cid, false)
    doItemEraseAttribute(item.uid, 'aid')
    doTransformItem(item.uid, item.itemid == 9826 and 9825 or 9826)
    verifyRow(cid, win, p[item.uid])
    end
    return true
    end
    E em actions.xml adicione esta tag:
     
    Código:
    <action uniqueid="6297-6300" event="script" value="cassino.lua"/>
    Agora em movements/scripts crie um arquivo .lua chamado cassino e coloque isto dentro:
     
    Código:
    function onAddItem(moveItem, tileItem, position, cid)
    if isPlayer(cid) then
    doRemoveItem(moveItem.uid)
    doSendMagicEffect(position, CONST_ME_EXPLOSIONHIT)
    end
    end
    Agora em movements.xml adicione esta tag:
     
    Código:
    <movevent type="AddItem" tileitem="1" actionid="6577" event="script" value="cassino.lua"/>
    Mapa

     
     
     
    Código:
    --FRUITS ROWS
    local p = { --[LEVER.UNIQUEID]
    [6297] = {},[6298] = {},[6299] = {},[6300] = {}, --[6301] = {},
    } --JUST PUT THE INITIAL ROW POS FROM LEFT, SECOND & THIRD WILL BE AUTOM. GENERATED
    for i = 1,3 do --p, UNIQUEID.LEVER, {POS FROM TILE OF LEFT}
    table.insert(p[6297],i,{x=91+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6298],i,{x=95+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6299],i,{x=99+(i-1),y=145,z=7,stackpos=1})
    table.insert(p[6300],i,{x=103+(i-1),y=145,z=7,stackpos=1})
    -- table.insert(p[6301],i,{x=19+(i-1),y=145,z=7,stackpos=1})
    end
     
     
    NOTA: Coloque o actionid 6577 ao tile embaixo da alavanca
    Itemid das alavancas usadas: 9825 - 9826
    Actionid usado: 6577
    Uniqueid usado: 6297, ... etc (para cada alavanca usa-se um diferente uid)
    Espero que gostem
  20. Gostei
    Ot Server deu reputação a Ryzor em [Action] Surpresinha   
    Distro Usado: TFS 0.36
    Protocolo: 8.6

    Mas creio que funcione em outras versões.

    Entendendo como Funciona.

    exemplo: Voce pega uma pedra qualquer ou outro item vou usar uma pedra para exemplo:

    Eu dou Use witch nesta pedra e ela vira algum item a minha escolha:

    Exemplo eu edito o action para dar uma MPA ou golden legs.

    Ao usar esta pedra ela ira virar algum deste items aleatoriamente porem voce pode adicionar varios items deixando assim mas dificiu de conseguir items boms.

    vamos ao script para entender melhor o que estou falando =P.

    Instalaçao:

    Em actions.xml adicione esta Tag.




    <action itemid="8301" event=script" value="surpresinha.lua"/>Entendendo a Tag:

    -Vermelho: Id do Item que ao dar use ira virar a Surpresa ( 8301 e uma pedra que nao achei drop )
    -Verde: nome do arquivo

    Continuando a Intalaçao:

    Em data/actions/scrips crie um arquivo.lua, nomeio para surpresinha.lua e adicione:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 100}
    }
    function onUse(cid, item, fromPos, itemEx, toPos)
    for i = 0, #items do
    if (items.chance > math.random(1, 100)) then
    doPlayerAddItem(cid, items.id, items.count)
    doRemoveItem(item.uid, 1)
    return doCreatureSay(cid, 'Wow Você Ganho! Seu Item e '..getItemNameById(items.id)..'!', TALKTYPE_MONSTER)
    end
    end
    doRemoveItem(item.uid, 1)
    return doCreatureSay(cid, 'Não ganhei nada!', TALKTYPE_MONSTER)
    endEntendendo como configurar:

    -Vermelho: Id do item que podemos Ganhar

    -Verde: Quantidade de item que vamos ganha
    -Laranja: Chance de ganhar cada item (de 0.1 a 100) quanto maior a chance mais saira aquele item
    -Roxo: Mensagem quando receber o item
    -Marrom: Mensagem quando não receber nada

    Obs: A chance pode ser 0.1, 0.2... (Apenas UM numero depois do ponto)

    Se quiser adicionar mais itens na lista faça o seguinte:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 100}
    }Observe que dupliquei a parte laranja, depois faça:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 30},
    [6] = {id = 7735, count = 1, chance = 100}
    }-Laranja: Parte adicionada
    -Vermelho: Numeros alterados

    Acho que deu pra interder ja ne galera =P.

    Em Uso uma SS o item caiu no chao porque estava sem BP se voce espaço na sua Bag ele ira para dentro dela mesmo voce dando use with no chao =P:




    Creditos:

    Script: Newtonnotwen
    Trazer o script pra voces? GodMarini

  21. Gostei
    Ot Server deu reputação a Ryzor em Zodiak City 8.60   
    Tamanho do mapa: 5,25Mb
    Criador: Zodiak. (algumas partes copiadas do global)
    Versão: 8.61

    Mais Prints Do OT : http://img291.imageshack.us/gal.php?g=59215370.jpg

    Àreas de Hunt
    Dragon Lord
    Hydra
    Spectre
    Demon
    Hellhound
    Sea Serpent
    Frost Dragon
    Undead Dragon
    Undead's(em geral)
    Behemoth
    Monstros da Poi
    Massive Elementals(todos)
    Warlocks
    Heros
    Black Knight
    Orcs
    Serpent Spawn
    Medusa
    Giant Spider
    Pharaos
    Wyrm
    Ancient Scarab
    Entre outros

    Download : http://www.4shared.com/file/P12ASuye/Zodiak.html

    Scan : http://www.virustotal.com/file-scan/...9d2-1294335947


    Obs: tem uma quest inacabada na parte sul do mapa.
  22. Gostei
    Ot Server deu reputação a Ryzor em Versão 8.60 Caverna   
    Autor: Caverna
    Versão: 8.6
    Tamanho: 169KB
    Download: Clique aqui. Entrada

















    PS: A entrada da cave fica na árvore.

    Não deixem de comentar.

    Download : http://www.4shared.c...qB/cave234.html

    Scan : http://www.virustota....965-1292248498
  23. Gostei
    Ot Server deu reputação a Ryzor em Pedido De Aulas..   
    Bom pessoal eu venho aki pa pedir uma coisa,

    tem como fazer algum lugar que da aula de SCRIPT

    e outro de mapping ?

    se pegar 1 cara q manja de script ele da aula para algum iniciante de script , e pega 1 q manja de mapping e da aula pa tal iniciante , estou começando editar e mecher com ot sv gostaria de aprender tudo e se tornar um bom dono de ot

Informação Importante

Confirmação de Termo