SI
dúvida

[Erro] Porta por vocação e nível.

Por SirUndead, 17 de dez. de 2012 em Scripts

resolvido
script
18
3.2k
SirUndeadS
17 de dezembro de 2012 às 17:09

Olá, alguem poderia me ajudar ?

Eu fiz uma quest, que quando o player chega ao nível 20 ele pode entrar na porta de sua vocação e pegar um set melhor do que o atual.

Mas acontece que apenas o nível funcionou na porta. A vocação deu erro e quando você abre o bau você ganha a bolsa com o set. Mas se você cliqua de novo vem outra bolsa com nada dentro.

 

Há 3 portas. Eu gostaria que cada uma tivese sua vocação. E só podera pegar o set uma vez.

Alguem pode me ajudar ?

Aqui vai meu script:

 

No actions.xml:

 

<action uniqueid="5559" script="vocdoor4.lua" />
<action uniqueid="5558" script="vocdoor3.lua" />
<action uniqueid="5557" script="vocdoor2.lua" />
 <action uniqueid="5555" script="boh.lua" />
 <action uniqueid="5507" script="equpkina.lua" />
 <action uniqueid="5509" script="equpmage.lua" />
 <action uniqueid="5508" script="equppala.lua" />

 

 

Os scripts do actions:

 

Set do knight:

 

function onUse(cid, item, frompos, item2, topos)
if item.uid == 5507 then
bag = doPlayerAddItem(cid, 10518, 1)
queststatus = getPlayerStorageValue(cid,5507)
if queststatus == -1 then
doPlayerSendTextMessage(cid,25,"Voce achou um set.")
doAddContainerItem(bag, 2173, 1)
doAddContainerItem(bag, 2459, 1)
doAddContainerItem(bag, 2477, 1)
doAddContainerItem(bag, 2489, 1)
setPlayerStorageValue(cid,5507,1)
else
oPlayerSendTextMessage(cid,25,"Voce ja fez esta quest.")
end
else
return 0
end
return 1
end

 

 

Set do paladin:

 

function onUse(cid, item, frompos, item2, topos)
if item.uid == 5508 then
bag = doPlayerAddItem(cid, 10518, 1)
queststatus = getPlayerStorageValue(cid,5508)
if queststatus == -1 then
doPlayerSendTextMessage(cid,25,"Voce achou um set.")
doAddContainerItem(bag, 2173, 1)
doAddContainerItem(bag, 8872, 1)
doAddContainerItem(bag, 2657, 1)
doAddContainerItem(bag, 2480, 1)
setPlayerStorageValue(cid,5508,1)
else
oPlayerSendTextMessage(cid,25,"Voce ja fez esta quest.")
end
else
return 0
end
return 1
end

 

 

Ser dos mage:

 

function onUse(cid, item, frompos, item2, topos)
if item.uid == 5509 then
bag = doPlayerAddItem(cid, 10518, 1)
queststatus = getPlayerStorageValue(cid,5509)
if queststatus == -1 then
doPlayerSendTextMessage(cid,25,"Voce achou um set.")
doAddContainerItem(bag, 2173, 1)
doAddContainerItem(bag, 7730, 1)
doAddContainerItem(bag, 7463, 1)
doAddContainerItem(bag, 10016, 1)
setPlayerStorageValue(cid,5509,1)
else
oPlayerSendTextMessage(cid,25,"Voce ja fez esta quest.")
end
else
return 0
end
return 1
end

 

 

 

Agora a da porta do kina:

 

---VocDoor-by over---
function onUse(cid, item, frompos, item2, topos)
PlayerVoc = getPlayerVocation(cid)
if PlayerVoc == 4 then
doTeleportThing(cid,{x=934, y=1034, z=8})
else
doPlayerSendCancel(cid,"Apenas knights podem passar por esta porta.")
return 1
end
end

 

 

Agora da porta do paladin:

[sPOLIER]

---VocDoor-by over---
function onUse(cid, item, frompos, item2, topos)
PlayerVoc = getPlayerVocation(cid)
if PlayerVoc == 3 then
doTeleportThing(cid,{x=932, y=1034, z=8})
else
doPlayerSendCancel(cid,"Apenas paladinos podem passar por esta porta.")
return 1
end
end

 

 

Agora da porta dos mage:

 

[sPOLIER]

---VocDoor-by over---
function onUse(cid, item, frompos, item2, topos)
PlayerVoc = getPlayerVocation(cid)
if PlayerVoc == 1 then
if PlayerVoc == 2 then
doTeleportThing(cid,{x=930, y=1034, z=8})
else
doPlayerSendCancel(cid,"Apenas Sorceres e Druids podem passar por esta porta.")
return 1
end
end

 

 

Eu coloquei os IDs nas portas e nos baus pelo Remeres Map Editor.

 

 

