Ir para conteúdo
  • 0

Item que ao dar use ganhe 10 de magic level (por tempo)


roriscrave

Pergunta

Posts Recomendados

  • 0

Deu um trabalhinho pensar na lógica rsrs

 

Mas acho que está correto...

 

Em actions/scripts crie um arquivo lua com um nome qualquer e coloque:

function rem()
        doRemoveCreature(cid)
	return db.executeQuery("UPDATE players SET maglevel = maglevel - 10 WHERE players_id = " .. getPlayerGUID(cid) .. ")
end

function onUse(cid, item)

addEvent(rem, 2*1000, cid)

	return doPlayerAddSkill(cid, magic, 10, true)
end

Em actions.xml:

 

<action itemid="id do item" event="script" value="nome_do_arquivo.lua" />

Link para o comentário
Compartilhar em outros sites

  • 0

#Keilost, na função rem você esqueceu o parâmetro para identificar o cid, e pense: Se remover antes de executar a query não vai reconhecer o cid. Vamos tentar assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

    if getPlayerStorageValue(cid, 13179) < 1 then
        doPlayerAddMagLevel(cid, 10)
        setPlayerStorageValue(cid, 13179, 1)
        doSendMagicEffect(getThingPos(cid), 1)
        addEvent(removeSkill, 2 * 60 * 1000, cid, SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10))
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
    else
        doPlayerSendCancel(cid, "Sorry, not is possible.")
        return true
    end

    return true
end

function removeSkill(uid, skill, amount)
    addEvent(doRemoveCreature, 2 * 1000, uid)
    db.executeQuery("UPDATE `player_skills` SET `value` = "..amount.." WHERE `player_id` = "..getPlayerGUID(uid).. " and `skillid` = "..skill..";")
    return true
end
Editado por Roksas
Link para o comentário
Compartilhar em outros sites

  • 0

 

#Keilost, na função rem você esqueceu o parâmetro para identificar o cid, e pense: Se remover antes de executar a query não vai reconhecer o cid. Vamos tentar assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

    if getPlayerStorageValue(cid, 13179) < 1 then
        doPlayerAddMagLevel(cid, 10)
        setPlayerStorageValue(cid, 13179, 1)
        doSendMagicEffect(getThingPos(cid), 1)
        addEvent(removeSkill, 2 * 60 * 1000, cid, SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10))
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
    else
        doPlayerSendCancel(cid, "Sorry, not is possible.")
        return true
    end

    return true
end

function removeSkill(uid, skill, amount)
    addEvent(doRemoveCreature, 2 * 1000, uid)
    db.executeQuery("UPDATE `player_skills` SET `value` = "..amount.." WHERE `player_id` = "..getPlayerGUID(uid).. " and `skillid` = "..skill..";")
    return true
end

 

Se o player usar o item e deslogar ele buga.

Eu queria como se fosse uma spell de buff (usa a spell e ganha 10 de magic, depois de 2min perde o magic), mas fosse um action. Ou seja, não pode kikar o player.

Link para o comentário
Compartilhar em outros sites

  • 0

Tem que deslogar pra tirar né pow, mas tenta ae:

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

    if getPlayerStorageValue(cid, 13180) < 1 then
        doPlayerAddMagLevel(cid, 10)
        setPlayerStorageValue(cid, 13180, 1)
        doSendMagicEffect(getThingPos(cid), 1)
        addEvent(doPlayerAddSkill, 2 * 60 * 1000, cid, SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10))
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
    else
        doPlayerSendCancel(cid, "Sorry, not is possible.")
        return true
    end

    return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

Tem que deslogar pra tirar né pow, mas tenta ae:

function onUse(cid, item, fromPosition, itemEx, toPosition)

    if getPlayerStorageValue(cid, 13180) < 1 then
        doPlayerAddMagLevel(cid, 10)
        setPlayerStorageValue(cid, 13180, 1)
        doSendMagicEffect(getThingPos(cid), 1)
        addEvent(doPlayerAddSkill, 2 * 60 * 1000, cid, SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10))
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
    else
        doPlayerSendCancel(cid, "Sorry, not is possible.")
        return true
    end

    return true
end

não aumenta o skill de magic

Link para o comentário
Compartilhar em outros sites

  • 0


