Ir para conteúdo
  • 0

Item Que Da Vocação


jhonatanp

Pergunta

Gostaria de um script que quando você clica com o botao direito você muda sua vocação.

 

Explicando :

Crio uma quest e nesta quest vem um item chamado " NEW VOC " que o id é xxxx, após eu fazer esta quest eu recebi o item que o id xxxx intão eu aperto com o botão direito nele e mudo a minha vocação para a numero "xxx" mais apos usar o item é excluido ou seja como se fosse uma runa você usa em você e ela some.

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0
 
local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz esse, não testei, veja se funciona! Na pasta data/actions/scripts, você cria um arquivo chamado vocitem.lua, adicione isso dentro:

 

local voc = {
[1]=5, [2]=6, [3]=7, [4]=8}

function onUse (cid,item,frompos,item2,topos)
if item.itemid == XXX then
setPlayerStorageValue (cid,9339,1)
doPlayerSetVocation(cid, voc[(getPlayerVocation(cid)])
end
else
if getPlayerStorageValue (cid,9339) ~= 1 then
doPlayerSendTextMessage (cid,"Você já trocou sua vocação!")
end
return TRUE
end

 

Em actions.xml adicione essa tag:

 

<action itemid="XXX" event="script" value="vocitem.lua"/>

 

No script e na tag, aonde você encontrar as letra "XXX" basta mudar para o ID do seu item! E no ínicio do script aonde está os números, basta você mudar. Eu coloquei para knight virar elite, etc. Segunda Promotion entende? Você quer uma única vocation ou assim msm?

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

  • 0

#topic:

Procure uma linha +/- assim, e me mande a parte que tem ela.

doRemoveItem(item.uid)	

 

 

 

[color=#ff0000]local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end[/color]
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

Coisas inuteis.

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

  • 0

#topic:

Procure uma linha +/- assim, e me mande a parte que tem ela.

doRemoveItem(item.uid)	

 

 

 

[color=#ff0000]local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end[/color]
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

Coisas inuteis.

 

Coisas Inúteis?

Pelo que eu entendi do pedido ele quer um item que ao dar use with(tipo de runa) no player ele receba uma nova vocação.

Link para o comentário
Compartilhar em outros sites

  • 0

#topic:

Procure uma linha +/- assim, e me mande a parte que tem ela.

doRemoveItem(item.uid)	

 

 

 

[color=#ff0000]local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end[/color]
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

Coisas inuteis.

 

Coisas Inúteis?

Pelo que eu entendi do pedido ele quer um item que ao dar use with(tipo de runa) no player ele receba uma nova vocação.

 

Não estou falando do pedido, e sim da maneira que você criou ele. Você criou uma checagem para ver se é um player, mas na verdade é uma action, e outras criaturas não executam actions. Você deveria ter pensado nisso.

Link para o comentário
Compartilhar em outros sites

  • 0

iunix

Cara, preste atenção no script do caotic:

function onUse(cid, item, frompos, item2, topos)

O player fez o pedido de usar como uma runa nele mesmo, ou seja, (item2(use with...)).

 

caotic colocou:

if not isPlayer(item2.uid) then
if getCreatureName(item2.uid) ~= getCreatureName(cid) then

Para o player não usar o item (item2(use with...)) em um monstro ou em outro player, somente nele mesmo.

Quem deveria ter pensado nisso é voce.

Estou sem Rep - agora.

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

  • 0

local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

 

if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end

if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end

Duas checagens que poderiam ser substituídas por uma só

 

if getCreatureName(item2.uid) ~= getCreatureName(cid) then

 

Por que não usar direto assim?

if item2.uid ~= cid then

 

E o fato de não ter indentação só mostra que é um script de iniciante. Só acho que ele ser sádico e frio com os outros é abrir a porta para os outros serem sádicos e frios com ele.

 

 

function onUse(cid, item, frompos, item2, topos)
if cid ~= item2.uid then return doPlayerSendCancel(cid, "Você deve usar a runa em você mesmo.") end
doPlayerSetVocation(cid, 1)
return doRemoveItem(item.uid)	
end

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

  • 0

iunix

Tudo bem amigo, mas esse é um tópico de Pedido, ou seja, todos que quiserem ajudar podem dar suas idéias até que o autor se satisfaça.

caotic quis fazer desse modo, então não há o que questionar. Apenas faça do seu jeito em vez de atrapalhar a postagem com correções e comentários desnecessários.

 

jhonatanp

Você não expecificou corretamente quantas vocations seriam, então fiz 2 opções.

Uma promotion para cada vocation, ou seja, (druid(elder druid), sorcerer(master sorcerer), paladin(royal paladin), knight(elite knight).

Abra a pasta data/actions/scripts e crie um arquivo chamado itemvocation.lua

Adicione o script:

local config = {
voc = getPlayerVocation(cid),
notp = isPlayer(item2.iud),
cre1 = getCreatureName(item2.uid),
cre2 = getCreatureName(cid),
}
function onUse(cid, item, frompos, item2, topos)
if not config.notp or config.cre1 ~= config.cre2 then
doPlayerSendCancel(cid, "Você só pode usar em si mesmo.")
return false
end
if voc <= 4 and getPlayerItem(cid, item2.uid) >= 1 then
doPlayerRemoveItem(cid, item2.uid)
doPlayerSetVocation(cid, voc+4)
elseif voc >=5 then
doPlayerSendTextMessage(cid, 22, "Você já mudou de vocação.")
end
return true
end
end

 

ou, uma vocation expecífica para ser mudada a outra expecífica.

Adicione o script ao mesmo arquivo já criado como na opção anterior (itemvocation.lua):

local config = {
newvoc = 2,
oldvoc = 1,
notp = isPlayer(item2.iud),
cre1 = getCreatureName(item2.uid),
cre2 = getCreatureName(cid),
}
function onUse(cid, item, frompos, item2, topos)
if not config.notp or config.cre1 ~= config.cre2 then
doPlayerSendCancel(cid, "Você só pode usar em si mesmo.")
return false
end
if getPlayerVocation(cid) == config.oldvoc then
doPlayerRemoveItem(cid, item2.uid)
doPlayerSetVocation(cid, config.newvoc)
elseif getPlayerVocation(cid) == config.newvoc then
doPlayerSendTextMessage(cid, 22, "Você já mudou de vocação.")
end
return true
end
end

Em newvoc é o ID da nova vocation que o player receberá, e em oldvoc é o ID da vocation que o player precisa ter para mudar para a nova, ou seja, usar o item.

O resto, não modifique.

 

Agora na pasta data/actions abra o arquivo actions.xml

Adicione a tag:

<action itemid="xxxx" event="script" value="itemvocation.lua"/>

Em xxxx mude para o ID do item que será usado pelo player.

PS: A tag pode ser usada para ambas opções.

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

  • 0

Galera, por favor, sem discussões aqui. Se concentrem em apenas atender o pedido.

 

Iunix, talvez ele tenha identado o código com a tecla TAB, mas o CODE do XTibia quebra essa identação, só permite se usar a barra de espaço. Ou talvez simplesmente não tenha identado mesmo.

 

Bom, de qualquer maneira, apenas não fiquem discutindo.

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

  • 0

@Iunix

 

Você é usuario novo e ja está arrumando confusão? Evite fazer comentarios do tipo

 

Coisas inuteis.

 

Por favor não critique ninguem ou script de alguem, se o script dele estiver errado informe o erro, espero que seja seu ultimo aviso, se insistir em criticar ou ofender será negativado. Siga o conselho do Luck e não tera problemas.

Link para o comentário
Compartilhar em outros sites

  • 0

@Iunix

 

Você é usuario novo e ja está arrumando confusão? Evite fazer comentarios do tipo

 

Coisas inuteis.

 

Por favor não critique ninguem ou script de alguem, se o script dele estiver errado informe o erro, espero que seja seu ultimo aviso, se insistir em criticar ou ofender será negativado. Siga o conselho do Luck e não tera problemas.

 

@Yan18, não precisava comentar isso, eu já dei o aviso pra ele. E de qualquer maneira, ele tentou ajudar também, não vejo problemas em criticar o erro do outro, afinal é expondo os erros que você melhora.

 

OBS: Ele não é um user novo. Se você olhar a data de criação da conta, verá que ele é de 2007.

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

  • 0

@Iunix

 

Você é usuario novo e ja está arrumando confusão? Evite fazer comentarios do tipo

 

Coisas inuteis.

 

Por favor não critique ninguem ou script de alguem, se o script dele estiver errado informe o erro, espero que seja seu ultimo aviso, se insistir em criticar ou ofender será negativado. Siga o conselho do Luck e não tera problemas.

 

@Yan18, não precisava comentar isso, eu já dei o aviso pra ele. E de qualquer maneira, ele tentou ajudar também, não vejo problemas em criticar o erro do outro, afinal é expondo os erros que você melhora.

 

OBS: Ele não é um user novo. Se você olhar a data de criação da conta, verá que ele é de 2007.

 

Digo novo que ele está começando a postar agora, o usuario ja foi avisado, entao vamos parar por aqui, a partir de agora só poste se for referente ao tópico.

Link para o comentário
Compartilhar em outros sites

  • 0

#topic:

Procure uma linha +/- assim, e me mande a parte que tem ela.

doRemoveItem(item.uid)	

 

 

 

[color=#ff0000]local voca = 12 -- Mude para a vocação que quiser
function onUse(cid, item, frompos, item2, topos)
if not isPlayer(item2.uid) then
doPlayerSendCancel(cid, "Isto não e um player")
return false
end
if getCreatureName(item2.uid) ~= getCreatureName(cid) then
doPlayerSendCancel(cid, "Use a runa em você")
return false
end[/color]
doPlayerSetVocation(cid, voca)
doRemoveItem(item.uid)
return true
end

Coisas inuteis.

 

Coisas Inúteis?

Pelo que eu entendi do pedido ele quer um item que ao dar use with(tipo de runa) no player ele receba uma nova vocação.

 

Não estou falando do pedido, e sim da maneira que você criou ele. Você criou uma checagem para ver se é um player, mas na verdade é uma action, e outras criaturas não executam actions. Você deveria ter pensado nisso.

 

 

Já que estamos falando de coisas inúteis.

Já que retornei false.

E a mensagem:

doPlayerSendCancel(cid, "Use a runa em você")

Não sera exibida.

 

1 - Se quisesse diminuir o script poderia colocar um "and" na verificação mais seria com uma mensagem única.

2 - Não fui mal educado com nosso colega mais todos os usuários querem tudo de "mão beijada"

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...