RO
pedido

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

Por roriscrave, 20 de out. de 2013 em Scripts

resolvido
28
4.4k
20 de outubro de 2013 às 04:13

Ao dar use no item X, ganha 10 de magic level por 2minutos.

OBS: se der use duas vezes so aumenta 10 de magic.

fitaisolanteF
20 de outubro de 2013 às 04:41

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" />

20 de outubro de 2013 às 12:20

unfinished string near '")'

Editado Outubro 20 por roriscrave

RoksasR
20 de outubro de 2013 às 13:24

#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 Outubro 20 por Roksas

20 de outubro de 2013 às 16:36

 

#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.

RoksasR
20 de outubro de 2013 às 17:22

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
20 de outubro de 2013 às 18:41

 

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

fitaisolanteF
20 de outubro de 2013 às 19:00


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

20 de outubro de 2013 às 19:23

keilost ainda não adiciona o magic

LumusL
20 de outubro de 2013 às 21:49

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 Outubro 20 por Fawz

20 de outubro de 2013 às 23:27

Fawkz, quando da use a criatura toma kick e msm assim não adiciona

fitaisolanteF
21 de outubro de 2013 às 16:36


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 Outubro 21 por Keilost

21 de outubro de 2013 às 18:30

deu esse error

attemp do call field 'query' <a nil value>

SkymagnumS
21 de outubro de 2013 às 19:21

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

OmegaO
21 de outubro de 2013 às 19:43

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.