Invocação de Player
Sabe quando você e seu amigo está caçando em um lugar muito longe, e você morre, e o espertinho de seu amigo fica vivo, não dá aquela raiva, de ter que voltar todo caminho, e ainda sozinho ? Pensando nisso, foi que eu tive uma ideia de uma Pedra, aonde seu amigo pode usar ela no seu corpo se você ainda estiver tiver online, e aceitar seu convite, você é teleportado para cima do corpo.
Observe a Imagem:

Bom, agora que já está explicado a ideia vamos ao script:
- Crie um arquivo com o nome de invoc.lua na pasta actions/scripts e cole o seguinte código:
local configs = { minLvL = 0, -- level minimo necessário[ 0 para não precisar ] mana = 0, -- mana necessária [ 0 para não precisar ] magicLvL = 0, -- magic level necessário [ 0 para não precisar ] vocs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, -- vocações que podem usar premium = false, -- precisa de premium [ true ou false ] removeCorpse = true, -- remover o corpo depois de invocar [ true or false ] removeStone = true, -- remover a pedra após usar [ true or false ] invite = true -- o dono do corpo precisa aceitar [ true or false ] } function SendMessageInvoc(cid, pid) if getPlayerStorageValue(pid, 22254) ~= 1 then return true end if not isCreature(cid) or not isCreature(pid) then return true end doPlayerSendTextMessage(pid, 27, "O Player "..getCreatureName(cid).." quer te invocar digite /invoc aceitar ou /invoc rejeitar.") addEvent(SendMessageInvoc, 10000, cid, pid) end function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) < configs.minLvL then return doPlayerSendCancel(cid, "Você precisa de level "..configs.minLvL.." para invocar alguem.") elseif getPlayerMana(cid) < configs.mana then return doPlayerSendCancel(cid, "Você precisa de "..configs.mana.." de mana para invocar alguem.") elseif getPlayerMagLevel(cid) < configs.magicLvL then return doPlayerSendCancel(cid, "Você precisa de magic level "..configs.magicLvL.." para invocar alguem.") elseif not isInArray(configs.vocs, getPlayerVocation(cid)) then return doPlayerSendCancel(cid, "Sua Vocação não é permitido invocar alguem.") elseif not isPremium(cid) and configs.premium then return doPlayerSendCancel(cid, "Você precisa de premium account para invocar alguem.") end if isCorpse(item2.uid) then if not getItemAttribute(item2.uid, "description") then return doPlayerSendCancel(cid, "Este não é corpo de um player.") end local name = (getItemAttribute(item2.uid, "description")):match("You recognize (.-)%.") local pid = getPlayerByName(name) if pid then if not configs.invite then doTeleportThing(pid, topos) doSendMagicEffect(topos, 10) doSendAnimatedText(topos, "Invoked", math.random(1, 250)) doPlayerSendTextMessage(cid, 27, "O Player "..name.." foi invocado com sucesso.") doPlayerSendTextMessage(pid, 27, "O Player "..getCreatureName(cid).." te invocou.") if configs.removeCorpse then doRemoveItem(item2.uid) end else if getPlayerStorageValue(pid, 22254) ~= 1 then setPlayerStorageValue(pid, 22254, 1) setPlayerStorageValue(pid, 22255, topos.x) setPlayerStorageValue(pid, 22256, topos.y) setPlayerStorageValue(pid, 22257, topos.z) if configs.removeCorpse then setPlayerStorageValue(pid, 22258, "yes") end setPlayerStorageValue(pid, 22259, cid) SendMessageInvoc(cid, pid) doPlayerSendTextMessage(cid, 27, "Você envio convite para "..name.." para ser invocado.") else return doPlayerSendCancel(cid, "Este corpo já foi invocado por alguem.") end end if configs.removeStone then doRemoveItem(item.uid, 1) end return doCreatureAddMana(cid, - configs.mana) else return doPlayerSendTextMessage(cid, 27, "O Player não esta online.") end else return doPlayerSendCancel(cid, "Isto não é um corpo.") end end
- Depois na pasta actions procure pelo arquivo actions.xml e adicione a tag:
<action itemid="8303" event="script" value="invoc.lua"/>
- Agora entre na pasta talkactions/scripts e crie outro arquivo com o nome de invoc.lua novamente e cole o código:
function onSay(cid, words, param) if getPlayerStorageValue(cid, 22254) == 1 then if param == "aceitar" then if not isPlayer(getPlayerStorageValue(cid, 22259)) then setPlayerStorageValue(cid, 22254, 0) doPlayerSendTextMessage(cid, 27, "O Player que te invocou não está mais online por isso foi cancelado o pedido.") end local pos = {x=getPlayerStorageValue(cid, 22255), y=getPlayerStorageValue(cid, 22256), z=getPlayerStorageValue(cid, 22257)} doTeleportThing(cid, pos) doSendMagicEffect(pos, 10) doSendAnimatedText(pos, "Invoked", math.random(1, 250)) if getPlayerStorageValue(cid, 22258) == "yes" then for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if isCorpse(tile.uid) then if (getItemAttribute(tile.uid, "description")):match("You recognize (.-)%.") == getCreatureName(cid) then doRemoveItem(tile.uid) break end end end end doPlayerSendTextMessage(cid, 27, "O Player "..getCreatureName(getPlayerStorageValue(cid, 22259)).." te invocou.") doPlayerSendTextMessage(getPlayerStorageValue(cid, 22259), 27, getCreatureName(cid).." foi invocado com sucesso.") setPlayerStorageValue(cid, 22254, 0) elseif param == "rejeitar" then if not isPlayer(getPlayerStorageValue(cid, 22259)) then setPlayerStorageValue(cid, 22254, 0) doPlayerSendTextMessage(cid, 27, "O Player que te invocou não está mais online por isso foi cancelado o pedido.") end doPlayerSendTextMessage(cid, 27, "Você rejeitou o pedido de "..getCreatureName(getPlayerStorageValue(cid, 22259))..".") doPlayerSendTextMessage(getPlayerStorageValue(cid, 22259), 27, getCreatureName(cid).." rejeitou seu pedido de invocação.") setPlayerStorageValue(cid, 22254, 0) end else doPlayerSendTextMessage(cid, 27, "Você não tem convites.") end return true end
- Depois na pasta talkactions procure o arquivo talkactions.xml e adicione a seguinte tag:
<talkaction words="/invoc" hide="yes" event="script" value="invoc.lua"/>
Segue as configurações no script, se vai remover o corpo, se vai remover a pedra, o level, magic level, premium, ou até mesmo se o player que vai ser invocado precisar aceitar algum convite, tudo pode ser configurado no script nesta parte:
local configs = { minLvL = 0, -- level minimo necessário[ 0 para não precisar ] mana = 0, -- mana necessária [ 0 para não precisar ] magicLvL = 0, -- magic level necessário [ 0 para não precisar ] vocs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, -- vocações que podem usar premium = false, -- precisa de premium [ true ou false ] removeCorpse = true, -- remover o corpo depois de invocar [ true or false ] removeStone = true, -- remover a pedra após usar [ true or false ] invite = true -- o dono do corpo precisa aceitar [ true or false ] }
Caso estiver usando o sistema de convite os comandos são:
-
/invoc aceitar
-
/invoc rejeitar
Bom eu deixei configurado com aquela pedra rosa como na foto, fica ao seu critério deixar ela ou escolher outra só mudar na tag do xml:
action itemid="8303"
Obrigado a todos, e se gostaram comente
Tchau ;*