Ir para conteúdo

Bissonho

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    Bissonho deu reputação a Kimoszin em Criando suas Raids   
    Olá galerinha, hoje vou ensinar como vocês podem criar suas proprias Raids.

    - Mais oque são Raids?
    São invasões, eventos, que em determinado tempo podem acontecer.

    - Para que servem?
    Deixar seu servidor mais legal, as raids acontecem automaticamente, ou seja, você nao precisa estar com o GOD, CM, GM online para que as invasões começem.

    - Opa, gostei... como eu começo?
    Simples, vou ensinar a vocês agora mesmo.

    1. Vá para \data\raids e crie um arquivo .xml com o nome de um monstre (Exemplo: Monk)

    2. Logo em seguida, adicione os seguintes codigos:

    <raid> <announce delay="0" type="event" message="Message1"> Quando executar a raid, com o tempo do delay ira mandar a Message1 /> <announce delay="2000" type="event" message="Message2"> Quando executar a raid, com o tempo do delay ira mandar a Message2 /> <announce delay="4000" type="event" message="Message3"> Quando executar a raid, com o tempo do delay ira mandar a Message3 /> <singlespawn delay="6000" name="Monk" x="XXXX" y="YYYY" z="ZZ"> Quando executar a raid, com o tempo do delay ira summonar o Monk, nas posições X, Y, Z. /> </raid> 3. Seja coerente, sempre bote umas diferença de tempo (delay) para funcionar tudo perfeitamente. 4. Agora para a Raid funcionar, você deve adicionar ela em \data\raids\raids.xml a seguinte linha <raid name="MonkRaid" file="Monk.xml" chance="10" interval2="60" margin="0"> A cada 60 minutos tem a chance de 10% da raid iniciar /> 5. Para você adicionar mais de um bixo na raid, basta adicionar as seguintes linhas. <singlespawn delay="1500" name="Rat" x="592" y="603" z="6"> <singlespawn delay="1500" name="Cave Rat" x="602" y="573" z="7"> <singlespawn delay="1500" name="Bat" x="607" y="573" z="7"> Variaveis: delay=" " -- Tempo para executar message=" " -- Mensagem quando executar. name=" " -- Nome do monstro que ira summonar x=" " y=" " z=" " -- Posição que ira summonar o monstro raid name=" " -- Nome da raid file=" " -- Nome do arquivo xml da raid chance=" " -- Quanto de chance tem para executar a raid, porcentagem interval2=" " -- Tempo em minutos

    Bom é isso, tentei explicar ao maximo para vocês conseguirem criar suas proprias raids.
    Qualquer duvida estarei aqui.
    Abraços.
  2. Gostei
    Bissonho deu reputação a BoneFox em Criando suas Raids   
    Creio que seja isso que a Huziwara queria mostrar


    <raid>
    <announce delay="1000" type="event" message="Elf Scouts have been sighted near Venore!" />
    <announce delay="20000" type="event" message="The elves attack from shadowthorn!" />
    <announce delay="60000" type="event" message="Venore is under attack!" />
    <!--Area Spawns-->
    <areaspawn delay="60000" fromx="32853" fromy="32123" fromz="7" tox="32861" toy="32130" toz="7">
    <monster name="elf" amount="25" />
    <monster name="elf scout" amount="20" />
    <monster name="elf arcanist" amount="15" />
    </areaspawn>
    <areaspawn delay="60000" fromx="32932" fromy="32158" fromz="7" tox="32944" toy="32168" toz="7">
    <monster name="elf" amount="25" />
    <monster name="elf scout" amount="20" />
    <monster name="elf arcanist" amount="15" />
    </areaspawn>
    <areaspawn delay="60000" fromx="32853" fromy="32025" fromz="7" tox="32868" toy="32034" toz="7">
    <monster name="elf" amount="25" />
    <monster name="elf scout" amount="20" />
    <monster name="elf arcanist" amount="15" />
    </areaspawn>

    </raid>[/html]

    [size=6][b]EDIT!! ----------------------------[/b][/size]

    Me responde uma coisa [b]Kismozin[/b]

    No meu raid.xml ta assim


    <raid name="Necropharus" file="Necropharus.xml" chance="50" interval2="30" margin="1800" enabled="yes"/>
    <raid name="Hornedfox" file="Hornedfox.xml" chance="50" interval2="30" margin="1800" enabled="yes"/>
    <raid name="Halloweenhare" file="Halloweenhare.xml" chance="50" interval2="40" margin="1800" enabled="yes"/>

    Sabe me explicar o porque desse

    [html]margin="1800"

    Eu tentei tirar + deu erro no distro
    e eu não sei se isso também é o tempo, sendo que tem o interval
    se você souber, me responde please
    eu to muito enrolado com esse lance de invasão

    eu coloquei margin bem baixa
    e ficou dando invasão toda hora
    por isso preciso saber o que significa, pra calcular o tempo certo entre o interval e o margin

    Obrigado pelo espaço

    BoneFox
  3. Gostei
    Bissonho deu reputação a gristony em (erro) Pokebar   
    Isso é na parte Sever side e não recomendo usar essa CD bar na verdade não recomendo usaroupas as CD bar disponibilizada por aí pois até agora não vi nem um 100 % funcional/funfando direitim sem bug
  4. Gostei
    Bissonho deu reputação a Danihcv em (erro) Ao clicar no mar ou no minimap. Cliente trava   
    Bom... Vc tem que conhecer o server que tem em mãos... Se o server é baiak, mapa é baiak... Se o server for global, o mapa é global... Se for poketibia, o mapa é de poketibia... etc.
  5. Gostei
    Bissonho deu reputação a Danihcv em (erro) Ao clicar no mar ou no minimap. Cliente trava   
    Na vdd o tipo de mapa seria se é baiak, tibia global, etc.... shausahusa
  6. Gostei
    Bissonho deu reputação a Danihcv em (erro) Ao clicar no mar ou no minimap. Cliente trava   
    Provavelmente são as configurações da máquina.
     
    Me diga quais são as configurações da mesma e qual é o tipo de mapa.
     
     
     
     
    --------------------
    Tópico movido para a área correta.
  7. Gostei
    Bissonho deu reputação a VictorFT em [Básico] Aprendendo Script   
    ---Tutorial by Leo ---



    Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.




    Nessa primeira parte, vamos ver os seguintes pontos:




    1. [LÓGICA DE PROGRAMAÇÃO]



    1.1 O que é um algoritmo?



    1.2 Um exemplo de algoritmo.



    1.3 Exercício: Faça seu próprio algoritmo.




    1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.




    1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.




    1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho




    Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:




    Acordar




    Se não tiver água quente então




    Colocar água na panela




    Colocar a panela no fogão




    Ligar o fogão




    Esperar água ferver




    Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...




    Mas se já tiver água quente então




    Botar água na xícara




    Botar duas colheres de açúcar




    Botar uma colher de café em pó




    Mexer




    Tomar




    Dizer: Delíiiciaa =P




    Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.




    Como ficou o algoritmo:









    1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).




    2. [sCRIPTEANDO]



    2.1 Arquivos de Base



    2.2 Controladores Lógicos



    - Condicionais



    - Operadores de relação



    - Operadores-controladores



    2.3 Variáveis



    2.4 Storage




    Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.




    2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:




    -- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.




    -- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.




    -- Notepad++: Um editor de texto que também pode ser útil.




    2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.




    --- Condicionais




    Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.




    Exemplo: Caso não chova, irei jogar bola.




    Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.




    Na programação, os principais condicionais são:






    if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.






    else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.




    elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.




    Construindo um algoritmo só para exemplificar:









    Pegando o exemplo acima, vamos usar o elseif.









    ---- Operadores de relação




    Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:




    igual: = menor igual: <=




    maior igual: >= verificação: ==




    Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.




    Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100




    --- Operadores controladores




    Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.




    Exemplo: se o player tem level 100 e o nome dele é Leoking então




    execute script




    fim




    Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.




    Exemplo: se o player tem level 100 ou o nome dele é Leo então




    execute script




    fim




    Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.




    2.3 Variáveis: Servem basicamente para guardarem valores.




    Exemplo:










    O script retornará: king -- king é exatamente o valor da variável var.




    2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.




    Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)




    Exemplo: setPlayerStorageValue(cid, 1234, 1)




    Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)




    Exemplo: getPlayerStorageValue(cid, 1234)




    Essas funções você pode ver naquele arquivo de base: lista de funções em lua




    Agora a última parte desse mini tutorial:




    3. [ACTIONS]



    3.1 Sintaxe das actions



    3.2 Exemplo de actions





    3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:




    function onUse(cid, item, fromPosition, itemEx, toPosition)




    Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.




    Exemplo:









    Explicação da sintaxe:




    onUse = ao Usar (assim que o player use um item)




    cid = creature id -- quem vai usar o item




    item = item que será usado ou item "principal"




    fromPosition = da Posição




    itemEx = item "secundário"




    toPosition = para a Posição




    3.2 Vamos colocar em prática tudo que lemos até agora.




    Nossa action fará:





    [/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]




    Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.





    Créditos: 100% Leo




    PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .

  8. Gostei
    Bissonho deu reputação a MaXwEllDeN em [Aula 6] Escopo   
    << Aula 5 - Variáveis e Comentários
    Escopo
    Aula 6
    Vimos na aula anterior sobre variáveis, e vimos também, bem superficialmente, como declarar variáveis como locais.
    Você pode se perguntar: "Qual a utilidade de uma variável local?", "O que ela tem de diferente de uma variável global?" ou "Se elas são tão importantes, por que quase ninguém usa?".
    Vamos por passos. Imagine a seguinte situação: "Você tem uma variável chamada var, e ela vale 1, mas em certo ponto do script você quer que ela receba o valor 2, execute alguma coisa (Como um print) e, depois que executar, ela retorne ao valor anterior (1).". Um dos modos de fazer isto é usando uma outra variável temporária para armazenar o valor antigo, ficando assim:
      var = 1 temp_var = var var = 2 print(var) var = temp_var temp_var = nil print(var) Veja que o código possui 7 linhas para fazer algo tão simples, por isso usar a variável temporária foi uma idéia de girico chamada carinhosamente de Gambiarra. Vamos fazer a mesma coisa que antes, mas agora do modo "correto":
      var = 1 do local var = 2 print(var) end print(var) Observe que agora, mesmo tendo ficado com quase o mesmo número de linhas, está mais "charmoso". Vamos agora entender o do e o end. O do é uma estrutura de controle (Abre/Fecha um Escopo) que abre um novo escopo. O end é uma estrutura de controle (Abre/Fecha um Escopo) que fecha o escopo mais alto. Você não deve ter entendido. Imagine que os escopos são como uma pirâmide, que começa inicialmente no andar 0 (Estes números são "imaginários", somente para facilitar o entendimento). As estruturas de controle tem o poder de construir ou destruir um degrau desta pirâmide, no caso o do constrói um andar e o end destrói o andar mais alto da pirâmide. Vamos tentar entender:
      -- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0. Importante: Você deve terminar no andar que começou, ou seja, no andar 0. Vamos ver o mesmo código um pouco maior:
      -- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. do -- Construímos mais um andar. Agora estamos no andar 2. do -- Construímos mais um andar. Agora estamos no andar 3. end -- Destruímos o andar 3 e voltamos para o 2. end -- Destruímos o andar 2 e voltamos para o 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0. A definição ideal para escopo (Em Lua) seria: Até onde as variáveis locais são alcançáveis. Isso porque se você estiver no andar 1 e tiver declarado uma variável no andar 2, quando o andar 2 tiver sido destuido pelo end, a variável será apagada e você não poderá mais chamá-la no andar 1, embora você possa chamar variáveis do andar 1 se estiver no andar 2. Se esta variável existir no andar 1 e no 2, vai sempre pegar a que estiver mais perto (No caso, a do andar 2). Se existir uma local alcançável e uma global, sempre pegará a local ao invés da global. A global só será pega se não houver nenhuma local alcançável. Você pode declarar uma variável local em um andar e modificar seu valor em outro escopo. Esta é uma tática muito útil:
      var = 1 do local var do var = 2 end do print(var) end end print(var) Preste bastante atenção quanto à isto:
      var = 1 do do local var = 2 end do print(var) end end Se você está pensando que o valor escrito será 2, está muito enganado. A variável local "var" do primeiro andar 2 será apagada assim que o end destruir o andar, então o valor escrito será 1. Essa "pegadinha" pode frustrar vocês, então prestem atenção. Vale lembrar que, como as funções são armazenadas em variáveis, elas também podem ser locais:
      teste = function() end -- Variável Global function teste() end -- Variável Global local teste = function() end -- Variável Local local function teste() end -- Variável Local OBS: Toda Estrutura de Controle deve terminar com o end. São estruturas de controle:
    do function while repeat if OBS: O repeat é um caso especial e não usa end para finalizar o escopo. Ele usa o until. Veremos as 4 últimas em aulas futuras. Exercício Descubra o que acontece em cada um dos casos e por quê:
      var = 1 local var = 2 print(var)   var = 1 do local var = 2 end print(var)   var = 1 local var do var = 2 end print(var)   var = 1 local var = 2 do print(var) end   var = 1 do local var = 2 do var = 3 end print(var) end Aula escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
    Aula 7 - Estruturas de Controle >>
  9. Gostei
    Bissonho deu reputação a Raell5 em PRESISO de um Servidor VPS Empretado !   
    cada dia o Tibia - King ganha nessas perguntas interresantes  daqui a pouco vai ganhar do yahoo respostas kkk
  10. Gostei
    Bissonho deu reputação a Wakon em Adicionar/remover premium por comando!   
    Fala ai galera do TK, estou trazendo esse script que não encontrei no fórum e achei que fosse ser util pra alguém, então resolvi postar.
     
    Script testado em 0.4/0.3.6, provavelmente não funciona em TFS 1.x!
     
    Para saber os comandos, basta digitar a talkaction sem nenhum parâmetro e uma janela com os comandos irá abrir.
     
    Vá em "Data/talkactions/scripts" copie e cole 1 arquivo .lua, renomeie para addpremmy.lua e coloque isso:
    function onSay(cid, words, param) local t = string.explode(string.lower(param), ",") local call, name, day = t[1], t[2], t[3] local player, keys = getPlayerByName(name), {"add", "remove", "check"} if not isInArray(keys, call) or param == '' or name == nil then return doPlayerPopupFYI(cid,"Está com problemas?\nAprenda os comandos!\n---------------\nAdicionar premium:\n/pa ".. keys[1] ..", player, days\n/pa ".. keys[1] ..", Wakon, 30\n---------------\nRemover premium:\n/pa ".. keys[2] ..", player, days\n/pa ".. keys[2] ..", Wakon, 30\n---------------\nVer Premium:\n/pa ".. keys[3] ..", player\n/pa check, Wakon\n---------------") elseif not isPlayer(player) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'O jogador não está online ou não existe.') end if call == keys[1] then doPlayerAddPremiumDays(player, day) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Foram adicionados '.. day ..' dias de premium ao jogador '.. name ..'.') doPlayerSendTextMessage(player, MESSAGE_EVENT_ADVANCE, 'Você recebeu '.. day ..' premium days de um membro da equipe.') elseif call == keys[2] then if getPlayerPremiumDays(player) > 0 then doPlayerRemovePremiumDays(player, day) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Foram removidos '.. day ..' dias de premium do jogador '.. name ..'.') else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Esse jogador não possui nenhum dia de premium.') end elseif call == keys[3] then if isPremium(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'O jogador '.. name ..' tem '.. getPlayerPremiumDays(player) ..' dias de premium.') else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'O jogador '..name ..' é free account.') end end return true end Em "Data/talkactions", abra o arquivo talkactions.xml e coloque essa tag:
    <talkaction log="yes" words="/pa" access="5" event="script" value="addpremmy.lua" /> Créditos: Wakon
     
     
  11. Gostei
    Bissonho deu reputação a 3visan em [Aula 3] Primeiros Passos   
    Primeiros Passos
    Aula 3



    Relembrando o que eu disse na primeira aula, você precisará de um interpretador Lua e é muito recomendado que possua também um bom editor com suporte à sintaxe Lua, então nosso primeiro passo será obter o editor e o interpretador.

    As aulas serão voltadas ao scripting para Open Tibia Servers, então nada melhor do que um bom OTServer para testar seus scripts, mas ficar testando os scripts em um OTServer pode ser uma tarefa cansativa e demorada, então vamos usar também scripts fora de OTServers para praticar. Para isso, você pode fazer o download de qualquer um dos seguintes programas:


    Editores + Interpretadores:

    SciTE Scintilla [Avançado]
    OTScript Live! [Recomendado]



    Editores:

    Notepad++



    Interpretadores:

    Lua [Oficial]



    Depois que você tiver seu editor e interpretador Lua (Recomendo o OTScript Live!), instale ele. No caso do OTScript Live!, depois de descompactar, vá em "Help", no menu, e clique em "Register To Lua". Abrirá uma caixa confirmando a alteração, basta apertar "OK" e todos os seus scripts irão abrir com o OTScript Live!.




    testando seus scripts!
    No caso do SciTE, para testar o seu script você deve primeiro salvá-lo com a extensão Lua (*.lua). No caso do SciTE e do OTScript Live! você pode testar seu script apenas apertando F5, sendo que no OTScript Live! não é necessário salvar o script antes de testar.

    Após pressionar F5, o SciTE irá abrir uma área de textos abaixo da área de edição com as informações do teste, e o OTScript Live! vai abrir uma janela.

    Para testar se o seu SciTE ou OTScript Live! está funcionando, use o seguinte script:



    print("Hello world!") Nas informações mostradas pelo interpretador deve estar escrito "Hello world!". Se aparecer, parabéns, você testou o seu primeiro script Lua...(Ou não >.<) O que o script fez? o0 Uma das coisas mais importantes nos scripts são as funções. Uma função é "um bloco de código previamente pronto", uma subrotina, que quando chamada executa esse bloco. Imagine as funções como um atalho para executar alguma coisa. Pode ser usada, por exemplo, para encurtar scripts que tenham alguma parte do codigo que se repita muitas vezes. Criando uma função você pode usar esse código que se repete muitas vezes somente uma vez (Dentro da função), então em vez de usar esse bloco várias vezes, você só precisaria chamar a função várias vezes. Você pode criar suas próprias funções, mas isso veremos mais para frente. Tudo o que importa agora é aprender a chamar funções. O "Nome da Função", na verdade, é o nome da variável em que está armazenada a função, mas não se preocupem com isto ainda... O "Nome da Função" é o nome que você deve chamar para que a função ocorra, pois há vária funções (Obviamente), então você deve especificar qual função quer chamar. É a mesma coisa do que ter 3 pessoas. Quando quiser chamar uma das pessoas, deve dizer o nome dela. Os argumentos são as "Respostas" para as "Perguntas" da função chamada. A maioria das funções faz "perguntas". No caso da função "print", ela nos "perguntou" o que queriamos escrever na tela, e "respondemos": "Hello world!". É importante lembrar que cada pergunta deve ser respondida adequadamente, por exemplo, se alguém te pergunta: "Que horas são?" você não pode responder: "Sim.". A mesma coisa acontece com as funções, você deve responder exatamente o que ela está perguntando. Outra observação importante é que você deve responder as perguntas da função na ordem em que foram perguntadas. Se a pergunta nº 1 for "Que horas são?" e a nº 2 for "Quer um biscoito?", você deve responder respectivamente que horas são e se você quer um biscoito. OBS: Algumas funções fazem "perguntas" opcionais, ou seja, você pode ou não responder. Se você não "responder", a própria função atribuirá um valor padrão para a resposta. Os parâmetros são simplesmente o conjunto de todos os argumentos. OBS: Todos os argumentos (Respostas) do parâmetro devem estar entre parênteses e ser separados por vírgulas! Tipos de valores! Bem, como eu disse, cada resposta deve seguir o tipo da pergunta, então vou citar aqui os tipos destes valores. OBS: Existe uma função para descobrir o tipo de cada valor! Esta função é a função type(valor)... Numbers Como o nome diz, numbers são números, não há muito o que falar sobre eles... Exemplo: print(1) print(2) print(3) OBS: A função print aceita todos os tipos como resposta. Strings As strings devem iniciar com um símbolo especial e deve terminar com o mesmo caractere que foi usado para iniciar a string. Esses símbolos são: Apóstrofo: Começa com ' e termina com '. Aspas: Começa com " e termina com ". Colchete-Colchete: Começa com [[ e termina com ]]. Colchete-Igual-Igual-Colchete: Começa com [==[ e termina com ]==]. As strings são conjuntos de caracteres, como letras, números (Não são numbers, pois se houver um número entre os símbolos especiais será tomado como string!!!), acentos, espaços, etc... Se você quiser escrever uma frase na tela, por exemplo, não pode deixá-la solta pelo script. Esta frase deve ser uma string, ou o script dará erro. Exemplo: print('Apóstrofos') print("Aspas") print([[Colchete-Colchete]]) print([==[Colchete-Igual-Igual-Colchete]==]) OBS: 1 << Isto é um number. "1" << Isto é uma string. Booleanos Os booleanos podem assumir apenas dois valores: true e false. true: Valor verdadeiro. false: Valor falso. OBS: Os booleanos podem ser complicados de entender no começo, mas com o tempo você acostuma. Não se preocupe com eles agora... Exemplo: print(true) print(false) print(nil) Functions Exatamente o que o nome diz: é o que estamos vendo agora. Functions são nada mais nada menos do que funções. Exemplo: print(function() end) OBS: Não se preocupe com isso ainda! Tables ou Arrays São tabelas, ou seja, armazenam mais do que um valor dentro de uma "caixa". Tabelas podem armazenar outras tabelas e todos os valores dentro de uma tabela possuem um identificador, chamado "index" (índice). Tabelas começam com o símbolo { (Chave) e terminam com o símbolo } (Chave). Exemplo: print({}) Userdata Lua é uma linguagem de programação criada para dar extensão à linguagem de programação C e C++. Userdatas são ponteiros que indicam valores em C ou C++. Não se preocupe com eles. Nil Nil simboliza um valor nulo. Não deixa de ser um valor, mas é um valor sem conteúdo. Exemplo: print(nil) As funções retornam! Toda função retorna um ou mais valores, nem que sejam valores nulos (nil), portanto você pode usar uma função dentro do print para escrever os valores que a função retornar! Vamos usar como exemplo a função type(valor), que vai nos retornar uma string com o tipo do valor. Exemplo: print(type(1))




    O exemplo acima vai escrever em sua tela a frase: "Number", pois 1 é um number!

    Exercícios:
    Usando a função print para escrever na tela e type para pegar o tipo de algum valor, obtenha as seguintes frases na tela:







    Resposta no spoiler abaixo, tente fazer antes de ver.








    Creditos:



    99% Skyen Hasus



    1% Vittu


    Aula 4 Operadores e biblioteca

  12. Gostei
    Bissonho deu reputação a 3visan em [Aula 2] Lógica da Programação   
    #Aula 1 Introdução


    Lógica da Programação
    Aula 2



    O que é a Lógica da Programação?
    Bem, tudo o que é escrito em alguma linguagem de programação deve seguir uma lógica para poder funcionar. Vamos pegar um exemplo simples e curto: Um script de SD. (Sudden Death Rune)

    Quando o script de SD for chamado (Alguém usou a SD), ela segue passos básicos, que é basicamente a execução dela. Primeiro o script vai verificar se quem usou a SD possui nível, magic level, etc... suficiente para poder usar a SD. Se não possuir opa! Ela vai enviar uma mensagem de erro ao jogador, um efeito de fumaça e vai encerrar a execução. Caso contrário: se for um jogador com todos os requerimentos básicos para usar uma SD, então o script vai verificar se o alvo é um Player ou Monstro. Se não for vai enviar uma mensagem de erro, efeito, e vai parar de executar. Se for um monstro ou player, então o script fará um efeito da SD atingindo o alvo, toda aquela piromancia louca, e então vai tirar o devido dano do jogador.

    Um pouco cansativo de ler tudo isso, mas observe o exemplo abaixo:




    Quando uma SD for usada, então faça: Verifique se o jogador que usou a SD possui nível igual ou maior que 45, e se possui nível mágico maior ou igual a 15. Se possuir, faça: Se o alvo da SD for um Monstro ou Jogador, então faça: Calcule o dano que causará ao alvo. Remova uma carga da SD. Execute o efeito de SD. Calcule o dano que causará ao alvo e execute-o no alvo, tirando a vida dele ou mana, no caso de o alvo estiver usando o Magic Shield (Utamo Vita). Mas se o alvo da SD não for um Monstro ou Jogador, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o alvo da SD é um Monstro ou Jogador, ou nenhum dos dois. Mas se o jogador não possuir estes requerimentos, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o jogador possui ou não os requerimentos. Aqui termina a execução da SD. Agora, depois deste algoritmo, talvez tenha ficado mais claro como os programas de computador funcionam. Tudo não passa de um processo lógico, onde a linguagem de programação só serve como uma "máscara" para que o programador escreva o código seguindo esta lógica, por isso é ultra importante saber a lógica da programação antes de começar a programar. O que é um Algoritmo? O "código" que eu escrevi acima (Dentro da caixa de texto) representando o uso da SD foi um algoritmo. Os algoritmos são formas de representar a lógica seguida pelo programa. São passos que o programa segue para atingir determinado objetivo ou em outras palavras, completar uma tarefa (No caso da SD, matar ou não o alvo, ou enviar uma mensagem de erro). Um exemplo de algoritmo são as operações matemáticas, como somar, dividir, multiplicar, subtrair... Quando você soma 2 mais 2, você está executando um algoritmo para ele atingir o objetivo (O resultado!!), que é 4. Um programa ou script é basicamente a escrita dos algoritmos em uma linguagem de programação que é executada pelo computador de forma lógica. Alguns exemplos de algoritmos para representar ações da vida real: Tomar Banho: Código: Ir ao banheiro Tentar ligar o registro Verificar se o chuveiro ligou, se ligou então faça: Se molhe Se ensaboe Se lave Se enxague Desligue o registro Se enchugue Verificar se tem vontade de colocar uma roupa, se tiver, então faça: Coloque uma roupa Mas se não tiver vontade de colocar uma roupa, então faça: Saia pelado pela rua gritando: "Preciso de um penico!!" Finalize a verificação se tem vontade de colocar uma roupa ou não Mas se o chuveiro não ligar, então faça: Chame um técnico e arrume o problema Finalize a verificação se o chuveiro funciona ou não Finalize a execução do banho Comer Pizza: Convidar os amigos e amigas Ir até a pizzaria Se houver uma menina (Ou menino) no grupo que esteja a fim de você e você não esteja a fim dela ou dele, então faça: Peça pizza de alho, cebola e atum Mas se houver uma menina (Ou menino) no grupo que esteja a fim de você e você esteja a fim dela ou dele, então faça: Lamente-se por não ter ido a um cinema Mas se não houver ninguém a fim de você, então faça: Peça qualquer pizza Finalize a verificação se há ou não uma menina (Ou menino) no grupo que esteja a fim de você e você esteja ou não a fim dela ou dele Peça uma coca cola Diga ao garçom que prefere gelada (Ciclo) Enquanto não for a hora de pagar a conta, faça: Coma a pizza Peide Diga que foi mal Tome um gole da coca Arrote Diga que é natural Finalize se for a hora de pagar a conta ou volte ao começo do ciclo se ainda não for Se você tiver dinheiro suficiente, então faça: Diga aos seus amigos que não tem dinheiro e pague só metade Mas se você não tiver dinheiro, então faça: Diga aos seus amigos que não tem dinheiro e corra para não apanhar Finalize a verificação se você tem dinheiro ou não Vá embora Finalize a execução de comer pizza




    Esta aula foi curta pois eu prefiro lhes ensinar as estruturas lógicas conforme ensino as mesmas em Lua, assim trabalhando a lógica e Lua ao mesmo tempo. Primeiro ensino como funciona a estrutura na Lógica e depois ensino como aplicar em Lua.

    Exercícios-Tarefa:
    1. Monte o algoritmo de um script de "Shovel (Pá)".
    2. Monte o algoritmo de um script de "Pedra que troca sexo".
    3. Monte o algoritmo de "Ir ao cinema".
    4. Monte o algoritmo de "Fazer bolo".




    Resposta1:



    verifique se o alvo da pá é um buraco que pode ser aberto



    , se for, então faça: Verifique se o buraco está aberto,



    se não estiver, então faça: Transforme o ID do buraco fechado para o ID de um buraco aberto



    Mas se o buraco estiver aberto, então faça: Envie uma mensagem de erro ao jogador dizendo: "This hole is already opened."



    Envie um efeito de fumaça na posição do jogador Finalize a verificação se o buraco está aberto



    Mas se não for, então faça: Envie uma mensagem de erro ao jogador dizendo: "Sorry, this is not possible." Envie um efeito de fumaça na posição do jogador Finalize a verificação se é ou não um buraco que pode ser aberto.




    Resposta2:



    Verifique se quem clicou na pedra é um jogador



    , se for, então faça:



    Verifique se o jogador é mulher



    , se for, então faça:



    Transforme o sexo dele em homem



    Execute um efeito de magia azul



    na posição do jogador Envie uma mensagem ao jogador afirmando que o sexo dele foi trocado



    Mas se o jogador é homem, então faça:



    Transforme o sexo dele em mulher



    Execute um efeito de magia azul na posição do jogador



    Envie uma mensagem ao jogador afirmando que o sexo dele foi trocado



    Finalize a verificação se o jogador é mulher ou homem



    Finalize a verificação se quem clicou na pedra é um jogador




    Resposta3:



    Se arrume



    Tome banho



    Dirija seu carro até o cinema



    Pague o ingresso



    Assista o filme



    Volte para casa




    Resposta4:



    AQUI



    Sei que isso é meio estranho mas acredite ira ajudar sim.



    Creditos:



    99% Skyen Hasus



    1% Vittu



    #Aula 3 Primeiros passos
  13. Gostei
    Bissonho deu reputação a Kimoszin em Criando Spells para seu servidor!   
    Ola gaaaaaaalera, é com muito prazer que venho trazer esse primeiro tutorial meu como Aprendiz do TibiaKing,

    Spells:
    Bom, spells sao as magias do nosso servidor, elas servem tanto para healar, atacar, dar suporte e etc ...
    Criar magias é algo muito simples, vc mesmo poderam criar quantas magias quiserem para o seu servidor seguindo esse tutorial,
    Muito bem, vamos começar ...

    Spells de Curar (Healing)




    Obrigado a Todos,
    Estou terminando de fazer o SpellMaker para facilitar a vida de vc,
    Abraços
  14. Gostei
    Bissonho deu reputação a 3visan em [Aula 5] Variáves e Comentários   
    Variaveis



    Aula 5




    Olá, bem-vindos a nossa 5ª aula de scripting. Nesta aula iremos tratar de uma coisa indispensável em todos os scripts: Variáveis. As variáveis podem ser entendidas como uma "caixa" que armazena um valor na memória RAM, ou um substituto de um valor, uma igualdade de um valor, como se ela fosse o valor em si.

    Toda variável deve ter um nome definido por você, mas existem regras para definí-los: quando for escolher o nome da variável, não use números no começo e nunca use caracteres especiais, como acentos, sifrões ou asteríscos. Use apenas a-z, A-Z e pode-se usar números também, desde que não estejam no começo da variável. Existem também palavras que são reservadas e não podem ser declaradas como variáveis: (if while true nil for repeat until do break return function false in end else elseif or and). Na maioria das vezes, você deve declarar (Dar um valor) a variável, senão ela retornará nil (Vimos isto na Aula 2).

    Vamos ao um exemplo de como declarar uma variável.



    numero = 27 epare, eu criei uma variável chamada numero, e ao mesmo tempo ela vale 27, então quando eu for usa-lá em algum lugar eu posso escrever 27 ou então escrever numero. Vamos ao um exemplo em si: numero = 27 print(numero) print(27) Veja, eu declarei a nossa variável como 27, em seguida a função print irá mostrar o valor dela no caso 27, e em baixo mostra a você o número 27. Ambos irão mostrar a mesma coisa, pois você declarou que numero é 27. As variáveis podem ser modificadas no decorrer do script como o exemplo: numero = 10 numero = numero * 3 print(numero) print(10) Nesse caso é diferente, vamos por linhas para ser mais fácil. Em sua primeira linha declaramos que a variável vale 10. Logo na segunda linha redeclaramos a variável como sendo numero igual a numero (seu valor atual) vezes 3. No caso ela vai passar a valer 30, pois 10 * 3 = 30. Na terceira linha o script ira mostrar a você o valor da variável, que nesse caso é 30. Na quarta linha ele irá mostrar 10, sim 10 não é 30, mas nós não declaramos ela como 10? Sim, mas acontece que na segunda linha modificamos seu valor. Apenas para ressaltar vamos falar mais uma vez brevemente o que vimos na aula 2. Os tipos de variáveis. Nossas variáveis podem ser de vários tipos. Como vimos acima se chama number (Número), mas temos tambem: (Curiosidade: Funções são armazenadas em variáveis!) Bem, em OTServ, quando se declara uma variável, como por exemplo o nome numero em um script x ela acaba sendo chamada de variável global, isso quer dizer que apos executar uma vez o script x, quando se executar o script y e chamar a variável sem ser declarada ela será usada com o valor que foi declarado no script x. Normalmente isso atrapalha muito e ainda consome memória do seu PC, pois a variável fica guardada ocupando memória a toa. Existe um modo de evitar isso, esse modo é declarar a variável como local, que no caso quando o script terminar de executar a variável, ela vai ser deletada e não ficará consumindo memória do seu PC. E isso se faz assim: local texto = "Ola pessoas." --- ou assim local algo Veja que quando declarada local na 3ª linha eu não coloquei = valor, isso se dá porque você declarou ela como local, mas não declarou valor. So se pode fazer isso quando ela é declarada local, depois você pode colocar o valor que quiser, ela apenas está como local mais ainda é nil. Não se preocupem ainda com variáveis locais e globais. Veremos mais afundo na próxima aula. Comentarios Essa parte é simples, ajuda quando se esta fazendo um script, ou quando quer explicar alguma coisa no script para uma pessoa que vai ver. São os comentários. Eles servem apenas para você "falar" ou comentar alguma coisa no script. Elas não influenciam em nada do script (Em sua execução). Para criar um comentário basta iniciá-lo com --. A cada linha do comentário você deve adicionar mais dois - (menos) assim: -- Ola gente, eu estou comentando!!!!!! -- que coisa o0 -- uhahuahuahuauhauhahu -- oi? ------- eu posso fazer com mais de um porem o minimo é 2 Quando se inicia um comentário ele fica até o final da linha. Pode se fazer comentários com varias linhas sem ter que ficar adicionando -- toda hora, se faz usando [[, assim: --[[ ahuahuahuhua eu sei comentar em comentarios ]] --- aqui vai seu script

    Usa-se muito isso para inserir créditos ou explicar algo, mesmo.

    Exercício.
    Crie um pequeno script que tenha 3 variáveis, que e o valor de cada uma deve ser modificado de alguma forma e insira comentários em cada linha e no final um comentários com + de uma linha usando [[ ]].




    Respostas abaixo, se você abrir antes de tentar você é um fracasado, a menos que você não queria aprender scripting:




    --------------respota abaixo---------



    variavel1 = 123 -- essa e minha variavel 1
    variavel2 = 7 -- diga oi pra 2
    variavel3 = 10 -- oia a 3 aqui
    variavel1 = variavel1 + variavel2 + variavel3 * 10 / 5
    --[[
    nossa eu somei a variavel 1 com a 2 e a 3 e multipliquei por 10 e dividi por 5 e deu 150]]
    -- fim




    Creditos:



    99% Mock



    1% Vittu


    Aula 6 Escopo

  15. Gostei
    Bissonho deu reputação a Marfito em (Resolvido)Como mudar a sprit do mar ?   
    Em qualquer Tibia.spr de clientes mais atuais, como 10.31, por exemplo.
  16. Gostei
    Bissonho deu reputação a Will Oliveira em [MOD] Guild Management   
    O que faz?
    Esse mod serve para administrar sua guild, criar, invitar player, promover player, desfazer guild, entre outros...
     
    Instalação:
    Extraia o arquivo na pasta otc/mods.
     
    Download:
    https://hostr.co/MfecSZIxhiUv
     
    Screenshots:




     
    Créditos:
    Zysen
    xS0NYx
  17. Gostei
    Bissonho deu reputação a ViitinG em [MOD] Sounds   
    {fromPos = {x=1089, y=1110, z=8}, toPos = {x=1135, y=1142, z=8}



     
  18. Gostei
    Bissonho deu reputação a Bluetooth em (Resolvido)Como mudar a sprit do mar ?   
    vc abre um editor de sprinte o mais usado ObjectBuilder pega as sprintes que vc que de outro .spr q é bota por cima das suas sprintes "água" que vc não que mais na mesma ordem que esta em seu .spr e pronto '-'
  19. Gostei
    Bissonho deu reputação a GabrielSapient em Launcher AutoUpdate C#   
    Galera sempre procurei um Launcher AutoUpdate para meu servidor, depois de muita pesquisa e pouco conhecimento consegui fazer um em C#, está ai:
     

     
    1. Download:
     
     
    • Download | • Scan

    2. Oque ele faz:
     
     
    • Verifica a existência da versão local na pasta do cliente;   • Se a versão do arquivo não existir, ele assume que a versão é "1.0" e cria um arquivo de versão;   • Verifica arquivo .xml no servidor de atualização;   • Baixar atualizações para todas as versões maiores do que a versão atual do cliente (atualiza tudo em apenas formato de arquivo .zip);   • Extrai os arquivos .zip;   • Exclui os arquivos .zip após a extração;   • Arquiva a versão atualizada na pasta do cliente;   • E, finalmente, desbloqueia o botão "Start Game".     3. Como editar:     • Abra o arquivo .sln na pasta "VS Project" com o Visual Studio:   Procure por: string Server = "http://127.0.0.1/Updates/"; • Altere o http://127.0.0.1/Updates/ para qualquer URL que você estará hospedando suas atualizações.
        • Agora vamos procurar por:   Process.Start("OTClient PkR DX9.exe", "\\Pokémon Rusty"); • Modifique o OTClient PkR DX9.exe pelo nome do .exe do seu Client.
     
    • \\Pokémon Rusty e a pasta que está seu .exe e vai ficar seu Launcher. (troque sem tirar os "\\")
     

      • No Visual Studio, selecione o controle WebBrowser(Neste caso, o nome "patchNotes") e alterar a url do "http://127.0.0.1/"para o caminho do arquivo index.html, na pasta do host:       OBS: Isto á opcional, é apenas um template em .html. Você pode remove-lo e editar da maneira deseja.       • Agora apenas jogue o .exe, .dll e o arquivo version da pasta "Launcher\VS Project\Launcher v2\bin\Debug ou Release" para a pasta de seu Client:       Pronto! Agora e com o Site.     • No host do site, apos colarmos a pasta Updates, editamos o arquivo Updates.xml, para cada atualização adicionamos um <update> fechamos com </update> como no exemplo do arquivo. Colocamos o arquivo atualização em .zip nessa mesma pasta, editando a versão e o nome no arquivo:   • No arquivo version.txt colocamos a versão da nova atualização:   • Uma dica para o .zip de atualização é colocar em pastas o caminho no client desejado a fazer update. Exemplo: data/things/854 nesta pasta colocaremos os arquivos que será substituído, no exemplo foi Tibia.spr e .dat. Depois compactamos e deixamos na pasta Updates, sem esquecer de colocar o nome no arquivo Updates.xml.   4. Dica   • Pronto! Agora e só criar um instalador com o launcher, com atalho na área de trabalho (o launcher é o .exe que você colocou no client). Você pode modificar o launcher do jeito que quiser, o arquivo index.html e etc. Quando abrir o arquivo ele irá atualizar, liberar o botão "Start Game", e quando você clicar vai fechar o Launcher e abrir o Client.     5. Créditos     Eu - Pelo launcher e pelo tutorial.
  20. Gostei
    Bissonho deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  21. Gostei
    Bissonho deu reputação a danieuu em [Resolvido] [duvida] poketibia   
    Olha mais um novato em poketibia lol (sem preconceito)
    Bom já que é novo no ramo vou dar dicas:
    Primeiro Server é bom quando tem Sources! (vai por mim)
    Server que tem Sources ultimamente é o do Ricardo. (se quizer mando ele para você)
    Claro ele tem alguns erros mais com sources dá para arrumar ele.
    Coisa que eu queria saber você tem mania de grandeza? É compulsivo por querer sempre mais e mais e o melhor?
    Se for digo que é melhor você fazer o que eu estou fazendo, que é pegar e criar um server de poketibia 9.60. Porque isso? Limite de sprites, pois server de poketibia que tem por ai limite de sprites é 65.535 sprites. Agora o 9.60++ o limite é de milhões onde cabe todos os pokémons que existem até a 5ª geração e mais os que vem por ai da 6ª geração( pokémon x e y).

    Bom fica a sua escolha um server com um pouco de erros e com Sources ou um server bom como o Centurion(o melhor que existe até o momento).
    Que qualquer um tem o seu fim marcado!
    Ou... se você pensa no futuro e cria um server 9.60. Demora? Um bom pouco... mais eu estou fazendo um e já começamos a ter um belo progresso!
    Onde espero que em 1mês o server esteja pronto.(ruim é que nem todos da equipe tem conhecimentos em sources)

    Obs: Fica a sua escolha pensa bem antes de começar!
  22. Gostei
    Bissonho deu reputação a Wend em PDA By: [GOD Anna]   
    Eae Galera do Fórum, Estava editando esse Server Para deixar online Mais estava Sem tempo 
    e Achei Melhor Postar para usarem como Base  
     
    • Menu:
    ├ Informações; ├ Ediçoes; ├ Erros; ├ Prints; ├ Download; └ Creditos.     • Informações Basicas •

        • Edições / Ajustes •

     

     
    • Erros Do Servidor •



     

     
    • PrintScreen •



    Novos Lendarios::



    Ancient Aero::



    Articuno Quest:: 



    NPC de Teleport::




     

     
    • Download's •
    Servidor:: 
    http://www.4shared.com/rar/06OG8lB5ba/pda_by_bolz_verso_god_anna.html? OtClient::
    http://www.4shared.com/rar/x5LgTQKLce/otclient.html? Scan::
    4Shared Já faz Scan *--* Para nossa Alegria
     
     
    @Atualizado v2 
     
    • Menu: ├ Ediçoes; ├ Prints; ├ Download;     • Edições / Ajustes •

        • PrintScreen •
    Ditto System::

    Held System::

        • Download's •   Servidor v2:: http://www.4shared.com/rar/_lB31rwxba/pda_by_bolz_verso_god_anna_v2.html?   OTClient v2:: http://www.4shared.com/rar/aiqka_kQce/otclient_v2.html?   Scan 4Shared Já faz Scan     • Creditos •   Slicer (pelo servidor) Brun123 (por alguns scripts, e por criar o pda) Stylo Maldoso (pelo mapa) Bolz (por editar Maior Parte do Server) Gabrielsales (Pelo Held System) Eu (Por Minhas Edições) Xtibia (por alguns scripts)  
  23. Gostei
    Bissonho deu reputação a Stigal em VIP em OT Servers.. Lucro ou necessidade?   
    Tudo depende do ponto de vista....
     
    Não pode-se julgar um servidor bem desenvolvido igualmente a um Baiak baixado e apenas colocado online.
    Uma coisa é ser digno de lucros e outro e ter necessidade de lucrar (abrindo um servidor 100% baixado).
  24. Gostei
    Bissonho deu reputação a EddyHavoc em Criação de OT Servers - Pessoas sem Experiencia   
    Olá caro leitor, eu sou EddyHavoc um antigo usuário daqui do TibiaKing.



    Fiz este tópico para falar um pouco da minha opinião e acho que pode servir de dicas para algumas pessoas, sei que não irei agradar a todos, haverá críticas, pois é uma opinião propia.




    O Tibia no Geral chegou no seu Auge praticamente, no seu ponto máximo, sei que pode surgir coisas novas, mais sei que talvez essas coisas novas podem melhorar ou não o jogo.



    Hoje em dia temos os Outros Servers não oficiais os "Other Tibia Server" conhecido como OT Server (OT) e temos os servidores alternativos, os "Alternative Tibia Server" conhecido como "ATS", de exemplo: Dragon Ball, Pokémon, e muitas tentativas de outros servidores derivados...



    Agente tem um número muito grande desses servidores, e poucos deles são realmente jogaveis.



    Pois qualquer um pode criar um Servidor.





    O Ponto no qual quero chegar é, para que criar um servidor ?




    Muitas pessoas criam no objetivo de ter um lucro em cima, ou de se divertir, e divertir seus jogadores...



    Mais por favor, você que quer criar um servidor que tem ideias, não se iluda com esse mundo de possibilidade que é a internet.



    Aqui também é um mercado entre aspas, pois se você tem um servidor outra pessoa também tem, ou seja você tem concorrentes...



    Se você quer que um servidor seu seja visto, que dê algum tipo de lucro...



    Você não pode apenas cria-lo se tem que ter determinação, tem que mostrar que seu servidor é diferente, que ele é melhor, você tem que vender o seu produto... mostrar que o seu é melhor. Viciar as pessoas.




    Você que cria apenas por criar, e depois de alguns dias fecha o servidor, por favor nem comece então... antes de tudo pesquise, e veja bem oque você quer fazer. Pois além de se prejudicar você prejudica as pessoas que entraram no seu server e perderam o seu tempo.




    Galera que está querendo começar, apenas digo:



    Foco, Força e Fé



    Sonhe alto, não tenha medo de cair, não tem como crescer sem investir, não tem como crescer sem se arriscar...





    Criei esse tópico apenas para me expressar...



    Aceito suas críticas e seus elogios...



    Nunca haverá nada e nem ninguém que irá agradar a todos.





    Atenciosamente, EddyHavoc






  25. Gostei
    Bissonho deu reputação a Winfernus em Entendendo Scripts,Rune,Spells,Monsters,etc...   
    ANTES DE TUDO ME AJUDE! NÃO SEI SE POSTEI NA ÁREA CERTA! Por Favor Mova!
    Aprenda a fazer seus próprios Monstros, Spells e NPC

    Basicamente scripts sao o conjunto dos códigos que formam os arquivos de players, monster, spells, etc.

    Nesse
    tutorial vou ensinar tudo, pra vc sair daqui fazendo monstros, spells e
    tudo mais. E se no final houver alguma duvida poste aqui que serei
    grato em ajudar. Neste Tutorial existem varios comandos básicos, bons
    para iniciantes, parte por parte é explicada, visando um maior
    entendimento sobre o assunto.
    Vamos lá!

    SPELLS
    Primeiro vamos falar sobre as spells
    Existem
    as spells de instant e as spells de rune, as spells de instant sao
    aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao
    a primeira coisa que precisamos fazer é decidir se vamos fazer uma
    spell de runa ou de instant, vou mostrar aqui apenas um exemplo, se nao
    o topico ficara muito grande. Vamos começar, seguindo um exemplo de uma
    magia minha:
    Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant

    Começamos o script com isso:

    CODE
    area = {
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    }


    Essa
    é a area em que a magia ira pegar, o numero 0 simboliza os espaços que
    a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no
    exemplo acima, é uma magia em forma de cruz
    Pulamos entao uma linha e acrescentamos isso:


    CODE
    attackType = ATTACK_PHYSICAL
    needDirection = false
    areaEffect = NM_ME_YELLOW_RINGS
    animationEffect = NM_ANI_NONE

    hitEffect = NM_ME_HIT_AREA
    damageEffect = NM_ME_DRAW_BLOOD
    animationColor = BLACK_WHITE
    offensive = true
    drawblood = true


    Vamos às explicações:
    attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy
    needDirection = se o ataque precisa de direção, como as firewaves
    areaEffect = o tipo de animação que saira na area na magia
    animationEffect = a animação de quando o player sofrer dano da magia
    damageEffect = o efeito que saira quando o player receber o dano
    animationColor = a cor da animação da Magia
    offensive = se a magia é de ataque ou nao
    drawblood = se embaixo do player vai sair sangue quando ele receber a magia


    Explicado, pulamos uma linha e adicionamos:

    CODE
    UltimateExplosionObject
    = MagicDamageObject(attackType, animationEffect, hitEffect,
    damageEffect, animationColor, offensive, drawblood, 0, 0)


    Essa é a função que fara com q oq explicamos acima funcione, pulamos outra linha e acrescentamos:


    CODE
    function onCast(cid, creaturePos, level, maglv, var)
    centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z}
    n = tonumber(var)
    if n ~= nil then
    -- bugged
    -- ultimateExplosionObject.minDmg = var+0
    -- UltimateExplosionObject.maxDmg = var+0

    UltimateExplosionObject.minDmg = 0
    UltimateExplosionObject.maxDmg = 0
    else
    UltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30
    UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0
    end


    Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos:

    CODE
    return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered())
    end


    Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml
    vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha:

    CODE
    spell
    name="CrossOver" words="crossover" maglv="12" mana="160"
    enabled="1">/>


    Explicando:
    spell name = nome da magia (pode ser qualquer um)
    words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia)
    magvl = maglv necessario para usar essa magia
    mana = mana que será gasta
    enabled = se a magia esta abilitada ou nao
    vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid
    ------------------

    MONSTERS
    Spell criada, vamos passar para o Monstro que usara esta spell
    Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters

    CODE

Informação Importante

Confirmação de Termo