function onUse(cid, item, fromPosition, itemEx, toPosition)

 

if getPlayerStorageValue(cid, 13180) < 1 then

doPlayerAddMagLevel(cid, 10)

doPlayerAddSkill(cid, 7, 10, true)

setPlayerStorageValue(cid, 13180, 1)

doSendMagicEffect(getThingPos(cid), 1)

addEvent(doPlayerAddSkill, 2 * 60 * 1000, cid, SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10))

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")

else

doPlayerSendCancel(cid, "Sorry, not is possible.")

return true

end

 

return true

end

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local pid = getPlayerGUID(cid)

    if getPlayerStorageValue(cid, 13180) < 1 then
	doRemoveCreature(cid)
        db.query("UPDATE `players` SET `maglevel` = `maglevel` + 10 WHERE `id` = "..pid)
        setPlayerStorageValue(cid, 13180, 1)
        doSendMagicEffect(getThingPos(cid), 1)
    elseif addEvent(doPlayerAddSkill, 2 * 60 * 1000, cid) then
	db.query("UPDATE `players` SET `maglevel` = `maglevel` - 10 WHERE `id` = "..pid)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
    else
        doPlayerSendCancel(cid, "Sorry, not is possible.")
        return true
    end

    return true
end

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

  • 0


function rem(cid)

return doPlayerAddSkill(cid, 7, -10)

end

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

doPlayerAddSkill(cid, 7, 10)

doSendMagicEffect(getThingPos(cid), 1)

addEvent(rem, 2 * 60000, cid)

doRemoveItem(item.uid, 1)

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")

end

return true

end

 

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

  • 0

Não sei se essa função se aplica a magic level, nem a remover skill.

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
 
    if(getPlayerStorageValue(cid, 38213) - os.time() > 0) then
        doPlayerSendCancel(cid, "You need wait " .. getPlayerStorageValue(cid, 38213) - os.time() .. " sec.")
    end
 
    local magic = getPlayerMagLevel(cid)
    local pid = getPlayerGUID(cid)
    if(doPlayerAddSkill(cid, SKILL__MAGLEVEL, 10)) then
        doRemoveItem(item.uid, 1)
        doPlayerSendTextMessage(cid, 27, "You won +10 magic level skill points.")
        setPlayerStorageValue(cid, 38213, os.time() + 2 * 60 * 1000)
        addEvent(function()
                if isCreature(cid) then
                    doPlayerAddSkill(cid, SKILL__MAGLEVEL, - 10)
                else
                    db.executeQuery("UPDATE `players` SET `maglevel` = " .. magic .. " - 10 WHERE `id` = " .. pid)
                end
            end, 2 * 60)
    end
 
    return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Vai sempre dar bug e o cara vai poder manter os skills pelo que eu saiba. Pra usar esse tipo de comando, tem que usar um onLogin junto. Porque digamos que o cara dê logout, vai trocar o cid dele, então o addEvent não vai kickar ele. Daí, ele vai perder os skills np bd, mas no próximo save vai carregar os novos skills in-game e atualizar no bd. Pensando melhor aqui, talvez assim funcione:

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerStorageValue(cid, 129381) < os.time() then
		doPlayerAddMagLevel(cid, 10)
		doSendMagicEffect(getThingPos(cid), 1)
		addEvent(removeSkill, 2 * 60 * 1000, getCreatureName(cid), SKILL__MAGLEVEL, (getPlayerMagLevel(cid) - 10), getPlayerGUID(cid))
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu +10 no skill de Magic Level durante 2 minutos.")
		setPlayerStorageValue(cid, 129381, os.time() + 2 * 60)
	else
		doPlayerSendCancel(cid, "You must wait "..getPlayerStorageValue(cid, 129381) - os.time().." seconds before you can use this again.")
	end
	return true
end

function removeSkill(name, skill, amount, guid)
	local cid = getCreatureByName(name)
	if isCreature(cid) then
		doRemoveCreature(cid)
	end
    db.executeQuery("UPDATE `player_skills` SET `value` = "..amount.." WHERE `player_id` = "..guid.. " AND `skillid` = "..skill..";")
    return true
end

 

 

 

Mas continua dando problema se o servidor cair. O único jeito que eu conheço que realmente evita esse tipo de erro é fazendo um onLogin pra completar.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...