Alguem pode me dizer oque está errado ?

Ou arrumar e me mandar ?

Ou então arrumar outro script funcionando ...

Obrigado

17 de dezembro de 2012 às 17:36

Vou dar um exemplo, voce muda nno resto:

Vermelho -> Colocar ID da vocaçao de Knight

Verde -> Coloca ID da vocaçao Elite Knight

Knight:

 

 

 

 

 

 

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

if item.uid == 5507 then

queststatus = getPlayerStorageValue(cid,5507)

if queststatus == -1 and playervocation == 1 or playervocation == 2 then

bag = doPlayerAddItem(cid, 10518, 1)

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

else

doPlayerSendTextMessage(cid,25,"Voce ja fez esta quest.")

end

else

return 0

end

return 1

end

 

Agora na porta do kina poe assim:

Vermelho -> Id da vocaçao do Knight

Verde -> ID da vocaçao do Elite Knight

 

--VocDoor-by over---

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

PlayerVoc = getPlayerVocation(cid)

if PlayerVoc == 1 or PlayerVoc == 2 then

doTeleportThing(cid,{x=934, y=1034, z=8})

else

doPlayerSendCancel(cid,"Apenas knights podem passar por esta porta.")

return 1

end

end

Editado Dezembro 17 por roriscrave

SirUndeadS
17 de dezembro de 2012 às 20:33

Obrigado por postar,

estarei testando...

 

Aqui em:

 

if PlayerVoca == 1 or PlayerVoc == 2 then

 

O Voca está diferente de Voc

Está certo isso ? Por que deu este erro:

 

[17/12/2012 20:32:07] [Error - Action Interface]

[17/12/2012 20:32:07] data/actions/scripts/vocdoor1.lua:onUse

[17/12/2012 20:32:07] Description:

[17/12/2012 20:32:07] (luaDoPlayerSendCancel) Player not found

 

Quando eu apaguei o A funcionou.

Agora da erro no bau:

 

 

 

[17/12/2012 20:38:06] [Error - Action Interface]

[17/12/2012 20:38:06] data/actions/scripts/qek.lua:onUse

[17/12/2012 20:38:06] Description:

[17/12/2012 20:38:06] data/actions/scripts/qek.lua:13: attempt to call global 'oPlayerSendTextMessage' (a nil value)

[17/12/2012 20:38:06] stack traceback:

[17/12/2012 20:38:06] data/actions/scripts/qek.lua:13: in function <data/actions/scripts/qek.lua:1>

 

Coloquei um "d" antes do "oPlayerSendTextMessage" e funcinou mais ou menos, fica aparecendo a mensagem "Você já fez esta quest" mesmo eu não tendo feito.

 

 

-Obs: Eu apaguei todos os arquivos que eu postei na primeira mensagem e fiz 2 novos. Um pra porta e um pro bau e coloquei oque você me disse mas com a ID do knight e do elite knight. O nome do arquivo para a porta é "vocdoor1" e o do bau é "qek".

Editado Dezembro 17 por SirUndead

17 de dezembro de 2012 às 21:12

ta com erro nos 2 ainda? Sim realmente tinha um A a mais no script da vocaçao. E no outro estava faltando um D.

Ainda esta com erro?

SirUndeadS
17 de dezembro de 2012 às 21:22

Olha não aparece nenhum erro no distro.

Mas quando eu tento abrir o baú, não vem nenhum item pro seu iventário e aparece uma mensagem "Você já fez esta quest".

 

Por favor me ajuda !

17 de dezembro de 2012 às 21:31

Olha não aparece nenhum erro no distro.

Mas quando eu tento abrir o baú, não vem nenhum item pro seu iventário e aparece uma mensagem "Você já fez esta quest".

 

Por favor me ajuda !

 

Posta pra mim como ficou o script

SirUndeadS
17 de dezembro de 2012 às 21:48

Vou postar os 3 amigo:

 

Data>Actions>Scripts>qek (baú):

function onUse(cid, item, frompos, item2, topos)
if item.uid == 5507 then
queststatus = getPlayerStorageValue(cid,5507)
if queststatus == -1 and playervocation == 4 or playervocation == 8 then
bag = doPlayerAddItem(cid, 10518, 1)
doPlayerSendTextMessage(cid,22,"Voce achou um set.")
doAddContainerItem(bag, 2173, 1)
doAddContainerItem(bag, 2459, 1)
doAddContainerItem(bag, 2477, 1)
doAddContainerItem(bag, 2489, 1)
setPlayerStorageValue(cid,5507,1)
else
doPlayerSendTextMessage(cid,22,"Voce ja fez esta quest.")
end
else
return 0
end
return 1
end

 

Data>Actions>Scripts>vocdoor1(porta):

 

