roriscrave 21 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 Ao dar use no item X, ganha 10 de magic level por 2minutos. OBS: se der use duas vezes so aumenta 10 de magic. Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/ Compartilhar em outros sites More sharing options...
0 fitaisolante 24 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574324 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 20, 2013 Autor Share Postado Outubro 20, 2013 (editado) unfinished string near '")' Editado Outubro 20, 2013 por roriscrave Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574369 Compartilhar em outros sites More sharing options...
0 Roksas 846 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 (editado) #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, 2013 por Roksas Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574390 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 20, 2013 Autor Share Postado Outubro 20, 2013 #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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574462 Compartilhar em outros sites More sharing options...
0 Roksas 846 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574481 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 20, 2013 Autor Share Postado Outubro 20, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574532 Compartilhar em outros sites More sharing options...
0 fitaisolante 24 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574538 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 20, 2013 Autor Share Postado Outubro 20, 2013 keilost ainda não adiciona o magic Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574546 Compartilhar em outros sites More sharing options...
0 Lumus 254 Postado Outubro 20, 2013 Share Postado Outubro 20, 2013 (editado) 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, 2013 por Fawz Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574596 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 21, 2013 Autor Share Postado Outubro 21, 2013 Fawkz, quando da use a criatura toma kick e msm assim não adiciona Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574629 Compartilhar em outros sites More sharing options...
0 fitaisolante 24 Postado Outubro 21, 2013 Share Postado Outubro 21, 2013 (editado) 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, 2013 por Keilost Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574821 Compartilhar em outros sites More sharing options...
0 roriscrave 21 Postado Outubro 21, 2013 Autor Share Postado Outubro 21, 2013 deu esse error attemp do call field 'query' <a nil value> Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574858 Compartilhar em outros sites More sharing options...
0 Skymagnum 234 Postado Outubro 21, 2013 Share Postado Outubro 21, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574876 Compartilhar em outros sites More sharing options...
0 Omega 377 Postado Outubro 21, 2013 Share Postado Outubro 21, 2013 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 https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574889 Compartilhar em outros sites More sharing options...
0 Skymagnum 234 Postado Outubro 21, 2013 Share Postado Outubro 21, 2013 N vai mano, se o kra loga e removido pela db. Link para o comentário https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/#findComment-1574895 Compartilhar em outros sites More sharing options...
Pergunta
roriscrave 21
Ao dar use no item X, ganha 10 de magic level por 2minutos.
OBS: se der use duas vezes so aumenta 10 de magic.
Link para o comentário
https://xtibia.com/forum/topic/222904-item-que-ao-dar-use-ganhe-10-de-magic-level-por-tempo/Compartilhar em outros sites
27 respostass a esta questão
Posts Recomendados