Ir para conteúdo

cabrito2v

Cavaleiro
  • Total de itens

    198
  • Registro em

  • Última visita

Histórico de Reputação

  1. Upvote
    cabrito2v recebeu reputação de fhoenix00 em [Encerrado] [Pokemon] Dúvidas? - Pda   
    Não entendi sua pergunta leke !
     
     
    7° Pokémon indo pro depot \/
     
    Quem estiver com problema de pokémons não indo pro cp você tem que configurar o id da cidade no depot do seu centro pokémon.
     
    É só ir pelo map editor e colocar, clicando com o botão direito no depot ..
    Caso não tenha a opção de escolher é po que o map editor não reconhece o item.xml como o servidor e tem que fazer uma modificação nos items.xml que está na pasta 8.54 do seu map editor
     
    Pois provavemente ele vai está algo do tipo assim, parecido com isso, não tenho como saber ao certo agora.
     
    <item id="2589" to item id="2592" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
     
    Algo desse tipo, é só substituir por isso abaixo, salvar, abrir o editor, abrir o mapa, colocar os ids das cidades e salvar o mapa.
     
    <item id="2589" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2590" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2591" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2592" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
  2. Upvote
    cabrito2v deu reputação a BananaFight em [Arquivado]Reestruturando   
    Bom, eu como moderador estou vendo que o conteúdo dentro da minha área esta crescendo e sendo bem visto pelo pessoal, Senti a necessidade de reorganizar a estrutura do Sub-Fórum (Open Tibia Client (Fórum Oficial Brasileiro)) e sugeri isso ao Gustavo, Nos conversamos e chegamos a um acordo.


     

    Queremos a opinião de vocês para votarem se querem a nova estrutura, ou estão satisfeito com a atual.


     

    Reestruturação seção otclient:





    ###

    Atual

    ###

     

    Notícias Discussão Geral Tutoriais Suporte Bugs Mods Show Off

     

    ###



    Novo


    ###

     

    Noticias Discussão Geral Modules/Mods -Códigos prontos -Tutoriais -Duvidas e pedidos -Duvidas e pedidos respondidos ShowOff Bugs

  3. Upvote
    cabrito2v deu reputação a ThiagoBji em [Encerrado] ERRO ITEM   
    Cabritenho, não é no login.lua do creaturescripts, e sim no vipexp.lua em creaturescripts/scripts
  4. Upvote
    cabrito2v deu reputação a BananaFight em Pronto pra usar   
    Hoje vim trazer um tutorial de como remover o teminal, modules manager, e deixar o ip automático.


     

    Vamos ao tutorial :


     

    Parte Um


     

    Removendo módulos indesejados
     

    Dentro do diretório




    \otclient-master\modules\client


    Você irá abrir o arquivo "client.otmod"


     

    Dentro dele vai ter as seguintes linhas :


     

    load-later: - client_styles - client_locales - client_topmenu - client_background - client_options - client_entergame - client_terminal - client_modulemanager - client_serverlist //- client_stats
     

    Essas linhas são os módulos que vão carregar quando o client for aberto, então é só tirar os que você não quer que abra.


     



     

    Parte Dois


     

    Como deixar o ip Automatico

     

    Dentro do diretório



    \otclient-master modules\client_entergame


    Você irá abrir o arquivo "entergame.lua"


     

    Dentro da função "Int", você vai procurar por:


     

    if g_app.isRunning() and not g_game.isOnline() then enterGame:show() end
     

    E embaixo dessa função você adiciona essa linha :


     

    EnterGame.setUniqueServer('127.0.0.1', 7171, 854, 270, 210)
     

    Como configurar essa função:


     

    EnterGame.setUniqueServer(Ip do server, Porta (7171), Versão do server, Largura da janela, Altura da Janela)
     

  5. Upvote
    cabrito2v deu reputação a Slicer em [Dúvida]   
    sobre a 2* duvida, vai em modules/client_entergame/entergame.lua e ache isso..

    if g_app.isRunning() and not g_game.isOnline() then enterGame:show() end
     
    dai embaixo disso coloca isso...

    --EnterGame.setUniqueServer(hostName, port, protocolVersion, windowWidth, windowHeight) EnterGame.setUniqueServer('127.0.0.1', 7171, 854, 270, 210)
     
    dai soh arruma com teu ip/porta/versao...
  6. Upvote
    cabrito2v deu reputação a pedrowarlock em Servidor Pokemon Com Cooldown Bar e icon system (-Download-)   
    Olá pessoal! Eu venho divulgar um server com muitos sistemas interessantes
     
    -Icon System-
    -Cooldown Bar- PXG parecida
    -Unique iitem com stackable
    -Serial itens
    -TV system = PXG sem nome ou barra de health
     
    Muitos bugs, mas pelos sistemas seria bom investir. Qualquer interesse só abir um projeto. Estão autorizados, mas pesso que coloque os créditos.
    Esse server é para projetos para deixa-lo 100% jogavel.
     
    Pesso que o tópico seja movido para a area de downloads de server
     
     

     
     
     
    Os addresses do cliente foi muito modificado pelo criador...Já que isso foi alterado, então dificilmente algum player encontrara um bot ou algum hacker...Desistir desse server porque são muitos bugs ¬¬' e não tem source. Outra que o cara que me passou ele me roubou.
     
    Download server Clique aqui
     
     
    senha: warlock
     
    Não sei postar scan...
     
     
     
     
     
     
     
     
     
     
     
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Estou com um projeto de DLL inject para tibia. Se algum programador em C++ estiver afim só me contatar...Consegui fazer algumas coisas no tibia como por exemplo uma barra de contexto igual ao pokemonBro com um programador bom da para refazer toda barra deles ou até melhor...barra de mana ou de Xp. Dispenso curiosos.
     

  7. Upvote
    cabrito2v deu reputação a Danilonilo em [Tutorial] Paredes   
    Essa será minha 3ª aula, e minha primeira de nível intermediário
    Eu usarei o programa Paint.NET para dar a aula, e recomendo vocês também usarem ele
    Download do Paint.NET
    A Parede em Si
    A parede, no Tibia, tem que possuir normalmente 64x32 de área (Largura x Altura)
    Fazendo uma parede normal
    Primeiro crie uma nova imagem de 64x32 (CTRL+N)

    Então comece fazendo uma linha diagonal na ponta de baixo da imagem até aonde chegar

    Complete em cima até chegar o máximo á esquerda

    Da ponta de cima até onde chegar, faça outra linha diagonal

    Termine a parte de baixo

    Se quiser pode destacar o meio

    Colorindo
    Primeiramente comece pelo verde, ponha a cor base e os detalhes

    As linhas vermelhas e azuis são das mesmas cores que o lado verde, então complete que nem estou fazendo:
    Primeiro pinte os detalhes

    Depois pinte as partes assim:
    A parte vermelha de cima ficará mais clara que as outras, que são a mesma cor base

    Percebeu que aonde estava a linha vermelha, está mais claro? Porque não tenta pegar as imagens e dar um zoom?
    Atenção, no meio da aula, eu me distraí e esqueci de mostrar uma coisa, quando você fizer os detalhes, faça de uma forma que uma linha azul se ligue com a outra
    Ex:

     
    Fazendo as bordas
    Pra começar, faça linhas para cima em baixo e na ponta, a largura você que decide, se for uma borda grande, será mais largura, se for pequena, menos.
    Então complete com uma linha diagonal ligando as pontas, é importantíssimo que elas tenham a mesma largura, se for uma parede reta.

    Depois, façam uma borda plana em cima (lembram da minha primeira aula, quando disse sobre as coisas planas sempre serem retas e estendidas?)

    Colora e deixe as linhas roxas com as mesmas cores, igual citei agora pouco
    A parte de cima ficará mais clara, pois é onde bate o sol

    Fazendo o suplemento de baixo
    Primeiramente, pegue a ferramenta varinha mágica , e lá em cima, clique na Lâmpada , que ficará assim.
    Nós clicamos na lâmpada, pois o globo, quando for clicar com a varinha mágica, selecionará as cores iguais de todo o desenho, e não só as ligadas, também funciona com o Preenchimento, ou "Balde de Tinta", que pintará as mesmas cores em todo o desenho.
    Segurando CTRL, clique nas cores da parede, até que fique totalmente preenchida, então copie (CTRL+C)
    Depois disso, Gire a imagem 90º (CTRL+H) e a inverta na horizontal (Imagem>Inverter Horizontalmente)
    Assim, nós mudamos o lado da parede de frente para o lado
    Após isso, cole a imagem que tínhamos copiado, e ficará assim

    Faça as devidas edições
    Fazendo o suplemento de cima
    Com a imagem que criamos, selecione de uma cor forte a parte que está juntando as paredes

    Então remova o que tiver fora da linha vermelha, recomendo colocarem o Preenchimento/Balde de Tinta e mudar a tolerância para 60% +-, fazendo assim que preencha as diferentes tonalidades de cinza, faça os devidos tests, se não der muito certo, desfaça o erro com um CTRL+Z
    Pinte igual as outras etapas

    Pronto, terminamos a parede e seus complementos!
    Quer ver como ficou?
    Não ficou lá essas coisas, pois eu me esqueci de dar aquela ligadura de detalhes, e eu não sombreei nem texturei a parede, mas isso fica pra aula de texturas, não é?!
    Tcharam

    Créditos: Danilonilo8
  8. Upvote
    cabrito2v deu reputação a Zamorak em Zelettar Soft (Tibia 6.0!)   
    Zelettar Soft Server


     
     

    Server Info:


    * Exclusiva versão 6.0

    * Item da versão 6.0

    * Mapa igual do Tibia Global 6.0 (bem antigo!)

    * Outfit pode ser mudada!

    * Monstros da versão 6.0!

     

     

    Imagem:



     

    Links:

    Server

    Download -> Link aqui

    Scan -> Link aqui


    Cliente 6.0


    Download -> Link aqui

    Scan -> Link aqui

     
    Créditos:
    Criador da equipe (quem teve a ideia): Isack
    Colaborador e divulgador: Lucas Tibiano
    Spriters: Herick Santos e Christian
     
    (2013) Zelletar Soft, Todos Os Direitos Reservado
    Zelletar Soft e sua equipe
    (Eu apenas divulguei aqui)
  9. Upvote
    cabrito2v deu reputação a EdMignari em "Ao infinito e Além..." - Novo Administrador Xtibia.com   
    Uma ótima escolha. Eu parei de participar do fórum há uns meses porque tava díficil levar algo a sério aqui, com tantos moleques mau educados se sentindo donos do fórum. Acredito que idade não seja sinônimo de capacidade, mas sim de maturidade. E é o que vejo muito. Muitos são bons no que fazem, no entanto não tem maturidade, tirando a seriedade do fórum, que sei não precisa ser tão sério, mas que se mantenha o respeito. O que se posta aqui não vai ser lido apenas por sua rodinha de amigos...
     
    Boa sorte, Anderson. Boa sorte ao fórum.
  10. Upvote
    cabrito2v recebeu reputação de maligno em Stacktable Debug   
    Você modificou no .dat do cliente também?
     
    Se não, tem que colocar como stackable no .dat.
  11. Upvote
    cabrito2v deu reputação a cristofermartins em Spr Editor [ 8.54/9.81 ][ versão 1.3 ]   
    Olá, meu nome é Cristofer Martins, sou programador e gameDesigner e atualmente faço parte da equipe Digimon Adventure Online. Estou aqui para apresentar o meu Spr Editor, que desenvolvi para a equipe por que outros editores não eram funcionais/simples o suficiente. Alem disso, vi que não há sprite editores para as novas versões do Tibia, dificultando a inserção/remoção/edição/exportação de Sprites dos novos arquivos SPRs.Alem disso, um outro motivo foi que tive uma pessima experiencia com o Demonic Editor, tentei exportar as Sprites do nosso SPR para uma pasta umas 20 vezes e sempre dava algum erro no meio do caminho. Por isso desenvolvi um Editor eu mesmo.
     



     

    Preview:


     
     






     

    Funções( no menu ):


     
    -Add: Adiciona n sprites ao editor. Basta clicar no add que irá aparecer a janela para você seleciona todas as sprites que você quiser( multi seleção ). Essas sprites serão adicionadas no final da lista de sprites. OBS: As imagens devem ser PNG e o fundo das sprites deve ser transparente, e não rosa, como é de costume.
     
    -Replace: Substitui n sprites no editor. Selecione com Ctrl ou até com o Shift as sprites no editor que você quer substituir, depois clique no menu em Replace. Irá aparecer uma janela aonde você seleciona as imagens PNG para serem substituidas. As sprites serão substituidas na sequencia, a primeira Sprite selecionada no editor vai ser substituida com a primeira imagem selecionada na pasta. O progresso do replace pode ser visto na barra de progresso.
     
    -Delete: "Deleta" n sprites da lista.Selecione com Ctrl ou até com o Shift as sprites no editor que você quer deletar, depois clique no menu em Delete. Essas IDs das sprites que são deletadas vão aparecer "" e o ID delas, elas são sprites vazias, sem conteudo que você substiuir com novas imagens e assim aproveitar essas IDS que não estão servindo para nada.
     
    Export: Exporta n Sprites. Basta selecionar com Ctrl ou com Shift ou clicando na sprite que o editor irá exportar essa sprite com fundo transparente. Você pode facilmente exportar todas as sprites para uma pasta ou apenas aquelas que lhe interessam. O progresso da exportação pode ser visto na barra de progresso.
     
    Clear: Limpa a lista de sprites e remove as imagens da memoria. Util para criar um arquivo SPR do zero, por exemplo.
     
    Exemplo multi select( para deletar, substituir ou exportar ):
     
     
     
     
     
     
     



     




    Abas Extract/Compile


     
    Extract: Nessa aba você clica em SPR file para abrir o arquivo SPR, escolhe a versão dessa SPR ali no "menu" do lado daonde tá escrito "version" e clica em Extract. O programa vai começar a extrair as sprites e adiciona-las a lista( as vezes a lista fica estatica basta clicar nela que ela atualiza com as sprites novas ) e o progresso da extração pode ver na barra de progresso.
     
    Compile: Nessa aba você compila as Sprites da lista para um arquivo SPR. Para isso basta clicar em "save" e escolher o arquivo SPR que vai ser salvo, escolher a versão desse arquivo SPR como feito em Extract e clicar em "Compile!". O progresso da compilação pode ser visto na barra de progresso.
     
     
     
     
     
     
     
     
     
     
     
     

    Outros


    Search by ID: Pesquisa uma sprite pelo ID. Caso essa id exista na lista, a lista se move até a a sprite.
     



     

    Download:


     

    SPREditor

     
     

    Scan:



    Virus Total

     



    Caso você encontre algum bug, reporte nesse topico por favor. Aceito sugestões.
    Caso exista alguma versão que não seja aceita no editor e você tem a signiture(assinatura) do arquivo spr, poste aqui que eu atualizo o version.ini.





  12. Upvote
    cabrito2v deu reputação a Skyen em Qual é a coisa mais importante em um código? E por que é a elegância?   
    Obs.: Eu sei que esse tutorial é quase uma trilogia, mas não desanime, tente ler até o final, você pode aprender muita coisa nova! Se você não quer ler tudo, pule a parte de escopo e identação, pois é a parte mais complexa. Recomendo voltar depois e tentar entender identação e escopo.
     
    Você está jogando Tetris quando um desconhecido te chama e pede para arrumar um script dele que não está funcionando direito. Aparentemente, os players estão ficando irritados porque o servidor está respondendo "Hell, world!" para eles, quando deveria estar respondendo "Hello, world!".
     
    Você diz "tudo bem", o cara te manda o script, e você se depara com isso:
     

    _,__,___,____=string.char,print,type,"fu" .."nction"if(___(__)==____)then __(_(0x48 ,0x65,0x6c,0x6c,0x2c,0x20,0x77,0x6f,0x72, 0x6c,0x64,0x21)) --[[Hello, world!]] end
     
    Se você sentiu um pingo de vontade de ler o código, exceto por curiosidade, seu nome é Mock.
     
    O erro mais comum que eu vejo sendo cometido por iniciantes não é nada relacionado à sintaxe, lógica da programação ou consumo excessivo de fungos pluricelulares. É a elegância (Ou melhor dizendo, a falta dela). Não me interessa se seu código deixa o Tibia 4D com Intel® Tesselated 256x Clockwise Polygoned RealExtreme™ Greener Foliage e nunca deu um bug. Se ele não for no mínimo agradável de ler, eu vou jogar fora, e sentir pena da lixeira.
     
    90% das vezes que eu digo para algum iniciante deixar o código mais bonito, eles me respondem que "só eu vou ler mesmo, cara, não vou ficar me preocupando com isso". Isso é a mesma coisa que limpar a bunda sempre com o mesmo papel porque você não é homossexual e não precisa da* * *****.
     
    Nas outras 10% das vezes, a pessoa fica offline e nunca mais aparece.
     
    Devaneios à parte, vamos ao que interessa:
     
    Por que a característica mais importante de um código é a elegância, e como deixar seu código elegante?
    Começando do princípio: Para escrever um código, o programador precisa ter na cabeça a abstração de uma solução para o problema em mente. Se você não entendeu, isso apenas significa que se você quer escrever um script que faça X coisa, você tem que ter na cabeça uma ideia para fazer a coisa X acontecer através de um código. Se você é distraído por algo, ou para de programar na metade do código, ou está com muito sono, essa ideia vai se perdendo e você tem que pensar nela novamente depois.
     
    Veja o problema do "Hello, world!" acima. Imagine que aquele código é seu, e você achou que ele estivesse funcionando, mas agora percebeu o bug e quer consertar. Só que já faz tempo que você fez o script e não tem mais em mente a ideia que usou para escrever ele à muito tempo atrás. A ideia se perdeu, e o único modo de relembrar ou descobrir a ideia de um código é, bem, lendo ele...
     
    Se você ainda tem a ideia em mente, ler um código como aquele ali em cima é muito fácil: parece óbvio para você o que ele faz, pois afinal, você acabou de escrevê-lo! Só que não é bem assim que funciona se você já não lembra de como fez o código, vai ser muito difícil ler um código grande todo mal-feito como aquele ali em cima, e o trabalho de arrumar o código é muito mais complexo.
     
    Caso você estivesse na situação de ter que arrumar o código do "Hello, world!", qual código você iria preferir arrumar? O de cima ou este aqui:
     

    print("Hell, world!")
     
    O problema piora se você não sabe como arrumar o bug e precisa de ajuda de alguém. Se você enviar um código todo mal-feito para alguém te ajudar, é bem provável que a pessoa nem vá ler seu código, dar uma desculpa e se safar de ter que ver tamanha aberração (Aos que estão se perguntando: sim, eu faço isso).
     
    Ou seja, enfie na cabeça de uma vez por todas que mesmo que seu código jamais vá ser lido por outra pessoa, é importante que você faça ele de forma elegante.
     
    É muito chato ter que enfeitar o código depois que ficou pronto? Você está fazendo algo muito errado!
    Se você faz o código todo para depois deixar bonitinho, fique sabendo que essa é uma péssima ideia. Você não tem que deixar bonito depois de pronto, e nem antes de começar, você tem que ir aplicando a elegância justamente enquanto escreve o código!
     
    Não faz sentido escrever um código feio para depois enfeitar. É a mesma coisa que parir o Hitler e deixar ele mais bonitinho com maquiagem e lacinhos. Acostume-se à escrever um código naturalmente bonito.
     



     
    A parte que realmente interessa: Como deixar seu código bonito!
    Identação
    A primeira coisa que me vem em mente quando alguém fala em código bonito é a identação. Identação é o espaço horizontal que separa as linhas de código da borda da esquerda. Veja um exemplo de código identado abaixo. Em azul é o espaço da identação, geralmente feito com a tecla tab:
     

     
    Além de mais bonito, fica extremamente mais simples ler um código identado. Ela é tão importante que na linguagem Python a identação não somente é obrigatória, como também é parte da sintaxe.
     
    Existem muitos iniciantes por aí que não sabem identar, mas adicionam espaços antes das linhas para copiar o código de outra pessoa e acabam fazendo tudo errado. Isso atrapalha tanto quanto um código não identado, se não piorar.
     
    Escopo
    Para aprender a identar corretamente, primeiro você deve entender o que é um escopo. A explicação abaixo não serve apenas para embelezar seu código, mas também é um conceito fundamental para programar, não apenas em Lua, mas em diversas outras linguagens de programação, então é importante que você leia mesmo se quiser fazer códigos feios (Afinal, a opção é sua, só não sei por que você chegou até aqui no tutorial se quer fazer um código feio).
     
    Escopo tem tudo à ver com variáveis locais e globais.
     
    A definição informal de escopo é: Até que ponto as variáveis locais podem ser alcançadas. Obviamente você não vai decorar isso, então vamos explicar de um jeito que você entenda:
     
    Quando você declara uma variável dessa forma em Lua, ela é uma variável global:
     

    x = 1
     
    Significa que ela pode ser acessada de qualquer lugar no seu código! Emocionante, não é?
     
    Não. Você não deveria estar fazendo isso à não ser em casos muito, muito especiais, e só quando você sabe o que está fazendo. Variáveis globais tem seus usos, mas são perigosas se você não usá-las corretamente. Isso acontece porque variáveis globais podem dar conflito com outras variáveis. E pior, em um lugar que não tem nada a ver com a paçoca.
     
    Por exemplo, você tem dois scripts completamente diferentes: Um deles é uma alavanca que abre uma porta e o outro é uma pedra que teleporta. Completamente diferentes. Exceto por uma coisa: ambos possuem a variável "pos", e o inútil escritor desses scripts cometeu o grandíssimo erro de não usar variáveis locais quando necessário. Veja:
     
    alavanca_que_abre_uma_porta.lua:

    pos = {x=100, y=100, z=7}
     
    pedra_que_teleporta.lua:

    pos = {x=200, y=200, z=8}
     
    Quando o Lua abre o primeiro script, ele registra a variável global "pos" com o valor 100x100x7. Quando o Lua abre o segundo script, ele registra novamente essa variável com o valor 200x200x8. O resultado é bem óbvio, existe apenas uma variável "pos" usada pelos dois scripts com o valor 200x200x8, que é válida para a pedra que teleporta, mas completamente inválida para a alavanca que abre uma porta!
     
    Para criar uma variável local, basta adicionar a palavra "local" antes do nome da variável. Tornando a variável "pos" local, vão existir duas variáveis locais "pos", uma para cada script, e cada uma com seu valor:
     
    alavanca_que_abre_uma_porta.lua:

    local pos = {x=100, y=100, z=7}
     
    pedra_que_teleporta.lua:

    local pos = {x=200, y=200, z=8}
     
    Problema resolvido. Agora mesmo que as variáveis possuam o mesmo nome, cada script tem a sua, e elas não irão conflitar, pois cada uma tem seu valor.
     
    Variáveis globais tem seus usos. Por exemplo, caso você precise trocar informações entre dois scripts diferentes. Porém, se precisar usar variáveis globais, escolha um nome que você tem certeza absolutíssima de que não causará conflito com nenhuma outra variável.
     
    Mas isso não é tudo o que há para falar sobre variáveis locais. Elas possuem uma propriedade muito interessante, veja:
     

    if true then local var = "Hello, world!" end print(var)
     
    O que você acha que o print vai escrever? Se você disse "Hello, world!", você errou. E errou feio.
    O print vai escrever "nil". Curioso, não?
     
    Na verdade, é algo muito óbvio. A variável "var" é local, e foi criada dentro do "if". Isso significa que ela é local dentro do if, e que fora dele, ela não existe. Quando o "if" atinge seu "end", todas as variáveis locais dentro dele são destruídas. Em outras palavras, o print não consegue encontrar a variável "var", pois ela só existe dentro do "if"!
     
    Agora vamos ver um caso diferente:
     

    if true then local var = "Hello, world!" if true then print(var) end end
     
    O que você acha que o print escreve? Você provavelmente acertou essa, agora. A resposta é "Hello, world!". A variável local existe, sim, apenas dentro do primeiro "if". Porém, o segundo if está dentro do primeiro, então a variável var continua existindo. Ela só será destruída quando o primeiro "if" atingir seu "end".
     
    Vamos complicar as coisas um pouquinho.
     

    local x = 10 if true then local var = "Hello, world!" if true then local var = "Goodbye, world!" print(var) print(x) end print(var) end
     
    Uma variável local "x", duas variáveis locais "var", três valores diferentes, três prints. O que você acha que cada um escreve?
    A resposta é: o primeiro escreve "Goodbye, world!", o segundo escreve "10", e o terceiro escreve "Hello, world!".
     
    Epa, mas pera aí, a segunda "var" não dá conflito com a primeira, reescrevendo o valor dela?
    Não. Isso acontece porque a primeira "var" continua existindo no primeiro "if" quando a segunda é criada no segundo "if". Os prints vão escrever o valor da "var" mais próxima do escopo deles.
     
    Escopo, como disse antes, é até onde as variáveis locais são alcançadas. Imagine os escopos como degrais de uma pirâmide. Um escopo mais alto pode alcançar todos os degrais mais baixos que ele na pirâmide, mas não consegue alcançar os mais altos. Se fôssemos dar números aos escopos do código acima:

    Escopo global (Fora dos dois "if"s).
    Dentro do primeiro "if".
    Dentro do segundo "if".




     
    E por que o segundo print escreveu o "x" do primeiro escopo? Porque é como se Lua fosse descendo os degraus dos escopos até achar o que procura. Se não achar, retorna "nil". Por isso, também, o primeiro print escreve a segunda "var", e não a primeira.
     
    Vamos complicar mais uma vez:
     

    if true then local var = "Hello, world!" if true then var = "Goodbye, world!" print(var) end print(var) end
     
    E agora, o que cada print escreve?
    O primeiro escreve "Goodbye, world!", e o segundo... também!
     
    Observe bem, a segunda "var" não tem a palavra "local" antes! Você deve estar pensando que a segunda "var" é global, mas esse não é o caso. Se eu colocar mais um print, fora dos dois "if"s, ele vai escrever "nil"!
     
    Mas que magia negra está acontecendo aqui agora?
    É bem simples. Quando a palavra "local" é usada, você está dizendo à Lua "crie uma variável local aqui!". Quando você não usa, você está dizendo "substitua o valor da variável no escopo mais próximo por este valor!", e então Lua vai procurar a variável "var" no escopo mais alto (mais próximo ao topo, onde o código está), e substituir seu valor. Se nessa descida da piramide Lua não encontrar a variável que você quer, então ela criará uma variável global!
     
    Ou seja, naquele código acima, se não existisse o primeiro "var", o segundo "var" seria global!
     
    A última coisa que você precisa saber sobre escopo é que todo todo "repeat", "while", "do", "for", "if", "elseif", "else" e "function" abre um novo escopo, e todo "end" e "until" (No caso do "repeat") fecha o escopo mais alto da "pirâmide", destruindo todas as suas variáveis locais.
     
    Voltando à identação
    Agora que você já sabe usar variávies locais em toda sua maestria... Okay, eu sei, talvez ainda esteja confuso demais e você não tenha entendido tudo, mas não se preocupe! Talvez demore um tempo para você assimilar o que é o escopo e variáveis locais, e como aproveitar isso no seu código, isso vem com a prática. Mas continue acompanhando, pois identação é uma coisa muito simples!
     
    A vantagem imediata da identação é que você consegue enxergar exatamente quais são os escopos. Fica simples ver que tal print está dentro de tal "if", já que o print está com um nível a mais de identação.
     
    Antes que você comece a sair por ai distribuindo espaços aos seus códigos, há algumas coisas a considerar sobre a identação.
     
    A identação pode ser feita com "hard tabs", espaços ou "soft tabs". A identação com um hard tab é exatamente um caractere de tab. É quando você aperta a tecla tab do teclado (Fica em cima do "caps lock", representada por duas setinhas) e o seu editor adiciona um único caractere. A identação por espaços usa a tecla de espaço ao invés do tab para adicionar o espaçamento. É praticamente inviável, já que pra adicionar uma identação adequada você teria que apertar a tecla espaço umas 12 vezes. Os soft tabs são uma mistura dos dois estilos. Quando você aperta a tecla tab, ao invés de adicionar um único caractere de tab, o editor adiciona um determinado número de espaços. É como se você apertasse a tecla de espaço várias vezes.
     
    Muitas pessoas preferem usar soft tabs, muitas outras preferem hard tabs. Isso é um debate que dá longas horas de discussão para programadores experientes. Cada um tem suas vantagens e desvantagens.
     
    Vantagens do Hard Tab:
    Seu tamanho pode ser alterado editando as preferências do editor de texto.
    É mais fácil controlar o nível de identação, uma vez que é composto de um único caractere.

    Desvantagens do Hard Tab:
    Alguns editores zoam o caractere de tab, tornando a identação totalmente errada, mesmo que tenha sido feita corretamente. Esse é o caso do OTScriptLive!, muito usado para programar para Open Tibia. Se você usa OTScriptLive!, considere trocar de editor. Existem muitas alternativas ótimas, como SciTE, Notepad++, gedit...

    Vantagens do Soft Tab:
    Já que é composto de espaços, é garantido que o código seja exibido da mesma forma em todos os editores.
    Não tem o problema de editores que zoam a identação, como no Hard Tab.

    Desvantagens do Soft Tab:
    Seu tamanho não é variável.
    O arquivo fica maior, já que cada caractere usado no hard tab corresponde a quatro ou oito caracteres do soft tab (dependendo do tamanho adotado).
    Por ser composto de espaços, é extremamente chato remover níveis de identação.

    A escolha é sua. Se você usa OTScriptLive!, recomendo trocar agora mesmo de editor, pois você não terá suporte a soft tabs e os hard tabs são destroídos pelo programa, tornando a identação correta um desastre. Você terá que fazer a identação com espaços.
     
    Eu, particularmente, prefiro hard tabs. É muito mais natural. A maioria dos projetos open source usam soft tabs para garantir que o código fique idêntico em todos os editores, e para um projeto aberto assim, com várias pessoas mexendo, até faz sentido. Mas na minha opinião, isso traz uma série de problemas.
     
    Independente de qual for sua decisão, siga sempre esta regra: Nunca, jamais, misture caracteres de tab com espaços.
     
    Chega disso, vamos logo aprender a identar!
    A identação, diferente do que você deve estar pensando, é uma coisa ridiculamente simples.
     
    Tudo se baseia em usar um espaçamento para separar os escopos. A cada escopo criado, adiciona-se um tab a mais à cada linha seguinte. A cada escopo fechado, remove-se um tab de cada linha seguinte. Veja:
     

     
    Cada setinha representa um caractere de tab. Toda vez que um escopo novo é aberto (por um "function", "for" ou "if"), as próximas linhas recebem um tab a mais. Toda vez que um escopo é destruído (por um "end"), todas as próximas linhas, incluindo a linha do end, recebem um tab a menos.
     
    Se seguirmos essa regra, dá pra perceber que no escopo global (nível 1), as linhas terão 0 tabs. Em um escopo de nível 2, terão 1 tab, e assim por diante.
     
    Há um caso especial: "else" e "elseif". Eles funcionam como se abrissem um novo escopo, ou seja, as linhas seguintes recebem o tab adicional, porém a linha do "else" e "elseif" não. Veja:
     

     
    O "segredo" da identação é sempre adicionar mais um tab depois de "repeat", "while", "do", "for", "if", "elseif", "else" e "function" e colocar um tab a menos depois de "end" e "until".
     
    Outro ponto importante da identação é a de tabelas verticais. Quando você fizer uma tabela que se extende verticalmente, idente seus valores. Nunca coloque o caractere de abertura ({) e fechamento (}) em uma linha que contém um valor, e não idente a linha desses caracteres. Veja:
     

     
    Isso é tudo sobre identação. Não deixe para identar depois que o código estiver pronto! Quando você pular uma linha, já adicione os tabs necessários e continue escrevendo. A maioria dos editores adicionam estes tabs automaticamente se você habilitar a opção, mas apesar de ser uma questão de gosto, não recomendo usar este recurso.
     
    Se você chegou até aqui e acha que entendeu (A parte de identação ao menos, não vou te culpar se você não entendeu sobre escopo), então você agora sabe identar! Yay!
     
    Nem tudo é identação...
    Se você achou que identação é a unica coisa que torna um código elegante, se enganou. Porém, daqui pra frente, as coisas serão bem mais simples.
     
    Código Frankstein não é legal.
    Se você usa variáveis com nomes em português, pode ir parando com Lua agora mesmo e vá programar em G-Portugol. Apesar de ter sido criada no Brasil, a sintaxe de Lua é em inglês e, portanto, não misture inglês com português. Se você não sabe inglês, já passou da hora de começar a aprender.
     
    Quem é esse pokémon?
    Use nome de váriáveis auto-explicativos, e nunca abrevie, à não ser que a abreviação seja comumente usada, como "tmp" ao invés de "temporary". Ninguém é obrigado a ficar adivinhando o que aquela sua variável "cntplr1" ou "hahahalol" significa.
     
    Como faz essa mágica?
    Eu acho comentários muito idiotas. Diversos programadores vivem dizendo "explique cada linha de código com um comentário". Isso simplesmente não faz sentido, o código está bem ali. Como disse Linus Torvalds, "Talk is cheap, show me the code". Se o negócio foi bem escrito, qualquer programador que se preze vai entender... Ou não. Existem algumas gambiarras que você precisa comentar. Quando fizer algo que não é tão óbvio assim só de ler o código, comente. Isso é comum em números mágicos, por exemplo:
     

    radius = radius + 0.5
     
    Por que aquele " + 0.5" está ali? O que ele faz de especial? Isso não dá pra descobrir apenas lendo o código, então comente e explique suas magias negras.
     
    Volte para a segunda série.
    Isso é um caso sério. Muito sério. Aprendemos na segunda série a sempre usar espaço depois de vígula, mas parece que tem gente que ainda insiste em fazer errado. Custa tanto assim fazer isso:

    doSetCreatureOutfit(cid, outfit, -1)
    Ao invés disso:

    doSetCreatureOutfit(cid,outfit,-1)
    ?
     
    Sempre. Use. Espaços. Depois. Da. Vírgula.
    Sim, eu já estou cansado disso.
     
    Maria vai com as outras.
    Se todo mundo usa o nome de variável "cid" para identificar o Creature ID de algo, siga a moda e use também. Fica confuso tentar entender um código que usa "banana" ao invés de "cid", que é o que todo mundo já está acostumado.
     
    Não use parenteses em condicionais!
    Os estadunidenses começaram com uma mania chata de colocar parenteses em condicionais, tipo isso:
     

    if (x == 10) then
     
    Parece que não entenderam muito bem que Lua é Lua, C++ é C++. Não faça isso, à não ser quando estritamente necessário pra evitar ambiguidade em uma condição muito grande. Faça do jeito que Lua foi feito para ser usado:
     

    if x == 10 then
     
    The KISS Principle.
    KISS é uma sigla inglesa para a frase "Keep It Simple, Stupid!", que significa mais ou menos isso: "Faça as coisas da forma mais simples, seu estúpido!".
     
    Nunca faça gambiarra quando não é necessário. Sempre faça as coisas da forma mais simples, pois é mais fácil de arrumar bugs e facilita a leitura.
     
    Número de linhas não indica qualidade de código!
    Esqueça essa história de que quanto menos linhas, melhor. Número de linhas nunca foi indicador de qualidade de código, então JAMAIS, e eu vou dizer denovo, JAMAIS coloque mais de uma coisa na mesma linha. É sério. Nunca faça algo assim:
     

    if x <= 0 then return false end
     
    Sempre separe cada comando em uma linha, assim:
     

    if x <= 0 then return false end
     
    Programe como se quem ler seu código fosse um serial killer com complexo de fofura.
    Não preciso explicar, apenas faça isso.
     
    Use vírgula no último elemento de uma tabela vertical.
    Veja:
     

    local messages = { "123", "456", "789", }
     
    O último elemento, "789", possui uma vírgula no final, mesmo sendo o último elemento da tabela. Sempre faça isso em tabelas verticais, tanto para manter a consistência visual, quanto para evitar que você adicione outro elemento depois e esqueça de colocar a virgula, ocasionando um erro. Não se preocupe, Lua aceita essa sintaxe, mas apenas faça isso em tabelas verticais.
     
    Linhas vazias são importantes também.
    Deixe algumas linhas em branco para separar partes do código. Elas ajudam bastante na visibilidade.
     
    E o mais importante de tudo: Siga um padrão.
    Adote um padrão de estilo e siga ele! Se você usa espaço em um lugar, mas não usa em outro, pode ir parando com isso. Sempre mantenha seu código dentro de um padrão que te deixe confortável. Não misture as coisas. Se você fez de um jeito, faça sempre desse jeito.
     
    Eis o meu padrão de estilo para a linguagem Lua. Você pode seguí-lo se quiser, ou seguir o seu próprio, mas o importante é que seu estilo tenha uma razão para cada coisa e que você se sinta confortável com ele, e use-o sempre, em todas as ocasiões, quebrando-o apenas em situações muito, muito especiais.
     
    Skyen Hasus' Lua Coding Style Guide
    Este é meu estilo de código para Lua. Todas as regras aqui foram pensadas antes de serem criadas, então ouso dizer que é um estilo consistente.
     
    Use o syntactic sugar para declarar funções.
    Faça assim:

    function foo()
    Ao invés de:

    foo = function()
     
    Não use espaços para separar o nome da função dos parênteses da lista de argumentos.
    Faça assim:

    function foo()
    Ao invés de:

    function foo ()
     
    Não use espaços no início ou no final de parenteses, chaves ou colchetes.
    Faça assim:

    function foo(bar, baz) x = {"a", "b"} x[1]
    Ao invés de:

    function foo( bar, baz ) x = { "a", "b" } x[ 1 ]
     
    Use sempre um espaço antes e depois de operadores binários (dois valores: +, -, *, /, %, =, ==, <=, et cetera...).
    Faça assim:

    x = a + b * c
    Ao invés de:

    x=a+b*c
     
    A exceção para a regra acima são tabelas de uma linha só.
    Faça assim:

    x = {x=100, y=100, z=7}
    Ao invés de:

    x = {x = 100, y = 100, z = 7}
     
    Nunca use espaço depois de um operador unário (um só valor: único caso é o operador de negatividade, -).
    Faça assim:

    x = -a
    Ao invés de:

    x = - a
     
    Use sempre aspas para strings de uma linha só e [[]] para string de múltiplas linhas.
    Faça assim:

    msg = "And he said: \"Hello, world!\"..."
    Ao invés de:

    msg = 'And he said: "Hello, world!"...'
     
    Use a notação lower_underscore para nome de variáveis e funções. Todas as letras são minusculas e espaços são separados por underscore (_).
    Faça assim:

    function long_function_name() long_variable_name = 1
    Ao invés de:

    function longFunctionName() longVariableName = 1
     
    Use a notação CamelCase para nome de classes. (Apenas quando usar orientação à objetos!)
    Faça assim:

    Class = {}
    Ao invés de:

    class = {}
     
    Tabs tem tamanho de 8 caracteres!
    Faça assim:

    if true then this_tab_is_8_characters_wide = true end
    Ao invés de:

    if true then this_tab_is_4_characters_wide = true end
     
    Não use a notação multilinha de comentários. Use a notação de única linha em todas as linhas.
    Faça assim:

    -- Hello -- World
    Ao invés de:

    --[[ Hello World ]]
     
    Finalmente o fim.
    Foi um "tutorial" bem longo, mas espero que ajude muita gente à escrever códigos mais legíveis. Se você tem alguma dúvida, ou quer ver se sua identação está correta, ou quer discutir uma regra de estilo, ou ficou confuso em alguma parte e precisa de uma explicação melhor, ou achou algum erro, ou precisa de alguma dica, poste aqui!
     
    E não menospreze a beleza de um código, porque a beleza é o fator mais importante. Algo bem escrito é mais fácil de consertar e manter do que algo mal-escrito. Acostume-se a aplicar as suas regras de estilo conforme programa, e não depois que está tudo pronto.
     
    E acima de tudo, use um bom editor de texto!
    (Sério, parem de usar OTScriptLive!)
    (E coloquem espaços depois de vírgulas!!)
     

  13. Upvote
    cabrito2v deu reputação a Oneshot em Erro [Warning - ProtocolGame::sendFYIBox] Trying to send an empty or too huge   
    Tá aí o problema, a função doPlayerPopupFYI utiliza uma variável que não foi declarada no script.
     

    local config = { loginMessage = getConfigValue('loginMessage') } function onLogin(cid) local loss = getConfigValue('deathLostPercent') if(loss ~= nil) then doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10) end local Subwat = getPlayerAccountManager(cid) if(Subwat == MANAGER_NONE) then local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage if(lastLogin > 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) str = "Seu ultimo login foi " .. os.date("%a %b %d %X %Y", lastLogin) .. "." else str = str .. "The BEST" doPlayerSendOutfitWindow(cid) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) elseif(Subwat == MANAGER_NAMELOCK) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appearss that your character has been namelocked, what would you like as your new name?") elseif(Subwat == MANAGER_ACCOUNT) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Ola, digite 'account' acessar sua conta ou digite 'cancel'.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Ola, digite 'account' Para criar uma conta no Subwat ou 'recover' Para recuperar conta perdida.") end if(not isPlayerGhost(cid)) then doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) end local message = "Subwat Server - Um mapa escroto com hunts escrotas para gente escrota" doPlayerPopupFYI(cid, message) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Bem vindo!") registerCreatureEvent(cid, "Mail") if getPlayerLevel(cid) < 717217 then registerCreatureEvent(cid, "AdvanceTeleport") end registerCreatureEvent(cid, "GuildMotd") registerCreatureEvent(cid, "Idle") registerCreatureEvent(cid, "DeathBroadcast") registerCreatureEvent(cid, "addons") registerCreatureEvent(cid, "FragReward") registerCreatureEvent(cid, "ZombieAttack") registerCreatureEvent(cid, "onPrepareDeath") registerCreatureEvent(cid, "magebomb") registerCreatureEvent(cid, "SkullCheck") registerCreatureEvent(cid, "RepLogin") registerCreatureEvent(cid, "ReportBug") doSetCreatureLight(cid, 25, 250, -1) return true end
     
    Agora sim funcionará.
     
    Abraços.
  14. Upvote
    cabrito2v deu reputação a Slicer em Pokemon Centurion 4.0   
    o topico n sera fechado...
    como o critical flo o tibia eh open sourcer e ngm tem direito de nd..
     
    e xisto n vem fla q o cacaiu tem todo o direito sobre o conteudo pq o conteudo base eh do brun123 e tem bastante coisa nesse serv minha tb... deu de discuçoes!
  15. Upvote
    cabrito2v deu reputação a 20cm em Fixstring(String)   
    O que ela faz?
    Ela transforma uma string, por exemplo, de "eitor laba v1d4 l0k4" para "Eitor Laba V1d4 L0k4"
    Pode-se dizer que ela deixa em caixa alta a primeira letra de cada palavra de uma string, e, se forem números, não faz nada.
     
    Aqui vai ela:
     

    function fixString(string) local k = string.explode(string," ") local x = "" local y = 0 for i = 1, #k do if y == 0 then x = x ..string.sub(k[i],0,1):upper()..string.sub(k[i],2) y = 1 else x = x .." "..string.sub(k[i],0,1):upper()..string.sub(k[i],2) end end return x end
     
     
    Flw!
  16. Upvote
    cabrito2v deu reputação a brun123 em Remover Summon Do Inimigo   
    Spell que remove os summons que tem o mesmo nome do mestre (precisa estar atacando algum summon dele ou o verdadeiro):
     

    function onCastSpell(cid, var) local target = getCreatureTarget(cid) if not isCreature(target) then doPlayerSendCancel(cid, "You need a target.") return false end local master = getCreatureMaster(target) if not isPlayer(master) then doPlayerSendCancel(cid, "This spell works only against players.") return false end if #getCreatureSummons(master) > 0 then local function doRemoveSummon(creature) if isCreature(creature) then doSendMagicEffect(getThingPos(creature), CONST_ME_POFF) doRemoveCreature(creature) end end local success = false for _, sid in pairs (getCreatureSummons(master)) do if getCreatureName(sid) == getCreatureName(master) then addEvent(doRemoveSummon, _ * 95, sid) success = true end end end return success end
     
    Spell que indica a posição do verdadeiro:
     

    function onCastSpell(cid, var) local target = getCreatureTarget(cid) if not isCreature(target) then doPlayerSendCancel(cid, "You need a target.") return false end local master = getCreatureMaster(target) if not isPlayer(master) then doPlayerSendCancel(cid, "This spell works only against players.") return false end local function revelar(cid, target, times) if not isCreature(cid) or not isCreature(target) or times <= 0 then return end doSendMagicEffect(getThingPos(target), CONST_ME_TUTORIALSQUARE, cid) doSendMagicEffect(getThingPos(target), CONST_ME_TUTORIALARROW, cid) addEvent(revelar, 450, cid, target, times - 1) end revelar(cid, master, 10) return true end
  17. Upvote
    cabrito2v deu reputação a Slicer em Addevent()   
    for i = 1, 10 do addEvent(teste, i*1000) end
  18. Upvote
    cabrito2v recebeu reputação de cacaiu em Pedito De Sistema Axo Que É Simples   
    Vou tentar fazer aqui, já edito se conseguir, já pensei em um modo de fazer.
     
    EDIT!
    Pronto.
    Se for o que eu entendi, não sei se era bem isso.
     
    Em Actions crie o arquivo.lua com isso.
     
     
     
     
    Adicione isso no actions.xml.
     
     
     
     
    Depois em movements você cria um arquivo.lua com isso.
     
     
     
     
    Adicione isso no movements.xml.
     
     
     
     
    Aqui funcionou só não entendi muito bem o que vocês queriam, era pro player ficar no lugar do item e remover o item ? Era só pra ele ficar em cima do item ?
  19. Upvote
    cabrito2v deu reputação a RodrigoSc em [Encerrado] [Pokemon] Dúvidas? - Pda   
    Hey people!! Im gonna give you all my recopilation and all my own systems because I closed my server (too much work for 2 persons )
     
    Recopilation:
    -Full Bike System By Me:
     
     
    -Full Saffari System Edited By Me:
     
     
     
    -BOX 4 Mission Quest Edited By Me.
     
     
     
    -GhostWalk for shinys.
     
     
     
    -Emoticons Edited By Me.
     
     
     
    -Pokemon Change Sex Talkaction Adapted By Me.
     
     
     
    -Quest List Talkaction By Me.
     
     
     
    -Cassino Reward System Based On Fighting Tower By Me!
     
     
     
    Thats all for now people, soon Im gonna put more systems!
  20. Upvote
    cabrito2v deu reputação a brun123 em [Encerrado] [Pokemon] Dúvidas? - Pda   
    É porque é muito mais fácil deixar o server balanceado se as forças dos pokémons dependerem do level do treinador. Desse jeito que está, acaba que stones não são tão valorizadas e pokémons que não deveriam conseguir vencer outros, vencem muito fácil, ou o contrário. O level do player serve pra que ? Não to falando que sem level próprio é melhor, e se eu fosse abrir um servidor, abriria 2 mundos, um com cada estilo. A propósito, colocar pokémon level muito alto no mapa, a partir do level 50, já acaba com toda a graça do servidor... Todos os players que conseguem um pokémon forte, já tem ele no level 80+.
  21. Upvote
    cabrito2v deu reputação a brun123 em [Encerrado] [Pokemon] Dúvidas? - Pda   
    Só um pergunta, vocês preferem que o server tenha cada pokémon com seu respectivo level e atributos, e os pokemons evoluem a partir de level, ou preferem como o antigo SvkE (ou PxG), onde os pokémons não têm level e suas forças dependem do level do treinador, e eles evoluiriam apenas por stones ?
  22. Upvote
    cabrito2v recebeu reputação de daaadam em [Encerrado] [Pokemon] Dúvidas? - Pda   
    Aqui está o Dat+Pic+Spr do PSTORM -
     
     
    http://www.4shared.com/rar/ClDgNdVP/DatPicSpr_PSTORM.html
  23. Upvote
    cabrito2v deu reputação a brun123 em [Encerrado] [Pokemon] Dúvidas? - Pda   
    É tão difícil dar ctrl c + ctrl v no brock, editar o nome dos pokémons que ele usa e o level ?
  24. Upvote
    cabrito2v deu reputação a brun123 em [Encerrado] [Pokemon] Dúvidas? - Pda   
    @CabritenhO
    "doCreatureExecuteTalkAction(cid, "/pokeread")" que ele executa a talkaction.
     
    Sobre o bug de bugar pokebolas, tentei fazer aqui dando crash proposital no server (reload em movements) e não deu bug não, o pokémon só morre quando você ta usando e o server dá crash.
  25. Upvote
    cabrito2v recebeu reputação de natanaelrox em [Encerrado] [Pokemon] Dúvidas? - Pda   
    Quem estiver com problema de pokémons não indo pro cp você tem que configurar o id da cidade no depot do seu centro pokémon.
     
    É só ir pelo map editor e colocar, clicando com o botão direito no depot ..
    Caso não tenha a opção de escolher é po que o map editor não reconhece o item.xml como o servidor e tem que fazer uma modificação nos items.xml que está na pasta 8.54 do seu map editor
     
    Pois provavemente ele vai está algo do tipo assim, parecido com isso, não tenho como saber ao certo agora.
     
    <item id="2589" to item id="2592" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
     
    Algo desse tipo, é só substituir por isso abaixo, salvar, abrir o editor, abrir o mapa, colocar os ids das cidades e salvar o mapa.
     
    <item id="2589" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2590" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2591" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
    <item id="2592" article="a" name="locker">
    <attribute key="type" value="depot"/>
    <attribute key="containerSize" value="30"/>
    </item>
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...