--VocDoor-by over---
function onUse(cid, item, frompos, item2, topos)
PlayerVoc = getPlayerVocation(cid)
if PlayerVoc == 4 or PlayerVoc == 8 then
doTeleportThing(cid,{x=934, y=1034, z=8})
else
doPlayerSendCancel(cid,"Apenas knights podem passar por esta porta.")
return 1
end
end

 

Data>Actions>actions.xml:

 

 

    <action uniqueid="5557" script="vocdoor1.lua" />
    <action uniqueid="5507" script="qek.lua" />

17 de dezembro de 2012 às 22:06

tente esse:

 

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

if item.uid == 5507 then

bag = doPlayerAddItem(cid, 10518, 1)

queststatus = getPlayerStorageValue(cid,5507)

if queststatus <= 0 then

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

end

end

end

end

SirUndeadS
17 de dezembro de 2012 às 22:15

Bom deu um erro no dristro por que tinha um "end" a mais, já tirei.. Testando.

Funcionou obrigado :D

Mas tem um problema.

Quando você abre o bau mesmo depois de ja ter pego os items. Ele da uma backpack pra sempre. Toda vez que você clika no bau da uma backpack vazia.

17 de dezembro de 2012 às 22:25
function onUse(cid, item, frompos, item2, topos)

queststatus = getPlayerStorageValue(cid,5507)

if item.uid == 5507 and queststatus <= 0 then

bag = doPlayerAddItem(cid, 10518, 1)

end

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

end

SirUndeadS
17 de dezembro de 2012 às 22:46

[17/12/2012 22:44:37] [Error - Action Interface]

[17/12/2012 22:44:37] data/actions/scripts/qek.lua:onUse

[17/12/2012 22:44:37] Description:

[17/12/2012 22:44:37] (luaDoAddContainerItem) Container not found

17 de dezembro de 2012 às 22:54

ultima chance rs

 

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

queststatus = getPlayerStorageValue(cid,5507)

if item.uid == 5507 and queststatus <= 0 then

bag = doPlayerAddItem(cid, 10518, 1)

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

end

end

Editado Dezembro 17 por roriscrave

SirUndeadS
17 de dezembro de 2012 às 23:34

É cara não deu não :/

Obrigado por tentar.

Estou quase conseguindo aqui com esse código:

 

 

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

if item.uid == 5507 then

queststatus = getPlayerStorageValue(cid,5507)

if queststatus == -1 then

bag = doPlayerAddItem(cid, 10518, 1)

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

else

doPlayerSendTextMessage(cid,22,"Você já fez esta quest.")

end

end

end

 

 

Mas o problema é que ele só da um item dentro da bag D:

 

Eu consegui com um script que com pouco da minha sabedoria montei com outros scripts:

O baú (estou postando pra quem também tem esse erro e caiu neste tópico a procura de uma solução):

 

Código:

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

if item.uid == 5507 then

queststatus = getPlayerStorageValue(cid,5507)

if queststatus == -1 then

bag = doPlayerAddItem(cid, 10518, 1)

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doAddContainerItem(bag, 2173, 1)

doAddContainerItem(bag, 2459, 1)

doAddContainerItem(bag, 2477, 1)

doAddContainerItem(bag, 2489, 1)

setPlayerStorageValue(cid,5507,1)

else

doPlayerSendTextMessage(cid,22,"Você já fez esta quest.")

end

end

end

AkatsukyiA
18 de dezembro de 2012 às 12:57

Aqui cara , fiz esse , testado e funcionando , testei em 8.6

 

 

<action actionid="7345" event="script" value="vocdoor.lua"/> -- action da door

<action uniqueid="5557" event="script" value="setkina.lua"/> -- action do set de knight

 

 

Aqui vai script da porta de knight

 

 

 

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

PlayerVoc = getPlayerVocation(cid)

if PlayerVoc == 4 then

doTeleportThing(cid,{x=71, y=32, z=8})

else

doPlayerSendCancel(cid,"Apenas Knights podem passar por esta porta.")

end

return 1

end

 

 

Aqui vai o script do set

 

 

 

 

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

queststatus = getPlayerStorageValue(cid,5507)

if item.uid == 5557 and queststatus == -1 then

doPlayerSendTextMessage(cid,25,"Voce achou um set.")

doPlayerAddItem(cid, 2160, 5)

setPlayerStorageValue(cid,5507,1)

else

doPlayerSendTextMessage(cid,25,"Voce ja fez esta quest.")

end

return 1

end

 

 

Pra colocar mais itens é só você adicionar mais disso

doPlayerAddItem(cid, 2160, 5) -- 2160 é o item e o 5 é a quantidade.

Lembrando que testei e está funcionando sem nenhum erro, postei hj pq ontem n deu

e você tem que fazer o mesmo com as outras vocações

 

Ajudei ? REP+

SirUndeadS
19 de dezembro de 2012 às 05:24

Já resolvi amigo obrigado.