Ir para conteúdo
Entre para seguir isso  
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~

Editado por Lwkass

Compartilhar este post


Link para o 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

Compartilhar este post


Link para o 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.

Editado por Raphael Carnaúba

Compartilhar este post


Link para o 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.

Compartilhar este post


Link para o 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)
} 

Editado por Conde2

Compartilhar este post


Link para o 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.

Compartilhar este post


Link para o 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

Compartilhar este post


Link para o 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

Compartilhar este post


Link para o post
Lwkass    1
Lwkass

@Conde2:

Ah sim, valeu por avisar

Compartilhar este post


Link para o 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 ?

 

(:

Compartilhar este post


Link para o 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.

Editado por Le588

Compartilhar este post


Link para o 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ê...

Compartilhar este post


Link para o 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? ^^

Compartilhar este post


Link para o 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 :]

Compartilhar este post


Link para o 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...

Compartilhar este post


Link para o 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 >.>

Compartilhar este post


Link para o post
Syfer    0
Syfer

Otimo script vou usar no meu vai ajudar mto thx.

Compartilhar este post


Link para o post
Panda .~    0
Panda .~

este script e mto bom para servers lowrate.

Compartilhar este post


Link para o 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!

Compartilhar este post


Link para o post
Julio Svc    0
Julio Svc

kmo posso fazer um rank disso????

Editado por Julio Svc

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×