Ir para conteúdo
  • 0

Sistema de Minerio + Refinamento


igorlabanca

Pergunta

Primeiramente quero deixar bem claro que já conheço os sistemas de refinamentos ou "upgrades" para itens aqui do forum...

Porém esse que eu desejo é um pouco mais real e preciso dele para colocar no servidor que estou desenvolvendo...

 

Vamos lá, irei tentar explicar passo a passo:

divisor.png

 

 

1° Passo (Extraindo o Minerio)

 

O player da vocação (11, 16, 21) usa o item pick.gif (ID: 2553) Nessas Pedras ironmine.gif (ID's: 5619, 5620),

Com isso ele PODE OU NÂO Obter (70% Obter, 30% não obter) um Iron Ore ironore.gif (ID:5880)

 

 

OBS² : Ao player usar a pick nas pedras e obter sucesso aparecerá o efeito na pedra (CONST_ME_BLOCKHIT = 3)
Menssagem no server log: (Você obteve 1 iron ore!)

 

OBS³: Caso o player use a pick e não obter sucesso aparecerá o efeito na pedra (CONST_ME_HITAREA = 9 )
Menssagem no server log: (Você Falhou!)

 

OBS³: Após 20 "pikaretadas" (use da pick na pedra) as pedras vão se "quebrar" transformando-as nos itens (ID's: 5621,5622)

 

 

divisor.png

 

 

 

 

2° Ultimo Passo (Refinamento)

Após o player de vocação (11, 16, 21) ter o Iron Ore ironore.gif ele usará o iron hammer Iron_Hammer.gifnos itens definidos abaixo:
O player só pode refinar: (Sword's, Axe's, Club's, Helmet's. Armor's, Leg's, Shield's)
Nas Armas só aumentará o ATK e não a defesa. Obviamente nas armaduras e nos shields a defesa.



Abaixo segue a porcentagem de obter sucesso:
+1 (60%) +2 (50%) +3 (40%) +4 (30%) +5 (20%) +6 (10%) +7 (6%) +8 (4%) +9 (3%) +10 MÁXIMO (1%)

 

OBS¹: Caso o player obtenha sucesso Aparecerá o efeito no item (CONST_ME_CRAPS = 26)
e a Mensagem no server log (Você Refinou com sucesso)

OBS²: Caso o player não obtenha sucesso o item será transformado em um metal trash (ID: 2256) ainda com o efeito (CONST_ME_CRAPS = 26) .
e a Mensagem no server log (Você Falhou !)

 

 

divisor.png

 

 

 

Bom, esse sistema é de um servidor ao qual eu jogava, caso fiquem algumas duvidas eu fiz um video em 2012 (por isso essa voz mimi) de como funciona o sistema.

 




Bom pessoal então é isso !
espero que vocês possam me ajudar.
Obrigado.

UP

Editado por igorlabanca
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

cara vou t dar rep+ só pelo modo q vc faz os pedidos, super bem explicado, faciitou mto para os scripters, da até vontade de fazer lendo isso, mas, to sem tempo, mais ta de parabéns pelo pedido !! vamo pessoal ajuda ele ae ! :X

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui está a mineração, vou fazer o de refinar depois.


local pedras = {5619, 5620} -- Id das pedras que podem ser mineradas
local maxTries = 5 -- Quantas vezes a pedra sera minerada para se transformar em outra
local pedrasExaustas = {5621, 5622} -- Id das pedras nas quais as pedras mineradas vao se transformar
local chance = 70 -- Chance em % de conseguir o iron ore
local vocations = {11, 21, 16} -- Vocacoes que podem minerar
local tempoQuebrada = 5 -- Tempo em minutos que a pedra permanece quebrada
local cooldown = 2 -- Em segundos
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    
    local desc = tonumber(getItemSpecialDescription(itemEx.uid)) ~= nil and tonumber(getItemSpecialDescription(itemEx.uid)) or 0
    local pos = getThingPos(itemEx.uid)
    local a = math.random(1, #pedrasExaustas)
    local idPedra = getItemIdByName(getItemName(itemEx.uid))
   
    local function removeStone()
        local t = getTileItemById(pos, pedrasExaustas[a])
        if t then
            doRemoveItem(t.uid, 1)
        end
    end
    
    if isInArray(pedras, itemEx.itemid) then
        
        if getPlayerStorageValue(cid, 338192) > os.time() then
            doPlayerSendCancel(cid, "Voce esta cansado! Aguarde " .. getPlayerStorageValue(cid, 338192) - os.time() .. " segundos.")
            return true
        end
       
        if not isInArray(vocations, getPlayerVocation(cid)) then
            doPlayerSendCancel(cid, "Sua vocation nao pode minerar.")
            return true
        end
        
        if tonumber(getItemSpecialDescription(itemEx.uid)) == nil or tonumber(getItemSpecialDescription(itemEx.uid)) < maxTries - 1 then
            
            doItemSetAttribute(itemEx.uid, "description", desc + 1)
            doPlayerSetStorageValue(cid, 338192, os.time() + cooldown)
             
            local b = math.random(1, 100)
            if b < chance then
                doPlayerAddItem(cid, 5880, 1)
                doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_BLOCKHIT)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce obteve um iron ore!")
            else
                doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_HITAREA)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce falhou.")
            end
            
        elseif tonumber(getItemSpecialDescription(itemEx.uid)) == maxTries - 1 then
            doItemSetAttribute(itemEx.uid, "description", 0)
            doTransformItem(itemEx.uid, pedrasExaustas[a])
            addEvent(removeStone, tempoQuebrada * 1000 * 60)
            addEvent(doCreateItem, tempoQuebrada * 1000 * 60 + 200, idPedra, 1, pos)
            doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_HITAREA)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "A pedra quebrou")
        end
    else
        doPlayerSendCancel(cid, "Aqui nao e lugar de minerar.")        
    end
    return true
end
Editado por Killua
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...