Ir para conteúdo
  • Cadastre-se

(Resolvido)sacrificio por storage


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Eu tive uma ideia para dar acesso a um jogador, inicialmente ele precisa sacrificar esses itens, 1 por 1 no basin, jogando em cima dele, depois de completar os sacrificios, ele ganha uma storage.

 

1 - É necessário estar na posição X para fazer o sacrificio

2 - Cada sacrificio, sai um efeito X no char.

3 - Sai um efeito no basin quando jogar o item, pode ser o efeito normal

4 - Proibe o player de fazer um sacrificio caso ja tenha feito

5 - Cada chave vai dar uma storage

 

segue anexo

sacrifio de storage.png

Link para o post
Compartilhar em outros sites

@JcA Não testei, qualquer erro fala aí.

 

Em movements/scripts:

 

sacrificio.lua

 

Spoiler

local t = {
player_pos = {x = 1, y = 1, z = 1}, -- posição que o player deve estar
storage_final = 11111, -- storage após colocar todas as chaves
efeito_final = CONST_ME_HOLYAREA, 
basins = {
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 1}, -- [id da chave] = {pos = posição do basin ...
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 2},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 2},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 3},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 4},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 5},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 6},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 7}}
}

function onAddItem(moveitem, tileitem, position, cid)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local item, check, p, count = t.basins[moveitem.itemid], 0, getPlayerPosition(cid), count(t.basins)
    
    if item.storage > 0 then
        doPlayerSendCancel(cid, "Você já sacrificou esta chave.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if p.x ~= t.player_pos.x or p.y ~= t.player_pos.y then 
        doPlayerSendCancel(cid, "Você deve estar no local correto.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if position.x == item.pos.x and position.y == item.pos.y then
        doSendMagicEffect(position, CONST_ME_POFF)
        doRemoveItem(moveitem.uid)
        setPlayerStorageValue(cid, item.storage, 1)
        doSendMagicEffect(t.player_pos, item.effect)
        for i, v in pairs(t.basins) do
            if getPlayerStorageValue(cid, v.storage) > 0 then
                check = check + 1
                 if check == count then
                    setPlayerStorageValue(cid, t.storage_final, 1)
                    doSendMagicEffect(t.player_pos, t.efeito_final)
                end
            end
        end
    else
        doPlayerSendCancel(cid, "Coloque o item no seu lugar correto.")
        doSendMagicEffect(p, CONST_ME_POFF)
    end
end

 

 

Em movements.xml, adicione a tag: <movevent type="AddItem" tileitem="1" actionid="ACTION_ID_DOS_BASINS" event="script" value="sacrificio.lua"/> 

 

Editado por Dwarfer (veja o histórico de edições)

Contato:

 

Link para o post
Compartilhar em outros sites
Em 14/08/2017 em 13:56, Dwarfer disse:

@JcA Não testei, qualquer erro fala aí.

 

Em movements/scripts:

 

sacrificio.lua

 

  Mostrar conteúdo oculto


local t = {
player_pos = {x = 1, y = 1, z = 1}, -- posição que o player deve estar
storage_final = 11111, -- storage após colocar todas as chaves
efeito_final = CONST_ME_HOLYAREA, 
basins = {
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 1}, -- [id da chave] = {pos = posição do basin ...
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 2},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 2},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 3},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 4},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 5},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 6},
[1111] = {pos = {x = 1, y = 1, z = 1}, storage = 11111, effect = 7}}
}

