Ir para conteúdo

gmstrikker

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    gmstrikker deu reputação a Snowsz em Criando um mod simples   
    Neste tutorial espero ensina-los a criar um mod simples, composto por uma janela e um botão, para ativa-la e desativá-la.
     
    O mod deve ficar mais ou menos assim:
     

     
     

    • Entre na pasta mods do seu otclient, e crie um arquivo com um nome quaisquer, como por exemplo, o nome que quer para seu mod,  o meu, vou chamar de "tutorial".
     
    • Dentro da pasta criada, crie um novo arquivo com extensão "otmod", coloque o nome do seu mod nele, eu vou colocar o nome de "tutorial", ficando "tutorial.otmod": 
     
    • Dentro do seu arquivo de extensão "otmod" adicione o seguinte código:
     
    Module name: description: author: website: version: autoload: autoload-priority: scripts: [ ] @onLoad: @onUnload:  
    • Explicando
     
    Dai você me pergunta por que isso está identado dessa forma?
    Module name: Com dois espaços antes de "name:"?
    Porque "Module" é uma declaração do tipo de arquivo que está sendo utilizado, já o "name:", é um componente do "Module", por isso, ele deve estar dentro de "Module", caso contrário, poderá ocorrer erros.
     
    Nesta linha:
    Module Ele está declarando que este arquivo é um modulo, uma modificação para seu client.
     
     
     
    Nesta linha:
    name: Aqui, estará sendo declarado o nome do seu módulo, eu vou colocar o nome "Tutorial":
    name: Tutorial Ao clicar no gerenciador de módulos, ele irá mostrar o seu mod com o nome escolhido:
     
     

    Nesta linha:
    description: Aqui, entrará a descrição do seu mod, por exemplo:
    description: Um mod simples. Irá mostrar mais ou menos assim:

     
     
     
    Nesta linha:
    author: Entrará o seu nome, ou seja, o nome de quem criou o mod(autor óbvio), por exemplo:
     
    author: Snowsz Ficaria mais ou menos assim:

     
     
     
    Nesta linha:
    website: Você pode declarar o seu site, por exemplo:
     
    website: tibiaking.com Ficaria mais ou menos assim:

     
     
     
    Nesta linha:
    version: Você pode colocar a versão do seu mod, por exemplo:
    version: 1.0 Ficaria mais ou menos assim:

     
     
    A parte com explicação gráfica terminou  !
     
     
     
    Nesta linha:
    autoload: Será determinado se o seu mod irá ser carregado automaticamente, por exemplo:
     
    Exemplo 1:
    autoload: false Assim, seu mod só irá ser carregado manualmente, você terá que ir no gerenciador de módulos e clicar em carregar para inciar seu mod.
     
    Exemplo 2:
     
    autoload: true  Assim, seu mod só irá ser carregado automaticamente, sem a necessidade de clicar para ser carregado.
     
     
     
    Nesta linha:
    autoload-priority: Será determinada a prioridade de carregamento do seu mod, "Como assim?", é simples, ele irá carregar antes ou depois de outro mod, isso determina em que posição de carregamento seu mod deve estar, como por exemplo, em primeiro lugar  , um exemplo de prioridade:
    autoload-priority: 1000 Acho que não tem nenhum mod com essa prioridade? Hehe, será um dos primeiros a carregar!
     
     
     
    Nesta linha:
    scripts: [ ] Será determinado os scripts carregados pelo seu módulo, os scripts usado por ele, por exemplo:
    scripts: [ tutorial ] Ele irá busca um arquivo com o nome tutorial.lua na mesma pasta que ele estiver, e carregará tudo que tem dentro daquele arquivo.
     
     
     
    Nesta linha:
    @onLoad: Será determinado que função o seu mod irá chamar ao iniciar, por exemplo:
     
    @onLoad: print("Hello World!") Irá mostrar uma mensagem no seu terminal do otclient.
     
     
     
    Por fim, nesta linha:
    @onUnload: Será determinado que função o seu mod irá chamar ao ser descarregado, ao se desligar, por exemplo:
    @onUnload: print("Bye World! ;(") Irá mostrar uma mensagem no seu terminal do otclient.
     
    Bom, a configuração que usaremos no nosso mod simples será essa:
     
    Module   name: Tutorial   description: Um mod simples.   author: Snowsz   website: tibiaking.com   version: 1.0     autoload: true   autoload-priority: 1000     scripts: [ tutorial ]     @onLoad: init()   @onUnload: terminate()  
    Mexa apenas no que souber
     
     

     
    Na pasta do seu mod, crie um novo arquivo, com o nome "tutorial", ele deverá conter a extensão "lua", ficando "tutorial.lua", que é o arquivo de script setado no nosso "tutorial.otmod":
    scripts: [ tutorial ] Dentro dele, coloque o seguinte código:
    function init() tutorialWindow = g_ui.displayUI('tutorial.otui') tutorialWindow:hide() tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) end function terminate() tutorialWindow:hide() end function onoff() if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end end A função "init()" é a função chamada pelo seu mod, ao iniciar, a função "terminate()", é chamada pelo seu mod, ao ser desligado.
    Na função "init()", em uma de suas linhas podemos encontrar isso:
    tutorialWindow = g_ui.displayUI('tutorial.otui') Onde tem "tutorialWindow", está sendo declarado uma variável global, um iniciante em lua deve saber o que é, então não vou explicar.
    Dentro de tal variável, há uma função, "O que essa função faz?", ela executa os elementos contidos em um arquivo, que seria os arquivos de extensão "otui", nela, estaremos executando o "tutorial.otui".
     
     
    Nesta linha:
    tutorialWindow:hide() Ele executa uma função na variável "tutorialWindow", que seria uma função para esconder a janela, pois, o que estava contido no "tutorial.otui" seria uma janela que criaremos logo logo.
     
    Nesta linha:
    tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) Está sendo declarado uma variável global, nela, está contido a referencia de uma função, que seria um botão adicionado ao lado direito do menu, exemplo:
    Utilizei a imagem de ícone do otclient para demonstração.
     
    Explicando a função:
    Sua base é essa:
    modules.client_topmenu.addRightButton(id, description, icon, callback, front) • Id: Será o id dado ao botão, para melhorar o acesso.
    • Description: É a descrição do botão, ao passar o mouse em cima, aparecerá um texto.
    • Icon: É a imagem do botão, como a que eu utilizei no exemplo, usei o ícone do otclient.
    • Callback: É uma função chamada ao clicar nele.
    • Front: Define se o botão será adicionado na frente ou atrás dos demais botões do seu menu.
     
     
    Explicando a função "terminate()", na sua única linha podemos encontrar isso:
    tutorialWindow:hide() É o seguinte, ao seu mod descarregar, ele irá esconder sua janela criada.
     
     
    Explicando a função "onoff()", nas suas linhas podemos encontrar isso:
    if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end Mas bem, o que isso faz? Simples, "tutorialWindow:isVisible()", ele checa se a janela está visível, se estiver, ele irá esconde-la "tutorialWindow:hide()", caso a janela não esteja visível, ele irá mostra-la "tutorialWindow:show()", essa é a utilidade da função utilizada no botão do menu.
     
     
     
    Agora, na pasta do seu mod, crie um novo arquivo, com o nome de "tutorial", a extensão dele deve ser "otui", ficando "tutorial.otui", dentro desse arquivo, adicione isso:
    MainWindow id: tutorialwindow height: 255 width: 438 !text: tr("Mod simples") Explicando:
     
    • "MainWindow", seria o objeto que irá ser utilizado pelo arquivo, no caso, uma janela.
    • "id", o id, estaria setando um id para a sua janela.
    • "height", seria a altura da sua janela, do "MainWindow".
    • "width", seria a largura da sua janela, do "MainWindow".
    • "!text", seria o texto inserido como título de sua janela, a função chamada nele "tr()", chama uma tradução para aquela frase, caso não tenha ficaria aquilo mesmo, caso tenha, iria mudar para outro texto traduzido.
     
     
     
     
    Bom gente, espero que tenham gostado do tutorial, eu não sou bom com tutoriais... Se tiver me perdido peço desculpas, qualquer erro podem postar aqui que irei corrigir, se eu tiver me enrolado em algo, me desculpem, dei várias pausas enquanto fazia isso kk', espero que tenham entendido tudo.
     
    Créditos: Snowsz
  2. Gostei
    gmstrikker deu reputação a thelifeofpbion em [creaturescript] Always Green Emblem shield   
    Bom a um tempo atras como de costume eu pedi para alguém me ajudar a montar um script onde os players que tiverem guild terem o emblema de guild (de quando começa a war) não to com tempo pra procurar a foto agora, mas é aquele verdinho que fica do lado do char, como ninguém sabia, ou não pode ajudar eu procurei sobre para tentar montar isso e consegui (pelo menos ate agora), vou postar para os ouros membros do meu tópico de ajuda testarem e talvez achar algum bug. 
    obs: só para quem já tem os códigos na distro

     
    Finalidade do Script:  É bem simples, apenas deixar o escudo verde ativado quando um player tiver uma guild, para identificar seus aliados, mesmo com a war entre guilds desativadas.
     
     
    Para adicionar o script também é bem simples, Basta ir em Data>creaturescript>scripts>login.lua
    e antes do ultimo
     
    return true 
    end
     
    voce adiciona isso.
     
    Pronto, cada vez que o player logar, vai definir um inimigo (0). ou seja não vai ter inimigo mas sua guild vai ter o emblema verde...
       Eu consegui essa solução agora de manhã então eu não sei se pode ter bugs, porém pelo que eu pude testar, consegui de boa e também consegui entrar em war com outras guild, sair de war e    etc.

      obs: Eu tava com um problema na minha talkactions de war, quando uma guild que recebia convite para entrar, aceitava mas depois não conseguia sair. só a guild que convidou podia cancelar a   guerra entre guild... não sei se isso é normal mas consegui modificar, caso alguém tenha o mesmo problema eu posso passar a talkaction.
     
  3. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    tem sim, eu só não coloquei porque o próprio tibia ja tem um sistema de exhausted padrão de 1 segundo entre ações contendo itemEx (que é configurável pelo config.lua)
  4. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    sim ué.. pra upar do 50 pro 51 a conta é a seguinte:

    (51*51/k) - (50*50/k) que é igual a 1300 - 1250 = 50 picaretadas.
  5. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    dá ué.. 
    terra = {65783} . . . isInArray(terra, itemEx.uid) agora só vai dar pra minerar nos pisos que tiverem unique id 65783.

    A constante de level é o seguinte.. a fórmula da experiência necessária é level²/k (level ao quadrado dividido por k). Se vc quer upar nivel 70 vc precisa minerar 70*70/k que da 2450 vezes.
  6. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera.
    Enfim, vamos ao script:
    actions\scripts\mining.lua:
    terra = {351,352,353,354,355}  levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond  [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls  [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem  [37] = 2155, -- green gem  [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald  [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177  -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script:
    local config = {
    storage = 19333,
    chance = 40, --- chance de achar um item ou não
    k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante)
    experience = 19334
    }
    o storage é onde vai salvar o seu nível
    chance é a chance de pegar um item cada vez que minera.
    k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10.
    experience é o storage que fica salvo sua experiencia.
    Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players.
    e no actions.xml:
    <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser.
    PS: Uma fotinha pra vcs verem
    Espero que tenham gostado!  
  7. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    no lugar de 
    local item = drops[math.random(1,#drops)] deixa assim
    local itens = drops[math.random(1,#drops)] local item = itens[math.random(1, #itens)]  
     
  8. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    tenho, vc tem que alterar o banco de dados onde fica salvo o item pra adicionar uma nova coluna chamada 'rarity' com valor padrão 0.
    Se o item for RARE, UNIQUE, ELIT vc adiciona ele no banco de dados com rarity 1, 2 ou 3 respectivamente e na hora de cancelar a venda ou comprar ou vender vc tem que passar o item com a raridade respectiva, então vc vai fazer algo parecido com o script de adicionar raridade só q no script do shop.
  9. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    seu banco de dados é mysql?
  10. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    seguinte, vc acha q consegue editar a tabela do banco de dados q salva os itens das transactions pra ter um campo novo chamado rarity que tem valor padrão = 0?

    Preciso disso pra botar em prática oq eu to pensando
  11. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    me lembra terça, juro q dessa vez é de verdade.
  12. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    só dia 28  mas depois do dia 22 acho q fico mais tranquilo e faço, me lembra!!
  13. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    era isso q eu tava falando..
  14. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    tenta fazer as mudanças desse ultimo script no script original, eu usei oque vc colou pra editar e vc pode ter removido alguma linha importante.
  15. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    você que conseguiu, vc que é o cara!! :D
  16. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    oque aumenta uso de cpu são excessos de checagens, esse script aí vai ser uma checagem só independente de ser action ou unique ou itemid
  17. Gostei
    gmstrikker deu reputação a xWhiteWolf em Mining System   
    só colocar abaixo de  doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".")

    doCreatureSay(cid, "mensagem que vai falar", TALKTYPE_SAY)
  18. Gostei
    gmstrikker deu reputação a xWhiteWolf em Glacier Set dando conditions em área   
    Eai galera, esse script eu fiz para um membro aqui do TibiaKing no suporte e achei que ficou bem legal então decidi postar.

    Explicação: Ao tomar um dano maior que 300, se o player tiver usando a glacier robe, uma área em volta dele vai ser congelada e todos dentro dessa área ficarão com slow. Caso o player estiver com o full glacier set, além do paralyze, as pessoas dentro da área receberão dano de freezing

    crie um arquivo em creaturescripts\scripts chamado glacierrobe.lua e adicione isso daqui dentro dele


    agora vá em creaturescripts\scripts e procure um arquivo chamado login.lua.
    dentro dele coloque isso (de preferencia embaixo dos outros registerCreatureEvent):
    registerCreatureEvent(cid, "glacierrobe") Lembre-se que se vc quiser repetir isso pra outros set's você tem que repetir todo o processo, tanto no creaturescripts.xml quanto no login.lua


    no meu server além do set glacier eu uso os outros 3 set's elementais, ficando assim:


    EDIT:: Algumas imagens pra vocês verem como o script funciona:







     
  19. Gostei
    gmstrikker deu reputação a xWhiteWolf em [CMS] Campeonato Mensal de Scripting #01   
    Fala galera do Tibia King, hoje eu trago a vocês a primeiríssima edição do Campeonato Mensal de Scripting. Essa é sua chance de mostrar suas melhores criações e concorrer contra outros membros à prêmios incríveis!

     
    TEMA DESSA EDIÇÃO: QUESTS
    Para este tema especificamente vocês podem utilizar quaisquer pastas do server, pode ser desde uma quest simples em actions como uma quest super complexa. Surpreendam-me com sua criatividade pois inovação será levada em consideração.
     

     
    Como vai funcionar:   Para participar, a partir de hoje (17/01/2015) os membros terão 2 semanas para fazer um script em torno do tema acima e postar-lo na Seção de participação do CMS, lá seu tópico ficará visível somente para você e nós da equipe do TK, poste também neste tópico apenas avisando que você está participando do concurso.   Na seção de participação do CMS seu script será avaliado e a avalização será postada no próprio tópico do autor. Após o término do concurso os links de todos os tópicos de participações deste concurso serão postados no tópico de Resultado desta edição do CMS, os tópicos também serão movidos para a área mais adequada na seção de Scripting (actions, creaturescripts, mods, etc).
    O campeonato só será realizado caso tenhamos mais de 5 de participantes.   OBS: Todas as instruções dos formatos dos tópicos de participações estão na seção de Participação do CMS.  
      Os scripts serão analisados por mim e pelo separadamente seguindo os critérios abaixo:   [Peso 25] Criatividade e Inovação: O quão criativo e inovador você foi ao criar o script, isso vale tanto no código quanto na idéia de sua utilização. Nesse critério será avaliado a capacidade tanto de criar um código de uma forma nova e ao mesmo tempo o quão criativo ficou o seu script no servidor.   Contra exemplo: Fazer um script que seja comum ou igual a várias que tem por aí irá fazer você tirar uma pontuação baixa nesse quesito.   [Peso 15] Aplicabilidade: O quão abrangente é o seu código ou o quão aplicável ele é, tanto em diferentes versões de tibia como em servidores derivados. Nesse critério será avaliado se seu script rodaria em diferentes servidores e também se seria uma idéia viável de se colocar em diferentes tipos de servidores.   Contra exemplo: Fazer um script que tenha funções exclusivas de algumas versões ou fazer um script cuja idéia não seja concebível no mundo do Tibia irá fazer você tirar uma pontuação baixa nesse quesito.   [Peso 10] Simplicidade e Organização. O quão simples e organizado seu código está. Nesse critério será avaliado se seu script está tão simples quanto ele poderia ser e também se ele está organizado (ordem das funções) e identado (estrutura do script) corretamente.   Contra exemplo: Fazer um script bagunçado ou de dificil entendimento acarretará em uma pontuação baixa nesse quesito.  
      No final nós daremos notas de 0 a 10 isoladamente, e ao final compararemos as notas. As notas que possuirem uma discrepância maior que 3 pontos serão reavaliadas em conjunto em prol de obter um padrão nas correções. Após isso, será aplicada uma média ponderada para atribuir os pesos de cada categoria e iremos dar uma nota de 0 a 10 com base nisso.
    O script obrigatoriamente deverá ser de sua autoria e não poderá ser nenhum trabalho que você já tenha postado, a idéia aqui é que você faça um script pro campeonato pois além de treinar irá aprender e melhorar suas habilidades.   Como vocês viram, a maior parte da pontuação está na ideia e não no código em si, foi uma decisão minha e da equipe pra permitir que qualquer um possa participar e ter chance de ganhar, ou seja, não importa se você for o melhor scripter do país, se sua ideia for ruim, não vai adiantar nada seu código estar impecável.   
      Recompensas:   1º Lugar --- 20 REP+, Medalha de Ouro do CMS #01, Conquista de Scripter e Conquista de Scripter King *. 2º Lugar --- 15 REP+, Medalha de Prata do CMS #01 e Conquista de Scripter. 3º Lugar --- 10 REP+, Medalha de Bronze do CMS #01 e Conquista de Scripter.     
     

      Oponente Honrado: O quarto e quinto lugar receberão a Conquista de Scripter e 3 REP+ caso hajam mais de 8 participantes.   * OBS¹: O membro que receber a conquista de Scripter King ficará com ela somente até a próxima edição do CMS, onde o vencedor atual terá que defender o título. Ou seja, para manter sua conquista de Scripter King você terá que ganhar a próxima edição do CMS, caso ao contrário, a conquista irá para o novo vencedor. OBS²: O membro só irá receber a conquista de Scripter caso ele ainda não a possua. OBS³: Todos os membros que participarem ganharão 1 REP+ como gratificação.  
      Por que Participar?   Primeiramente esta é uma chance de realmente competir com outros membros pra saber quem é o melhor, não só quem sabe programar melhor mas sim quem é mais útil programando, nesse concurso as melhores idéias também serão levadas em consideração então mesmo que você não tenha tanta habilidade em Lua, ainda há grandes chances de você vencer! Aqui é sua chance de treinar e aprender cada vez mais sobre scripting!   No mais, tem coisa melhor do que começar um projeto com um real incentivo e depois talvez até receber um prêmio por isso?   Um campeonato que promete revelar não só os melhores scripters como também as mentes mais criativas do TK! Não perca sua chance de participar!   Data final pra envio dos scripts pela seção de participação: 31/01/2015 Resultado dia: 05/02/2015

    A equipe deseja uma boa sorte para todos que forem participar. Abraços.
    Qualquer dúvida sintam-se a vontade para perguntar nos comentários.
  20. Gostei
    gmstrikker deu reputação a xWhiteWolf em Magia que Empurra   
    ele só sai só pra baixo se vc esquecer de botar direction="1" na tag do xml.
  21. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    cara, usa spoiler pfv.. é só clicar no olhinhoo aqui no editor

    eu modifiquei a linha que dava erro:
    if(tool.range[1] and self.item.level < tool.range[1]) or (tool.range[2] and self.item.level >= tool.range[2]) then
     
    só fiz uma checagem pra ver se tool.range[1] e [2] existia antes de comparar o valor. O erro falava q esse tool.range[1] OU tool.range[2] não existia (valor nulo ou nil).
    O restante tá identico. Sobre o sistema, ele é bem complexo.. eu nao to com saco ultimamente pra ficar lendo e testando mas o problema é q vc tem q salvar q o item tem o atributo e checar pra dar o item com atributo tanto pra quem comprar quanto pro player de volta caso ele cancele. Isso é meio chatinho mas nao é nada impossivel. Deixa eu entrar de férias q faço p vc. (Me procura lá pro dia 12 de agosto
  22. Gostei
    gmstrikker deu reputação a xWhiteWolf em Trocar +1,+2,+3 por nomes nesse script refin [10 reps]   
    vc quer q ele possa colocar e comprar itens UNIQ, EPIC e RARE?
  23. Gostei
    gmstrikker deu reputação a xWhiteWolf em Precisa estar perto de agua   
    Fala galera do TibiaKing, pra quem não me conhece eu sou o White Wolf, antigo Night Wolf.. eu venho trazer pra vocês um script que eu to desenvolvendo nas minhas horas vagas e que vai trazer bastante RPG pro server de vocês.

    Servidor testado: The Forgotten Server  0.3.6 (Crying Damson)
    Versão do Cliente: 8.45

    Explicação: Pra quem já jogou AvaOT/Korelin, deve ter notado que algumas magias da tribo da água necessitam estar perto de água para poderem ser usadas, e foi me baseando nisso que eu criei esse script.
    É uma magia que ataca os inimigos se estiver com a target e se não estiver com target ela adiciona vida à você, mas precisa estar perto da água para ser usada!!

    Sem mais delongas, vamos ao script:
    crie um arquivo chamado waterneeded.lua e coloque em spells\scripts\
    --[[ Credits: 30% to Molinero because I used his telekinesis script as base  60% to me (Night Wolf) for doing the rest of the script 10% to the owner of AvaOT for giving me the idea of such thing ~~~FEEL FREE TO EDIT AS YOU WISH, THIS IS JUST A SIMPLE SCRIPT                                          BUT DON'T REMOVE THE CREDITS.~~~ ]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE)    function onCastSpell(cid, var) local water = {490, 491, 492, 493, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625} local spot = getPlayerPosition(cid)     local nxp = spot.x - 3     local pxp = spot.x + 3     local nyp = spot.y - 3     local pyp = spot.y + 3 local k = 1     local target = getCreatureTarget(cid)     for absice = nxp, pxp do         for coordinate = nyp, pyp do             local pos = {x = absice, y = coordinate, z = spot.z, stackpos = 0}             local thing = getThingfromPos(pos)            if thing.itemid > 0 then    if isInArray(water, thing.itemid) == TRUE then k = k+1 if target == 0 then local CreatureHealth = getCreatureMaxHealth(cid)   local lifedraw = math.floor(CreatureHealth /(20*k)) doCreatureAddHealth(cid, lifedraw, 1)  doSendAnimatedText(spot, "+"..lifedraw, 18)    doSendMagicEffect(pos, 1)                     doSendMagicEffect(spot, 12) else local tgtpos = getCreaturePosition(target) local life = math.random (200,1000) doCreatureAddHealth(target, -life, COMBAT_LIFEDRAIN) doSendAnimatedText(tgtpos, "-"..life, 89) doSendDistanceShoot(pos, tgtpos, 36)                     doSendMagicEffect(tgtpos, 53) doSendMagicEffect(pos, 1)                     return doCombat(cid, combat, var)   end end             end         end     end if k ~= nil and k < 2 then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, "You need to be around water to cast this spell..") end     return doCombat(cid, combat, var) end OBS1: Perceba que tá bem rudimentar esse script, até porque essa é a primeira versão dele, pretendo melhorar o script com o tempo 

    OBS2: Se você quiser que o script ataque mais de uma vez pra cada water que tiver no mapa substitua na linha 42:
    return doCombat(cid, combat, var) por 
    doCombat(cid, combat, var) E NÃO ESQUEÇA DE DIMINUIR DO DANO local life = math.random (200,1000) e no spells.xml adicione: ​<instant name="Water Need" words="utura grav vita" lvl="150" mana="300" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="3000" needlearn="0" event="script" value="waterneeded.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Se você curtiu, não remova os créditos.. Sinta-se livre pra melhorar a magia do jeito que você quiser (uma primeira alteração que eu sugiro é mudar o dano e colocar como sendo um math.random do level do player x magicLevel dele, pra magia ter um dano que aumenta com o tempo, e não algo totalmente aleatório).   

    Gostaria de salientar também que essa é a primeira versão de tal script, tem muita coisa pra melhorar e dá pra diminuir esse script consideravelmente, ficaria super feliz se vocês me ajudassem a melhorar isso e remover coisas desnecessárias    

    EDIT: Trouxe algumas imagens pessoal:






  24. Gostei
    gmstrikker deu reputação a xWhiteWolf em Darkness Pact Quest   
    Hoje vou ensinar vocês a fazer uma quest com bastante RPG (e com um pouquinho de esforço talvez o melhor sistema já visto num OTSERV!!)
    É uma quest que você tem um determinado tempo pra matar um monstro e entrar num teleporte ou a passagem será bloqueada
    "tá, mas oque difere essa quest de qualquer script de arena que tenha aí pelo fórum?"
    na verdade nada, mas no meu server eu coloquei um tempo bem ridículo (8 segundos) e é tecnicamente impossível chegar do outro lado.
    "então você fez uma quest que não dá pra fazer, é isso mesmo?"
    não meu caro amigo, é uma quest que foi feita pra ser pensada. Um dos players entra na quest e termina ela, daí outro player ativa a alavanca e ele passa.. fazendo com que o pessoal só consiga passar com a ajuda de um amigo.  Se você conseguir trabalhar em equipe em prol de um prêmio a sua recompensa é a oportunidade de fazer um pacto com as trevas.
    "masoque??"   
    isso mesmo que você entendeu, você ganha a chance de abrir mão da sua vida (literalmente) pra receber uma spell nova.

    ~~ Hoje eu vou ensinar a reproduzirem esse sistema caralhudo no server de vocês:


    Tudo começa no map editor quando você vai fazer uma área + ou - igual a essa e colocar os seguintes actions/unique ids








    Agora vamos aos scripts:
    actions\scripts\newquest.lua


    Feito isso você vai precisar preparar uma sala aonde o player será teleportado caso ele consiga passar e coloque uma alavanca nessa sala.
    Na alavanca você deve colocar o actionid 6102 e uma plaquinha explicando sobre o pacto
    daí você adiciona isso no actions.xml
    <action actionid="6102" script="alavanca de magia.lua"/> e crie o script 'alavanca de magia.lua' que deverá conter o seguinte:


    Feito tudo isso agora só falta criar a magia Target Spell que no caso é essa daqui: 



    e colocar no spells.xml:
    <instant name="Target Spell" words="exevo res" lvl="120" maglv="10" mana="500" exhaustion="3000" prem="0" needlearn="1" script="especiais/seguidor.lua">   <vocation id="6"/> <vocation id="7"/> <vocation id="5"/> <vocation id="8"/> </instant> FIM.

    Agora você só precisa editar as actions pra rodarem de acordo com as posições do seu server então vamos às explicações:
    SCRIPT1:
    local tempo = 8000 ---- tempo até a porta fechar 
    local wall1 = {x=612, y=345, z=7, stackpos=1} -- local da primeira pedra
    local pos1 = getThingfromPos(wall1)
    local wall2 = {x=653, y=345, z=7, stackpos=1} --- local da segunda pedra
    local pos2 = getThingfromPos(wall2)
    local monster1 = {x=615, y=345, z=7, stackpos=1} --- local que cria o monstro, no caso eu uso o Juggernaut mas vc pode editar dentro do script
    local posmonster1 = getThingfromPos(monster1)
    local monster3 = {x=654, y=345, z=7, stackpos=1} --- Ultima posição antes do teleporte, serve pra remover o monstro 
    local idparede = 9788 --- id do obstáculo q será criado
    local alavanca = {x=610, y=344, z=7, stackpos=1} -- POSIÇÃO DA ALAVANCA 
    local alavancapos = getThingfromPos(alavanca)  SCRIPT2:
    local topos = {x=609, y=345, z=7, stackpos=1} -- posição que vai ser teleportado caso clique na alavanca de 'FAIL QUEST'

    Espero que vocês tenham curtido   
    Aqui tem mais duas imagens pra vocês 
    Alavanca:



    Magia:




    EXPLICANDO A MAGIA: Os morcegos seguem a direção que você tá olhando, se vc tiver um target eles seguem o target.
  25. Gostei
    gmstrikker deu reputação a xWhiteWolf em [8.6 Global] University of Chaos   
    Fala galera do TK, hoje eu vos apresento algo que vai além de um projeto, é uma ideologia..   

    O university of chaos é um servidor global sério que tem a proposta de voltar nossos jogadores ao antigo global 8.6 e relembrar os momentos mágicos que o Tibia pode proporcionar. O servidor contém algumas novidades mas nada que comprometa a integridade da idéia de ser um global. Venha nos conhecer!   Rates:
    Experience: 20x Loot: 4x Skills: 5x Magic: 9x Premmium grátis para todos os players!    Info: - Mapa global completo - Trainers nos templos de cada cidade - Sistema de Market in game (digite !shop help para aprender a usar) - Sistema de Task Avançada (falar com NPC Magnus) - Raids diferentes TODOS os dias. - Area de Market com Djinns e Rashid para facilitar a vida dos players - Classes totalmente balanceadas! - Sistema de Broadcast para players: Digite /all e ao preço de uma crystal você poderá enviar uma mensagem para todo o servidor (tem cooldown de 5 minutos pra evitar spam) - Sistema de trainer inteligente (enquanto estiver treinando você receberá alimentação para nunca ficar sem mana!!)   Está esperando oque para conferir nosso servidor??    Aviso: Bots não são permitidos e a utilização dos mesmos é passível com redução de level.  
      Obs: Esse servidor foi feito apenas para entreterimento e pra eu poder ter players para testar alguns sistemas, nós não vendemos nada e toda a equipe é formada por amigos próximos que fazem tudo de bom grado pra vocês terem uma experiência agradável. Não haverá aquela baboseira de 'pay to win' e o server é auto sustentável. Aproveite!!    IP: universityofchaos.no-ip.biz Grupo do servidor: https://www.facebook.com/groups/812549668831572/ Espero vocês lá, abraço.

    Aqui tem o link da otservlist onde tem +- o mesmo texto que está escrito aqui em cima. 


     

Informação Importante

Confirmação de Termo