Ir para conteúdo

[Action] Pedra Invocação De Player


meubk

Posts Recomendados

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:



 

2w5ksk5.jpg

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 ;*

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

Pelo que eu vi , deve ser otima mesmo mais , pare para pensar .

 

Vamos supor que Eu morri . a pessoa q tiver a pedra vai usa no meu corpo la ai quando eu for para la ele me mata ?

 

Ex : O cara me mato , uso a pedra no meu corpo eu volto pro luga de onde morri e ele me mata de novo ? . intao tenq elaborar + . Mais fora isso fikou otimo .

Link para o comentário
Compartilhar em outros sites

Pelo que eu vi , deve ser otima mesmo mais , pare para pensar .

 

Vamos supor que Eu morri . a pessoa q tiver a pedra vai usa no meu corpo la ai quando eu for para la ele me mata ?

 

Ex : O cara me mato , uso a pedra no meu corpo eu volto pro luga de onde morri e ele me mata de novo ? . intao tenq elaborar + . Mais fora isso fikou otimo .

Link para o comentário
Compartilhar em outros sites

Creio que funfe em um serve 8.6 até por que não usei nenhuma função diferente da versão 8.6..

 

Sky e Demonholder, a checagem de mana está ai sim, aonde o Sky disse mesmo...

 

e enquanto o cara querer puxar pra te matar, eu estou fazendo aqui irei postar amanhã:

 

quando o player clicar no corpo ira mandar um convite para o player se ele ker ser invocado, tendo accept e reject..

 

Obrigado aos elogios..

 

Fui ;*

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...