function onAddItem(moveitem, tileitem, position, cid)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local item, check, p, count = t.basins[moveitem.itemid], 0, getPlayerPosition(cid), count(t.basins)
    
    if item.storage > 0 then
        doPlayerSendCancel(cid, "Você já sacrificou esta chave.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if p.x ~= t.player_pos.x or p.y ~= t.player_pos.y then 
        doPlayerSendCancel(cid, "Você deve estar no local correto.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if position.x == item.pos.x and position.y == item.pos.y then
        doSendMagicEffect(position, CONST_ME_POFF)
        doRemoveItem(moveitem.uid)
        setPlayerStorageValue(cid, item.storage, 1)
        doSendMagicEffect(t.player_pos, item.effect)
        for i, v in pairs(t.basins) do
            if getPlayerStorageValue(cid, v.storage) > 0 then
                check = check + 1
                 if check == count then
                    setPlayerStorageValue(cid, t.storage_final, 1)
                    doSendMagicEffect(t.player_pos, t.efeito_final)
                end
            end
        end
    else
        doPlayerSendCancel(cid, "Coloque o item no seu lugar correto.")
        doSendMagicEffect(p, CONST_ME_POFF)
    end
end

 

 

Em movements.xml, adicione a tag: <movevent type="AddItem" tileitem="1" actionid="ACTION_ID_DOS_BASINS" event="script" value="sacrificio.lua"/> 

 

 

 

Fala meu querido, não da erro, porém quando jogo o item em cima do basin, diz que eu "ja fiz o sacrificio", só que não fiz, e notei uma coisa também, e possivel fazer com que o item volte pra bp caso eu ja tenha feito o sacrificio? Pq quando jogo no basin, se ja tiver feito, o item fica em cima kkkk

Outra coisa, quando estou fora do sqm do meio, também consigo jogar, e não sinaliza que devo estar no local X

 

local t = {
player_pos = {x = 2122, y = 1648, z = 5}, -- posição que o player deve estar
storage_final = 11119, -- storage após colocar todas as chaves
efeito_final = CONST_ME_HOLYAREA, 
basins = {
[2089] = {pos = {x = 2122, y = 1646, z = 5}, storage = 11111, effect = 1}, -- [id da chave] = {pos = posição do basin ...
[2087] = {pos = {x = 2124, y = 1646, z = 5}, storage = 11112, effect = 2},
[2088] = {pos = {x = 2125, y = 1648, z = 5}, storage = 11113, effect = 3},
[2091] = {pos = {x = 2124, y = 1650, z = 5}, storage = 11114, effect = 4},
[8978] = {pos = {x = 2122, y = 1650, z = 5}, storage = 11115, effect = 5},
[2092] = {pos = {x = 2120, y = 1650, z = 5}, storage = 11116, effect = 6},
[2090] = {pos = {x = 2119, y = 1648, z = 5}, storage = 11117, effect = 7},
[2086] = {pos = {x = 2120, y = 1646, z = 5}, storage = 11118, effect = 8}}
}

function onAddItem(moveitem, tileitem, position, cid)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local item, check, p, count = t.basins[moveitem.itemid], 0, getPlayerPosition(cid), count(t.basins)
    
    if item.storage > 0 then
        doPlayerSendCancel(cid, "Você já sacrificou esta chave.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if p.x ~= t.player_pos.x or p.y ~= t.player_pos.y then 
        doPlayerSendCancel(cid, "Você deve estar no local correto.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if position.x == item.pos.x and position.y == item.pos.y then
        doSendMagicEffect(position, CONST_ME_POFF)
        doRemoveItem(moveitem.uid)
        setPlayerStorageValue(cid, item.storage, 1)
        doSendMagicEffect(t.player_pos, item.effect)
        for i, v in pairs(t.basins) do
            if getPlayerStorageValue(cid, v.storage) > 0 then
                check = check + 1
                 if check == count then
                    setPlayerStorageValue(cid, t.storage_final, 1)
                    doSendMagicEffect(t.player_pos, t.efeito_final)
                end
            end
        end
    else
        doPlayerSendCancel(cid, "Coloque o item no seu lugar correto.")
        doSendMagicEffect(p, CONST_ME_POFF)
    end
end

 

Link para o post
Compartilhar em outros sites
  • Solução
2 horas atrás, JcA disse:

 

Fala meu querido, não da erro, porém quando jogo o item em cima do basin, diz que eu "ja fiz o sacrificio", só que não fiz, e notei uma coisa também, e possivel fazer com que o item volte pra bp caso eu ja tenha feito o sacrificio? Pq quando jogo no basin, se ja tiver feito, o item fica em cima kkkk

Outra coisa, quando estou fora do sqm do meio, também consigo jogar, e não sinaliza que devo estar no local X

 

 

Realmente, falha minha ali na verificação da storage, acabou que me passei. Com relação a voltar para a bp você não disse que teria que voltar. Segue com as modificações:

 

Spoiler

local t = {
player_pos = {x = 2122, y = 1648, z = 5}, -- posição que o player deve estar
storage_final = 11119, -- storage após colocar todas as chaves
efeito_final = CONST_ME_HOLYAREA, 
basins = {
[2089] = {pos = {x = 2122, y = 1646, z = 5}, storage = 11111, effect = 1}, -- [id da chave] = {pos = posição do basin ...
[2087] = {pos = {x = 2124, y = 1646, z = 5}, storage = 11112, effect = 2},
[2088] = {pos = {x = 2125, y = 1648, z = 5}, storage = 11113, effect = 3},
[2091] = {pos = {x = 2124, y = 1650, z = 5}, storage = 11114, effect = 4},
[8978] = {pos = {x = 2122, y = 1650, z = 5}, storage = 11115, effect = 5},
[2092] = {pos = {x = 2120, y = 1650, z = 5}, storage = 11116, effect = 6},
[2090] = {pos = {x = 2119, y = 1648, z = 5}, storage = 11117, effect = 7},
[2086] = {pos = {x = 2120, y = 1646, z = 5}, storage = 11118, effect = 8}}
}

function onAddItem(moveitem, tileitem, position, cid)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local item, check, p, count = t.basins[moveitem.itemid], 0, getPlayerPosition(cid), count(t.basins)
    
    if not item then
        return true
    end

    doRemoveItem(moveitem.uid)
    
    if p.x ~= t.player_pos.x or p.y ~= t.player_pos.y then 
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doPlayerSendCancel(cid, "Você deve estar no local correto.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 

    if getPlayerStorageValue(cid, item.storage) > 0 then
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doPlayerSendCancel(cid, "Você já sacrificou esta chave.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if position.x == item.pos.x and position.y == item.pos.y then
        doSendMagicEffect(position, CONST_ME_POFF)
        setPlayerStorageValue(cid, item.storage, 1)
        doSendMagicEffect(t.player_pos, item.effect)
        for i, v in pairs(t.basins) do
            if getPlayerStorageValue(cid, v.storage) > 0 then
                check = check + 1
                if check == count then
                    setPlayerStorageValue(cid, t.storage_final, 1)
                    doSendMagicEffect(t.player_pos, t.efeito_final)
                end
            end
        end
    else
        doPlayerSendCancel(cid, "Coloque o item no seu lugar correto.")
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doSendMagicEffect(p, CONST_ME_POFF)
    end
end

 

 

Contato:

 

Link para o post
Compartilhar em outros sites
2 horas atrás, Dwarfer disse:

 

Realmente, falha minha ali na verificação da storage, acabou que me passei. Com relação a voltar para a bp você não disse que teria que voltar. Segue com as modificações:

 

  Ocultar conteúdo


local t = {
player_pos = {x = 2122, y = 1648, z = 5}, -- posição que o player deve estar
storage_final = 11119, -- storage após colocar todas as chaves
efeito_final = CONST_ME_HOLYAREA, 
basins = {
[2089] = {pos = {x = 2122, y = 1646, z = 5}, storage = 11111, effect = 1}, -- [id da chave] = {pos = posição do basin ...
[2087] = {pos = {x = 2124, y = 1646, z = 5}, storage = 11112, effect = 2},
[2088] = {pos = {x = 2125, y = 1648, z = 5}, storage = 11113, effect = 3},
[2091] = {pos = {x = 2124, y = 1650, z = 5}, storage = 11114, effect = 4},
[8978] = {pos = {x = 2122, y = 1650, z = 5}, storage = 11115, effect = 5},
[2092] = {pos = {x = 2120, y = 1650, z = 5}, storage = 11116, effect = 6},
[2090] = {pos = {x = 2119, y = 1648, z = 5}, storage = 11117, effect = 7},
[2086] = {pos = {x = 2120, y = 1646, z = 5}, storage = 11118, effect = 8}}
}

function onAddItem(moveitem, tileitem, position, cid)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local item, check, p, count = t.basins[moveitem.itemid], 0, getPlayerPosition(cid), count(t.basins)
    
    if not item then
        return true
    end

    doRemoveItem(moveitem.uid)
    
    if p.x ~= t.player_pos.x or p.y ~= t.player_pos.y then 
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doPlayerSendCancel(cid, "Você deve estar no local correto.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 

    if getPlayerStorageValue(cid, item.storage) > 0 then
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doPlayerSendCancel(cid, "Você já sacrificou esta chave.") 
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end 
    
    if position.x == item.pos.x and position.y == item.pos.y then
        doSendMagicEffect(position, CONST_ME_POFF)
        setPlayerStorageValue(cid, item.storage, 1)
        doSendMagicEffect(t.player_pos, item.effect)
        for i, v in pairs(t.basins) do
            if getPlayerStorageValue(cid, v.storage) > 0 then
                check = check + 1
                if check == count then
                    setPlayerStorageValue(cid, t.storage_final, 1)
                    doSendMagicEffect(t.player_pos, t.efeito_final)
                end
            end
        end
    else
        doPlayerSendCancel(cid, "Coloque o item no seu lugar correto.")
        doPlayerAddItem(cid, moveitem.itemid, 1)
        doSendMagicEffect(p, CONST_ME_POFF)
    end
end

 

 

 

 

obrigado! você sempre salva cara! <3

Editado por JcA
erro de portugueis (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo