Lwkass 1 #1 Posted October 12, 2009 (edited) ┌──────────────────────────────────────────────────┐ │Nome: Lumberjack │Versão do script: 2.0.0 │Tipo do script: Action │Servidor Testado: The Forgotten Server 0.4 Doomed Elderberry │Autor: Lwkass └──────────────────────────────────────────────────┘ Características : - Cada nivel tem uma certa exp necessaria para o mesmo, a cada vez que se corta 1 arvore, ganha-se 1 de experiencia ou 1 try, com chance de bonus na versão 2.0. A cada 10 niveis aumenta o minimo e máximo de madeiras e a porcentagem de chance de se conseguir alguma madeira, a quantidade padrão que aumenta em cada nivel está abaixo. Nivel Máximo Padrão = 100 - Ganhos Por Nivel- |--------------------------------------------------------| |Nivel X ~ Y: Madeira = min, max; Chance = % |--------------------------------------------------------| |Nivel 0 ~ 9: Minimo = 1, Máximo = 2; Chance = 5 % |Nivel 10 ~ 19: Minimo = 2, Máximo = 4; Chance = 10 % |Nivel 20 ~ 29: Minimo = 3, Máximo = 6; Chance = 15 % |Nivel 30 ~ 39: Minimo = 4, Máximo = 8; Chance = 20 % |Nivel 40 ~ 49: Minimo = 5, Máximo = 10; Chance = 25 % |Nivel 50 ~ 59: Minimo = 6, Máximo = 12; Chance = 30 % |Nivel 60 ~ 69: Minimo = 7, Máximo = 14; Chance = 30 % |Nivel 70 ~ 79: Minimo = 8, Máximo = 16; Chance = 35 % |Nivel 80 ~ 89: Minimo = 9, Máximo = 18; Chance = 35 % |Nivel 90 ~ 99: Minimo = 10, Máximo = 20; Chance = 40 % |Nivel 100: Minimo = 11, Máximo = 22; Chance = 50 % |--------------------------------------------------------| - Esse sistema conta com mensagem de avanço de nivel ou seja, você passou do nivel 10 pro 11 mostra o seguinte: "You advanced from level 10 to level 11 in lumberjacking." - O Script conta apenas com 1 tipo de madeira(id: 5901), ja que só existe 1 tipo de madeira movél e juntavel no tibia, mas caso seu server tenha outros tipos de madeiras é só adicionar no script o id da madeira. - Delay, esse delay(atraso) funciona da seguinte forma, ao cortar a arvore ela se torna um toco de madeira e ao passar 180 segundos(pode ser modificado) a arvore volta. Versão 2.0 Changelog : - Bônus de try, sempre que você conseguir madeira de alguma arvore, tem uma pequena chance (por padrão é 5%) de conseguir exp extra (por padrão é 2 tries).- Todos os efeitos trocados. - Formula de level melhorada e dificuldade de up aumentada. - Script feito de forma a ser o mais legível e bonito possível (Por isso que está cheia de funções e com mais linhas que o anterior). Instalação : Abra a pasta data/actions/script e adicione isso em um arquivo lua (Sugestão: lumberjack.lua) : - Lua: ------------------------------------------------------ -- Lumberjack by: Lwkass from OTServBrasil -- Version: 2.0 -- Tested in: TFS 0.4 Crying Damson --------------------------- -- Configurations -- --------------------------- local STORAGE_SKILL_LEVEL = 10000 local STORAGE_SKILL_TRY = 10001 local config = { levels = { {level = [color=Red]{0,9}[/color], quant = [color=Blue]{1,2}[/color], percent = [color=DarkOrange]5[/color]}, {level = [color=Red]{10,19}[/color], quant = [color=Blue]{2,4}[/color], percent = [color=DarkOrange]10[/color]}, {level = [color=Red]{20,29}[/color], quant = [color=Blue]{3,6}[/color], percent = [color=DarkOrange]15[/color]}, {level = [color=Red]{30,39}[/color], quant = [color=Blue]{4,8}[/color], percent = [color=DarkOrange]20[/color]}, {level = [color=Red]{40,49}[/color], quant = [color=Blue]{5,10}[/color], percent = [color=DarkOrange]25[/color]}, {level = [color=Red]{50,59}[/color], quant = [color=Blue]{6,12}[/color], percent = [color=DarkOrange]30[/color]}, {level = [color=Red]{60,69}[/color], quant = [color=Blue]{7,14}[/color], percent = [color=DarkOrange]30[/color]}, {level = [color=Red]{70,79}[/color], quant = [color=Blue]{8,16}[/color], percent = [color=DarkOrange]35[/color]}, {level = [color=Red]{80,89}[/color], quant = [color=Blue]{9,18}[/color], percent = [color=DarkOrange]35[/color]}, {level = [color=Red]{90,99}[/color], quant = [color=Blue]{10,20}[/color], percent = [color=DarkOrange]40[/color]}, {level = [color=Red]{100}[/color], quant = [color=Blue]{11,22}[/color], percent = [color=DarkOrange]50[/color]} }, trees = {[color=Purple]2707, 2704,2708[/color]}, -- Id das arvores que podem ser cortadas woods = {}, -- Modelo = {wood_id, tree_id} default_wood = [color=darkgreen]5901[/color], -- Madeira padrão tree_delay = [color=Magenta]180[/color], -- Tempo de crescimento da arvore cortada (Em segundos) bonus_chance = 5, -- Chance (em porcentagem) de se conseguir um bonus de exp bonus_exp = 2 -- Bonus extra } ------------------------------------ -- END Configurations --- ------------------------------------ function getLumberjackLevel(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_LEVEL) end function setPlayerLumberjackLevel(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_LEVEL, n) end function addLumberjackLevel(cid, n) setPlayerLumberjackLevel(cid, getLumberjackLevel(cid) + (isNumber(n) and n or 1)) setLumberjackTry(cid, 0) end function getLumberjackInfo(cid) for i = 1, #config.levels do min = config.levels[i].level[1]; max = config.levels[i].level[2] if (getLumberjackLevel(cid) >= min and getLumberjackLevel(cid) <= max) then return {quantity = {min = config.levels[i].quant[1], max = config.levels[i].quant[2]}, chance = config.levels[i].percent} end end end function getWoodByTree(treeid) for i = 1, #config.woods do if (config.woods[2] == treeid) then return config.woods[1] end end return config.default_wood end function getLumberjackTries(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_TRY) end function setLumberjackTry(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_TRY, n) end function addLumberjackTry(cid, bonus) setLumberjackTry(cid, getLumberjackTries(cid) + 1 + (bonus and config.bonus_exp or 0)) if (getLumberjackTries(cid) >= getLumberjackExpTo(getLumberjackLevel(cid))) then -- Up doPlayerSendTextMessage(cid, 22, "You advanced from level " .. getLumberjackLevel(cid) .. " to level ".. (getLumberjackLevel(cid) + 1) .." in Lumberjacking.") if ((getLumberjackLevel(cid)+1) == getLumberjackMaxLevel()) then doPlayerSendTextMessage(cid, 22, "Max level reached in lumberjacking.") end addLumberjackLevel(cid) doSendMagicEffect(getCreaturePosition(cid), math.random(28,30)) setLumberjackTry(cid, 0) end end function getLumberjackExpTo(level) return ((level*1.5)+((level+1)*7)) end function getLumberjackMaxLevel() return config.levels[#config.levels].level[#config.levels[#config.levels].level] end --------------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) tree = { id = itemEx.itemid, uid = itemEx.uid, position = toPosition } player = { position = getCreaturePosition(cid) } if (getLumberjackLevel(cid) < 0) then setPlayerLumberjackLevel(cid, 0) end if (isInArray(config.trees, tree.id)) then addLumberjackTry(cid) if (math.random(1,100) <= getLumberjackInfo(cid).chance) then local collected = math.random(getLumberjackInfo(cid).quantity.min, getLumberjackInfo(cid).quantity.max) doPlayerAddItem(cid, getWoodByTree(tree.id), collected) doPlayerSendTextMessage(cid, 22, "You got " .. collected .. " piece" .. (collected > 1 and "s" or "") .. " of wood.") if (math.random(1,100) <= config.bonus_chance) then -- Bonus calc addLumberjackTry(cid, true) doSendAnimatedText(player.position, "Bonus!", COLOR_ORANGE) end event_treeCut(tree) else if (math.random(1,100) <= (10-getLumberjackInfo(cid).chance/10)) then doPlayerSendTextMessage(cid, 22, "You got nothing.") event_treeCut(tree) else doSendMagicEffect(tree.position, 3) doSendAnimatedText(tree.position, "Pock!", COLOR_GREEN) end end else doPlayerSendCancel(cid, "This can't be cut.") end end function event_treeCut(tree) addEvent(event_treeGrow, config.tree_delay * 1000, tree.position, tree.id) doTransformItem(tree.uid, 8792) doSendMagicEffect(tree.position, 34) doSendAnimatedText(tree.position, "Pock!", COLOR_GREEN) doItemSetAttribute(tree.uid, "name", "A trunk of " .. getItemNameById(tree.id)) end function event_treeGrow(treePos, old_id) local tree = getThingFromPos(treePos).uid doTransformItem(tree, old_id) doItemSetAttribute(tree, "name", getItemNameById(old_id)) doSendMagicEffect(treePos, 45) end --Lumberjack 2.0 by: Lwkass Legenda: ■ Os Niveis são configurados por estágio, ou seja {0,9}, 0 é o minimo e 9 o máximo. ■ Quant é a quantidade minima e máxima que pode vir de madeira por nivel. ■ Percent é a porcentagem de chance de se conseguir alguma madeira. ■ Trees, são os ids das arvores que podem ser cortadas(obs:eu só coloquei 3 arvores). ■ Nessa tabela você define as madeiras que podem vir, deve-se usar assim {id_da_madeira, id_da_arvore} ficando {5901, 2704} por exemplo. ■ Esse é o tempo(em segundos) de espera até que a arvore volte, ou seja, você corta a arvore e espera 180 segundos e a arvore volta como era antes. ■ Id do item da madeira padrão. Imagem : - Depois adiciono - --- Adicione essa linha no actions.xml Xml: <action itemid="id_do_item" script="lumberjack.lua"/> --- Não dou permissão para postar em outro lugar. Sugestões são sempre bem-vindas e por favor sem posts inuteis. Modificações:- Melhorado a tabela dos estágios(a quantidade, a porcentagem e o nivel ficam na mesma tabela), facilitando ainda mais a modificação. - Correção de partes do script. - Adicionado aviso sobre servers de versão maior que 8.5. - Script refeito do zero, versão 2.0. By: Lwkass,Grato~ Edited September 18, 2011 by Lwkass Share this post Link to post
Mock 32 #2 Posted October 13, 2009 Comentario: Alguns sabem que eu sou mto critico quanto a formatação, quando vi que o topico era seu eu ja sabia que estaria muito bem formatado XP Eu aprovaria 70% do topico so pela formatação mais mesmo assim nao funciona desse jeito mais. O topico esta otimo³ o script esta otimo³ o aprovado é otimo³ Aprovado & Movido Share this post Link to post
Raphael Carnaúba 1 #3 Posted October 13, 2009 (edited) interessante a ideia de usar chances de acordo com o level. se você me permitir posso fazer umas melhorias no script? Abraços, Raphael. Edited October 13, 2009 by Raphael Carnaúba Share this post Link to post
Lwkass 1 #4 Posted October 13, 2009 @Raphael Carnaúba: Claro, mas desde que me de os créditos pelo script. @Topic: Vou postar outras versões melhoradas desse script, ainda não coloquei tudo. Share this post Link to post
Conde2 0 #5 Posted October 13, 2009 (edited) counter = 0 if (vars.skillLevel == -1) then setPlayerStorageValue(cid,10000,0) end while counter < #configs.levels do counter = counter + 1 if configs.levels[counter][2] == nil then configs.levels[counter][2] = configs.levels[counter][1] end if vars.skillLevel >= configs.levels[counter][1] and vars.skillLevel <= configs.levels[counter][2] then quant = math.random(configs.quant[counter][1],configs.quant[counter][2]) percent = configs.percent[counter] break end end Ow Lwkass nessa parte você poderia ter usado um "for" devez esse while xD Ficaria melhor alem de evitar alguns bugs =D Parabéns pelo sccript impecável !!! A e outra dica tambem seria pra você não usar tanto tabelas desnecessárias. Quando você pode usar variaveis comuns =D local vars = { skillLevel = getPlayerStorageValue(cid,10000), skillTry = getPlayerStorageValue(cid,10001), objeto2 = getThingFromPos(toPosition), Created_by = "Lwkass", player = getCreaturePosition(cid) } Edited October 13, 2009 by Conde2 Share this post Link to post
Raphael Carnaúba 1 #6 Posted October 13, 2009 Conde2, é isso aí. as tabelas são pra coisas que contem bastante informação e que não seguem uma sequencia ou numeração.. ex: local animal = {["cachorro"]="bonito", ["gato"]="feio", ["urso"]="mock"} local sequencia = {[1]="bonito", [3]="feio", [5]="droga"} print(animal["cachorro"]) -- bonito Lwkass, jaja mando por PM seu code. Share this post Link to post
Lwkass 1 #7 Posted October 13, 2009 Conde2 e Raphael, valeu ai pelas sugestões, sabia que iriam implicar se eu fosse usar variaveis comuns em tabela xD Já edito o script Share this post Link to post
Conde2 0 #8 Posted October 16, 2009 @Lwakss Tava observando seu script e vi isso: if math.random(1,100) <= 100 then Acho que o certo seria: if math.random(1,100) <= percent then Share this post Link to post
brunosid 0 #10 Posted October 16, 2009 Eu nao entendo nada de script, mas porque em vez de usar esse tronco de palmeira cortada, vc nao usa o ID 3821 ? (: Share this post Link to post
Le588 0 #11 Posted December 29, 2009 (edited) Muito legal o sistema, mas aqui ocorreu um erro: O OT que eu uso é o Slayer Yurots 8.4 v2. Editado: Desculpe, acho que postei a versão errada do meu OT. Acho que a versão correta é " The Forgotten Server 8.4 By AlissonLinneker - Version 0.2 (Mystic Spirit)." É isso? Obrigado. Edited December 29, 2009 by Le588 Share this post Link to post
Lwkass 1 #12 Posted December 29, 2009 @Lucas Masotti: coloca antes de tudo do script o seguinte function getThingFromPos(pos) return getThingfromPos(pos) end Caso ainda não de certo, ai tenta mudar de server, caso contrario eu faço uma adaptação pra você... Share this post Link to post
Le588 0 #13 Posted December 29, 2009 Mudei de OT, agora estou com o TFS 0.31 e funcionou perfeitamente! Ótimo sistema, excelente mesmo. Não pensas em fazer um sistema de mining? ^^ Share this post Link to post
Lwkass 1 #14 Posted December 29, 2009 @Lucas Masotti Sim eu iria fazer a idéia inicial era fazer um pack com lumberjack, miner, blacksmith, fisherman, alchemist, farmer e tailor. Com suas respectivas evoluções, mas como quase ninguem gostou de uma, porque gostariam de um pack com 6 ? Ai, nem posto mais nada :] Share this post Link to post
Le588 0 #15 Posted December 30, 2009 @Lucas Masotti Sim eu iria fazer a idéia inicial era fazer um pack com lumberjack, miner, blacksmith, fisherman, alchemist, farmer e tailor. Com suas respectivas evoluções, mas como quase ninguem gostou de uma, porque gostariam de um pack com 6 ? Ai, nem posto mais nada :] :O Nossa, seria uma Pack perfeitooooo *____* Que gente mais :censored:, :censored: e :censored: ¬¬" Eu adoro sistema assim, da mais diversão pro OT. Mas tu tem os scripts? Ou iria criar todos? E sabe se aqui no OT existem? To doido atrás de uns... Share this post Link to post
Zeephiroth 42 #16 Posted December 30, 2009 Eu acho que podia tirar aquele número ali em vermelho que é equivalente a quantos pedaços de madeira a pessoa pegou, também acho que podia tirar aquele Fail!! em vermelho e colocar: "You didn't get any wood beeches." em branco. Mas o script ficou bem legal >.> Share this post Link to post
Syfer 0 #17 Posted December 30, 2009 Otimo script vou usar no meu vai ajudar mto thx. Share this post Link to post
Panda .~ 0 #18 Posted January 1, 2010 este script e mto bom para servers lowrate. Share this post Link to post
Raphael Carnaúba 1 #19 Posted January 14, 2010 Este é o grande problema Lwkass, a galera não incentiva :\ antigamente eu era animado pra fazer essas coisas, hoje em dia... só se chorarem muito no meu pé! 20 posts.. e mais de 1000 pessoas usando? fazer o que, povo ingrato! Share this post Link to post
Julio Svc 0 #20 Posted January 20, 2010 (edited) kmo posso fazer um rank disso???? Edited January 20, 2010 by Julio Svc Share this post Link to post