Jump to content
Sign in to follow this  
Lwkass

Lumberjack - Lenhador

Recommended Posts

Lwkass    1
Lwkass

┌──────────────────────────────────────────────────┐

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 by Lwkass

Share this post


Link to post
Mock    32
Mock

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³

 

Aprovadoico_aprovado.png & Movidoicon_movido.giffechado22xnux7.gif

 

mock.png

Share this post


Link to post
Raphael Carnaúba    1
Raphael Carnaúba

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 by Raphael Carnaúba

Share this post


Link to post
Lwkass    1
Lwkass

@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
Conde2

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 by Conde2

Share this post


Link to post
Raphael Carnaúba    1
Raphael Carnaúba

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
Lwkass

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
Conde2

@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
Lwkass    1
Lwkass

@Conde2:

Ah sim, valeu por avisar

Share this post


Link to post
brunosid    0
brunosid

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
Le588

Muito legal o sistema, mas aqui ocorreu um erro:

 

erroq.jpg

 

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 by Le588

Share this post


Link to post
Lwkass    1
Lwkass

@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
Le588

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
Lwkass

@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
Le588
@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 :O :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
Zeephiroth

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
Syfer

Otimo script vou usar no meu vai ajudar mto thx.

Share this post


Link to post
Panda .~    0
Panda .~

este script e mto bom para servers lowrate.

Share this post


Link to post
Raphael Carnaúba    1
Raphael Carnaúba

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
Julio Svc

kmo posso fazer um rank disso????

Edited by Julio Svc

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×