Ir para conteúdo

Featured Replies

Postado

Olá pessoal boa tarde,

 

Possuo um script de potions de exp funciona certinho porem gostaria de colocar ele para quando o player morrer ou deslogar continuar com o bônus.

Pois do jeito que está o player morre ou reloga ele perde...

 

Script LIB abaixo\/

 

Mostrar conteúdo oculto

 

 

Alguem poderia me ajudar? 

Utilizo OTX 2 ~ 8.60

Resolvido por GamerGoiano

Ir para solução
Postado
  • Solução

Opção 1:

local function getPlayerData(guid)
    if not expPotions.playerData[guid] then
        expPotions.playerData[guid] = {}
        for itemId in pairs(potions) do
            expPotions.playerData[guid][itemId] = {rate = 0, duration = 0}
        end
    end
    return expPotions.playerData[guid]
end

function expPotions:onUse(cid, item, fromPosition, itemEx, toPosition)
    local itemId = item.itemid
    local potion = potions[itemId]
    if not potion then
        return false
    end

    if getPlayerLevel(cid) < potion.needLevel then
        doPlayerSendCancel(cid, ('Você precisa ser level %d+ para usar esta potion.'):format(potion.needLevel))
        return true
    end
    
    local guid = getPlayerGUID(cid)
    local playerData = getPlayerData(guid)
    local expData = playerData[itemId]

    local now = os.time()
    if expData.duration > now then
        doCreatureSay(cid, 'Aguarde o bônus atual acabar para usar novamente.', TALKTYPE_ORANGE_1, false, cid)
        return true
    end

    expData.rate = expData.rate + potion.rate
    expData.duration = potion.duration + now

    doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Agora você tem +%d%% de experiência por %s.'):format(
        potion.rate * 100, string.diff(potion.duration, true)
    ))

    doRemoveItem(item.uid, 1)
    return true
end

function expPotions:onLogin(cid)
    local guid = getPlayerGUID(cid)
    getPlayerData(guid)
    return true
end

 

Opção 2:

local function getPlayerData(guid)
    if not expPotions.playerData[guid] then
        expPotions.playerData[guid] = {}
        for itemId in pairs(potions) do
            expPotions.playerData[guid][itemId] = {rate = 0, duration = 0}
        end
    end
    return expPotions.playerData[guid]
end

function expPotions:onUse(cid, item, fromPosition, itemEx, toPosition)
    local itemId = item.itemid
    local potion = potions[itemId]
    if not potion then
        return false
    end

    if getPlayerLevel(cid) < potion.needLevel then
        doPlayerSendCancel(cid, ('Você precisa ser level %d+ para usar esta potion.'):format(potion.needLevel))
        return true
    end
    
    local guid = getPlayerGUID(cid)
    local playerData = getPlayerData(guid)
    local expData = playerData[itemId]

    local now = os.time()
    if expData.duration > now then
        doCreatureSay(cid, 'Aguarde o bônus atual acabar para usar novamente.', TALKTYPE_ORANGE_1, false, cid)
        return true
    end

    expData.rate = expData.rate + potion.rate
    expData.duration = potion.duration + now

    doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Agora você tem +%d%% de experiência por %s.'):format(
        potion.rate * 100, string.diff(potion.duration, true)
    ))

    doRemoveItem(item.uid, 1)

    -- Salvar as informações na storage
    Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_rate', expData.rate)
    Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_duration', expData.duration)

    return true
end

function expPotions:onLogin(cid)
    local guid = getPlayerGUID(cid)
    local playerData = getPlayerData(guid)

    -- Restaurar as informações da storage
    for itemId in pairs(potions) do
        local rate = Game.getStorageValue(cid, 'expPotion_' .. itemId .. '_rate')
        local duration = Game.getStorageValue(cid, 'expPotion_' .. itemId .. '_duration')

        if rate ~= nil and duration ~= nil then
            playerData[itemId].rate = rate
            playerData[itemId].duration = duration
        end
    end

    return true
end

function expPotions:onDeath(cid, corpse, killer)
    -- Limpar as informações das poções ativas ao morrer
    local guid = getPlayerGUID(cid)
    local playerData = getPlayerData(guid)

    for itemId in pairs(potions) do
        playerData[itemId].rate = 0
        playerData[itemId].duration = 0
        Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_rate', nil)
        Game.setStorageValue(cid, 'expPotion_' .. itemId .. '_duration', nil)
    end

    return true
end

function expPotions:onSay(cid, words, param)
    local str = 'Experience Potion Combos:\n'

    local playerData = self.playerData[getPlayerGUID(cid)]
    if playerData then
        for itemId, expData in pairs(playerData) do
            str = str .. ('\n%s - %d%%'):format(getItemInfo(itemId).name, expData.rate * 100)
        end
    end

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
    return true
end

function expPotions:getCombo(cid)
    local playerData = self.playerData[getPlayerGUID(cid)]
    local potionsCombo = 1

    if playerData then
        for itemId, expData in pairs(playerData) do
            potionsCombo = potionsCombo + expData.rate
        end
    end
    return potionsCombo
end

function expPotions:onLook(cid, thing, position, lookDistance)
    if not isPlayer(thing) then
        return false
    end

    local combo = self:getCombo(thing)
    if combo > 1 then
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ('Combo de Experiência: +%d%%'):format((combo - 1) * 100))
    end

    return false
end

function expPotions:onLogin(cid)
    local guid = getPlayerGUID(cid)

    self.playerData[guid] = {}
    for itemId in pairs(potions) do
        self.playerData[guid][itemId] = {rate = 0, duration = 0}
    end
    return true
end

function expPotions:onLogout(cid)
    local guid = getPlayerGUID(cid)

    self.playerData[guid] = nil
    return true
end

function expPotions:onDeath(cid, corpse, killer)
    local guid = getPlayerGUID(cid)
    self.playerData[guid] = nil
    return true
end

 

  • 2 weeks later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo